summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-03-02 10:37:28 +0000
committerChristopher Baines <mail@cbaines.net>2023-03-02 10:55:08 +0000
commit7df09ee0ab3e7962ef27859ce87e06a323059284 (patch)
treed81334f742ddcb9a1ee63961ca6410922980af1c
parent2ac51ec99b58b50c08ba719a8c7e9dba0330b065 (diff)
parentaf95f2d8f98eb2c8c64954bb2fd0b70838899174 (diff)
downloadguix-7df09ee0ab3e7962ef27859ce87e06a323059284.tar.gz
Merge remote-tracking branch 'savannah/master' into core-updates
Conflicts:
	gnu/local.mk
	gnu/packages/autotools.scm
	gnu/packages/cmake.scm
	gnu/packages/gnuzilla.scm
	gnu/packages/haskell.scm
	gnu/packages/pdf.scm
	gnu/packages/python-xyz.scm
	gnu/packages/samba.scm
	gnu/packages/tex.scm
	gnu/packages/tls.scm
	gnu/packages/wxwidgets.scm
-rw-r--r--.dir-locals.el6
-rw-r--r--.patman1
-rw-r--r--Makefile.am4
-rw-r--r--doc/guix.texi620
-rwxr-xr-xetc/guix-install.sh25
-rw-r--r--etc/news.scm45
-rw-r--r--etc/release-manifest.scm2
-rw-r--r--etc/snippets/yas/scheme-mode/guix-news-entry9
-rw-r--r--etc/teams.scm.in17
-rw-r--r--gnu/build/linux-container.scm17
-rw-r--r--gnu/home/services/fontutils.scm18
-rw-r--r--gnu/local.mk41
-rw-r--r--gnu/packages/abiword.scm1
-rw-r--r--gnu/packages/accessibility.scm47
-rw-r--r--gnu/packages/ada.scm6
-rw-r--r--gnu/packages/admin.scm160
-rw-r--r--gnu/packages/agda.scm6
-rw-r--r--gnu/packages/algebra.scm14
-rw-r--r--gnu/packages/antivirus.scm4
-rw-r--r--gnu/packages/apl.scm44
-rw-r--r--gnu/packages/apr.scm4
-rw-r--r--gnu/packages/aspell.scm14
-rw-r--r--gnu/packages/assembly.scm4
-rw-r--r--gnu/packages/astronomy.scm134
-rw-r--r--gnu/packages/audio.scm174
-rw-r--r--gnu/packages/authentication.scm2
-rw-r--r--gnu/packages/autotools.scm2
-rw-r--r--gnu/packages/aux-files/emacs/guix-emacs.el7
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-i686.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/4.14-x86_64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-i686.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/4.19-x86_64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-arm.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-arm64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-i686.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-x86_64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-arm.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-arm64.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-i686.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/5.15-x86_64.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-arm.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-arm64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-i686.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.4-x86_64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/6.1-arm.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/6.1-arm64.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/6.1-i686.conf4
-rw-r--r--gnu/packages/aux-files/linux-libre/6.1-x86_64.conf4
-rw-r--r--gnu/packages/backup.scm29
-rw-r--r--gnu/packages/barrier.scm1
-rw-r--r--gnu/packages/base.scm3
-rw-r--r--gnu/packages/bdw-gc.scm12
-rw-r--r--gnu/packages/bioconductor.scm604
-rw-r--r--gnu/packages/bioinformatics.scm882
-rw-r--r--gnu/packages/bittorrent.scm6
-rw-r--r--gnu/packages/bootloaders.scm20
-rw-r--r--gnu/packages/bootstrap.scm1
-rw-r--r--gnu/packages/bqn.scm1
-rw-r--r--gnu/packages/build-tools.scm5
-rw-r--r--gnu/packages/busybox.scm6
-rw-r--r--gnu/packages/c.scm11
-rw-r--r--gnu/packages/cdrom.scm8
-rw-r--r--gnu/packages/check.scm176
-rw-r--r--gnu/packages/chemistry.scm3
-rw-r--r--gnu/packages/chez.scm13
-rw-r--r--gnu/packages/cmake.scm17
-rw-r--r--gnu/packages/code.scm20
-rw-r--r--gnu/packages/commencement.scm2
-rw-r--r--gnu/packages/compression.scm27
-rw-r--r--gnu/packages/configuration-management.scm2
-rw-r--r--gnu/packages/containers.scm49
-rw-r--r--gnu/packages/coq.scm1
-rw-r--r--gnu/packages/cpp.scm25
-rw-r--r--gnu/packages/cran.scm1708
-rw-r--r--gnu/packages/crates-io.scm305
-rw-r--r--gnu/packages/cross-base.scm1
-rw-r--r--gnu/packages/crypto.scm4
-rw-r--r--gnu/packages/cups.scm36
-rw-r--r--gnu/packages/curl.scm8
-rw-r--r--gnu/packages/databases.scm20
-rw-r--r--gnu/packages/datastructures.scm51
-rw-r--r--gnu/packages/debian.scm22
-rw-r--r--gnu/packages/debug.scm39
-rw-r--r--gnu/packages/dhall.scm168
-rw-r--r--gnu/packages/dictionaries.scm6
-rw-r--r--gnu/packages/disk.scm10
-rw-r--r--gnu/packages/django.scm2
-rw-r--r--gnu/packages/djvu.scm4
-rw-r--r--gnu/packages/dns.scm140
-rw-r--r--gnu/packages/docbook.scm4
-rw-r--r--gnu/packages/docker.scm82
-rw-r--r--gnu/packages/documentation.scm2
-rw-r--r--gnu/packages/ebook.scm6
-rw-r--r--gnu/packages/education.scm8
-rw-r--r--gnu/packages/electronics.scm2
-rw-r--r--gnu/packages/elm.scm5
-rw-r--r--gnu/packages/emacs-xyz.scm1211
-rw-r--r--gnu/packages/emacs.scm74
-rw-r--r--gnu/packages/embedded.scm2
-rw-r--r--gnu/packages/emulators.scm58
-rw-r--r--gnu/packages/engineering.scm104
-rw-r--r--gnu/packages/enlightenment.scm145
-rw-r--r--gnu/packages/erlang.scm6
-rw-r--r--gnu/packages/fabric-management.scm102
-rw-r--r--gnu/packages/file-systems.scm40
-rw-r--r--gnu/packages/finance.scm339
-rw-r--r--gnu/packages/firmware.scm9
-rw-r--r--gnu/packages/flashing-tools.scm4
-rw-r--r--gnu/packages/fltk.scm2
-rw-r--r--gnu/packages/fonts.scm70
-rw-r--r--gnu/packages/fontutils.scm6
-rw-r--r--gnu/packages/fpga.scm155
-rw-r--r--gnu/packages/freedesktop.scm13
-rw-r--r--gnu/packages/ftp.scm2
-rw-r--r--gnu/packages/game-development.scm12
-rw-r--r--gnu/packages/games.scm96
-rw-r--r--gnu/packages/gcc.scm12
-rw-r--r--gnu/packages/gd.scm21
-rw-r--r--gnu/packages/geo.scm54
-rw-r--r--gnu/packages/ghostscript.scm1
-rw-r--r--gnu/packages/gimp.scm13
-rw-r--r--gnu/packages/gl.scm31
-rw-r--r--gnu/packages/gnome-xyz.scm134
-rw-r--r--gnu/packages/gnome.scm129
-rw-r--r--gnu/packages/gnunet.scm54
-rw-r--r--gnu/packages/gnustep.scm6
-rw-r--r--gnu/packages/gnuzilla.scm604
-rw-r--r--gnu/packages/golang.scm846
-rw-r--r--gnu/packages/graph.scm39
-rw-r--r--gnu/packages/graphics.scm269
-rw-r--r--gnu/packages/graphviz.scm6
-rw-r--r--gnu/packages/gstreamer.scm28
-rw-r--r--gnu/packages/gtk.scm4
-rw-r--r--gnu/packages/guile-xyz.scm88
-rw-r--r--gnu/packages/guile.scm6
-rw-r--r--gnu/packages/hardware.scm23
-rw-r--r--gnu/packages/haskell-apps.scm627
-rw-r--r--gnu/packages/haskell-check.scm784
-rw-r--r--gnu/packages/haskell-crypto.scm352
-rw-r--r--gnu/packages/haskell-web.scm1454
-rw-r--r--gnu/packages/haskell-xyz.scm11595
-rw-r--r--gnu/packages/haskell.scm39
-rw-r--r--gnu/packages/hexedit.scm4
-rw-r--r--gnu/packages/hunspell.scm14
-rw-r--r--gnu/packages/ibus.scm33
-rw-r--r--gnu/packages/idris.scm14
-rw-r--r--gnu/packages/image-processing.scm2
-rw-r--r--gnu/packages/image-viewers.scm34
-rw-r--r--gnu/packages/image.scm161
-rw-r--r--gnu/packages/instrumentation.scm28
-rw-r--r--gnu/packages/irc.scm76
-rw-r--r--gnu/packages/jami.scm120
-rw-r--r--gnu/packages/java-bootstrap.scm4
-rw-r--r--gnu/packages/java-maths.scm1
-rw-r--r--gnu/packages/java-xml.scm6
-rw-r--r--gnu/packages/java.scm36
-rw-r--r--gnu/packages/javascript.scm6
-rw-r--r--gnu/packages/jemalloc.scm2
-rw-r--r--gnu/packages/julia-jll.scm118
-rw-r--r--gnu/packages/julia-xyz.scm138
-rw-r--r--gnu/packages/julia.scm15
-rw-r--r--gnu/packages/kde-frameworks.scm124
-rw-r--r--gnu/packages/kde-games.scm2
-rw-r--r--gnu/packages/kde-internet.scm2
-rw-r--r--gnu/packages/kde-plasma.scm1
-rw-r--r--gnu/packages/kde-systemtools.scm4
-rw-r--r--gnu/packages/kde.scm1
-rw-r--r--gnu/packages/key-mon.scm28
-rw-r--r--gnu/packages/kodi.scm2
-rw-r--r--gnu/packages/language.scm5
-rw-r--r--gnu/packages/lego.scm2
-rw-r--r--gnu/packages/lesstif.scm42
-rw-r--r--gnu/packages/libcanberra.scm2
-rw-r--r--gnu/packages/libdaemon.scm2
-rw-r--r--gnu/packages/libffi.scm2
-rw-r--r--gnu/packages/libreoffice.scm29
-rw-r--r--gnu/packages/libusb.scm38
-rw-r--r--gnu/packages/linphone.scm4
-rw-r--r--gnu/packages/linux.scm171
-rw-r--r--gnu/packages/lisp-check.scm4
-rw-r--r--gnu/packages/lisp-xyz.scm990
-rw-r--r--gnu/packages/lisp.scm139
-rw-r--r--gnu/packages/llvm.scm9
-rw-r--r--gnu/packages/logging.scm2
-rw-r--r--gnu/packages/lua.scm4
-rw-r--r--gnu/packages/lxqt.scm22
-rw-r--r--gnu/packages/machine-learning.scm61
-rw-r--r--gnu/packages/mail.scm122
-rw-r--r--gnu/packages/man.scm4
-rw-r--r--gnu/packages/maths.scm197
-rw-r--r--gnu/packages/matrix.scm37
-rw-r--r--gnu/packages/mcrypt.scm6
-rw-r--r--gnu/packages/mes.scm6
-rw-r--r--gnu/packages/messaging.scm112
-rw-r--r--gnu/packages/minetest.scm3
-rw-r--r--gnu/packages/moe.scm6
-rw-r--r--gnu/packages/mold.scm123
-rw-r--r--gnu/packages/monitoring.scm7
-rw-r--r--gnu/packages/mp3.scm14
-rw-r--r--gnu/packages/mpd.scm116
-rw-r--r--gnu/packages/mpi.scm211
-rw-r--r--gnu/packages/multiprecision.scm2
-rw-r--r--gnu/packages/music.scm576
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/ncdu.scm8
-rw-r--r--gnu/packages/ncurses.scm2
-rw-r--r--gnu/packages/netpbm.scm2
-rw-r--r--gnu/packages/networking.scm128
-rw-r--r--gnu/packages/nfs.scm3
-rw-r--r--gnu/packages/node-xyz.scm2
-rw-r--r--gnu/packages/nss.scm38
-rw-r--r--gnu/packages/ntp.scm2
-rw-r--r--gnu/packages/ocaml.scm973
-rw-r--r--gnu/packages/ocr.scm1
-rw-r--r--gnu/packages/opencl.scm19
-rw-r--r--gnu/packages/orange.scm2
-rw-r--r--gnu/packages/package-management.scm53
-rw-r--r--gnu/packages/parallel.scm8
-rw-r--r--gnu/packages/patches/azr3-remove-lash.patch191
-rw-r--r--gnu/packages/patches/azr3.patch12
-rw-r--r--gnu/packages/patches/bees-beesd-honor-destdir-on-installation.patch40
-rw-r--r--gnu/packages/patches/cabal-install-base16-bytestring1.0.patch29
-rw-r--r--gnu/packages/patches/cabal-install-ghc8.10.patch393
-rw-r--r--gnu/packages/patches/ddclient-skip-test.patch43
-rw-r--r--gnu/packages/patches/elm-ghc9.2.patch187
-rw-r--r--gnu/packages/patches/emacs-pasp-mode-quote-file-names.patch20
-rw-r--r--gnu/packages/patches/esmini-no-clutter-log.patch30
-rw-r--r--gnu/packages/patches/esmini-use-pkgconfig.patch541
-rw-r--r--gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch35
-rw-r--r--gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch303
-rw-r--r--gnu/packages/patches/ghc-bytestring-handle-ghc9.patch67
-rw-r--r--gnu/packages/patches/icecat-makeicecat.patch10
-rw-r--r--gnu/packages/patches/jami-libjami-headers-search.patch18
-rw-r--r--gnu/packages/patches/ngless-unliftio.patch66
-rw-r--r--gnu/packages/patches/onionshare-cli-async-mode.patch25
-rw-r--r--gnu/packages/patches/opencascade-oce-glibc-2.26.patch62
-rw-r--r--gnu/packages/patches/opentaxsolver-file-browser-fix.patch58
-rw-r--r--gnu/packages/patches/php-bug-74093-test.patch48
-rw-r--r--gnu/packages/patches/php-curl-compat.patch17
-rw-r--r--gnu/packages/patches/php-fix-streams-copy-length.patch52
-rw-r--r--gnu/packages/patches/qpdfview-qt515-compat.patch17
-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/qtwebkit-pbutils-include.patch15
-rw-r--r--gnu/packages/patches/racket-backport-8.7-pkg-strip.patch90
-rw-r--r--gnu/packages/patches/scsh-nonstring-search-path.patch15
-rw-r--r--gnu/packages/patches/spice-vdagent-glib-2.68.patch112
-rw-r--r--gnu/packages/patches/virglrenderer-CVE-2017-6386.patch54
-rw-r--r--gnu/packages/patches/wpa-supplicant-dbus-group-policy.patch23
-rw-r--r--gnu/packages/patches/xf86-video-qxl-fix-build.patch101
-rw-r--r--gnu/packages/patches/xf86-video-tga-remove-mibstore.patch34
-rw-r--r--gnu/packages/patches/xf86-video-voodoo-pcitag.patch34
-rw-r--r--gnu/packages/patches/xmonad-dynamic-linking.patch24
-rw-r--r--gnu/packages/patches/xmonad-next-dynamic-linking.patch16
-rw-r--r--gnu/packages/pdf.scm68
-rw-r--r--gnu/packages/perl.scm32
-rw-r--r--gnu/packages/photo.scm6
-rw-r--r--gnu/packages/php.scm56
-rw-r--r--gnu/packages/plan9.scm2
-rw-r--r--gnu/packages/plotutils.scm8
-rw-r--r--gnu/packages/popt.scm4
-rw-r--r--gnu/packages/profiling.scm4
-rw-r--r--gnu/packages/pulseaudio.scm2
-rw-r--r--gnu/packages/purescript.scm172
-rw-r--r--gnu/packages/python-check.scm67
-rw-r--r--gnu/packages/python-web.scm52
-rw-r--r--gnu/packages/python-xyz.scm316
-rw-r--r--gnu/packages/python.scm25
-rw-r--r--gnu/packages/qt.scm164
-rw-r--r--gnu/packages/racket.scm46
-rw-r--r--gnu/packages/radio.scm24
-rw-r--r--gnu/packages/raspberry-pi.scm2
-rw-r--r--gnu/packages/rdf.scm6
-rw-r--r--gnu/packages/regex.scm2
-rw-r--r--gnu/packages/robotics.scm1
-rw-r--r--gnu/packages/rsync.scm2
-rw-r--r--gnu/packages/ruby.scm20
-rw-r--r--gnu/packages/rust.scm1
-rw-r--r--gnu/packages/samba.scm6
-rw-r--r--gnu/packages/scheme.scm138
-rw-r--r--gnu/packages/screen.scm2
-rw-r--r--gnu/packages/scsi.scm2
-rw-r--r--gnu/packages/sdl.scm4
-rw-r--r--gnu/packages/security-token.scm6
-rw-r--r--gnu/packages/shells.scm10
-rw-r--r--gnu/packages/shellutils.scm4
-rw-r--r--gnu/packages/simulation.scm109
-rw-r--r--gnu/packages/smalltalk.scm2
-rw-r--r--gnu/packages/speech.scm2
-rw-r--r--gnu/packages/spice.scm234
-rw-r--r--gnu/packages/ssh.scm90
-rw-r--r--gnu/packages/stalonetray.scm2
-rw-r--r--gnu/packages/statistics.scm217
-rw-r--r--gnu/packages/sugar.scm276
-rw-r--r--gnu/packages/swig.scm2
-rw-r--r--gnu/packages/sync.scm32
-rw-r--r--gnu/packages/syncthing.scm1
-rw-r--r--gnu/packages/syndication.scm1
-rw-r--r--gnu/packages/task-management.scm2
-rw-r--r--gnu/packages/tcl.scm6
-rw-r--r--gnu/packages/telegram.scm1
-rw-r--r--gnu/packages/terminals.scm47
-rw-r--r--gnu/packages/tex.scm128
-rw-r--r--gnu/packages/texinfo.scm25
-rw-r--r--gnu/packages/text-editors.scm88
-rw-r--r--gnu/packages/textutils.scm23
-rw-r--r--gnu/packages/tls.scm9
-rw-r--r--gnu/packages/tor.scm25
-rw-r--r--gnu/packages/tree-sitter.scm475
-rw-r--r--gnu/packages/tv.scm2
-rw-r--r--gnu/packages/unicode.scm2
-rw-r--r--gnu/packages/upnp.scm2
-rw-r--r--gnu/packages/valgrind.scm22
-rw-r--r--gnu/packages/version-control.scm72
-rw-r--r--gnu/packages/video.scm100
-rw-r--r--gnu/packages/vim.scm11
-rw-r--r--gnu/packages/virtualization.scm12
-rw-r--r--gnu/packages/vpn.scm2
-rw-r--r--gnu/packages/vulkan.scm13
-rw-r--r--gnu/packages/w3m.scm6
-rw-r--r--gnu/packages/web-browsers.scm17
-rw-r--r--gnu/packages/web.scm128
-rw-r--r--gnu/packages/webkit.scm7
-rw-r--r--gnu/packages/wine.scm320
-rw-r--r--gnu/packages/wm.scm425
-rw-r--r--gnu/packages/wv.scm2
-rw-r--r--gnu/packages/wxwidgets.scm49
-rw-r--r--gnu/packages/xdisorg.scm120
-rw-r--r--gnu/packages/xfce.scm47
-rw-r--r--gnu/packages/xfig.scm4
-rw-r--r--gnu/packages/xml.scm14
-rw-r--r--gnu/packages/xorg.scm343
-rw-r--r--gnu/packages/zig-xyz.scm2
-rw-r--r--gnu/packages/zig.scm95
-rw-r--r--gnu/services/audio.scm902
-rw-r--r--gnu/services/base.scm87
-rw-r--r--gnu/services/configuration.scm3
-rw-r--r--gnu/services/desktop.scm107
-rw-r--r--gnu/services/guix.scm85
-rw-r--r--gnu/services/lightdm.scm2
-rw-r--r--gnu/services/monitoring.scm6
-rw-r--r--gnu/services/networking.scm64
-rw-r--r--gnu/services/telephony.scm8
-rw-r--r--gnu/system.scm58
-rw-r--r--gnu/system/shadow.scm3
-rw-r--r--gnu/tests/audio.scm53
-rw-r--r--gnu/tests/ganeti.scm26
-rw-r--r--guix/build-system/cargo.scm1
-rw-r--r--guix/build-system/copy.scm1
-rw-r--r--guix/build-system/dune.scm1
-rw-r--r--guix/build-system/font.scm1
-rw-r--r--guix/build-system/guile.scm2
-rw-r--r--guix/build-system/haskell.scm5
-rw-r--r--guix/build-system/meson.scm13
-rw-r--r--guix/build-system/ocaml.scm1
-rw-r--r--guix/build-system/ruby.scm1
-rw-r--r--guix/build-system/scons.scm1
-rw-r--r--guix/build-system/texlive.scm1
-rw-r--r--guix/build-system/tree-sitter.scm195
-rw-r--r--guix/build-system/waf.scm1
-rw-r--r--guix/build/haskell-build-system.scm136
-rw-r--r--guix/build/syscalls.scm8
-rw-r--r--guix/build/tree-sitter-build-system.scm153
-rw-r--r--guix/channels.scm9
-rw-r--r--guix/cpio.scm10
-rw-r--r--guix/download.scm6
-rw-r--r--guix/git.scm26
-rw-r--r--guix/import/cran.scm66
-rw-r--r--guix/import/hackage.scm21
-rw-r--r--guix/import/stackage.scm6
-rw-r--r--guix/licenses.scm2
-rw-r--r--guix/progress.scm45
-rw-r--r--guix/rpm.scm630
-rw-r--r--guix/scripts.scm4
-rw-r--r--guix/scripts/build.scm18
-rw-r--r--guix/scripts/container/exec.scm10
-rw-r--r--guix/scripts/describe.scm6
-rw-r--r--guix/scripts/environment.scm4
-rw-r--r--guix/scripts/home.scm8
-rw-r--r--guix/scripts/home/edit.scm6
-rw-r--r--guix/scripts/import.scm5
-rw-r--r--guix/scripts/offload.scm7
-rw-r--r--guix/scripts/pack.scm564
-rw-r--r--guix/scripts/package.scm6
-rw-r--r--guix/scripts/pull.scm6
-rw-r--r--guix/scripts/repl.scm1
-rw-r--r--guix/scripts/shell.scm10
-rw-r--r--guix/scripts/system.scm9
-rw-r--r--guix/scripts/system/edit.scm6
-rw-r--r--guix/ssh.scm2
-rw-r--r--guix/status.scm18
-rw-r--r--guix/ui.scm49
-rw-r--r--guix/utils.scm8
-rw-r--r--po/packages/POTFILES.in1
-rw-r--r--tests/containers.scm53
-rw-r--r--tests/guix-pack-relocatable.sh6
-rw-r--r--tests/guix-pack.sh5
-rw-r--r--tests/hackage.scm5
-rw-r--r--tests/pack.scm368
-rw-r--r--tests/rpm.scm86
402 files changed, 27208 insertions, 15722 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index 47a4ccd2bb..b8b0fec4ca 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -61,7 +61,7 @@
    (eval . (put 'eval-when 'scheme-indent-function 1))
    (eval . (put 'call-with-prompt 'scheme-indent-function 1))
    (eval . (put 'test-assert 'scheme-indent-function 1))
-   (eval . (put 'test-assertm 'scheme-indent-function 1))
+   (eval . (put 'test-assertm 'scheme-indent-function 2))
    (eval . (put 'test-equalm 'scheme-indent-function 1))
    (eval . (put 'test-equal 'scheme-indent-function 1))
    (eval . (put 'test-eq 'scheme-indent-function 1))
@@ -72,6 +72,9 @@
    (eval . (put 'substitute* 'scheme-indent-function 1))
    (eval . (put 'match-record 'scheme-indent-function 2))
 
+   ;; TODO: Contribute these to Emacs' scheme-mode.
+   (eval . (put 'let-keywords 'scheme-indent-function 3))
+
    ;; 'modify-inputs' and its keywords.
    (eval . (put 'modify-inputs 'scheme-indent-function 1))
    (eval . (put 'replace 'scheme-indent-function 1))
@@ -94,6 +97,7 @@
    (eval . (put 'origin 'scheme-indent-function 0))
    (eval . (put 'build-system 'scheme-indent-function 0))
    (eval . (put 'bag 'scheme-indent-function 0))
+   (eval . (put 'computed-file 'scheme-indent-function 1))
    (eval . (put 'gexp->derivation 'scheme-indent-function 1))
    (eval . (put 'graft 'scheme-indent-function 0))
    (eval . (put 'operating-system 'scheme-indent-function 0))
diff --git a/.patman b/.patman
index 20c3362ac1..953bf72392 100644
--- a/.patman
+++ b/.patman
@@ -8,3 +8,4 @@ add_signoff: False
 get_maintainer_script: etc/teams.scm get-maintainer
 # TODO: enable check_patch
 check_patch: False
+ignore_bad_tags: True
diff --git a/Makefile.am b/Makefile.am
index a5b57ce11c..681f1b9555 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -111,6 +111,7 @@ MODULES =					\
   guix/derivations.scm				\
   guix/grafts.scm				\
   guix/repl.scm					\
+  guix/rpm.scm					\
   guix/transformations.scm			\
   guix/inferior.scm				\
   guix/describe.scm				\
@@ -179,6 +180,7 @@ MODULES =					\
   guix/build-system/ruby.scm			\
   guix/build-system/scons.scm			\
   guix/build-system/texlive.scm			\
+  guix/build-system/tree-sitter.scm		\
   guix/build-system/trivial.scm			\
   guix/ftp-client.scm				\
   guix/http-client.scm				\
@@ -235,6 +237,7 @@ MODULES =					\
   guix/build/ruby-build-system.scm		\
   guix/build/scons-build-system.scm		\
   guix/build/texlive-build-system.scm		\
+  guix/build/tree-sitter-build-system.scm	\
   guix/build/waf-build-system.scm		\
   guix/build/haskell-build-system.scm		\
   guix/build/julia-build-system.scm		\
@@ -534,6 +537,7 @@ SCM_TESTS =					\
   tests/pypi.scm				\
   tests/read-print.scm				\
   tests/records.scm				\
+  tests/rpm.scm					\
   tests/scripts.scm				\
   tests/search-paths.scm			\
   tests/services.scm				\
diff --git a/doc/guix.texi b/doc/guix.texi
index eddfc58cb3..c59f0ccb4c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -30,7 +30,7 @@ Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
 Copyright @copyright{} 2014 Pierre-Antoine Rault@*
 Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
 Copyright @copyright{} 2015, 2016, 2017, 2019, 2020, 2021, 2023 Leo Famulari@*
-Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus@*
+Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Ricardo Wurmus@*
 Copyright @copyright{} 2016 Ben Woodcroft@*
 Copyright @copyright{} 2016, 2017, 2018, 2021 Chris Marusich@*
 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner@*
@@ -79,9 +79,9 @@ Copyright @copyright{} 2020 Jack Hill@*
 Copyright @copyright{} 2020 Naga Malleswari@*
 Copyright @copyright{} 2020, 2021 Brice Waegeneire@*
 Copyright @copyright{} 2020 R Veera Kumar@*
-Copyright @copyright{} 2020, 2021 Pierre Langlois@*
+Copyright @copyright{} 2020, 2021, 2022 Pierre Langlois@*
 Copyright @copyright{} 2020 pinoaffe@*
-Copyright @copyright{} 2020 André Batista@*
+Copyright @copyright{} 2020, 2023 André Batista@*
 Copyright @copyright{} 2020, 2021 Alexandru-Sergiu Marton@*
 Copyright @copyright{} 2020 raingloom@*
 Copyright @copyright{} 2020 Daniel Brooks@*
@@ -109,6 +109,7 @@ Copyright @copyright{} 2022 Reily Siegel@*
 Copyright @copyright{} 2022 Simon Streit@*
 Copyright @copyright{} 2022 (@*
 Copyright @copyright{} 2022 John Kehayias@*
+Copyright @copyright{} 2022⁠–⁠2023 Bruno Victal@*
 Copyright @copyright{} 2022 Ivan Vilata-i-Balaguer@*
 Copyright @copyright{} 2023 Giacomo Leidi@*
 Copyright @copyright{} 2022 Antero Mejr@*
@@ -5411,6 +5412,25 @@ From there on, @command{guix pull} will fetch code from the @code{super-hacks}
 branch of the repository at @code{example.org}.  The authentication concern is
 addressed below (@pxref{Channel Authentication}).
 
+Note that you can specify a local directory on the @code{url} field above if
+the channel that you intend to use resides on a local file system.  However,
+in this case @command{guix} checks said directory for ownership before any
+further processing.  This means that if the user is not the directory owner,
+but wants to use it as their default, they will then need to set it as a safe
+directory in their global git configuration file.  Otherwise, @command{guix}
+will refuse to even read it.  Supposing your system-wide local directory is at
+@code{/src/guix.git}, you would then create a git configuration file at
+@code{~/.gitconfig} with the following contents:
+
+@example
+[safe]
+        directory = /src/guix.git
+@end example
+
+@noindent
+This also applies to the root user unless when called with @command{sudo} by
+the directory owner.
+
 @node Replicating Guix
 @section Replicating Guix
 
@@ -6894,6 +6914,7 @@ such file or directory'' message.
 @end quotation
 
 @item deb
+@cindex Debian, build a .deb package with guix pack
 This produces a Debian archive (a package with the @samp{.deb} file
 extension) containing all the specified binaries and symbolic links,
 that can be installed on top of any dpkg-based GNU(/Linux) distribution.
@@ -6910,7 +6931,8 @@ guix pack -f deb -C xz -S /usr/bin/hello=bin/hello hello
 Because archives produced with @command{guix pack} contain a collection
 of store items and because each @command{dpkg} package must not have
 conflicting files, in practice that means you likely won't be able to
-install more than one such archive on a given system.
+install more than one such archive on a given system.  You can
+nonetheless pack as many Guix packages as you want in one such archive.
 @end quotation
 
 @quotation Warning
@@ -6921,6 +6943,48 @@ shared by other software, such as a Guix installation or other, non-deb
 packs.
 @end quotation
 
+@item rpm
+@cindex RPM, build an RPM archive with guix pack
+This produces an RPM archive (a package with the @samp{.rpm} file
+extension) containing all the specified binaries and symbolic links,
+that can be installed on top of any RPM-based GNU/Linux distribution.
+The RPM format embeds checksums for every file it contains, which the
+@command{rpm} command uses to validate the integrity of the archive.
+
+Advanced RPM-related options are revealed via the
+@option{--help-rpm-format} option.  These options allow embedding
+maintainer scripts that can run before or after the installation of the
+RPM archive, for example.
+
+The RPM format supports relocatable packages via the @option{--prefix}
+option of the @command{rpm} command, which can be handy to install an
+RPM package to a specific prefix.
+
+@example
+guix pack -f rpm -R -C xz -S /usr/bin/hello=bin/hello hello
+@end example
+
+@example
+sudo rpm --install --prefix=/opt /gnu/store/...-hello.rpm
+@end example
+
+@quotation Note
+Contrary to Debian packages, conflicting but @emph{identical} files in
+RPM packages can be installed simultaneously, which means multiple
+@command{guix pack}-produced RPM packages can usually be installed side
+by side without any problem.
+@end quotation
+
+@quotation Warning
+@command{rpm} assumes ownership of any files contained in the pack,
+which means it will remove @file{/gnu/store} upon uninstalling a
+Guix-generated RPM package, unless the RPM package was installed with
+the @option{--prefix} option of the @command{rpm} command.  It is unwise
+to install Guix-produced @samp{.rpm} packages on a system where
+@file{/gnu/store} is shared by other software, such as a Guix
+installation or other, non-rpm packs.
+@end quotation
+
 @end table
 
 @cindex relocatable binaries
@@ -9763,6 +9827,25 @@ be specified with the @code{#:node} parameter which defaults to
 @code{node}.
 @end defvar
 
+@defvr {Scheme Variable} tree-sitter-build-system
+
+This variable is exported by @code{(guix build-system tree-sitter)}.  It
+implements procedures to compile grammars for the
+@url{https://tree-sitter.github.io/tree-sitter/, Tree-sitter} parsing
+library.  It essentially runs @code{tree-sitter generate} to translate
+@code{grammar.js} grammars to JSON and then to C.  Which it then
+compiles to native code.
+
+Tree-sitter packages may support multiple grammars, so this build system
+supports a @code{#:grammar-directories} keyword to specify a list of
+locations where a @code{grammar.js} file may be found.
+
+Grammars sometimes depend on each other, such as C++ depending on C and
+TypeScript depending on JavaScript.  You may use inputs to declare such
+dependencies.
+
+@end defvr
+
 Lastly, for packages that do not need anything as sophisticated, a
 ``trivial'' build system is provided.  It is trivial in the sense that
 it provides basically no support: it does not pull any implicit inputs,
@@ -16488,13 +16571,6 @@ supported hardware.
 @item @code{host-name}
 The host name.
 
-@item @code{hosts-file}
-@cindex hosts file
-A file-like object (@pxref{G-Expressions, file-like objects}) for use as
-@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
-Reference Manual}).  The default is a file with entries for
-@code{localhost} and @var{host-name}.
-
 @item @code{mapped-devices} (default: @code{'()})
 A list of mapped devices.  @xref{Mapped Devices}.
 
@@ -17972,6 +18048,64 @@ package or any valid argument to @command{setfont}, as in this example:
 @end lisp
 @end defvar
 
+@defvar hosts-service-type
+Type of the service that populates the entries for (@file{/etc/hosts}).
+This service type can be @emph{extended} by passing it a list of
+@code{host} records.
+
+The example below shows how to add two entries to @file{/etc/hosts}:
+
+@c TRANSLATORS: The domain names below SHOULD NOT be translated.
+@c They're domains reserved for use in documentation. (RFC6761 Section 6.5)
+@c The addresses used are explained in RFC3849 and RFC5737.
+@lisp
+(simple-service 'add-extra-hosts
+                hosts-service-type
+                (list (host "192.0.2.1" "example.com"
+                            '("example.net" "example.org"))
+                      (host "2001:db8::1" "example.com"
+                            '("example.net" "example.org"))))
+@end lisp
+
+@quotation Note
+@cindex @file{/etc/hosts} default entries
+By default @file{/etc/hosts} comes with the following entries:
+@example
+127.0.0.1 localhost @var{host-name}
+::1       localhost @var{host-name}
+@end example
+
+For most setups this is what you want though if you find yourself in
+the situation where you want to change the default entries, you can
+do so in @code{operating-system} via @code{modify-services}
+(@pxref{Service Reference,@code{modify-services}}).
+
+The following example shows how to unset @var{host-name} from being an
+alias of @code{localhost}.
+@lisp
+(operating-system
+  ;; @dots{}
+
+  (essential-services
+   (modify-services
+     (operating-system-default-essential-services this-operating-system)
+     (hosts-service-type config => (list
+                                     (host "127.0.0.1" "localhost")
+                                     (host "::1"       "localhost"))))))
+@end lisp
+@end quotation
+@end defvar
+
+
+@defun host @var{address} @var{canonical-name} [@var{aliases}]
+Return a new record for the host at @var{address} with the given
+@var{canonical-name} and possibly @var{aliases}.
+
+@var{address} must be a string denoting a valid IPv4 or IPv6 address, and
+@var{canonical-name} and the strings listed in @var{aliases} must be valid
+host names.
+@end defun
+
 @deffn {Scheme Procedure} login-service @var{config}
 Return a service to run login according to @var{config}, a
 @code{<login-configuration>} object, which specifies the message of the day,
@@ -21012,31 +21146,14 @@ Logging level.
 @end table
 @end deftp
 
-@defvar %facebook-host-aliases
-This variable contains a string for use in @file{/etc/hosts}
-(@pxref{Host Names,,, libc, The GNU C Library Reference Manual}).  Each
-line contains a entry that maps a known server name of the Facebook
+@defvar block-facebook-hosts-service-type
+This service type adds a list of known Facebook hosts to the
+@file{/etc/hosts} file.
+(@pxref{Host Names,,, libc, The GNU C Library Reference Manual})
+Each line contains a entry that maps a known server name of the Facebook
 on-line service---e.g., @code{www.facebook.com}---to the local
 host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
 
-This variable is typically used in the @code{hosts-file} field of an
-@code{operating-system} declaration (@pxref{operating-system Reference,
-@file{/etc/hosts}}):
-
-@lisp
-(use-modules (gnu) (guix))
-
-(operating-system
-  (host-name "mymachine")
-  ;; ...
-  (hosts-file
-    ;; Create a /etc/hosts file with aliases for "localhost"
-    ;; and "mymachine", as well as for Facebook servers.
-    (plain-file "hosts"
-                (string-append (local-host-aliases host-name)
-                               %facebook-host-aliases))))
-@end lisp
-
 This mechanism can prevent programs running locally, such as Web
 browsers, from accessing Facebook.
 @end defvar
@@ -21875,7 +21992,7 @@ disable security:
 @end lisp
 
 Or to set a PasswordFile for the classic (unsecure) VncAuth
-mecanism:
+mechanism:
 
 @lisp
 (vnc-server-command (file-append tigervnc-server "/bin/Xvnc"
@@ -21911,9 +22028,7 @@ Available @code{lightdm-gtk-greeter-configuration} fields are:
 @item @code{lightdm-gtk-greeter} (default: @code{lightdm-gtk-greeter}) (type: file-like)
 The lightdm-gtk-greeter package to use.
 
-@item @code{assets} @
-(default: @code{(adwaita-icon-theme gnome-themes-extrahicolor-icon-theme)}) @
-(type: list-of-file-likes)
+@item @code{assets} (default: @code{(adwaita-icon-theme gnome-themes-extra hicolor-icon-theme)}) (type: list-of-file-likes)
 The list of packages complementing the greeter, such as package
 providing icon themes.
 
@@ -21939,8 +22054,7 @@ The background image to use.
 Enable accessibility support through the Assistive Technology Service
 Provider Interface (AT-SPI).
 
-@item @code{a11y-states} @
-(default: @code{(contrast font keyboard reader)}) (type: list-of-a11y-states)
+@item @code{a11y-states} (default: @code{(contrast font keyboard reader)}) (type: list-of-a11y-states)
 The accessibility features to enable, given as list of symbols.
 
 @item @code{reader} (type: maybe-file-like)
@@ -21974,8 +22088,7 @@ The type of the seat, either the @code{local} or @code{xremote} symbol.
 @item @code{autologin-user} (type: maybe-string)
 The username to automatically log in with by default.
 
-@item @code{greeter-session} @
-(default: @code{lightdm-gtk-greeter}) (type: greeter-session)
+@item @code{greeter-session} (default: @code{lightdm-gtk-greeter}) (type: greeter-session)
 The greeter session to use, specified as a symbol.  Currently, only
 @code{lightdm-gtk-greeter} is supported.
 
@@ -23043,6 +23156,49 @@ The LXQT package to use.
 @end table
 @end deftp
 
+@defvar sugar-desktop-service-type
+This is the type of the service that runs the
+@uref{https://www.sugarlabs.org, Sugar desktop environment}.  Its value
+is a @code{sugar-desktop-configuration} object (see below).
+
+This service adds the @code{sugar} package to the system profile, as
+well as any selected Sugar activities.  By default it only includes a
+minimal set of activities.
+@end defvar
+
+@deftp {Data Type} sugar-desktop-configuration
+Configuration record for the Sugar desktop environment.
+
+@table @asis
+@item @code{sugar} (default: @code{sugar})
+The Sugar package to use.
+@item @code{gobject-introspection} (default: @code{gobject-introspection})
+The @code{gobject-introspection} package to use.  This package is used
+to access libraries installed as dependencies of Sugar activities.
+@item @code{activities} (default: @code{(list sugar-help-activity)})
+A list of Sugar activities to install.
+@end table
+@end deftp
+
+The following example configures the Sugar desktop environment with a
+number of useful activities:
+
+@lisp
+(use-modules (gnu))
+(use-package-modules sugar)
+(use-service-modules desktop)
+(operating-system
+  ...
+  (services (cons* (service sugar-desktop-service-type
+                            (sugar-desktop-configuration
+                              (activities (list sugar-browse-activity
+                                                sugar-help-activity
+                                                sugar-jukebox-activity
+                                                sugar-typing-turtle-activity))))
+                   %desktop-services))
+  ...)
+@end lisp
+
 @defvar enlightenment-desktop-service-type
 Return a service that adds the @code{enlightenment} package to the system
 profile, and extends dbus with actions from @code{efl}.
@@ -33161,79 +33317,190 @@ The service type for @command{mpd}
 Data type representing the configuration of @command{mpd}.
 
 @table @asis
-@item @code{user} (default: @code{"mpd"})
+@item @code{package} (default: @code{mpd}) (type: file-like)
+The MPD package.
+
+@item @code{user} (default: @code{"mpd"}) (type: string)
 The user to run mpd as.
 
-@item @code{music-dir} (default: @code{"~/Music"})
+@item @code{group} (default: @code{"mpd"}) (type: string)
+The group to run mpd as.
+
+@item @code{shepherd-requirement} (default: @code{()}) (type: list-of-symbol)
+This is a list of symbols naming Shepherd services that this service
+will depend on.
+
+@item @code{environment-variables} (default: @code{()}) (type: list-of-string)
+A list of strings specifying environment variables.
+
+@item @code{log-file} (default: @code{"/var/log/mpd/log"}) (type: maybe-string)
+The location of the log file.  Set to @code{syslog} to use the local
+syslog daemon or @code{%unset-value} to omit this directive from the
+configuration file.
+
+@item @code{log-level} (type: maybe-string)
+Supress any messages below this threshold.  Available values:
+@code{notice}, @code{info}, @code{verbose}, @code{warning} and
+@code{error}.
+
+@item @code{music-directory} (type: maybe-string)
 The directory to scan for music files.
 
-@item @code{playlist-dir} (default: @code{"~/.mpd/playlists"})
+@item @code{playlist-directory} (type: maybe-string)
 The directory to store playlists.
 
-@item @code{db-file} (default: @code{"~/.mpd/tag_cache"})
+@item @code{db-file} (type: maybe-string)
 The location of the music database.
 
-@item @code{state-file} (default: @code{"~/.mpd/state"})
+@item @code{state-file} (type: maybe-string)
 The location of the file that stores current MPD's state.
 
-@item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"})
+@item @code{sticker-file} (type: maybe-string)
 The location of the sticker database.
 
-@item @code{port} (default: @code{"6600"})
-The port to run mpd on.
+@item @code{default-port} (default: @code{6600}) (type: maybe-integer)
+The default port to run mpd on.
+
+@item @code{endpoints} (type: maybe-list-of-string)
+The addresses that mpd will bind to.  A port different from @var{default-port}
+may be specified, e.g. @code{localhost:6602} and IPv6 addresses must be
+enclosed in square brackets when a different port is used.
+To use a Unix domain socket, an absolute path or a path starting with @code{~}
+can be specified here.
+
+@item @code{database} (type: maybe-mpd-plugin)
+MPD database plugin configuration.
+
+@item @code{partitions} (default: @code{()}) (type: list-of-mpd-partition)
+List of MPD "partitions".
+
+@item @code{neighbors} (default: @code{()}) (type: list-of-mpd-plugin)
+List of MPD neighbor plugin configurations.
+
+@item @code{inputs} (default: @code{()}) (type: list-of-mpd-plugin)
+List of MPD input plugin configurations.
+
+@item @code{archive-plugins} (default: @code{()}) (type: list-of-mpd-plugin)
+List of MPD archive plugin configurations.
+
+@item @code{input-cache-size} (type: maybe-string)
+MPD input cache size.
+
+@item @code{decoders} (default: @code{()}) (type: list-of-mpd-plugin)
+List of MPD decoder plugin configurations.
+
+@item @code{resampler} (type: maybe-mpd-plugin)
+MPD resampler plugin configuration.
+
+@item @code{filters} (default: @code{()}) (type: list-of-mpd-plugin)
+List of MPD filter plugin configurations.
+
+@item @code{outputs} (type: list-of-mpd-plugin-or-output)
+The audio outputs that MPD can use.  By default this is a single output
+using pulseaudio.
 
-@item @code{address} (default: @code{"any"})
-The address that mpd will bind to.  To use a Unix domain socket,
-an absolute path can be specified here.
+@item @code{playlist-plugins} (default: @code{()}) (type: list-of-mpd-plugin)
+List of MPD playlist plugin configurations.
 
-@item @code{outputs} (default: @code{"(list (mpd-output))"})
-The audio outputs that MPD can use.  By default this is a single output using pulseaudio.
+@item @code{extra-options} (default: @code{()}) (type: alist)
+An association list of option symbols/strings to string values to be
+appended to the configuration.
+
+@end table
+@end deftp
+
+@deftp {Data Type} mpd-plugin
+Data type representing a @command{mpd} plugin.
+
+@table @asis
+@item @code{plugin} (type: maybe-string)
+Plugin name.
+
+@item @code{name} (type: maybe-string)
+Name.
+
+@item @code{enabled?} (type: maybe-boolean)
+Whether the plugin is enabled/disabled.
+
+@item @code{extra-options} (default: @code{()}) (type: alist)
+An association list of option symbols/strings to string values to be
+appended to the plugin configuration.  See
+@uref{https://mpd.readthedocs.io/en/latest/plugins.html,MPD plugin
+reference} for available options.
+
+@end table
+@end deftp
+
+@deftp {Data Type} mpd-partition
+Data type representing a @command{mpd} partition.
+
+@table @asis
+@item @code{name} (type: string)
+Partition name.
+
+@item @code{extra-options} (default: @code{()}) (type: alist)
+An association list of option symbols/strings to string values to be
+appended to the partition configuration.  See
+@uref{https://mpd.readthedocs.io/en/latest/user.html#configuring-partitions,Configuring
+Partitions} for available options.
 
 @end table
 @end deftp
 
 @deftp {Data Type} mpd-output
-Data type representing an @command{mpd} audio output.
+Data type representing a @command{mpd} audio output.
 
 @table @asis
-@item @code{name} (default: @code{"MPD"})
+@item @code{name} (default: @code{"MPD"}) (type: string)
 The name of the audio output.
 
-@item @code{type} (default: @code{"pulse"})
+@item @code{type} (default: @code{"pulse"}) (type: string)
 The type of audio output.
 
-@item @code{enabled?} (default: @code{#t})
+@item @code{enabled?} (default: @code{#t}) (type: boolean)
 Specifies whether this audio output is enabled when MPD is started.  By
 default, all audio outputs are enabled.  This is just the default
 setting when there is no state file; with a state file, the previous
 state is restored.
 
-@item @code{tags?} (default: @code{#t})
+@item @code{format} (type: maybe-string)
+Force a specific audio format on output.  See
+@uref{https://mpd.readthedocs.io/en/latest/user.html#audio-output-format,Global
+Audio Format} for a more detailed description.
+
+@item @code{tags?} (default: @code{#t}) (type: boolean)
 If set to @code{#f}, then MPD will not send tags to this output.  This
 is only useful for output plugins that can receive tags, for example the
 @code{httpd} output plugin.
 
-@item @code{always-on?} (default: @code{#f})
+@item @code{always-on?} (default: @code{#f}) (type: boolean)
 If set to @code{#t}, then MPD attempts to keep this audio output always
-open.  This may be useful for streaming servers, when you don’t want to
+open.  This may be useful for streaming servers, when you don?t want to
 disconnect all listeners even when playback is accidentally stopped.
 
-@item @code{mixer-type}
-This field accepts a symbol that specifies which mixer should be used
+@item @code{mixer-type} (default: @code{"none"}) (type: string)
+This field accepts a string that specifies which mixer should be used
 for this audio output: the @code{hardware} mixer, the @code{software}
 mixer, the @code{null} mixer (allows setting the volume, but with no
 effect; this can be used as a trick to implement an external mixer
 External Mixer) or no mixer (@code{none}).
 
-@item @code{extra-options} (default: @code{'()})
-An association list of option symbols to string values to be appended to
-the audio output configuration.
+@item @code{replay-gain-handler} (type: maybe-string)
+This field accepts a string that specifies how
+@uref{https://mpd.readthedocs.io/en/latest/user.html#replay-gain,Replay
+Gain} is to be applied.  @code{software} uses an internal software
+volume control, @code{mixer} uses the configured (hardware) mixer
+control and @code{none} disables replay gain on this audio output.
+
+@item @code{extra-options} (default: @code{()}) (type: alist)
+An association list of option symbols/strings to string values to be
+appended to the audio output configuration.
 
 @end table
 @end deftp
 
-The following example shows a configuration of @code{mpd} that provides
-an HTTP audio streaming output.
+The following example shows a configuration of @command{mpd} that
+configures some of its plugins and provides a HTTP audio streaming output.
 
 @lisp
 (service mpd-service-type
@@ -33245,9 +33512,140 @@ an HTTP audio streaming output.
                      (mixer-type 'null)
                      (extra-options
                       `((encoder . "vorbis")
-                        (port    . "8080"))))))))
+                        (port    . "8080"))))))
+           (decoders
+             (list (mpd-plugin
+                     (plugin "mikmod")
+                     (enabled? #f))
+                   (mpd-plugin
+                     (plugin "openmpt")
+                     (enabled? #t)
+                     (extra-options `((repeat-count . -1)
+                                      (interpolation-filter . 1))))))
+           (resampler (mpd-plugin
+                        (plugin "libsamplerate")
+                        (extra-options `((type . 0)))))))
 @end lisp
 
+@subsubheading myMPD
+
+@cindex MPD, web interface
+@cindex myMPD service
+
+@uref{https://jcorporation.github.io/myMPD/, myMPD} is a web server
+frontend for MPD that provides a mobile friendly web client for MPD.
+
+The following example shows a myMPD instance listening on port 80,
+with album cover caching disabled.
+
+@lisp
+(service mympd-service-type
+         (mympd-configuration
+          (port 80)
+          (covercache-ttl 0)))
+@end lisp
+
+@defvar mympd-service-type
+The service type for @command{mympd}.
+@end defvar
+
+@c %start of fragment
+@deftp {Data Type} mympd-configuration
+Available @code{mympd-configuration} fields are:
+
+@table @asis
+@item @code{package} (default: @code{mympd}) (type: file-like)
+The package object of the myMPD server.
+
+@item @code{shepherd-requirement} (default: @code{()}) (type: list-of-symbol)
+This is a list of symbols naming Shepherd services that this service
+will depend on.
+
+@item @code{user} (default: @code{"mympd"}) (type: string)
+Owner of the @command{mympd} process.
+
+@item @code{group} (default: @code{"nogroup"}) (type: string)
+Owner group of the @command{mympd} process.
+
+@item @code{work-directory} (default: @code{"/var/lib/mympd"}) (type: string)
+Where myMPD will store its data.
+
+@item @code{cache-directory} (default: @code{"/var/cache/mympd"}) (type: string)
+Where myMPD will store its cache.
+
+@item @code{acl} (type: maybe-mympd-ip-acl)
+ACL to access the myMPD webserver.
+
+@item @code{covercache-ttl} (default: @code{31}) (type: maybe-integer)
+How long to keep cached covers, @code{0} disables cover caching.
+
+@item @code{http?} (default: @code{#t}) (type: boolean)
+HTTP support.
+
+@item @code{host} (default: @code{"[::]"}) (type: string)
+Host name to listen on.
+
+@item @code{port} (default: @code{80}) (type: maybe-port)
+HTTP port to listen on.
+
+@item @code{log-level} (default: @code{5}) (type: integer)
+How much detail to include in logs, possible values: @code{0} to
+@code{7}.
+
+@item @code{log-to} (default: @code{"/var/log/mympd/log"}) (type: string-or-symbol)
+Where to send logs.  By default, the service logs to
+@file{/var/log/mympd.log}.  The alternative is @code{'syslog}, which
+sends output to the running syslog service under the @samp{daemon}
+facility.
+
+@item @code{lualibs} (default: @code{"all"}) (type: maybe-string)
+See
+@uref{https://jcorporation.github.io/myMPD/scripting/#lua-standard-libraries}.
+
+@item @code{uri} (type: maybe-string)
+Override URI to myMPD.  See
+@uref{https://github.com/jcorporation/myMPD/issues/950}.
+
+@item @code{script-acl} (default: @code{(mympd-ip-acl (allow '("127.0.0.1")))}) (type: maybe-mympd-ip-acl)
+ACL to access the myMPD script backend.
+
+@item @code{ssl?} (default: @code{#f}) (type: boolean)
+SSL/TLS support.
+
+@item @code{ssl-port} (default: @code{443}) (type: maybe-port)
+Port to listen for HTTPS.
+
+@item @code{ssl-cert} (type: maybe-string)
+Path to PEM encoded X.509 SSL/TLS certificate (public key).
+
+@item @code{ssl-key} (type: maybe-string)
+Path to PEM encoded SSL/TLS private key.
+
+@item @code{pin-hash} (type: maybe-string)
+SHA-256 hashed pin used by myMPD to control settings access by prompting
+a pin from the user.
+
+@item @code{save-caches?} (type: maybe-boolean)
+Whether to preserve caches between service restarts.
+
+@end table
+@end deftp
+@c %end of fragment
+
+@c %start of fragment
+@deftp {Data Type} mympd-ip-acl
+Available @code{mympd-ip-acl} fields are:
+
+@table @asis
+@item @code{allow} (default: @code{()}) (type: list-of-string)
+Allowed IP addresses.
+
+@item @code{deny} (default: @code{()}) (type: list-of-string)
+Disallowed IP addresses.
+
+@end table
+@end deftp
+@c %end of fragment
 
 @node Virtualization Services
 @subsection Virtualization Services
@@ -34287,7 +34685,7 @@ and to make maintenance and recovery tasks easy.  It consists of multiple
 services which are described later in this section.  In addition to the Ganeti
 service, you will need the OpenSSH service (@pxref{Networking Services,
 @code{openssh-service-type}}), and update the @file{/etc/hosts} file
-(@pxref{operating-system Reference, @code{hosts-file}}) with the cluster name
+(@pxref{Service Reference, @code{hosts-service-type}}) with the cluster name
 and address (or use a DNS server).
 
 All nodes participating in a Ganeti cluster should have the same Ganeti and
@@ -34301,14 +34699,6 @@ cluster node that supports multiple storage backends, and installs the
 (operating-system
   ;; @dots{}
   (host-name "node1")
-  (hosts-file (plain-file "hosts" (format #f "
-127.0.0.1       localhost
-::1             localhost
-
-192.168.1.200   ganeti.example.com
-192.168.1.201   node1.example.com node1
-192.168.1.202   node2.example.com node2
-")))
 
   ;; Install QEMU so we can use KVM-based instances, and LVM, DRBD and Ceph
   ;; in order to use the "plain", "drbd" and "rbd" storage backends.
@@ -34336,6 +34726,14 @@ cluster node that supports multiple storage backends, and installs the
                           (openssh-configuration
                            (permit-root-login 'prohibit-password)))
 
+                 (simple-service 'ganeti-hosts-entries hosts-service-type
+                                 (list
+                                   (host "192.168.1.200" "ganeti.example.com")
+                                   (host "192.168.1.201" "node1.example.com"
+                                         '("node1"))
+                                   (host "192.168.1.202" "node2.example.com"
+                                         '("node2"))))
+
                  (service ganeti-service-type
                           (ganeti-configuration
                            ;; This list specifies allowed file system paths
@@ -36812,6 +37210,42 @@ advertised.
 Log level to use, specify a log level like @code{'INFO} to stop logging
 individual requests.
 
+@item @code{cached-compressions} (default: @code{'()})
+Activate generating cached nars with different compression details from
+the stored nars.  This is a list of
+nar-herder-cached-compression-configuration records.
+
+@item @code{min-uses} (default: @code{3})
+When cached-compressions are enabled, generate cached nars when at least
+this number of requests are made for a nar.
+
+@item @code{workers} (default: @code{2})
+Number of cached nars to generate at a time.
+
+@item @code{nar-source} (default: @code{#f})
+Location to fetch nars from when computing cached compressions.  By
+default, the storage location will be used.
+
+@end table
+@end deftp
+
+@deftp {Data Type} nar-herder-cached-compression-configuration
+Data type representing the cached compression configuration.
+
+@table @asis
+@item @code{type}
+Type of compression to use, e.g. @code{'zstd}.
+
+@item @code{workers} (default: @code{#f})
+Level of the compression to use.
+
+@item @code{directory} (default: @code{#f})
+Location to store the cached nars.  If unspecified, they will be stored
+in /var/cache/nar-herder/nar/TYPE.
+
+@item @code{directory-max-size} (default: @code{#f})
+Maximum size in bytes of the directory.
+
 @end table
 @end deftp
 
@@ -41106,6 +41540,7 @@ services)}.
 * SSH: Secure Shell.                                   Setting up the secure shell client.
 * Desktop: Desktop Home Services.                      Services for graphical environments.
 * Guix: Guix Home Services.                            Services for Guix.
+* Fonts: Fonts Home Services.                          Services for managing User's fonts.
 @end menu
 @c In addition to that Home Services can provide
 
@@ -41990,6 +42425,35 @@ A typical extension for adding a channel might look like this:
 @end lisp
 @end defvar
 
+@node Fonts Home Services
+@subsection Fonts Home Services
+
+The @code{(gnu home services fontutils)} module provides services for
+user-specific Fontconfig setup.  The
+@uref{https://www.freedesktop.org/wiki/Software/fontconfig,Fontconfig}
+library is used by many applications to access fonts on the system.
+
+@defvar home-fontconfig-service-type
+This is the service type for generating configurations for Fontconfig.
+Its associated value is a list of strings (or gexps) pointing to fonts
+locations.
+
+Generally, it is better to extend this service than to directly
+configure it, as its default value is the default Guix Home's profile
+font installation path (@file{~/.guix-home/profile/share/fonts}).  If
+you configure this service directly, be sure to include the above
+directory.
+
+A typical extension for adding an additional font directory might look
+like this:
+
+@lisp
+(simple-service 'additional-fonts-service
+                home-fontconfig-service-type
+                (list "~/.nix-profile/share/fonts"))
+@end lisp
+@end defvar
+
 @node Invoking guix home
 @section Invoking @command{guix home}
 
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index 3ce9affc06..ea10f35250 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -29,6 +29,22 @@
 
 # We require Bash but for portability we'd rather not use /bin/bash or
 # /usr/bin/env in the shebang, hence this hack.
+
+# Environment variables
+#
+# GUIX_BINARY_FILE_NAME
+#
+# Can be used to override the automatic download mechanism and point
+# to a local Guix binary archive filename like
+# "/tmp/guix-binary-1.4.0rc2.armhf-linux.tar.xz"
+#
+# GUIX_ALLOW_OVERWRITE
+#
+# Instead of aborting to avoid overwriting a previous installations,
+# allow copying over /var/guix or /gnu.  This can be useful when the
+# installation required the user to extract Guix packs under /gnu to
+# satisfy its dependencies.
+
 if [ "x$BASH_VERSION" = "x" ]
 then
     exec bash "$0" "$@"
@@ -336,16 +352,15 @@ sys_create_store()
 
     _debug "--- [ ${FUNCNAME[0]} ] ---"
 
-    if [[ -e "/var/guix" || -e "/gnu" ]]; then
+    if [[ -z $GUIX_ALLOW_OVERWRITE && (-e /var/guix || -e /gnu) ]]; then
         die "A previous Guix installation was found.  Refusing to overwrite."
+    else
+        _msg "${WAR}Overwriting existing installation!"
     fi
 
     cd "$tmp_path"
-    tar --extract --file "$pkg" && _msg "${PAS}unpacked archive"
-
     _msg "${INF}Installing /var/guix and /gnu..."
-    mv "${tmp_path}/var/guix" /var/
-    mv "${tmp_path}/gnu" /
+    tar --extract --file "$pkg" -C /
 
     _msg "${INF}Linking the root user's profile"
     mkdir -p ~root/.config/guix
diff --git a/etc/news.scm b/etc/news.scm
index 211a176170..924c2b35b4 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -4,12 +4,12 @@
 ;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
 ;; Copyright © 2019, 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
-;; Copyright © 2019, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
+;; Copyright © 2019, 2020, 2021, 2023 Julien Lepiller <julien@lepiller.eu>
 ;; Copyright © 2019–2023 Florian Pelz <pelzflorian@pelzflorian.de>
 ;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
 ;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;; Copyright © 2021 Zhu Zihao <all_but_last@163.com>
 ;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
@@ -26,6 +26,47 @@
 (channel-news
  (version 0)
 
+ (entry (commit "598f4c509bbfec2b983a8ee246cce0a0fe45ec7f")
+        (title
+         (de "Neues Format @samp{rpm} für den Befehl @command{guix pack}")
+         (en "New @samp{rpm} format for the @command{guix pack} command")
+         (fr "Nouveau format @samp{rpm} pour la commande @command{guix pack}"))
+        (body
+         (de "Sie können jetzt auch RPM-Archive (mit der Dateinamenserweiterung
+.rpm) erzeugen mit dem Befehl @command{guix pack --format=rpm}.  Damit
+haben Sie einen alternativen Distributionsweg für mit Guix erstellte
+Software.  Hier sehen Sie ein einfaches Beispiel, wie Sie ein
+RPM-Archiv für das Paket @code{hello} erzeugen:
+
+@example
+guix pack --format=rpm --symlink=/usr/bin/hello=bin/hello hello
+@end example
+
+Siehe @command{info \"(guix.de) Aufruf von guix pack\"} für mehr
+Informationen.")
+         (en "RPM archives (with the .rpm file extension) can now be produced
+via the @command{guix pack --format=rpm} command, providing an alternative
+distribution path for software built with Guix.  Here is a simple example that
+generates an RPM archive for the @code{hello} package:
+
+@example
+guix pack --format=rpm --symlink=/usr/bin/hello=bin/hello hello
+@end example
+
+See @command{info \"(guix) Invoking guix pack\"} for more information.")
+         (fr "Vous pouvez désormais produire une archive RPM (avec l'extension
+.rpm) avec la commande @command{guix pack --format=rpm} qui propose
+donc une nouvelle manière de distribuer les logiciels construits avec
+Guix.  Voici un exemple permettant de générer une archive RPM pour le
+paquet @code{hello} :
+
+@example
+guix pack --format=rpm --symlink=/usr/bin/hello=bin/hello hello
+@end example
+
+Consultez @command{info \"(guix.fr) Invoquer guix pack\"} pour plus
+d'informations.")))
+
  (entry (commit "137b91f03bbb7f1df71cf10c4f79ae57fbcea400")
         (title
          (en "New @option{--with-version} package transformation option")
diff --git a/etc/release-manifest.scm b/etc/release-manifest.scm
index 3ef3483300..83983c0738 100644
--- a/etc/release-manifest.scm
+++ b/etc/release-manifest.scm
@@ -82,7 +82,7 @@ TARGET."
   ;; Packages that must be cross-buildable from x86_64-linux.
   ;; FIXME: Add (@ (gnu packages gcc) gcc) when <https://bugs.gnu.org/40463>
   ;; is fixed.
-  (append (list (@ (gnu packages guile) guile-3.0/fixed))
+  (append (list (@ (gnu packages guile) guile-3.0/pinned))
           (map specification->package
                '("coreutils" "grep" "sed" "findutils" "diffutils" "patch"
                  "gawk" "gettext" "gzip" "xz"
diff --git a/etc/snippets/yas/scheme-mode/guix-news-entry b/etc/snippets/yas/scheme-mode/guix-news-entry
new file mode 100644
index 0000000000..7f5bb21c50
--- /dev/null
+++ b/etc/snippets/yas/scheme-mode/guix-news-entry
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: guix-news-entry
+# key: entry...
+# --
+(entry (commit "$1")
+       (title
+        (en "$2"))
+       (body
+        (en "$3")))
diff --git a/etc/teams.scm.in b/etc/teams.scm.in
index 77c0127bb2..ff913673e8 100644
--- a/etc/teams.scm.in
+++ b/etc/teams.scm.in
@@ -3,7 +3,7 @@
 !#
 
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -142,6 +142,19 @@ and the r-build-system."
                       "guix/scripts/import/cran.scm"
                       "tests/cran.scm")))
 
+(define-team tex
+  (team 'tex
+        #:name "TeX team"
+        #:description
+        "TeX, LaTeX, XeLaTeX, LuaTeX, TeXLive, the texlive-build-system, and
+the \"texlive\" importer."
+        #:scope (list "gnu/packages/tex.scm"
+                      "guix/build/texlive-build-system.scm"
+                      "guix/build-system/texlive.scm"
+                      "guix/import/texlive.scm"
+                      "guix/scripts/import/texlive.scm"
+                      "tests/texlive.scm")))
+
 (define-team julia
   (team 'julia
         #:name "Julia team"
@@ -490,7 +503,7 @@ importer."
 
 (define-member (person "Ricardo Wurmus"
                        "rekado@elephly.net")
-  r core mentors)
+  r core mentors tex)
 
 (define-member (person "Christopher Baines"
                        "mail@cbaines.net")
diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm
index 72e3a45422..dee6885400 100644
--- a/gnu/build/linux-container.scm
+++ b/gnu/build/linux-container.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2017-2019, 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017-2019, 2022, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -404,7 +404,7 @@ load path must be adjusted as needed."
 
 (define (container-excursion pid thunk)
   "Run THUNK as a child process within the namespaces of process PID and
-return the exit status."
+return the exit status, an integer as returned by 'waitpid'."
   (define (namespace-file pid namespace)
     (string-append "/proc/" (number->string pid) "/ns/" namespace))
 
@@ -432,11 +432,20 @@ return the exit status."
                   '("user" "ipc" "uts" "net" "pid" "mnt"))
         (purify-environment)
         (chdir "/")
-        (thunk))))
+
+        ;; Per setns(2), changing the PID namespace only applies to child
+        ;; processes, not to the process itself.  Thus fork so that THUNK runs
+        ;; in the right PID namespace, which also gives it access to /proc.
+        (match (primitive-fork)
+          (0 (call-with-clean-exit thunk))
+          (pid (primitive-exit
+                (match (waitpid pid)
+                  ((_ . status)
+                   (or (status:exit-val status) 127)))))))))
     (pid
      (match (waitpid pid)
        ((_ . status)
-        (status:exit-val status))))))
+        status)))))
 
 (define (container-excursion* pid thunk)
   "Like 'container-excursion', but return the return value of THUNK."
diff --git a/gnu/home/services/fontutils.scm b/gnu/home/services/fontutils.scm
index 6062eaed6a..3399cb7ec8 100644
--- a/gnu/home/services/fontutils.scm
+++ b/gnu/home/services/fontutils.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,7 @@
   #:use-module (gnu home services)
   #:use-module (gnu packages fontutils)
   #:use-module (guix gexp)
+  #:use-module (srfi srfi-1)
 
   #:export (home-fontconfig-service-type))
 
@@ -33,15 +35,17 @@
 ;;;
 ;;; Code:
 
-(define (add-fontconfig-config-file he-symlink-path)
+(define (add-fontconfig-config-file directories)
   `(("fontconfig/fonts.conf"
      ,(mixed-text-file
        "fonts.conf"
-       "<?xml version='1.0'?>
+       (apply string-append
+              `("<?xml version='1.0'?>
 <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
-<fontconfig>
-  <dir>~/.guix-home/profile/share/fonts</dir>
-</fontconfig>"))))
+<fontconfig>\n" ,@(map (lambda (directory)
+                         (string-append "  <dir>" directory "</dir>\n"))
+                       directories)
+                "</fontconfig>\n"))))))
 
 (define (regenerate-font-cache-gexp _)
   `(("profile/share/fonts"
@@ -59,7 +63,9 @@
                        (service-extension
                         home-profile-service-type
                         (const (list fontconfig)))))
-                (default-value #f)
+                (compose concatenate)
+                (extend append)
+                (default-value '("~/.guix-home/profile/share/fonts"))
                 (description
                  "Provides configuration file for fontconfig and make
 fc-* utilities aware of font packages installed in Guix Home's profile.")))
diff --git a/gnu/local.mk b/gnu/local.mk
index 19a714c12c..6888396095 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -38,10 +38,10 @@
 # Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 # Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 # Copyright © 2020 Malte Frank Gerdes <mate.f.gerdes@gmail.com>
-# Copyright © 2020 Vinicius Monego <monego@posteo.net>
+# Copyright © 2020, 2023 Vinicius Monego <monego@posteo.net>
 # Copyright © 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 # Copyright © 2021 Greg Hogan <code@greghogan.com>
-# Copyright © 2021, 2022 Philip McGrath <philip@philipmcgrath.com>
+# Copyright © 2021, 2022, 2023 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>
@@ -361,7 +361,6 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/kde-systemtools.scm		\
   %D%/packages/kde-utils.scm			\
   %D%/packages/kerberos.scm			\
-  %D%/packages/key-mon.scm			\
   %D%/packages/kodi.scm				\
   %D%/packages/language.scm			\
   %D%/packages/lean.scm				\
@@ -425,6 +424,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/mingw.scm			\
   %D%/packages/microcom.scm			\
   %D%/packages/moe.scm				\
+  %D%/packages/mold.scm				\
   %D%/packages/motti.scm			\
   %D%/packages/monitoring.scm			\
   %D%/packages/moreutils.scm			\
@@ -606,6 +606,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/tmux.scm				\
   %D%/packages/toolkits.scm			\
   %D%/packages/tor.scm				\
+  %D%/packages/tree-sitter.scm			\
   %D%/packages/tv.scm				\
   %D%/packages/uglifyjs.scm			\
   %D%/packages/uml.scm				\
@@ -916,6 +917,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/awesome-4.3-fno-common.patch		\
   %D%/packages/patches/aws-c-auth-install-private-headers.patch	\
   %D%/packages/patches/azr3.patch				\
+  %D%/packages/patches/azr3-remove-lash.patch			\
   %D%/packages/patches/barony-fix-textures.patch		\
   %D%/packages/patches/bash-completion-directories.patch	\
   %D%/packages/patches/bash-linux-pgrp-pipe.patch		\
@@ -937,7 +939,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/bsd-games-prevent-name-collisions.patch	\
   %D%/packages/patches/bsd-games-stdio.h.patch			\
   %D%/packages/patches/beancount-disable-googleapis-fonts.patch	\
-  %D%/packages/patches/bees-beesd-honor-destdir-on-installation.patch	\
   %D%/packages/patches/beignet-correct-file-names.patch		\
   %D%/packages/patches/bidiv-update-fribidi.patch		\
   %D%/packages/patches/binutils-boot-2.20.1a.patch		\
@@ -950,8 +951,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/breezy-fix-gio.patch			\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/bubblewrap-fix-locale-in-tests.patch	\
-  %D%/packages/patches/cabal-install-base16-bytestring1.0.patch		\
-  %D%/packages/patches/cabal-install-ghc8.10.patch		\
   %D%/packages/patches/cairo-CVE-2018-19876.patch		\
   %D%/packages/patches/cairo-CVE-2020-35492.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
@@ -1024,6 +1023,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/dbus-c++-gcc-compat.patch		\
   %D%/packages/patches/dbus-c++-threading-mutex.patch		\
   %D%/packages/patches/dbxfs-remove-sentry-sdk.patch		\
+  %D%/packages/patches/ddclient-skip-test.patch			\
   %D%/packages/patches/debops-constants-for-external-program-names.patch \
   %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \
   %D%/packages/patches/dee-vapi.patch			\
@@ -1047,6 +1047,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/einstein-build.patch			\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
   %D%/packages/patches/elixir-path-length.patch			\
+  %D%/packages/patches/elm-ghc9.2.patch	\
   %D%/packages/patches/elm-offline-package-registry.patch	\
   %D%/packages/patches/elm-reactor-static-files.patch		\
   %D%/packages/patches/elogind-revert-polkit-detection.patch	\
@@ -1060,6 +1061,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/emacs-highlight-stages-add-gexp.patch	\
   %D%/packages/patches/emacs-lispy-fix-thread-last-test.patch   \
   %D%/packages/patches/emacs-native-comp-driver-options.patch   \
+  %D%/packages/patches/emacs-pasp-mode-quote-file-names.patch  \
   %D%/packages/patches/emacs-polymode-fix-lexical-variable-error.patch  \
   %D%/packages/patches/emacs-source-date-epoch.patch		\
   %D%/packages/patches/emacs-telega-path-placeholder.patch	\
@@ -1071,6 +1073,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/enjarify-setup-py.patch			\
   %D%/packages/patches/enlightenment-fix-setuid-path.patch	\
   %D%/packages/patches/erlang-man-path.patch			\
+  %D%/packages/patches/esmini-no-clutter-log.patch		\
+  %D%/packages/patches/esmini-use-pkgconfig.patch		\
   %D%/packages/patches/esmtp-add-lesmtp.patch		\
   %D%/packages/patches/eudev-rules-directory.patch		\
   %D%/packages/patches/exercism-disable-self-update.patch	\
@@ -1188,8 +1192,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/geoclue-config.patch			\
   %D%/packages/patches/gettext-libunicode-update.patch		\
   %D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch	\
+  %D%/packages/patches/ghc-9.2-glibc-2.33-link-order.patch \
   %D%/packages/patches/ghc-testsuite-dlopen-pie.patch		\
   %D%/packages/patches/ghc-testsuite-grep-compat.patch		\
+  %D%/packages/patches/ghc-bloomfilter-ghc9.2.patch	\
+  %D%/packages/patches/ghc-bytestring-handle-ghc9.patch	\
   %D%/packages/patches/ghc-language-haskell-extract-ghc-8.10.patch	\
   %D%/packages/patches/ghostscript-no-header-id.patch		\
   %D%/packages/patches/ghostscript-no-header-uuid.patch		\
@@ -1560,7 +1567,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/nix-dont-build-html-doc.diff		\
   %D%/packages/patches/nfs4-acl-tools-0.3.7-fixpaths.patch	\
   %D%/packages/patches/ngircd-handle-zombies.patch		\
-  %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		\
@@ -1585,6 +1591,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ocaml-4.09-multiple-definitions.patch	\
   %D%/packages/patches/omake-fix-non-determinism.patch	\
   %D%/packages/patches/oneko-remove-nonfree-characters.patch	\
+  %D%/packages/patches/onionshare-cli-async-mode.patch		\
   %D%/packages/patches/onnx-optimizer-system-library.patch	\
   %D%/packages/patches/onnx-use-system-googletest.patch	\
   %D%/packages/patches/onnx-shared-libraries.patch	\
@@ -1592,7 +1599,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/openboardview-use-system-imgui.patch	\
   %D%/packages/patches/openboardview-use-system-utf8.patch	\
   %D%/packages/patches/openbox-python3.patch			\
-  %D%/packages/patches/opencascade-oce-glibc-2.26.patch		\
   %D%/packages/patches/openfoam-4.1-cleanup.patch			\
   %D%/packages/patches/openjdk-9-hotspot-pointer-comparison.patch	\
   %D%/packages/patches/openjdk-9-hotspot-stack-size.patch	\
@@ -1608,6 +1614,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/opensles-add-license-file.patch			\
   %D%/packages/patches/openssl-1.1-c-rehash-in.patch		\
   %D%/packages/patches/openssl-3.0-c-rehash-in.patch		\
+  %D%/packages/patches/opentaxsolver-file-browser-fix.patch     \
   %D%/packages/patches/open-zwave-hidapi.patch			\
   %D%/packages/patches/orpheus-cast-errors-and-includes.patch	\
   %D%/packages/patches/osip-CVE-2017-7853.patch			\
@@ -1619,6 +1626,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/pam-krb5-CVE-2020-10595.patch		\
   %D%/packages/patches/pango-skip-libthai-test.patch		\
   %D%/packages/patches/password-store-tree-compat.patch		\
+  %D%/packages/patches/petri-foo-0.1.87-fix-recent-file-not-exist.patch			\
+  %D%/packages/patches/php-fix-streams-copy-length.patch	\
   %D%/packages/patches/plasma-framework-fix-KF5PlasmaMacros.cmake.patch \
   %D%/packages/patches/pocketfft-cpp-prefer-preprocessor-if.patch			\
   %D%/packages/patches/pokerth-boost.patch			\
@@ -1660,8 +1669,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/perl-www-curl-fix-struct-void.patch	\
   %D%/packages/patches/perl-www-curl-remove-symbol.patch	\
   %D%/packages/patches/phoronix-test-suite-fsdg.patch		\
-  %D%/packages/patches/php-bug-74093-test.patch			\
-  %D%/packages/patches/php-curl-compat.patch			\
   %D%/packages/patches/picprog-non-intel-support.patch		\
   %D%/packages/patches/pidgin-add-search-path.patch		\
   %D%/packages/patches/pinball-system-ltdl.patch		\
@@ -1758,7 +1765,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/qemu-glibc-2.27.patch 			\
   %D%/packages/patches/qemu-glibc-2.30.patch 			\
   %D%/packages/patches/qemu-fix-agent-paths.patch 		\
-  %D%/packages/patches/qpdfview-qt515-compat.patch		\
   %D%/packages/patches/qrcodegen-cpp-make-install.patch		\
   %D%/packages/patches/qtbase-absolute-runpath.patch		\
   %D%/packages/patches/qtbase-moc-ignore-gcc-macro.patch	\
@@ -1769,11 +1775,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/qtwayland-gcc-11.patch			\
   %D%/packages/patches/qtwayland-dont-recreate-callbacks.patch	\
   %D%/packages/patches/qtwayland-cleanup-callbacks.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/ragel-char-signedness.patch		\
   %D%/packages/patches/randomjungle-disable-static-build.patch	\
   %D%/packages/patches/range-v3-build-with-gcc10.patch	\
@@ -1791,7 +1792,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ripperx-missing-file.patch		\
   %D%/packages/patches/rpcbind-CVE-2017-8779.patch		\
   %D%/packages/patches/rtags-separate-rct.patch			\
-  %D%/packages/patches/racket-backport-8.7-pkg-strip.patch	\
   %D%/packages/patches/racket-chez-scheme-bin-sh.patch		\
   %D%/packages/patches/racket-rktio-bin-sh.patch		\
   %D%/packages/patches/racket-zuo-bin-sh.patch			\
@@ -1833,6 +1833,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/scheme48-tests.patch			\
   %D%/packages/patches/scons-test-environment.patch		\
   %D%/packages/patches/screen-hurd-path-max.patch		\
+  %D%/packages/patches/scsh-nonstring-search-path.patch	\
   %D%/packages/patches/sdl-libx11-1.6.patch			\
   %D%/packages/patches/seed-webkit.patch			\
   %D%/packages/patches/sendgmail-accept-ignored-gsuite-flag.patch	\
@@ -1858,7 +1859,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/spectre-meltdown-checker-externalize-fwdb.patch \
   %D%/packages/patches/spectre-meltdown-checker-find-kernel.patch \
   %D%/packages/patches/sphinxbase-fix-doxygen.patch		\
-  %D%/packages/patches/spice-vdagent-glib-2.68.patch		\
   %D%/packages/patches/sssd-system-directories.patch		\
   %D%/packages/patches/steghide-fixes.patch			\
   %D%/packages/patches/suitesparse-mongoose-cmake.patch		\
@@ -1975,7 +1975,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/vboot-utils-skip-test-workbuf.patch	\
   %D%/packages/patches/vinagre-newer-freerdp.patch             \
   %D%/packages/patches/vinagre-newer-rdp-parameters.patch      \
-  %D%/packages/patches/virglrenderer-CVE-2017-6386.patch 	\
   %D%/packages/patches/virtuoso-ose-remove-pre-built-jar-files.patch	\
   %D%/packages/patches/vsearch-unbundle-cityhash.patch		\
   %D%/packages/patches/vte-CVE-2012-2738-pt1.patch			\
@@ -2002,16 +2001,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch\
   %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
   %D%/packages/patches/xf86-video-nouveau-fixup-ABI.patch	\
-  %D%/packages/patches/xf86-video-qxl-fix-build.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	\
-  %D%/packages/patches/xf86-video-voodoo-pcitag.patch		\
   %D%/packages/patches/xfce4-panel-plugins.patch		\
   %D%/packages/patches/xfce4-settings-defaults.patch		\
   %D%/packages/patches/xgboost-use-system-dmlc-core.patch       \
   %D%/packages/patches/xmonad-dynamic-linking.patch		\
-  %D%/packages/patches/xmonad-next-dynamic-linking.patch	\
   %D%/packages/patches/xnnpack-system-libraries.patch		\
   %D%/packages/patches/xplanet-1.3.1-cxx11-eof.patch		\
   %D%/packages/patches/xplanet-1.3.1-libdisplay_DisplayOutput.cpp.patch	\
diff --git a/gnu/packages/abiword.scm b/gnu/packages/abiword.scm
index 5a0a4cd7be..2817ca0e89 100644
--- a/gnu/packages/abiword.scm
+++ b/gnu/packages/abiword.scm
@@ -25,7 +25,6 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
diff --git a/gnu/packages/accessibility.scm b/gnu/packages/accessibility.scm
index 63f06f7460..3613bd8c45 100644
--- a/gnu/packages/accessibility.scm
+++ b/gnu/packages/accessibility.scm
@@ -23,6 +23,7 @@
 
 (define-module (gnu packages accessibility)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -229,7 +230,7 @@ incorporated.")
            libnotify))
     (native-inputs
      (list gettext-minimal intltool pkg-config))
-    (home-page "http://florence.sourceforge.net/")
+    (home-page "https://florence.sourceforge.net/")
     (synopsis "Extensible, scalable virtual keyboard for X11")
     (description
      "Florence is an extensible scalable virtual keyboard for X11.
@@ -245,11 +246,11 @@ available to help to click.")
     (license license:gpl2+)))
 
 (define-public footswitch
-  (let ((commit "ca43d53fc2002520cc825d119702afc124303e73")
-        (revision "2"))
+  (let ((commit "e455d6752221b9e9c3818cc304c873b9c2792490")
+        (revision "0"))
     (package
       (name "footswitch")
-      (version (git-version "0.1" revision commit))
+      (version (git-version "1.0" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -258,32 +259,32 @@ available to help to click.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "14pyzc4ws1mj859xs9n4x83wzxxvd3bh5bdxzr6nv267xwx1mq68"))))
+                  "0xkk60sg3szpgbl3z8djlpagglsldv9viqibsih6wcnbhikzlc6j"))))
       (build-system gnu-build-system)
+      (arguments
+       (list
+        #:tests? #f                     ; no tests
+        #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'configure)
+            ;; Install target in the Makefile does not work for Guix.
+            (replace 'install
+              (lambda _
+                (let ((bin (string-append #$output "/bin")))
+                  (install-file "footswitch" bin)
+                  (install-file "scythe" bin)))))))
       (native-inputs
        (list pkg-config))
       (inputs
        (list hidapi))
-      (arguments
-       `(#:tests? #f ; no tests
-         #:make-flags (list (string-append "CC=" ,(cc-for-target)))
-         #:phases (modify-phases %standard-phases
-                    (delete 'configure)
-                    ;; Install target in the Makefile does not work for Guix
-                    (replace 'install
-                      (lambda* (#:key outputs #:allow-other-keys)
-                        (let ((bin (string-append (assoc-ref outputs "out")
-                                                  "/bin")))
-                          (install-file "footswitch" bin)
-                          (install-file "scythe" bin)
-                          #t))))))
       (home-page "https://github.com/rgerganov/footswitch")
-      (synopsis "Command line utility for PCsensor foot switch")
+      (synopsis "Command line utilities for PCsensor and Scythe foot switches")
       (description
-       "Command line utility for programming foot switches sold by PCsensor.
-It works for both single pedal devices and three pedal devices.  All supported
-devices have vendorId:productId = 0c45:7403 or 0c45:7404.")
-    (license license:expat))))
+       "This package provides command line utilities for programming PCsensor
+and Scythe foot switches.  It works for both single pedal and three pedal
+devices.")
+      (license license:expat))))
 
 (define-public xmagnify
   (package
diff --git a/gnu/packages/ada.scm b/gnu/packages/ada.scm
index ea3e9c365b..6fcd689be0 100644
--- a/gnu/packages/ada.scm
+++ b/gnu/packages/ada.scm
@@ -21,16 +21,10 @@
 (define-module (gnu packages ada)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system python)
   #:use-module (guix packages)
-  #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages check)
-  #:use-module (gnu packages compression)
-  #:use-module (gnu packages python)
-  #:use-module (gnu packages python-xyz)
   #:use-module (ice-9 match))
 
 (define-public ada/ed
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 3c03002a02..deb2b8706e 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -53,8 +53,10 @@
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
 ;;; Copyright © 2022 Andreas Rammhold <andreas@rammhold.de>
 ;;; Copyright © 2022 ( <paren@disroot.org>
-;;; Copyright © 2022 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2022, 2023 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Juliana Sims <jtsims@protonmail.com>
+;;; Copyright © 2023 Lu Hui <luhux76@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -767,7 +769,7 @@ on memory usage on GNU/Linux systems.")
 (define-public htop
   (package
     (name "htop")
-    (version "3.2.1")
+    (version "3.2.2")
     (source
      (origin
        (method git-fetch)
@@ -775,7 +777,7 @@ on memory usage on GNU/Linux systems.")
              (url "https://github.com/htop-dev/htop")
              (commit version)))
        (sha256
-        (base32 "0yfmkw3y4qyd42svhpiijif7krvmnb8z88y6h9g4fwf7sfynq2rk"))
+        (base32 "0cyaprgnhfrc7rqq053903bjylaplvxkb65b04bsxmiva09lvf9s"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
@@ -1151,7 +1153,7 @@ ONC RPC numbers.")
        (let ((out (assoc-ref %outputs "out")))
          (list (string-append "--mandir=" out "/share/man")
                (string-append "--infodir=" out "/share/info")))))
-    (home-page "http://netcat.sourceforge.net")
+    (home-page "https://netcat.sourceforge.net")
     (synopsis "Read and write data over TCP/IP")
     (description
      "Netcat is a featured networking utility which reads and writes data
@@ -1268,7 +1270,7 @@ IPv6, proxies, and Unix sockets.")
                   "1gpvd2kjyhs18sh6sga5bk9wj8s78blfd4c0m38r0wl92jx2yv1b"))))))
     (inputs
      (list ncurses))
-    (home-page "http://nmon.sourceforge.net/")
+    (home-page "https://nmon.sourceforge.net/")
     (synopsis
      "Monitor system performance in a terminal or to a @file{.csv} log file")
     (description
@@ -1958,7 +1960,7 @@ system administrator.")
 (define-public sudo
   (package
     (name "sudo")
-    (version "1.9.12p2")
+    (version "1.9.13p2")
     (source (origin
               (method url-fetch)
               (uri
@@ -1968,7 +1970,7 @@ system administrator.")
                                     version ".tar.gz")))
               (sha256
                (base32
-                "0fc55axh2hfd8hn66dpmyrrgb0gf0nz71zpaygkrpp8x1ypb385r"))
+                "0kapjhgyzaqk2nfzzz04ss9x6cy61s79afd3vhgkn0y1wkyh886z"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -2211,6 +2213,10 @@ command.")
     (name "wpa-supplicant")
     (inputs (modify-inputs (package-inputs wpa-supplicant-minimal)
               (prepend dbus)))
+    (source (origin
+              (inherit (package-source wpa-supplicant-minimal))
+              (patches (search-patches
+                        "wpa-supplicant-dbus-group-policy.patch"))))
     (arguments
      (substitute-keyword-arguments (package-arguments wpa-supplicant-minimal)
        ((#:phases phases)
@@ -2756,7 +2762,7 @@ degradation and failure.")
 (define-public fdupes
   (package
     (name "fdupes")
-    (version "2.1.2")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
@@ -2764,7 +2770,7 @@ degradation and failure.")
                            "releases/download/v" version "/"
                            "fdupes-" version ".tar.gz"))
        (sha256
-        (base32 "1g9p50xhi2sp0hqxml4w2k0kq9jv988q2yxm347z5349dlxvap6d"))))
+        (base32 "13b9qph8nmxwns9n28im3f7bdzhpjas51vckm9b7h5ghlffbfsw4"))))
     (build-system gnu-build-system)
     (inputs
      (list ncurses pcre2))
@@ -3297,14 +3303,14 @@ rules is done with the @code{auditctl} utility.")
 (define-public nmap
   (package
     (name "nmap")
-    (version "7.92")
+    (version "7.93")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nmap.org/dist/nmap-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "18bifn67kz2wxkbnfwcrin2xrhc6qf4p2bvxfqb2a2vbi8pryix5"))
+                "0lb6s4nmmicfnc221mzgx2w51dcd4b2dhx22pabcqnp2jd3zxg2m"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3317,18 +3323,7 @@ rules is done with the @code{auditctl} utility.")
                               ;; Remove pre-compiled binares.
                               "mswin32"))))))
     (build-system gnu-build-system)
-    (inputs
-     `(("openssl" ,openssl)
-       ("libpcap" ,libpcap)
-       ("pcre" ,pcre)
-       ("lua" ,lua)
-       ("zlib" ,zlib)                   ;for NSE compression support
-
-       ;; For 'ndiff'.
-       ("python" ,python-2)))
-
-    ;; TODO Add zenmap output.
-    (outputs '("out" "ndiff"))
+    (outputs '("out" "ndiff"))          ; TODO Add zenmap output
     (arguments
      `(#:configure-flags '("--without-zenmap")
        #:phases
@@ -3371,6 +3366,13 @@ rules is done with the @code{auditctl} utility.")
                        "check-dns")))))
        ;; Nmap can't cope with out-of-source building.
        #:out-of-source? #f))
+    (inputs
+     (list libpcap
+           lua
+           openssl-3.0
+           pcre
+           zlib                         ; for NSE compression
+           python-2))                   ; for ndiff
     (home-page "https://nmap.org/")
     (synopsis "Network discovery and security auditing tool")
     (description
@@ -3379,7 +3381,7 @@ tool.  It is also useful for tasks such as network inventory, managing service
 upgrade schedules, and monitoring host or service uptime.  It also provides an
 advanced netcat implementation (ncat), a utility for comparing scan
 results (ndiff), and a packet generation and response analysis tool (nping).")
-    ;; See <https://github.com/nmap/nmap/issues/2199#issuecomment-894812634>.
+    ;; See <https://github.com/nmap/nmap/issues/2199#issuecomment-1380592744>.
     ;; This package uses nmap's bundled versions of libdnet and liblinear, which
     ;; both use a 3-clause BSD license.
     (license (list license:nmap license:bsd-3))))
@@ -3729,7 +3731,7 @@ in order to be able to find it.
 (define-public xfel
   (package
     (name "xfel")
-    (version "1.2.4")
+    (version "1.2.9")
     (source
      (origin
        (method git-fetch)
@@ -3737,7 +3739,7 @@ in order to be able to find it.
               (url "https://github.com/xboot/xfel.git")
               (commit (string-append "v" version))))
        (sha256
-         (base32 "0r4j63vh6279fj1yh71h08d1av3nc0majlad5yh6admsxiig101m"))
+         (base32 "0gs37w5zjfmyadm49hdalq6vr6gidc683agz3shncgj93x2hxx02"))
        (file-name (git-file-name name version))))
     (native-inputs
      (list pkg-config))
@@ -3755,12 +3757,14 @@ in order to be able to find it.
                 (("/usr/local") out)
                 (("/usr") out)
                 (("/etc/udev/rules.d")
-                 (string-append out "/lib/udev/rules.d"))))))
+                 (string-append out "/lib/udev/rules.d"))
+                (("udevadm control --reload") ; next version will remove this
+                  "")))))
          (delete 'configure))))
     (home-page "https://github.com/xboot/xfel")
-    (synopsis "Remote debugging tool for Allwinner D1 computers")
-    (description "This package contains a debugging tool for Allwinner D1
-devices (connects via USB OTG).")
+    (synopsis "Remote debugging tool for Allwinner devices")
+    (description "This package contains a debugging tool for Allwinner devices
+(connects via USB OTG).")
     (license license:expat)))
 
 (define-public sedsed
@@ -3828,17 +3832,16 @@ buffers.")
 (define-public igt-gpu-tools
   (package
     (name "igt-gpu-tools")
-    ;; You should very likely remove the 'fix-meson.build phase when upgrading.
-    (version "1.26")
+    (version "1.27.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://gitlab.freedesktop.org/drm/igt-gpu-tools.git")
-             (commit (string-append "igt-gpu-tools-" version))))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0m124pqv7zna25jnvk566c4kk628jr0w8mgnp8mr5xqz9cprgczm"))))
+        (base32 "0d6jsj77qddccv0vfmqmbw3k2prvxzvmgc8zdi83gdi3wpp5i7zd"))))
     (build-system meson-build-system)
     (arguments
      `(#:tests? #f              ; many of the tests try to load kernel modules
@@ -3847,13 +3850,7 @@ buffers.")
          (add-after 'unpack 'find-rst2man.py
            (lambda _
              (substitute* "man/meson.build"
-               (("'rst2man'") "'rst2man.py'"))))
-         (add-after 'unpack 'fix-meson.build
-           ;; Fix ‘ERROR: Function does not take positional arguments.’
-           (lambda _
-             (substitute* "lib/meson.build"
-               (("f\\.underscorify\\(f\\)")
-                "f.underscorify()")))))))
+               (("'rst2man'") "'rst2man.py'")))))))
     (inputs
      (list cairo
            elfutils ; libdw
@@ -3911,19 +3908,19 @@ you are running, what theme or icon set you are using, etc.")
 (define-public hyfetch
   (package
     (name "hyfetch")
-    (version "1.4.4")
+    (version "1.4.7")
     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "HyFetch" version))
-        (sha256
-          (base32 "1k3pcl16y2czkk7wd79yk0w1kqpi4fp8h8szhjs5ywwy20nqmms8"))))
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/hykilpikonna/hyfetch")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1w0wzai73rr7iliii77f15ck5ki03xcvrhgzbp72nn7xcpix9wqd"))))
     (build-system python-build-system)
-    (inputs (list python-hypy-utils python-typing-extensions))
-    (arguments `(#:phases (modify-phases %standard-phases
-                            (add-before 'build 'set-HOME
-                              (lambda _  ;; Tries to set files in .config
-                                (setenv "HOME" "/tmp"))))))
+    (inputs (list python-typing-extensions))
     (home-page "https://github.com/hykilpikonna/HyFetch")
     (synopsis "@code{neofetch} with pride flags <3")
     (description "HyFetch is a command-line system information tool fork of
@@ -3934,6 +3931,48 @@ be used in screenshots to show other users what operating system or distribution
 you are running, what theme or icon set you are using, etc.")
     (license license:expat)))
 
+(define-public uwufetch
+  (package
+    (name "uwufetch")
+    (version "2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/TheDarkBug/uwufetch")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0s4pzaqmlq6rn54kgmlpcrc0sy3q5zn6lxh4448k9iimshljsjfs"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f ;no tests
+      #:make-flags
+      #~(list (string-append "DESTDIR=" #$output)
+              (string-append "ETC_DIR=" #$output "/etc")
+              (string-append "CC=" #$(cc-for-target)))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-before 'build 'path-source-paths
+            (lambda _
+              (substitute* "uwufetch.c"
+                (("(/usr(/local)?)(.*;)" all _ _ rest)
+                 (string-append #$output rest))))))))
+    (inputs (list lshw
+                  ;; viu XXX not yet packaged in Guix
+                  xwininfo))
+    (home-page "https://github.com/TheDarkBug/uwufetch")
+    (synopsis "Meme system info tool based on Nyan/UwU trend")
+    (description
+     "UwUFetch is a system information tool in the lineage of NeoFetch,
+PFetch, HyFetch, and the like.  It prints ASCII art of your system's logo as
+well as a summary of system information.  UwUFetch's unique contribution is the
+uwu-ification of various words used in the description.  For example, Guix
+becomes gUwUix.")
+    (license license:gpl3+)))
+
 (define-public screenfetch
   (package
     (name "screenfetch")
@@ -4301,7 +4340,7 @@ Python loading in HPC environments.")
   (let ((real-name "inxi"))
     (package
       (name "inxi-minimal")
-      (version "3.3.24-1")
+      (version "3.3.25-1")
       (source
        (origin
          (method git-fetch)
@@ -4310,7 +4349,7 @@ Python loading in HPC environments.")
                (commit version)))
          (file-name (git-file-name real-name version))
          (sha256
-          (base32 "1nai43251r791qvc1c4hhvcaa6hq7zcjlww7k3ip7br6zgxqjaxm"))))
+          (base32 "0mak2f06xzalccgaij9fsi20600sg05v0pmg0blvy6hvq5kh97k3"))))
       (build-system trivial-build-system)
       (inputs
        (list bash-minimal
@@ -5189,7 +5228,7 @@ it won't take longer to install 15 machines than it would to install just 2.")
 (define-public greetd
   (package
     (name "greetd")
-    (version "0.8.0")
+    (version "0.9.0")
     (home-page "https://git.sr.ht/~kennylevinsen/greetd")
     (source (origin
               (method git-fetch)
@@ -5198,11 +5237,11 @@ it won't take longer to install 15 machines than it would to install just 2.")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "0x5c3jkw09kvj2grcxm899y2n6ws8p990cyp9cs0fy6lm4fzlh6v"))))
+               (base32 "1b79lb0vikh5vwpdlyga6zwzm11gpsd7ghp8zb0q2m6mlqlj5by3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-nix" ,rust-nix-0.19)
+       (("rust-nix" ,rust-nix-0.26)
         ("rust-pam-sys" ,rust-pam-sys-0.5)
         ("rust-rpassword" ,rust-rpassword-5)
         ("rust-users" ,rust-users-0.11)
@@ -5249,8 +5288,7 @@ it won't take longer to install 15 machines than it would to install just 2.")
                  (install-file "greetd-ipc.7" man7)
                  (install-file "agreety.1" man1))))))))
     (native-inputs
-     `(("linux-pam" ,linux-pam)
-       ("scdoc" ,scdoc)))
+     (list linux-pam scdoc))
     (synopsis "Minimal and flexible login manager daemon")
     (description
      "greetd is a minimal and flexible login manager daemon
@@ -5665,7 +5703,7 @@ file or files to several hosts.")
 (define-public doctl
   (package
     (name "doctl")
-    (version "1.92.0")
+    (version "1.92.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5674,7 +5712,7 @@ file or files to several hosts.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0n8xajr9s0y7a43is24q0f9nznmr2sjhlhgg9fpyx4s4nr3s5yqw"))))
+                "1zb7vx7nqg8q9vdgb90cwmrr1cijv8gfryni8yrd99bb9vgg6pyv"))))
     (build-system go-build-system)
     (arguments
      (list #:import-path "github.com/digitalocean/doctl/cmd/doctl"
diff --git a/gnu/packages/agda.scm b/gnu/packages/agda.scm
index 038b38195f..7128a3f108 100644
--- a/gnu/packages/agda.scm
+++ b/gnu/packages/agda.scm
@@ -28,7 +28,6 @@
   #:use-module (guix build-system emacs)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system haskell)
-  #:use-module (guix build-system trivial)
   #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -42,12 +41,11 @@
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/Agda/Agda-"
-             version ".tar.gz"))
+       (uri (hackage-uri "Agda" version))
        (sha256
         (base32 "0yjjbhc593ylrm4mq4j01nkdvh7xqsg5in30wxj4y53vf5hkggp5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Agda")))
     (inputs
      (list ghc-aeson
            ghc-alex
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 620bd5c355..2cad91c39f 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -103,7 +103,7 @@ implement the floating point approach to complex multiplication are
 implemented.  On the other hand, these comprise asymptotically fast
 multiplication routines such as Toom–Cook and the FFT.")
    (license license:lgpl3+)
-   (home-page "http://www.multiprecision.org/mpfrcx/")))
+   (home-page "https://www.multiprecision.org/mpfrcx/")))
 
 (define-public gf2x
   (package
@@ -131,7 +131,7 @@ greatest common divisor operations.")
 (define-public cm
   (package
    (name "cm")
-   (version "0.4.0")
+   (version "0.4.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -139,7 +139,7 @@ greatest common divisor operations.")
                   version ".tar.gz"))
             (sha256
              (base32
-              "04l3inafql40n0r5rq8rmp21zplgdrzblil2kgkpx5s0jbs9i8rr"))))
+              "1avaw6a7lyc2833gr9b7zpk4blvrrrkz8r62sv1grh9xc9i4zg07"))))
    (build-system gnu-build-system)
    (propagated-inputs
      (list mpfrcx zlib)) ; Header files included from cm_common.h.
@@ -153,7 +153,7 @@ multiplication via floating point approximations.  It consists of libraries
 that can be called from within a C program and of executable command
 line applications.")
    (license license:gpl3+)
-   (home-page "http://www.multiprecision.org/cm/")))
+   (home-page "https://www.multiprecision.org/cm/")))
 
 (define-public fplll
   (package
@@ -464,7 +464,7 @@ GCDs, factoring, solving linear systems, and evaluating special
 functions.  In addition, FLINT provides various low-level routines for
 fast arithmetic.")
    (license license:lgpl2.1+)
-   (home-page "http://flintlib.org/")
+   (home-page "https://flintlib.org/")
    (properties
     '((release-monitoring-url . "http://flintlib.org/downloads.html")))))
 
@@ -768,7 +768,7 @@ a C program.")
          ;; different machine.
          "ax_cv_c_flags__mtune_native=no")))
     (native-inputs (list perl))
-    (home-page "http://fftw.org")
+    (home-page "https://fftw.org")
     (synopsis "Computing the discrete Fourier transform")
     (description
      "FFTW is a C subroutine library for computing the discrete Fourier
@@ -1776,7 +1776,7 @@ no more than about 20 bits long).")
             "0n8gj5iylfagdbaqirpykb01a9difsy4zl6qq55f0ghvazxqdvmn"))))
     (properties `((upstream-name . "dtt")))
     (build-system r-build-system)
-    (home-page "http://www.r-project.org")
+    (home-page "https://www.r-project.org")
     (synopsis "Discrete Trigonometric Transforms")
     (description
       "This package provides functions for 1D and 2D Discrete Cosine Transform
diff --git a/gnu/packages/antivirus.scm b/gnu/packages/antivirus.scm
index f72ffea1ff..750db04040 100644
--- a/gnu/packages/antivirus.scm
+++ b/gnu/packages/antivirus.scm
@@ -45,14 +45,14 @@
 (define-public clamav
   (package
     (name "clamav")
-    (version "0.103.7")
+    (version "0.103.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.clamav.net/downloads/production/"
                                   "clamav-" version ".tar.gz"))
               (sha256
                (base32
-                "0l3yn4dl4zgpq2qmj29kkd0fksyy1icr0rpp3fyvbcqcc0gw6d0y"))
+                "0gwcikzfdswrdh5vhh3x4lx8w92476fmb7im7phnv4r7x5pdljbg"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/apl.scm b/gnu/packages/apl.scm
index e483876cc5..6a8d97848b 100644
--- a/gnu/packages/apl.scm
+++ b/gnu/packages/apl.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
+;;; Copyright © 2023 B. Wilson <elaexuotee@wilsonb.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,8 @@
   #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages pcre)
@@ -76,3 +79,44 @@
        "GNU APL is a free interpreter for the programming language APL.  It is
 an implementation of the ISO standard 13751.")
       (license license:gpl3+))))
+
+(define-public font-apl2741-unicode
+  (let ((commit "1e11efae38e5095bfe49a786b111d563e83dad03"))
+    (package
+      (name "font-apl2741-unicode")
+      (version "1668049300")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/abrudz/APL2741.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0i1yk1x99lr2swlbq9r7dny5w70zwiwi8lpfcw4n7k7pfbw0xh7y"))))
+      (build-system trivial-build-system)
+      (native-inputs (list fontforge))
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+           (let* ((source (assoc-ref %build-inputs "source"))
+                  (out (assoc-ref %outputs "out"))
+                  (dest (string-append out "/share/fonts/truetype"))
+                  (fontforge (string-append
+                              (assoc-ref %build-inputs "fontforge")
+                              "/bin/fontforge")))
+             (mkdir-p dest)
+             (invoke fontforge "-lang=ff" "-c" "Open($1); Generate($2)"
+                     (string-append source "/APL2741.sfd")
+                     (string-append dest "/APL2741.ttf"))))))
+      (synopsis "APL2741 Unicode font")
+      (home-page "https://abrudz.github.io/APL2741/")
+      (description "APL font based on Adrian Smith's IBM Selectric APL2741
+golf-ball font.  It supports most special characters used by popular APL
+implementations, some additional mathematical and typographical symbols,
+single line drawing characters, as well as the full Unicode APL range,
+including both uppercase and lowercase underscored alphabets, as-of-yet unused
+symbols, and almost all Latin-1 accented letters.")
+      (license license:unlicense))))
diff --git a/gnu/packages/apr.scm b/gnu/packages/apr.scm
index 3b4968089b..aedddd8644 100644
--- a/gnu/packages/apr.scm
+++ b/gnu/packages/apr.scm
@@ -49,7 +49,7 @@
      '(#:parallel-build? #f
        #:parallel-tests? #f))
     (inputs (list perl libltdl))
-    (home-page "http://apr.apache.org/")
+    (home-page "https://apr.apache.org/")
     (synopsis "The Apache Portable Runtime Library")
     (description
      "The mission of the Apache Portable Runtime (APR) project is to create and
@@ -96,7 +96,7 @@ around or take advantage of platform-specific deficiencies or features.")
        ;; to run it.  See
        ;; <http://lists.gnu.org/archive/html/guix-devel/2014-03/msg00261.html>.
        #:parallel-tests? #f))
-    (home-page "http://apr.apache.org/")
+    (home-page "https://apr.apache.org/")
     (synopsis "One of the Apache Portable Runtime Library companions")
     (description
      "APR-util provides a number of helpful abstractions on top of APR.")
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index acbe9d9fdb..83b54a2986 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -13,6 +13,8 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Noah Landis <noahlandis@posteo.net>
 ;;; Copyright © 2021 Sergiu Ivanov <sivanov@colimite.fr>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
+;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,7 +76,7 @@
                   (string-append "\"filter-path" middle
                                  "\"" libdir "\"")))
                #t))))))
-    (inputs (list perl))
+    (native-inputs (list perl))
 
     (native-search-paths
      ;; This is a Guix-specific environment variable that takes a single
@@ -161,6 +163,14 @@ dictionaries, including personal ones.")
                      (base32
                       "1svls9p7rsfi3hs0afh0cssj006qb4v1ik2yzqgj8hm10c6as2sm")))
 
+(define-public aspell-dict-bg
+  (aspell-dictionary "bg" "Bulgarian"
+                     #:version "4.1-0"
+                     #:prefix "aspell6-"
+                     #:sha256
+                     (base32
+                      "1alacmgpfk0yrgq83y23d16fhav1bxmb98kg8d2a5r9bvh2h0mvl")))
+
 (define-public aspell-dict-bn
   (aspell-dictionary "bn" "Bengali"
                      #:version "0.01.1-1"
@@ -291,7 +301,7 @@ dictionaries, including personal ones.")
                              "aspell6-it-" version ".tar.bz2"))
          (hash (content-hash sha256))))
        (home-page
-        "http://linguistico.sourceforge.net/pages/dizionario_italiano.html"))))
+        "https://linguistico.sourceforge.net/pages/dizionario_italiano.html"))))
 
 (define-public aspell-dict-mi
   (aspell-dictionary "mi" "Maori"
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index 7e36bbcc71..ff8fe69e64 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -133,14 +133,14 @@ debugging information in STABS, DWARF 2, and CodeView 8 formats.")
 (define-public lightning
   (package
     (name "lightning")
-    (version "2.2.0")
+    (version "2.2.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/lightning/lightning-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "03kwvn00qggys203vpzb2kq2asy0ql7x84ajk05a62yg3kzq8faf"))))
+               "1aiwx9cl9c7swqcgrsjnvd5laah3iwxzl1van3670iv8sn0icrwq"))))
     (build-system gnu-build-system)
     (native-inputs (list zlib))
     (arguments
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 2f08b656c0..b6ed1e2f49 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -37,6 +37,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
@@ -44,6 +45,8 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gps)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages image-processing)
@@ -51,6 +54,7 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
   #:use-module (gnu packages perl)
@@ -70,6 +74,7 @@
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages video)
   #:use-module (gnu packages wxwidgets)
@@ -346,7 +351,7 @@ wide set of telescopes.")
            python
            python-numpy
            wcslib))
-    (home-page "http://casacore.github.io/casacore/")
+    (home-page "https://casacore.github.io/casacore/")
     (synopsis "Suite of C++ libraries for radio astronomy data processing")
     (description
      "The casacore package contains the core libraries of the old
@@ -650,7 +655,7 @@ programs for the manipulation and analysis of astronomical data.")
     (inputs
      `(("openblas" ,openblas)
        ("fftw" ,fftwf)))
-    (home-page "http://www.astromatic.net/software/sextractor")
+    (home-page "https://www.astromatic.net/software/sextractor")
     (synopsis "Extract catalogs of sources from astronomical images")
     (description
      "SExtractor is a program that builds a catalogue of objects from an
@@ -835,45 +840,66 @@ deconvolution).  Such post-processing is not performed by Stackistry.")
 (define-public stellarium
   (package
     (name "stellarium")
-    (version "0.21.1")
+    (version "1.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/Stellarium/stellarium"
-                           "/releases/download/v" version
-                           "/stellarium-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Stellarium/stellarium")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "049jlc8vx06pad5h2syrmf7f1l346yr5iraai0wkn8s8pk30j8q7"))))
+        (base32 "1655lz848k7m4vqs7n3vxjwn5n4pkykwl6x7nbanqcqzlixm5xnk"))))
     (build-system cmake-build-system)
+    ;; TODO: Complete documentation build and split into dedicated outputs.
+    (arguments
+     (list
+      ;; FIXME: Tests keep failing on 100% when preparing test-suit for INDI.
+      #:tests? #f
+      #:test-target "test"
+      #:configure-flags
+      #~(list "-DENABLE_GPS=1"
+              ;; TODO: Enable when all of the dependencies are availalbe for Qt6.
+              "-DENABLE_QT6=0"
+              ;; TODO: Pack missing in Guix https://10110111.github.io/CalcMySky/
+              "-DENABLE_SHOWMYSKY=0"
+              "-DENABLE_TESTING=0"
+              (string-append "-DCMAKE_CXX_FLAGS=-isystem "
+                             #$(this-package-input "qtserialport") "/include/qt5"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'set-offscreen-display
+            (lambda _
+              (setenv "QT_QPA_PLATFORM" "offscreen")
+              (setenv "HOME" "/tmp"))))))
     (inputs
-     (list qtbase-5
+     (list gpsd
+           indi
+           libnova
+           openssl
+           qtbase-5
+           qtcharts
            qtlocation
            qtmultimedia-5
+           qtpositioning
            qtscript
            qtserialport
+           qttranslations
+           qtwebengine-5
+           qxlsx
            zlib))
     (native-inputs
-     `(("gettext" ,gettext-minimal)     ; xgettext is used at compile time
-       ("perl" ,perl)                   ; for pod2man
-       ("qtbase" ,qtbase-5)               ; Qt MOC is needed at compile time
-       ("qttools-5" ,qttools-5)))
-    (arguments
-     `(#:test-target "test"
-       #:configure-flags (list "-DENABLE_TESTING=1"
-                               (string-append
-                                "-DCMAKE_CXX_FLAGS=-isystem "
-                                (assoc-ref %build-inputs "qtserialport")
-                                "/include/qt5"))
-       #:phases (modify-phases %standard-phases
-                  (add-before 'check 'set-offscreen-display
-                    (lambda _
-                      ;; Make Qt render "offscreen", required for tests.
-                      (setenv "QT_QPA_PLATFORM" "offscreen")
-                      (setenv "HOME" "/tmp")
-                      #t)))))
+     (list doxygen
+           gettext-minimal
+           graphviz
+           mesa
+           perl
+           python-wrapper
+           qttools-5))
     (home-page "https://stellarium.org/")
     (synopsis "3D sky viewer")
-    (description "Stellarium is a planetarium.  It shows a realistic sky in
+    (description
+     "Stellarium is a planetarium.  It shows a realistic sky in
 3D, just like what you see with the naked eye, binoculars, or a telescope.  It
 can be used to control telescopes over a serial port for tracking celestial
 objects.")
@@ -1655,6 +1681,54 @@ positions of the sun: dawn, sunrise, solar noon, sunset, dusk, solar
 elevation, solar azimuth, rahukaalam, and the phases of the moon.")
     (license license:asl2.0)))
 
+(define-public python-spherical-geometry
+  (package
+    (name "python-spherical-geometry")
+    (version "1.2.22")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/spacetelescope/spherical_geometry")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0kzcncqir4v7nhk9lxj9gxr32p3krkaqa58y2i4kksgxxy24qw4z"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      ;; NOTE: (Sharlatan-20220523T231348+0100): Tests depends on old Python2
+      ;; libarry `sphere'
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'preparations
+            (lambda _
+              ;; Fixing: setuptools-scm was unable to detect version for ...
+              (substitute* "setup.py"
+                (("use_scm_version=True")
+                 (format #f "version=~s" #$version))
+                (("setup_requires=\\['setuptools_scm'\\],.*")
+                 ""))
+              ;; Use our own libraries in place of bundles.
+              (setenv "USE_SYSTEM_QD" "1"))))))
+    (native-inputs
+     (list python-pytest
+           python-setuptools-scm))
+    (inputs
+     (list qd))
+    (propagated-inputs
+     (list python-astropy
+           python-numpy))
+    (home-page "https://github.com/spacetelescope/tweakwcs")
+    (synopsis "Python astronimical package for handling spherical polygons")
+    (description
+     "The @code{spherical_geometry} library is a Python package for handling
+spherical polygons that represent arbitrary regions of the sky.")
+    ;; LICENSE.rst Association of Universities for Research in Astronomy (AURA)
+    ;; QD_LIBRARY_LICENSE.rst for bandeled QD source
+    (license license:bsd-3)))
+
 (define-public libnova
   (package
     (name "libnova")
@@ -1683,7 +1757,7 @@ elevation, solar azimuth, rahukaalam, and the phases of the moon.")
     (synopsis "Celestial mechanics, astrometry and astrodynamics library")
     (description "Libnova is a general purpose, double precision, Celestial
 Mechanics, Astrometry and Astrodynamics library.")
-    (home-page "http://libnova.sourceforge.net/")
+    (home-page "https://libnova.sourceforge.net/")
     (license (list license:lgpl2.0+
                    license:gpl2+)))) ; examples/transforms.c & lntest/*.c
 
@@ -1889,7 +1963,7 @@ on FITS files:
                   (string-append "CPPFLAGS=-I" netpbm "/include/netpbm")
                   ;; no nasa jpl cspice support
                   "--without-cspice" )))))
-    (home-page "http://xplanet.sourceforge.net/")
+    (home-page "https://xplanet.sourceforge.net/")
     (synopsis "Planetary body renderer")
     (description
      "Xplanet renders an image of a planet into an X window or file.
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 4fbfefafa3..ffb972175e 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -41,6 +41,7 @@
 ;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2022 Andy Tai <atai@atai.org>
 ;;; Copyright © 2023 Sergiu Ivanov <sivanov@colimite.fr>
+;;; Copyright © 2023 David Thompson <dthompson2@worcester.edu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -501,7 +502,7 @@ by MusicIP.")
     (description "LibTiMidity is a MIDI to WAVE converter library that uses
 Gravis Ultrasound-compatible patch files to generate digital audio data from
 General MIDI files.")
-    (home-page "http://libtimidity.sourceforge.net/")
+    (home-page "https://libtimidity.sourceforge.net/")
     (license
      ;; This project is dual-licensed.
      ;; Either of the following licenses can be exercised.
@@ -572,7 +573,7 @@ implementation of Adaptive Multi Rate Narrowband and Wideband
            qtbase-5))
     (native-inputs
      (list pkg-config qttools-5))
-    (home-page "http://alsamodular.sourceforge.net/")
+    (home-page "https://alsamodular.sourceforge.net/")
     (synopsis "Realtime modular synthesizer and effect processor")
     (description
      "AlsaModularSynth is a digital implementation of a classical analog
@@ -855,7 +856,7 @@ engineers, musicians, soundtrack editors and composers.")
 (define-public audacity
   (package
     (name "audacity")
-    (version "3.2.3")
+    (version "3.2.4")
     (source
      (origin
        (method git-fetch)
@@ -864,7 +865,7 @@ engineers, musicians, soundtrack editors and composers.")
              (commit (string-append "Audacity-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0wg75fblxlnrn5kqvg0w1fi2pwdkn1nd6vgya3sad84l3ki7wpyh"))
+        (base32 "06kfxbfvvhbhwfzkvar6hir351606g29ij8b4hksxpzq338shgc3"))
        (patches (search-patches "audacity-ffmpeg-fallback.patch"))
        (modules '((guix build utils)))
        (snippet
@@ -1090,45 +1091,56 @@ formant warp.")
     (license license:gpl2+)))
 
 (define-public azr3
-  (package
-    (name "azr3")
-    (version "1.2.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://savannah/ll-plugins/azr3-jack-"
-                                  version
-                                  ".tar.bz2"))
-              (sha256
-               (base32
-                "18mdw6nc0vgj6k9rsy0x8w64wvzld0frqshrxxbxfj9qi9843vlc"))
-              (patches (search-patches "azr3.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f ; no check target
-       #:make-flags
-       (list "LV2PEG=ttl2c"
-             (string-append "prefix=" %output)
-             (string-append "pkgdatadir=" %output "/share/azr3-jack"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'install 'fix-timestamp
-           (lambda _
-             (let ((early-1980 315619200)) ; 1980-01-02 UTC
-               (utime "azr3.1" early-1980 early-1980))
-             #t)))))
-    (inputs
-     (list gtkmm-2 lvtk jack-1 lash))
-    (native-inputs
-     (list pkg-config))
-    (home-page "http://ll-plugins.nongnu.org/azr3/")
-    (synopsis "Tonewheel organ synthesizer")
-    (description
-     "AZR-3 is a port of the free VST plugin AZR-3.  It is a tonewheel organ
+  (let ((commit "3391a0a509e7fa3fb46c7627fd5979b67e468038")
+        (revision "1"))
+    (package
+      (name "azr3")
+      (version (git-version "1.2.3" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.savannah.gnu.org/git/ll-plugins/azr3-jack.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "09wy0z4kiid7mwf5b5j8rzzgxafi4mg88xs550n7864p0n351chx"))
+                (patches (search-patches "azr3.patch"
+                                         "azr3-remove-lash.patch"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:tests? #f                       ; no check target
+        #:make-flags
+        #~(list "LV2PEG=ttl2c"
+                (string-append "prefix=" #$output)
+                (string-append "pkgdatadir=" #$output "/share/azr3-jack"))
+        #:phases
+        #~(modify-phases %standard-phases
+            (replace 'bootstrap
+              (lambda _
+                (call-with-output-file "Makefile.config"
+                  (lambda (port) (display "" port)))
+                (substitute* "Makefile"
+                  (("^PACKAGE_VERSION =.*")
+                   (string-append "PACKAGE_VERSION = \"" #$version "\"\n")))))
+            (add-before 'install 'fix-timestamp
+              (lambda _
+                (let ((early-1980 315619200)) ; 1980-01-02 UTC
+                  (utime "azr3.1" early-1980 early-1980)))))))
+      (inputs
+       (list gtkmm-2 jack-2 lvtk))
+      (native-inputs
+       (list pkg-config))
+      (home-page "https://ll-plugins.nongnu.org/azr3/")
+      (synopsis "Tonewheel organ synthesizer")
+      (description
+       "AZR-3 is a port of the free VST plugin AZR-3.  It is a tonewheel organ
 with drawbars, distortion and rotating speakers.  The organ has three
 sections, two polyphonic sections with nine drawbars each and one monophonic
 bass section with five drawbars.  A standalone JACK application and LV2
 plugins are provided.")
-    (license license:gpl2)))
+      (license license:gpl2))))
 
 (define-public calf
   (package
@@ -1148,7 +1160,6 @@ plugins are provided.")
            glib
            gtk+-2
            cairo
-           lash
            jack-1
            lv2
            ladspa
@@ -1477,7 +1488,7 @@ formats used to store information about DJ record libraries.")
            bison
            sed
            grep))
-    (home-page "http://taopm.sourceforge.net/")
+    (home-page "https://taopm.sourceforge.net/")
     (synopsis "Sound Synthesis with Physical Models")
     (description "Tao is a software package for sound synthesis using physical
 models.  It provides a virtual acoustic material constructed from masses and
@@ -2148,7 +2159,7 @@ also play midifiles using a Soundfont.")
                      #t))))
     (native-inputs
      (list tar bzip2))
-    (home-page "http://freepats.zenvoid.org")
+    (home-page "https://freepats.zenvoid.org")
     (synopsis "GUS compatible patches for MIDI players")
     (description
      "FreePats is a project to create a free and open set of GUS compatible
@@ -2302,7 +2313,7 @@ auto-wah.")
            libsndfile
            libsamplerate
            zlib))
-    (home-page "http://rakarrack.sourceforge.net/")
+    (home-page "https://rakarrack.sourceforge.net/")
     (synopsis "Audio effects processor")
     (description
      "Rakarrack is a richly featured multi-effects processor emulating a
@@ -2566,13 +2577,12 @@ audio signal streaming.")
      (list lv2
            lilv
            suil
-           gtk
-           gtkmm
+           gtk+
            qtbase-5
            jack-1))
     (native-inputs
      (list pkg-config))
-    (home-page "https://drobilla.net/software/jalv/")
+    (home-page "https://drobilla.net/software/jalv.html")
     (synopsis "Simple LV2 host for JACK")
     (description
      "Jalv is a simple but fully featured LV2 host for JACK.  It runs LV2
@@ -2742,7 +2752,7 @@ with applications that support them (e.g. PulseAudio).")
      `(;; liblo test FAILED
        ;; liblo server error 19 in setsockopt(IP_ADD_MEMBERSHIP): No such device
        #:tests? #f))
-    (home-page "http://liblo.sourceforge.net")
+    (home-page "https://liblo.sourceforge.net")
     (synopsis "Implementation of the Open Sound Control protocol")
     (description
      "liblo is a lightweight library that provides an easy to use
@@ -3512,7 +3522,7 @@ using Guix System.")
      (list pkg-config))
     (inputs
      (list libogg libtheora libvorbis speex))
-    (home-page "http://idjc.sourceforge.net/")
+    (home-page "https://idjc.sourceforge.net/")
     (synopsis "Broadcast streaming library with IDJC extensions")
     (description "This package provides libshout plus IDJC extensions.")
     ;; GNU Library (not Lesser) General Public License.
@@ -3592,7 +3602,7 @@ tempo and pitch of an audio recording independently of one another.")
                 "1ff2yfq3k4l209fr71v3w98fpjjv1chs09vkbmxj03lcikahxns8"))))
     (build-system gnu-build-system)
     (inputs
-     (list jack-1 alsa-lib))
+     (list alsa-lib jack-2))
     (native-inputs
      (list autoconf automake libtool pkg-config))
     (home-page "https://www.music.mcgill.ca/~gary/rtmidi")
@@ -3748,7 +3758,7 @@ for loudness normalisation.")
            freepats))
     (native-inputs
      (list pkg-config))
-    (home-page "http://timidity.sourceforge.net/")
+    (home-page "https://timidity.sourceforge.net/")
     (synopsis "Software synthesizer for playing MIDI files")
     (description
      "TiMidity++ is a software synthesizer.  It can play MIDI files by
@@ -3833,7 +3843,7 @@ analysis plugins or audio feature extraction plugins.")
                                                "/ar-lib"))
              "ar-lib")
             #t)))))
-    (home-page "http://sbsms.sourceforge.net/")
+    (home-page "https://sbsms.sourceforge.net/")
     (synopsis "Library for time stretching and pitch scaling of audio")
     (description
      "SBSMS (Subband Sinusoidal Modeling Synthesis) is software for time
@@ -3911,7 +3921,7 @@ encode and decode wavpack files.")
                (base32
                 "1pnri98a603xk47smnxr551svbmgbzcw018mq1k6srbrq6kaaz25"))))
     (build-system gnu-build-system)
-    (home-page "http://modplug-xmms.sourceforge.net/")
+    (home-page "https://modplug-xmms.sourceforge.net/")
     (synopsis "Mod file playing library")
     (description
      "Libmodplug renders mod music files as raw audio data, for playing or
@@ -3932,7 +3942,7 @@ surround and reverb.")
                (base32
                 "1kycz4jsyvmf7ny9227b497wc7y5ligydi6fvvldmkf8hk63ad9m"))))
     (build-system gnu-build-system)
-    (home-page "http://xmp.sourceforge.net/")
+    (home-page "https://xmp.sourceforge.net/")
     (synopsis "Module player library")
     (description
      "Libxmp is a library that renders module files to PCM data.  It supports
@@ -3956,7 +3966,7 @@ Scream Tracker 3 (S3M), Fast Tracker II (XM), and Impulse Tracker (IT).")
      (list pkg-config))
     (inputs
      (list libxmp pulseaudio))
-    (home-page "http://xmp.sourceforge.net/")
+    (home-page "https://xmp.sourceforge.net/")
     (synopsis "Extended module player")
     (description
      "Xmp is a portable module player that plays over 90 mainstream and
@@ -4020,7 +4030,7 @@ control functionality, or just for playing around with the sound effects.")
            libpng
            libvorbis
            pulseaudio))
-    (home-page "http://sox.sourceforge.net")
+    (home-page "https://sox.sourceforge.net")
     (synopsis "Sound processing utility")
     (description
      "SoX (Sound eXchange) is a command line utility that can convert
@@ -4135,7 +4145,7 @@ interface.")
 (define-public qsynth
   (package
     (name "qsynth")
-    (version "0.5.7")
+    (version "0.9.9")
     (source
      (origin
        (method url-fetch)
@@ -4145,14 +4155,14 @@ interface.")
               (string-append "mirror://sourceforge/qsynth/qsynth (attic)"
                              "/qsynth-" version ".tar.gz")))
        (sha256
-        (base32 "18im4w8agj60nkppwbkxqnhpp13z5li3w30kklv4lgs20rvgbvl6"))))
-    (build-system gnu-build-system)
+        (base32 "1cjg25nva5ivahr0qqlvf6ybnpcx9jgrxbp4vgwkk64b4k9wnd4n"))))
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; no "check" phase
     (native-inputs
-     (list qttools-5 pkg-config))
+     (list qttools pkg-config))
     (inputs
-     (list fluidsynth qtbase-5 qtx11extras))
+     (list fluidsynth qtbase qtsvg qtwayland))
     (home-page "https://qsynth.sourceforge.io")
     (synopsis "Graphical user interface for FluidSynth")
     (description
@@ -4517,7 +4527,7 @@ with support for HD extensions.")
       '(modify-phases %standard-phases
          (delete 'configure))))
     (inputs (list fftw))
-    (home-page "http://drc-fir.sourceforge.net/")
+    (home-page "https://drc-fir.sourceforge.net/")
     (synopsis "Digital room correction")
     (description
      "DRC is a program used to generate correction filters for acoustic
@@ -4643,7 +4653,7 @@ code, used in @code{libtoxcore}.")
     (synopsis "GSM 06.10 lossy speech compression library")
     (description "This C library provides an encoder and a decoder for the GSM
 06.10 RPE-LTP lossy speech compression algorithm.")
-    (home-page "http://quut.com/gsm/")
+    (home-page "https://quut.com/gsm/")
     (license (license:non-copyleft "file://COPYRIGHT"))))
 
 (define-public python-pyalsaaudio
@@ -5162,7 +5172,7 @@ developing fully accurate DirectX Audio runtime libraries.")
      (list alsa-lib gtk+-2 libsndfile portaudio))
     (native-inputs
      (list pkg-config))
-    (home-page "http://gnaural.sourceforge.net/")
+    (home-page "https://gnaural.sourceforge.net/")
     (synopsis "Binaural beat synthesizer")
     (description "Gnaural is a programmable auditory binaural beat synthesizer
 intended to be used for brainwave entrainment.  Gnaural supports creation of
@@ -6152,10 +6162,46 @@ managed by PipeWire.")
     (build-system gnu-build-system)
     (native-inputs (list pkg-config))
     (inputs (list faad2 glib libmad libvorbis))
-    (home-page "http://streamripper.sourceforge.net")
+    (home-page "https://streamripper.sourceforge.net")
     (synopsis "Record audio streams to your hard drive")
     (description "Streamripper records shoutcast-compatible
 streams.  For shoutcast style streams it finds the “meta data” or track
 separation data, and uses that as a marker for where the track should
 be separated.")
     (license license:gpl2+)))
+
+(define-public cubeb
+  (let ((commit "9e29d728b0025c674904f83f5a13a88d1a6a5edc")
+        (revision "1"))
+    (package
+      (name "cubeb")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mozilla/cubeb")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1sxkr3h8a4hd3c3a3cjydrszz6npxk3vh6ra3y67lds3zgc69c7n"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:configure-flags
+         ;; Sanitizers-cmake requires a git submodule.
+         '("-DUSE_SANITIZERS=0"
+           ;; Tests require a git submodule for googletest.
+           "-DBUILD_TESTS=0"
+           ;; Use our speex, not a bundled one.
+           "-DBUNDLE_SPEEX=0"
+           ;; A static library would be built by default.
+           "-DBUILD_SHARED_LIBS=1"
+           ;; Explicitly link against audio libraries so they are on the
+           ;; runpath.  Otherwise cubeb tries to dlopen them at runtime.
+           "-DCMAKE_SHARED_LINKER_FLAGS=-lasound -lpulse -lspeex")
+         #:tests? #f))
+      (inputs (list alsa-lib pulseaudio speex))
+      (synopsis "Cross-platform audio library")
+      (description "Cubeb is Mozilla's cross-platform audio library.")
+      (home-page "https://github.com/mozilla/cubeb")
+      (license license:isc))))
diff --git a/gnu/packages/authentication.scm b/gnu/packages/authentication.scm
index d9dd6fac3d..a73f2cbc14 100644
--- a/gnu/packages/authentication.scm
+++ b/gnu/packages/authentication.scm
@@ -161,7 +161,7 @@ YubiKey into your existing user authentication infrastructure.")
      (list pkg-config))
     (inputs
      (list linux-pam))
-    (home-page "http://pamtester.sourceforge.net/")
+    (home-page "https://pamtester.sourceforge.net/")
     (synopsis "Utility for testing pluggable authentication modules (PAM) facility")
     (description
      "Pamtester is a tiny utility program to test the pluggable authentication
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 49f4865026..14fa42eefa 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -213,7 +213,7 @@ files with a system-specific shebang."
      (list
       ;; XXX: Kludge to hide the circular dependency.
       (module-ref (resolve-interface '(gnu packages guile))
-                  'guile-3.0/fixed)
+                  'guile-3.0/pinned)
       autoconf
       bash-minimal))
     (arguments
diff --git a/gnu/packages/aux-files/emacs/guix-emacs.el b/gnu/packages/aux-files/emacs/guix-emacs.el
index 56dbcb8d67..708093267d 100644
--- a/gnu/packages/aux-files/emacs/guix-emacs.el
+++ b/gnu/packages/aux-files/emacs/guix-emacs.el
@@ -76,6 +76,13 @@ The files in the list do not have extensions (.el, .elc)."
                    (when (file-directory-p pkg-dir)
                      (package-load-descriptor pkg-dir)))))))))))
 
+;; If emacs built with tree-sitter, read the value of the environment variable
+;; to make tree-sitter grammars available in emacs out-of-the-box.
+(with-eval-after-load 'treesit
+  (when-let ((grammar-path (getenv "TREE_SITTER_GRAMMAR_PATH")))
+    (mapcar (lambda (x) (add-to-list 'treesit-extra-load-path x))
+            (split-string grammar-path ":"))))
+
 (provide 'guix-emacs)
 
 ;;; guix-emacs.el ends here
diff --git a/gnu/packages/aux-files/linux-libre/4.14-i686.conf b/gnu/packages/aux-files/linux-libre/4.14-i686.conf
index 16a7817115..6ac3782c02 100644
--- a/gnu/packages/aux-files/linux-libre/4.14-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.14-i686.conf
@@ -1645,7 +1645,7 @@ CONFIG_NET_FLOW_LIMIT=y
 #
 CONFIG_NET_PKTGEN=m
 CONFIG_NET_TCPPROBE=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 CONFIG_HAMRADIO=y
 
 #
diff --git a/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf
index 3953ee9104..8171e5ec5e 100644
--- a/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/4.14-x86_64.conf
@@ -1639,7 +1639,7 @@ CONFIG_NET_FLOW_LIMIT=y
 #
 CONFIG_NET_PKTGEN=m
 CONFIG_NET_TCPPROBE=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 CONFIG_HAMRADIO=y
 
 #
diff --git a/gnu/packages/aux-files/linux-libre/4.19-i686.conf b/gnu/packages/aux-files/linux-libre/4.19-i686.conf
index 0e6637325d..2ab9d081d3 100644
--- a/gnu/packages/aux-files/linux-libre/4.19-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.19-i686.conf
@@ -1747,7 +1747,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 CONFIG_HAMRADIO=y
 
 #
diff --git a/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
index 24148dcf6f..81bdb00117 100644
--- a/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/4.19-x86_64.conf
@@ -1753,7 +1753,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 CONFIG_HAMRADIO=y
 
 #
diff --git a/gnu/packages/aux-files/linux-libre/5.10-arm.conf b/gnu/packages/aux-files/linux-libre/5.10-arm.conf
index c4f714f5e1..f544be58f7 100644
--- a/gnu/packages/aux-files/linux-libre/5.10-arm.conf
+++ b/gnu/packages/aux-files/linux-libre/5.10-arm.conf
@@ -1745,7 +1745,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.10-arm64.conf b/gnu/packages/aux-files/linux-libre/5.10-arm64.conf
index 046c310d85..fc8a892872 100644
--- a/gnu/packages/aux-files/linux-libre/5.10-arm64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.10-arm64.conf
@@ -1758,7 +1758,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.10-i686.conf b/gnu/packages/aux-files/linux-libre/5.10-i686.conf
index 23b159057d..be02316b2c 100644
--- a/gnu/packages/aux-files/linux-libre/5.10-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/5.10-i686.conf
@@ -1756,7 +1756,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf
index 2760c71f62..b801d13e83 100644
--- a/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf
@@ -1784,7 +1784,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.15-arm.conf b/gnu/packages/aux-files/linux-libre/5.15-arm.conf
index a45530711e..3915ac6d53 100644
--- a/gnu/packages/aux-files/linux-libre/5.15-arm.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-arm.conf
@@ -101,7 +101,7 @@ CONFIG_HAVE_EBPF_JIT=y
 CONFIG_BPF_SYSCALL=y
 CONFIG_BPF_JIT=y
 # CONFIG_BPF_JIT_ALWAYS_ON is not set
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 CONFIG_BPF_LSM=y
 # end of BPF subsystem
@@ -1736,7 +1736,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.15-arm64.conf b/gnu/packages/aux-files/linux-libre/5.15-arm64.conf
index 3a3d144330..60069fe4c9 100644
--- a/gnu/packages/aux-files/linux-libre/5.15-arm64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-arm64.conf
@@ -96,7 +96,7 @@ CONFIG_BPF_SYSCALL=y
 CONFIG_BPF_JIT=y
 # CONFIG_BPF_JIT_ALWAYS_ON is not set
 CONFIG_BPF_JIT_DEFAULT_ON=y
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 CONFIG_BPF_LSM=y
 # end of BPF subsystem
@@ -1756,7 +1756,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.15-i686.conf b/gnu/packages/aux-files/linux-libre/5.15-i686.conf
index ab2008f3e5..5808a9977d 100644
--- a/gnu/packages/aux-files/linux-libre/5.15-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-i686.conf
@@ -108,7 +108,7 @@ CONFIG_HAVE_EBPF_JIT=y
 #
 CONFIG_BPF_SYSCALL=y
 # CONFIG_BPF_JIT is not set
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 # end of BPF subsystem
 
@@ -1765,7 +1765,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.15-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.15-x86_64.conf
index 8fbb48bcb6..22f905a642 100644
--- a/gnu/packages/aux-files/linux-libre/5.15-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.15-x86_64.conf
@@ -112,7 +112,7 @@ CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
 #
 CONFIG_BPF_SYSCALL=y
 # CONFIG_BPF_JIT is not set
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 # end of BPF subsystem
 
@@ -1802,7 +1802,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.4-arm.conf b/gnu/packages/aux-files/linux-libre/5.4-arm.conf
index e985f1ded8..d51ff92fc0 100644
--- a/gnu/packages/aux-files/linux-libre/5.4-arm.conf
+++ b/gnu/packages/aux-files/linux-libre/5.4-arm.conf
@@ -1713,7 +1713,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.4-arm64.conf b/gnu/packages/aux-files/linux-libre/5.4-arm64.conf
index 3b05083301..28cc5127a0 100644
--- a/gnu/packages/aux-files/linux-libre/5.4-arm64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.4-arm64.conf
@@ -1690,7 +1690,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.4-i686.conf b/gnu/packages/aux-files/linux-libre/5.4-i686.conf
index 83019bc0c7..302df38cfc 100644
--- a/gnu/packages/aux-files/linux-libre/5.4-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/5.4-i686.conf
@@ -1723,7 +1723,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf
index 7325ac21fc..dde91cd01c 100644
--- a/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.4-x86_64.conf
@@ -1736,7 +1736,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/6.1-arm.conf b/gnu/packages/aux-files/linux-libre/6.1-arm.conf
index d0e1c9ad08..46eb0c07e1 100644
--- a/gnu/packages/aux-files/linux-libre/6.1-arm.conf
+++ b/gnu/packages/aux-files/linux-libre/6.1-arm.conf
@@ -103,7 +103,7 @@ CONFIG_HAVE_EBPF_JIT=y
 CONFIG_BPF_SYSCALL=y
 CONFIG_BPF_JIT=y
 # CONFIG_BPF_JIT_ALWAYS_ON is not set
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 CONFIG_BPF_LSM=y
 # end of BPF subsystem
@@ -1757,7 +1757,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/6.1-arm64.conf b/gnu/packages/aux-files/linux-libre/6.1-arm64.conf
index b5654dcd8e..507e38c9ad 100644
--- a/gnu/packages/aux-files/linux-libre/6.1-arm64.conf
+++ b/gnu/packages/aux-files/linux-libre/6.1-arm64.conf
@@ -112,7 +112,7 @@ CONFIG_BPF_SYSCALL=y
 CONFIG_BPF_JIT=y
 # CONFIG_BPF_JIT_ALWAYS_ON is not set
 CONFIG_BPF_JIT_DEFAULT_ON=y
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 CONFIG_BPF_LSM=y
 # end of BPF subsystem
@@ -1772,7 +1772,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-CONFIG_NET_DROP_MONITOR=y
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/6.1-i686.conf b/gnu/packages/aux-files/linux-libre/6.1-i686.conf
index b91ff79b72..58f84b901a 100644
--- a/gnu/packages/aux-files/linux-libre/6.1-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/6.1-i686.conf
@@ -111,7 +111,7 @@ CONFIG_HAVE_EBPF_JIT=y
 #
 CONFIG_BPF_SYSCALL=y
 # CONFIG_BPF_JIT is not set
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 # end of BPF subsystem
 
@@ -1810,7 +1810,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/aux-files/linux-libre/6.1-x86_64.conf b/gnu/packages/aux-files/linux-libre/6.1-x86_64.conf
index 68187506f1..31e5744ff3 100644
--- a/gnu/packages/aux-files/linux-libre/6.1-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/6.1-x86_64.conf
@@ -116,7 +116,7 @@ CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
 #
 CONFIG_BPF_SYSCALL=y
 # CONFIG_BPF_JIT is not set
-# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
+CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
 # CONFIG_BPF_PRELOAD is not set
 # end of BPF subsystem
 
@@ -1871,7 +1871,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
-# CONFIG_NET_DROP_MONITOR is not set
+CONFIG_NET_DROP_MONITOR=m
 # end of Network testing
 # end of Networking options
 
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 05e5295567..dec5c418a9 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -50,7 +50,6 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
-  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
   #:use-module (gnu packages)
@@ -554,6 +553,13 @@ rsnapshot uses hard links to deduplicate identical files.")
               (modules '((guix build utils)))
               (snippet
                '(begin
+                  ;; Gnulib's <stdio.h> refers to 'gets' for the purposes of
+                  ;; warning against its use, but 'gets' is no longer declared
+                  ;; in glibc's <stdio.h>.  Remove that warning.
+                  (substitute* "lib/stdio.in.h"
+                    (("_GL_WARN_ON_USE \\(gets,.*")
+                     "\n/* 'gets' is gone, rejoice! */\n"))
+
                   ;; Include all the libtirpc headers necessary to get the
                   ;; definitions of 'u_int', etc.
                   (substitute* '("src/block-server.c"
@@ -562,8 +568,7 @@ rsnapshot uses hard links to deduplicate identical files.")
                     (("#include <rpc/(.*)\\.h>" _ header)
                      (string-append "#include <rpc/types.h>\n"
                                     "#include <rpc/rpc.h>\n"
-                                    "#include <rpc/" header ".h>\n")))
-                  #t))))
+                                    "#include <rpc/" header ".h>\n")))))))
     (build-system gnu-build-system)
     (arguments
      '(;; Link against libtirpc.
@@ -588,12 +593,16 @@ rsnapshot uses hard links to deduplicate identical files.")
                                   (string-append (getenv "CPATH")
                                                  ":" tirpc))
                           (setenv "CPATH" tirpc)))))
-                  (add-before 'check 'skip-test
+                  (add-before 'check 'adjust-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"))))))
+                      ;; This test uses a weird construct to spawn
+                      ;; 'chop-block-server' in the background.  Replace it
+                      ;; with something that actually works.
+                      (substitute* "tests/utils/block-server"
+                        (("chop_fail_if ! chop-block-server")
+                         "chop-block-server")
+                        (("'&'")
+                         "&")))))))
     (native-inputs
      (list guile-2.0 gperf-3.0 ;see <https://bugs.gnu.org/32382>
            pkg-config rpcsvc-proto))           ;for 'rpcgen'
@@ -1324,7 +1333,7 @@ borgmatic is powered by borg.")
            python-paramiko
            python-peewee
            python-psutil
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-secretstorage
            ;; This is included so that the qt-wrap phase picks it up.
            qtsvg-5))
@@ -1351,7 +1360,7 @@ archives.")
     (native-inputs (list intltool pkg-config))
     (inputs (list gtk+))
     (propagated-inputs (list rsync))
-    (home-page "http://www.opbyte.it/grsync/")
+    (home-page "https://www.opbyte.it/grsync/")
     (synopsis "GTK frontend for rsync")
     (description
      "Grsync is a simple graphical interface using GTK for the @command{rsync}
diff --git a/gnu/packages/barrier.scm b/gnu/packages/barrier.scm
index 721fdcf314..5c2ecb0f2f 100644
--- a/gnu/packages/barrier.scm
+++ b/gnu/packages/barrier.scm
@@ -18,7 +18,6 @@
 
 (define-module (gnu packages barrier)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system gnu)
   #:use-module (guix utils)
   #:use-module (guix git-download)
   #:use-module (guix download)
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 2fcb02ffd9..041f16b4fc 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -674,8 +674,7 @@ included.")
                      (substitute* "gold/Makefile.in"
                        ((" testsuite") " ")))))
                '())))))
-    (native-inputs
-     `(("bc" ,bc)))))
+    (native-inputs (list bc))))
 
 (define* (make-ld-wrapper name #:key
                           (target (const #f))
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index cfa037dec0..db01d1a7e2 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2016, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016, 2017, 2020, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
@@ -37,8 +37,11 @@
    (version "8.0.6")
    (source (origin
             (method url-fetch)
-            (uri (string-append "https://github.com/ivmai/bdwgc/releases"
-                                "/download/v" version "/gc-" version ".tar.gz"))
+            (uri (list (string-append "https://github.com/ivmai/bdwgc/releases"
+                                      "/download/v" version
+                                      "/gc-" version ".tar.gz")
+                       (string-append "https://www.hboehm.info/gc/gc_source"
+                                      "/gc-" version ".tar.gz")))
             (sha256
              (base32
               "04ga3c95w5az5sznzm73j19lvvfpf6k4sgkpjqsmjxpsr6mi8j9v"))))
@@ -71,6 +74,9 @@
         (list libatomic-ops)
         '()))
    (outputs '("out" "debug"))
+   (properties
+    '((release-monitoring-url . "https://www.hboehm.info/gc/gc_source/")
+      (upstream-name . "gc")))
    (synopsis "The Boehm-Demers-Weiser conservative garbage collector
 for C and C++")
    (description
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 711b988e7f..2bfca85bbc 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -33,6 +33,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 build-system r)
   #:use-module (gnu packages)
@@ -115,6 +116,33 @@ analysis.")
 based on mapping using Entrez Gene identifiers.")
     (license license:artistic2.0)))
 
+(define-public r-pd-mapping50k-xba240
+  (package
+    (name "r-pd-mapping50k-xba240")
+    (version "3.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "pd.mapping50k.xba240" version
+                              'annotation))
+       (sha256
+        (base32 "1a1f3lh5ywhyjawdbj2fzban85c8jz70lfcv3pagd5piincjwxq8"))))
+    (properties `((upstream-name . "pd.mapping50k.xba240")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biostrings
+           r-dbi
+           r-iranges
+           r-oligo
+           r-oligoclasses
+           r-rsqlite
+           r-s4vectors))
+    (home-page "https://bioconductor.org/packages/pd.mapping50k.xba240")
+    (synopsis "Platform design info for Affymetrix Mapping50K_Xba240")
+    (description "This package provides platform design info for Affymetrix
+Mapping50K_Xba240 (pd.mapping50k.xba240).")
+    (license license:artistic2.0)))
+
 (define-public r-reactome-db
   (package
     (name "r-reactome-db")
@@ -1248,6 +1276,29 @@ demonstration purposes in the @code{AneuFinder} package.")
 from Illumina 450k methylation arrays.")
     (license license:artistic2.0)))
 
+(define-public r-bcellviper
+  (package
+    (name "r-bcellviper")
+    (version "1.34.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "bcellViper" version
+                                     'experiment))
+              (sha256
+               (base32
+                "1fpgh70x2r68v0ximgcdphnyzq2hgiwbamyhbac3yka8flhrd1fm"))))
+    (properties `((upstream-name . "bcellViper")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-biobase))
+    (home-page "https://bioconductor.org/packages/bcellViper")
+    (synopsis
+     "Transcriptional interactome and normal human B-cell expression data")
+    (description
+     "This is a tool for human B-cell context-specific transcriptional
+regulatory network.  In addition, this package provides a human normal B-cells
+dataset for the examples in package viper.")
+    (license license:gpl2+)))
+
 (define-public r-bladderbatch
   (package
     (name "r-bladderbatch")
@@ -1431,6 +1482,25 @@ genomation package.  Included are Chip Seq, Methylation and Cage data,
 downloaded from Encode.")
     (license license:gpl3+)))
 
+(define-public r-italicsdata
+  (package
+    (name "r-italicsdata")
+    (version "2.36.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "ITALICSData" version 'experiment))
+       (sha256
+        (base32 "09d2igic3b5p7wpq98hb2lffxm1nfq9mwmnqlbdn3jv49pgz3hmw"))))
+    (properties `((upstream-name . "ITALICSData")))
+    (build-system r-build-system)
+    (home-page "http://bioinfo.curie.fr")
+    (synopsis "ITALICS data")
+    (description "This package provides data needed to use the ITALICS
+package.")
+    ;; Expanded from GPL
+    (license (list license:gpl2+ license:gpl3+))))
+
 (define-public r-macrophage
   (package
     (name "r-macrophage")
@@ -1757,6 +1827,48 @@ expression level and gene-specific dispersion, that might facilitate the gene
 ranking by fold-change and visualization.")
     (license license:gpl3+)))
 
+(define-public r-adacgh2
+  (package
+    (name "r-adacgh2")
+    (version "2.38.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "ADaCGH2" version))
+       (sha256
+        (base32 "0g9x3lnr56035wq9ijdcri4sz5pwj8184yxm415gmsxrii9xvpfd"))))
+    (properties `((upstream-name . "ADaCGH2")))
+    (build-system r-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'python3-compatibility
+           (lambda _
+             (substitute* "inst/imagemap-example/toMap.py"
+               (("print nameMap") "print(nameMap)")))))))
+    (inputs (list python-wrapper))
+    (propagated-inputs
+     (list r-acgh
+           r-bit
+           r-cluster
+           r-dnacopy
+           r-ff
+           r-glad
+           r-snapcgh
+           r-tilingarray
+           r-waveslim))
+    (home-page "https://github.com/rdiaz02/adacgh2")
+    (synopsis "Big data analysis from aCGH experiments")
+    (description
+     "This package analyzes and creates plots of array @acronym{CGH,
+comparative genomic hybridization} data.  Also, it allows usage of
+@acronym{CBS, Circular Binary Segementation}, wavelet-based smoothing, HMM,
+BioHMM, GLAD, CGHseg.  Most computations are parallelized (either via forking
+or with clusters, including MPI and sockets clusters) and use @code{ff} for
+storing data.")
+    (license license:gpl3+)))
+
 (define-public r-adam
   (package
     (name "r-adam")
@@ -4467,6 +4579,37 @@ domains etc.) from quantification of all types of RNASeq by tools such as
 Kallisto, Salmon, StringTie, Cufflinks/Cuffdiff etc.")
     (license license:gpl2+)))
 
+(define-public r-italics
+  (package
+    (name "r-italics")
+    (version "2.58.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "ITALICS" version))
+       (sha256
+        (base32 "0g937h9zxkxnm424wh58b46mfasdd7pqy5c04r0a46mx9lxibgbs"))))
+    (properties `((upstream-name . "ITALICS")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-affxparser
+           r-dbi
+           r-glad
+           r-italicsdata
+           r-oligo
+           r-oligoclasses
+           r-pd-mapping50k-xba240))
+    (home-page "http://bioinfo.curie.fr")
+    (synopsis "Normalizing of the Affymetrix GeneChip human mapping")
+    (description
+     "This package provides tools for normalizing and analyzing of GeneChip
+Mapping 100K and 500K Set.  Affymetrix GeneChip Human Mapping 100K and 500K
+Set allows the DNA copy number mea- surement of respectively 2× 50K and 2×
+250K SNPs along the genome.  Their high density allows a precise localization
+of genomic alterations and makes them a powerful tool for cancer and copy
+number polymorphism study.")
+    (license license:gpl2)))
+
 ;; This is a CRAN package, but it depends on r-biobase and r-limma from Bioconductor.
 (define-public r-absfiltergsea
   (package
@@ -4605,7 +4748,7 @@ mapping.")
            r-stringr))
     (native-inputs
      (list r-knitr))
-    (home-page "http://renozao.github.io/NMF")
+    (home-page "https://renozao.github.io/NMF")
     (synopsis "Algorithms and framework for nonnegative matrix factorization")
     (description
      "This package provides a framework to perform Non-negative Matrix
@@ -4912,14 +5055,14 @@ used by @code{ensembldb}, @code{Organism.dplyr}, and other packages.")
 (define-public r-annotationforge
   (package
     (name "r-annotationforge")
-    (version "1.40.0")
+    (version "1.40.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AnnotationForge" version))
        (sha256
         (base32
-         "15shh8rmcx69g3zd256720vh0c3qbly5zrvwm463dws41cjla48x"))))
+         "16wdcl56d5i8wrmin610kzs9ldy7h9w5fbnysjb1crkcgbikq1yy"))))
     (properties
      `((upstream-name . "AnnotationForge")))
     (build-system r-build-system)
@@ -5267,13 +5410,13 @@ effort and encourages consistency.")
 (define-public r-bsgenome
   (package
     (name "r-bsgenome")
-    (version "1.66.2")
+    (version "1.66.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BSgenome" version))
               (sha256
                (base32
-                "0p75c52sw464bdqz7dyda9h8k2wsxdpdxxhya5awh977xaly90pf"))))
+                "1ps7s6i9mv8ys8k2xw8fdkh2rl2n3kcf2q4zsz6kcz5qpav95ys6"))))
     (properties
      `((upstream-name . "BSgenome")))
     (build-system r-build-system)
@@ -5439,6 +5582,57 @@ provides a highly flexible way to arrange multiple heatmaps and supports
 self-defined annotation graphics.")
     (license license:gpl2+)))
 
+;; This is a CRAN package, but it depends on r-complexheatmap from
+;; Bioconductor.
+(define-public r-conos
+  (package
+    (name "r-conos")
+    (version "1.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "conos" version))
+       (sha256
+        (base32 "1wdhb3jxh4id6xaghawzip8s264g9jxp4i5xy7jfhi67yfxszx6w"))))
+    (properties `((upstream-name . "conos")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-abind
+           r-complexheatmap
+           r-cowplot
+           r-dendextend
+           r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-gridextra
+           r-igraph
+           r-irlba
+           r-leidenalg
+           r-magrittr
+           r-matrix
+           r-n2r
+           r-r6
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppeigen
+           r-rcppprogress
+           r-reshape2
+           r-rlang
+           r-rtsne
+           r-sccore))
+    (home-page "https://github.com/kharchenkolab/conos")
+    (synopsis "Clustering on network of samples")
+    (description
+     "This package wires together large collections of single-cell RNA-seq
+datasets, which allows for both the identification of recurrent cell clusters
+and the propagation of information between datasets in multi-sample or
+atlas-scale collections.  Conos focuses on the uniform mapping of homologous
+cell types across heterogeneous sample collections.  For instance, users could
+investigate a collection of dozens of peripheral blood samples from cancer
+patients combined with dozens of controls, which perhaps includes samples of a
+related tissue such as lymph nodes.")
+    (license license:gpl3)))
+
 (define-public r-copywriter
   (package
     (name "r-copywriter")
@@ -5513,14 +5707,14 @@ distribution.")
 (define-public r-deseq2
   (package
     (name "r-deseq2")
-    (version "1.38.2")
+    (version "1.38.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DESeq2" version))
        (sha256
         (base32
-         "1m81yvcl63h5m7kbbxpjk7hzygxmn4l9mlgqrdmnnls56183h3b4"))))
+         "0kryg9jb6zl4zj1wx09rmljqlhr5vdbcmdnri4q91jpggsaj9nxm"))))
     (properties `((upstream-name . "DESeq2")))
     (build-system r-build-system)
     (propagated-inputs
@@ -5745,18 +5939,18 @@ global-scaling and full-quantile normalization.")
 (define-public r-edger
   (package
     (name "r-edger")
-    (version "3.40.1")
+    (version "3.40.2")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "edgeR" version))
               (sha256
                (base32
-                "1a0rmczlqmqmip2ix28m4iwcpfj04p6nrcl562bjgaifvgyjqhzg"))))
+                "0ds34b135qd63dh3cxkp8b28270m50bn1njwr49b8svgcgzz9x09"))))
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-limma r-locfit r-rcpp))
-    (home-page "http://bioinf.wehi.edu.au/edgeR")
+    (home-page "https://bioinf.wehi.edu.au/edgeR")
     (synopsis "EdgeR does empirical analysis of digital gene expression data")
     (description "This package can do differential expression analysis of
 RNA-seq expression profiles with biological replication.  It implements a range
@@ -5870,14 +6064,14 @@ analysis using other methods.")
 (define-public r-genefilter
   (package
     (name "r-genefilter")
-    (version "1.80.2")
+    (version "1.80.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "genefilter" version))
        (sha256
         (base32
-         "0f25z0hqmrkimv14j03pgjsxpq5rz9ymk151rlg4j4vpc06n73cq"))))
+         "047p84qxfqqm0d0ik7fxcs37fmg0yazsn9rz7h4g24cksb45p689"))))
     (build-system r-build-system)
     (native-inputs
      (list gfortran r-knitr))
@@ -5960,13 +6154,13 @@ genomic intervals.  In addition, it can use BAM or BigWig files as input.")
 (define-public r-genomeinfodb
   (package
     (name "r-genomeinfodb")
-    (version "1.34.6")
+    (version "1.34.9")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomeInfoDb" version))
               (sha256
                (base32
-                "123kp69fmy5pbqh0j6qxdkvkm4g9pdwzms01i8qnix3m1b9j597w"))))
+                "0mn9ddm2xwc2b7zg0n9a056jcr61jv6v8jacxm3q8qmz6r30kfrb"))))
     (properties
      `((upstream-name . "GenomeInfoDb")))
     (build-system r-build-system)
@@ -6020,13 +6214,13 @@ alignments.")
 (define-public r-genomicfeatures
   (package
     (name "r-genomicfeatures")
-    (version "1.50.3")
+    (version "1.50.4")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicFeatures" version))
               (sha256
                (base32
-                "14pn7lngayascj5k84g2g748assbivpiakss247cdj9ngzx5sfwz"))))
+                "1qsr433nh225pk5ngsrjrf2rfv7ynq4c8qsjfjr7khy2z9czlg6n"))))
     (properties
      `((upstream-name . "GenomicFeatures")))
     (build-system r-build-system)
@@ -6122,6 +6316,30 @@ GenomicRanges package defines general purpose containers for storing and
 manipulating genomic intervals and variables defined along a genome.")
     (license license:artistic2.0)))
 
+(define-public r-glad
+  (package
+    (name "r-glad")
+    (version "2.62.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "GLAD" version))
+              (sha256
+               (base32
+                "0gb52ic5r6nkgm2ynm174vcvbmkbhhjgv71lsmxpxzcsb6rr7qj6"))))
+    (properties `((upstream-name . "GLAD")))
+    (build-system r-build-system)
+    (inputs (list gsl))
+    (propagated-inputs (list r-aws))
+    (native-inputs (list pkg-config))
+    (home-page "http://bioinfo.curie.fr")
+    (synopsis "Gain and loss analysis of DNA")
+    (description
+     "This package helps with the analysis of array @acronym{CGH, comparative
+genomic hybridization} data by detecting of the breakpoints in the genomic
+profiles and assignment of a status (gain, normal or loss) to each chromosomal
+regions identified.")
+    (license license:gpl2)))
+
 (define-public r-gostats
   (package
     (name "r-gostats")
@@ -6261,13 +6479,13 @@ of other R packages who wish to make use of HTSlib.")
 (define-public r-impute
   (package
     (name "r-impute")
-    (version "1.72.2")
+    (version "1.72.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "impute" version))
               (sha256
                (base32
-                "1k697pqlkrwmfszipl9irbzmwhk1vz97j3rh0k5nj2mrj3dr71mv"))))
+                "1qq80za9bkg0wqnlckvahnjz08xacwvpnflwnrmwr2xg0ifkis38"))))
     (native-inputs
      (list gfortran))
     (build-system r-build-system)
@@ -6351,15 +6569,15 @@ Binomial data via estimation of latent structure in the natural parameter.")
 (define-public r-limma
   (package
     (name "r-limma")
-    (version "3.54.0")
+    (version "3.54.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "limma" version))
               (sha256
                (base32
-                "1jy75nbkhl0kgv4gw88acx58r9f1kywrd36405x6g05xy05bprma"))))
+                "0x6wkbw8v0hq9dfr433165jmii05rswjsm97dpxvyvxvya3sxqa1"))))
     (build-system r-build-system)
-    (home-page "http://bioinf.wehi.edu.au/limma")
+    (home-page "https://bioinf.wehi.edu.au/limma")
     (synopsis "Package for linear models for microarray and RNA-seq data")
     (description "This package can be used for the analysis of gene expression
 studies, especially the use of linear models for analysing designed experiments
@@ -6367,6 +6585,73 @@ and the assessment of differential expression.  The analysis methods apply to
 different technologies, including microarrays, RNA-seq, and quantitative PCR.")
     (license license:gpl2+)))
 
+(define-public r-maaslin2
+  (package
+    (name "r-maaslin2")
+    (version "1.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "Maaslin2" version))
+       (sha256
+        (base32 "0ncvsywn9f8766gjb8nxzg82p3w30g8pjs85sy8s0bz9ilanpy89"))))
+    (properties `((upstream-name . "Maaslin2")))
+    (build-system r-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'check 'remove-timestamps
+            (lambda _
+              (with-directory-excursion
+                  (string-append #$output "/site-library/Maaslin2/doc/demo_output/")
+                ;; Delete this log file with timestamps.
+                (delete-file "maaslin2.log")
+                ;; Replace PDF timestamps with an arbitrary fixed timestamp.
+                (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                  (substitute* (find-files "." "\\.pdf$")
+                    (("/CreationDate \\(D:.*\\)")
+                     "/CreationDate (D:20230301143558)")
+                    (("/ModDate \\(D:.*\\)")
+                     "/ModDate (D:20230301143558)")))))))))
+    (propagated-inputs
+     (list r-biglm
+           r-car
+           r-chemometrics
+           r-cplm
+           r-data-table
+           r-dplyr
+           r-edger
+           r-ggplot2
+           r-glmmtmb
+           r-hash
+           r-lme4
+           r-lmertest
+           r-logging
+           r-lpsymphony
+           r-mass
+           r-mumin
+           r-metagenomeseq
+           r-optparse
+           r-pbapply
+           r-pcapp
+           r-pheatmap
+           r-pscl
+           r-rmarkdown
+           r-robustbase
+           r-vegan))
+    (native-inputs (list r-knitr))
+    (home-page "http://huttenhower.sph.harvard.edu/maaslin2")
+    (synopsis
+     "Multivariable association discovery in population-scale meta-omics studies")
+    (description
+     "MaAsLin2 is comprehensive R package for efficiently determining multivariable
+association between clinical metadata and microbial meta'omic features.  This
+package relies on general linear models to accommodate most modern epidemiological
+study designs, including cross-sectional and longitudinal, and offers a variety
+of data exploration, normalization, and transformation methods.")
+    (license license:expat)))
+
 (define-public r-made4
   (package
     (name "r-made4")
@@ -6423,6 +6708,29 @@ containing the location/probe set membership mapping.  The other one creates a
 package that automatically loads that environment.")
     (license license:gpl2+)))
 
+(define-public r-manor
+  (package
+    (name "r-manor")
+    (version "1.70.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "MANOR" version))
+       (sha256
+        (base32 "16b30bmyzml97cjdbh6h9ky5c4h5ws2a3g2xkxnd55sd3jg64jgx"))))
+    (properties `((upstream-name . "MANOR")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-glad))
+    (native-inputs (list r-knitr))
+    (home-page "http://bioinfo.curie.fr/projects/manor/index.html")
+    (synopsis "CGH micro-array normalization")
+    (description
+     "This package ofers functions for importation, normalization,
+visualization, and quality control to correct identified sources of
+variability in array of @acronym{CGH, comparative genomic hybridization}
+experiments.")
+    (license license:gpl2)))
+
 (define-public r-maser
   (package
     (name "r-maser")
@@ -6455,6 +6763,40 @@ package that automatically loads that environment.")
 and visualizaton of alternative splicing events generated by rMATS.")
     (license license:expat)))
 
+(define-public r-metagenomeseq
+  (package
+    (name "r-metagenomeseq")
+    (version "1.40.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "metagenomeSeq" version))
+       (sha256
+        (base32 "01wjw4kcm8ysa5sn3cqg4a9i5pyksnwmbdqp5fr6n2l9hllkc9jy"))))
+    (properties `((upstream-name . "metagenomeSeq")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biobase
+           r-foreach
+           r-glmnet
+           r-gplots
+           r-limma
+           r-matrix
+           r-matrixstats
+           r-rcolorbrewer
+           r-wrench))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/HCBravoLab/metagenomeSeq")
+    (synopsis "Statistical analysis for sparse high-throughput sequencing")
+    (description
+     "MetagenomeSeq is designed to determine features (be it @acronym{OTU,
+Operational Taxanomic Unit}, species, etc.) that are differentially abundant
+between two or more groups of multiple samples.  This package is designed to
+address the effects of both normalization and under-sampling of microbial
+communities on disease association detection and the testing of feature
+correlations.")
+    (license license:artistic2.0)))
+
 (define-public r-metaneighbor
   (package
     (name "r-metaneighbor")
@@ -6661,6 +7003,37 @@ characterization and visualization of a wide range of mutational patterns
 in SNV base substitution data.")
     (license license:expat)))
 
+(define-public r-msa
+  (package
+    (name "r-msa")
+    (version "1.30.1")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "msa" version))
+              (sha256
+               (base32
+                "064hmry0zhmpchxgjsw0krsybr9v9gbsz26zmj2a39pg1nggwbq4"))))
+    (properties `((upstream-name . "msa")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biocgenerics
+           r-biostrings
+           r-iranges
+           r-rcpp
+           r-s4vectors))
+    (native-inputs (list r-knitr))
+    (home-page "http://www.bioinf.jku.at/software/msa/")
+    (synopsis "Multiple sequence alignment")
+    (description
+     "The msa package provides a unified R/Bioconductor interface to the
+multiple sequence alignment algorithms ClustalW, ClustalOmega, and Muscle.
+All three algorithms are integrated in the package, therefore, they do not
+depend on any external software tools and are available for all major
+platforms.  The multiple sequence alignment algorithms are complemented by a
+function for pretty-printing multiple sequence alignments using the LaTeX
+package TeXshade.")
+    (license license:gpl2+)))
+
 (define-public r-msnbase
   (package
     (name "r-msnbase")
@@ -8003,13 +8376,13 @@ Biology at
 (define-public r-stringdb
   (package
     (name "r-stringdb")
-    (version "2.10.0")
+    (version "2.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "STRINGdb" version))
        (sha256
-        (base32 "1md79vx4270wgh07g3m1mypdki1b9d4a558zxplcalwppqh0dsmp"))))
+        (base32 "0qpss8fcf8ll47jv45ypsqd9jf7ajdiya7w4mw1wysk76spcwllm"))))
     (properties `((upstream-name . "STRINGdb")))
     (build-system r-build-system)
     (propagated-inputs
@@ -8272,13 +8645,13 @@ R, enabling interactive analysis and visualization of genome-scale data.")
 (define-public r-variantannotation
   (package
     (name "r-variantannotation")
-    (version "1.44.0")
+    (version "1.44.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "VariantAnnotation" version))
               (sha256
                (base32
-                "08rm27jcx6amawqdh59291r0qzkr5cdhbhm0xbjbd5mvdpp1icl8"))))
+                "13zim7dglsd5w39v22d2qa3d1h5dx33c1r4fz3vzri64kac0lhzx"))))
     (properties
      `((upstream-name . "VariantAnnotation")))
     (propagated-inputs
@@ -8587,14 +8960,14 @@ packages.")
 (define-public r-oligo
   (package
     (name "r-oligo")
-    (version "1.62.1")
+    (version "1.62.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "oligo" version))
        (sha256
         (base32
-         "1rhzav57d092ip9qjsmskj3l8h4xyq8cpa2a2jl8g32fwh0dyvsz"))))
+         "19n0nvgyv2hzzcla93w2bzxvfdqg6walh0s1yykwl5b7ni4cazg9"))))
     (properties `((upstream-name . "oligo")))
     (build-system r-build-system)
     (inputs (list zlib))
@@ -8620,6 +8993,33 @@ arrays (expression/SNP/tiling/exon) at probe-level.  It currently supports
 Affymetrix (CEL files) and NimbleGen arrays (XYS files).")
     (license license:lgpl2.0+)))
 
+(define-public r-quantsmooth
+  (package
+    (name "r-quantsmooth")
+    (version "1.64.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "quantsmooth" version))
+       (sha256
+        (base32 "1adwws3brb01d4g6yidipnd8akkiyc3gpdr876hy57qnmcq8xipp"))))
+    (properties `((upstream-name . "quantsmooth")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-quantreg))
+    (home-page "https://bioconductor.org/packages/quantsmooth")
+    (synopsis "Quantile smoothing and genomic visualization of array data")
+    (description
+     "This package implements quantile smoothing.  It contains a dataset used
+to produce human chromosomal ideograms for plotting purposes and a collection
+of arrays that contains data of chromosome 14 of 3 colorectal tumors.  The
+package provides functions for painting chromosomal icons, chromosome or
+chromosomal idiogram and other types of plots.  Quantsmooth offers options
+like converting chromosomal ids to their numeric form, retrieving the human
+chromosomal length from NCBI data, retrieving regions of interest in a vector
+of intensities using quantile smoothing, determining cytoband position based
+on the location of the probe, and other useful tools.")
+    (license license:gpl2)))
+
 (define-public r-qvalue
   (package
     (name "r-qvalue")
@@ -9296,14 +9696,14 @@ parsing of genetic sequencing data from ribosome profiling experiments.")
 (define-public r-interactionset
   (package
     (name "r-interactionset")
-    (version "1.26.0")
+    (version "1.26.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "InteractionSet" version))
        (sha256
         (base32
-         "14fb780f2g24ay28dy9xkmfziavbkj75v4vc2cmqbxfdsfp4yn0w"))))
+         "1nk8jhabbrirpyjd1wdy2fjk8y2qi1bsjmgqzh0qi1c83n0ccz5d"))))
     (properties
      `((upstream-name . "InteractionSet")))
     (build-system r-build-system)
@@ -9519,7 +9919,7 @@ in omics data.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-biobase r-mass))
-    (home-page "http://www.genopolis.it")
+    (home-page "https://www.genopolis.it")
     (synopsis "Detect differential expression in microarray and proteomics datasets")
     (description
      "The Power Law Global Error Model (PLGEM) has been shown to faithfully
@@ -9977,14 +10377,14 @@ penalized least squares regression method.")
 (define-public r-dnacopy
   (package
     (name "r-dnacopy")
-    (version "1.72.2")
+    (version "1.72.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DNAcopy" version))
        (sha256
         (base32
-         "1f6ilfwhli7bdnr48y2ijdydvw7kjbyz701kgbsw3w7inr6x6ayr"))))
+         "1kxzrny19dqd9pqj27vzr15i071sl8ivznpfd6zlqhcymlcsq7nw"))))
     (properties `((upstream-name . "DNAcopy")))
     (build-system r-build-system)
     (native-inputs (list gfortran))
@@ -10135,14 +10535,14 @@ coordinates.")
 (define-public r-lpsymphony
   (package
     (name "r-lpsymphony")
-    (version "1.26.2")
+    (version "1.26.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "lpsymphony" version))
        (sha256
         (base32
-         "167zpf7k7gn7gw2cxkqx89y322qinyzjr1naracp5axj4q2qagm3"))))
+         "0iqc6km4pw50li2q35km8jpa0p3i6a6way910wcz56yd2jjbjyz5"))))
     (build-system r-build-system)
     (arguments
      (list
@@ -12788,14 +13188,14 @@ genes.")
 (define-public r-massspecwavelet
   (package
     (name "r-massspecwavelet")
-    (version "1.64.0")
+    (version "1.64.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MassSpecWavelet" version))
        (sha256
         (base32
-         "0l86gwq073nbx973v99b0lr9cz0pb72c4asmgj5w16jykicrnxn9"))))
+         "0p8cd4r3c8va5gybs1vlm3kn7jcg1xg529hvvg27fybb3g91nvqg"))))
     (properties
      `((upstream-name . "MassSpecWavelet")))
     (build-system r-build-system)
@@ -13145,14 +13545,14 @@ Infinium HumanMethylation 450k assay.")
 (define-public r-biocfilecache
   (package
     (name "r-biocfilecache")
-    (version "2.6.0")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BiocFileCache" version))
        (sha256
         (base32
-         "0skrvmkm6ch8gbpdi4wr59zk5vxzxs7cyqvz3jhki9d8w492wylg"))))
+         "16316a5pgyl5rppyviibf6z3k3m7xmvqyylf1kxdpg0avs6dk8w7"))))
     (properties `((upstream-name . "BiocFileCache")))
     (build-system r-build-system)
     (propagated-inputs
@@ -13736,23 +14136,20 @@ of the analyses while minimizing technical noise.")
 (define-public r-cytolib
   (package
     (name "r-cytolib")
-    (version "2.10.0")
+    (version "2.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "cytolib" version))
        (sha256
         (base32
-         "1y06x7z3p938kfvjx6zqab9hh1xzlrlhdxczyprx7lsd34ylz46n"))))
+         "0rgqlqasil75b03c8c4nyg71ybysrsbqb0bwk6hbnaw8rljxdmi5"))))
     (properties `((upstream-name . "cytolib")))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr))
     (propagated-inputs
      (list r-bh
-           r-rcpp
-           r-rcpparmadillo
-           r-rcppparallel
            r-rhdf5lib
            r-rprotobuflib))
     (home-page "https://bioconductor.org/packages/cytolib/")
@@ -14842,6 +15239,47 @@ be applied to the analysis of other NGS data obtained from experimental
 procedures that induce nucleotide substitutions (e.g. BisSeq).")
     (license license:gpl2)))
 
+(define-public r-tilingarray
+  (package
+    (name "r-tilingarray")
+    (version "1.76.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "tilingArray" version))
+              (sha256
+               (base32
+                "19bkgblpkcp3w3sdyn82c37gkz1sv3r4d546zpbnh36q2pi3l4zd"))))
+    (properties `((upstream-name . "tilingArray")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-affy
+           r-biobase
+           r-genefilter
+           r-pixmap
+           r-rcolorbrewer
+           r-strucchange
+           r-vsn))
+    (home-page "https://bioconductor.org/packages/tilingArray")
+    (synopsis "Transcript mapping with high-density oligonucleotide tiling arrays")
+    (description
+     "The package provides functionality that can be useful for the analysis
+of the high-density tiling microarray data (such as from Affymetrix genechips)
+or for measuring the transcript abundance and the architecture.  The main
+functionalities of the package are:
+
+@enumerate
+@item the class segmentation for representing partitionings of a linear series
+  of data;
+@item the function segment for fitting piecewise constant models using a
+  dynamic programming algorithm that is both fast and exact;
+@item the function @code{confint} for calculating confidence intervals using
+  the @code{strucchange} package;
+@item the function @code{plotAlongChrom} for generating pretty plots;
+@item the function @code{normalizeByReference} for probe-sequence dependent
+  response adjustment from a (set of) reference hybridizations.
+@end enumerate")
+    (license license:artistic2.0)))
+
 (define-public r-timeseriesexperiment
   (package
     (name "r-timeseriesexperiment")
@@ -14992,14 +15430,14 @@ arrays based on fast wavelet-based functional models.")
 (define-public r-variancepartition
   (package
     (name "r-variancepartition")
-    (version "1.28.1")
+    (version "1.28.4")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "variancePartition" version))
        (sha256
         (base32
-         "0ypw3ckaf4qll83rl2bjzfc7g2m4v0n2mq645ppyfga8wv8kwssy"))))
+         "1ii4r0c76b7rnisy4qba2cp5686j73s6b3s6pj66w91wq65dykpd"))))
     (properties
      `((upstream-name . "variancePartition")))
     (build-system r-build-system)
@@ -16548,14 +16986,14 @@ generated.")
 (define-public r-preprocesscore
   (package
     (name "r-preprocesscore")
-    (version "1.60.1")
+    (version "1.60.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "preprocessCore" version))
        (sha256
         (base32
-         "1rwr31jp4dh3xcfx1kx8rz5xvyx1mrwy85hqrjrfr4m6h0qv28k1"))))
+         "0ikxikmz9dy09g726q1wygymm6z2imlgfiizkgh1cl4s0m35fbbd"))))
     (properties
      `((upstream-name . "preprocessCore")))
     (build-system r-build-system)
@@ -16598,14 +17036,14 @@ S4Vectors package itself.")
 (define-public r-wgcna
   (package
     (name "r-wgcna")
-    (version "1.71")
+    (version "1.72-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "WGCNA" version))
        (sha256
         (base32
-         "027pkc4pyn9bifqbjs05318gvlm06mffw016j50n59wfi2g39x91"))))
+         "1p3zsl5r6l5r6ylnrxmbxjpim5qgmncgdjcgn5j69rzk3rv85gqx"))))
     (properties `((upstream-name . "WGCNA")))
     (build-system r-build-system)
     (propagated-inputs
@@ -16896,6 +17334,26 @@ variety of commonly used matrix types, including sparse and HDF5-backed
 matrices.")
     (license license:gpl3)))
 
+(define-public r-beadarraysnp
+  (package
+    (name "r-beadarraysnp")
+    (version "1.64.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "beadarraySNP" version))
+       (sha256
+        (base32 "06hy89pclbyxjw5yf5i9bc3wr789b9pmhd9sdchgljlijs9vcj6g"))))
+    (properties `((upstream-name . "beadarraySNP")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-biobase r-quantsmooth))
+    (home-page "https://bioconductor.org/packages/beadarraySNP")
+    (synopsis "Normalization and reporting of Illumina SNP bead arrays")
+    (description
+     "This package is importing data from Illumina SNP experiments and it
+performs copy number calculations and reports.")
+    (license license:gpl2)))
+
 ;; This package includes files that have been taken from kentutils.  Some
 ;; parts of kentutils are not released under a free license, but this package
 ;; only uses files that are also found in the free parts of kentutils.
@@ -17166,14 +17624,14 @@ cell types to infer the cell of origin of each single cell independently.")
 (define-public r-scuttle
   (package
     (name "r-scuttle")
-    (version "1.8.3")
+    (version "1.8.4")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scuttle" version))
        (sha256
         (base32
-         "1wgh28rj8m5dz89s9y4rzfy68d8ign6pcnnwj9g7h4sc3jfsg56i"))))
+         "04257gl995r575md1n3h2gy502yi6c8x3352l96mib7rdv4yg53f"))))
     (properties `((upstream-name . "scuttle")))
     (build-system r-build-system)
     (propagated-inputs
@@ -17246,14 +17704,14 @@ quality control.")
 (define-public r-scran
   (package
     (name "r-scran")
-    (version "1.26.1")
+    (version "1.26.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scran" version))
        (sha256
         (base32
-         "1sqc8pf1qzm24kf1l45da12wbzv0nxsy6l3v9fc8srmnvk37p04p"))))
+         "0r80k4dsk609l9ha1jl64yhpwnf0x37i28k9largqsffsl6hw0fy"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-beachmat
@@ -17765,14 +18223,14 @@ family of feature/genome hypotheses.")
 (define-public r-gviz
   (package
     (name "r-gviz")
-    (version "1.42.0")
+    (version "1.42.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Gviz" version))
        (sha256
         (base32
-         "09j94kk3dd3bbfw6a2l14i7vd4rh11g9lxhw4zsm15vg71cm1lv9"))))
+         "01qs60sdh7c8cxkv3qbfcfwpjhab88j872va50fi95xsqnmj5isa"))))
     (properties `((upstream-name . "Gviz")))
     (build-system r-build-system)
     (propagated-inputs
@@ -17934,14 +18392,14 @@ on the plot.")
 (define-public r-abn
   (package
     (name "r-abn")
-    (version "2.7-1")
+    (version "2.7-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "abn" version))
        (sha256
         (base32
-         "1w3jns96m8b9scvaa4hcla3i88a0cfh9qis2l04yixvda5q91gpr"))))
+         "02qmp3ky671fkpjq1vcb083zzvfn5gkf69rhvdlvg7siy5wrjll3"))))
     (build-system r-build-system)
     (inputs
      (list gsl))
@@ -18027,6 +18485,34 @@ integrates with pathway and gene set (enrichment) analysis tools for
 large-scale and fully automated analysis.")
     (license license:gpl3+)))
 
+(define-public r-snapcgh
+  (package
+    (name "r-snapcgh")
+    (version "1.68.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "snapCGH" version))
+              (sha256
+               (base32
+                "1zxvl8mkby7yb5kppddag6k9w78d1fm6adx52h4cgrfckn28w64q"))))
+    (properties `((upstream-name . "snapCGH")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-acgh
+           r-cluster
+           r-dnacopy
+           r-glad
+           r-limma
+           r-tilingarray))
+    (home-page "https://bioconductor.org/packages/snapCGH")
+    (synopsis "Segmentation, normalisation and processing of the aCGH data")
+    (description
+     "This package provides methods for segmenting, normalising and processing
+aCGH data.  snapCGH also includes plotting functions for visualising raw and
+segmented data for individual and multiple arrays.")
+    ;; Expanded from GPL
+    (license (list license:gpl2+ license:gpl3+))))
+
 (define-public r-snpstats
   (package
     (name "r-snpstats")
@@ -19240,14 +19726,14 @@ embeddings and functions to build new reference.")
 (define-public r-tximeta
   (package
     (name "r-tximeta")
-    (version "1.16.0")
+    (version "1.16.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "tximeta" version))
        (sha256
         (base32
-         "0v1s5ssinyrizpg2i88dn2ckzs4i16hjfg2pzxhal3ypsiw24qna"))))
+         "15qf8s9akl5qp5wklph5i61d96d9ifr5ijl796v1vafwrj4f3wpa"))))
     (properties `((upstream-name . "tximeta")))
     (build-system r-build-system)
     (propagated-inputs
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index f6a7a83fe3..d684e4249b 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015, 2016, 2018, 2019, 2020 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2020, 2021 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2016, 2018 Raoul Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -56,7 +56,6 @@
   #:use-module (guix build-system go)
   #:use-module (guix build-system haskell)
   #:use-module (guix build-system meson)
-  #:use-module (guix build-system ocaml)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
@@ -512,6 +511,63 @@ BED, GFF/GTF, VCF.")
     (inputs
      (list samtools zlib))))
 
+(define-public bitmapperbs
+  (package
+    (name "bitmapperbs")
+    (version "1.0.2.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/chhylp123/BitMapperBS/")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "02ksssfnvmpskld0a2016smfz5nrzm3d90v8974f3cpzywckvp8v"))
+              (modules '((guix build utils)))
+              ;; This package bundles a modified copy of htslib, so we cannot
+              ;; unbundle it.
+              (snippet
+               '(begin
+                  (delete-file-recursively "libdivsufsort-2.0.1")
+                  (delete-file-recursively "pSAscan-0.1.0")))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #false
+      #:make-flags '(list "bitmapperBS")
+      ;; The build system checks for CPU features.  For this reason, we want
+      ;; users to build it locally instead of using substitutes.
+      #:substitutable? #false
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-build-system
+            (lambda _
+              (substitute* "Makefile"
+                (("make prefix=../htslib_aim install")
+                 (string-append "make prefix=" #$output " install-so"))
+                (("htslib_aim/include") "htslib")
+                (("htslib_aim/lib")
+                 (string-append #$output "/lib")))))
+          (add-after 'unpack 'patch-references-to-psascan
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "Makefile"
+                (("\"(./)?psascan" pre all)
+                 (string-append "\"" pre (search-input-file inputs "/bin/psascan"))))))
+          (delete 'configure)
+          (replace 'install
+            (lambda _
+              (install-file "bitmapperBS"
+                            (string-append #$output "/bin/")))))))
+    (inputs
+     (list libdivsufsort psascan zlib))
+    (home-page "https://github.com/chhylp123/BitMapperBS/")
+    (synopsis "Read aligner for whole-genome bisulfite sequencing")
+    (description
+     "BitMapperBS is memory-efficient aligner that is designed for
+whole-genome bisulfite sequencing (WGBS) reads from directional protocol.")
+    (license license:asl2.0)))
+
 (define-public cellsnp-lite
   ;; Last release is from November 2021 and does not contain fixes.
   (let ((commit "0885d746b0b1ea65c8ef92f8943ca7669ca9734a")
@@ -663,6 +719,53 @@ suite native in R.")
 for all types of microbial diversity analyses.")
       (license license:expat))))
 
+(define-public r-conospanel
+  (let ((commit "39e76b201a783b4e92fd615010a735a61746fbb9")
+        (revision "1"))
+    (package
+      (name "r-conospanel")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kharchenkolab/conosPanel")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1zf0aj5d4iaxc3ghvjnaja5qby1avlmljzh94bpyvxbd359z9snn"))))
+      (properties `((upstream-name . "conosPanel")))
+      (build-system r-build-system)
+      (home-page "https://github.com/kharchenkolab/conosPanel")
+      (synopsis "Data for the conos package")
+      (description "The data within this package is a panel of four samples,
+each with 3000 cells.  There are two samples which are bone marrow (BM), and
+two samples which are cord blood (CB).")
+      (license license:gpl3))))
+
+(define-public r-p2data
+  (let ((commit "7d4c0e17d7899f9d9b08ab2bf455abe150912f4c")
+        (revision "1"))
+    (package
+      (name "r-p2data")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kharchenkolab/p2data")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1hadrldldxvhqs43aqs3c88bqfgql3wcfkbll3jz7fh6z7p3x324"))))
+      (properties `((upstream-name . "p2data")))
+      (build-system r-build-system)
+      (home-page "https://github.com/kharchenkolab/p2data")
+      (synopsis "Data for pagoda2")
+      (description "This package contains data used by pagoda2.  The data
+within this package are the 3000 bone marrow cells used for vignettes.")
+      (license license:gpl3))))
+
 (define-public r-rhtslib12
   (let ((commit "ee186daf04876969c7f31c16a0e0fda8e7c16a30")
         (revision "1"))
@@ -690,6 +793,41 @@ high-throughput sequence analysis.  The package is primarily useful to
 developers of other R packages who wish to make use of HTSlib.")
       (license license:lgpl2.0+))))
 
+(define-public r-streamgraph
+  (let ((commit "76f7173ec89d456ace5943a512e20b1f6810bbcb")
+        (revision "1"))
+    (package
+      (name "r-streamgraph")
+      (version (git-version "0.9.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/hrbrmstr/streamgraph")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "010rhnby5a9dg08jvlkr65b3p9iipdxi2f5m1k6j53s80p25yvig"))))
+      (properties `((upstream-name . "streamgraph")))
+      (build-system r-build-system)
+      (propagated-inputs
+       (list r-dplyr
+             r-htmltools
+             r-htmlwidgets
+             r-magrittr
+             r-tidyr
+             r-xts))
+      (native-inputs (list r-knitr))
+      (home-page "https://github.com/hrbrmstr/streamgraph")
+      (synopsis "Htmlwidget for building streamgraph visualizations")
+      (description
+       "A streamgraph is a type of stacked area chart.  It represents the
+evolution of a numeric variable for several groups.  Areas are usually
+displayed around a central axis, and edges are rounded to give a flowing
+shape.  This package provides an @code{htmlwidget} for building streamgraph
+visualizations.")
+      (license license:expat))))
+
 (define-public pbbam
   (package
     (name "pbbam")
@@ -1057,6 +1195,83 @@ from high-throughput single-cell RNA sequencing (scRNA-seq) data.")
 and sequence consensus.")
     (license license:expat)))
 
+(define-public python-demuxem
+  (package
+    (name "python-demuxem")
+    (version "0.1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "demuxEM" version))
+              (sha256
+               (base32
+                "1bhyxqjk44bmyd26m1smapf68wyf7252kk65i27k50dd3kswgnd6"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs
+     (list python-docopt
+           python-importlib-metadata
+           python-numpy
+           python-pandas
+           python-pegasusio
+           python-scikit-learn
+           python-scipy
+           python-seaborn))
+    (native-inputs (list python-cython python-setuptools-scm))
+    (home-page "https://github.com/lilab-bcb/demuxEM")
+    (synopsis "Analyze cell-hashing/nucleus-hashing data")
+    (description
+     "This is a Python module for analyzing cell-hashing/nucleus-hashing data.
+It is the demultiplexing module of Pegasus, which is used by Cumulus in the
+demultiplexing step.")
+    (license license:bsd-3)))
+
+(define-public python-doubletdetection
+  (package
+    (name "python-doubletdetection")
+    (version "4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "doubletdetection" version))
+              (sha256
+               (base32
+                "0v0a19014h4p6x8pyz1s78xn3q5w5166cysvg574z6vw79a3s9vp"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:tests? #false ;there are none
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'use-poetry-core
+            (lambda _
+              ;; Patch to use the core poetry API.
+              (substitute* "pyproject.toml"
+                (("poetry.masonry.api")
+                 "poetry.core.masonry.api")))))))
+    (propagated-inputs
+     (list python-anndata
+           python-ipywidgets
+           python-leidenalg
+           python-vtraag-louvain
+           python-matplotlib
+           python-numpy
+           python-pandas
+           python-phenograph
+           python-scanpy
+           python-scipy
+           python-tqdm))
+    (native-inputs
+     (list python-black
+           python-flake8
+           python-poetry-core
+           python-pytest
+           python-pre-commit))
+    (home-page "https://github.com/JonathanShor/DoubletDetection")
+    (synopsis
+     "This is a package to detect doublets in single-cell RNA-seq count matrices")
+    (description
+     "This package provides a method to detect and enable removal of doublets
+from single-cell RNA-sequencing.")
+    (license license:expat)))
+
 (define-public python-hclust2
   (package
     (name "python-hclust2")
@@ -1103,6 +1318,97 @@ protocol.  It provides a simple and reliable way to retrieve genomic data from
 servers supporting the protocol.")
    (license license:asl2.0)))
 
+(define-public python-pegasusio
+  (package
+    (name "python-pegasusio")
+    (version "0.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pegasusio" version))
+              (sha256
+               (base32
+                "0gqygspdy398vjymdy6756jmk99s7fhwav9rivdx59kpqjcdxaz9"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs
+     (list python-anndata
+           python-docopt
+           python-h5py
+           python-importlib-metadata
+           python-loompy
+           python-natsort
+           python-numpy
+           python-pandas
+           python-pillow
+           python-scipy
+           python-zarr))
+    (native-inputs (list python-cython python-setuptools-scm))
+    (home-page "https://github.com/lilab-bcb/pegasusio")
+    (synopsis "Read or write single-cell genomics data")
+    (description
+     "Pegasusio is a Python package for reading or writing single-cell
+genomics data.")
+    (license license:bsd-3)))
+
+(define-public python-phenograph
+  (package
+    (name "python-phenograph")
+    (version "1.5.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "PhenoGraph" version))
+              (sha256
+               (base32
+                "0nji449mzwgp1f87iknl5fmnjdkrhkfkapxvafxdw01s0jg8zcj6"))
+              (modules '((guix build utils)))
+              ;; Remove bundled binaries
+              (snippet
+               '(delete-file-recursively "phenograph/louvain"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; This test can never succeed because Q_leiden is never set to
+          ;; anything other than None.
+          (add-after 'unpack 'disable-leiden-test
+            (lambda _
+              (substitute* "tests/test_cluster.py"
+                (("def test_run_leiden") "def _test_run_leiden"))))
+          (add-after 'unpack 'patch-louvain
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "phenograph/core.py"
+                (("lpath = os.path.*")
+                 (string-append "lpath = \""
+                                (dirname (search-input-file inputs "/bin/community"))
+                                "\"\n"))
+                (("linux-(community|hierarchy|convert)" _ thing) thing)
+                ;; Do not write binaries, because the unmodified "convert"
+                ;; from louvain only knows how to process plain text files.
+                (("with open\\(filename \\+ \".bin\", \"w\\+b\"\\) as f:")
+                 "with open(filename + \".bin\", \"w+\") as f:")
+                (("f.writelines\\(\\[e for t in zip\\(ij, s\\) for e in t\\]\\)")
+                 "for [src, dest], weight in zip(ij, s): \
+f.write(src.astype(\"str\") + ' ' + \
+dest.astype(\"str\") + ' ' + \
+weight.astype(\"str\") + '\\n')")))))))
+    (inputs
+     (list louvain))
+    (propagated-inputs
+     (list python-leidenalg
+           python-numpy
+           python-psutil
+           python-scikit-learn
+           python-scipy))
+    (native-inputs
+     (list python-pytest))
+    (home-page "https://github.com/dpeerlab/PhenoGraph.git")
+    (synopsis "Graph-based clustering for high-dimensional single-cell data")
+    (description
+     "PhenoGraph is a clustering method designed for high-dimensional
+single-cell data.  It works by creating a graph representing phenotypic
+similarities between cells and then identifying communities in this graph.")
+    (license license:expat)))
+
 (define-public python-phylophlan
   (package
     (name "python-phylophlan")
@@ -1317,7 +1623,7 @@ use-case, we encourage users to compose functions to achieve their goals.")
            python-scipy))
     (native-inputs
      (list python-cython python-pytest python-pytest-cov python-nose))
-    (home-page "http://www.biom-format.org")
+    (home-page "https://www.biom-format.org")
     (synopsis "Biological Observation Matrix (BIOM) format utilities")
     (description
      "The BIOM file format is designed to be a general-use format for
@@ -2244,7 +2550,7 @@ errors at the end of reads.")
        ("python" ,python-wrapper)))
     (native-inputs
      (list perl perl-clone perl-test-deep perl-test-simple))
-    (home-page "http://bowtie-bio.sourceforge.net/bowtie2/index.shtml")
+    (home-page "https://bowtie-bio.sourceforge.net/bowtie2/index.shtml")
     (synopsis "Fast and sensitive nucleotide sequence read aligner")
     (description
      "Bowtie 2 is a fast and memory-efficient tool for aligning sequencing
@@ -2286,7 +2592,7 @@ gapped, local, and paired-end alignment modes.")
     (inputs
      (list python-wrapper tbb-2020 zlib))
     (supported-systems '("x86_64-linux"))
-    (home-page "http://bowtie-bio.sourceforge.net/index.shtml")
+    (home-page "https://bowtie-bio.sourceforge.net/index.shtml")
     (synopsis "Fast aligner for short nucleotide sequence reads")
     (description
      "Bowtie is a fast, memory-efficient short read aligner.  It aligns short
@@ -2407,7 +2713,7 @@ splice junctions between exons.")
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
-    (home-page "http://bio-bwa.sourceforge.net/")
+    (home-page "https://bio-bwa.sourceforge.net/")
     (synopsis "Burrows-Wheeler sequence aligner")
     (description
      "BWA is a software package for mapping low-divergent sequences against a
@@ -3000,7 +3306,7 @@ time.")
            zlib))
     (native-inputs
      (list python-cython python-nose))
-    (home-page "http://crossmap.sourceforge.net/")
+    (home-page "https://crossmap.sourceforge.net/")
     (synopsis "Convert genome coordinates between assemblies")
     (description
      "CrossMap is a program for conversion of genome coordinates or annotation
@@ -3307,6 +3613,35 @@ and record oriented data modeling and the Semantic Web.")
 resources for bioinformatics.")
     (license license:bsd-3)))
 
+(define-public python-scrublet
+  (package
+    (name "python-scrublet")
+    (version "0.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "scrublet" version))
+              (sha256
+               (base32
+                "0fk5pwk12yz9wpvwkl6j2l2g28f3x35b9r9n5bw6f0i9f0qgd191"))))
+    (build-system pyproject-build-system)
+    (arguments '(#:tests? #false)) ;there are none
+    (propagated-inputs
+     (list python-annoy
+           python-cython
+           python-matplotlib
+           python-numba
+           python-numpy
+           python-pandas
+           python-scikit-image
+           python-scikit-learn
+           python-scipy
+           python-umap-learn))
+    (home-page "https://github.com/swolock/scrublet")
+    (synopsis "Tool to indentify and remove doublets in single-cell data")
+    (description "This package provides a tool for identifying and removing
+doublets in single-cell RNA-seq data.")
+    (license license:expat)))
+
 (define-public cwltool
   (package
     (name "cwltool")
@@ -4595,7 +4930,7 @@ high-throughput sequencing (HTS) assays")
        ("java-xz" ,java-xz)))
     (native-inputs
      (list java-testng))
-    (home-page "http://samtools.github.io/htsjdk/")
+    (home-page "https://samtools.github.io/htsjdk/")
     (synopsis "Java API for high-throughput sequencing data (HTS) formats")
     (description
      "HTSJDK is an implementation of a unified Java library for accessing
@@ -4638,7 +4973,7 @@ manipulating HTS data.")
        ("java-xz" ,java-xz)))
     (native-inputs
      (list java-junit))
-    (home-page "http://samtools.github.io/htsjdk/")
+    (home-page "https://samtools.github.io/htsjdk/")
     (synopsis "Java API for high-throughput sequencing data (HTS) formats")
     (description
      "HTSJDK is an implementation of a unified Java library for accessing
@@ -4743,7 +5078,7 @@ manipulating HTS data.")
      (list java-htsjdk java-guava))
     (native-inputs
      (list java-testng))
-    (home-page "http://broadinstitute.github.io/picard/")
+    (home-page "https://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
 high-throughput sequencing (HTS) data and formats.  Picard is implemented
@@ -4832,7 +5167,7 @@ Class-Path: /~a \
      (list java-htsjdk-2.10.1))
     (native-inputs
      (list java-testng java-guava))
-    (home-page "http://broadinstitute.github.io/picard/")
+    (home-page "https://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
 high-throughput sequencing (HTS) data and formats.  Picard is implemented
@@ -4961,56 +5296,70 @@ VCF.")
 (define-public fastqc
   (package
     (name "fastqc")
-    (version "0.11.5")
+    (version "0.11.9")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "http://www.bioinformatics.babraham.ac.uk/"
-                           "projects/fastqc/fastqc_v"
-                           version "_source.zip"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/s-andrews/FastQC")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "18rrlkhcrxvvvlapch4dpj6xc6mpayzys8qfppybi8jrpgx5cc5f"))))
+         "00y9drm0bkpxw8xfl8ysss18jmnhj8blgqgr6fpa58rkpfcbg8qk"))
+       (snippet
+        '(for-each delete-file
+                   '("cisd-jhdf5.jar"
+                     "sam-1.103.jar"
+                     "jbzip2-0.9.jar")))))
     (build-system ant-build-system)
     (arguments
-     `(#:tests? #f                      ; there are no tests
-       #:build-target "build"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-dependencies
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "build.xml"
-               (("jbzip2-0.9.jar")
-                (search-input-file inputs "/share/java/jbzip2.jar"))
-               (("sam-1.103.jar")
-                (search-input-file inputs
-                                   "/share/java/sam-1.112.jar"))
-               (("cisd-jhdf5.jar")
-                (search-input-file inputs
-                                   "/share/java/sis-jhdf5.jar")))))
-         ;; There is no installation target
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out   (assoc-ref outputs "out"))
-                    (bin   (string-append out "/bin"))
-                    (share (string-append out "/share/fastqc/"))
-                    (exe   (string-append share "/fastqc")))
-               (for-each mkdir-p (list bin share))
-               (copy-recursively "bin" share)
-               (substitute* exe
-                 (("my \\$java_bin = 'java';")
-                  (string-append "my $java_bin = '"
-                                 (assoc-ref inputs "java")
-                                 "/bin/java';")))
-               (chmod exe #o555)
-               (symlink exe (string-append bin "/fastqc"))
-               #t))))))
+     (list
+      #:tests? #f                       ;there are no tests
+      #:build-target "build"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-dependencies
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* '("build.xml" ".classpath")
+                (("jbzip2-0.9.jar")
+                 (search-input-file inputs "/share/java/jbzip2.jar"))
+                (("sam-1.103.jar")
+                 (search-input-file inputs "/share/java/sam-1.112.jar"))
+                (("cisd-jhdf5.jar")
+                 (search-input-file inputs "/share/java/sis-jhdf5.jar")))))
+          ;; There is no installation target
+          (replace 'install
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let* ((bin   (string-append #$output "/bin"))
+                     (share (string-append #$output "/share/fastqc/"))
+                     (exe   (string-append share "/fastqc")))
+                (for-each mkdir-p (list bin share))
+                (copy-recursively "bin" share)
+                (substitute* exe
+                  (("my \\$java_bin = \"java\";")
+                   (string-append "my $java_bin = \""
+                                  ;; Use java from the JRE, not the JDK
+                                  #$(this-package-input "icedtea") "/bin/java"
+                                  "\";"))
+                  (("\\$RealBin\\$delimiter\\$RealBin.*")
+                   (string-append
+                    (string-join
+                     (list
+                      share
+                      (search-input-file inputs "/share/java/sam-1.112.jar")
+                      (search-input-file inputs "/share/java/jbzip2.jar")
+                      (search-input-file inputs "/share/java/sis-jhdf5.jar"))
+                     "$delimiter")
+                    "\";\n")))
+                (chmod exe #o555)
+                (symlink exe (string-append bin "/fastqc"))))))))
     (inputs
-     `(("java" ,icedtea)
-       ("perl" ,perl)                   ; needed for the wrapper script
-       ("java-cisd-jhdf5" ,java-cisd-jhdf5)
-       ("java-picard-1.113" ,java-picard-1.113)
-       ("java-jbzip2" ,java-jbzip2)))
+     (list icedtea
+           java-cisd-jhdf5
+           java-picard-1.113
+           java-jbzip2
+           perl))                       ;needed for the wrapper script
     (native-inputs
      (list unzip))
     (home-page "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/")
@@ -5038,7 +5387,7 @@ The main functions of FastQC are:
 (define-public fastp
   (package
     (name "fastp")
-    (version "0.20.1")
+    (version "0.23.2")
     (source
      (origin
        (method git-fetch)
@@ -5048,20 +5397,21 @@ The main functions of FastQC are:
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0ly8mxdvrcy23jwxyppysx3dhb1lwsqhfbgpyvargxhfk6k700x4"))))
+         "04nmrqpjc3qni0cbazlwvpg8rk1mkfmfma0n4q3zivs3zi6rfnav"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; there are none
-       #:make-flags
-       ,#~(list (string-append "PREFIX=" #$output))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-before 'install 'create-target-dir
-           (lambda* (#:key outputs #:allow-other-keys)
-             (mkdir-p (string-append (assoc-ref outputs "out") "/bin")))))))
+     (list
+      #:tests? #false                   ;there are none
+      #:make-flags
+      #~(list (string-append "PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-before 'install 'create-target-dir
+            (lambda _
+              (mkdir-p (string-append #$output "/bin")))))))
     (inputs
-     (list zlib))
+     (list isa-l libdeflate))
     (home-page "https://github.com/OpenGene/fastp/")
     (synopsis "All-in-one FastQ preprocessor")
     (description
@@ -5252,21 +5602,22 @@ experiments and provide highly stable thresholds based on reproducibility.")
     (outputs '("out"      ;for library
                "python")) ;for Python bindings
     (arguments
-     `(#:configure-flags
-       ,#~(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
+     (list
+      #:configure-flags
+      #~(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
            (lambda _
              ;; generator_manager.hpp either uses /bin/sh or $SHELL
              ;; to run tests.
              (setenv "SHELL" (which "bash")))))))
     (native-inputs
-     `(("bc" ,bc)
-       ("time" ,time)
-       ("python" ,python-wrapper)
-       ("pkg-config" ,pkg-config)))
+     (list bc
+           time
+           python-wrapper
+           pkg-config))
     (inputs
      (list htslib))
     (synopsis "Tool for fast counting of k-mers in DNA")
@@ -5415,7 +5766,7 @@ data.")
            tar
            wget
            zlib))
-    (home-page "http://kaiju.binf.ku.dk/")
+    (home-page "https://kaiju.binf.ku.dk/")
     (synopsis "Fast and sensitive taxonomic classification for metagenomics")
     (description "Kaiju is a program for sensitive taxonomic classification
 of high-throughput sequencing reads from metagenomic whole genome sequencing
@@ -5931,7 +6282,7 @@ predicts the locations of structural units in the sequences.")
        ("openblas" ,openblas)))
     (native-inputs
      (list which))
-    (home-page "http://www.bioinf.uni-leipzig.de/Software/proteinortho")
+    (home-page "https://www.bioinf.uni-leipzig.de/Software/proteinortho")
     (synopsis "Detect orthologous genes across species")
     (description
      "Proteinortho is a tool to detect orthologous genes across different
@@ -6206,7 +6557,7 @@ phylogenies.")
                            "rsem-run-prsem-testing-procedure"))))))))
     (inputs
      (list boost r-minimal perl htslib-1.3 zlib))
-    (home-page "http://deweylab.biostat.wisc.edu/rsem/")
+    (home-page "https://deweylab.biostat.wisc.edu/rsem/")
     (synopsis "Estimate gene expression levels from RNA-Seq data")
     (description
      "RSEM is a software package for estimating gene and isoform expression
@@ -6241,7 +6592,7 @@ BAM and Wiggle files in both transcript-coordinate and genomic-coordinate.")
            zlib))
     (native-inputs
      (list python-nose))
-    (home-page "http://rseqc.sourceforge.net/")
+    (home-page "https://rseqc.sourceforge.net/")
     (synopsis "RNA-seq quality control package")
     (description
      "RSeQC provides a number of modules that can comprehensively evaluate
@@ -6301,7 +6652,7 @@ distribution, coverage uniformity, strand specificity, etc.")
          ("readline" ,readline)))
       (native-inputs
        (list pkg-config))
-      (home-page "http://seek.princeton.edu")
+      (home-page "https://seek.princeton.edu")
       (synopsis "Gene co-expression search engine")
       (description
        "SEEK is a computational gene co-expression search engine.  SEEK provides
@@ -6342,7 +6693,7 @@ to the user's query of interest.")
     (native-inputs (list pkg-config))
     (inputs
      (list htslib ncurses perl python zlib))
-    (home-page "http://samtools.sourceforge.net")
+    (home-page "https://samtools.sourceforge.net")
     (synopsis "Utilities to efficiently manipulate nucleotide sequence alignments")
     (description
      "Samtools implements various utilities for post-processing nucleotide
@@ -7420,7 +7771,7 @@ optionally compressed by gzip.")
                (install-file "SNAPCommand" bin)))))))
     (native-inputs
      (list zlib))
-    (home-page "http://snap.cs.berkeley.edu/")
+    (home-page "https://snap.cs.berkeley.edu/")
     (synopsis "Short read DNA sequence aligner")
     (description
      "SNAP is a fast and accurate aligner for short DNA reads.  It is
@@ -7687,7 +8038,7 @@ sequences.")
          ;; no "configure" script
          (delete 'configure))))
     (inputs (list zlib))
-    (home-page "http://subread.sourceforge.net/")
+    (home-page "https://subread.sourceforge.net/")
     (synopsis "Tool kit for processing next-gen sequencing data")
     (description
      "The subread package contains the following tools: subread aligner, a
@@ -7734,7 +8085,7 @@ against local background noises.")
                (install-file "stringtie" bin)))))))
     (inputs
      (list bzip2 htslib-for-stringtie libdeflate zlib))
-    (home-page "http://ccb.jhu.edu/software/stringtie/")
+    (home-page "https://ccb.jhu.edu/software/stringtie/")
     (synopsis "Transcript assembly and quantification for RNA-Seq data")
     (description
      "StringTie is a fast and efficient assembler of RNA-Seq sequence
@@ -7900,6 +8251,36 @@ sequence.")
 3D perspective axes, 3D perspective annotations, and wireframe plots.")
       (license license:gpl3+))))
 
+(define-public r-ggsankey
+  (let ((commit "be08dd0f86eaee9f9ff9e7ff95d47930660a3c36")
+        (revision "1"))
+    (package
+      (name "r-ggsankey")
+      (version (git-version "0.0.99999" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/davidsjoberg/ggsankey")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0acpmydqqc91pq5p9wpkpmgqp3nhiljabd7d3i00kwhjxgm2bvba"))))
+      (properties `((upstream-name . "ggsankey")))
+      (build-system r-build-system)
+      (propagated-inputs (list r-dplyr
+                               r-ggplot2
+                               r-magrittr
+                               r-purrr
+                               r-stringr
+                               r-tidyr))
+      (home-page "https://github.com/davidsjoberg/ggsankey")
+      (synopsis "Sankey, Alluvial and Sankey bump plots")
+      (description
+       "This package provides a package that makes it easy to implement
+sankey, alluvial and sankey bump plots in @code{ggplot2}.")
+      (license license:expat))))
+
 (define-public r-gutils
   (let ((commit "10e36c7b580aacb2d952140a3fdd82418aaddea6")
         (revision "1"))
@@ -8163,6 +8544,52 @@ doublet-detection methods.  In addition, this tool is used for execution and
 benchmark of those eight mentioned methods.")
       (license license:gpl3+))))
 
+(define-public r-psupertime
+  (let ((commit "73825a28d3bd9bc881c15ee0c4c218eec1c9c207")
+        (revision "1"))
+    (package
+      (name "r-psupertime")
+      (version (git-version "0.2.6" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/wmacnair/psupertime")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "00h1r3ffz6m9dwcgkvyki8405b059qn6mnjsd8d76a1rabaf2vfh"))))
+      (properties `((upstream-name . "psupertime")))
+      (build-system r-build-system)
+      (propagated-inputs
+       (list r-cowplot
+             r-data-table
+             r-fastcluster
+             r-forcats
+             r-ggplot2
+             r-glmnet
+             r-knitr
+             r-matrix
+             r-rcolorbrewer
+             r-scales
+             r-scran
+             r-singlecellexperiment
+             r-stringr
+             r-summarizedexperiment
+             r-topgo))
+      (native-inputs (list r-knitr))
+      (home-page "https://github.com/wmacnair/psupertime")
+      (synopsis
+       "Psupertime is supervised pseudotime for single cell RNAseq data")
+      (description
+       "Psupertime is supervised pseudotime for single cell RNAseq data.  It
+uses single cell RNAseq data, where the cells have a known ordering.  This
+ordering helps to identify a small number of genes which place cells in that
+known order.  It can be used for discovery of relevant genes, for
+identification of subpopulations, and characterization of further unknown or
+differently labelled data.")
+      (license license:gpl3))))
+
 (define-public r-pando
   (package
     (name "r-pando")
@@ -8772,7 +9199,7 @@ of contact distributions around selected landmarks.")
                (base32
                 "1hsx6qgwr0i67fhy9257zj7s0ppncph2hjgbia5nn6nfmj0ax6l9"))))
     (build-system r-build-system)
-    (home-page "http://centipede.uchicago.edu/")
+    (home-page "https://centipede.uchicago.edu/")
     (synopsis "Predict transcription factor binding sites")
     (description
      "CENTIPEDE applies a hierarchical Bayesian mixture model to infer regions
@@ -9010,7 +9437,7 @@ experience substantial biological insertions and deletions.")
            perl-getopt-long
            perl-json
            perl-statistics-pca))
-    (home-page "http://prinseq.sourceforge.net/")
+    (home-page "https://prinseq.sourceforge.net/")
     (synopsis "Preprocess sequence data in FASTA or FASTQ formats")
     (description
      "PRINSEQ is a bioinformatics tool to help you preprocess your genomic or
@@ -9495,7 +9922,7 @@ AM_CONDITIONAL(AMPNG, true)"))
            zlib))
     (native-inputs
      (list autoconf automake libtool pkg-config))
-    (home-page "http://emboss.sourceforge.net")
+    (home-page "https://emboss.sourceforge.net")
     (synopsis "Molecular biology analysis suite")
     (description "EMBOSS is the \"European Molecular Biology Open Software
 Suite\".  EMBOSS is an analysis package specially developed for the needs of
@@ -10172,7 +10599,7 @@ remove biased methylation positions for RRBS sequence files.")
                (for-each (lambda (file)
                            (install-file file target))
                          (find-files "../exe" ".*"))))))))
-    (home-page "http://evolution.genetics.washington.edu/phylip/")
+    (home-page "https://evolution.genetics.washington.edu/phylip/")
     (synopsis "Tools for inferring phylogenies")
     (description "PHYLIP (the PHYLogeny Inference Package) is a package of
 programs for inferring phylogenies (evolutionary trees).")
@@ -14443,110 +14870,125 @@ datasets.")
 (define-public ngless
   (package
     (name "ngless")
-    (version "1.3.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/ngless-toolkit/ngless.git")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0pb9f6b0yk9p4cdwiym8r190q1bcdiwvc7i2s6rw54qgi8r3g6pj"))
-       (patches (search-patches "ngless-unliftio.patch"))))
+    (version "1.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "NGLess" version))
+              (sha256
+               (base32
+                "0pljyrlpr9r3cl5311dhgxdl8y40szyi4vprn34i3piy0qrldymi"))))
     (build-system haskell-build-system)
     (arguments
-     (list
-      #:haddock? #f    ;The haddock phase fails with: NGLess/CmdArgs.hs:20:1:
-                       ;error: parse error on input import
-                       ;import Options.Applicative
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'create-Versions.hs
-            (lambda _
-              (substitute* "Makefile"
-                (("BWA_VERSION = .*")
-                 (string-append "BWA_VERSION = "
-                                #$(package-version bwa) "\n"))
-                (("SAM_VERSION = .*")
-                 (string-append "SAM_VERSION = "
-                                #$(package-version samtools) "\n"))
-                (("PRODIGAL_VERSION = .*")
-                 (string-append "PRODIGAL_VERSION = "
-                                #$(package-version prodigal) "\n"))
-                (("MINIMAP2_VERSION = .*")
-                 (string-append "MINIMAP2_VERSION = "
-                                #$(package-version minimap2) "\n")))
-              (invoke "make" "NGLess/Dependencies/Versions.hs")))
-          (add-after 'create-Versions.hs 'create-cabal-file
-            (lambda _ (invoke "hpack")))
-          ;; These tools are expected to be installed alongside ngless.
-          (add-after 'install 'link-tools
-            (lambda* (#:key inputs #:allow-other-keys)
-              (let ((bin (string-append #$output "/bin/")))
-                (symlink (search-input-file inputs "/bin/prodigal")
-                         (string-append bin "ngless-" #$version "-prodigal"))
-                (symlink (search-input-file inputs "/bin/minimap2")
-                         (string-append bin "ngless-" #$version "-minimap2"))
-                (symlink (search-input-file inputs "/bin/samtools")
-                         (string-append bin "ngless-" #$version "-samtools"))
-                (symlink (search-input-file inputs "/bin/bwa")
-                         (string-append bin "ngless-" #$version "-bwa"))))))))
-    (inputs
-     (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))
+     `(#:haddock? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "NGLess.cabal"
+               (("\\b(base)\\s+[^,]+" all dep)
+                dep))))
+         (add-after 'unpack 'create-Versions.hs
+           (lambda _
+             (substitute* "NGLess/Dependencies/Versions.hs"
+               (("bwaVersion = .+")
+                (string-append "bwaVersion = \""
+                               ,(package-version bwa) "\""))
+               (("samtoolsVersion = .+")
+                (string-append "samtoolsVersion = \""
+                               ,(package-version samtools) "\""))
+               (("prodigalVersion = .+")
+                (string-append "prodigalVersion = \""
+                               ,(package-version prodigal) "\""))
+               (("megahitVersion = .+")
+                (string-append "megahitVersion = \""
+                               ,(package-version megahit) "\""))
+               (("minimap2Version = .+")
+                (string-append "minimap2Version = \""
+                               ,(package-version minimap2) "\"")))))
+         ;; See NGLess/FileManagement.hs.
+         (add-after 'install 'wrap-program
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bwa (search-input-file inputs "/bin/bwa"))
+                      (samtools (search-input-file inputs "/bin/samtools"))
+                      (prodigal (search-input-file inputs "/bin/prodigal"))
+                      (minimap2 (search-input-file inputs "/bin/minimap2"))
+                      (megahit (search-input-file inputs "/bin/megahit")))
+                 (wrap-program (string-append out "/bin/ngless")
+                   `("NGLESS_BWA_BIN" " " = (,bwa))
+                   `("NGLESS_SAMTOOLS_BIN" " " = (,samtools))
+                   `("NGLESS_PRODIGAL_BIN" " " = (,prodigal))
+                   `("NGLESS_MINIMAP2_BIN" " " = (,minimap2))
+                   `("NGLESS_MEGAHIT_BIN" " " = (,megahit))))))
+          ;; Sanity check.
+          (add-after 'wrap-program 'check-install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((ngless (string-append (assoc-ref outputs "out") "/bin/ngless")))
+                 (invoke ngless "--check-install"))))
+          (add-after 'register 'remove-libraries
+            (lambda* (#:key outputs #:allow-other-keys)
+              (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))))
+    (inputs (list prodigal
+                  bwa
+                  samtools
+                  minimap2
+                  megahit
+                  ghc-missingh
+                  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-edit-distance
+                  ghc-either
+                  ghc-errors
+                  ghc-extra
+                  ghc-file-embed
+                  ghc-filemanip
+                  ghc-hashable
+                  ghc-hashtables
+                  ghc-hostname
+                  ghc-http-client
+                  ghc-http-conduit
+                  ghc-inline-c
+                  ghc-inline-c-cpp
+                  ghc-int-interval-map
+                  ghc-network
+                  ghc-optparse-applicative
+                  ghc-primitive
+                  ghc-random-shuffle
+                  ghc-regex
+                  ghc-resourcet
+                  ghc-safe
+                  ghc-stm-chans
+                  ghc-stm-conduit
+                  ghc-strict
+                  ghc-tar
+                  ghc-tar-conduit
+                  ghc-unix-compat
+                  ghc-unliftio
+                  ghc-unliftio-core
+                  ghc-vector
+                  ghc-vector-algorithms
+                  ghc-yaml
+                  ghc-zlib
+                  ghc-bzlib-conduit
+                  ghc-double-conversion
+                  ghc-safeio))
     (propagated-inputs
      (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))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-tasty-th))
     (home-page "https://ngless.embl.de/")
     (synopsis "DSL for processing next-generation sequencing data")
     (description "Ngless is a domain-specific language for
@@ -16451,7 +16893,7 @@ The output is in SAM format.")
      (list libxml2))
     (native-inputs
      (list check swig))
-    (home-page "http://sbml.org/Software/libSBML")
+    (home-page "https://sbml.org/Software/libSBML")
     (synopsis "Process SBML files and data streams")
     (description "LibSBML is a library to help you read, write, manipulate,
 translate, and validate SBML files and data streams.  The @dfn{Systems Biology
@@ -16582,6 +17024,40 @@ sequencing (e.g. mapping or base/indel alignment uncertainty), which are
 usually ignored by other methods or only used for filtering.")
     (license license:expat)))
 
+(define-public louvain
+  (package
+    (name "louvain")
+    (version "0.2")
+    (source (origin
+              (method url-fetch)
+              (uri "mirror://sourceforge/louvain/louvain_latest.tar.gz")
+              (sha256
+               (base32
+                "0hqlv5jqc889nbv7j1bchrx4zhh69hgr2mqvfdygc7kwrywn22lb"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #false                   ;there are none
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-after 'unpack 'patch-includes
+            (lambda _
+              (substitute* "main_community.cpp"
+                (("using namespace std;" m)
+                 (string-append "#include <unistd.h> /* for getpid */\n" m)))))
+          (replace 'install
+            (lambda _
+              (for-each
+               (lambda (exe)
+                 (install-file exe (string-append #$output "/bin")))
+               '("convert" "community" "hierarchy")))))))
+    (home-page "https://sourceforge.net/projects/louvain/")
+    (synopsis "Multi-criteria community detection")
+    (description "This package offers a set of functions to use in order to
+compute communities on graphs weighted or unweighted.")
+    (license license:gpl3+)))
+
 (define-public ivar
   (package
     (name "ivar")
@@ -17388,7 +17864,7 @@ populations.")
 (define-public scregseg
   (package
     (name "scregseg")
-    (version "0.1.1")
+    (version "0.1.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -17397,16 +17873,22 @@ populations.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1k8hllr5if6k2mm2zj391fv40sfc008cjm04l9vgfsdppb80i112"))
+                "07g2barywa1wi8mggbxkbxqjw1fzd0a0l9cjdbkx4s40imb1dbxb"))
               (snippet
-               #~(begin
-                   (use-modules ((guix build utils)))
-                   (delete-file "src/scregseg/_utils.c")))))
-    (build-system python-build-system)
+               '(delete-file "src/scregseg/_utils.c"))))
+    (build-system pyproject-build-system)
     (arguments
-     `(#:tests? #false                  ; tests require network access
-       #:phases
-       (modify-phases %standard-phases
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         ;; Numba needs a writable dir to cache functions.
+         (add-before 'check 'set-numba-cache-dir
+           (lambda _
+             (setenv "NUMBA_CACHE_DIR" "/tmp")))
+         ;; Cython extensions have to be built before running the tests.
+         (add-before 'check 'build-extensions
+           (lambda _
+             (invoke "python" "setup.py" "build_ext" "--inplace")))
          (add-after 'unpack 'do-not-fail-to-find-sklearn
            (lambda _
              ;; XXX: I have no idea why it cannot seem to find sklearn.
@@ -18324,7 +18806,7 @@ useful for bioinformatic analysis.")
 (define-public go-github-com-biogo-hts-bam
   (package
     (name "go-github-com-biogo-hts-bam")
-    (version "1.4.3")
+    (version "1.4.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -18333,7 +18815,7 @@ useful for bioinformatic analysis.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "013ga6ilc4m3hyfr3yyiva9g4vs81afhj73v2sy7r75b5zxw7lx1"))))
+                "1vkcqxyajghx5p5j7g2i376nbsxh8q2smk0smlv8mi34yr7hlw5b"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/biogo/hts/bam"
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 4fc250e7b6..19be7d435f 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -385,7 +385,7 @@ and will take advantage of multiple processor cores where possible.")
 (define-public libtorrent-rasterbar
   (package
     (name "libtorrent-rasterbar")
-    (version "1.2.15")
+    (version "1.2.18")
     (source
      (origin
        (method url-fetch)
@@ -394,7 +394,7 @@ and will take advantage of multiple processor cores where possible.")
                        "releases/download/v" version "/"
                        "libtorrent-rasterbar-" version ".tar.gz"))
        (sha256
-        (base32 "0jr1c876mvwbbbnav8ldcdm1l6z3g404jc5wp8z902jcd0w8dbf8"))))
+        (base32 "0wpsaqadcicxl4lf1nc1i93c4yzjv8hpzhhrw1hdkrp4gn0vdwpy"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-Dpython-bindings=ON"
@@ -416,7 +416,7 @@ and will take advantage of multiple processor cores where possible.")
                  ;; expiry date.  To ensure succesful builds in the future,
                  ;; fake the time to be roughly that of the release.
                  (setenv "FAKETIME_ONLY_CMDS" "test_ssl")
-                 (invoke "faketime" "2021-12-12"
+                 (invoke "faketime" "2022-10-24"
                          "ctest"
                          "--exclude-regex" (string-join disabled-tests "|")
                          "-j" (if parallel-tests?
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 0db2021910..b1276f90dd 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -1102,6 +1102,22 @@ partition."))
        (modify-inputs (package-native-inputs base)
          (append arm-trusted-firmware-rk3399))))))
 
+(define-public u-boot-qemu-arm
+  (make-u-boot-package "qemu_arm" "arm-linux-gnueabihf"
+                       ;; Disable features that require OpenSSL due
+                       ;; to GPL/Openssl license incompatibilities.
+                       ;; See https://bugs.gnu.org/34717 for
+                       ;; details.
+                       #:configs '("# CONFIG_FIT_SIGNATURE is not set")))
+
+(define-public u-boot-qemu-arm64
+  (make-u-boot-package "qemu_arm64" "aarch64-linux-gnu"
+                       ;; Disable features that require OpenSSL due
+                       ;; to GPL/Openssl license incompatibilities.
+                       ;; See https://bugs.gnu.org/34717 for
+                       ;; details.
+                       #:configs '("# CONFIG_FIT_SIGNATURE is not set")))
+
 (define-public u-boot-qemu-riscv64
   (make-u-boot-package "qemu-riscv64" "riscv64-linux-gnu"))
 
@@ -1177,7 +1193,7 @@ Documentation} for more information (for example by running @samp{info
           #~(modify-phases #$phases
               (add-after 'unpack 'set-environment
                 (lambda* (#:key native-inputs inputs #:allow-other-keys)
-                  (setenv "BL31 "(search-input-file inputs "bl31.elf"))))))))
+                  (setenv "BL31" (search-input-file inputs "bl31.elf"))))))))
       (inputs
        (modify-inputs (package-inputs base)
          (append arm-trusted-firmware-rk3328))))))
@@ -1501,7 +1517,7 @@ To flash this bootloader, write it to an SD card, then using the U-Boot serial
 console:
 @example
 mmc dev 0
-load mmc 0:1 ${loadaddr} /u-boot.imx
+load mmc 0:1 ${loadaddr} /boot/u-boot.imx
 sf probe
 sf erase 0 0x80000
 sf write ${loadaddr} 0x400 $filesize
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index c7ac875ef0..9a46f97c81 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -30,7 +30,6 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system)
-  #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module ((guix store)
                 #:select (%store-monad interned-file text-file store-lift))
diff --git a/gnu/packages/bqn.scm b/gnu/packages/bqn.scm
index 8cce9564a2..9b44ea7992 100644
--- a/gnu/packages/bqn.scm
+++ b/gnu/packages/bqn.scm
@@ -23,7 +23,6 @@
   #: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 utils)
   #:use-module (gnu packages)
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 4aa1cdc6f5..94ef1da14d 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -660,7 +660,7 @@ software.")
            sqlite))
     (native-inputs
      (list pkg-config))
-    (home-page "http://gittup.org/tup/")
+    (home-page "https://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
 graphs of commands to be executed.  Tup instruments your build to detect the
@@ -996,7 +996,8 @@ maintenance-related files, for convenience.")
     (native-search-paths
      (list (search-path-specification
             (variable "GNULIB_SRCDIR")
-            (files (list "src/gnulib")))))
+            (files (list "src/gnulib"))
+            (separator #f))))
     (license (list license:lgpl2.0+ license:gpl3+))))
 
 (define-public gnulib
diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm
index dd1f1f34b6..32239106b7 100644
--- a/gnu/packages/busybox.scm
+++ b/gnu/packages/busybox.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016-2020, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2022 LuHui <luhux76@gmail.com>
 ;;;
@@ -35,7 +35,7 @@
 (define-public busybox
   (package
     (name "busybox")
-    (version "1.35.0")
+    (version "1.36.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -43,7 +43,7 @@
                     version ".tar.bz2"))
               (sha256
                (base32
-                "1556hfgw32xf226dd138gfq0z1zf4r3f8naa9wrqld2sqd2b5vps"))))
+                "19b1mzkc2hc2qsg4fnshdyqfxk1xkzwv900p40767ckwmz4509sl"))))
     (build-system gnu-build-system)
     (arguments
      (list #:phases
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 8777c47919..b2f16613dd 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -44,7 +44,6 @@
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system trivial)
   #:use-module (guix store)
   #:use-module (gnu packages)
   #:use-module (gnu packages bash)
@@ -70,8 +69,8 @@
   #:use-module (gnu packages xml))
 
 (define-public c-intro-and-ref
-  (let ((revision "0")
-        (commit "f88559678feeb1391a0e9c7cf060c4429ef22ffc"))
+  (let ((revision "1")
+        (commit "47e5a234a7c036392e0f9e1e8e48ff3e6855840d"))
     (package
       (name "c-intro-and-ref")
       (version (git-version "0.0.0" revision commit))
@@ -83,7 +82,7 @@
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0c08h8k7wkn5lw0jqnnaayx55d3vf1q11pgsixfw31i58rnwa5y2"))))
+                  "0aza4vvlg2w0ss6n5xp741ycvg16d041c1x87yh5hpnzcb6y0ii3"))))
       (build-system copy-build-system)
       (arguments
        (list #:phases #~(modify-phases %standard-phases
@@ -255,7 +254,7 @@ compiler while still keeping it small, simple, fast and understandable.")
 (define-public qbe
   (package
     (name "qbe")
-    (version "1.0")
+    (version "1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -264,7 +263,7 @@ compiler while still keeping it small, simple, fast and understandable.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qx4a3fjjrp2m4dsn19rpbjf89k9w7w7l09s96jx8vv15vzsdgis"))))
+                "07nl1kdgpz7hwfkng0yy4xihk0fmv1a2hq9bxzgvhy3vk9r7fmn8"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index b544f0e59d..cfb2b6b686 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -87,7 +87,7 @@
                "0fr21a7vprdyy1bq6s99m0x420c9jm5fipsd63pqv8qyfkhhxkim"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f))      ; tests rely on access to external servers
-    (home-page "http://libcddb.sourceforge.net/")
+    (home-page "https://libcddb.sourceforge.net/")
     (synopsis "C library to access data on a CDDB server")
     (description
      "Libcddb is a C library to access data on a CDDB server (freedb.org).  It
@@ -281,7 +281,7 @@ reconstruction capability.")
      (list autoconf automake pkg-config))
     (inputs
      (list ao lame libmad libvorbis))
-    (home-page "http://cdrdao.sourceforge.net")
+    (home-page "https://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,
 based on a textual description of the contents.  This mode writes the complete
@@ -350,7 +350,7 @@ CD's, DVD's or Blue Ray discs.  The most important components are
 @command{cdrecord}, a burning program, @command{cdda2wav}, a CD audio ripper
 which uses libparanoia, and @command{mkisofs}, which can create various disc
 images.")
-   (home-page "http://cdrtools.sourceforge.net/private/cdrecord.html")
+   (home-page "https://cdrtools.sourceforge.net/private/cdrecord.html")
 
    ;; mkisofs is GPL, the other programs are CDDL.
    (license (list cddl1.0 gpl2))))
@@ -573,7 +573,7 @@ the data.")
   (package
     (name "cd-discid")
     (version "1.4")
-    (home-page "http://linukz.org/cd-discid.shtml")
+    (home-page "https://linukz.org/cd-discid.shtml")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://linukz.org/download/cd-discid-"
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 9aadd5351e..aa7435bcb4 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -41,6 +41,8 @@
 ;;; Copyright © 2022 David Elsing <david.elsing@posteo.net>
 ;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
+;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -70,6 +72,8 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages golang)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -78,6 +82,7 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages python-science)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages time)
   #:use-module (gnu packages xml)
   #:use-module (guix utils)
@@ -90,6 +95,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system guile)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
@@ -351,7 +357,7 @@ testing of Unix command lines.")
                      (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
      (list automake autoconf libtool))
-    (home-page "http://cunit.sourceforge.net/")
+    (home-page "https://cunit.sourceforge.net/")
     (synopsis "Automated testing framework for C")
     (description
      "CUnit is a lightweight system for writing, administering, and running
@@ -1024,6 +1030,76 @@ C++ but is used in C and C++ projects and frequently used in embedded systems
 but it works for any C/C++ project.")
     (license license:bsd-3)))
 
+;; Required by actionlint. The version of `go-github-com-robfig-cron'
+;; packaged in Guix is newer and changed some error messages, causing
+;; unit tests in actionlint to fail.
+(define-public go-github-com-robfig-cron-1.2
+  (package
+    (inherit go-github-com-robfig-cron)
+    (name "go-github-com-robfig-cron")
+    (version "1.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/robfig/cron")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0nv31m3940d9kf38lw2zs4hpj435bdi9mmim098rb3n4l07qrvva"))))))
+
+(define-public actionlint
+  (package
+    (name "actionlint")
+    (version "1.6.23")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rhysd/actionlint")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "07is4920a40zrl7mfldg0az2pisi7f6dv4vh3ijn3nzb4i7fqbni"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/rhysd/actionlint/cmd/actionlint"
+       #:unpack-path "github.com/rhysd/actionlint"
+       #:install-source? #f))
+    (inputs (list go-github-com-fatih-color
+                  go-github-com-mattn-go-colorable
+                  go-github-com-mattn-go-runewidth
+                  go-github-com-robfig-cron-1.2
+                  go-golang.org-x-sync-errgroup
+                  go-golang.org-x-sync-semaphore
+                  go-gopkg-in-yaml-v3))
+    (native-inputs (list go-github-com-google-go-cmp-cmp))
+    (home-page "https://rhysd.github.io/actionlint/")
+    (synopsis "Static checker for GitHub Actions workflow files")
+    (description
+     "actionlint is a static checker for GitHub Actions
+workflow files.  Features include:
+
+@itemize
+@item Syntax check for workflow files to check unexpected or missing
+keys following workflow syntax
+@item Strong type check for @code{$@{@{ @}@}} expressions to catch
+several semantic errors like access to not existing property, type
+mismatches, ...
+@item Actions usage check to check that inputs at @code{with:} and
+outputs in @code{steps.@{id@}.outputs} are correct
+@item Reusable workflow check to check inputs/outputs/secrets of
+reusable workflows and workflow calls
+@item shellcheck and pyflakes integrations for scripts at @code{run:}
+@item Security checks; script injection by untrusted inputs,
+hard-coded credentials
+@item Other several useful checks; glob syntax validation,
+dependencies check for @code{needs:}, runner label validation, cron
+syntax validation, ...
+@end itemize
+")
+    (license license:expat)))
+
 (define-public python-parameterized
   (package
     (name "python-parameterized")
@@ -1115,7 +1191,7 @@ available via the @code{unittest.mock} module.")
                   (add-after 'unpack 'invoke-2to3
                     (lambda _
                       (invoke "2to3" "-w" "."))))))
-    (home-page "http://readthedocs.org/docs/nose/")
+    (home-page "https://readthedocs.org/docs/nose/")
     (synopsis "Python testing library")
     (description
      "Nose extends the unittest library to make testing easier.")
@@ -2623,6 +2699,24 @@ pragmas to control it from within your code.  Additionally, it is
 possible to write plugins to add your own checks.")
     (license license:gpl2+)))
 
+(define-public python-setuptools-lint
+  (package
+    (name "python-setuptools-lint")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "setuptools-lint" version))
+              (sha256
+               (base32
+                "16a1ac5n7k7sx15cnk03gw3fmslab3a7m74dc45rgpldgiff3577"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-pylint))
+    (home-page "https://github.com/johnnoone/setuptools-pylint")
+    (synopsis "Run pylint with @command{python setup.py lint}")
+    (description "This package expose pylint as a lint command into
+setup.py.")
+    (license license:bsd-3)))
+
 (define-public python-paramunittest
   (package
     (name "python-paramunittest")
@@ -3029,7 +3123,7 @@ retried.")
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (add-installed-pythonpath inputs outputs)
                       (invoke "pytest" "-vv"))))))
-    (home-page "http://hamcrest.org/")
+    (home-page "https://hamcrest.org/")
     (synopsis "Hamcrest matchers for Python")
     (description "PyHamcrest is a framework for writing matcher objects,
 allowing you to declaratively define \"match\" rules.")
@@ -3395,3 +3489,79 @@ directories and files.")
 tables by saving expected data in a data directory (courtesy of pytest-datadir)
 that can be used to verify that future runs produce the same data.")
     (license license:expat)))
+
+(define-public guile-proba
+  (package
+    (name "guile-proba")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://codeberg.org/luis-felipe/guile-proba")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1mjnrbb6gv5f95i1ihn75yh7ya445pcnj13cy34x2v58h9n2r80s"))))
+    (build-system guile-build-system)
+    (inputs (list bash-minimal guile-3.0))
+    (native-inputs (list texinfo))
+    (propagated-inputs (list guile-config guile-lib))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'set-paths 'add-output-to-guile-load-paths
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (guile-version (target-guile-effective-version))
+                     (scm-path (string-append out
+                                              "/share/guile/site/"
+                                              guile-version))
+                     (go-path (string-append out
+                                             "/lib/guile/"
+                                             guile-version
+                                             "/site-ccache")))
+                (setenv "GUILE_LOAD_PATH"
+                        (string-append scm-path ":"
+                                       (getenv "GUILE_LOAD_PATH")))
+                (setenv "GUILE_LOAD_COMPILED_PATH"
+                        (string-append
+                         go-path ":"
+                         (getenv "GUILE_LOAD_COMPILED_PATH"))))))
+          (add-after 'build 'build-manual
+            (lambda _
+              (invoke "makeinfo" "manual/main.texi")))
+          (add-after 'build 'check
+            (lambda _
+              (invoke "guile" "proba.scm" "run" "tests")))
+          (add-after 'install 'install-wrapped-script
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (bin-dir (string-append out "/bin"))
+                     (script (string-append bin-dir "/proba")))
+                (mkdir-p bin-dir)
+                (copy-file "proba.scm" script)
+                (chmod script #o555)
+                (wrap-program script
+                  `("GUILE_LOAD_PATH" = (,(getenv "GUILE_LOAD_PATH")))
+                  `("GUILE_LOAD_COMPILED_PATH" =
+                    (,(getenv "GUILE_LOAD_COMPILED_PATH")))))))
+          (add-after 'install 'install-manual
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (info-dir (string-append out "/share/info")))
+                (mkdir-p info-dir)
+                (install-file "guile-proba" info-dir)))))
+      #:scheme-file-regexp
+      #~(begin
+          (use-modules (ice-9 regex))
+          (lambda (file stat) (string-match "/proba/.*\\.scm$" file)))))
+    (home-page "https://luis-felipe.gitlab.io/guile-proba/")
+    (synopsis "Testing tools for GNU Guile projects with SRFI 64 test suites")
+    (description
+     "This software is a set of testing tools for GNU Guile projects
+with SRFI 64-based test suites.  It comes with a command-line interface
+to run test collections, and a library that includes a test runner and
+helpers for writing tests.")
+    (license license:public-domain)))
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index 4c202a3424..cddccf8aea 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -67,7 +67,6 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python))
 
@@ -425,7 +424,7 @@ stored with user-specified precision.")
            perl
            tinyxml2
            tng))
-    (home-page "http://www.gromacs.org/")
+    (home-page "https://www.gromacs.org/")
     (synopsis "Molecular dynamics software package")
     (description "GROMACS is a versatile package to perform molecular dynamics,
 i.e. simulate the Newtonian equations of motion for systems with hundreds to
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index 0d22e2e20f..c6420a980e 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
-;;; Copyright © 2021, 2022 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2021, 2022, 2023 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -251,10 +251,9 @@ provided and is #f."
                  (if (target-64bit? system)
                      "64"
                      "32")
-                 ;; missing (guix utils) predicate target-little-endian?
-                 (if (target-ppc32? system)
-                     "b"
-                     "l")))
+                 (if (target-little-endian? system)
+                     "l"
+                     "b")))
 
 (define* (racket-cs-native-supported-system? #:optional
                                              (system
@@ -467,7 +466,7 @@ and 32-bit PowerPC architectures.")
   (package
     (inherit chez-scheme)
     (name "chez-scheme-for-racket")
-    (version "9.5.9.8")
+    (version "9.9.9-pre-release.14")
     ;; The version should match `scheme-version`.
     ;; See racket/src/ChezScheme/s/cmacros.ss c. line 360.
     ;; It will always be different than the upstream version!
@@ -1239,7 +1238,7 @@ syntax, with various aliases for commonly used patterns.")
                (replace 'install
                  (lambda* (#:key (make-flags '()) #:allow-other-keys)
                    (apply invoke "make" "chez-install" make-flags))))))
-    (home-page "http://synthcode.com/scheme/fmt")
+    (home-page "https://synthcode.com/scheme/fmt")
     (synopsis "Combinator formatting library for Chez Scheme")
     (description "This package provides a library of procedures for
 formatting Scheme objects to text in various ways, and for easily
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 151b91bf12..bccb035854 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -330,6 +330,23 @@ and workspaces that can be used in the compiler environment of your choice.")
   (package
     (inherit cmake-minimal)
     (name "cmake")
+    (version "3.25.1")
+    (source (origin
+              (inherit (package-source cmake-minimal))
+              (method url-fetch)
+              (uri (string-append "https://cmake.org/files/v"
+                                  (version-major+minor version)
+                                  "/cmake-" version ".tar.gz"))
+              (snippet (match (origin-snippet (package-source cmake-minimal))
+                         (('begin ('define 'preserved-files ('quote x))
+                                  rest ...)
+                          `(begin (define preserved-files
+                                    ',(cons "Utilities/cmelf" x))
+                                  ,@rest))))
+              (sha256
+               (base32
+                "1n4inb3fvk70sni5gmkljqw3cyllalyg3fnr9rlr7x3aa44isl8w"))
+              (patches (search-patches "cmake-curl-certificates-3.24.patch"))))
     (outputs '("out" "doc"))
     (arguments
      (substitute-keyword-arguments (package-arguments cmake-minimal)
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 4f6a4f07c7..5267825ec0 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2015, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2017, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
@@ -323,7 +323,7 @@ COCOMO model or user-provided parameters.")
 (define-public cloc
   (package
     (name "cloc")
-    (version "1.94")
+    (version "1.96.1")
     (source
      (origin
        (method git-fetch)
@@ -332,7 +332,7 @@ COCOMO model or user-provided parameters.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "082kkzr168lkv35hvijq95b817lyj2azcwld47xpws9h35556jlv"))))
+        (base32 "0j7qwc5n1y05jl3rq83mf1d0pavkz9z0waqi8dxblkgw4pwwnjyv"))))
     (build-system gnu-build-system)
     (inputs
      (list coreutils
@@ -430,7 +430,7 @@ features that are not supported by the standard @code{stdio} implementation.")
 (define-public universal-ctags
   (package
     (name "universal-ctags")
-    (version "6.0.20230122.0")
+    (version "6.0.20230212.0")
     (source
      (origin
        (method git-fetch)
@@ -440,7 +440,7 @@ features that are not supported by the standard @code{stdio} implementation.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "121d1dyc3wd4bzv4wky3x66j1va3d6ywbw71abp3l88fv7sc0f73"))
+         "0616y8sqbydh4baixs1fndknjvhfpf57p7a0yr1l5n732lknk2pm"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -475,7 +475,7 @@ features that are not supported by the standard @code{stdio} implementation.")
                       (substitute* "Tmain/utils.sh"
                         (("/bin/echo") (which "echo"))))))))
     (native-inputs
-     (list autoconf automake packcc perl pkg-config))
+     (list autoconf automake packcc perl pkg-config python-docutils))
     (inputs
      (list jansson libseccomp libxml2 libyaml pcre2))
     (home-page "https://ctags.io/")
@@ -580,7 +580,7 @@ stack traces.")
                  `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
              #t)))))
     (inputs (list perl perl-io-compress perl-json))
-    (home-page "http://ltp.sourceforge.net/coverage/lcov.php")
+    (home-page "https://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
 GNU@tie{}Binutils, which provides information about what parts of a program
@@ -809,7 +809,7 @@ independent targets.")
                            (install-file l etcdir))
                          (find-files "etc" "\\.cfg$")))
              #t)))))
-    (home-page "http://uncrustify.sourceforge.net/")
+    (home-page "https://uncrustify.sourceforge.net/")
     (synopsis "Code formatter for C and other related languages")
     (description
      "Beautify source code in many languages of the C family (C, C++, C#,
@@ -875,7 +875,7 @@ Objective@tie{}C, D, Java, Pawn, and Vala).  Features:
                   (make-so-link sofile "(\\.[0-9]){2}$")) ;; link .so.3
                 (find-files libdir "lib.*\\.so\\..*")))
              #t)))))
-    (home-page "http://astyle.sourceforge.net/")
+    (home-page "https://astyle.sourceforge.net/")
     (synopsis "Source code indenter, formatter, and beautifier")
     (description
      "Artistic Style is a source code indenter, formatter, and beautifier for
@@ -1076,7 +1076,7 @@ Readline library.")
        ;; on SysV curses.
        (list (string-append "--with-ncurses="
                             (assoc-ref %build-inputs "ncurses")))))
-    (home-page "http://cscope.sourceforge.net")
+    (home-page "https://cscope.sourceforge.net")
     (synopsis "Tool for browsing source code")
     (description
      "Cscope is a text screen based source browsing tool. Although it is
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index a11fa37d60..c1a40c999b 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3242,7 +3242,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
   ;; This package must be public because other modules refer to it.  However,
   ;; mark it as hidden so that 'fold-packages' ignores it.
   (with-boot4 (hidden-package
-               (package-with-bootstrap-guile guile-3.0/fixed))))
+               (package-with-bootstrap-guile guile-3.0/pinned))))
 
 (define-public glibc-utf8-locales-final
   ;; Now that we have GUILE-FINAL, build the UTF-8 locales.  They are needed
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 16938c9b00..0e7c300fc9 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1368,7 +1368,7 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
             ((target-x86-32?)
              (list nasm))
             (else '())))
-    (home-page "http://p7zip.sourceforge.net/")
+    (home-page "https://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
 handles the 7z format which features very high compression ratios.")
@@ -2530,7 +2530,7 @@ file compression algorithm.")
 (define-public xarchiver
   (package
     (name "xarchiver")
-    (version "0.5.4.17")
+    (version "0.5.4.20")
     (source
      (origin
        (method git-fetch)
@@ -2539,7 +2539,7 @@ file compression algorithm.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00adrjpxqlaccrwjf65w3vhxfswdj0as8aj263c6f9b85llypc5v"))))
+        (base32 "1bgc8r2ii96ghslfscpjhswjgscvw65h2rjr0zvfqn8saqh1ydrv"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      (list gettext-minimal intltool libxslt pkg-config))
@@ -2760,6 +2760,27 @@ serializations such as ASN.1 and MessagePack.")
     (license license:expat)
     (home-page "https://github.com/PJK/libcbor")))
 
+(define-public lzfse
+  (package
+    (name "lzfse")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/lzfse/lzfse")
+             (commit (string-append "lzfse-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1mfh6y6vpvxsdwmqmfbkqkwvxc0pz2dqqc72c6fk9sbsrxxaghd5"))))
+    (build-system cmake-build-system)
+    (home-page "https://github.com/lzfse/lzfse")
+    (synopsis "LZFSE compression library and command line tool")
+    (description "LZFSE is a Lempel-Ziv style data compression algorithm using
+Finite State Entropy coding.  It targets similar compression rates at higher
+compression and decompression speed compared to Deflate using Zlib.")
+    (license license:bsd-3)))
+
 (define-public fcrackzip
   (package
     (name "fcrackzip")
diff --git a/gnu/packages/configuration-management.scm b/gnu/packages/configuration-management.scm
index 3ebb6957c8..b66f70545a 100644
--- a/gnu/packages/configuration-management.scm
+++ b/gnu/packages/configuration-management.scm
@@ -97,7 +97,7 @@
            go-golang-org-x-net
            go-golang-org-x-oauth2
            go-github-com-rogpeppe-go-internal
-           gopkg-in-errgo-fmt-errors))
+           go-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/containers.scm b/gnu/packages/containers.scm
index 985dea7bdb..b402bbde6a 100644
--- a/gnu/packages/containers.scm
+++ b/gnu/packages/containers.scm
@@ -26,6 +26,7 @@
   #: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 go)
   #:use-module (guix build-system meson)
@@ -46,7 +47,8 @@
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages virtualization)
-  #:use-module (gnu packages web))
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages wget))
 
 (define-public crun
   (let ((commit "c381048530aa750495cf502ddb7181f2ded5b400"))
@@ -153,6 +155,41 @@ manager (like Podman or CRI-O) and an Open Container Initiative (OCI)
 runtime (like runc or crun) for a single container.")
     (license license:asl2.0)))
 
+(define-public distrobox
+  (package
+    (name "distrobox")
+    (version "1.4.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/89luca89/distrobox")
+             (commit version)))
+       (sha256
+        (base32 "0gs81m1bvlyq6ad22zsdsw1q6s3agy79vx94kdf6zjzngbanlydk"))
+       (file-name (git-file-name name version))))
+    (build-system copy-build-system)
+    (inputs
+     (list podman wget))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'install 'refer-to-inputs
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* (find-files "." "^distrobox.*[^1]$")
+                     (("podman") (search-input-file inputs "/bin/podman"))
+                     (("wget") (search-input-file inputs "/bin/wget"))
+                     (("command -v") "test -x"))))
+               (replace 'install
+                 (lambda _
+                   (invoke "./install" "--prefix" #$output))))))
+    (home-page "https://distrobox.privatedns.org/")
+    (synopsis "Create and start containers highly integrated with the hosts")
+    (description
+     "Distrobox is a fancy wrapper around Podman or Docker to create and start
+containers highly integrated with the hosts.")
+    (license license:gpl3)))
+
 (define-public libslirp
   (package
     (name "libslirp")
@@ -274,15 +311,19 @@ configure network interfaces in Linux containers.")
 (define-public podman
   (package
     (name "podman")
-    (version "4.3.1")
+    (version "4.4.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/containers/podman")
              (commit (string-append "v" version))))
+       (modules '((guix build utils)))
+       ;; FIXME: Btrfs libraries not detected by these scripts.
+       (snippet '(substitute* "Makefile"
+                   ((".*hack/btrfs.*") "")))
        (sha256
-        (base32 "05hv4xdf06n728lmsx793zygypc9i404bgcgpy0fyrg8c2s11q2h"))
+        (base32 "0qbr6rbyig3c2hvdvmd94jjkg820hpdz6j7dgyv62dl6wfwvj5jj"))
        (file-name (git-file-name name version))))
 
     (build-system gnu-build-system)
@@ -344,7 +385,7 @@ configure network interfaces in Linux containers.")
     (native-inputs
      (list bats
            git
-           go
+           go-1.19
            ; strace ; XXX debug
            pkg-config
            python))
diff --git a/gnu/packages/coq.scm b/gnu/packages/coq.scm
index 0d8cb26358..09ca4030ea 100644
--- a/gnu/packages/coq.scm
+++ b/gnu/packages/coq.scm
@@ -42,7 +42,6 @@
   #:use-module (gnu packages texinfo)
   #:use-module (guix build-system dune)
   #: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)
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index f83674fd58..1f65b4cdb2 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -1428,6 +1428,27 @@ queues header library based on circular buffer with @code{std::atomic}.")
 conversions to and from strings, iteration and related functionality.")
     (license license:expat)))
 
+(define-public mcpp
+  (package
+    (name "mcpp")
+    (version "2.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/mcpp/mcpp/"
+                                  "V." version "/mcpp-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0r48rfghjm90pkdyr4khxg783g9v98rdx2n69xn8f6c5i0hl96rv"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:configure-flags #~(list "--enable-mcpplib" "--disable-static")))
+    (home-page "https://mcpp.sourceforge.net/")
+    (synopsis "C/C++ preprocessor")
+    (description
+     "@code{mcpp} is Matsui's CPP implementation precisely conformed to
+standards.")
+    (license license:bsd-2)))
+
 (define-public cli11
   (package
     (name "cli11")
@@ -1818,7 +1839,7 @@ syntax with variables, conditions, functions and more.")
 (define-public simdjson
   (package
     (name "simdjson")
-    (version "1.0.2")
+    (version "3.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1827,7 +1848,7 @@ syntax with variables, conditions, functions and more.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "05i5jnqd7ngps79cws16ls48gnx08ykkkib3n2hbrdhr1wwrnv7a"))))
+                "0q784bm8xbz3p782dw02cdds6m71wk3acy94vva8krc9g88142ws"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ; tests require downloading dependencies
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index fa33165f0b..38c597ac55 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -283,6 +283,29 @@ simulating diversification models, dating trees, comparing trees, and
 reading/writing trees in Newick format.")
     (license license:gpl2+)))
 
+(define-public r-changepoint
+  (package
+    (name "r-changepoint")
+    (version "2.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "changepoint" version))
+              (sha256
+               (base32
+                "16v4p2c9zi2w3anwf5y9snl5dy1g5aidiqz1vn2p64qhfvg6yqxc"))))
+    (properties `((upstream-name . "changepoint")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-zoo))
+    (home-page "https://github.com/rkillick/changepoint/")
+    (synopsis "Methods for changepoint detection")
+    (description
+     "Changepoint implements various mainstream and specialised changepoint
+methods.  These methods are suitable for finding single and multiple
+changepoints within data.  Many popular non-parametric and frequentist methods
+are included as well.")
+    ;; Any version of the GPL.
+    (license license:gpl3+)))
+
 (define-public r-collections
   (package
     (name "r-collections")
@@ -302,6 +325,41 @@ reading/writing trees in Newick format.")
 queues, stacks, deques, dicts and ordered dicts.")
     (license license:expat)))
 
+(define-public r-cplm
+  (package
+    (name "r-cplm")
+    (version "0.7-10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "cplm" version))
+       (sha256
+        (base32 "0mqjk10265hq9bc5ihmgbx1l8fzay1gpdlvx3pirqmvr3w1kwlxk"))))
+    (properties `((upstream-name . "cplm")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biglm
+           r-coda
+           r-ggplot2
+           r-matrix
+           r-minqa
+           r-nlme
+           r-reshape2
+           r-statmod
+           r-tweedie))
+    (home-page "https://github.com/actuaryzhang/cplm")
+    (synopsis "Compound Poisson linear models")
+    (description "The Tweedie compound Poisson distribution is a mixture of a
+degenerate distribution at the origin and a continuous distribution on the
+positive real line.  It has been applied in a wide range of fields in which
+continuous data with exact zeros regularly arise.  The cplm package provides
+likelihood based and Bayesian procedures for fitting common Tweedie compound
+Poisson linear models.  In particular, models with hierarchical structures or
+extra zero inflation can be handled.  Further, the package implements the Gini
+index based on an ordered version of the Lorenz curve as a robust model
+comparison tool involving zero-inflated and highly skewed distributions.")
+    (license license:gpl2+)))
+
 (define-public r-curry
   (package
     (name "r-curry")
@@ -511,13 +569,41 @@ by Luis Torgo, published by CRC Press.")
          "05mv6xhm15b0mq9kzyiblkb14bdqmjrwl64ghdk66il0w8i7p6nh"))))
     (properties `((upstream-name . "emdist")))
     (build-system r-build-system)
-    (home-page "http://www.rforge.net/emd")
+    (home-page "https://www.rforge.net/emd")
     (synopsis "Earth mover's distance")
     (description
      "This package provides tools to calculate the Earth Mover's
 Distance (EMD).")
     (license license:expat)))
 
+(define-public r-gfonts
+  (package
+    (name "r-gfonts")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "gfonts" version))
+              (sha256
+               (base32
+                "19ja087k767bq71v2w4jcpynd62ysrqmjf6rpfnmmd40aanyxqkj"))))
+    (properties `((upstream-name . "gfonts")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-crayon
+           r-crul
+           r-glue
+           r-htmltools
+           r-jsonlite
+           r-shiny))
+    (native-inputs (list r-knitr))
+    (home-page "https://dreamrs.github.io/gfonts/")
+    (synopsis "Offline Google fonts for Markdown and Shiny")
+    (description
+     "This package lets you download Google fonts and generate CSS to use in
+rmarkdown documents and Shiny applications.  Some popular fonts are included
+and ready to use.")
+    (license license:gpl3)))
+
 (define-public r-ggalt
   (package
     (name "r-ggalt")
@@ -854,6 +940,26 @@ pronounceable identifiers.")
 can read and write both the metadata and the cell data in a Sheet.")
     (license license:expat)))
 
+(define-public r-pma
+  (package
+    (name "r-pma")
+    (version "1.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "PMA" version))
+       (sha256
+        (base32 "1rhiylm3jfarnqdkv7nwg536sgsa30ic80dk9byks9w0wf4mn59s"))))
+    (properties `((upstream-name . "PMA")))
+    (build-system r-build-system)
+    (home-page "https://github.com/bnaras/PMA")
+    (synopsis "Penalized multivariate analysis")
+    (description
+     "This package performs penalized multivariate analysis: a penalized
+matrix decomposition, sparse principal components analysis, and sparse
+canonical correlation analysis.")
+    (license license:gpl2+)))
+
 (define-public r-proj4
   (package
     (name "r-proj4")
@@ -868,7 +974,7 @@ can read and write both the metadata and the cell data in a Sheet.")
     (build-system r-build-system)
     (inputs (list proj-7 zlib))
     (native-inputs (list pkg-config))
-    (home-page "http://www.rforge.net/proj4/")
+    (home-page "https://www.rforge.net/proj4/")
     (synopsis "Simple interface to the PROJ.4 cartographic projections library")
     (description
      "This package provides a simple interface to lat/long projection and
@@ -1033,6 +1139,48 @@ and compare against other CPUs.  Also provides functions for obtaining system
 specifications, such as RAM, CPU type, and R version.")
     (license license:gpl2+)))
 
+(define-public r-bestnormalize
+  (package
+    (name "r-bestnormalize")
+    (version "1.8.3")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "bestNormalize" version))
+              (sha256
+               (base32
+                "107z16vx6k31ln5ppxixjgagrzrjwlrk13689lq2s90x4k2pgmkh"))))
+    (properties `((upstream-name . "bestNormalize")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-butcher
+                             r-doparallel
+                             r-dorng
+                             r-dplyr
+                             r-foreach
+                             r-lambertw
+                             r-nortest
+                             r-purrr
+                             r-recipes
+                             r-tibble))
+    (native-inputs (list r-knitr))
+    (home-page "https://petersonr.github.io/bestNormalize/")
+    (synopsis "Normalizing transformation functions")
+    (description
+     "Estimate a suite of normalizing transformations, including a new
+adaptation of a technique based on ranks which can guarantee normally
+distributed transformed data if there are no ties: @dfn{ordered quantile
+normalization} (ORQ).  ORQ normalization combines a rank-mapping approach with
+a shifted logit approximation that allows the transformation to work on data
+outside the original domain.  It is also able to handle new data within the
+original domain via linear interpolation.  The package is built to estimate
+the best normalizing transformation for a vector consistently and accurately.
+It implements the Box-Cox transformation, the Yeo-Johnson transformation,
+three types of Lambert WxF transformations, and the ordered quantile
+normalization transformation.  It estimates the normalization efficacy of
+other commonly used transformations, and it allows users to specify custom
+transformations or normalization statistics.  Finally, functionality can be
+integrated into a machine learning workflow via recipes.")
+    (license license:gpl3)))
+
 (define-public r-bezier
   (package
     (name "r-bezier")
@@ -1052,6 +1200,29 @@ The package provides functions for point generation, arc length estimation,
 degree elevation and curve fitting.")
     (license license:gpl2+)))
 
+(define-public r-biglm
+  (package
+    (name "r-biglm")
+    (version "0.9-2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "biglm" version))
+       (sha256
+        (base32 "0iy9xr2bq42wlizgwlz7w5kh9206yqkw9h2cr6mcsmizgjg3rkvd"))))
+    (properties `((upstream-name . "biglm")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-dbi))
+    (native-inputs (list gfortran))
+    (home-page "https://cran.r-project.org/package=biglm")
+    (synopsis "Bounded memory linear and generalized linear models")
+    (description "The biglm package lets you create a linear model object that
+uses only code{p^2} memory for @code{p} variables.  It can be updated with
+more data using @code{update}. This allows linear regression on data sets
+larger than memory.")
+    ;; Expanded from GPL
+    (license (list license:gpl2+ license:gpl3+))))
+
 (define-public r-bwstest
   (package
     (name "r-bwstest")
@@ -1391,7 +1562,7 @@ proposals for count data.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-lattice))
-    (home-page "http://zoo.R-Forge.R-project.org/")
+    (home-page "https://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
 ordered indexed observations.  It is particularly aimed at irregular time
@@ -1401,13 +1572,13 @@ series of numeric vectors/matrices and factors.")
 (define-public r-fontawesome
   (package
     (name "r-fontawesome")
-    (version "0.4.0")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fontawesome" version))
        (sha256
-        (base32 "0br4sjl2z5av5kf42mnp35sichk3syrz68xic08wxnqdnp2hn2kn"))))
+        (base32 "02z9jqvwn8bhwbkxlx9f42x4qlz7akmmjw0xi0kdd0iylcbv85s1"))))
     (properties `((upstream-name . "fontawesome")))
     (build-system r-build-system)
     (propagated-inputs
@@ -1473,13 +1644,13 @@ in good performances with large files.")
 (define-public r-ggalluvial
   (package
    (name "r-ggalluvial")
-   (version "0.12.3")
+   (version "0.12.4")
    (source (origin
             (method url-fetch)
             (uri (cran-uri "ggalluvial" version))
             (sha256
              (base32
-              "0mkan9gxg3yxjism22yxbhvlh2lh7wpbrqpb355za790prcmjbh3"))))
+              "0x2njwgsjrcl4g9md32a2l5b7cvisj5g93jjzm7kr3g7l9gwbzz3"))))
    (properties `((upstream-name . "ggalluvial")))
    (build-system r-build-system)
    (propagated-inputs
@@ -1491,7 +1662,7 @@ in good performances with large files.")
           r-tidyselect))
    (native-inputs
     (list r-knitr))
-   (home-page "http://corybrunson.github.io/ggalluvial/")
+   (home-page "https://corybrunson.github.io/ggalluvial/")
    (synopsis "Alluvial plots for ggplot2")
    (description "This package provides alluvial plots for @code{ggplot2}.
 Alluvial plots use variable-width ribbons and stacked bar plots to represent
@@ -1502,14 +1673,14 @@ variables.")
 (define-public r-ggpp
   (package
     (name "r-ggpp")
-    (version "0.5.0")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggpp" version))
        (sha256
         (base32
-         "0zmxnzsdmwv9v77fifgiknalwif59261kslq8848x1xch8f82l77"))))
+         "0cbv09gvwrxj5k8ffh4v537cf4hx3z2zgs8yy0ssglslibfgd3ka"))))
     (properties `((upstream-name . "ggpp")))
     (build-system r-build-system)
     (propagated-inputs
@@ -1879,7 +2050,7 @@ higher.")
     (properties `((upstream-name . "OrgMassSpecR")))
     (build-system r-build-system)
     (native-inputs (list r-knitr))
-    (home-page "http://OrgMassSpec.github.io/")
+    (home-page "https://OrgMassSpec.github.io/")
     (synopsis "Organic or biological mass spectrometry data analysis")
     (description
      "This package @code{OrgMassSpecR} is an extension of the @code{R}
@@ -1938,6 +2109,59 @@ consistent fashion.  It seeks to combine functionality from lower level
 functions which can speed up workflow.")
     (license license:gpl2)))
 
+(define-public r-pagoda2
+  (package
+    (name "r-pagoda2")
+    (version "1.0.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "pagoda2" version))
+       (sha256
+        (base32 "18ip8j5l5c3hqw1xsf5wnyas55i2mhk09phy68kjkjdgcymmpg7c"))))
+    (properties `((upstream-name . "pagoda2")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dendsort
+           r-drat
+           r-fastcluster
+           r-igraph
+           r-irlba
+           r-magrittr
+           r-mass
+           r-matrix
+           r-mgcv
+           r-n2r
+           r-plyr
+           r-r-utils
+           r-r6
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppeigen
+           r-rcppprogress
+           r-rjson
+           r-rlang
+           r-rmtstat
+           r-rook
+           r-rtsne
+           r-sccore
+           r-urltools))
+    (home-page "https://github.com/kharchenkolab/pagoda2")
+    (synopsis "Single cell analysis and differential expression")
+    (description
+     "The package offers functions for analyzing and interactively exploring
+large-scale single-cell RNA-seq datasets.  Pagoda2 primarily performs
+normalization and differential gene expression analysis, with an interactive
+application for exploring single-cell RNA-seq datasets.  It performs basic
+tasks such as cell size normalization, gene variance normalization, and can be
+used to identify subpopulations and run differential expression within
+individual samples.  pagoda2 was written to rapidly process modern large-scale
+scRNAseq datasets of approximately 1e6 cells.  The companion web application
+allows users to explore which gene expression patterns form the different
+subpopulations within your data.  The package also serves as the primary
+method for preprocessing data for conos.")
+    (license license:gpl3)))
+
 (define-public r-pals
   (package
     (name "r-pals")
@@ -2101,7 +2325,7 @@ with default R plot functions.")
      (list r-colorspace r-scatterplot3d))
     (native-inputs
      (list r-knitr))
-    (home-page "http://oompa.r-forge.r-project.org/")
+    (home-page "https://oompa.r-forge.r-project.org/")
     (synopsis "Qualitative palettes with many colors")
     (description
      "This package provides tools for creating, viewing, and assessing
@@ -2432,13 +2656,13 @@ read a protected key.")
 (define-public r-astsa
   (package
     (name "r-astsa")
-    (version "1.16")
+    (version "2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "astsa" version))
        (sha256
-        (base32 "09872vkqb180cwprdfr3cn85jhazlc4vjdj6pjc70s06bh834f3w"))))
+        (base32 "0rv4fnz5bbd6f8b6fwa2ljdjq5yx0qi7hcbhrgvrbibl2pzfm7w7"))))
     (properties `((upstream-name . "astsa")))
     (build-system r-build-system)
     (home-page "https://github.com/nickpoison/astsa/")
@@ -2836,13 +3060,13 @@ Zucchini.")
 (define-public r-httpuv
   (package
     (name "r-httpuv")
-    (version "1.6.7")
+    (version "1.6.8")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "httpuv" version))
               (sha256
                (base32
-                "0jjb2w59x8a4k24j9rc4rjm37h1ccrfq1nzd40inbnd6kcqf3lkm"))
+                "0fljspgdiihn736s8wj6ri28sggw1sd3zfi5qav3gzrsqm2z29xz"))
               ;; Unvendor bundled libraries. As of 1.5.4 the vendored libuv
               ;; only contains fixes for building on Solaris.
               (patches (search-patches "r-httpuv-1.6.6-unvendor-libuv.patch"))
@@ -3063,13 +3287,13 @@ LaTeX.")
 (define-public r-curl
   (package
     (name "r-curl")
-    (version "4.3.3")
+    (version "5.0.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "curl" version))
               (sha256
                (base32
-                "17kwc7njblfndnlij0m5a7a3jj42ag412xg0ry5ddnj0mnnbcrrm"))))
+                "1cn9b6xcc6xp2q66pkla6xrq4v6rbpxfcr3gizx4z48knp4wmwyp"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -3307,14 +3531,14 @@ conditionals and comparisons, and more.")
 (define-public r-sass
   (package
     (name "r-sass")
-    (version "0.4.4")
+    (version "0.4.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sass" version))
        (sha256
         (base32
-         "0hk5svmpbhx9q3ni3qll2pa7q3pfc0zxv616kp62r6vakn1az16j"))))
+         "143s030qicvsacwwrirhqkg3l3d285myqq8bij611nyjhbcn38gb"))))
     (properties `((upstream-name . "sass")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3766,14 +3990,21 @@ Bootstrap themes, which are packaged for use with Shiny applications.")
 (define-public r-d3r
   (package
     (name "r-d3r")
-    (version "1.0.0")
+    (version "1.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "d3r" version))
        (sha256
         (base32
-         "1qijkllfaaw0lb29j8mappm8jz9kg8gkihxq5wqhb4gabsazdwva"))))
+         "07n92x047l6savy8s5r3rj15nmjgswl1shl1dyzrzhgpa5jrpxf3"))
+       (snippet
+        '(for-each delete-file
+                   '("inst/www/d3/v3/dist/d3.min.js"
+                     "inst/www/d3/v4/dist/d3.min.js"
+                     "inst/www/d3/v5/dist/d3.min.js"
+                     "inst/www/d3/v6/dist/d3.min.js"
+                     "inst/www/d3/v7/dist/d3.min.js")))))
     (build-system r-build-system)
     (arguments
      `(#:modules ((guix build utils)
@@ -3801,7 +4032,6 @@ Bootstrap themes, which are packaged for use with Shiny applications.")
                    (for-each (lambda (source target)
                                (format #t "Processing ~a --> ~a~%"
                                        source target)
-                               (delete-file target)
                                (invoke "esbuild" source "--minify"
                                        (string-append "--outfile=" target)))
                              sources targets)))))))))
@@ -3843,7 +4073,7 @@ Bootstrap themes, which are packaged for use with Shiny applications.")
            (uri "https://d3js.org/d3.v7.js")
            (sha256
             (base32
-             "1hif1phswlkkpvcf1hbqmfsxdb5s5gr5g2frcwbh0rh8g6nbkyqi"))))))
+             "1m4i3kqzkz7w06sp9zqcy9f88xpdhi7cqih3phdrf4yjmfk1pfjg"))))))
     (home-page "https://github.com/timelyportfolio/d3r")
     (synopsis "d3.js utilities for R")
     (description
@@ -4246,14 +4476,14 @@ Projection code and larger maps are in separate packages (@code{mapproj} and
 (define-public r-mapproj
   (package
     (name "r-mapproj")
-    (version "1.2.9")
+    (version "1.2.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "mapproj" version))
        (sha256
         (base32
-         "10nzfbyfkc545qxf51i33g0f8iiidcnhj971ylphnbh7j2sgla6s"))))
+         "0z9lhv006pw4mwqlghvgvv66ga958bs6n1k6fmqjdpirr4f20bfv"))))
     (build-system r-build-system)
     (propagated-inputs (list r-maps))
     (home-page "https://cran.r-project.org/web/packages/mapproj")
@@ -4513,13 +4743,13 @@ XML.  To learn more about the Abbyy OCR API, see @url{http://ocrsdk.com/}.")
 (define-public r-colorspace
   (package
     (name "r-colorspace")
-    (version "2.0-3")
+    (version "2.1-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "colorspace" version))
        (sha256
-        (base32 "0zw52s8g2gxp8i1ax96azxmxqrbhb7aad5px0c1vgr6n9p682mp7"))))
+        (base32 "0k31hazd2rq5lyg3y89y2v5jqadz2qlxd1bhvj89q4aldfxql1q4"))))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr))
@@ -4669,7 +4899,7 @@ initiative to bring PASSTEC 2000 functionalities to R.")
           r-mvtnorm
           r-rpart
           r-survival))
-   (home-page "http://partykit.R-Forge.R-project.org/partykit")
+   (home-page "https://partykit.R-Forge.R-project.org/partykit")
    (synopsis "Toolkit for recursive partytioning")
    (description
     "This package provides a toolkit with infrastructure for representing,
@@ -4830,15 +5060,15 @@ value for each cluster in a dendrogram.")
 (define-public r-rcpp
   (package
     (name "r-rcpp")
-    (version "1.0.9")
+    (version "1.0.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rcpp" version))
        (sha256
-        (base32 "0xli48y9nsj8x8p5vkhisiz4l23g8r2623rn0i4xb5javh3fqz40"))))
+        (base32 "0inmnmi0pqmbqnl00d5yal1bmd7awigxd7sgzjsil9c1k55f4r8y"))))
     (build-system r-build-system)
-    (home-page "http://www.rcpp.org")
+    (home-page "https://www.rcpp.org")
     (synopsis "Seamless R and C++ integration")
     (description
      "The Rcpp package provides R functions as well as C++ classes which offer
@@ -4893,6 +5123,30 @@ performs global optimization by differential evolution.")
 factorization and divisive clustering for large sparse and dense matrices.")
     (license license:gpl2+)))
 
+(define-public r-rcppspdlog
+  (package
+    (name "r-rcppspdlog")
+    (version "0.0.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "RcppSpdlog" version))
+       (sha256
+        (base32 "1nan0hm49xdl2l1lskm1jf01clfh7aw2v6h57j35qysvg8219fcx"))))
+    (properties `((upstream-name . "RcppSpdlog")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-rcpp))
+    (native-inputs (list r-simplermarkdown))
+    (home-page "https://github.com/eddelbuettel/rcppspdlog")
+    (synopsis "R and C++ interfaces to spdlog C++ header library for logging")
+    (description
+     "The spdlog library is a widely-used and very capable header-only C++
+library for logging.  This package includes its headers as an R package to
+permit other R packages to deploy it via a simple @code{LinkingTo:
+RcppSpdlog}.  As of version 0.0.9, it also provides both simple R logging
+functions and compiled functions callable by other packages.")
+    (license license:gpl2+)))
+
 (define-public r-rcppthread
   (package
     (name "r-rcppthread")
@@ -5210,6 +5464,33 @@ compare different dendrograms to one another.")
     ;; Any of these versions
     (license (list license:gpl2 license:gpl3))))
 
+(define-public r-dendsort
+  (package
+    (name "r-dendsort")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "dendsort" version))
+       (sha256
+        (base32 "0rs7y471wrhkgibxdmfh5xhp3pa004rrlm2w08b6qli5gq4im5d2"))))
+    (properties `((upstream-name . "dendsort")))
+    (build-system r-build-system)
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/evanbiederstedt/dendsort")
+    (synopsis "Modular leaf ordering methods for dendrogram nodes")
+    (description
+     "This package represents an implementation of functions to optimize
+ordering of nodes in a dendrogram, without affecting the meaning of the
+dendrogram.  A dendrogram can be sorted based on the average distance of
+subtrees, or based on the smallest distance value.  These sorting methods
+improve readability and interpretability of tree structure, especially for
+tasks such as comparison of different distance measures or linkage types and
+identification of tight clusters and outliers.  As a result, it also
+introduces more meaningful reordering for a coupled heatmap visualization.")
+    ;; Any of these versions
+    (license (list license:gpl2 license:gpl3))))
+
 (define-public r-getoptlong
   (package
     (name "r-getoptlong")
@@ -5261,17 +5542,17 @@ any subsequent lookup as it keeps the hash table in memory.")
 (define-public r-ff
   (package
     (name "r-ff")
-    (version "4.0.7")
+    (version "4.0.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ff" version))
        (sha256
         (base32
-         "1yl3ipzz9bjkfy9bbna7xz5n7iz4lchnw5l7agww7by764yk6iqa"))))
+         "0krwxq4985x3n5mzx8i9smwpkd5sifbfgy9z7ikwk84734km683j"))))
     (build-system r-build-system)
     (propagated-inputs (list r-bit))
-    (home-page "http://ff.r-forge.r-project.org/")
+    (home-page "https://ff.r-forge.r-project.org/")
     (synopsis "Memory-efficient storage of large data on disk and access functions")
     (description
      "This package provides data structures that are stored on disk but
@@ -5497,13 +5778,13 @@ most popular ones.")
 (define-public r-sp
   (package
     (name "r-sp")
-    (version "1.5-1")
+    (version "1.6-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sp" version))
        (sha256
-        (base32 "1pr9yb2wqapyizdfpi7zqd4a5b40q58czbfj6svvp2fkh6sfmfb9"))))
+        (base32 "1npwz49qmlqz46jrwlmv4929hb3wv3whxzj1bplyipp7h2z7z5zm"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-lattice))
@@ -5519,6 +5800,63 @@ selection, as well as methods for retrieving coordinates, for subsetting,
 print, summary, etc.")
     (license license:gpl2+)))
 
+(define-public r-lambertw
+  (package
+    (name "r-lambertw")
+    (version "0.6.7-1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "LambertW" version))
+              (sha256
+               (base32
+                "0cdrq2nrvji8l5blswkffymm7cbjk5jzzx16js2a516cm3gjwxk4"))))
+    (properties `((upstream-name . "LambertW")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-ggplot2
+                             r-lamw
+                             r-mass
+                             r-rcolorbrewer
+                             r-rcpp
+                             r-reshape2))
+    (native-inputs (list r-knitr))
+    (home-page "https://cran.r-project.org/package=LambertW")
+    (synopsis
+     "Probabilistic models to analyze and Gaussianize heavy-tailed, skewed data")
+    (description
+     "Lambert W x F distributions are a generalized framework to analyze skewed,
+heavy-tailed data.  It is based on an input/output system, where the output
+random variable (RV) Y is a non-linearly transformed version of an input RV X
+~ F with similar properties as X, but slightly skewed (heavy-tailed).  The
+transformed RV Y has a Lambert W x F distribution.  This package contains
+functions to model and analyze skewed, heavy-tailed data the Lambert Way:
+simulate random samples, estimate parameters, compute quantiles, and plot/
+print results nicely.  The most useful function is @code{Gaussianize}, which
+works similarly to @code{scale}, but actually makes the data Gaussian.  A
+do-it-yourself toolkit allows users to define their own Lambert W x
+@code{MyFavoriteDistribution} and use it in their analysis right away.")
+    (license license:gpl2+)))
+
+(define-public r-lamw
+  (package
+    (name "r-lamw")
+    (version "2.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "lamW" version))
+              (sha256
+               (base32
+                "05b37kx4jpszx2hkm47d7cjkf8544f7r8x26q68yp9c6zqm9gbc3"))))
+    (properties `((upstream-name . "lamW")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-rcpp r-rcppparallel))
+    (home-page "https://github.com/aadler/lamW")
+    (synopsis "Lambert-W function")
+    (description
+     "This package implements both real-valued branches of the Lambert-W
+function (Corless et al, 1996) <doi:10.1007/BF02124750> without the need for
+installing the entire GSL.")
+    (license license:bsd-2)))
+
 (define-public r-laplacesdemon
   (package
     (name "r-laplacesdemon")
@@ -5587,6 +5925,33 @@ matrices.")
 provides an interactive R manager and worker environment.")
     (license license:gpl2+)))
 
+(define-public r-rmumps
+  (package
+    (name "r-rmumps")
+    (version "5.2.1-22")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rmumps" version))
+       (sha256
+        (base32 "18wqy82hwnbiwqcyldg8ci0jmxfiaj65ila0fjzzv40d3kl8hx76"))))
+    (properties `((upstream-name . "rmumps")))
+    (build-system r-build-system)
+    (inputs (list zlib))
+    (propagated-inputs (list r-rcpp))
+    (native-inputs (list gfortran))
+    (home-page "https://www.mumps-solver.org/")
+    (synopsis "Wrapper for MUMPS library")
+    (description
+     "Some basic features of @acronym{MUMPS, Multifrontal Massively Parallel
+sparse direct Solver} are wrapped in a class whose methods can be used for
+sequentially solving a sparse linear system (symmetric or not) with one or
+many right hand sides (dense or sparse).  There is a possibility to do
+separately symbolic analysis, LU (or LDL^t) factorization and system solving.
+Third part ordering libraries are included and can be used: PORD, METIS,
+SCOTCH.")
+    (license license:gpl2+)))
+
 (define-public r-lmoments
   (package
     (name "r-lmoments")
@@ -5890,7 +6255,7 @@ classes in the @code{stats4} package.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-bbmle r-coda r-lattice r-mass r-plyr))
-    (home-page "http://www.math.mcmaster.ca/bolker/emdbook")
+    (home-page "https://www.math.mcmaster.ca/bolker/emdbook")
     (synopsis "Support functions and data for \"Ecological Models and Data\"")
     (description
      "This package provides auxiliary functions and data sets for \"Ecological
@@ -5902,14 +6267,14 @@ topics for ecologists (ISBN 978-0-691-12522-0).")
 (define-public r-lpsolve
   (package
     (name "r-lpsolve")
-    (version "5.6.17")
+    (version "5.6.18")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lpSolve" version))
        (sha256
         (base32
-         "124jdjvxi1kqfd10jv85jqllvba1hi2z4j5g7n8wc1fwv4mq09gp"))))
+         "04p71mcpksighyvl74ffvgxzc7iiv7nafphddhmqa6yqzhk1j7km"))))
     (properties `((upstream-name . "lpSolve")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/lpSolve")
@@ -5969,7 +6334,7 @@ functions from LINPACK.")
      (list r-mass r-survival))
     (native-inputs
      (list r-knitr))
-    (home-page "http://riskassessment.r-forge.r-project.org")
+    (home-page "https://riskassessment.r-forge.r-project.org")
     (synopsis "Fitting a parametric distribution from data")
     (description
      "This package extends the @code{fitdistr} function of the MASS package
@@ -6155,13 +6520,13 @@ available in a vignette.")
 (define-public r-progressr
   (package
     (name "r-progressr")
-    (version "0.12.0")
+    (version "0.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "progressr" version))
        (sha256
-        (base32 "0nahvfcnx45n0q24r4j9cjqmmgh302ra3207izs6fzfda7sqn25q"))))
+        (base32 "1qd4yn6hhqxjpd7ckkrrqcpmx9ha01fy1y8gmldikk70vp53vyqg"))))
     (properties `((upstream-name . "progressr")))
     (build-system r-build-system)
     (propagated-inputs
@@ -6200,6 +6565,30 @@ these progress updates.")
 variable models.")
     (license license:gpl3)))
 
+(define-public r-drat
+  (package
+    (name "r-drat")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "drat" version))
+       (sha256
+        (base32 "191yxlj9jccakmz27g7n9izfcy19kj3fgnw4w6zl9iq66787qpm6"))))
+    (properties `((upstream-name . "drat")))
+    (build-system r-build-system)
+    (native-inputs (list r-simplermarkdown))
+    (home-page "https://github.com/eddelbuettel/drat")
+    (synopsis "Drat R archive template")
+    (description
+     "This package helps you with creation and use of R repositories via
+helper functions to insert packages into a repository, and to add repository
+information to the current R session.  Two primary types of repositories are
+supported: gh-pages at GitHub, as well as local repositories on either the
+same machine or a local network.  Drat is a recursive acronym: Drat R Archive
+Template.")
+    (license license:gpl2+)))
+
 (define-public r-drr
   (package
     (name "r-drr")
@@ -6272,13 +6661,13 @@ methods.")
 (define-public r-timechange
   (package
     (name "r-timechange")
-    (version "0.1.1")
+    (version "0.2.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "timechange" version))
               (sha256
                (base32
-                "0w3zbmzhg3zr5d9aa83kmr6gyhk75l7jysa7zs0pnz9x4ffr20w5"))))
+                "1wgpab9dvmvkfb1p1arj0knb8qal9hazbhx5jkpxl8r10l420q1x"))))
     (properties `((upstream-name . "timechange")))
     (build-system r-build-system)
     (propagated-inputs (list r-cpp11))
@@ -6393,14 +6782,14 @@ to access PostgreSQL database systems.")
 (define-public r-rpostgres
   (package
     (name "r-rpostgres")
-    (version "1.4.4")
+    (version "1.4.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RPostgres" version))
        (sha256
         (base32
-         "1z6diaq4kwinl97d1v9cb96j8mrkj2s2v4ml1vykgy1jqi40dk69"))))
+         "15y732ylnq1h1hw16nh1ichnygh3l76h23m2893avpaipa689zvh"))))
     (properties `((upstream-name . "RPostgres")))
     (build-system r-build-system)
     (inputs (list postgresql))
@@ -6435,7 +6824,7 @@ interface to @code{PostgreSQL}, a relational database.")
          "1d34m2nyk7m6j2dci69bhy5mlw479xax1517j7f14pq7vhpsm9l1"))))
     (build-system r-build-system)
     (propagated-inputs (list r-lpsolve))
-    (home-page "http://linprog.r-forge.r-project.org/")
+    (home-page "https://linprog.r-forge.r-project.org/")
     (synopsis "Linear programming and optimization")
     (description
      "This package can be used to solve Linear Programming / Linear
@@ -6445,18 +6834,18 @@ Optimization problems by using the simplex algorithm.")
 (define-public r-geometry
   (package
     (name "r-geometry")
-    (version "0.4.6.1")
+    (version "0.4.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "geometry" version))
        (sha256
         (base32
-         "0wplszaxi6phxffp3zww5alwnfbh9521qi43h65w057lrm1pmj2j"))))
+         "0fq1sbjlc02idfsnvily7hgi6zgjvrjh7c57wz166k8vyl2l484n"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-magic r-linprog r-lpsolve r-rcpp r-rcppprogress))
-    (home-page "http://geometry.r-forge.r-project.org/")
+    (home-page "https://geometry.r-forge.r-project.org/")
     (synopsis "Mesh generator and surface tessellator")
     (description
      "This package makes the qhull library available in R, in a similar manner
@@ -6634,14 +7023,14 @@ by base R methods related to model fitting.")
 (define-public r-broom
   (package
     (name "r-broom")
-    (version "1.0.2")
+    (version "1.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "broom" version))
        (sha256
         (base32
-         "13hj4y3ajrn7x8hvirp2vfh1c8j2pdrz3dnxc5f0dr7jyfhp4dcy"))))
+         "0m8akaj72kfvp7wmfp52dx09pfigb9w0knl55bfj8cg0kq6g3cq6"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-backports
@@ -6672,14 +7061,14 @@ provides a one-row summary of model-level statistics.")
 (define-public r-recipes
   (package
     (name "r-recipes")
-    (version "1.0.3")
+    (version "1.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "recipes" version))
        (sha256
         (base32
-         "0pi7j1jj5dmc5kzx6zkm691xya7dw4fn8c8nb2x3gs8mp14spzhg"))))
+         "16bf9d9kvhvgcs603zz075hwjrzjd81g14p8cp5rs0z4bnrdrcj2"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
@@ -6743,17 +7132,17 @@ for certain use cases.")
 (define-public r-ggrepel
   (package
     (name "r-ggrepel")
-    (version "0.9.2")
+    (version "0.9.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggrepel" version))
        (sha256
         (base32
-         "123lh86qs7w1i3v8i1a08jxlwx4sy32bpznyclm8wlkph728hc0a"))))
+         "0p00kb1x3q0krk5g8mmwqknnjlsznqs4i7mlfq1dp17fxpia1sxr"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-ggplot2 r-rcpp r-rlang r-scales))
+     (list r-ggplot2 r-rcpp r-rlang r-scales r-withr))
     (native-inputs
      (list r-knitr)) ; for vignettes
     (home-page "https://github.com/slowkow/ggrepel")
@@ -7192,13 +7581,13 @@ and density estimation")
 (define-public r-smurf
   (package
     (name "r-smurf")
-    (version "1.1.3")
+    (version "1.1.4")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "smurf" version))
               (sha256
                (base32
-                "0n99dzsb17r0a6d8nkijfg6rdvvc2g4pard2dnmyjq0p69j3f3gb"))))
+                "09a56ayqnnal1h5xxnh4pcn0zyi1kg2fj40y872n4jcnbl8xcvbi"))))
     (properties `((upstream-name . "smurf")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7375,14 +7764,14 @@ modeling for empirical income distributions.")
 (define-public r-vcd
   (package
     (name "r-vcd")
-    (version "1.4-10")
+    (version "1.4-11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vcd" version))
        (sha256
         (base32
-         "0nxkl1x39xf8l0apgvlbr30i8lasix7hyyc93g6514r8z8m1k23i"))))
+         "0ch9ks25ab4h4fh4y267s0psvc4ndyaplk8ddva2j54yd1ayhm3s"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-colorspace r-lmtest r-mass))
@@ -7488,7 +7877,7 @@ phylogenies and ancestral character states.")
          "0vc2is1hf1g0sw92kzl8mddck264qwiqgm5q2wkcwwz65fss7mkf"))))
     (build-system r-build-system)
     (propagated-inputs (list r-proxy))
-    (home-page "http://dtw.r-forge.r-project.org/")
+    (home-page "https://dtw.r-forge.r-project.org/")
     (synopsis "Dynamic Time Warping Algorithms")
     (description "This package provides a comprehensive implementation of
 @dfn{dynamic time warping} (DTW) algorithms in R.  DTW computes the
@@ -7608,14 +7997,14 @@ multivariate function estimation using smoothing splines.")
 (define-public r-cli
   (package
     (name "r-cli")
-    (version "3.5.0")
+    (version "3.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cli" version))
        (sha256
         (base32
-         "1p3gzq30f7hpr3v2s555z18r0y57zq2h03kijv7rl48lqzbnrjwc"))))
+         "15mqi8cacj7x588f1a7x805lwqbga2ha62k79qyxahrhh0qq21xn"))))
     (build-system r-build-system)
     (home-page "https://github.com/r-lib/cli#readme")
     (synopsis "Helpers for developing command line interfaces")
@@ -7764,14 +8153,14 @@ operations and statistical functions are provided.")
 (define-public r-tsp
   (package
     (name "r-tsp")
-    (version "1.2-1")
+    (version "1.2-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TSP" version))
        (sha256
         (base32
-         "1pa6pb4qrh2iybpjzjiny6hshj0shjdm0pxqnidcrg5hyfzzxd9b"))))
+         "08x6kb5nlajlbndzf7mn59gfg0xv6m0pql6jm76g037w4f7qlpca"))))
     (properties `((upstream-name . "TSP")))
     (build-system r-build-system)
     (propagated-inputs (list r-foreach))
@@ -7882,13 +8271,13 @@ iVAT).")
 (define-public r-xfun
   (package
     (name "r-xfun")
-    (version "0.36")
+    (version "0.37")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xfun" version))
        (sha256
-        (base32 "1vk930bn7rp2qp8yvmd9d3lgi10rgf20n62jr3lfwi6hf7jhs5x8"))))
+        (base32 "1yg1b21nwpnggb498z0j3lp11w6fwni7q7rd88fnm8xfnbq9yq9v"))))
     (build-system r-build-system)
     ;; knitr itself depends on xfun
     #;
@@ -7904,14 +8293,14 @@ packages maintained by Yihui Xie.")
 (define-public r-utf8
   (package
     (name "r-utf8")
-    (version "1.2.2")
+    (version "1.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "utf8" version))
        (sha256
         (base32
-         "1x6qg19z4qih9lk3mvnmx0vailm1khp5lylw4hlwz6rssj3yw6m7"))))
+         "0iv3ppy7sddzl4sm3qlghpc64k6zx5j0jzcia8xx8jhzb638da60"))))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr r-rmarkdown)) ; for vignettes
@@ -7969,14 +8358,14 @@ estimated from a given sample.")
 (define-public r-vctrs
   (package
     (name "r-vctrs")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vctrs" version))
        (sha256
         (base32
-         "01yv85rjpn9cz4473m768awrcaif51ffjh29p097c7pj2zvq4ya9"))))
+         "0iy0v00vhb6ldgw8g109wacpcxh1g9ks3npzaqzy4ccv7cj11gvn"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli r-glue r-lifecycle r-rlang))
@@ -8098,14 +8487,14 @@ their own grammars and easily expose them in R packages.")
 (define-public r-tinytex
   (package
     (name "r-tinytex")
-    (version "0.43")
+    (version "0.44")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tinytex" version))
        (sha256
         (base32
-         "01183i6z6jyyqmmxri3xmscn7k6hswi2q7r0b5ix0s7pd1cz57jq"))))
+         "03k26cm5chlysmi416zd506asv0gbmxs5i0j1fc0ygsrfh94r8dg"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-xfun))
@@ -8154,17 +8543,43 @@ features:
 ")
     (license license:gpl3)))
 
+(define-public r-n2r
+  (package
+    (name "r-n2r")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "N2R" version))
+       (sha256
+        (base32 "12bv7xx6j6222qgpv6g61i68017fz0x6fjg9a9k5yhgw3zk05hpk"))))
+    (properties `((upstream-name . "N2R")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-matrix
+           r-rcpp
+           r-rcppeigen
+           r-rcppspdlog))
+    (home-page "https://github.com/kharchenkolab/N2R")
+    (synopsis "Fast and scalable approximate k-Nearest Neighbor search methods")
+    (description
+     "This package implements methods to perform fast approximate K-nearest
+neighbor search on the input matrix.  The algorithm is based on the N2
+implementation of an approximate nearest neighbor search using hierarchical
+@acronym{NSW, Navigable Small World} graphs.")
+    (license license:asl2.0)))
+
 (define-public r-network
   (package
     (name "r-network")
-    (version "1.18.0")
+    (version "1.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "network" version))
        (sha256
         (base32
-         "0nyf8i94lnqm4gfjz1szbwvl4c438xg3rjdkqr18fz68fh0v3x2r"))))
+         "0hyj7h0z6mvf0jq0fb5z9nny4c71pwqjl7w0z864in3754sp03f8"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-magrittr r-statnet-common r-tibble))
@@ -8226,14 +8641,14 @@ vectors.")
 (define-public r-statnet-common
   (package
     (name "r-statnet-common")
-    (version "4.7.0")
+    (version "4.8.0")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "statnet.common" version))
         (sha256
           (base32
-            "1cx1h1yzs8jjxk10y2h0wl69caspzgx5wdqp36dp4sxm0sk335xn"))))
+            "1w26g7nzvmawm8jqd0hsjr8lz1jr4l565wzcbwqwpyvk0q9rkyfy"))))
     (properties
       `((upstream-name . "statnet.common")))
     (build-system r-build-system)
@@ -8248,17 +8663,17 @@ software developed by the Statnet Project.")
 (define-public r-statcheck
   (package
     (name "r-statcheck")
-    (version "1.3.0")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "statcheck" version))
        (sha256
         (base32
-         "0ivybdcrymlsfv6pg6p5bv70qdvgxf2vgp0kf4r0pf2fcvav1mcp"))))
+         "1hibrynbgsym4hma8isby8kwb8gab9d4bx7m43qj4zayrl6b8scx"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-ggplot2 r-plyr r-rmarkdown))
+     (list r-ggplot2 r-plyr r-rlang 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
@@ -8270,14 +8685,14 @@ detect possible inconsistencies.")
 (define-public r-sna
   (package
     (name "r-sna")
-    (version "2.7")
+    (version "2.7-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sna" version))
        (sha256
         (base32
-         "0ka319s1w857fj28ja1i1ljgv2h6ji4d69riqy9pwhvvghsa83s4"))))
+         "1qqaazcc8x925bwa9yllwyv98ddpdqgdq026h0ss6vsvq4bz5nk0"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-network r-statnet-common))
@@ -8683,14 +9098,14 @@ financial trading strategies.")
 (define-public r-tseries
   (package
     (name "r-tseries")
-    (version "0.10-52")
+    (version "0.10-53")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tseries" version))
        (sha256
         (base32
-         "0icgmng0dzvfkkn6dam74wvlz8g0cy46wkw57f5lpd5kxpdwi6ck"))))
+         "0mnazjzi9pldzlzjwgrfk0s3f7ykjgbj5gzcpfz2nx92s3k8wf7c"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-quadprog r-quantmod r-zoo))
@@ -8874,14 +9289,14 @@ applied econometric analysis.")
 (define-public r-cubature
   (package
     (name "r-cubature")
-    (version "2.0.4.5")
+    (version "2.0.4.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cubature" version))
        (sha256
         (base32
-         "08whkhvn218089r930spn97m91vv1njgh2amksia8l3rbf7127x8"))))
+         "0nprx74mcsw4zz89gc3c53nw2iyyqalfyh7xfda83xlvpv19s31k"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-rcpp))
@@ -9371,14 +9786,14 @@ local smoothers and many more.")
 (define-public r-radiant-data
   (package
     (name "r-radiant-data")
-    (version "1.4.5")
+    (version "1.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "radiant.data" version))
        (sha256
         (base32
-         "1vas0bkpngwxybmpdcaimha2r008prnli4b3lgjbjfkzpgm966d1"))
+         "1q6v7pkqk8rbxrmbnyj9drqb0p2rk8v4d3fxw1gqmqhzd6qp4yab"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -9496,6 +9911,67 @@ filtering functions, resampling routines, and visualization of filter models.
 It also includes interpolation functions.")
     (license license:gpl2)))
 
+(define-public r-simplermarkdown
+  (package
+    (name "r-simplermarkdown")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "simplermarkdown" version))
+       (sha256
+        (base32 "069pgx5m22rdqa21lyn5zqm9ym3g7w6z1d2wjwms8b1f2cp6266g"))))
+    (properties `((upstream-name . "simplermarkdown")))
+    (build-system r-build-system)
+    (propagated-inputs
+     ;; We cannot patch references to pandoc because the patched files are
+     ;; compiled to an opaque rdb/rdx pair.  "guix gc" would not be able to
+     ;; find the patched references in those files.
+     (list pandoc
+           r-rjson))
+    (home-page "https://github.com/djvanderlaan/simplermarkdown")
+    (synopsis "Simple engine for generating reports using R")
+    (description
+     "This package runs R-code present in a pandoc markdown file and includes
+the resulting output in the resulting markdown file.  This file can then be
+converted into any of the output formats supported by pandoc.  The package can
+also be used as an engine for writing package vignettes.")
+    (license license:gpl3+)))
+
+(define-public r-sitar
+  (package
+    (name "r-sitar")
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sitar" version))
+       (sha256
+        (base32 "0lhwbbpq6anqrk3818xw3nrl63bj3vwgsmxad0dpl8y50rkcc4cs"))))
+    (properties `((upstream-name . "sitar")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dplyr
+           r-forcats
+           r-ggplot2
+           r-glue
+           r-magrittr
+           r-nlme
+           r-purrr
+           r-rlang
+           r-rsample
+           r-tibble
+           r-tidyr))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/statist7/sitar")
+    (synopsis "Super imposition by translation and rotation growth curve analysis")
+    (description
+     "This package provides functions for fitting and plotting @acronym{SITAR, Super
+Imposition by Translation And Rotation} growth curve models.  SITAR is a shape-
+invariant model with a regression B-spline mean curve and subject-specific random
+effects on both the measurement and age scales.")
+    (license license:gpl2+)))
+
 (define-public r-gsubfn
   (package
     (name "r-gsubfn")
@@ -9931,14 +10407,14 @@ additional external tools on any platform.")
 (define-public r-openxlsx
   (package
     (name "r-openxlsx")
-    (version "4.2.5.1")
+    (version "4.2.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openxlsx" version))
        (sha256
         (base32
-         "1j2516plvlrp7l0mw7xqjhjjcidfdnfsybdhi2bx3n0910w29lk4"))))
+         "0rwvzhk2brhbf1cdpg5jmwiwx5jhr9ybzvnhw0pg4bl3wpkqjw7f"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-rcpp r-stringi r-zip))
@@ -10090,13 +10566,13 @@ using the @code{snow} package.")
 (define-public r-fstcore
   (package
     (name "r-fstcore")
-    (version "0.9.12")
+    (version "0.9.14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fstcore" version))
        (sha256
-        (base32 "1a5m68n2dqhi3r8wf5jwg4vjvl550c7wypcf5j0xmkvl836yg1lg"))))
+        (base32 "0mhk4l86iypg86l0jjs7szxllcy10h4rh5qy2gsmpmiv003gm3nh"))))
     (properties `((upstream-name . "fstcore")))
     (build-system r-build-system)
     (propagated-inputs (list r-rcpp))
@@ -10124,7 +10600,7 @@ stored data and compression with the LZ4 and ZSTD compressors.")
     (properties `((upstream-name . "fst")))
     (build-system r-build-system)
     (propagated-inputs (list r-fstcore r-rcpp))
-    (home-page "http://www.fstpackage.org")
+    (home-page "https://www.fstpackage.org")
     (synopsis "Fast serialization of data frames")
     (description
      "The fst package for R provides a fast, easy and flexible way to
@@ -10604,14 +11080,14 @@ always locate the files relative to your project root.")
 (define-public r-reticulate
   (package
     (name "r-reticulate")
-    (version "1.27")
+    (version "1.28")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "reticulate" version))
        (sha256
         (base32
-         "19k96g43ll9zp72g9kmf9gg7k9cwwpyxzf2nd6fvx5jal5bq8mlx"))))
+         "0vsia6rcr4nlvzpnpwy9izhlmrl65g62yx9n97qkzaps33nrk8jq"))))
     (build-system r-build-system)
     (arguments
      (list
@@ -10645,14 +11121,14 @@ Python to R they are converted back to R types.")
 (define-public r-bibtex
   (package
     (name "r-bibtex")
-    (version "0.5.0")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bibtex" version))
        (sha256
         (base32
-         "0rwinwj0kw2872q2whhk03ianl9lcgs6dlhqzm513wj3bgpb90gc"))))
+         "1l9y945qmpla68rx6dnaxc83vmvkw26cw4zzfgfsvi36wsja1hgk"))))
     (build-system r-build-system)
     (propagated-inputs (list r-backports))
     (home-page "https://github.com/romainfrancois/bibtex")
@@ -10797,14 +11273,14 @@ and adds the annotation to the plot.")
 (define-public r-rstatix
   (package
     (name "r-rstatix")
-    (version "0.7.1")
+    (version "0.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rstatix" version))
        (sha256
         (base32
-         "0c001w1mj8jw7gzmix90wzzb9kj45q173mzl7pmvykm77zpn61ak"))))
+         "1891a976k2qjrh1vkzfg8icxblxa978wbazg7mqq8pcw3nmzbip0"))))
     (properties `((upstream-name . "rstatix")))
     (build-system r-build-system)
     (propagated-inputs
@@ -10993,14 +11469,14 @@ steps and provides ggplot2-based elegant data visualization.")
 (define-public r-fansi
   (package
     (name "r-fansi")
-    (version "1.0.3")
+    (version "1.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fansi" version))
        (sha256
         (base32
-         "0sn0kflgcn2qrrv646pzqylm02cx8l5ws473ppmvla4xihyvi9w6"))))
+         "17y4m4yy8d6j6rlql2bpigcyn6yfv2g2aaaj96xjp4j0di722qri"))))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr)) ; for vignettes
@@ -11035,14 +11511,14 @@ results to the user.")
 (define-public r-hdf5r
   (package
     (name "r-hdf5r")
-    (version "1.3.7")
+    (version "1.3.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hdf5r" version))
        (sha256
         (base32
-         "0nr9iywl2z7hrydvq5z61jvx6ls8wg72lzpr875p1jfi7s2052kf"))))
+         "0arhs9z3rhqkb3pkhdgf1kgyhzrgvrrfjj4phijpji2przi82cmm"))))
     (build-system r-build-system)
     (inputs
      (list hdf5 zlib))
@@ -11203,7 +11679,7 @@ functions.")
      (list jags))
     (native-inputs
      (list pkg-config))
-    (home-page "http://mcmc-jags.sourceforge.net")
+    (home-page "https://mcmc-jags.sourceforge.net")
     (synopsis "Bayesian graphical models using MCMC")
     (description
      "This package provides an R interface to the JAGS MCMC library.  JAGS is
@@ -11214,14 +11690,14 @@ hierarchical models using Markov Chain Monte Carlo (MCMC) simulation.")
 (define-public r-rbibutils
   (package
     (name "r-rbibutils")
-    (version "2.2.11")
+    (version "2.2.13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rbibutils" version))
        (sha256
         (base32
-         "10g3fv8ninihjldhvh00yrp260dczhz3q519000jm3wp5w47b945"))))
+         "1hpg76iqnjji9k6cwqvgiybscl7ynbqml14k1f1x26hrpxh5q8xc"))))
     (properties `((upstream-name . "rbibutils")))
     (build-system r-build-system)
     (home-page "https://geobosh.github.io/rbibutils/")
@@ -11262,14 +11738,14 @@ references and Rd files.")
 (define-public r-officer
   (package
     (name "r-officer")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "officer" version))
        (sha256
         (base32
-         "1r885h8ma2py3idxkki2bnsbcimrw36qd6km2bhyhlav79n7bh4w"))))
+         "1wpbn37r16si2vqzsnv93435f2hir7lkxl2qqvp4g0l0ikpkicxw"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-openssl r-r6 r-uuid r-xml2 r-zip))
@@ -11498,14 +11974,14 @@ Decomposition in R (Beaton et al 2014) <doi:10.1016/j.csda.2013.11.006>.")
 (define-public r-insight
   (package
     (name "r-insight")
-    (version "0.18.8")
+    (version "0.19.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "insight" version))
        (sha256
         (base32
-         "01bm7w8f80i550gwv41kakaxp0d5a2pqa2s3ihz36snkczmdlapm"))))
+         "0990jbcsv168j7kbbg91jk8qdv9vph98y5snpb7i4v5q9qwkvdp7"))))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr))
@@ -11634,14 +12110,14 @@ functions.")
 (define-public r-flextable
   (package
     (name "r-flextable")
-    (version "0.8.3")
+    (version "0.8.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "flextable" version))
        (sha256
         (base32
-         "0fqc0zq1w7fdnql2m96g0rpichfpwrhyinnld29ddaw0d742gfj5"))))
+         "1c4xa4rg04ixqqim9sd9x2yj7805l8bvz292n9n0vm0sg959m9dn"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-base64enc
@@ -11689,14 +12165,14 @@ libxlsxwriter.")
 (define-public r-biasedurn
   (package
     (name "r-biasedurn")
-    (version "2.0.8")
+    (version "2.0.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "BiasedUrn" version))
        (sha256
         (base32
-         "0mmq8zf52p6y76nqm0fcvvg8bdlrfl12mlfr9fznz9zvm26pypi0"))))
+         "02bb81x1hfvhm6qlcvp88bdpm1fhqak9cjbqz1r7fhg2qfxjpims"))))
     (properties `((upstream-name . "BiasedUrn")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/BiasedUrn/")
@@ -11914,14 +12390,14 @@ the work.")
 (define-public r-doby
   (package
     (name "r-doby")
-    (version "4.6.15")
+    (version "4.6.16")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "doBy" version))
        (sha256
         (base32
-         "14asz3bpyvxakvpap2aajk6f5j2d3d6vrvrgnlixg5q6gdbh465m"))))
+         "1rxvxhb572n29mbvkh6xmi7cnwc6c8g2xzw1wp10nfr9gnspx4ym"))))
     (properties `((upstream-name . "doBy")))
     (build-system r-build-system)
     (propagated-inputs
@@ -12324,7 +12800,7 @@ through permutation testing.")
      (list r-igraph r-network))
     (native-inputs
      (list r-knitr))
-    (home-page "http://mbojan.github.io/intergraph")
+    (home-page "https://mbojan.github.io/intergraph")
     (synopsis "Coercion routines for network data objects")
     (description
      "Functions implemented in this package allow coercing (i.e. convert)
@@ -12529,14 +13005,14 @@ repeated measures data, respectively.")
 (define-public r-gam
   (package
     (name "r-gam")
-    (version "1.22")
+    (version "1.22-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gam" version))
        (sha256
         (base32
-         "0gyrg73f63ccars1639n0gv6cnh8ixp7p7lgdxb2yjl240lk0c9i"))))
+         "1h84klxs7wbksn9hsqdspmska9q5pmy6q71fmwm4bcmdrqixr8gv"))))
     (properties `((upstream-name . "gam")))
     (build-system r-build-system)
     (propagated-inputs
@@ -12674,7 +13150,7 @@ data with multiple data types.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-kernsmooth))
-    (home-page "http://qualV.R-Forge.R-Project.org/")
+    (home-page "https://qualV.R-Forge.R-Project.org/")
     (synopsis "Qualitative Validation Methods")
     (description
      "This package provides qualitative methods for the validation of dynamic
@@ -12735,7 +13211,7 @@ subsequence} (LCS) using a dynamic programming algorithm.")
            r-vctrs))
     (native-inputs
      (list r-knitr))
-    (home-page "http://larmarange.github.io/labelled/")
+    (home-page "https://larmarange.github.io/labelled/")
     (synopsis "Manipulating labelled data")
     (description
      "This package provides useful functions to deal with the
@@ -12799,14 +13275,14 @@ used to teach mathematics, statistics, computation and modeling.")
 (define-public r-raster
   (package
     (name "r-raster")
-    (version "3.6-13")
+    (version "3.6-14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "raster" version))
        (sha256
         (base32
-         "035hb1063lrlcs3l5aiccminax228ji0363hijmnxkvl7fsydxp1"))))
+         "02iv1lddplg49lak623w6zmjnbhrbqcvarc5rb7qizsp1aqq44q3"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-rcpp r-sp r-terra))
@@ -13220,13 +13696,13 @@ emission distributions.")
 (define-public r-nleqslv
   (package
     (name "r-nleqslv")
-    (version "3.3.3")
+    (version "3.3.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "nleqslv" version))
        (sha256
-        (base32 "0cy65bqkmnnr8v0x1cag84caxwdxyr0yw4w443apxzfxjp7dyiif"))))
+        (base32 "1kqgjgrid0s4f5rr7kcmw2h1zkb5vfvl2nnzrvc5s5fdbd9fg0r7"))))
     (build-system r-build-system)
     (native-inputs (list gfortran))
     (home-page "https://cran.r-project.org/web/packages/nleqslv/")
@@ -13242,13 +13718,13 @@ singular or ill-conditioned Jacobian.")
 (define-public r-phyclust
   (package
     (name "r-phyclust")
-    (version "0.1-32")
+    (version "0.1-33")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "phyclust" version))
               (sha256
                (base32
-                "1ga2pzksp97psqbl484fikfnr4bl3bgyys86wb3ya904xxwghy6c"))))
+                "04x4ymqnmc20pns89i4zs2yp75vchdgjszsinnpddjiv3446cy1q"))))
     (properties `((upstream-name . "phyclust")))
     (build-system r-build-system)
     (propagated-inputs (list r-ape))
@@ -13452,7 +13928,7 @@ console, resulting in an interactive editing environment.")
            r-mitools
            r-numderiv
            r-survival))
-    (home-page "http://r-survey.r-forge.r-project.org/survey/")
+    (home-page "https://r-survey.r-forge.r-project.org/survey/")
     (synopsis "Analysis of complex survey samples")
     (description
      "This package provides tools for the analysis of complex survey samples.
@@ -13871,14 +14347,14 @@ the differences were not significantly different.")
 (define-public r-emmeans
   (package
     (name "r-emmeans")
-    (version "1.8.3")
+    (version "1.8.4-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "emmeans" version))
        (sha256
         (base32
-         "004fd6kzky44xixd87q2nl1sn37krmqfas5gsylbc1cbrwnjzxlz"))))
+         "12ap4hbr354qzn1cpjj7596vssxvs0in6yc66805nj1h8w5xj3y6"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-estimability r-mvtnorm r-numderiv))
@@ -13953,7 +14429,7 @@ and permutation inference in the framework of Strasser and Weber (1999).")
            r-multcomp
            r-mvtnorm
            r-survival))
-    (home-page "http://coin.r-forge.r-project.org")
+    (home-page "https://coin.r-forge.r-project.org")
     (synopsis "Conditional inference procedures in a permutation test framework")
     (description
      "This package provides conditional inference procedures for the general
@@ -14000,14 +14476,14 @@ Bayesian modeling.")
 (define-public r-tmb
   (package
     (name "r-tmb")
-    (version "1.9.1")
+    (version "1.9.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TMB" version))
        (sha256
         (base32
-         "03zv38gig31ir5gdhgw5j6j8xn1f4y91j2r87fv31gywmg1bhzl9"))))
+         "0kz5a3y6xcqz2ycxq6ff3jasc2hkvq2rxnpr618nng7k9gljc504"))))
     (properties `((upstream-name . "TMB")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14131,14 +14607,14 @@ ROPE percentage and pd).")
 (define-public r-performance
   (package
     (name "r-performance")
-    (version "0.10.1")
+    (version "0.10.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "performance" version))
        (sha256
         (base32
-         "1m2zzznfbla8qdm0kxbj5vp431kpygpi4d70042hkg1ly3fyg7pz"))))
+         "0r9x5pqf1asf0sy0255jv0d4cki4xd5sfp5rl9mldclykpswf022"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-bayestestr r-datawizard r-insight))
@@ -14157,14 +14633,14 @@ effects models and Bayesian models.")
 (define-public r-ggeffects
   (package
     (name "r-ggeffects")
-    (version "1.1.4")
+    (version "1.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggeffects" version))
        (sha256
         (base32
-         "1j3l5v00f3xx2pwwfg1z9y31h8qja88nx7lycwj1y55ry5i6drr1"))))
+         "0nygl4m79b1znaj8zkxbicfp0223gpmv75n0a5v3gsh5gyn6cmyp"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-insight))
@@ -14185,14 +14661,14 @@ results using @code{ggplot2}.")
 (define-public r-effectsize
   (package
     (name "r-effectsize")
-    (version "0.8.2")
+    (version "0.8.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "effectsize" version))
        (sha256
         (base32
-         "1ibkvvpkd4md73d53823wnwzk3iqi1k4vr99jkyiiybcn6mv5qkc"))))
+         "1db197w72zi2ln0xfivg1i35rqr9xfsn7py854fv12dipg3l1cfw"))))
     (properties `((upstream-name . "effectsize")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14208,6 +14684,27 @@ standardized parameters for a wide variety of models, allowing computation and
 conversion of indices such as Cohen's d, r, odds, etc.")
     (license license:gpl3)))
 
+(define-public r-effsize
+  (package
+    (name "r-effsize")
+    (version "0.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "effsize" version))
+              (sha256
+               (base32
+                "1m5ch2g77f4ldbxhzp2ls1pga8hq7ggkz1xs8a90h0s09rj0gd7w"))))
+    (properties `((upstream-name . "effsize")))
+    (build-system r-build-system)
+    (home-page "https://github.com/mtorchiano/effsize/")
+    (synopsis "Efficient effect size computation")
+    (description
+     "This package provides a collection of functions to compute the
+standardized effect sizes for experiments (Cohen d, Hedges g, Cliff delta,
+Vargha-Delaney A).  The computation algorithms have been optimized to allow
+efficient computation even with very large data sets.")
+    (license license:gpl2)))
+
 (define-public r-sjplot
   (package
     (name "r-sjplot")
@@ -14278,13 +14775,13 @@ back to file after modifications.")
 (define-public r-gillespiessa2
   (package
     (name "r-gillespiessa2")
-    (version "0.2.10")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "GillespieSSA2" version))
        (sha256
-        (base32 "0mvsjkjkm27j1y6mfipmxjmki4hpxw0cnmcmls7i5pacnrxc1gcb"))))
+        (base32 "0wjz0fh9cwvaw6n7hs2lkh818jzbjl11ps5gxnjqizz8gfp9fr10"))))
     (properties `((upstream-name . "GillespieSSA2")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14360,14 +14857,14 @@ repositories.")
 (define-public r-fs
   (package
     (name "r-fs")
-    (version "1.5.2")
+    (version "1.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fs" version))
        (sha256
         (base32
-         "11qr3v0xn65vfhgcxl4l6yv48s4w0w3ldp3anpzc25vd3mwd3jim"))))
+         "0ck7swilvmkp5l81cdqn76rlbbgs90d4xirh186ccw62l8hy9wgs"))))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr))
@@ -14835,13 +15332,13 @@ and related methods.")
 (define-public r-rcppgsl
   (package
     (name "r-rcppgsl")
-    (version "0.3.12")
+    (version "0.3.13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RcppGSL" version))
        (sha256
-        (base32 "1qmrwd0zc0kwbhpwxg5s5fxp0pmfh0hwcli8vqh1q41997yyy14m"))))
+        (base32 "1rwkin79ppkdz1y9pghxx29vlyvs84bylvqblkhj8r4w26y76ppy"))))
     (properties `((upstream-name . "RcppGSL")))
     (build-system r-build-system)
     (propagated-inputs
@@ -15077,13 +15574,13 @@ address a bug.")
 (define-public r-rcppalgos
   (package
     (name "r-rcppalgos")
-    (version "2.6.0")
+    (version "2.7.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppAlgos" version))
               (sha256
                (base32
-                "11dvh0ba3chsqf3vw8g9h1754arxgwqryayavx3n6vm5daz2krqa"))))
+                "1js4h78szdfszphrbb0rh7hvr1hx0gp8lqxy67l4qvszcqj08wy1"))))
     (properties `((upstream-name . "RcppAlgos")))
     (build-system r-build-system)
     (inputs (list gmp))
@@ -15156,14 +15653,14 @@ package provides a minimal R interface by relying on the Rcpp package.")
 (define-public r-rcppparallel
   (package
     (name "r-rcppparallel")
-    (version "5.1.5")
+    (version "5.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RcppParallel" version))
        (sha256
         (base32
-         "1sn211ajlb1p12sglxqns175rg078yvww268m8cp0vvd7cmk55k3"))
+         "058g9yx4rscg4j7ghxllj5kkyxgwa7cdyxpivcysjmwpis30smmc"))
        (modules '((guix build utils)))
        (snippet
         '(delete-file-recursively "src/tbb/"))))
@@ -15237,14 +15734,14 @@ Bioconductor packages.")
 (define-public r-rgl
   (package
     (name "r-rgl")
-    (version "0.111.6")
+    (version "1.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgl" version))
        (sha256
         (base32
-         "1h6nbcnbl0knmc91923wfhghs58yjc84mhnmk2byd474lrgzxynd"))))
+         "1j1g1b1j6azhg944ddzzrxgynb2bfl14l5qz58n4mhvxrbx018w9"))))
     (build-system r-build-system)
     (native-inputs
      (list pkg-config
@@ -15570,7 +16067,7 @@ al. (2010) <DOI:10.1016/j.neuroimage.2010.04.241>, Tabelow and Polzehl (2011)
         (base32
          "082qj08kzyzwvjacwq0sl3xxdx6iz5hgx6q24jv1mnvx7z5xn5ry"))))
     (build-system r-build-system)
-    (home-page "http://minato.sip21c.org/msb/")
+    (home-page "https://minato.sip21c.org/msb/")
     (synopsis "Functions for medical statistics book with demographic data")
     (description
      "This package provides several utility functions for the book entitled
@@ -15602,14 +16099,14 @@ parametrizations of Nolan.")
 (define-public r-gsl
   (package
     (name "r-gsl")
-    (version "2.1-7.1")
+    (version "2.1-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gsl" version))
        (sha256
         (base32
-         "118rj9kjx9rzlynvhrly19qz3yxg8jzws35971ssgzrp5lwd367f"))))
+         "159d782nz7fqhgcj3fa79hlmkdrqnkd0ypgzcl71kgas92zhjdpk"))))
     (build-system r-build-system)
     (inputs
      (list gsl))
@@ -15716,13 +16213,13 @@ This package is part of the Rigorous Analytics bundle.")
 (define-public r-mritc
   (package
     (name "r-mritc")
-    (version "0.5-2")
+    (version "0.5-3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mritc" version))
               (sha256
                (base32
-                "07b1b2k1ka43ikj2mhwnazw3ig7w10bf759fimxpksvk5k6wanx2"))))
+                "1bpnm2qzq67dgjxsa4wxn51f4a4cxal5r6abgs3m7p5a9a16jmjp"))))
     (properties `((upstream-name . "mritc")))
     (build-system r-build-system)
     (propagated-inputs (list r-lattice r-misc3d r-oro-nifti))
@@ -15786,6 +16283,35 @@ value decompositions} (SVDs) on large sparse centered matrices (i.e. principal
 components).")
     (license license:gpl2)))
 
+(define-public r-som
+  (package
+    (name "r-som")
+    (version "0.3-5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "som" version))
+       (sha256
+        (base32 "1fbza1jxvwrkf5x3inkj36vshhkn7mz0ajqlxalbfmk6ngjw1x56"))))
+    (properties `((upstream-name . "som")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/package=som")
+    (synopsis "Self-organizing map")
+    (description
+     "This package implements a self-organizing map which has application in
+gene clustering.  It provides functions like:
+
+@itemize
+@item filtering data by certain floor, ceiling, max/min ratio, and max - min
+  difference;
+@item normalization of the data;
+@item get the average distortion measure;
+@item train a self-organizing map;
+@item summarize a som object;
+@item yeast cell cycle.
+@end itemize")
+    (license license:gpl3+)))
+
 (define-public r-fftwtools
   (package
     (name "r-fftwtools")
@@ -15861,19 +16387,19 @@ Processing.")
 (define-public r-tm
   (package
     (name "r-tm")
-    (version "0.7-10")
+    (version "0.7-11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tm" version))
        (sha256
         (base32
-         "15lxaqlgkl9chiz0aw05l55bvlh48jwdgplfl8f2d8xsaq4gmbvc"))))
+         "0hp7xamjmifd56qwsin5m0xng592wwxsbfxdz37n4k6zjf28paws"))))
     (properties `((upstream-name . "tm")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-bh r-nlp r-rcpp r-slam r-xml2))
-    (home-page "http://tm.r-forge.r-project.org/")
+    (home-page "https://tm.r-forge.r-project.org/")
     (synopsis "Text mining package")
     (description
      "This package provides a framework for text mining applications within R.")
@@ -16054,14 +16580,14 @@ giving it a description in the specific format.")
 (define-public r-sparsesvd
   (package
     (name "r-sparsesvd")
-    (version "0.2-1")
+    (version "0.2-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sparsesvd" version))
        (sha256
         (base32
-         "0yz0mgayxriyrz6bbrd41cck0s56b916xvyh13hw86gydd6kpl5k"))))
+         "0dnqjqypjwac8aqdqsqdgcd70lyrfv6idz8q2kzjiv1sxrlwqh5v"))))
     (build-system r-build-system)
     (propagated-inputs (list r-matrix))
     (home-page "http://tedlab.mit.edu/~dr/SVDLIBC/")
@@ -16234,7 +16760,7 @@ structure of any data type.")
         (base32
          "028fw61n61i79fhnaqx7gmdifdpbvp3yiaq9vvfrbv4k7i84r83i"))))
     (build-system r-build-system)
-    (home-page "http://strimmerlab.org/software/corpcor/")
+    (home-page "https://strimmerlab.org/software/corpcor/")
     (synopsis "Efficient estimation of covariance and (partial) correlation")
     (description
      "This package implements a James-Stein-type shrinkage estimator for the
@@ -16458,13 +16984,13 @@ useful for building large phylogenies using multiple markers.")
 (define-public r-rnexml
   (package
     (name "r-rnexml")
-    (version "2.4.9")
+    (version "2.4.11")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RNeXML" version))
               (sha256
                (base32
-                "180w7c8n4xcn3x7haymi1fl3fpnklqfgmaki6jkxpm3hdiffmbsd"))))
+                "0ipxdhfzccpqmnfrqdy8bizm80k2chhdlzg3p0dl05p8n35i6s94"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ape
@@ -16492,14 +17018,14 @@ and compatibility with @code{ape} objects.")
 (define-public r-rnifti
   (package
     (name "r-rnifti")
-    (version "1.4.3")
+    (version "1.4.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RNifti" version))
        (sha256
         (base32
-         "1w627brzag9laxsfrr1kxh07glycl8l1n5xf5frn8m0jzvrn3d50"))))
+         "0a26jdhgwnfk2ai4zrnqf65czmamqrj2gb6l9w83mfpyrm4shxx2"))))
     (properties `((upstream-name . "RNifti")))
     (build-system r-build-system)
     (inputs (list zlib))
@@ -16535,13 +17061,13 @@ creating color scales and calculating color distances.")
 (define-public r-ore
   (package
     (name "r-ore")
-    (version "1.7.2.1")
+    (version "1.7.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ore" version))
        (sha256
-        (base32 "104506x9x14bs8lfhydwpgdh4qws2vqkvyy6xrlrviqlll6qbjgg"))))
+        (base32 "0hlmr4p0ldizdv46myyhlki10qkjdgs44jxp9y61zqcdw360dz95"))))
     (build-system r-build-system)
     (home-page "https://github.com/jonclayden/ore")
     (synopsis "R interface to the Onigmo regular expression library")
@@ -16742,6 +17268,45 @@ order (univariate) isotonic regression and bivariate isotonic regression with
 linear order on both variables.")
     (license license:gpl2+)))
 
+(define-public r-chemometrics
+  (package
+    (name "r-chemometrics")
+    (version "1.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "chemometrics" version))
+       (sha256
+        (base32 "0shqns0n964pfwnd0q5sadglrlpgs4g5fbv45fsj9p37l4pq61dp"))))
+    (properties `((upstream-name . "chemometrics")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-class
+           r-e1071
+           r-lars
+           r-mass
+           r-mclust
+           r-nnet
+           r-pcapp
+           r-pls
+           r-robustbase
+           r-rpart
+           r-som))
+    (home-page "http://www.statistik.tuwien.ac.at/public/filz/")
+    (synopsis "Multivariate statistical analysis in Chemometrics")
+    (description
+     "Multivariate data analysis is the simultaneous observation of more than
+one characteristic.  In contrast to the analysis of univariate data, in this
+approach not only a single variable or the relation between two variables can
+be investigated, but the relations between many attributes can be considered.
+For the statistical analysis of chemical data one has to take into account the
+special structure of this type of data.  This package contains about 30
+functions, mostly for regression, classification and model evaluation and
+includes some data sets used in the R help examples.  It was designed as a R
+companion to the book \"Introduction to Multivariate Statistical Analysis in
+Chemometrics\" written by K. Varmuza and P. Filzmoser (2009).")
+    (license license:gpl3+)))
+
 (define-public r-chemometricswithr
   (package
     (name "r-chemometricswithr")
@@ -16888,14 +17453,14 @@ and manipulating sets of ontological terms.")
 (define-public r-gargle
   (package
     (name "r-gargle")
-    (version "1.2.1")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gargle" version))
        (sha256
         (base32
-         "087hlbqpwjj7jnsg1ax2b12nc0h4zfj070q5hjp6fca05z4f4rzk"))))
+         "02ldshm8phs1ls0djqfprv5yy8i50ijh16y7smkb61wrwd4zr3s2"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
@@ -16903,6 +17468,8 @@ and manipulating sets of ontological terms.")
            r-glue
            r-httr
            r-jsonlite
+           r-lifecycle
+           r-openssl
            r-rappdirs
            r-rlang
            r-rstudioapi
@@ -16955,14 +17522,14 @@ preparing, executing, and processing HTTP requests.")
 (define-public r-gmp
   (package
     (name "r-gmp")
-    (version "0.6-9")
+    (version "0.7-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gmp" version))
        (sha256
         (base32
-         "00zh0phr8axva2y2c10nla7n9mgh3wvwvsyyd3y43jpb3xim6lv6"))))
+         "1djxhc4v874asmrj8qy054779wsq499f5f2wc6vmr40qab33v1x6"))))
     (build-system r-build-system)
     (arguments
      '(#:phases
@@ -16982,14 +17549,14 @@ limitations\" using the GNU Multiple Precision library.")
 (define-public r-rmpfr
   (package
     (name "r-rmpfr")
-    (version "0.8-9")
+    (version "0.9-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rmpfr" version))
        (sha256
         (base32
-         "12mwvgyalzh4zf5d002fm1hpr3wwhiypy9ia6wy47ij9gns5mvng"))))
+         "0m4x4mndyvm374h2mnb3zs8hlbzafpzfqjpypr91h886dfs1vbyv"))))
     (properties `((upstream-name . "Rmpfr")))
     (build-system r-build-system)
     (inputs
@@ -16998,7 +17565,7 @@ limitations\" using the GNU Multiple Precision library.")
      (list r-gmp))
     (native-inputs
      (list pkg-config))
-    (home-page "http://rmpfr.r-forge.r-project.org/")
+    (home-page "https://rmpfr.r-forge.r-project.org/")
     (synopsis "R bindings to the MPFR library")
     (description
      "This package supports arithmetic (via S4 classes and methods) for
@@ -17529,7 +18096,7 @@ covariance functions for large data sets.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-fields r-maps))
-    (home-page "http://spatialextremes.r-forge.r-project.org/")
+    (home-page "https://spatialextremes.r-forge.r-project.org/")
     (synopsis "Modelling spatial extremes")
     (description
      "This package provides tools for the statistical modelling of spatial
@@ -17668,6 +18235,48 @@ hierarchic loggers, multiple handlers per logger, level based filtering, space
 handling in messages and custom formatting.")
     (license license:gpl3)))
 
+(define-public r-longdat
+  (package
+    (name "r-longdat")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "LongDat" version))
+              (sha256
+               (base32
+                "1sqfmdv5agyvlw1y3yiv8kxi1040gq75qj4ln1jgb9lsmhdlfpyd"))))
+    (properties `((upstream-name . "LongDat")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-bestnormalize
+                             r-car
+                             r-dplyr
+                             r-effsize
+                             r-emmeans
+                             r-ggplot2
+                             r-glmmtmb
+                             r-lme4
+                             r-magrittr
+                             r-mass
+                             r-patchwork
+                             r-reshape2
+                             r-rlang
+                             r-rstatix
+                             r-stringr
+                             r-tibble
+                             r-tidyr))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/CCY-dev/LongDat")
+    (synopsis
+     "Tool for covariate-sensitive longitudinal analysis on omics data")
+    (description
+     "This tool takes longitudinal dataset as input and analyzes if there is
+significant change of the features over time (a proxy for treatments), while
+detects and controls for covariates simultaneously.  LongDat is able to take
+in several data types as input, including count, proportion, binary, ordinal
+and continuous data.  The output table contains p values, effect sizes and
+covariates of each feature, making the downstream analysis easy.")
+    (license license:gpl2)))
+
 (define-public r-longitudinal
   (package
     (name "r-longitudinal")
@@ -17681,7 +18290,7 @@ handling in messages and custom formatting.")
          "046w3xbr535c5jyd68adv42a7limxp1mv57b5w6w673w707lmw2p"))))
     (build-system r-build-system)
     (propagated-inputs (list r-corpcor))
-    (home-page "http://strimmerlab.org/software/longitudinal/")
+    (home-page "https://strimmerlab.org/software/longitudinal/")
     (synopsis "Analysis of multiple time course data")
     (description
      "This package contains general data structures and functions for
@@ -17705,7 +18314,7 @@ dynamical correlation and dynamical covariance.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-corpcor r-fdrtool r-longitudinal))
-    (home-page "http://strimmerlab.org/software/genenet/")
+    (home-page "https://strimmerlab.org/software/genenet/")
     (synopsis "Modeling and inferring gene networks")
     (description
      "This package analyzes gene expression (time series) data with focus on
@@ -17832,14 +18441,14 @@ sampling.")
 (define-public r-protviz
   (package
     (name "r-protviz")
-    (version "0.7.3")
+    (version "0.7.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "protViz" version))
        (sha256
         (base32
-         "0f6jwzcqi0w37hvg3i5dlk0c3anpkqh54ibf94vaf17r8sykr4nw"))))
+         "18l4aw0fx47w9czw73lxh68aj4ljbfr3z39vakbbx6xp2llyw8b1"))))
     (properties `((upstream-name . "protViz")))
     (build-system r-build-system)
     (propagated-inputs (list r-rcpp))
@@ -18085,14 +18694,14 @@ them in distributed compute environments.")
 (define-public r-parallelly
   (package
     (name "r-parallelly")
-    (version "1.33.0")
+    (version "1.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "parallelly" version))
        (sha256
         (base32
-         "0ymrpcxp2fnk1fpfig0kd1q3whzh7sykgcl91k53c2w20v2wwfpw"))))
+         "1x5gk008813i9c2i7qdhpmlbq2xdgv5q47xcmc6lb8p475q9sqqi"))))
     (properties `((upstream-name . "parallelly")))
     (build-system r-build-system)
     (home-page "https://github.com/HenrikBengtsson/parallelly")
@@ -18113,14 +18722,14 @@ port-forwarding to your local computer.")
 (define-public r-future
   (package
     (name "r-future")
-    (version "1.30.0")
+    (version "1.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "future" version))
        (sha256
         (base32
-         "1njmgnq0qz7b9yvcp6351yz7ydz9hj8bnnaf1ys3md66v9mg1xf7"))))
+         "0anzvxw1r5nmsa69h5lmvx0ixc9khlp02ix19w06y1hkka2qznxj"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -18255,18 +18864,20 @@ heuristics.")
 (define-public r-dorng
   (package
     (name "r-dorng")
-    (version "1.8.3")
+    (version "1.8.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "doRNG" version))
        (sha256
         (base32
-         "1aqzy646c6aggscmwninr1hz0z4nkxibmrg1mm77p2jnf1lh914c"))))
+         "1qkxa3jxpnn5anhqycqcbk18kw87m9pl5m78q8d89ygihghascjh"))))
     (properties `((upstream-name . "doRNG")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-foreach r-iterators r-rngtools))
+    (native-inputs
+     (list r-knitr))
     (home-page "https://renozao.github.io/doRNG/")
     (synopsis "Generic reproducible parallel backend for foreach loops")
     (description
@@ -18497,7 +19108,7 @@ identifying outliers.")
     (propagated-inputs
      (list r-rcpp r-rcpparmadillo))
     (native-inputs (list r-knitr))
-    (home-page "http://www.perossi.org/home/bsm-1")
+    (home-page "https://www.perossi.org/home/bsm-1")
     (synopsis "Bayesian inference for marketing/micro-econometrics")
     (description
      "This package covers many important models used in marketing and
@@ -18567,14 +19178,14 @@ users of rARPACK are advised to switch to the RSpectra package.")
 (define-public r-compositions
   (package
     (name "r-compositions")
-    (version "2.0-4")
+    (version "2.0-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "compositions" version))
        (sha256
         (base32
-         "1bqg0qqzsf92q0jb7hdjycr54bwv8rk7ajhvxgch5yslyqxpm73v"))))
+         "0niccv8i3jrcjnjm7dygzhz6bfah9za6lswa669pfpgsycilpf51"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-bayesm r-mass r-robustbase r-tensora))
@@ -18793,14 +19404,14 @@ marginal histograms/boxplots/density plots to ggplot2 scatterplots.")
 (define-public r-minpack-lm
   (package
     (name "r-minpack-lm")
-    (version "1.2-2")
+    (version "1.2-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "minpack.lm" version))
        (sha256
         (base32
-         "11yz6hk2r33571d16kq01cb1x6sgdzi6jmksqlrm8mr84l95c2f7"))))
+         "1w7f9zhqjzayppbd5r6wmlkzlv72nvg74cdjajd2qfq2kxkh59xz"))))
     (properties `((upstream-name . "minpack.lm")))
     (build-system r-build-system)
     (native-inputs (list gfortran))
@@ -19023,14 +19634,14 @@ graphs.")
 (define-public r-pbdzmq
   (package
     (name "r-pbdzmq")
-    (version "0.3-8")
+    (version "0.3-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pbdZMQ" version))
        (sha256
         (base32
-         "0rala2aqyva4cjpih8xbqq1nxhwfgbkcdwb1c3h5jjp5dv7lrvgd"))))
+         "1dhg9sakfz4mivwvyfv5hnjrbi6gcd9cgis0dcgmh44q1a6j6cyh"))))
     (properties `((upstream-name . "pbdZMQ")))
     (build-system r-build-system)
     (inputs
@@ -19050,14 +19661,14 @@ compatible with @code{rzmq} are also provided.")
 (define-public r-repr
   (package
     (name "r-repr")
-    (version "1.1.4")
+    (version "1.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "repr" version))
        (sha256
         (base32
-         "0h3h14ybamcbwmm31ib66fx13v75vkzn4bn2v26n2h097sl9qybg"))))
+         "0gv72qydk4r070q3jcqakvfcm4r0n9zzzpl82s0w87iw6sdnqbix"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-base64enc r-htmltools r-jsonlite r-pillar))
@@ -19094,14 +19705,14 @@ running IRkernel session.")
 (define-public r-irkernel
   (package
     (name "r-irkernel")
-    (version "1.3.1")
+    (version "1.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "IRkernel" version))
        (sha256
         (base32
-         "03343ds7sprql1c6h41dibk40rc3225mzxca452ns967fyhy71ii"))))
+         "19i4wj5cb62n6j83nxgv500dcdzrf6rzwdy5v6fh7r93vjyxiip1"))))
     (properties `((upstream-name . "IRkernel")))
     (build-system r-build-system)
     (arguments
@@ -19375,14 +19986,14 @@ additional utilities for genomic regions processing.")
 (define-public r-sets
   (package
     (name "r-sets")
-    (version "1.0-21")
+    (version "1.0-22")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sets" version))
        (sha256
         (base32
-         "1h1a03b1850kh5hd3gxbspx2nxqxvk2gb0wm0s60b70qb6zg0csp"))))
+         "1ilyiw02gq2rzd5db1nlapxv1azyjdav6fl09zh5hfhin2k9mgvg"))))
     (properties `((upstream-name . "sets")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/sets")
@@ -19564,7 +20175,7 @@ barplots or heatmaps.")
      (list r-ade4 r-segmented))
     (inputs
      (list zlib))
-    (home-page "http://seqinr.r-forge.r-project.org/")
+    (home-page "https://seqinr.r-forge.r-project.org/")
     (synopsis "Biological sequences retrieval and analysis")
     (description
      "This package provides tools for exploratory data analysis and data
@@ -19748,14 +20359,14 @@ high-performance functions are provided here.")
 (define-public r-s2
   (package
     (name "r-s2")
-    (version "1.1.1")
+    (version "1.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "s2" version))
        (sha256
         (base32
-         "07c9f8ghfjqdjcw50by3y4j8nbsmmcwd4a3vpcwsxr4mvybckq0w"))))
+         "0mqb7jvjpbix9fq5ivcg630m5s5z2pyx8dmyiyvsajkg3i9kgclg"))))
     (properties `((upstream-name . "s2")))
     (build-system r-build-system)
     (arguments
@@ -19888,14 +20499,14 @@ spanning tree.")
 (define-public r-adegenet
   (package
     (name "r-adegenet")
-    (version "2.1.8")
+    (version "2.1.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "adegenet" version))
        (sha256
         (base32
-         "09ahgz1ddsdn30fmi5kimdcrcnw18ryqpjcixhyp4xz0xwz2rmw0"))))
+         "0qxig2jyj1q0a8pwpv5f5v5b4x4af8s9p1p0yc0msmyxq457hqmb"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ade4
@@ -20045,13 +20656,13 @@ lspec, polyclass, and polymars.")
 (define-public r-rms
   (package
     (name "r-rms")
-    (version "6.3-0")
+    (version "6.4-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rms" version))
        (sha256
-        (base32 "1yfk800q4mgmrjkh0hqjkiv907sr1bi1jaigrj8l6pmg1mkynhbc"))))
+        (base32 "1bmhg0q1lrzwhy9a7gljpxf82wkk4vi4ajrlc5p10kpk0bvjckyn"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cluster
@@ -20130,14 +20741,14 @@ include
 (define-public r-haplo-stats
   (package
     (name "r-haplo-stats")
-    (version "1.9.2")
+    (version "1.9.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "haplo.stats" version))
        (sha256
         (base32
-         "1397rxcqqz29yaf3f2gphg1jhmfw3wvvjvqk7cz01jdh3pihdh56"))))
+         "1nwxmx3v0085bdr14sr1n4wpipyp1bdq9qhx2gxmx9h3l02glkis"))))
     (properties `((upstream-name . "haplo.stats")))
     (build-system r-build-system)
     (propagated-inputs
@@ -20291,13 +20902,13 @@ SELECT or UPDATE queries to an end-point.")
 (define-public r-bookdown
   (package
     (name "r-bookdown")
-    (version "0.31")
+    (version "0.32")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "bookdown" version))
               (sha256
                (base32
-                "0rkapx3zz0vwggnrpk0ns8bpqsblkp08xpr0srz93c3kzlsjdiac"))))
+                "0vw15ahws4y1pb4va58j4d0xif9hnq7q2h57jany39wf2mx11ny6"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-htmltools
@@ -20346,13 +20957,13 @@ that accept short and long options.")
 (define-public r-osqp
   (package
     (name "r-osqp")
-    (version "0.6.0.7")
+    (version "0.6.0.8")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "osqp" version))
               (sha256
                (base32
-                "00w2hr0pagnvpsk84z99c7alhv7xvs9wpcmkzbcg3qs14g888rgf"))))
+                "15zd0byk8vy899hm7kd0hpx84hnr84ynai29mr7frraamr2l00ql"))))
     (properties `((upstream-name . "osqp")))
     (build-system r-build-system)
     (propagated-inputs (list r-matrix r-r6 r-rcpp))
@@ -20368,13 +20979,13 @@ multipliers.  See <arXiv:1711.08013> for details.")
 (define-public r-kernlab
   (package
     (name "r-kernlab")
-    (version "0.9-31")
+    (version "0.9-32")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "kernlab" version))
        (sha256
-        (base32 "12i7ffc1aacyy7bpjc0w60wwivn88wri8jz43h77irn5q5jwcnbk"))))
+        (base32 "1p3gbn9qgc6yqx9irkl8c23khvkx77jl96hk9hn4vsrx6i7g6kk5"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/kernlab")
     (synopsis "Kernel-based machine learning tools")
@@ -20578,14 +21189,14 @@ interaction search in high-dimensional data.")
 (define-public r-rttf2pt1
   (package
     (name "r-rttf2pt1")
-    (version "1.3.11")
+    (version "1.3.12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rttf2pt1" version))
        (sha256
         (base32
-         "1fbls9hy4s0hdszg449bpapx2mhknwiasvr15djf9f1hm0b2908p"))))
+         "10x580dnzddm9z045gya5ya01d10s9mpp0fy8ilrldlh74q7ljqb"))))
     (properties `((upstream-name . "Rttf2pt1")))
     (build-system r-build-system)
     (home-page "https://github.com/wch/Rttf2pt1")
@@ -20620,14 +21231,14 @@ interaction search in high-dimensional data.")
 (define-public r-extrafont
   (package
     (name "r-extrafont")
-    (version "0.18")
+    (version "0.19")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "extrafont" version))
        (sha256
         (base32
-         "0mx810mld67vb1w3wkl4fhpjmkq32lgpq5x1c0a9rf8li5wskrj4"))))
+         "13dbrlf54nbyfz3z2snz7x4m6rfnnhk2l8kkwpgcagzi5lar13sf"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-extrafontdb r-rttf2pt1))
@@ -21179,14 +21790,14 @@ microarrays.")
 (define-public r-rda
   (package
     (name "r-rda")
-    (version "1.0.2-2.1")
+    (version "1.2-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rda" version))
        (sha256
         (base32
-         "17ll0idnms4bcpbl65xnl8zfnwsk9ww0rg5z8qqh4ahk5qdab8zf"))))
+         "16mf76hlhii30f2m5xlwa4gv4a5ydnla2kz6ylcka4y9668ql0rp"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/rda/")
     (synopsis "Shrunken centroids regularized discriminant analysis")
@@ -21350,7 +21961,7 @@ repository.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-kernsmooth r-mass))
-    (home-page "http://mpm.r-forge.r-project.org")
+    (home-page "https://mpm.r-forge.r-project.org")
     (synopsis "Multivariate projection methods")
     (description
      "This is a package for exploratory graphical analysis of multivariate
@@ -21533,30 +22144,29 @@ interface for editing @code{ggplot2} theme elements.")
 (define-public r-flexdashboard
   (package
     (name "r-flexdashboard")
-    (version "0.6.0")
+    (version "0.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "flexdashboard" version))
        (sha256
         (base32
-         "0bvw2ca6xxscia4hvq505qvjf6zkgpsqv86f1s78aknzwr9jsikm"))
+         "1lxlai4s3qdg2w36xx61idn67zidz9n5mmbz72i0zvcpxr25v5xl"))
        (modules '((guix build utils)))
+       ;; Delete bundled minified JavaScript files
        (snippet
-        '(begin
-           ;; Delete bundled minified JavaScript files
-           (delete-file "inst/htmlwidgets/lib/raphael/raphael-2.1.4.min.js")
-           (delete-file "inst/www/sly/sly.min.js")
-           (delete-file "inst/www/stickytableheaders/jquery.stickytableheaders.min.js")
-           (delete-file "inst/www/prism/prism.js")
-           (delete-file "inst/www/featherlight/featherlight.min.js")))))
+        '(for-each delete-file
+                   '("inst/htmlwidgets/lib/raphael/raphael-2.1.4.min.js"
+                     "inst/www/featherlight/featherlight.min.js"
+                     "inst/www/prism/prism.js"
+                     "inst/www/sly/sly.min.js"
+                     "inst/www/stickytableheaders/jquery.stickytableheaders.min.js")))))
     (build-system r-build-system)
     (arguments
      `(#:modules ((guix build utils)
                   (guix build r-build-system)
                   (srfi srfi-1)
                   (srfi srfi-26)
-                  (ice-9 popen)
                   (ice-9 textual-ports))
        #:phases
        (modify-phases %standard-phases
@@ -21590,12 +22200,10 @@ interface for editing @code{ggplot2} theme elements.")
                          "www/featherlight/featherlight.min.js"))))
                  (lambda (sources targets)
                    (for-each (lambda (source target)
-                               (format #t "Processing ~a --> ~a~%"
+                               (format #true "Processing ~a --> ~a~%"
                                        source target)
-                               (let ((minified (open-pipe* OPEN_READ "uglifyjs" source)))
-                                 (call-with-output-file target
-                                   (lambda (port)
-                                     (dump-port minified port)))))
+                               (invoke "esbuild" source "--minify"
+                                       (string-append "--outfile=" target)))
                              sources targets)))))))))
     (propagated-inputs
      (list r-bslib
@@ -21608,7 +22216,7 @@ interface for editing @code{ggplot2} theme elements.")
            r-scales
            r-shiny))
     (native-inputs
-     `(("uglifyjs" ,node-uglify-js)
+     `(("uglifyjs" ,esbuild)
        ("js-raphael"
         ,(origin
            (method url-fetch)
@@ -21992,7 +22600,7 @@ Row} (CSR) format.")
            r-stringi))
     (native-inputs
      (list r-knitr))
-    (home-page "http://text2vec.org")
+    (home-page "https://text2vec.org")
     (synopsis "Text mining framework for R")
     (description
      "This package provides fast and memory-friendly tools for text
@@ -22109,6 +22717,49 @@ errors and possible semantic issues.  It supports on the fly checking of R
 code edited with @code{RStudio IDE}, @code{Emacs} and @code{Vim}.")
     (license license:expat)))
 
+(define-public r-sccore
+  (package
+    (name "r-sccore")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sccore" version))
+       (sha256
+        (base32 "12gm7pb6xbvf9kdsgl7ldw1c54ga9fgk99ps2kx2cq91q9m0ld4r"))))
+    (properties `((upstream-name . "sccore")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dplyr
+           r-ggplot2
+           r-ggrepel
+           r-igraph
+           r-irlba
+           r-magrittr
+           r-matrix
+           r-pbmcapply
+           r-proc
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppeigen
+           r-rcppprogress
+           r-rlang
+           r-scales
+           r-tibble
+           r-uwot
+           r-withr))
+    (home-page "https://github.com/kharchenkolab/sccore")
+    (synopsis "Core utilities for single-cell RNA-Seq")
+    (description
+     "This package implements core utilities for single-cell RNA-seq data analysis.
+Contained within are utility functions for working with @acronym{DE,
+differential expression} matrices and count matrices, a collection of
+functions for manipulating and plotting data via ggplot2, and functions to
+work with cell graphs and cell embeddings.  Graph-based methods include
+embedding kNN cell graphs into a UMAP, collapsing vertices of each cluster in
+the graph, and propagating graph labels.")
+    (license license:gpl3)))
+
 (define-public r-scs
   (package
     (name "r-scs")
@@ -22172,14 +22823,14 @@ batch correction, and data correction.")
 (define-public r-styler
   (package
     (name "r-styler")
-    (version "1.8.1")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "styler" version))
        (sha256
         (base32
-         "1sc1xr9pfrbd2yyzyyxpj8dd81djmsr00gxgr0mr18habyl5yl0m"))))
+         "0by0mbdvdh8lrr350br1s01fl7yqjpi4vkj0b84b5x83vyrifm58"))))
     (build-system r-build-system)
     ;; This is needed by R.cache.
     (arguments
@@ -22269,14 +22920,14 @@ extends the lme4 package.")
 (define-public r-batchtools
   (package
     (name "r-batchtools")
-    (version "0.9.15")
+    (version "0.9.16")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "batchtools" version))
        (sha256
         (base32
-         "0d2xy77hkzhcnyz8zxcv98i80fx6ripjw4rvyx4ww1d0vjjgqf52"))))
+         "1fpmbsb0qp91kv7hjk6f7j41gvmz3xcxfcrr4bz2x62k0j7fmgsi"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-backports
@@ -22308,14 +22959,14 @@ experiments in a well-organized and reproducible way.")
 (define-public r-clue
   (package
     (name "r-clue")
-    (version "0.3-63")
+    (version "0.3-64")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "clue" version))
        (sha256
         (base32
-         "0c402fb3r1cxd0j6ikjhssq2k22lbnsq4k7vjpgvyx4a4ly2h4yr"))))
+         "1br8vsjcfrklspk24cx2zpk05l0na18ajbkwkwmwmpc79jlbfp7l"))))
     (build-system r-build-system)
     (propagated-inputs (list r-cluster))
     (home-page "https://cran.r-project.org/web/packages/clue/")
@@ -22387,14 +23038,14 @@ engine (Salmon et al., 2011) as provided by the package @code{sitmo}.")
 (define-public r-ingredients
   (package
     (name "r-ingredients")
-    (version "2.2.0")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ingredients" version))
        (sha256
         (base32
-         "11bv4l4fn9kr7y2nfzrwnaya8fi9w3nwcm9vzlqb7dva83rkqbsc"))))
+         "0jvxkdhbc28a096hi0y6519cj4im4mnl1vz9s563dvb5g4vb7r7b"))))
     (properties `((upstream-name . "ingredients")))
     (build-system r-build-system)
     (propagated-inputs
@@ -22451,14 +23102,14 @@ classification and regression models.")
 (define-public r-dae
   (package
     (name "r-dae")
-    (version "3.2-13")
+    (version "3.2-14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dae" version))
        (sha256
         (base32
-         "0mq94ah21p1glvsbvdmi2p7nlgz1bvq7w3rz2z3mdqq18kz6nkjw"))))
+         "157bx6b06xxz5wsj4miarfx820ds7dsjx2bfyjzf6845pmvg4hjb"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ggplot2 r-plyr))
@@ -22489,14 +23140,14 @@ been used in the call to @code{aov}.")
 (define-public r-dalex
   (package
     (name "r-dalex")
-    (version "2.4.2")
+    (version "2.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "DALEX" version))
        (sha256
         (base32
-         "1m19ibv8rpghqm4vr8nrvarrjkm9rxw6jx8xl3hzrqnnmf2xifqr"))))
+         "08cd5nhgd6vaazcqq985kwivg99v6ily4idhgkpz8l9ffl3lavm0"))))
     (properties `((upstream-name . "DALEX")))
     (build-system r-build-system)
     (propagated-inputs
@@ -22712,14 +23363,14 @@ the current document.")
 (define-public r-xgboost
   (package
     (name "r-xgboost")
-    (version "1.6.0.1")
+    (version "1.7.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xgboost" version))
        (sha256
         (base32
-         "1gafjv6vcpny03lqw8s68xszalsylniavaqwsbzh46vyk4h9mscs"))))
+         "199qlj74i7rsrwg7al55d2yr7py67k6yaa5wjfg6ma7s1sijrv9w"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-data-table r-jsonlite r-matrix))
@@ -22741,14 +23392,14 @@ easily.")
 (define-public r-umap
   (package
     (name "r-umap")
-    (version "0.2.9.0")
+    (version "0.2.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "umap" version))
        (sha256
         (base32
-         "1282v09kpds83mlr7kz06k8a40ji15hw85p30vrnp1g6w64w26sm"))))
+         "1abfddi0rq75b7nlx6550fx9nrqa62vb92xyp05ris25jf98ciwd"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-matrix r-openssl r-rcpp r-reticulate r-rspectra))
@@ -22974,6 +23625,41 @@ graph into communities.  See also Traag et al (2018) \"From Louvain to Leiden:
 guaranteeing well-connected communities.\" <arXiv:1810.08473>.")
     (license license:gpl3)))
 
+(define-public r-leidenalg
+  (package
+    (name "r-leidenalg")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "leidenAlg" version))
+       (sha256
+        (base32 "1z96zrsms93gspylmficaggb0xj94kq9rg3p2svdbb451jbga9an"))))
+    (properties `((upstream-name . "leidenAlg")))
+    (build-system r-build-system)
+    (inputs
+     (list glpk gmp libxml2))
+    (propagated-inputs
+     (list r-igraph
+           r-matrix
+           r-rcpp
+           r-rcpparmadillo
+           r-rcppeigen
+           r-sccore))
+    (native-inputs (list gfortran))
+    (home-page "https://github.com/kharchenkolab/leidenAlg")
+    (synopsis "Leiden algorithm via an R interface")
+    (description
+     "This package implements an R interface to the Leiden algorithm, an
+iterative community detection algorithm on networks.  The algorithm is
+designed to converge to a partition in which all subsets of all communities
+are locally optimally assigned, yielding communities guaranteed to be
+connected.  The implementation proves to be fast, scales well, and can be run
+on graphs of millions of nodes (as long as they can fit in memory).")
+    ;; The DESCRIPTION file says GPL-3, but the code was copied from
+    ;; https://github.com/vtraag/leidenalg, which is under GPLv3+.
+    (license license:gpl3+)))
+
 (define-public r-patchwork
   (package
     (name "r-patchwork")
@@ -23000,9 +23686,9 @@ complex composition of plots by providing mathematical operators for combining
 multiple plots.")
     (license license:expat)))
 
-(define-public r-liger
+(define-public r-rliger
   (package
-    (name "r-liger")
+    (name "r-rliger")
     (version "0.4.2")
     (source
      (origin
@@ -23074,6 +23760,9 @@ integrative non-negative matrix factorization to identify shared and
 dataset-specific factors.")
     (license license:gpl3)))
 
+(define-public r-liger
+  (deprecated-package "r-liger" r-rliger))
+
 (define-public r-harmony
   (package
     (name "r-harmony")
@@ -23207,14 +23896,14 @@ emphasize hidden group structures in networks or focus on specific nodes.")
 (define-public r-terra
   (package
     (name "r-terra")
-    (version "1.6-47")
+    (version "1.7-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "terra" version))
        (sha256
         (base32
-         "13n6rxrrkn4wgcgq2kyyhn5nxw099hy9fbzxg78waxa6cxapwpmh"))))
+         "0bi7d25g1ihl8gzwycxd0l47g94gx8975r1xbj6hh0dir2br7zl9"))))
     (properties `((upstream-name . "terra")))
     (build-system r-build-system)
     (inputs
@@ -23241,14 +23930,14 @@ files is supported.")
 (define-public r-tidygraph
   (package
     (name "r-tidygraph")
-    (version "1.2.2")
+    (version "1.2.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidygraph" version))
        (sha256
         (base32
-         "0w34jfldjkynbkyinmi1vdrfjhjrs47hm599mbnx4sxmnpbclmfm"))))
+         "11sn8z7bwv84lqlgnqc36n14nyhv1qdfc0gcs7nmgbl34nqhd75h"))))
     (properties `((upstream-name . "tidygraph")))
     (build-system r-build-system)
     (propagated-inputs
@@ -23328,14 +24017,14 @@ in pipelines.")
 (define-public r-parameters
   (package
     (name "r-parameters")
-    (version "0.20.0")
+    (version "0.20.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "parameters" version))
        (sha256
         (base32
-         "16y92q4h385sqc7xgdcrdmdvw0l8plxxbhcdsnx4gqqgm8di9l9p"))))
+         "197qna5lb3ypbl8zgsmar61gbsyyj5ma2q7r74sm0b70c9rhk9n8"))))
     (properties `((upstream-name . "parameters")))
     (build-system r-build-system)
     (propagated-inputs
@@ -23356,13 +24045,13 @@ effect size.")
 (define-public r-rgdal
   (package
     (name "r-rgdal")
-    (version "1.6-3")
+    (version "1.6-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgdal" version))
        (sha256
-        (base32 "0snz5m158as39h6zdcdrydwm5n2r2vayv3xy8n3g5mmkbxyyx7i2"))))
+        (base32 "19rcsrlf89fr94yqwmg9b4qmm51lc4qjijk8mi9hf5v120sm6b4k"))))
     (properties `((upstream-name . "rgdal")))
     (build-system r-build-system)
     (inputs
@@ -23371,7 +24060,7 @@ effect size.")
      (list r-sp))
     (native-inputs
      (list pkg-config r-knitr))
-    (home-page "http://rgdal.r-forge.r-project.org")
+    (home-page "https://rgdal.r-forge.r-project.org")
     (synopsis "Bindings for the Geospatial Data Abstraction Library")
     (description
      "This package provides bindings to the Geospatial Data Abstraction
@@ -24201,14 +24890,14 @@ Social Sciences\" by Mark S. Handcock and Martina Morris, Springer-Verlag,
 (define-public r-accept
   (package
     (name "r-accept")
-    (version "0.9.1")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "accept" version))
        (sha256
         (base32
-         "0risdxw17jk3d56q40a78slb1rcj93b6kz71hn5hbwr0iih722gr"))))
+         "0yjihmgi94yfwhnvgw4v235yyr8n6w1ass2qbmvk0ia1hmjis8zq"))))
     (properties `((upstream-name . "accept")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24470,14 +25159,14 @@ facilitates insertion into pipelines, and content inspection.")
 (define-public r-rngwell
   (package
     (name "r-rngwell")
-    (version "0.10-8")
+    (version "0.10-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rngWELL" version))
        (sha256
         (base32
-         "0ad1mz11l27h6apil2hd7gwz5zhi9jkjrk2jnhbkd8d0wz9g0sis"))))
+         "1jyanz789ylbz9a2agqv5c674zrfqn0k7s9d5dfia63dpq8cqscr"))))
     (properties `((upstream-name . "rngWELL")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/rngWELL/")
@@ -24515,14 +25204,14 @@ and prints vectorized images.")
 (define-public r-randtoolbox
   (package
     (name "r-randtoolbox")
-    (version "2.0.3")
+    (version "2.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "randtoolbox" version))
        (sha256
         (base32
-         "0i23wj9nmsfy3x2yzlfadzrvil2yhcrxs6qxrykrqs15r9jwx3hm"))))
+         "0jwylffr8zajgd1x24nrv4xxlkic10i8cfd9sy0pkz2g7sai9nll"))))
     (properties `((upstream-name . "randtoolbox")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24674,14 +25363,14 @@ models.")
 (define-public r-gamlss
   (package
     (name "r-gamlss")
-    (version "5.4-10")
+    (version "5.4-12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gamlss" version))
        (sha256
         (base32
-         "1cm0rvihniad309j26ll8kabndqzs3wdh5dak70b60z4kljrfx4c"))))
+         "1w5630hzir49nacpvmx28hqc8hcc9acmba9dd8zwzhz5ywwi0ycz"))))
     (properties `((upstream-name . "gamlss")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24797,6 +25486,38 @@ been tested on multi-terabyte matrices.  It allows for more than 2^32 rows or
 columns, ad allows for quick addition of extra columns to a filematrix.")
     (license license:lgpl3)))
 
+(define-public r-filesstrings
+  (package
+    (name "r-filesstrings")
+    (version "3.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "filesstrings" version))
+              (sha256
+               (base32
+                "1jl3jhkdjx5x00kllnkpvrlpsmzsvlgd6vhzdavd39zx4jzwjxw3"))))
+    (properties `((upstream-name . "filesstrings")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-checkmate
+                             r-magrittr
+                             r-purrr
+                             r-rlang
+                             r-strex
+                             r-stringi
+                             r-stringr
+                             r-withr))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/rorynolan/filesstrings")
+    (synopsis "Handy file and string manipulation")
+    (description
+     "This started out as a package for file and string manipulation.  Since
+then, the @code{fs} and @code{strex} packages emerged, offering functionality
+previously given by this package.  Those packages have hence almost pushed
+filesstrings into extinction.  However, it still has a small number of unique,
+handy file manipulation functions which can be seen in the vignette.  One
+example is a function to remove spaces from all file names in a directory.")
+    (license license:gpl3)))
+
 (define-public r-acmeeqtl
   (package
     (name "r-acmeeqtl")
@@ -24983,14 +25704,14 @@ provided as well.")
 (define-public r-tuner
   (package
     (name "r-tuner")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tuneR" version))
        (sha256
         (base32
-         "1mfkhxprqkj5v2z23g0bj8mwdp6q5fj1krk5ggr79359bd1nl7pf"))))
+         "1wic18fn9cd75lky0vwd5h38pwbk2w42b0n492s83w4nf9wbx7zb"))))
     (properties `((upstream-name . "tuneR")))
     (build-system r-build-system)
     (propagated-inputs (list r-signal))
@@ -25021,7 +25742,7 @@ transcription, ...")
      (list libsndfile))
     (propagated-inputs
      (list r-tuner))
-    (home-page "http://rug.mnhn.fr/seewave")
+    (home-page "https://rug.mnhn.fr/seewave")
     (synopsis "Sound analysis and synthesis")
     (description
      "This package provides functions for analysing, manipulating, displaying,
@@ -25194,13 +25915,13 @@ management} (aCRM).")
 (define-public r-tree
   (package
    (name "r-tree")
-   (version "1.0-42")
+   (version "1.0-43")
    (source (origin
             (method url-fetch)
             (uri (cran-uri "tree" version))
             (sha256
              (base32
-              "1q3jgkhl5d4d8c396cyvkw60094p0z0a3x7xwhdbi8gl4c2c65ss"))))
+              "11sjkm89ql1576jy0cqbxzjdpx7qs95wbgdxg92lzkiw05nrj2lv"))))
    (build-system r-build-system)
    (home-page "https://cran.r-project.org/web/packages/tree/")
    (synopsis "Classification and regression trees")
@@ -25591,7 +26312,7 @@ R.")
            r-locfit
            r-rcolorbrewer))
     (native-inputs (list gfortran))
-    (home-page "http://pkg.robjhyndman.com/hdrcde")
+    (home-page "https://pkg.robjhyndman.com/hdrcde")
     (synopsis "Highest density regions and conditional density estimation")
     (description
      "This is a package for the computation of highest density regions in one
@@ -25885,14 +26606,14 @@ API; see the package vignette for details.")
 (define-public r-actuar
   (package
     (name "r-actuar")
-    (version "3.3-1")
+    (version "3.3-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "actuar" version))
        (sha256
         (base32
-         "16nyhn0aw2mb8915ycr46rjvg9pbcps7zxs2sgvdws9kzm027mpj"))))
+         "0ys7kqqbx9g2mhsn243z9vj7qkdd69d3jy1vin9v8bknwimgdxvb"))))
     (properties `((upstream-name . "actuar")))
     (build-system r-build-system)
     (propagated-inputs (list r-expint))
@@ -25958,14 +26679,14 @@ number embedded in the file rather than the file extension.")
 (define-public r-imager
   (package
     (name "r-imager")
-    (version "0.42.16")
+    (version "0.42.18")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "imager" version))
        (sha256
         (base32
-         "00q2v000xanp03bzscmj3q9qnlhc97b1lgr4l19s9jmbf0hf9c5c"))))
+         "0ljkcvs91sjddndwdbaqg0nf9sksm0284s6kg05k027wnvbkc5f1"))))
     (properties `((upstream-name . "imager")))
     (build-system r-build-system)
     (inputs
@@ -26156,13 +26877,13 @@ Visualizations are also available for most of these settings.")
 (define-public r-torch
   (package
     (name "r-torch")
-    (version "0.9.0")
+    (version "0.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "torch" version))
        (sha256
-        (base32 "1iylnz0hsi00q7hngi2h24kg3nvjjg10z6iarqhp3wylsasgjs1f"))))
+        (base32 "03qbdws6j5v2vmdgdnwfd0248s2qirnxpm9v4302vqlq3c0i83c2"))))
     (properties `((upstream-name . "torch")))
     (build-system r-build-system)
     (arguments
@@ -26194,6 +26915,7 @@ Visualizations are also available for most of these settings.")
            r-cli
            r-coro
            r-ellipsis
+           r-glue
            r-magrittr
            r-r6
            r-rcpp
@@ -26364,19 +27086,19 @@ different conceptual parts of the algorithm.")
 (define-public r-shapes
   (package
     (name "r-shapes")
-    (version "1.2.6")
+    (version "1.2.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "shapes" version))
        (sha256
         (base32
-         "1p9fr95zk3q2v277c5ksb0nh26mcpzwjzjb2lmag51z6hck8cb66"))))
+         "155q6asc9202f85snyjaxhm8qpj7swgzhg95sisjy506gvcb6c8z"))))
     (properties `((upstream-name . "shapes")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-mass r-minpack-lm r-rgl r-scatterplot3d))
-    (home-page "http://www.maths.nottingham.ac.uk/~ild/shapes")
+    (home-page "https://www.maths.nottingham.ac.uk/~ild/shapes")
     (synopsis "Statistical shape analysis")
     (description
      "This package provides routines for the statistical analysis of landmark
@@ -26445,14 +27167,14 @@ inserted into Sweave / @code{knitr} easily.")
 (define-public r-anthropometry
   (package
     (name "r-anthropometry")
-    (version "1.17")
+    (version "1.18")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Anthropometry" version))
        (sha256
         (base32
-         "0vxjlzxv16bygw8n57f25msq5bd1dydg41my92ximah0nzzvbg41"))))
+         "1zpawma8vci7swnk3vskpkb1zqmjl4jkmg4n5h7gghf89kgp0xgy"))))
     (properties `((upstream-name . "Anthropometry")))
     (build-system r-build-system)
     (propagated-inputs
@@ -26492,7 +27214,7 @@ statistical shape analysis and archetypal analysis.")
     (propagated-inputs
      (list r-bh
            r-rcpp))
-    (home-page "http://dirk.eddelbuettel.com/code/anytime.html")
+    (home-page "https://dirk.eddelbuettel.com/code/anytime.html")
     (synopsis "Converter of input to POSIXct or Date")
     (description
      "The package converts the input in any one of character, integer, numeric,
@@ -27433,7 +28155,7 @@ Gibbs sampling by Xuan-Hieu Phan and co-authors.")
            r-rcpparmadillo
            r-slam
            r-stringr))
-    (home-page "http://www.structuraltopicmodel.com/")
+    (home-page "https://www.structuraltopicmodel.com/")
     (synopsis "Estimation of the Structural Topic Model")
     (description
      "The @dfn{Structural Topic Model} (STM) allows researchers to estimate
@@ -27750,14 +28472,14 @@ Complete access to optimized C functions is made available with
 (define-public r-openmx
   (package
     (name "r-openmx")
-    (version "2.20.7")
+    (version "2.21.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "OpenMx" version))
        (sha256
         (base32
-         "0ki3n2i9b9880mpfxazmd6zrblzl1jngi10qnbxxvxik1x2mq3vy"))))
+         "13ka7c7qlb0q2jrmxg1y43gqcbsxcsw5s4cf6ckkh25gdf4mq6v3"))))
     (properties `((upstream-name . "OpenMx")))
     (build-system r-build-system)
     (propagated-inputs
@@ -27899,6 +28621,32 @@ on a continuous-time birth-death process.")
 league, the Bundesliga.  It contains data from 1964 to 2016.")
     (license license:gpl3)))
 
+(define-public r-butcher
+  (package
+    (name "r-butcher")
+    (version "0.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "butcher" version))
+              (sha256
+               (base32
+                "1ymz4p887f8z54bxwih0zycbs2wmy5rlmw9z0gl0y89q4l8vyygw"))))
+    (properties `((upstream-name . "butcher")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-cli
+                             r-lobstr
+                             r-purrr
+                             r-rlang
+                             r-tibble
+                             r-vctrs))
+    (native-inputs (list r-knitr))
+    (home-page "https://butcher.tidymodels.org/")
+    (synopsis "Model butcher")
+    (description
+     "This package provides a set of S3 generics to axe components of fitted
+model objects and help reduce the size of model objects saved to disk.")
+    (license license:expat)))
+
 (define-public r-d3network
   (package
     (name "r-d3network")
@@ -27914,7 +28662,7 @@ league, the Bundesliga.  It contains data from 1964 to 2016.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-plyr r-rjson r-whisker))
-    (home-page "http://christophergandrud.github.io/d3Network/")
+    (home-page "https://christophergandrud.github.io/d3Network/")
     (synopsis "Create D3 JavaScript network, tree, dendrogram, and Sankey graphs")
     (description
      "This package is intended to make it easy to create D3 JavaScript
@@ -28047,7 +28795,7 @@ well as Ravand and Robitzsch (2015).")
     (build-system r-build-system)
     (propagated-inputs
      (list r-cdm r-rcpp r-rcpparmadillo))
-    (home-page "http://www.edmeasurementsurveys.com/TAM/Tutorials/")
+    (home-page "https://www.edmeasurementsurveys.com/TAM/Tutorials/")
     (synopsis "Test analysis modules")
     (description
      "This package includes tools for marginal maximum likelihood estimation
@@ -28161,14 +28909,14 @@ interesting features. iheatmapr uses the plotly library for interactivity.")
 (define-public r-packrat
   (package
     (name "r-packrat")
-    (version "0.8.1")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "packrat" version))
        (sha256
         (base32
-         "1ni3xn51xifdb2bya5z54jn4nxgss6f23b3hn126j2kaz80h7ns5"))))
+         "0l3rz9p62k7ymlin88hn6ydhdaawg6jb1jii7mdyss0agxzgbz7m"))))
     (properties `((upstream-name . "packrat")))
     (build-system r-build-system)
     (home-page "https://github.com/rstudio/packrat/")
@@ -28182,14 +28930,14 @@ and reproducible way.")
 (define-public r-rsconnect
   (package
     (name "r-rsconnect")
-    (version "0.8.28")
+    (version "0.8.29")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rsconnect" version))
        (sha256
         (base32
-         "1q0njv25xiri4ql9mfrzlwdf3l3xg9xjjj2wva9rbniafx3skf95"))))
+         "0hqww1nn7ap6jzy6jl936d1fxs3hqw09w6hr9pgww2zrmb99ja45"))))
     (properties `((upstream-name . "rsconnect")))
     (build-system r-build-system)
     (propagated-inputs
@@ -28387,14 +29135,14 @@ techniques to average Bayesian predictive distributions.")
 (define-public r-rstan
   (package
     (name "r-rstan")
-    (version "2.21.7")
+    (version "2.21.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rstan" version))
        (sha256
         (base32
-         "0ibd3pj2pvd7658sdg95fa2yhfmxz9gy0cjwcrdr546k209j55a4"))))
+         "0xah8wl4lg8zh5982m20ipc6cjck1dsfi8lz1jbkg4212p1yvm5j"))))
     (properties `((upstream-name . "rstan")))
     (build-system r-build-system)
     (arguments
@@ -28536,14 +29284,14 @@ Additional storage back-ends can be added easily.")
 (define-public r-zyp
   (package
     (name "r-zyp")
-    (version "0.10-1.1")
+    (version "0.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "zyp" version))
        (sha256
         (base32
-         "03cxpkfbhrx1fy8l0dl9a13ghz93cqq6877wa8rig09ksdiivaw9"))))
+         "0jmddxg88qb9f38ywdy4min7w5qadnkhqxd46b0j0gjsq95vw85q"))))
     (properties `((upstream-name . "zyp")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29369,14 +30117,14 @@ here.")
 (define-public r-projpred
   (package
     (name "r-projpred")
-    (version "2.2.2")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "projpred" version))
        (sha256
         (base32
-         "0fycjmaqbcr3vp5708003flvi9ny4z04acgbcfly1ird0kcw9s3v"))))
+         "0ynk1i3q2qcs9d4a12341p0dq0ph7zpmbpl925vnzbg1d6swz8zl"))))
     (properties `((upstream-name . "projpred")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29599,14 +30347,14 @@ pies on a map.")
 (define-public r-scrypt
   (package
     (name "r-scrypt")
-    (version "0.1.4")
+    (version "0.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "scrypt" version))
        (sha256
         (base32
-         "12q9d4m7flbvlgssvjh1ga4jswkmqjfshf6pna6qk6v087gmzdsj"))))
+         "11ncpv01a5lgbxl46g07a43ncjp7jdhrrciasxvxc1d56cz26jh1"))))
     (properties `((upstream-name . "scrypt")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29660,7 +30408,7 @@ permuted copies (shadows).")
      (list r-quadprog))
     (native-inputs
      (list r-knitr))
-    (home-page "http://directlabels.r-forge.r-project.org/")
+    (home-page "https://directlabels.r-forge.r-project.org/")
     (synopsis "Direct labels for multicolor plots")
     (description
      "This package provides an extensible framework for automatically placing
@@ -29770,14 +30518,14 @@ input.")
 (define-public r-lightgbm
   (package
     (name "r-lightgbm")
-    (version "3.3.4")
+    (version "3.3.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lightgbm" version))
        (sha256
         (base32
-         "12hcq2idjgggs8l9a5aaxbw1wsfz6byzaxqn9k6afvkf3v5srp65"))))
+         "1bnzggia48jkd1ffdzhznmbk76dw3mab65i7rmg967zcflapv7rh"))))
     (properties `((upstream-name . "lightgbm")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29980,14 +30728,14 @@ you can automate browsers locally or remotely.")
 (define-public r-conquer
   (package
     (name "r-conquer")
-    (version "1.3.1")
+    (version "1.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "conquer" version))
        (sha256
         (base32
-         "1mdwm0aanq4rx3042djvs0l2vkdx6zbzvrjfyfb9dhv0gfs8mhhl"))))
+         "0imrr5k7cxyxgr2jcan9fagj1p3crffga4qa4agkciz4caq9n4lg"))))
     (properties `((upstream-name . "conquer")))
     (build-system r-build-system)
     (propagated-inputs
@@ -30036,13 +30784,13 @@ doi.org/10.1007/s10115-013-0679-x} for details.")
 (define-public r-memuse
   (package
     (name "r-memuse")
-    (version "4.2-2")
+    (version "4.2-3")
     (source (origin
              (method url-fetch)
              (uri (cran-uri "memuse" version))
              (sha256
               (base32
-               "1rdp8wi9sd03qdak7mifvdc1szgk0fdzmhbikdfsza8xshm2pp33"))))
+               "0816s6airiqmn8faprpwmchxaay6llri4673ivlx1bp2cpvdyvwh"))))
     (properties `((upstream-name . "memuse")))
     (build-system r-build-system)
     (home-page "https://github.com/shinra-dev/memuse")
@@ -30166,13 +30914,13 @@ diagonals.  This package allows you to compute the tensor product of arrays.")
 (define-public r-spatstat-explore
   (package
     (name "r-spatstat-explore")
-    (version "3.0-5")
+    (version "3.0-6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "spatstat.explore" version))
               (sha256
                (base32
-                "0qn8dmymbnh9vdw0hysijkk2nwz5q69i62smpp8f3wy3z898lhwz"))))
+                "1m85as59672psx5miqwi5479mm44ddx2misxmy188bn0b0nw7k9b"))))
     (properties `((upstream-name . "spatstat.explore")))
     (build-system r-build-system)
     (propagated-inputs
@@ -30206,13 +30954,13 @@ Kolmogorov-Smirnov, ANOVA) are also supported.")
 (define-public r-spatstat-model
   (package
     (name "r-spatstat-model")
-    (version "3.0-2")
+    (version "3.1-2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "spatstat.model" version))
               (sha256
                (base32
-                "0a6lf5y0k13h60s0lnwwfrmxswl7avcg4fhqmha1nmycidhga8z9"))))
+                "0njka15lcd1ldcn2kwblr9i0g10x4l88nc4vz0mxpp63idkiwz89"))))
     (properties `((upstream-name . "spatstat.model")))
     (build-system r-build-system)
     (propagated-inputs
@@ -30261,7 +31009,7 @@ Kolmogorov-Smirnov, ANOVA) are also supported.")
     (properties
      `((upstream-name . "spatstat.utils")))
     (build-system r-build-system)
-    (home-page "http://www.spatstat.org")
+    (home-page "https://www.spatstat.org")
     (synopsis "Utility functions for spatstat")
     (description
      "This package contains utility functions for the @code{spatstat} package
@@ -30284,7 +31032,7 @@ which may also be useful for other purposes.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-abind r-matrix r-spatstat-utils r-tensor))
-    (home-page "http://spatstat.org/")
+    (home-page "https://spatstat.org/")
     (synopsis "Sparse three-dimensional arrays and linear algebra utilities")
     (description
      "This package defines sparse three-dimensional arrays and supports
@@ -30307,7 +31055,7 @@ matrix calculations that are common in statistics, such as quadratic forms.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-matrix r-spatstat-utils))
-    (home-page "http://www.spatstat.org")
+    (home-page "https://www.spatstat.org")
     (synopsis "Datasets for spatstat")
     (description
      "This package contains all the datasets for the @code{spatstat}
@@ -30317,19 +31065,19 @@ package.")
 (define-public r-spatstat-geom
   (package
     (name "r-spatstat-geom")
-    (version "3.0-3")
+    (version "3.0-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.geom" version))
        (sha256
         (base32
-         "111wj507i2mxi0ak8sj468w26pr2f7hgv3ssmbf0qjkp1v35cnvf"))))
+         "037jixp9sqvqp79rdcpvwrx8zf1p9rk60v4g1sl0jgrnd037ay33"))))
     (properties `((upstream-name . "spatstat.geom")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-deldir r-polyclip r-spatstat-data r-spatstat-utils))
-    (home-page "http://spatstat.org/")
+    (home-page "https://spatstat.org/")
     (synopsis "Geometrical functionality of the spatstat package")
     (description
      "This is a subset of the original spatstat package, containing the
@@ -30363,7 +31111,7 @@ for the geometry of linear networks.")
            r-spatstat-sparse
            r-spatstat-utils
            r-tensor))
-    (home-page "http://spatstat.org/")
+    (home-page "https://spatstat.org/")
     (synopsis "Core functionality of the spatstat package")
     (description
      "This is a subset of the original spatstat package, containing all of the
@@ -30373,14 +31121,14 @@ user-level code from spatstat, except for the code for linear networks.")
 (define-public r-spatstat-linnet
   (package
     (name "r-spatstat-linnet")
-    (version "3.0-3")
+    (version "3.0-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.linnet" version))
        (sha256
         (base32
-         "1y9crkj9sa1hnfsfkyyq8zv6fgafv07b8w0y01qps1rd6virnns0"))))
+         "16sazaxf4sdnvwdzc6ggcs2v10247ywx9dk8r9vkjdgh0s5cyn10"))))
     (properties
      `((upstream-name . "spatstat.linnet")))
     (build-system r-build-system)
@@ -30393,7 +31141,7 @@ user-level code from spatstat, except for the code for linear networks.")
            r-spatstat-random
            r-spatstat-sparse
            r-spatstat-utils))
-    (home-page "http://spatstat.org/")
+    (home-page "https://spatstat.org/")
     (synopsis "Linear networks functionality of the spatstat package")
     (description
      "This is a subset of the spatstat package, containing its functionality
@@ -30403,17 +31151,17 @@ for spatial data on a linear network.")
 (define-public r-spatstat-random
   (package
     (name "r-spatstat-random")
-    (version "3.0-1")
+    (version "3.1-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.random" version))
        (sha256
-        (base32 "1dp58dxw7ln9bsls9ssbb917qakvgr9nf2jci6zq31rv0rf8934k"))))
+        (base32 "1l21qi9cdq7bgflyjxprqgc1fwvzbsnnhywkkjzjl018r9czb2mj"))))
     (properties `((upstream-name . "spatstat.random")))
     (build-system r-build-system)
     (propagated-inputs (list r-spatstat-data r-spatstat-geom r-spatstat-utils))
-    (home-page "http://spatstat.org/")
+    (home-page "https://spatstat.org/")
     (synopsis "Random Generation Functionality for the 'spatstat' Family")
     (description
      "This package provides functionality for random generation of spatial
@@ -30431,21 +31179,21 @@ sampler).")
 (define-public r-spatstat
   (package
     (name "r-spatstat")
-    (version "3.0-2")
+    (version "3.0-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat" version))
        (sha256
         (base32
-         "1k8qs5hsy0n4rh7ccp6bdnqgbw3fvjdp55bc0zhjqwbbhq8c0ax0"))))
+         "0ajhf43jkds9b0x7l02mis47b1c5w78i742axa84g0ysaqv7gbqx"))))
     (properties `((upstream-name . "spatstat")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-spatstat-data r-spatstat-explore r-spatstat-geom
            r-spatstat-linnet r-spatstat-model r-spatstat-random
            r-spatstat-utils))
-    (home-page "http://www.spatstat.org")
+    (home-page "https://www.spatstat.org")
     (synopsis "Spatial Point Pattern analysis, model-fitting, simulation, tests")
     (description
      "This package provides a comprehensive toolbox for analysing Spatial
@@ -30511,17 +31259,17 @@ semantics and supports interaction with @code{ALTREP} vectors.")
 (define-public r-rcpptoml
   (package
     (name "r-rcpptoml")
-    (version "0.1.7")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RcppTOML" version))
        (sha256
-        (base32 "0h8517ipwqhqkhcfiyqmvsb585g01p0ra0azbpzyxip6pq6g029g"))))
+        (base32 "1ak3dwzdrmq9kd30i12fy582rsn5xfljw214liv1w8l2rbwr24rp"))))
     (properties `((upstream-name . "RcppTOML")))
     (build-system r-build-system)
     (propagated-inputs (list r-rcpp))
-    (home-page "http://dirk.eddelbuettel.com/code/rcpp.toml.html")
+    (home-page "https://dirk.eddelbuettel.com/code/rcpp.toml.html")
     (synopsis "Rcpp bindings to TOML parser")
     (description
      "The TOML configuration format specifies an excellent format suitable for
@@ -30608,20 +31356,19 @@ model.")
 (define-public r-clusterr
   (package
     (name "r-clusterr")
-    (version "1.2.9")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ClusterR" version))
        (sha256
         (base32
-         "04aswnmxzpffc1fj2hf85pc5b10fh418k29a1x5cs1f1y7b3zav3"))))
+         "1k3rpz8rjw7r2lrx79h62m46hwxrn57hs5n7072g2rnvmc9jx3j2"))))
     (properties `((upstream-name . "ClusterR")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ggplot2
            r-gmp
-           r-gtools
            r-lifecycle
            r-rcpp
            r-rcpparmadillo))
@@ -30751,21 +31498,24 @@ not digit characters.")
 (define-public r-visdat
   (package
     (name "r-visdat")
-    (version "0.5.3")
+    (version "0.6.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "visdat" version))
               (sha256
                (base32
-                "1ikqp29nncbw1xlwyb9dqqgcdk9q0bs3wxhnhnjpb11vcjv7cz2j"))))
+                "1675az0lfvmwzh9c3fknnk0n2kz1w7hy0kdj3a37n5j1knxwsjhh"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-dplyr
+     (list r-cli
+           r-dplyr
+           r-forcats
            r-ggplot2
            r-glue
            r-magrittr
            r-purrr
            r-readr
+           r-scales
            r-tibble
            r-tidyr))
     (native-inputs
@@ -30777,6 +31527,98 @@ data visualisations of an entire dataset to identify problems or unexpected feat
 using @code{ggplot2}.")
     (license license:expat)))
 
+(define-public r-visnetwork
+  (package
+    (name "r-visnetwork")
+    (version "2.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "visNetwork" version))
+        (sha256
+          (base32
+            "116w3l65lgv18xzav5zz1pbgwpwck66n9cjpja9axrl9zi19vja7"))
+        (snippet
+         '(for-each delete-file
+                    '("inst/htmlwidgets/lib/vis/vis-network.min.js"
+                      "inst/htmlwidgets/lib/export/FileSaver/FileSaver.min.js"
+                      "inst/common-docs-files/js/jquery.url.min.js")))))
+    (properties `((upstream-name . "visNetwork")))
+    (build-system r-build-system)
+    (arguments
+     (list
+      #:modules '((guix build utils)
+                  (guix build r-build-system)
+                  (srfi srfi-1))
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; The inst directory contains some minified JavaScript
+             ;; files.  Regenerate them from sources.
+             (with-directory-excursion "inst/"
+               (call-with-values
+                   (lambda ()
+                     (unzip2
+                      `((,(search-input-file inputs "/FileSaver.js")
+                         "htmlwidgets/lib/export/FileSaver/FileSaver.min.js")
+                        (,(search-input-file inputs "/url.js")
+                         "common-docs-files/js/jquery.url.min.js")
+                        (,(assoc-ref inputs "vis-network.js")
+                         "htmlwidgets/lib/vis/vis-network.min.js"))))
+                 (lambda (sources targets)
+                   (for-each (lambda (source target)
+                               (format #true "Processing ~a --> ~a~%"
+                                       source target)
+                               (invoke "esbuild" source "--minify"
+                                       (string-append "--outfile=" target)))
+                             sources targets)))))))))
+    (propagated-inputs
+     (list r-htmltools
+           r-htmlwidgets
+           r-jsonlite
+           r-magrittr))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)
+       ("esbuild" ,esbuild)
+       ;; The included file has no version information but was created
+       ;; at around the same time as version 9.1.0.
+       ("vis-network.js"
+        ,(origin
+           (method url-fetch)
+           (uri "https://unpkg.com/vis-network@9.1.0/dist/vis-network.js")
+           (sha256
+            (base32
+             "0vh2zf221ildsr5ly9idxi3jpqx61j3phbz5kdd801i0crqk4yj0"))))
+       ;; Version 1.2.0 is a few months more recent than what
+       ;; visNetwork bundles.
+       ("filesaver.js"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/eligrey/FileSaver.js/")
+                 (commit "1.2.0")))
+           (file-name (git-file-name "FileSaver.js" "1.2.0"))
+           (sha256
+            (base32
+             "07mw01056fk36pganhs27y8rl5y5hrdsm945pwbbvmdjnzq4ijny"))))
+       ("jquery-url.js"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/websanova/js-url/")
+                 (commit "v1.8.6")))
+           (file-name (git-file-name "js-url.js" "1.8.6"))
+           (sha256
+            (base32
+             "0pxqjwqf9avd4d99csgny8xf5c65kyqjnm24pwm4ca1zghsl9wyr"))))))
+    (home-page "https://datastorm-open.github.io/visNetwork/")
+    (synopsis "Network Visualization using vis.js Library")
+    (description
+      "This package provides an R interface to the vis.js JavaScript charting
+library.  It allows an interactive visualization of networks.")
+    (license license:expat)))
+
 (define-public r-muhaz
   (package
     (name "r-muhaz")
@@ -30805,14 +31647,14 @@ censored data.")
 (define-public r-flexsurv
   (package
     (name "r-flexsurv")
-    (version "2.2.1")
+    (version "2.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "flexsurv" version))
        (sha256
         (base32
-         "1xqsihvrb8b5mzkr3mhg0ydm8kkcw1k0kgp6ndyavw8yahl059as"))))
+         "1qshsii5fqpx4l113vr4lx9ijxhcr8494lx3ixjdbzy58077adb6"))))
     (properties `((upstream-name . "flexsurv")))
     (build-system r-build-system)
     (propagated-inputs
@@ -31663,14 +32505,14 @@ models without involving a test set.")
 (define-public r-tidypredict
   (package
     (name "r-tidypredict")
-    (version "0.4.9")
+    (version "0.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidypredict" version))
        (sha256
         (base32
-         "0x0r36zvny4rqgndx7iqh39yhr53gl4d8wd8wpvdcgg35q6z02z2"))))
+         "1h05gm6fwjh6v9qqi9jbislf008h7d50k003qymb0x9gz6p75qgy"))))
     (properties `((upstream-name . "tidypredict")))
     (build-system r-build-system)
     (propagated-inputs
@@ -31679,7 +32521,6 @@ models without involving a test set.")
            r-knitr
            r-purrr
            r-rlang
-           r-stringr
            r-tibble
            r-tidyr))
     (native-inputs
@@ -31720,17 +32561,18 @@ and \"Persuasion\".")
 (define-public r-janitor
   (package
     (name "r-janitor")
-    (version "2.1.0")
+    (version "2.2.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "janitor" version))
               (sha256
                (base32
-                "09nqm957m2f54y2l30619b58x4i7gxwvr2lwg5kly5xy1ya1a1nn"))))
+                "1bmsyrmy833kzj3s9s6207f54bx1ca0ianwhiyrlp0jfbqcd1m99"))))
     (properties `((upstream-name . "janitor")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-dplyr
+           r-hms
            r-lifecycle
            r-lubridate
            r-magrittr
@@ -31934,14 +32776,14 @@ expressive statistical grammar that coheres with the Tidy design framework.")
 (define-public r-modeldata
   (package
     (name "r-modeldata")
-    (version "1.0.1")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "modeldata" version))
        (sha256
         (base32
-         "0ik4r25l69brkf0l248bln1kicy7dpi6mziwn19by8rq3f8fylhy"))))
+         "0wsqn8vchvanfbfh1l1q54wzgnqx703r32a7xm4zqvq2jixc2nww"))))
     (properties `((upstream-name . "modeldata")))
     (build-system r-build-system)
     (propagated-inputs
@@ -31985,18 +32827,18 @@ distributions.")
 (define-public r-conflicted
   (package
     (name "r-conflicted")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "conflicted" version))
        (sha256
         (base32
-         "1qg9ar114r98wm0pnf65mss4v2ksq3924rlpm13mqp4s3p6j9yi4"))))
+         "121h4b4rms23szcfs1nrbgdk812d61vhrmwn9lgpsgnsaaxqd6y9"))))
     (properties `((upstream-name . "conflicted")))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-memoise r-rlang))
+     (list r-cli r-memoise r-rlang))
     (home-page "https://github.com/r-lib/conflicted")
     (synopsis "Alternative conflict resolution strategy")
     (description
@@ -32092,7 +32934,7 @@ this variability problem can be overcome.")
          "1kdnm5ilfn5fclry3f1d518761hykrqgjhv69kc881r2fpcfa1lv"))))
     (properties `((upstream-name . "MLEcens")))
     (build-system r-build-system)
-    (home-page "http://stat.ethz.ch/~maathuis/")
+    (home-page "https://stat.ethz.ch/~maathuis/")
     (synopsis "Computation of the MLE for bivariate (interval) censored data")
     (description
      "This package contains functions to compute the nonparametric
@@ -32252,14 +33094,14 @@ designs.  Broman et al. (2018) <doi:10.1534/genetics.118.301595>.")
 (define-public r-seqminer
   (package
     (name "r-seqminer")
-    (version "8.5")
+    (version "8.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "seqminer" version))
        (sha256
         (base32
-         "1ki8b4bgb3ky9y3x2g56h7i94lk345awgwkg10lys022jxhm30d7"))))
+         "1fm76mam5hp5v0hj27ywna7vafrw7mnwph30fqdb17163rrhr1ca"))))
     (build-system r-build-system)
     (inputs
      (list zlib))
@@ -32410,7 +33252,7 @@ other R users.")
            r-spatstat-geom
            r-tibble
            r-uwot))
-    (home-page "http://www.satijalab.org/seurat")
+    (home-page "https://www.satijalab.org/seurat")
     (synopsis "Seurat is an R toolkit for single cell genomics")
     (description
      "This package is an R package designed for QC, analysis, and
@@ -32503,14 +33345,14 @@ distributed as independent packages.")
 (define-public r-phangorn
   (package
     (name "r-phangorn")
-    (version "2.10.0")
+    (version "2.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "phangorn" version))
        (sha256
         (base32
-         "1kjxp352jdk1amxpk9jrql490d0qy79zm65y8szyxrm1adqghlyi"))))
+         "086lxqzqx1n3237h9q28r54libaz2xk9h3f6vfj8l49yw356w28h"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ape
@@ -33201,14 +34043,14 @@ unit tests of graphics).")
 (define-public r-vdiffr
   (package
     (name "r-vdiffr")
-    (version "1.0.4")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vdiffr" version))
        (sha256
         (base32
-         "1z8nn8yh6jfzb9r7ylmigwh1p30lrclqm6khmp323qqphzmzfdwy"))))
+         "1w6hqjb57q6ys9d6d4sh8v2s9hkgg1mkpil8lj1nld5pzir7pgqc"))))
     (properties `((upstream-name . "vdiffr")))
     (build-system r-build-system)
     (inputs
@@ -33233,14 +34075,14 @@ test cases.")
 (define-public r-highlight
   (package
     (name "r-highlight")
-    (version "0.5.0")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "highlight" version))
        (sha256
         (base32
-         "1shar4y07wyixg0ichdrn2xhgwkl3mv2pxkalqzisc69w605b3hf"))))
+         "06sirfmkdl355rfr5bb475829v7zx1spkz82vi31vl55jzijq54m"))))
     (properties `((upstream-name . "highlight")))
     (build-system r-build-system)
     (home-page "https://github.com/hadley/highlight")
@@ -33318,14 +34160,14 @@ the font tool-set provided by the @code{systemfonts} package.")
 (define-public r-ragg
   (package
     (name "r-ragg")
-    (version "1.2.4")
+    (version "1.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ragg" version))
        (sha256
         (base32
-         "1k8dd08a2f3dg4zrq37cfvljqg413snhzmd0440amvrfd9iyaiy5"))))
+         "1yd89p4f2b7r2n1kl6lybbgd04kqvlf14zgmp7pxw770w1slsvwk"))))
     (properties `((upstream-name . "ragg")))
     (build-system r-build-system)
     (inputs
@@ -33784,28 +34626,52 @@ structures from them.")
 user streams, and to parse the output into data frames.")
     (license license:gpl2)))
 
+(define-public r-strex
+  (package
+    (name "r-strex")
+    (version "1.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "strex" version))
+              (sha256
+               (base32
+                "1fxg07n8cjvvgpbzqhyx5ma5bv6vax1yw0rbfdqfzr79v6k5x3n7"))))
+    (properties `((upstream-name . "strex")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-checkmate r-magrittr r-rlang r-stringi r-stringr))
+    (native-inputs (list r-knitr))
+    (home-page "https://rorynolan.github.io/strex/")
+    (synopsis "Extra string manipulation functions")
+    (description
+     "Strex is a collection of string manipulation functions not provided by
+the @code{stringi} or @code{stringr} packages.  The foremost of these is the
+extraction of numbers from strings.  There are many other handy
+functionalities in strex.")
+    (license license:gpl3)))
+
 (define-public r-readods
   (package
     (name "r-readods")
-    (version "1.7.0")
+    (version "1.8.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (cran-uri "readODS" version))
-        (sha256
-          (base32
-            "1hi217ab7hp15jsbzi5ak57cqf8jn2rv78bnn74q72gn9mrfra7n"))))
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "readODS" version))
+       (sha256
+        (base32
+         "1jdgp9vnm3sg4n34fl9ll7pkpac2lw7dg85mjkjwm1c63dfgrm0i"))))
     (properties `((upstream-name . "readODS")))
     (build-system r-build-system)
     (propagated-inputs
-      (list r-cellranger r-readr r-stringi r-xml2))
+     (list r-cellranger r-purrr r-readr r-stringi r-xml2))
     (native-inputs (list r-knitr))
     (home-page
-      "https://cran.r-project.org/package=readODS")
+     "https://cran.r-project.org/package=readODS")
     (synopsis "Read and Write ODS Files")
     (description
-      "Import @dfn{OpenDocument Spreadsheet} (ODS) into R as a data frame.
-Also support writing data frame into ODS file.")
+     "This package lets you import @dfn{OpenDocument Spreadsheet} (ODS) into R
+as a data frame.  It also supports writing data frames to an ODS file.")
     (license license:gpl3)))
 
 (define-public r-qpdf
@@ -33879,14 +34745,14 @@ parallel programming style, which is intended for batch parallel execution.")
 (define-public r-pdftools
   (package
     (name "r-pdftools")
-    (version "3.3.2")
+    (version "3.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pdftools" version))
        (sha256
         (base32
-         "012s98ghj3mk0adghbx2nyrwnja0707ym13nhjpjwj4xd7bll7s5"))))
+         "174hsmdpykgxkgbif562lsnrlsybhjbjh4r7w9pc5hss42jxzh7z"))))
     (properties `((upstream-name . "pdftools")))
     (build-system r-build-system)
     (inputs (list zlib poppler))
@@ -34008,14 +34874,14 @@ and formatted text files with additional meta-data, such including @code{.csv},
 (define-public r-lwgeom
   (package
     (name "r-lwgeom")
-    (version "0.2-10")
+    (version "0.2-11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lwgeom" version))
        (sha256
         (base32
-         "1gdvp2q4mzlg1kpjqxkiqxw1r5c4n5pxwvhdbzp89a3gyyjgh7zf"))))
+         "069lsr050qgr1vkg9smb6h3cg82yazb3xxkbjinmdyc1i7skrmvz"))))
     (properties `((upstream-name . "lwgeom")))
     (build-system r-build-system)
     (inputs
@@ -34227,14 +35093,14 @@ BTM-WWW13.pdf}.")
 (define-public r-delaporte
   (package
     (name "r-delaporte")
-    (version "8.0.3")
+    (version "8.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Delaporte" version))
        (sha256
         (base32
-         "1d1jkbxlwnqznh9pkjpkr7np2nmqzjvrdmlb210y1lb08mqmb73w"))))
+         "08si87f6zjsmmzgvhnfjw8l7lcwlfj2qd4zf6ypm197vdhqw0d0r"))))
     (properties `((upstream-name . "Delaporte")))
     (build-system r-build-system)
     (native-inputs (list gfortran))
@@ -34255,14 +35121,14 @@ variability than the Poisson, but less than the negative binomial.")
 (define-public r-rjsonio
   (package
     (name "r-rjsonio")
-    (version "1.3-1.6")
+    (version "1.3-1.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RJSONIO" version))
        (sha256
         (base32
-         "17x0ayk7daprbc8w2hvb2jl9mfnw4dic9yc3sr5adcjqfzmcklc2"))))
+         "1xak6n15ck7rj9swxk99vpjly1naxgz9gj6zjmib2lkq7inmgw7n"))))
     (properties `((upstream-name . "RJSONIO")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/package=RJSONIO")
@@ -34560,14 +35426,14 @@ time zone manipulations.")
 (define-public r-vroom
   (package
     (name "r-vroom")
-    (version "1.6.0")
+    (version "1.6.1")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "vroom" version))
         (sha256
           (base32
-            "19kcsa4i1pc4vvwp2y21izj5rv4a9mvl8a9rylx6jhk4j7gwq657"))))
+            "0z40655l03gz2pdxlm9zq5f3c5ahpnc2qqwdnglcgy8j6bak63pb"))))
     (properties `((upstream-name . "vroom")))
     (build-system r-build-system)
     (propagated-inputs
@@ -34668,13 +35534,13 @@ using either @code{httpuv} or @code{Rhttpd}.")
 (define-public r-protolite
   (package
     (name "r-protolite")
-    (version "2.1.3")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "protolite" version))
        (sha256
-        (base32 "1sr56hrd5n79igy3168993cxzqkzizhal4s1g22pd0rgdixm27ch"))))
+        (base32 "1bqqw43irk2a9xqlylxlbxpcaa40wdxdx4y6kqhzibxvw1p7drii"))))
     (properties `((upstream-name . "protolite")))
     (build-system r-build-system)
     (inputs
@@ -35234,14 +36100,14 @@ fully reproducible.")
 (define-public r-paws-common
   (package
     (name "r-paws-common")
-    (version "0.5.3")
+    (version "0.5.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.common" version))
        (sha256
         (base32
-         "090csb0wjnsfhkphws5anrnml18y1k54yi48lxav8wp5kqj4wlb6"))))
+         "06iqh38xmq9zdqd07kayxqfy903lh62k7yp7b0kv6qsyazpz7krq"))))
     (properties `((upstream-name . "paws.common")))
     (build-system r-build-system)
     (propagated-inputs
@@ -35265,14 +36131,14 @@ Service (S3).")
 (define-public r-paws-customer-engagement
   (package
     (name "r-paws-customer-engagement")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.customer.engagement" version))
        (sha256
         (base32
-         "0ac6hzn4ilfjhzdmc9x80999fl18cz16mky31qd3y09m93w2xkdj"))))
+         "12viq760wd5b7dl800075hvm8jy19q112m6rlgyz85znwbiam2qj"))))
     (properties
      `((upstream-name . "paws.customer.engagement")))
     (build-system r-build-system)
@@ -35289,14 +36155,14 @@ service, and more.")
 (define-public r-paws-cost-management
   (package
     (name "r-paws-cost-management")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.cost.management" version))
        (sha256
         (base32
-         "0in4f8ygw5g2v6vl3lz2y0v51llglh8b1ymbd04d54xxlgn83knh"))))
+         "0rpl6dfv6xa7ysqhhskcj7kix4s087yrxav9n33730hk1gjf1g62"))))
     (properties
      `((upstream-name . "paws.cost.management")))
     (build-system r-build-system)
@@ -35313,13 +36179,13 @@ more.")
 (define-public r-paws-developer-tools
   (package
     (name "r-paws-developer-tools")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.developer.tools" version))
        (sha256
-        (base32 "16gb8g8s67al7qdd95fbigxqkih9a9p7slkyf3cga42wb6miiby2"))))
+        (base32 "0d1j9wilwx2harvslg9vs6k8w7631pqgr1c8346wzjk5387fpsac"))))
     (properties `((upstream-name . "paws.developer.tools")))
     (build-system r-build-system)
     (propagated-inputs
@@ -35335,13 +36201,13 @@ deployment, and more.")
 (define-public r-paws-end-user-computing
   (package
     (name "r-paws-end-user-computing")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.end.user.computing" version))
        (sha256
-        (base32 "1xxsz86nx128sizym9np8vldzkbym0p3i6vcy94kq1y0cylaicv3"))))
+        (base32 "0709jwrihggqsp3p99sqldsfk7bww3pgl9x0akrnm60daqxhhyqv"))))
     (properties `((upstream-name . "paws.end.user.computing")))
     (build-system r-build-system)
     (propagated-inputs
@@ -35357,14 +36223,14 @@ and more.")
 (define-public r-paws-application-integration
   (package
     (name "r-paws-application-integration")
-    (version "0.1.13")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.application.integration" version))
        (sha256
         (base32
-         "0qxrjmqywp4ychjwfbripfin4vlv0k041ycmr3pjr6p3dg910i3w"))))
+         "0m79k4q3yalzym4alv4h1mggr9sf8sc1vk1islx5j63s2p6m4j3g"))))
     (properties
      `((upstream-name . "paws.application.integration")))
     (build-system r-build-system)
@@ -35381,14 +36247,14 @@ Simple Notification Service (SNS) publish/subscribe messaging, and more.")
 (define-public r-paws-security-identity
   (package
     (name "r-paws-security-identity")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.security.identity" version))
        (sha256
         (base32
-         "092lz2ipn5iqr593x7ra8c0bj64yf6315mdc3llgwrjyb4vfxif9"))))
+         "0rnws1d8wy3nhg2fyidpa21sfbz3r7jalrklnx6l8s92jyycmhbd"))))
     (properties
      `((upstream-name . "paws.security.identity")))
     (build-system r-build-system)
@@ -35406,14 +36272,14 @@ more.")
 (define-public r-paws-analytics
   (package
     (name "r-paws-analytics")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.analytics" version))
        (sha256
         (base32
-         "04gnaxmj21l312xkrsd9bisi0bz9h6h5fyhwlqylcxi077z1yb2g"))))
+         "1ixgrcfixx7h17wryml63n28ldgxi2srqw3bqglws54h5acgqza9"))))
     (properties
      `((upstream-name . "paws.analytics")))
     (build-system r-build-system)
@@ -35430,14 +36296,14 @@ Elasticsearch search engine, and more.")
 (define-public r-paws-machine-learning
   (package
     (name "r-paws-machine-learning")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.machine.learning" version))
        (sha256
         (base32
-         "01w2y5952pk50xjbzby2pc51xrkrzjpfxbmii1b10cl2xgzfkxsa"))))
+         "0nmxb53x0vsd2g69qnxxs4hapcbg53r9b26cdkhpmj6ijj7v1hh3"))))
     (properties
      `((upstream-name . "paws.machine.learning")))
     (build-system r-build-system)
@@ -35454,14 +36320,14 @@ natural language processing, speech recognition, translation, and more.")
 (define-public r-paws-management
   (package
     (name "r-paws-management")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.management" version))
        (sha256
         (base32
-         "09k7wg0jlj40zs2yb3vldffpkdcjg7ap98n7c5lxr5plpca08swg"))))
+         "1hdjgbrfrhrh9ss3lhnsjd2qpz22mrb95qvdcfngz2i8aa73hmpg"))))
     (properties
      `((upstream-name . "paws.management")))
     (build-system r-build-system)
@@ -35478,14 +36344,14 @@ monitoring, Auto Scaling for automatically scaling resources, and more.")
 (define-public r-paws-networking
   (package
     (name "r-paws-networking")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.networking" version))
        (sha256
         (base32
-         "02hxaa5nlj70mdggh379ij3fn09xm8h5ldzsyf45c342prpl6zwj"))))
+         "1fyr236pk6pyc6qck8i8mn855wxlbcmb40mnwmhaqjfxy503jjh7"))))
     (properties
      `((upstream-name . "paws.networking")))
     (build-system r-build-system)
@@ -35526,14 +36392,14 @@ database, and more.")
 (define-public r-paws-storage
   (package
     (name "r-paws-storage")
-    (version "0.1.12")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.storage" version))
        (sha256
         (base32
-         "06m887vpqp5d6k3zxdlga599dsv8v3rladk7xqaxqnld1f17am04"))))
+         "1yqd1a1c0m978x1ngk39x7sb0glmcy855nw7m1wbgn2mxma0q3li"))))
     (properties `((upstream-name . "paws.storage")))
     (build-system r-build-system)
     (propagated-inputs
@@ -35548,14 +36414,14 @@ services, including Simple Storage Service (S3).")
 (define-public r-paws-compute
   (package
     (name "r-paws-compute")
-    (version "0.1.13")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "paws.compute" version))
        (sha256
         (base32
-         "1s7g4y2h763xf32p08drs3ygkfqb2zjikkgxb7yl91gk13zp7kjm"))))
+         "10bfcwsriyl73mp3wi9kvn6msy1g4ci71jmpv61bcqngp9qmv4wg"))))
     (properties `((upstream-name . "paws.compute")))
     (build-system r-build-system)
     (propagated-inputs
@@ -35732,7 +36598,7 @@ large datasets.")
            r-mass
            r-nnet
            r-randomforest))
-    (home-page "http://www.sciviews.org/zooimage")
+    (home-page "https://www.sciviews.org/zooimage")
     (synopsis "Machine learning algorithms with unified interface")
     (description
      "This package provides a unified interface to various machine learning
@@ -35765,7 +36631,7 @@ algorithms.  Confusion matrices are provided too.")
            r-svdialogs
            r-svmisc
            r-tiff))
-    (home-page "http://www.sciviews.org/zooimage")
+    (home-page "https://www.sciviews.org/zooimage")
     (synopsis "Analysis of numerical plankton images")
     (description
      "This package provides a solution for analyzing digital images of
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index a099c274b4..a2e4706255 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
-;;; Copyright © 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -17761,6 +17761,26 @@ from macros.")
 @code{Cargo.toml}.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-downcast-0.11
+  (package
+    (name "rust-downcast")
+    (version "0.11.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "downcast" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1wa78ahlc57wmqyq2ncr80l7plrkgz57xsg7kfzgpcnqac8gld8l"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/fkoep/downcast-rs")
+    (synopsis
+     "Trait for downcasting trait objects back to their original types")
+    (description
+     "This package provides a trait, and utilities, for downcasting trait
+objects back to their original types.  The same as the rust-downcast-rs crate.")
+    (license license:expat)))
+
 (define-public rust-downcast-rs-1
   (package
     (name "rust-downcast-rs")
@@ -26033,6 +26053,30 @@ Hash-based Message Authentication Code algorithm} for SHA1.")
      "This package provides a library for HTML entity encoding and decoding.")
     (license (list license:asl2.0 license:expat license:mpl2.0))))
 
+(define-public rust-html-escape-0.2
+  (package
+    (name "rust-html-escape")
+    (version "0.2.12")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "html-escape" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "01f2v3c6j2rk5h2lhdbh62j07cm1fvzqw4vplj2sms83jpx5qc8m"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-utf8-width" ,rust-utf8-width-0.1))
+       #:cargo-development-inputs
+       (("rust-bencher" ,rust-bencher-0.1))))
+    (home-page "https://magiclen.org/html-escape")
+    (synopsis "Library for encoding and escaping special characters in HTML")
+    (description
+     "This package provides a library for encoding and escaping special
+characters in HTML, decoding and unescaping HTML entities as well.")
+    (license license:expat)))
+
 (define-public rust-hts-sys-2
   (package
     (name "rust-hts-sys")
@@ -33689,6 +33733,92 @@ IOCP and Async I/O abstractions.")
        #:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.3))))))
 
+(define-public rust-mockall-0.11
+  (package
+    (name "rust-mockall")
+    (version "0.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "mockall" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0k3g3xxf195vsnzmwza047dv89zlg6h5yj5774wjlndgpdvf8han"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f          ; Not all files included.
+       #:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-downcast" ,rust-downcast-0.11)
+        ("rust-fragile" ,rust-fragile-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-mockall-derive" ,rust-mockall-derive-0.11)
+        ("rust-predicates" ,rust-predicates-2)
+        ("rust-predicates-tree" ,rust-predicates-tree-1))
+       #:cargo-development-inputs
+       (("rust-async-trait" ,rust-async-trait-0.1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-mockall-double" ,rust-mockall-double-0.3)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-tracing" ,rust-tracing-0.1))))
+    (home-page "https://github.com/asomers/mockall")
+    (synopsis "Mock object library for Rust")
+    (description
+     "Mockall is a rich mocking library with a terse and ergonomic interface.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-mockall-derive-0.11
+  (package
+    (name "rust-mockall-derive")
+    (version "0.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "mockall-derive" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1ixhmsrg5ky4b2jlvbxhlpr3mbv7frd6wr8msm005vijb5rmcb96"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-pretty-assertions" ,rust-pretty-assertions-0.7))))
+    (home-page "https://github.com/asomers/mockall")
+    (synopsis "Procedural macros for the Mockall crate")
+    (description
+     "This package procides procedural macros for the Mockall crate.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-mockall-double-0.3
+  (package
+    (name "rust-mockall-double")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "mockall-double" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1xk6hjr7m73zly4hg3zmma437vqvrwnjxy2wfxy1hxbk52xwfwdf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-cfg-if" ,rust-cfg-if-1)
+                       ("rust-proc-macro2" ,rust-proc-macro2-1)
+                       ("rust-quote" ,rust-quote-1)
+                       ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/asomers/mockall")
+    (synopsis "Double test adapter that works well with Mockall")
+    (description
+     "This crate makes it even easier to use mocking by providing a way to
+select the mock struct at compile time.  Used with the Mockall crate.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-model-0.1
   (package
     (name "rust-model")
@@ -35286,7 +35416,7 @@ structures.")
         ("rust-time" ,rust-time-0.1)
         ("rust-typemap" ,rust-typemap-0.3)
         ("rust-url" ,rust-url-1))))
-    (home-page "http://nickel-org.github.io/")
+    (home-page "https://nickel-org.github.io/")
     (synopsis "Web application framework for Rust")
     (description
      "@code{nickel.rs} is a simple and lightweight foundation for web
@@ -35384,17 +35514,17 @@ nitrokey crate and others using it.")
 nitrokey-test crate.")
     (license license:gpl3+)))
 
-(define-public rust-nix-0.24
+(define-public rust-nix-0.26
   (package
     (name "rust-nix")
-    (version "0.24.2")
+    (version "0.26.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nix" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1z35n1bhzslr7zawy2c0fl90jjy9l5b3lnsidls3908vfk0xnp0r"))))
+        (base32 "155610n6bp37sqg7p0qihzi0jnvqkpqc40nyik89frbc6lfqv9a6"))))
     (build-system cargo-build-system)
     (arguments
      (list #:skip-build? #t
@@ -35402,7 +35532,7 @@ nitrokey-test crate.")
            `(("rust-bitflags" ,rust-bitflags-1)
              ("rust-cfg-if" ,rust-cfg-if-1)
              ("rust-libc" ,rust-libc-0.2)
-             ("rust-memoffset" ,rust-memoffset-0.6))))
+             ("rust-memoffset" ,rust-memoffset-0.7))))
     (home-page "https://github.com/nix-rust/nix")
     (synopsis "Rust friendly bindings to *nix APIs")
     (description
@@ -35411,6 +35541,26 @@ The goal is to not provide a 100% unified interface, but to unify what can be
 while still providing platform specific APIs.")
     (license license:expat)))
 
+(define-public rust-nix-0.24
+  (package
+    (inherit rust-nix-0.26)
+    (name "rust-nix")
+    (version "0.24.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1z35n1bhzslr7zawy2c0fl90jjy9l5b3lnsidls3908vfk0xnp0r"))))
+    (arguments
+     (list #:skip-build? #t
+           #:cargo-inputs
+           `(("rust-bitflags" ,rust-bitflags-1)
+             ("rust-cfg-if" ,rust-cfg-if-1)
+             ("rust-libc" ,rust-libc-0.2)
+             ("rust-memoffset" ,rust-memoffset-0.6))))))
+
 (define-public rust-nix-0.23
   (package
     (inherit rust-nix-0.24)
@@ -43105,6 +43255,80 @@ language.")
 language.")
     (license license:asl2.0)))
 
+;; It's recommended that rust-protobuf, rust-protobuf-codegen
+;; and rust-probuf-codegen-pure be the same version
+(define-public rust-protobuf-2
+  (package
+    (name "rust-protobuf")
+    (version "2.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "protobuf" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "11bl8hf522s9mbkckivnn9n8s3ss4g41w6jmfdsswmr5adqd71lf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f          ; missing files in the release tarball.
+       #:cargo-inputs
+       (("rust-bytes" ,rust-bytes-0.5)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1))))
+    (home-page "https://github.com/stepancheg/rust-protobuf/")
+    (synopsis "Rust implementation of Google protocol buffers")
+    (description
+     "This package provides a library to read and write protocol buffer's data.")
+    (license license:expat)))
+
+;; It's recommended that rust-protobuf, rust-protobuf-codegen
+;; and rust-probuf-codegen-pure be the same version
+(define-public rust-protobuf-codegen-2
+  (package
+    (name "rust-protobuf-codegen")
+    (version "2.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "protobuf-codegen" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "031bx325lsgcx7wc76vc2cqph6q0b34jgc8nz0g2rkwcfnx3n4fy"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-protobuf" ,rust-protobuf-2))))
+    (home-page "https://github.com/stepancheg/rust-protobuf/")
+    (synopsis "Code generator for rust-protobuf")
+    (description
+     "This package provides a code generator for rust-protobuf.  It includes a
+library to invoke programmatically (e.g. from @code{build.rs}) and
+@code{protoc-gen-rust} binary.")
+    (license license:expat)))
+
+;; It's recommended that rust-protobuf, rust-protobuf-codegen
+;; and rust-probuf-codegen-pure be the same version
+(define-public rust-protobuf-codegen-pure-2
+  (package
+    (name "rust-protobuf-codegen-pure")
+    (version "2.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "protobuf-codegen-pure" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0h34gfqlb7bqmgqv1mfgy5wk35z5r2h5ki3p3pdcmw1vqzmly6id"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-protobuf" ,rust-protobuf-2)
+        ("rust-protobuf-codegen" ,rust-protobuf-codegen-2))))
+    (home-page "https://github.com/stepancheg/rust-protobuf/")
+    (synopsis "Pure-rust codegen for protobuf using protobuf-parser")
+    (description "This package provides a pure-rust codegen for protobuf
+using protobuf-parser.")
+    (license license:expat)))
+
 (define-public rust-psl-2
   (package
     (name "rust-psl")
@@ -53909,6 +54133,28 @@ Unicode strings.")
 I/O programming.")
     (license license:expat)))
 
+(define-public rust-smallbitvec-2
+  (package
+    (name "rust-smallbitvec")
+    (version "2.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "smallbitvec" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0plrbldsjpwip3afbzd8fgrnvdhizcg5z4ncfqs4q6x4qjflzkkm"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-bit-vec" ,rust-bit-vec-0.4)
+        ("rust-rand" ,rust-rand-0.4))))
+    (home-page "https://github.com/servo/smallbitvec")
+    (synopsis "Bit vector optimized for size and inline storage")
+    (description "This package provides a bit vector optimized for size and
+inline storage.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-smallvec-1
   (package
     (name "rust-smallvec")
@@ -56062,7 +56308,7 @@ and Jaro-Winkler.")
 (define-public rust-structopt-0.3
   (package
     (name "rust-structopt")
-    (version "0.3.21")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -56071,14 +56317,27 @@ and Jaro-Winkler.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "136j0lvjmpv5syi751vxg8vb30gfyv4k81x8d18kxrj6xvbsqxsj"))))
+         "043sg3qxllann6q9i71d05qp3q13scmcvhxhd950ka2v8ij5qsqc"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-structopt-derive" ,rust-structopt-derive-0.4)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-clap" ,rust-clap-2))))
+        ("rust-paw" ,rust-paw-1)
+        ("rust-clap" ,rust-clap-2))
+       #:cargo-development-inputs
+       (("rust-strum" ,rust-strum-0.21)
+        ("rust-trybuild" ,rust-trybuild-1)
+        ("rust-rustversion" ,rust-rustversion-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fixup-cargo-toml
+           (lambda _
+             (substitute* "Cargo.toml"
+               ;; feature does not exist
+               (("lints.*") "")
+               (("2.33") ,(package-version rust-clap-2))))))))
     (home-page "https://github.com/TeXitoi/structopt")
     (synopsis "Parse command line argument by defining a struct")
     (description
@@ -56113,7 +56372,7 @@ struct.")
 (define-public rust-structopt-derive-0.4
   (package
    (name "rust-structopt-derive")
-   (version "0.4.14")
+   (version "0.4.18")
    (source
     (origin
      (method url-fetch)
@@ -56122,7 +56381,7 @@ struct.")
       (string-append name "-" version ".tar.gz"))
      (sha256
       (base32
-       "143gjwvz3s86hwp070km83y25n8kqp5f01kb1dr19f4ilkywvaav"))))
+       "1q5gcigmvw0cinjxzpyrkflliq5r1ivljmrvfrl3phcwgwraxdfw"))))
    (build-system cargo-build-system)
    (arguments
     `(#:skip-build? #t
@@ -59407,7 +59666,7 @@ fixed set of worker threads.")
         ("rust-log" ,rust-log-0.4)
         ("rust-ordered-float" ,rust-ordered-float-1)
         ("rust-threadpool" ,rust-threadpool-1))))
-    (home-page "http://thrift.apache.org")
+    (home-page "https://thrift.apache.org")
     (synopsis "Rust bindings for the Apache Thrift RPC system")
     (description
      "This crate provides Rust bindings for the Apache Thrift RPC system.")
@@ -62512,7 +62771,7 @@ etc. distance calculations and string search.")
         ("rust-trust-dns-rustls" ,rust-trust-dns-rustls-0.20)
         ("rust-webpki" ,rust-webpki-0.21)
         ("rust-webpki-roots" ,rust-webpki-roots-0.21))))
-    (home-page "http://www.trust-dns.org/index.html")
+    (home-page "https://www.trust-dns.org/index.html")
     (synopsis "DNS over HTTPS extension for the Trust-DNS client")
     (description
      "Trust-DNS is a safe and secure DNS library.  This is an extension for
@@ -62646,7 +62905,7 @@ the Trust-DNS client to use DNS over HTTPS.")
         ("rust-tokio" ,rust-tokio-1)
         ("rust-tokio-native-tls" ,rust-tokio-native-tls-0.3)
         ("rust-trust-dns-proto" ,rust-trust-dns-proto-0.20))))
-    (home-page "http://www.trust-dns.org/index.html")
+    (home-page "https://www.trust-dns.org/index.html")
     (synopsis "native-tls extension for the Trust-DNS client")
     (description "Trust-DNS is a safe and secure DNS library.  This is an
 extension for the Trust-DNS client to use native-tls for TLS.")
@@ -62744,7 +63003,7 @@ extension for the Trust-DNS client to use native-tls for TLS.")
         ("rust-tokio" ,rust-tokio-1)
         ("rust-tokio-openssl" ,rust-tokio-openssl-0.6)
         ("rust-trust-dns-proto" ,rust-trust-dns-proto-0.20))))
-    (home-page "http://www.trust-dns.org/index.html")
+    (home-page "https://www.trust-dns.org/index.html")
     (synopsis "tokio-openssl extension for the Trust-DNS client")
     (description "Trust-DNS is a safe and secure DNS library.  This is an
 extension for the Trust-DNS client to use tokio-openssl for TLS.")
@@ -62862,7 +63121,7 @@ extension for the Trust-DNS client to use tokio-openssl for TLS.")
         ("rust-tokio" ,rust-tokio-1)
         ("rust-url" ,rust-url-2)
         ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2))))
-    (home-page "http://www.trust-dns.org/index.html")
+    (home-page "https://www.trust-dns.org/index.html")
     (synopsis "Safe and secure DNS library")
     (description
      "Trust-DNS is a safe and secure DNS library.  This is the foundational
@@ -63022,7 +63281,7 @@ DNS protocol library for all Trust-DNS projects.")
         ("rust-trust-dns-proto" ,rust-trust-dns-proto-0.20)
         ("rust-trust-dns-rustls" ,rust-trust-dns-rustls-0.20)
         ("rust-webpki-roots" ,rust-webpki-roots-0.21))))
-    (home-page "http://www.trust-dns.org/index.html")
+    (home-page "https://www.trust-dns.org/index.html")
     (synopsis "Safe and secure DNS library")
     (description
      "Trust-DNS is a safe and secure DNS library.  This Resolver library uses
@@ -63171,7 +63430,7 @@ other queries.")
         ("rust-tokio-rustls" ,rust-tokio-rustls-0.22)
         ("rust-trust-dns-proto" ,rust-trust-dns-proto-0.20)
         ("rust-webpki" ,rust-webpki-0.21))))
-    (home-page "http://www.trust-dns.org/index.html")
+    (home-page "https://www.trust-dns.org/index.html")
     (synopsis "rustls extension for the Trust-DNS client")
     (description
      "Trust-DNS is a safe and secure DNS library.  This is an extension for
@@ -63940,7 +64199,7 @@ panic-free alternative to @code{core::fmt}.")
         (("rust-criterion" ,rust-criterion-0.3)
          ("rust-num-bigint" ,rust-num-bigint-0.4)
          ("rust-rug" ,rust-rug-1))))
-    (home-page "http://parity.io")
+    (home-page "https://parity.io")
     (synopsis "Large, fixed-size integer arithmetic in Rust")
     (description "This package is a Rust library for large, fixed-size integer
 arithmetic.")
@@ -65676,7 +65935,11 @@ hardware registers.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1kz8svnqnxclllsgh0ck20rplw3qzp46b5v30yscnzrgw8vgahjg"))))
+         "1kz8svnqnxclllsgh0ck20rplw3qzp46b5v30yscnzrgw8vgahjg"))
+       (snippet
+        '(begin
+           (delete-file "vim10m_match")
+           (delete-file "vim10m_table")))))
     (arguments
      `(#:tests? #f      ; tests not included in release
        #:cargo-inputs
@@ -68003,7 +68266,7 @@ Read/Write streams as well as low-level in-memory encoding and decoding.")
        (("rust-linked-hash-map" ,rust-linked-hash-map-0.5))
        #:cargo-development-inputs
        (("rust-quickcheck" ,rust-quickcheck-0.9))))
-    (home-page "http://chyh1990.github.io/yaml-rust/")
+    (home-page "https://chyh1990.github.io/yaml-rust/")
     (synopsis "YAML 1.2 parser for Rust")
     (description "This package is a YAML 1.2 parser for Rust.")
     (license (list license:expat license:asl2.0))))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index add9a2f901..59548bac3e 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -38,7 +38,6 @@
   #:use-module (guix i18n)
   #: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 (ice-9 match)
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 19140587e2..60f8a28dd1 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -149,7 +149,7 @@
     (description "The libdecaf library is an implementation of elliptic curve
 cryptography using the Montgomery and Edwards curves Curve25519, Ed25519,
 Ed448-Goldilocks and Curve448, using the Decaf encoding.")
-    (home-page "http://ed448goldilocks.sourceforge.net/")
+    (home-page "https://ed448goldilocks.sourceforge.net/")
     (license (list license:expat        ;library
                    license:bsd-2))))    ;python bindings
 
@@ -1013,7 +1013,7 @@ using ctypes is included, and several other language bindings are available.")
                (base32
                 "0kx4a5mhmp73ljknl2lcccmw9z3f5y8lqw0ghaymzvln1984g75i"))))
     (build-system gnu-build-system)
-    (home-page "http://ccrypt.sourceforge.net")
+    (home-page "https://ccrypt.sourceforge.net")
     (synopsis "Command-line utility for encrypting and decrypting files and streams")
     (description "@command{ccrypt} is a utility for encrypting and decrypting
 files and streams.  It was designed as a replacement for the standard unix
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index cbd8334591..5791d4994a 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -687,6 +687,30 @@ should only be used as part of the Guix cups-pk-helper service.")
     (native-inputs
      (list perl pkg-config))))
 
+;;; TODO: Integrate in base hplip package on core-updates.
+(define-public hplip-next
+  (package
+    (inherit hplip)
+    (name "hplip")
+    (version "3.22.10")
+    (source (origin
+              (inherit (package-source hplip))
+              (uri (string-append "mirror://sourceforge/hplip/hplip/" version
+                                  "/hplip-" version ".tar.gz"))
+              (sha256
+               (base32
+                "09366v0x10l35bkda6s5ysh64qdf24givn2gxlyidr2kdcpkyg2k"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments hplip)
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            (add-after 'unpack 'fix-more-hard-coded-file-names
+              (lambda* (#:key outputs #:allow-other-keys)
+                (substitute* (find-files "." "\\.py$")
+                  (("/etc/hp/hplip.conf")
+                   (string-append (assoc-ref outputs "out")
+                                  "/etc/hp/hplip.conf")))))))))))
+
 (define-public hplip-minimal
   (package/inherit hplip
     (name "hplip-minimal")
@@ -862,7 +886,7 @@ HP@tie{}LaserJet, and possibly other printers.  See @file{README} for details.")
 (define-public epson-inkjet-printer-escpr
   (package
     (name "epson-inkjet-printer-escpr")
-    (version "1.7.22")
+    (version "1.7.24")
     ;; XXX: This currently works.  But it will break as soon as a newer
     ;; version is available since the URLs for older versions are not
     ;; preserved.  An alternative source will be added as soon as
@@ -870,11 +894,11 @@ HP@tie{}LaserJet, and possibly other printers.  See @file{README} for details.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://download3.ebz.epson.net/dsc/f/03/00/13/96/"
-                           "55/c6fced63098ae1ba104f11f572794fd558ffca29/"
-                           "epson-inkjet-printer-escpr-1.7.22-1lsb3.2.tar.gz"))
+       (uri (string-append "https://download3.ebz.epson.net/dsc/f/03/00/14/31/"
+                           "90/d2f5b28fcfaa0a1d1753eac5703aa5d88004ce06/"
+                           "epson-inkjet-printer-escpr-1.7.24-1lsb3.2.tar.gz"))
        (sha256
-        (base32 "0b359krhhjjw5hc4b0gqdqwrm6dzc263mdccfzgnyyq7znkyybqb"))))
+        (base32 "0bwff3p6d0xgghf3bicylbxkv9vxz3gjjbr0iafyxz23kalzz9qj"))))
     (build-system gnu-build-system)
     (arguments
      (list #:modules
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index 7a2a4cabfc..f8dc3ce692 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015, 2020, 2021, 2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
@@ -301,7 +301,7 @@ FILE and LDAP; in particular it supports HTTPS certificates, HTTP POST, HTTP
 PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies,
 user+password authentication, file transfer resume, http proxy tunneling and
 more!")
-    (home-page "http://www.curlpp.org")
+    (home-page "https://www.curlpp.org")
     (license license:expat)))
 
 (define-public h2c
@@ -334,7 +334,7 @@ curl to obtain exactly that HTTP request.")
 (define-public coeurl
   (package
     (name "coeurl")
-    (version "0.2.1")
+    (version "0.3.0")
     (source
      (origin
        (method git-fetch)
@@ -343,7 +343,7 @@ curl to obtain exactly that HTTP request.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0qbbrfs35zl0wl6x6jn4p9ncxgdm70a883cflvikkykx9n5k2lpq"))))
+        (base32 "1b435c2szwibm4i4r7mh22klyv9ncdkwkiy95p4xjfalsx4ripxh"))))
     (build-system meson-build-system)
     (native-inputs
      (list doctest pkg-config))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 34731da322..3ddd6ec0fa 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -178,8 +178,6 @@
   #:use-module (guix build-system qt)
   #:use-module (guix build-system ruby)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system scons)
-  #:use-module (guix build-system trivial)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
@@ -596,7 +594,7 @@ the API, and provides features such as:
      (list memcached python-pytest))
     (inputs
      (list libmemcached zlib cyrus-sasl))
-    (home-page "http://sendapatch.se/projects/pylibmc/")
+    (home-page "https://sendapatch.se/projects/pylibmc/")
     (synopsis "Python client for memcached")
     (description
      "@code{pylibmc} is a client in Python for memcached.  It is a wrapper
@@ -2346,7 +2344,7 @@ data sources.  Data sources include SQL Servers and any software with an ODBC
 Driver.")
    (license license:lgpl2.1+)
    ;; COPYING contains copy of lgpl2.1 - but copyright notices just say "LGPL"
-   (home-page "http://www.unixodbc.org")))
+   (home-page "https://www.unixodbc.org")))
 
 (define-public nanodbc
   (package
@@ -2670,7 +2668,7 @@ organized in hash table, B+ tree, or fixed-length array.")
              #t)))))
     (inputs
      (list lz4 zlib snappy))
-    (home-page "http://source.wiredtiger.com/")
+    (home-page "https://source.wiredtiger.com/")
     (synopsis "NoSQL data engine")
     (description
      "WiredTiger is an extensible platform for data management.  It supports
@@ -2863,7 +2861,7 @@ semantics.")
      "Libpqxx is a C++ library to enable user programs to communicate with the
 PostgreSQL database back-end.  The database back-end can be local or it may be
 on another machine, accessed via TCP/IP.")
-    (home-page "http://pqxx.org/")
+    (home-page "https://pqxx.org/")
     (license license:bsd-3)))
 
 (define-public go-go-etcd-io-bbolt
@@ -3192,7 +3190,7 @@ for ODBC.")
            pkg-config
            txt2man
            which))
-    (home-page "http://mdbtools.sourceforge.net/")
+    (home-page "https://mdbtools.sourceforge.net/")
     (synopsis "Read Microsoft Access databases")
     (description "MDB Tools is a set of tools and applications to read the
 proprietary MDB file format used in Microsoft's Access database package.  This
@@ -3356,7 +3354,7 @@ Memory-Mapped Database} (LMDB), a high-performance key-value store.")
      (list autoconf automake bison flex gperf libtool))
     (inputs
      (list openssl net-tools readline zlib))
-    (home-page "http://vos.openlinksw.com/owiki/wiki/VOS/")
+    (home-page "https://vos.openlinksw.com/owiki/wiki/VOS/")
     (synopsis "Multi-model database system")
     (description "Virtuoso is a scalable cross-platform server that combines
 relational, graph, and document data management with web application server
@@ -4685,7 +4683,7 @@ SQLAlchemy.")
 similar to the DBI/DBD layer in Perl.  Writing one generic set of code,
 programmers can leverage the power of multiple databases and multiple
 simultaneous database connections by using this framework.")
-    (home-page "http://libdbi.sourceforge.net/")
+    (home-page "https://libdbi.sourceforge.net/")
     (license license:lgpl2.1+)))
 
 (define-public libdbi-drivers
@@ -4756,7 +4754,7 @@ The drivers officially supported by @code{libdbi} are:
 @item PostgreSQL,
 @item SQLite.
 @end itemize")
-    (home-page "http://libdbi-drivers.sourceforge.net/")
+    (home-page "https://libdbi-drivers.sourceforge.net/")
     (license license:lgpl2.1+)))
 
 (define-public soci
@@ -4791,7 +4789,7 @@ The drivers officially supported by @code{libdbi} are:
     (description
      "SOCI is an abstraction layer for several database backends, including
 PostreSQL, SQLite, ODBC and MySQL.")
-    (home-page "http://soci.sourceforge.net/")
+    (home-page "https://soci.sourceforge.net/")
     (license license:boost1.0)))
 
 (define-public freetds
diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm
index d40051506f..9f4514a247 100644
--- a/gnu/packages/datastructures.scm
+++ b/gnu/packages/datastructures.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,56 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson))
 
+(define-public coucal
+  (let ((commit "73ada075553b7607d083037a87cb9c73b3683bfc")
+        (revision "1"))
+    (package
+      (name "coucal")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/xroche/coucal")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "01996vda3wj5ywpwg9yhysaq6cyi44xnkyhihbwwi43hrj1ic2vm"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'do-not-run-tests-early
+              (lambda _
+                (substitute* "Makefile"
+                  (("(all: ).*" _ lead) (string-append lead "gcc")))))
+            (add-after 'unpack 'remove-Werror
+              ;; Prevent "this statement may fall through
+              ;; [-Wimplicit-fallthrough=]" errors from "murmurhash3.h" file.
+              (lambda _
+                (substitute* "Makefile"
+                  (("-Werror ") ""))))
+            (delete 'configure)         ;no configure script
+            (replace 'install           ;no install target
+              (lambda _
+                (let ((doc (string-append #$output
+                                          "/share/doc/" #$name "-" #$version)))
+                  (install-file "README.md" doc))
+                (for-each (lambda (f) (install-file f #$output))
+                          (find-files "." "(coucal|murmurhash)"))))
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (invoke "make" "tests" "runtests")))))))
+      (home-page "https://github.com/xroche/coucal")
+      (synopsis "Cuckoo-hashing-based hashtable with stash area C library")
+      (description "Coucal is an implementation of the Cuckoo hashing
+algorithm with a stash area using by default the MurmurHash hash function.")
+      ;; Library is released under Expat terms, but the source includes
+      ;; "murmurhash3.h", which is placed in the public domain.
+      (license (list license:expat license:public-domain)))))
+
 (define-public gdsl
   (package
     (name "gdsl")
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index 4319d3a518..0fe137de7c 100644
--- a/gnu/packages/debian.scm
+++ b/gnu/packages/debian.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2020-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
@@ -89,7 +89,7 @@ contains the archive keys used for that.")
 (define-public debian-ports-archive-keyring
   (package
     (name "debian-ports-archive-keyring")
-    (version "2022.02.15")
+    (version "2023.02.01")
     (source
       (origin
         (method url-fetch)
@@ -98,7 +98,7 @@ contains the archive keys used for that.")
                             "/debian-ports-archive-keyring_" version ".tar.xz"))
         (sha256
          (base32
-          "096m45l7g8vbk67gwc6bmkzpx8mhn6xfglgrzlg9xkgcs5gxqyc0"))))
+          "1xq7i6plgfbf4drqdmmk1yija48x11jmhnk2av3cajn2cdhkw73s"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f              ; No test suite.
@@ -127,8 +127,7 @@ contains the archive keys used for that.")
                      (string-append "trusted.gpg/" (basename key ".key") ".gpg")
                      (lambda _
                        (apply invoke "gpg" (append gpg-options (list key))))))
-                 (find-files "active-keys"))
-               #t)))
+                 (find-files "active-keys")))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -138,8 +137,7 @@ contains the archive keys used for that.")
                (install-file "debian-ports-archive-keyring-removed.gpg" key)
                (for-each (lambda (file)
                            (install-file file apt))
-                         (find-files "trusted.gpg" "\\.gpg$")))
-             #t)))))
+                         (find-files "trusted.gpg" "\\.gpg$"))))))))
     (native-inputs
      (list gnupg))
     (home-page "https://tracker.debian.org/pkg/debian-ports-archive-keyring")
@@ -194,7 +192,7 @@ contains the archive keys used for that.")
 (define-public debootstrap
   (package
     (name "debootstrap")
-    (version "1.0.126")
+    (version "1.0.128")
     (source
       (origin
         (method git-fetch)
@@ -203,7 +201,7 @@ contains the archive keys used for that.")
               (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0hfx6k86kby4xf0xqskpllq00g159j4khh66hfi6dhcdb91dgyd7"))))
+         (base32 "0hc7xc6qvnmjlpf3j6bm25kf0j1ifvv5j7a0iljfmbag4idxc9jv"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -328,7 +326,7 @@ debian/copyright for more information.")))))
          #:phases (modify-phases %standard-phases (delete 'configure))))
       (inputs
        (list wget perl))
-      (home-page "http://apt-mirror.github.io/")
+      (home-page "https://apt-mirror.github.io/")
       (synopsis "Script for mirroring a Debian repository")
       (description
        "apt-mirror is a small tool that provides the ability to selectively
@@ -339,7 +337,7 @@ distributions such as Debian and Trisquel.")
 (define-public dpkg
   (package
     (name "dpkg")
-    (version "1.21.12")
+    (version "1.21.21")
     (source
       (origin
         (method git-fetch)
@@ -348,7 +346,7 @@ distributions such as Debian and Trisquel.")
                (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "08a72lhkgz4iiimdkqlmf58m31zrwqcs0741nbxxq1x3s9phc25m"))))
+         (base32 "0vgc5irrjyyb5y5hza2hbq3dgfylrxvfdzysw8zzlhgf4bhm69zq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 1c4f570fe4..154232ed50 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2022 Matthew James Kraai <kraai@ftbfs.org>
+;;; Copyright © 2023 Andy Tai <atai@atai.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -53,6 +54,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages golang)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages lesstif)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
@@ -70,6 +72,7 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages virtualization)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xorg)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
@@ -617,7 +620,7 @@ the position of the variable and allows you to modify its value.")
     (inputs
      (modify-inputs (package-inputs gnu-make)
        (prepend readline)))
-    (home-page "http://bashdb.sourceforge.net/remake/")
+    (home-page "https://bashdb.sourceforge.net/remake/")
     (description "Remake is an enhanced version of GNU Make that adds improved
 error reporting, better tracing, profiling, and a debugger.")
     (license license:gpl3+)))
@@ -834,7 +837,7 @@ engineering.")
 (define-public seer-gdb
   (package
     (name "seer-gdb")
-    (version "1.11")
+    (version "1.14")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -843,7 +846,7 @@ engineering.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0778573rixhdanmzp4slghpwgv7pm08n7cpa24rm3wrvs77ic3kb"))))
+                "16mz1c58jf1zrgjpxmp58bx8viyidhs1qg0y8ql2f07wgyy6zx33"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; Those are strangely manual
@@ -860,6 +863,36 @@ engineering.")
     ;; Note: Some icons in src/resources are creative commons 3.0 and/or 4.0.
     (license license:gpl3+)))
 
+(define-public ddd
+  (package
+    (name "ddd")
+    (version "3.3.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/ddd/ddd-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0p5nx387857w3v2jbgvps2p6mlm0chajcdw5sfrddcglsxkwvmis"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;tests require manual intervention
+           ;; Avoid "friend declaration specifies default arguments and isn’t
+           ;; a definition" errors.
+           #:configure-flags #~(list "CXXFLAGS=-fpermissive")))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list motif ncurses gdb))
+    (synopsis "Graphical front-end for GDB and other debuggers")
+    (description "GNU DDD, the Data Display Debugger, is a graphical front-end
+for command-line debuggers.  Many back-end debuggers are supported, notably
+the GNU debugger, GDB.  In addition to usual debugging features such as
+viewing the source files, DDD has additional graphical, interactive features
+to aid in debugging.")
+    (home-page "https://www.gnu.org/software/ddd/")
+    (license license:gpl3+)))
+
+
 (define-public delve
   (package
     (name "delve")
diff --git a/gnu/packages/dhall.scm b/gnu/packages/dhall.scm
index b406d89eb5..e84ee7647f 100644
--- a/gnu/packages/dhall.scm
+++ b/gnu/packages/dhall.scm
@@ -30,108 +30,76 @@
 (define-public dhall
   (package
     (name "dhall")
-    (version "1.39.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/dhall/dhall-"
-                           version ".tar.gz"))
-       (sha256
-        (base32 "1by2d84fbckspczddl4npfsf89q6nprmbg0i5g8yr1psp0fpl4ab"))))
+    (version "1.41.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "dhall" version))
+              (sha256
+               (base32
+                "14m5rrvkid76qnvg0l14xw1mnqclhip3gjrz20g1lp4fd5p056ka"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (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))
+    (properties '((upstream-name . "dhall")))
+    (inputs (list ghc-aeson
+                  ghc-aeson-pretty
+                  ghc-ansi-terminal
+                  ghc-atomic-write
+                  ghc-base16-bytestring
+                  ghc-case-insensitive
+                  ghc-cborg
+                  ghc-cborg-json
+                  ghc-contravariant
+                  ghc-data-fix
+                  ghc-diff
+                  ghc-dotgen
+                  ghc-either
+                  ghc-half
+                  ghc-hashable
+                  ghc-indexed-traversable
+                  ghc-lens-family-core
+                  ghc-megaparsec
+                  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-repline
+                  ghc-serialise
+                  ghc-scientific
+                  ghc-text-manipulate
+                  ghc-text-short
+                  ghc-th-lift-instances
+                  ghc-unordered-containers
+                  ghc-uri-encode
+                  ghc-vector
+                  ghc-cryptohash-sha256
+                  ghc-http-types
+                  ghc-http-client
+                  ghc-http-client-tls))
+    (native-inputs (list ghc-foldl
+                         ghc-generic-random
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-special-values
+                         ghc-spoon
+                         ghc-system-filepath
+                         ghc-tasty
+                         ghc-tasty-expected-failure
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-tasty-silver
+                         ghc-temporary
+                         ghc-turtle
+                         ghc-mockery
+                         ghc-doctest))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-network-tests
-           (lambda _
-             (with-directory-excursion "dhall-lang/tests"
-               (for-each
-                delete-file
-                '("import/success/customHeadersA.dhall"
-                  "import/success/noHeaderForwardingA.dhall"
-                  "import/success/unit/RemoteAsTextA.dhall"
-                  "import/success/unit/SimpleRemoteA.dhall"
-                  "import/success/unit/asLocation/RemoteChain1A.dhall"
-                  "import/success/unit/asLocation/RemoteChain2A.dhall"
-                  "import/success/unit/asLocation/RemoteChain3A.dhall"
-                  "import/success/unit/asLocation/RemoteChainEnvA.dhall"
-                  "import/success/unit/asLocation/RemoteChainMissingA.dhall"
-                  "type-inference/success/CacheImportsA.dhall"
-                  "type-inference/success/CacheImportsCanonicalizeA.dhall")))
-             (substitute* "src/Dhall/Tutorial.hs"
-               (((string-append
-                  "-- >>> input auto "
-                  "\"https://raw.githubusercontent.com/dhall-lang"
-                  "/dhall-haskell/18e4e9a18dc53271146df3ccf5b4177c3552236b/"
-                  "examples/True\" :: IO Bool"))
-                "")
-               (((string-append
-                  "-- >>> input auto "
-                  "\"False == "
-                  "https://raw.githubusercontent.com/dhall-lang"
-                  "/dhall-haskell/18e4e9a18dc53271146df3ccf5b4177c3552236b/"
-                  "examples/True\" :: IO Bool"))
-                ""))
-             #t)))))
-    (home-page "https://dhall-lang.org/")
+     `(#:tests? #f ; Tries to access httpbin.org
+       #:cabal-revision ("4"
+                         "0innb3cn98ynb8bd83jdyrm64ij7wcvajg5qcwzdwbyzpr62anfx")))
+    (home-page "http://hackage.haskell.org/package/dhall")
     (synopsis "Configuration language guaranteed to terminate")
     (description
      "Dhall is an explicitly typed configuration language that is not Turing
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 7024937672..ea7ba538e8 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2021 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2020-2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2020-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2017, 2018, 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -239,7 +239,7 @@ and a Python library.")
 (define-public translate-shell
   (package
     (name "translate-shell")
-    (version "0.9.7")
+    (version "0.9.7.1")
     (source
       (origin
         (method git-fetch)
@@ -248,7 +248,7 @@ and a Python library.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "03p00v8g0y2xs3sza2r2kmhwiajaz9viab6xk9snw7chzw2cddiq"))))
+         (base32 "0jfrypcz963pfvwwaz2i0xvwp2909ldzp15v68mgd2mbqkqw9d90"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index f9fe9c5989..894a542171 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -527,7 +527,7 @@ and a @command{fsck.vfat} compatibility symlink for use in an initrd.")
        (sha256
         (base32 "1gmdxr36allrgap2j4dv238d8awkj327ww0jjwpjwrpbvfpyzjf4"))))
     (build-system gnu-build-system)
-    (home-page "http://sg.danny.cz/sg/sdparm.html")
+    (home-page "https://sg.danny.cz/sg/sdparm.html")
     (synopsis "Provide access to SCSI device parameters")
     (description
      "Sdparm reads and modifies SCSI device parameters.  These devices can be
@@ -562,7 +562,7 @@ and unloading removable media and some other housekeeping functions.")
                           (string-append "manprefix=")
                           (string-append "DESTDIR="
                                          (assoc-ref %outputs "out")))))
-    (home-page "http://idle3-tools.sourceforge.net")
+    (home-page "https://idle3-tools.sourceforge.net")
     (synopsis "Change or disable Western Digital hard drives' Idle3 timer")
     (description
      "Idle3-tools provides a utility to get, set, or disable the Idle3 timer
@@ -575,14 +575,14 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
 (define-public gparted
   (package
     (name "gparted")
-    (version "1.4.0")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gparted/gparted/gparted-"
                            version "/gparted-" version ".tar.gz"))
        (sha256
-        (base32 "1gl7g1lg72s63a9xlc4kcc6ksq6r7h8k9a6456xbxzak5rwklag5"))))
+        (base32 "1pm8jah6lakv83zm3isx4bgmi5xdwaqkjxmiv7qky224m4kfm59w"))))
     (build-system glib-or-gtk-build-system)
     (arguments
       ;; Tests require access to files outside the build container, such
@@ -1448,7 +1448,7 @@ reliably with @code{bmaptool} than with traditional tools, like @code{dd} or
      (list autoconf automake libtool pkg-config))
     (inputs
      (list cairo pango tokyocabinet ncurses))
-    (home-page "http://duc.zevv.nl")
+    (home-page "https://duc.zevv.nl")
     (synopsis "Library and suite of tools for inspecting disk usage")
     (description "Duc maintains a database of accumulated sizes of
 directories of the file system, and allows you to query this database with
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index 0684ccf36f..6fbab1f1ce 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -458,7 +458,7 @@ useful tools for testing Django applications and projects.")
            python-setuptools-scm
            python-pysolr
            python-whoosh))
-    (home-page "http://haystacksearch.org/")
+    (home-page "https://haystacksearch.org/")
     (synopsis "Pluggable search for Django")
     (description "Haystack provides modular search for Django.  It features a
 unified, familiar API that allows you to plug in different search backends
diff --git a/gnu/packages/djvu.scm b/gnu/packages/djvu.scm
index 245e5858cf..00066f82ea 100644
--- a/gnu/packages/djvu.scm
+++ b/gnu/packages/djvu.scm
@@ -85,7 +85,7 @@
              (substitute* "desktopfiles/Makefile.am"
                (("gzip") "gzip -n"))
              #t)))))
-    (home-page "http://djvu.sourceforge.net/")
+    (home-page "https://djvu.sourceforge.net/")
     (synopsis "Implementation of DjVu, the document format")
     (description "DjVuLibre is an implementation of DjVu,
 including viewers, browser plugins, decoders, simple encoders, and
@@ -124,7 +124,7 @@ utilities.")
              (for-each make-file-writable
                        (find-files "."))
              #t)))))
-    (home-page "http://djvu.sourceforge.net/djview4.html")
+    (home-page "https://djvu.sourceforge.net/djview4.html")
     (synopsis "Viewer for the DjVu image format")
     (description "DjView is a standalone viewer for DjVu files.
 
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 6eac4fa542..c15017e03f 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -19,6 +19,8 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Simon South <simon@simonsouth.net>
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2023 Hilton Chain <hako@ultrarare.space>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,6 +66,7 @@
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
@@ -81,6 +84,7 @@
   #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
@@ -290,7 +294,7 @@ prompt the user with the option to go with insecure DNS only.")
 (define-public dnsmasq
   (package
     (name "dnsmasq")
-    (version "2.88")
+    (version "2.89")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -298,7 +302,7 @@ prompt the user with the option to go with insecure DNS only.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1cy1zci6vyhzczy6ncc5m9d7zsnnzs9mmwd6pr9w0h03l7nlsm13"))))
+                "02dnxfnman38armn3sw56w80f9wb2vgm3qgm15crs2yg8q1j7g82"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config))
@@ -312,7 +316,7 @@ prompt the user with the option to go with insecure DNS only.")
                           (string-append "PKG_CONFIG=" ,(pkg-config-for-target))
                           "COPTS=\"-DHAVE_DBUS\"")
        #:tests? #f))                    ; no ‘check’ target
-    (home-page "http://www.thekelleys.org.uk/dnsmasq/doc.html")
+    (home-page "https://www.thekelleys.org.uk/dnsmasq/doc.html")
     (synopsis "Small caching DNS proxy and DHCP/TFTP server")
     (description
      "Dnsmasq is a light-weight DNS forwarder and DHCP server.  It is designed
@@ -333,14 +337,14 @@ and BOOTP/TFTP for network booting of diskless machines.")
     ;; When updating, check whether isc-dhcp's bundled copy should be as well.
     ;; The BIND release notes are available here:
     ;; https://www.isc.org/bind/
-    (version "9.16.37")
+    (version "9.16.38")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://ftp.isc.org/isc/bind9/" version
                            "/bind-" version ".tar.xz"))
        (sha256
-        (base32 "1az2y8zdpn6vfmx4xqnsh5znagcrsvkqa1hz3h8izzm24ban2ihf"))
+        (base32 "03y52iyc2g63lkk9x2vaizpr0jv27g1z6mcxnjw8m8l4kaflrx4d"))
        (patches
         (search-patches "bind-re-add-attr-constructor-priority.patch"))))
     (build-system gnu-build-system)
@@ -871,7 +875,7 @@ Extensions} (DNSSEC).")
 (define-public knot
   (package
     (name "knot")
-    (version "3.2.4")
+    (version "3.2.5")
     (source
      (origin
        (method git-fetch)
@@ -880,7 +884,7 @@ Extensions} (DNSSEC).")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0b6fnrdy5zqn3mnn5cl92j0m7k9l6hh4gnr92qpirqf54bl2lfm2"))
+        (base32 "0xhr6i5qq0yhxqj50hsm51lb1v5lj4vfkzdcsvh7lw8wg6j1d03b"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -1098,7 +1102,7 @@ LuaJIT, both a resolver library and a daemon.")
 (define-public ddclient
   (package
     (name "ddclient")
-    (version "3.9.1")
+    (version "3.10.0")
     (source
      (origin
        (method git-fetch)
@@ -1107,62 +1111,46 @@ LuaJIT, both a resolver library and a daemon.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hf377g4j9r9sac75xp17nk2h58mazswz4vkg4g2gl2yyhvzq91w"))))
-    (build-system trivial-build-system) ; no Makefile.PL
+        (base32 "0l87d72apwrg6ipc9gix5gv64d4hr1ykxmss8x4r8d8mgj6j8rf1"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; XXX: erroneous version value, this is fixed in master
+        #~(begin
+            (substitute* "configure.ac"
+              (("3.10.0_2") #$version))))
+       (patches (search-patches "ddclient-skip-test.patch"))))
+    (build-system gnu-build-system)
     (native-inputs
-     (list bash perl))
+     (list autoconf automake libtool
+           perl-test-warnings perl-test-mockmodule))
     (inputs
      (list inetutils ; logger
            net-tools
-           perl-data-validate-ip
+           bash-minimal                           ;for 'wrap-program'
+           perl
            perl-digest-sha1
-           perl-io-socket-ssl))
+           perl-io-socket-ssl
+           perl-io-socket-inet6  ;; XXX: this is likely to be removed in a future ddclient release
+                                 ;; https://github.com/ddclient/ddclient/issues/461
+           perl-json))
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match)
-                      (srfi srfi-26))
-         (setenv "PATH" (string-append
-                         (assoc-ref %build-inputs "bash") "/bin" ":"
-                         (assoc-ref %build-inputs "perl") "/bin"))
-
-         ;; Copy the (read-only) source into the (writable) build directory.
-         (copy-recursively (assoc-ref %build-inputs "source") ".")
-
-         ;; Install.
-         (let* ((out (assoc-ref %outputs "out"))
-                (bin (string-append out "/bin")))
-           (let ((file "ddclient"))
-             (substitute* file
-               (("/usr/bin/perl") (which "perl"))
-               ;; Strictly use ‘/etc/ddclient/ddclient.conf’.
-               (("\\$\\{program\\}\\.conf") "/etc/ddclient/ddclient.conf")
-               (("\\$etc\\$program.conf") "/etc/ddclient/ddclient.conf")
-               ;; Strictly use ‘/var/cache/ddclient/ddclient.cache’
-               (("\\$cachedir\\$program\\.cache")
-                "/var/cache/ddclient/ddclient.cache"))
-             (install-file file bin)
-             (wrap-program (string-append bin "/" file)
-               `("PATH" ":" =
-                 ("$PATH"
-                  ,@(map (lambda (input)
-                           (match input
-                                  ((name . store)
-                                   (string-append store "/bin"))))
-                         %build-inputs)))
-               `("PERL5LIB" ":" =
-                 ,(delete
-                   ""
-                   (map (match-lambda
-                         (((? (cut string-prefix? "perl-" <>) name) . dir)
-                          (string-append dir "/lib/perl5/site_perl"))
-                         (_ ""))
-                        %build-inputs)))))
-           (for-each (cut install-file <> (string-append out
-                                                         "/share/ddclient"))
-                     (find-files "." "sample.*$"))))))
+     (list
+      #:configure-flags #~(list "--localstatedir=/var")
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'install
+            (lambda _
+              ;; XXX: Do not create /var
+              (invoke "make" "localstatedir=/tmp/discard" "install")))
+          (add-after 'wrap 'wrap-ddclient
+            (lambda* (#:key inputs #:allow-other-keys)
+              (wrap-program (string-append #$output "/bin/ddclient")
+                `("PERL5LIB" ":" prefix ,(string-split (getenv "PERL5LIB") #\:))
+                `("PATH" prefix ,(map (lambda (x)
+                                        (string-append (assoc-ref inputs x) "/bin"))
+                                      '("inetutils" "net-tools")))))))))
+    (native-search-paths
+     (list $SSL_CERT_DIR $SSL_CERT_FILE))
     (home-page "https://ddclient.net/")
     (synopsis "Address updating utility for dynamic DNS services")
     (description "This package provides a client to update dynamic IP
@@ -1389,3 +1377,39 @@ interface.  It then calls all the helper scripts it knows about so it can
 configure the real @file{/etc/resolv.conf} and optionally any local
 nameservers other than libc.")
     (license license:bsd-2)))
+
+(define-public smartdns
+  (package
+    (name "smartdns")
+    (version "40")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pymumu/smartdns")
+                    (commit (string-append "Release" version))))
+              (file-name (git-file-name name version))
+              (modules '((guix build utils)))
+              (snippet '(substitute* "Makefile"
+                          ((".*SYSTEMDSYSTEMUNITDIR.*") "")))
+              (sha256
+               (base32
+                "0ibbj96s40xgk6q7dsgpx65rjkknl1pn7nca5fcbbhcm2m80nzjj"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ;no tests
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "DESTDIR=" #$output)
+                   "PREFIX=''")
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))))
+    (inputs (list openssl))
+    (home-page "https://github.com/pymumu/smartdns")
+    (synopsis "Local DNS server")
+    (description
+     "SmartDNS is a DNS server that accepts DNS query requests from local
+clients, obtains DNS query results from multiple upstream DNS servers, and
+returns the fastest access results to clients.")
+    (license license:gpl3+)))
+
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index f66ce4b959..c989c8e75e 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -588,7 +588,7 @@ the in DocBook SGML DTDs.")
                                           "/bin"))
                          '("libxslt" "texlive"
                            "imagemagick" "inkscape"))))))))))
-    (home-page "http://dblatex.sourceforge.net")
+    (home-page "https://dblatex.sourceforge.net")
     (synopsis "DocBook to LaTeX Publishing")
     (description
      "DocBook to LaTeX Publishing transforms your SGML/XML DocBook documents
@@ -774,7 +774,7 @@ Detect the differences in markup between two SGML files.
                (map (lambda (prog)
                       (symlink prog (string-append out "/bin/db2x_" prog)))
                     '("docbook2man" "docbook2texi"))))))))
-    (home-page "http://docbook2x.sourceforge.net")
+    (home-page "https://docbook2x.sourceforge.net")
     (synopsis "Convert DocBook to man page and Texinfo format")
     (description
      "docbook2X is a software package that converts DocBook documents into the
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index 7d109dc94c..44e9ddd2e8 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -724,3 +724,85 @@ containers.  It manages a single child process and ensures that any zombie
 processes produced from it are reaped and that signals are properly forwarded.
 Tini is integrated with Docker.")
     (license license:expat)))
+
+(define-public docker-registry
+  (package
+    (name "docker-registry")
+    (version "2.8.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/docker/distribution")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1w8zr97p2c62gm1lrdwqa704ivjsy25ylznrddbbpv63idwdbi9k"))))
+    (build-system go-build-system)
+    (arguments
+     (list
+      #:import-path "github.com/docker/distribution"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'chdir-to-src
+            (lambda _ (chdir "src/github.com/docker/distribution")))
+          (add-after 'chdir-to-src 'fix-versioning
+            (lambda _
+              ;; The Makefile use git to compute the version and the
+              ;; revision. This requires the .git directory that we don't have
+              ;; anymore in the unpacked source.
+              (substitute* "Makefile"
+                (("^VERSION=\\$\\(.*\\)")
+                 (string-append "VERSION=v" #$version))
+                ;; The revision originally used the git hash with .m appended
+                ;; if there was any local modifications.
+                (("^REVISION=\\$\\(.*\\)") "REVISION=0"))))
+          (replace 'build
+            (lambda _
+              (invoke "make" "binaries")))
+          (replace 'install
+            (lambda _
+              (let ((bin (string-append #$output "/bin")))
+                (mkdir-p bin)
+                (for-each
+                 (lambda (file)
+                   (install-file (string-append "bin/" file) bin))
+                 '("digest"
+                   "registry"
+                   "registry-api-descriptor-template")))
+              (let ((doc (string-append
+                          #$output "/share/doc/" #$name "-" #$version)))
+                (mkdir-p doc)
+                (for-each
+                 (lambda (file)
+                   (install-file file doc))
+                 '("BUILDING.md"
+                   "CONTRIBUTING.md"
+                   "LICENSE"
+                   "MAINTAINERS"
+                   "README.md"
+                   "ROADMAP.md"))
+                (copy-recursively "docs/" (string-append doc "/docs")))
+              (let ((examples
+                     (string-append
+                      #$output "/share/doc/" #$name "-" #$version
+                      "/registry-example-configs")))
+                (mkdir-p examples)
+                (for-each
+                 (lambda (file)
+                   (install-file (string-append "cmd/registry/" file) examples))
+                 '("config-cache.yml"
+                   "config-example.yml"
+                   "config-dev.yml")))))
+          (delete 'install-license-files))))
+    (home-page "https://github.com/docker/distribution")
+    (synopsis "Docker registry server and associated tools")
+    (description "The Docker registry server enable you to host your own
+docker registry. With it, there is also two other utilities:
+@itemize
+@item The digest utility is a tool that generates checksums compatibles with
+various docker manifest files.
+@item The registry-api-descriptor-template is a tool for generating API
+specifications from the docs/spec/api.md.tmpl file.
+@end itemize")
+    (license license:asl2.0)))
diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm
index 53e0135dfa..4cf3a2ca4c 100644
--- a/gnu/packages/documentation.scm
+++ b/gnu/packages/documentation.scm
@@ -363,7 +363,7 @@ additional metadata about the object to which the docstring belongs.")
            docbook-xml-4.2))
     (native-inputs
      (list intltool))
-    (home-page "http://scrollkeeper.sourceforge.net/")
+    (home-page "https://scrollkeeper.sourceforge.net/")
     (synopsis "Open Documentation Cataloging Project")
     (description
      "ScrollKeeper is a cataloging system for documentation.  It manages
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index b21fcfdc9a..8e6f2bbc09 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -200,7 +200,7 @@ with Microsoft Compiled HTML (CHM) files")
            python-pychm
            python-pycryptodome
            python-pygments
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-pyqtwebengine
            python-regex
            speech-dispatcher
@@ -246,7 +246,7 @@ tags = [\"WS_X11\"]")
                  (string-append "[tool.sip.project]
 sip-include-dirs = [\""
                                 #$(this-package-input
-                                   "python-pyqt-without-qtwebkit")
+                                   "python-pyqt")
                                 "/share/sip\"]")))
               (substitute* "src/calibre/ebooks/pdf/pdftohtml.py"
                 (("PDFTOHTML = 'pdftohtml'")
@@ -434,7 +434,7 @@ accessing and converting various ebook file formats.")
                (base32
                 "1f36dbq7nc77lln1by2n1yl050g9dc63viawhs3gc3169mavm36x"))))
     (build-system gnu-build-system)
-    (home-page "http://vimgadgets.sourceforge.net/liblinebreak/")
+    (home-page "https://vimgadgets.sourceforge.net/liblinebreak/")
     (synopsis "Library for detecting where linebreaks are allowed in text")
     (description "@code{liblinebreak} is an implementation of the line
 breaking algorithm as described in Unicode 6.0.0 Standard Annex 14,
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 68a25d5e9a..cc1ef25a83 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -449,7 +449,7 @@ specialized device.")
     (license license:gpl3)))
 
 (define-public openboard
-  ;; The last release builds from qtwebkit, which is planned for removal in
+  ;; The last release builds from qtwebkit, which has been removed from
   ;; Guix, so use the latest commit of the 1.7-dev branch, which builds with
   ;; qtwebengine-5.
   (let ((commit "39e914f600d26565706f0e5b6ea2482b8b4038c7") ;1.6.2-rc0311
@@ -582,7 +582,7 @@ a pen-tablet display and a beamer.")
 (define-public fet
   (package
     (name "fet")
-    (version "6.8.0")
+    (version "6.8.4")
     (source
      (origin
        (method url-fetch)
@@ -591,7 +591,7 @@ a pen-tablet display and a beamer.")
               (list (string-append directory base)
                     (string-append directory "old/" base))))
        (sha256
-        (base32 "12hbw87d6aza77615apvbkdgrn3gqdw0q9xp2pw64w2513z0a2jm"))))
+        (base32 "0bwm6j0drxkrmx8zbr78a7xbbzb1i9365qv93fkwjg9v92b9clhr"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -805,7 +805,7 @@ stored and user can review his performance in any time.")
        ("python-pyaudio" ,python-pyaudio)
        ;; `python-pyqtwebengine' must precede `python-pyqt' in PYTHONPATH.
        ("python-pyqtwebengine" ,python-pyqtwebengine)
-       ("python-pyqt" ,python-pyqt-without-qtwebkit)
+       ("python-pyqt" ,python-pyqt)
        ("python-requests" ,python-requests)
        ("python-send2trash" ,python-send2trash)
        ("python-sip" ,python-sip)
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index 15e7318926..98b71e041e 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -429,5 +429,5 @@ individual low-level driver modules.")
     (description "Xoscope is a digital oscilloscope that can acquire signals
 from ALSA, ESD, and COMEDI sources.  This package currently does not include
 support for ESD sources.")
-    (home-page "http://xoscope.sourceforge.net/")
+    (home-page "https://xoscope.sourceforge.net/")
     (license license:gpl2+)))
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
index 12c7e8301b..a74d294ae5 100644
--- a/gnu/packages/elm.scm
+++ b/gnu/packages/elm.scm
@@ -56,7 +56,8 @@
         (base32 "1rdg3xp3js9xadclk3cdypkscm5wahgsfmm4ldcw3xswzhw6ri8w"))
        (patches
         (search-patches "elm-reactor-static-files.patch"
-                        "elm-offline-package-registry.patch"))))
+                        "elm-offline-package-registry.patch"
+                        "elm-ghc9.2.patch"))))
     (build-system haskell-build-system)
     (arguments
      (list
@@ -70,7 +71,7 @@
           (add-before 'configure 'update-constraints
             (lambda _
               (substitute* "elm.cabal"
-                (("(ansi-terminal|containers|network|http-client|language-glsl)\\s+[^,]+" all dep)
+                (("(ansi-terminal|bytestring|containers|network|HTTP|http-client|language-glsl)\\s+[^,]+" all dep)
                  dep)))))))
     (inputs
      (list ghc-ansi-terminal
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index ba2916a463..3f7fcf4481 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -122,6 +122,7 @@
 ;;; Copyright © 2023 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2023 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2023 Ivan Vilata-i-Balaguer <ivan@selidor.net>
+;;; Copyright © 2022 Demis Balbach <db@minikn.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -152,8 +153,6 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system emacs)
-  #:use-module (guix build-system glib-or-gtk)
-  #:use-module (guix build-system perl)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
@@ -192,6 +191,7 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages tree-sitter)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages lesstif)
@@ -203,6 +203,7 @@
   #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages lsof)
   #:use-module (gnu packages lua)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages music)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages imagemagick)
@@ -562,10 +563,10 @@ configuration language which makes it trivial to write your own themes.")
       (license license:gpl3+))))
 
 (define-public emacs-inspector
-  (let ((commit "cab7ea001baa54eff6393f171e9ef1f69258d5ac")) ;version bump
+  (let ((commit "61fd1dc7e321525cca11a5a899c631f745b2cf31")) ;version bump
     (package
       (name "emacs-inspector")
-      (version "0.15")
+      (version "0.20")
       (source
        (origin
          (uri (git-reference
@@ -573,7 +574,7 @@ configuration language which makes it trivial to write your own themes.")
                (commit commit)))
          (method git-fetch)
          (sha256
-          (base32 "00gh9s3868w0zbhcsqsvq5wqgcfpa4j7sxqwzxcxb51cmrnhp30l"))
+          (base32 "18r7s36m75d5gnh8hcj0nkq3pr10z2v56jsgqsxz2lsyxl03c5sc"))
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (arguments
@@ -583,21 +584,7 @@ configuration language which makes it trivial to write your own themes.")
                                "-L" "."
                                "-l" "inspector-tests.el"
                                "-l" "tree-inspector-tests.el"
-                               "-f" "ert-run-tests-batch-and-exit")
-        #:phases
-        #~(modify-phases %standard-phases
-            (add-after 'unpack 'preserve-emacs-28-compatibility
-              ;; XXX: `cl-constantly' function is defined in "cl-lib" starting
-              ;; from Emacs 29+.  For now, replace it with its definition.
-              (lambda _
-                (substitute* "tree-inspector.el"
-                  (("cl-constantly") "lambda (_)"))))
-            (add-before 'check 'skip-failing-test
-              (lambda _
-                (substitute* "tree-inspector-tests.el"
-                  (("\\(ert-deftest inspector-tests--inspect-struct-test.*" all)
-                   (string-append all " (skip-unless nil)"))))))))
-      (native-inputs (list emacs-ert-runner))
+                               "-f" "ert-run-tests-batch-and-exit")))
       (propagated-inputs (list emacs-treeview))
       (home-page "https://github.com/mmontone/emacs-inspector")
       (synopsis "Inspection tool for Emacs Lisp objects")
@@ -1002,13 +989,13 @@ buffer.")
 (define-public emacs-project
   (package
     (name "emacs-project")
-    (version "0.9.6")
+    (version "0.9.8")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/project-" version ".tar"))
        (sha256
-        (base32 "11zxkfv756xsx6c87r66sm3k88hv5f623bp3hh1cp3j97hkd4b4d"))))
+        (base32 "0i1q9blvpj3bygjh98gv0kqn2rm01b8lqp9vra82sy3hzzj39pyx"))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-xref))
     (home-page "https://elpa.gnu.org/packages/project.html")
@@ -1167,8 +1154,8 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
       (license license:gpl2+))))
 
 (define-public emacs-magit
-  (let ((commit "c883fabe28a74d59d996cbef3f742874f3459bc0")
-        (revision "2"))
+  (let ((commit "2c91c080a8e2f35e3b036a2f6b8011fa897d23a1")
+        (revision "3"))
     (package
       (name "emacs-magit")
       (version (git-version "3.3.0" revision commit))
@@ -1180,7 +1167,7 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0cq2bgny5jac1n9h7hp0pkipil41sf079h2qh5rh7bj0085dc7wv"))))
+          (base32 "00ibnr76nfyf4fff3ga324d7dbqnsb4crlxgr94npiy8rsclaszp"))))
       (build-system emacs-build-system)
       (arguments
        (list
@@ -1609,7 +1596,7 @@ Apprentice and Sourcerer.")
 (define-public emacs-suneater-theme
   (package
     (name "emacs-suneater-theme")
-    (version "2.0.0")
+    (version "2.2.1")
     (source
      (origin
        (method git-fetch)
@@ -1618,7 +1605,7 @@ Apprentice and Sourcerer.")
              (commit version)))
        (sha256
         (base32
-         "0nlam8f8ly86y7p2dn10y9ixnm7bhmigsx7si4cjynh6aiyczyds"))
+         "1pnfiwnh2hr2hp4rxivx61j3hrmvwingjpfslnn535a3z9md0c4f"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (home-page "https://git.sr.ht/~plattfot/suneater-theme")
@@ -2346,7 +2333,7 @@ Distributed @acronym{Source Control Management, SCM} system.")
 (define-public emacs-alarm-clock
   (package
     (name "emacs-alarm-clock")
-    (version "1.0.3")
+    (version "1.0.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2355,7 +2342,7 @@ Distributed @acronym{Source Control Management, SCM} system.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02gr5scf50js00xa1chvd0j7agr8bys5madzk96fwg0s4gfdmyqa"))))
+                "0vdwvrbj79ylaz5ffa2bpfy4kzi1s6hf6bxijvyw7h8y6bd196av"))))
     (build-system emacs-build-system)
     (arguments
      (list #:include #~(cons "alarm.mp3" %default-include)
@@ -3113,7 +3100,7 @@ directories or regex patterns.")
      ;; `vm-autoloads', from the VM package, with is neither in Emacs nor
      ;; packaged in Guix.  So, don't bother for now.
      `(#:exclude '("bbdb-vm\\.el")))
-    (home-page "http://elpa.gnu.org/packages/bbdb.html")
+    (home-page "https://elpa.gnu.org/packages/bbdb.html")
     (synopsis "Contact management utility for Emacs")
     (description
      "BBDB is the Insidious Big Brother Database for GNU Emacs.  It provides
@@ -3508,14 +3495,14 @@ as a library for other Emacs packages.")
 (define-public emacs-auctex
   (package
     (name "emacs-auctex")
-    (version "13.1.8")
+    (version "13.1.9")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "auctex-" version ".tar"))
        (sha256
-        (base32 "0xw5gd8y5hy9h4c6isbk044n16gkcfafi2xyrs9ibvhrncrxph46"))))
+        (base32 "0dvf7ajfpi68823qv9vav3r1k04gc9bfq2ys3g1rhga2glxn7q9r"))))
     (build-system emacs-build-system)
     ;; We use 'emacs' because AUCTeX requires dbus at compile time
     ;; ('emacs-minimal' does not provide dbus).
@@ -3706,7 +3693,7 @@ Some of its major features include:
        (sha256
         (base32 "1i4hwam81p4dr0bk8257fkiz4xmv6knkjxj7a00fa35kgx5blpva"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/caps-lock.html")
+    (home-page "https://elpa.gnu.org/packages/caps-lock.html")
     (synopsis "Caps Lock as a minor mode")
     (description
      "This package provides a minor mode to emulate the behavior of a Caps
@@ -3767,7 +3754,7 @@ Its features are:
 (define-public emacs-citeproc-el
   (package
     (name "emacs-citeproc-el")
-    (version "0.9.2")
+    (version "0.9.3")
     (source
      (origin
        (method git-fetch)
@@ -3776,7 +3763,7 @@ Its features are:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0p9gch5iijia5pm9rzlv50xcad2g9mis9mc90nvh31in9xjcccpz"))))
+        (base32 "0md8pfmd0v9ipnxj1q13vv81hl90wf4rm46czbk1fdzkyf9js08m"))))
     (build-system emacs-build-system)
     (arguments
      `(#:emacs ,emacs))                 ;need libxml support
@@ -3799,7 +3786,7 @@ of bibliographic references.")
 (define-public emacs-corfu
   (package
     (name "emacs-corfu")
-    (version "0.34")
+    (version "0.35")
     (source
      (origin
        (method git-fetch)
@@ -3808,19 +3795,32 @@ of bibliographic references.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0cv0hcgsw4l8lk3gqwqlw91m4kc2dd80ndx06rg6czd22qdrd68m"))))
+        (base32 "1xqg796844wk6kvn3xw4bqlxn9ra6jlwk7rsc5gy4j77l0gwl441"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Move the extensions source files to the top level, which is included
-         ;; in the EMACSLOADPATH.
-         (add-after 'unpack 'move-source-files
-           (lambda _
-             (let ((el-files (find-files "./extensions" ".*\\.el$")))
-               (for-each (lambda (f)
-                           (rename-file f (basename f)))
-                         el-files)))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Move the extensions source files to the top level, which is included
+          ;; in the EMACSLOADPATH.
+          (add-after 'unpack 'move-source-files
+            (lambda _
+              (let ((el-files (find-files "./extensions" ".*\\.el$")))
+                (for-each (lambda (f)
+                            (rename-file f (basename f)))
+                          el-files))))
+          (add-after 'install 'makeinfo
+            (lambda* (#:key outputs #:allow-other-keys)
+              (invoke "emacs"
+                      "--batch"
+                      "--eval=(require 'ox-texinfo)"
+                      "--eval=(find-file \"README.org\")"
+                      "--eval=(org-texinfo-export-to-info)")
+              (install-file "corfu.info"
+                            (string-append #$output "/share/info")))))))
+    (native-inputs (list texinfo))
+    (propagated-inputs
+     (list emacs-compat))
     (home-page "https://github.com/minad/corfu")
     (synopsis "Completion overlay region function")
     (description
@@ -3856,7 +3856,7 @@ be regarded as @code{emacs-company-quickhelp} for @code{emacs-corfu}.")
 (define-public emacs-cape
   (package
     (name "emacs-cape")
-    (version "0.12")
+    (version "0.13")
     (source
      (origin
        (method git-fetch)
@@ -3865,8 +3865,24 @@ be regarded as @code{emacs-company-quickhelp} for @code{emacs-corfu}.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1855wi6ghi42ngjq3qyjr3p1nc57s257v9c98wqmb2n6vca5p2lp"))))
+        (base32 "0nvmqfp9rv2mrisyvwfr285yww22c6wb5by3s25c83ay2ivpi8ya"))))
     (build-system emacs-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'makeinfo
+            (lambda* (#:key outputs #:allow-other-keys)
+              (invoke "emacs"
+                      "--batch"
+                      "--eval=(require 'ox-texinfo)"
+                      "--eval=(find-file \"README.org\")"
+                      "--eval=(org-texinfo-export-to-info)")
+              (install-file "cape.info"
+                            (string-append #$output "/share/info")))))))
+    (native-inputs (list texinfo))
+    (propagated-inputs
+     (list emacs-compat))
     (home-page "https://github.com/minad/cape")
     (synopsis "Completion at point extensions for Emacs")
     (description
@@ -4331,7 +4347,7 @@ filters, new key bindings and faces.  It can be enabled by
                 (emacs-substitute-variables file
                   ("djvu-djview-command"
                    (search-input-file inputs "/bin/djview")))))))))
-    (home-page "http://elpa.gnu.org/packages/djvu.html")
+    (home-page "https://elpa.gnu.org/packages/djvu.html")
     (synopsis "Edit and view Djvu files via djvused")
     (description
      "This package is a front end for the command-line program djvused from
@@ -4389,7 +4405,7 @@ the previous session
        (sha256
         (base32 "0iydz8yz866krxv1qv32k88w4464xpymh0wxgrxv6nvniwvhvd0s"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/pabbrev.html")
+    (home-page "https://elpa.gnu.org/packages/pabbrev.html")
     (synopsis "Predictive abbreviation expansion")
     (description
      "The code provides a abbreviation expansion for Emacs.  It is
@@ -4401,6 +4417,53 @@ written text.  Unlike dynamic abbreviation, the text is analysed
 during idle time, while Emacs is doing nothing else.")
     (license license:gpl3+)))
 
+(define-public emacs-pasp-mode
+  (let ((commit "59385eb0e8ebcfc8c11dd811fb145d4b0fa3cc92")
+        (revision "1"))
+    (package
+     (name "emacs-pasp-mode")
+     (version (git-version "0.1.0" revision commit))
+     (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/santifa/pasp-mode")
+                    (commit commit)))
+              (patches
+               (search-patches "emacs-pasp-mode-quote-file-names.patch"))
+              (sha256
+               (base32
+                "1ar4vws3izzmir7m870mccci620ns3c5j26dcmwaxavhgw45wcmf"))))
+     (build-system emacs-build-system)
+     (arguments
+      (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'defconst-version
+             (lambda _
+               (emacs-batch-edit-file "pasp-mode.el"
+                 '(progn
+                   (search-forward-regexp "(defcustom pasp-mode-version")
+                   (forward-sexp)
+                   (kill-sexp)
+                   (backward-sexp)
+                   (beginning-of-line)
+                   (kill-sexp)
+                   (insert (format "(defconst emacs-pasp-version \"%s\" %s)"
+                                   #$version (cadr kill-ring)))
+                   (basic-save-buffer)))))
+           (add-after 'unpack 'hardcode-clingo
+             (lambda* (#:key inputs #:allow-other-keys)
+               (emacs-substitute-variables "pasp-mode.el"
+                 ("pasp-clingo-path"
+                  (search-input-file inputs "/bin/clingo"))))))))
+     (inputs (list clingo))
+     (home-page "https://github.com/santifa/pasp-mode")
+     (synopsis "Major mode for editing answer set programs")
+     (description
+      "This package provides a major mode for editing answer set programs,
+in particular ones that can be solved by @command{clingo}.")
+     (license license:gpl3+))))
+
 (define-public emacs-pdf-tools
   (package
     (name "emacs-pdf-tools")
@@ -4893,6 +4956,32 @@ them whenever another command is invoked.")
 a command.")
     (license license:gpl3+)))
 
+(define-public emacs-ligature
+  (let ((commit "3d1460470736777fd8329e4bb4ac359bf4f1460a")
+        (revision "1"))
+    (package
+      (name "emacs-ligature")
+      (version (git-version "1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mickeynp/ligature.el")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1rnx2mp8y1phnvfirmf4a6lza38dg2554r9igyijl9rgqpjax94d"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/mickeynp/ligature.el")
+      (synopsis "Typographic ligatures in Emacs")
+      (description
+       "This package maps ordinary graphemes (characters) to fancy
+ligatures, if both your version of Emacs and the font supports it.  With this
+package you can control where Emacs must display ligatures. That is useful if
+you only want a subset of the ligatures in certain major modes, for instance,
+or if you want to ensure that some modes have no ligatures at all.")
+      (license license:gpl3+))))
+
 (define-public emacs-olivetti
   (package
     (name "emacs-olivetti")
@@ -5228,7 +5317,7 @@ Markdown files.")
        (sha256
         (base32 "02imis1gxz90lah0b5n37j2hlsaw5igss11d85vpsm5d1bgw8j28"))))
     (build-system emacs-build-system)
-    (home-page "http://twmode.sourceforge.net")
+    (home-page "https://twmode.sourceforge.net")
     (synopsis "Emacs major mode for Twitter")
     (description
      "Twittering mode is an Emacs major mode for Twitter.
@@ -5787,7 +5876,7 @@ interface to pause.")
           (base32
             "1cxyxfdjg1dsmn1jrl6b7xy03xr42fb6vyggh27s4dk417ils6yg"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/filladapt.html")
+    (home-page "https://elpa.gnu.org/packages/filladapt.html")
     (synopsis "Adaptive fill for Emacs")
     (description
      "This package provides functions which enhance the default behavior of
@@ -6211,6 +6300,39 @@ literal programming in Emacs lisp.  It extends the Emacs load mechanism so
 Emacs can load Org files as Lisp source files directly.")
     (license license:gpl3+)))
 
+(define-public emacs-calc-currency
+  (let ((commit "7021d892ef38b01b875082aba4bae2517ce47ae6")
+        (revision "0"))
+    (package
+      (name "emacs-calc-currency")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jws85/calc-currency")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0y4m0hasg4ji6zfis3088hq90pm9998lnnh8yg9g8yqqaqpfizp8"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #t
+        #:test-command #~(list "emacs" "--batch"
+                               "-L" "."
+                               "-l" "test/calc-currency-init.el"
+                               "-l" "test/calc-currency-ecb-test.el"
+                               "-l" "test/calc-currency-oxr-test.el"
+                               ;; test/calc-currency-utils-test.el fails
+                               "-f" "ert-run-tests-batch-and-exit")))
+      (propagated-inputs (list emacs-f))
+      (home-page "https://github.com/jws85/calc-currency")
+      (synopsis "Add currency units to Emacs Calc")
+      (description "This package adds custom units to the units table in Emacs
+Calc by fetching exchange rates backends.")
+      (license license:gpl3+))))
+
 (define-public emacs-literate-calc-mode
   (let ((commit "ba7d22140a165b0fdd900a8d04916115ca6ab8ff")
         (revision "2"))
@@ -6545,6 +6667,35 @@ your cursor steps onto them, and re-enabled when the cursor leaves.")
 blocks with @code{org-babel} in @code{org-mode}.")
       (license license:gpl3+))))
 
+(define-public emacs-ob-go
+  (let ((commit "2067ed55f4c1d33a43cb3f6948609d240a8915f5")
+        (revision "0"))
+    (package
+      (name "emacs-ob-go")
+      (version (git-version "0.02" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pope/ob-go")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "069w9dymiv97cvlpzabf193nyw174r38lz5j11x23x956ladvpbw"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #t
+        #:test-command #~(list "emacs" "--batch" "-L" "."
+                               "--eval=(require 'ob-go)"
+                               "-l" "test-ob-go.el"
+                               "-f" "ert-run-tests-batch-and-exit")))
+      (home-page "https://github.com/pope/ob-go")
+      (synopsis "Org Babel support for evaluating Go code")
+      (description "@code{ob-go} enables Org Babel support for evaluating Go
+code.  It was created based on the usage of @code{ob-C}.")
+      (license license:gpl3+))))
+
 (define-public emacs-ob-restclient
   (let ((commit "1b021ce1c67c97fa1aa4d2c0816edb7add129e48"))
     (package
@@ -6975,6 +7126,32 @@ direct access to the SQLite C interface.  It only exposes a subset of the full
 SQLite C interface, but should satisfy most user's needs.")
     (license license:gpl3+)))
 
+(define-public emacs-pretty-speedbar
+  (let ((commit "56dc9f114fcc55843e182cde1fc9d7a14c261c6a")
+        (revision "0"))
+    (package
+      (name "emacs-pretty-speedbar")
+      (version (git-version "0.2" revision commit))
+      (source (origin
+                (uri (git-reference
+                      (url "https://github.com/kcyarn/pretty-speedbar")
+                      (commit commit)))
+                (method git-fetch)
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1hz67jhvg9n9d07lil6zqciqhh512k0fv54dl605p7vi704ma2ir"))))
+      (build-system emacs-build-system)
+      (propagated-inputs (list font-awesome))
+      (home-page "https://github.com/kcyarn/pretty-speedbar")
+      (synopsis "SVG icons for the Emacs Speedbar")
+      (description
+       "This package generates and implements appealing SVG icons for the
+Emacs Speedbar.  By default, it generates icons from the Font Awesome fontset.
+However, alternative fontsets may also be used, and the color of the icons may
+be customized.")
+      (license license:gpl3+))))
+
 (define-public emacs-sr-speedbar
   (let ((commit "77a83fb50f763a465c021eca7343243f465b4a47")
         (revision "0"))
@@ -7719,8 +7896,7 @@ Tracker as well as bug identifiers prepared for @code{bug-reference-mode}.")
      (list b4))
     (propagated-inputs
      (list emacs-elfeed
-           emacs-notmuch
-           emacs-transient))
+           emacs-notmuch))
     (home-page "https://docs.kyleam.com/piem")
     (synopsis "Glue for working with public-inbox archives")
     (description "This package provides a collection of Emacs libraries for
@@ -7882,14 +8058,14 @@ variables, and so on.  The mode also allows you to execute Tup commands.")
 (define-public emacs-compat
   (package
     (name "emacs-compat")
-    (version "29.1.3.1")
+    (version "29.1.3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/"
                                   "compat-" version ".tar"))
               (sha256
                (base32
-                "025idv426a2igaz7ijf5njjdi53zm5lmf345a1smv03iqx3fyj81"))))
+                "16j7b18iwsdynb2w4x2hficz0g060r52lsg5ly9kb20zfrq2yvw0"))))
     (build-system emacs-build-system)
     (home-page "https://git.sr.ht/~pkal/compat")
     (synopsis "Emacs Lisp Compatibility Library")
@@ -10276,25 +10452,40 @@ them easier to distinguish from other, less important buffers.")
     (license license:expat)))
 
 (define-public emacs-embark
-  (package
-    (name "emacs-embark")
-    (version "0.19")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/oantolin/embark")
-             (commit version)))
-       (sha256
-        (base32 "05c8p7rqv9p8p3nhgcjfr66hpsqazhnhwsnfdapxd9z7wrybqbg5"))
-       (file-name (git-file-name name version))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-avy emacs-consult))
-    (home-page "https://github.com/oantolin/embark")
-    (synopsis "Emacs mini-buffer actions rooted in keymaps")
-    (description
-     "This package provides a sort of right-click contextual menu for Emacs
+  (let ((commit "63013c2d3ef4dccc95167218ccbf4f401e489c3e")) ;version bump
+    (package
+      (name "emacs-embark")
+      (version "0.21.1")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/oantolin/embark")
+               (commit commit)))
+         (sha256
+          (base32 "14qp46wa1xgmb09jyk9cadj0b3m7bwspqnprk3zbfc6gw1r53235"))
+         (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'install 'makeinfo
+              (lambda* (#:key outputs #:allow-other-keys)
+                (invoke "emacs"
+                        "--batch"
+                        "--eval=(require 'ox-texinfo)"
+                        "--eval=(find-file \"README.org\")"
+                        "--eval=(org-texinfo-export-to-info)")
+                (install-file "embark.info"
+                              (string-append #$output "/share/info")))))))
+      (native-inputs (list texinfo))
+      (propagated-inputs
+       (list emacs-avy emacs-consult))
+      (home-page "https://github.com/oantolin/embark")
+      (synopsis "Emacs mini-buffer actions rooted in keymaps")
+      (description
+       "This package provides a sort of right-click contextual menu for Emacs
 offering you relevant @emph{actions} to use on a @emph{target} determined by
 the context.
 
@@ -10308,7 +10499,7 @@ get offered actions like deleting, copying, renaming, visiting in another
 window, running a shell command on the file, etc.  For buffers the actions
 include switching to or killing the buffer.  For package names the actions
 include installing, removing or visiting the homepage.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-prescient
   (package
@@ -10397,7 +10588,7 @@ style, or as multiple word prefixes.")
 (define-public emacs-consult
   (package
     (name "emacs-consult")
-    (version "0.31")
+    (version "0.32")
     (source
      (origin
        (method git-fetch)
@@ -10405,9 +10596,23 @@ style, or as multiple word prefixes.")
              (url "https://github.com/minad/consult")
              (commit version)))
        (sha256
-        (base32 "0ckyn4sdhc9dykbbdiin75jxza883dqa3g4mvf8qgsnzlqcjvvg6"))
+        (base32 "00cgc3bzj37319ds027rpj60wfk0c10cgp5xish2g1cq5ny74q32"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'makeinfo
+            (lambda* (#:key outputs #:allow-other-keys)
+              (invoke "emacs"
+                      "--batch"
+                      "--eval=(require 'ox-texinfo)"
+                      "--eval=(find-file \"README.org\")"
+                      "--eval=(org-texinfo-export-to-info)")
+              (install-file "consult.info"
+                            (string-append #$output "/share/info")))))))
+    (native-inputs (list texinfo))
     (propagated-inputs (list emacs-compat))
     (home-page "https://github.com/minad/consult")
     (synopsis "Consulting completing-read")
@@ -10623,7 +10828,7 @@ expansion and overwriting the marked region with a new snippet completion.")
 (define-public emacs-marginalia
   (package
     (name "emacs-marginalia")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin
        (method git-fetch)
@@ -10632,8 +10837,24 @@ expansion and overwriting the marked region with a new snippet completion.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rf4xgb82j1g6ybrzz7ak9hlk86d4r0hcprbqz05hvjnb8nyfa4c"))))
+        (base32 "0zi3q7dd9dgrhbz6ww270i43kkqs0ddk0vzs89mfvwa5pzw32d2q"))))
     (build-system emacs-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'makeinfo
+            (lambda* (#:key outputs #:allow-other-keys)
+              (invoke "emacs"
+                      "--batch"
+                      "--eval=(require 'ox-texinfo)"
+                      "--eval=(find-file \"README.org\")"
+                      "--eval=(org-texinfo-export-to-info)")
+              (install-file "marginalia.info"
+                            (string-append #$output "/share/info")))))))
+    (native-inputs (list texinfo))
+    (propagated-inputs
+     (list emacs-compat))
     (home-page "https://github.com/minad/marginalia")
     (synopsis "Marginalia in the minibuffer completions")
     (description
@@ -10893,14 +11114,14 @@ test tags.  It supports both interactive and non-interactive use.")
 (define-public emacs-load-relative
   (package
     (name "emacs-load-relative")
-    (version "1.3.1")
+    (version "1.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/load-relative-"
-                           version ".el"))
+                           version ".tar"))
        (sha256
-        (base32 "1m37scr82lqqy954fchjxrmdh4lngrl4d1yzxhp3yfjhsydizhrj"))))
+        (base32 "1fwa51jp0sq5l69y98l2zyj0iq9s6rj1rnqrmvncif61smma8fd7"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/rocky/emacs-load-relative")
     (synopsis "Emacs Lisp relative file loading related functions")
@@ -11084,7 +11305,7 @@ line program.")
        (sha256
         (base32 "03hcvpp6ykavidwn5x48gs986w1i5icvh7ks6p74pdaagpgw4jmk"))))
     (build-system emacs-build-system)
-    (home-page "http://rudel.sourceforge.net/")
+    (home-page "https://rudel.sourceforge.net/")
     (synopsis "Collaborative editing framework")
     (description
      "Rudel is a collaborative editing environment for GNU Emacs.  Its purpose
@@ -11737,7 +11958,6 @@ It is recommended to use @code{clojure-mode} with Paredit or Smartparens.")
                  (base32
                   "03db3l5klc20wgdaj44scgjfi2mha85bip07ls6pwbi039ls7rvx"))))
       (build-system emacs-build-system)
-      (propagated-inputs (list emacs-transient))
       (home-page "https://github.com/jpe90/emacs-clj-deps-new")
       (synopsis "Create Clojure projects from templates")
       (description
@@ -13392,7 +13612,7 @@ by Python's Jinja.")
 (define-public emacs-wgrep
   (package
     (name "emacs-wgrep")
-    (version "2.3.2")
+    (version "3.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -13401,8 +13621,15 @@ by Python's Jinja.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00cwqzb94jlq4mwgv8z7r3mn0a6mhq95z6j189kacq9g4473zh8d"))))
+                "16qg5dpg7hms5dmh92ksnjahf6010pw97ggi7sb0mfafd6iwps0a"))))
     (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? #true
+      #:test-command #~(list "emacs" "--batch" "-Q"
+                             "-l" "wgrep-test.el"
+                             "-f" "ert-run-tests-batch-and-exit")))
+    (native-inputs (list emacs-dash emacs-s))
     (home-page "https://github.com/mhayashi1120/Emacs-wgrep")
     (synopsis "Edit a grep buffer and apply those changes to the files")
     (description
@@ -13529,6 +13756,32 @@ as well as features for editing search results.")
      "This Emacs library provides a Helm interface for Projectile.")
     (license license:gpl3+)))
 
+(define-public emacs-hexrgb
+  (let ((commit "90e5f07f14bdb9966648977965094c75072691d4"))
+    (package
+      (name "emacs-hexrgb")
+      (version "0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/emacsmirror/hexrgb")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0y5l6hrzm5j2jfrm5jp5zrxhxgvf930m2k4nyvk0rllpx0i1271z"))))
+      (build-system emacs-build-system)
+      (home-page "https://www.emacswiki.org/emacs/hexrgb.el")
+      (synopsis "Emacs functions to convert color formats")
+      (description
+       "HexRGB provides functions for converting between RGB (red, green, blue)
+color components and HSV (hue, saturation, value) color components.  More
+accurately, it converts Emacs color components (whole numbers from 0 through
+65535), RGB and HSV floating-point components (0.0 through 1.0), Emacs
+color-name strings (such as \"blue\") and hex RGB color strings (such as
+\"#FC43A7912\").")
+      (license license:gpl2+))))
+
 (define-public emacs-taskrunner
   (let ((commit "3afd4a546d42339543d3d4e51b175fc3e82b3358")
         (revision "1"))
@@ -14203,7 +14456,7 @@ being deleted, changed, yanked, or pasted when using evil commands")
 (define-public emacs-goggles
   (package
     (name "emacs-goggles")
-    (version "0.2")
+    (version "0.3")
     (source
      (origin
        (method git-fetch)
@@ -14212,11 +14465,11 @@ being deleted, changed, yanked, or pasted when using evil commands")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15bqjmwfdqp2np6fln6xjyw59c5iddvzsyga0lvb8raa753cdh2k"))))
+        (base32 "0crll7r1qzpipimrahbfgk31f6rys58gzsbiwi65l0gqw49699sx"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/minad/goggles")
     (synopsis "Pulse modified region")
-    (description "Goggles highlights the modified region using pulse.
+    (description "Goggles highlights the modified region using Pulse.
 Currently the commands undo, yank, kill and delete are supported.")
     (license license:gpl3+)))
 
@@ -14261,11 +14514,19 @@ used for reverse direction.")
           (base32
            "0bqzch14whlmrcasakah3psrzswvkzd7mmi8hx5s64kfp29wbdhi"))))
       (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #t
+        #:test-command #~(list "make" "test")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-before 'check 'skip-failing-test
+              (lambda _
+                (substitute* "test/evil-owl-test.el"
+                  (("\\(ert-deftest evil-owl-test-mark-string.*" all)
+                   (string-append all " (skip-unless nil)"))))))))
       (propagated-inputs
        (list emacs-evil))
-      (arguments
-       `(#:tests? #t
-         #:test-command '("make" "test")))
       (home-page "https://github.com/mamapanda/evil-owl")
       (synopsis "Preview candidates when using Evil registers and marks")
       (description
@@ -15184,7 +15445,7 @@ editing nginx config files.")
        (sha256
         (base32 "00c3n4gyxzv7vczqms0d62kl8zsmjfyxa92mwxn2snyx857a9jfw"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/stream.html")
+    (home-page "https://elpa.gnu.org/packages/stream.html")
     (synopsis "Implementation of streams for Emacs")
     (description "This library provides an implementation of streams for Emacs.
 Streams are implemented as delayed evaluation of cons cells.")
@@ -15625,14 +15886,14 @@ automatically discovered and presented in recency order.")
 (define-public emacs-url-scgi
   (package
     (name "emacs-url-scgi")
-    (version "0.8")
+    (version "0.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/"
                                   "url-scgi-" version ".tar"))
               (sha256
                (base32
-                "1837vyamwk5mp2nf3k477hyr5pq1xy6p7br7kl6h2k8jmxqy3mlj"))))
+                "0mfbqr03302gk38aamlg1lgdznd6y3blcc3zizfb72ppb87j78mc"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/skangas/url-scgi/")
     (synopsis "SCGI support for url.el")
@@ -15721,7 +15982,7 @@ been adapted to also work with mu4e.")
 (define-public emacs-tempel
   (package
     (name "emacs-tempel")
-    (version "0.6")
+    (version "0.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -15730,8 +15991,10 @@ been adapted to also work with mu4e.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1jgsjhrfdd72a0na4s1qp8yc24mbgrpxkv8yqac0vgqipg98cdg6"))))
+                "1qhy9rp0k74hbqns67iwyzk86x7rriqyd4l48j5qqmfvr3v5sg1m"))))
     (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-compat))
     (home-page "https://github.com/minad/tempel")
     (synopsis "Simple templates for Emacs")
     (description
@@ -16238,7 +16501,7 @@ highlights quasi-quoted expressions.")
       #:tests? #f))                     ; no check target
     (inputs
      (list emacs espeak-ng perl tcl tclx))
-    (home-page "http://emacspeak.sourceforge.net")
+    (home-page "https://emacspeak.sourceforge.net")
     (synopsis "Audio desktop interface for Emacs")
     (description
      "Emacspeak is a speech interface that allows visually impaired users to
@@ -16273,29 +16536,26 @@ actually changing the buffer's text.")
     (license license:gpl3+)))
 
 (define-public emacs-diff-hl
-  ;;; XXX: Latest release is not tagged.  Use commit matching version bump.
-  (let ((commit "8f2e4eb345f0639c8fc41e3f7576f77ba6987655"))
-    (package
-      (name "emacs-diff-hl")
-      (version "1.9.1")
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/dgutov/diff-hl")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1c265083zyqi33sf3mpkk1n7pyfkrzxg4dacx0b787ypbj1sls16"))))
-      (build-system emacs-build-system)
-      (home-page "https://github.com/dgutov/diff-hl")
-      (synopsis
-       "Highlight uncommitted changes using VC")
-      (description
-       "@code{diff-hl-mode} highlights uncommitted changes on the side of the
-window (using the fringe, by default), allows you to jump between
-the hunks and revert them selectively.")
-      (license license:gpl3+))))
+  (package
+    (name "emacs-diff-hl")
+    (version "1.9.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dgutov/diff-hl")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0nh3rrvjjddyng5j7wjrk4ls7l6cjx3fpf8ksg4kjq7wzw4abf1s"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/dgutov/diff-hl")
+    (synopsis "Highlight uncommitted changes using VC")
+    (description
+     "Diff Hl mode highlights uncommitted changes on the side of the
+window (using the fringe, by default), allows you to jump between the hunks
+and revert them selectively.")
+    (license license:gpl3+)))
 
 (define-public emacs-diminish
   ;; XXX: Upstream did not tag last release.
@@ -16646,7 +16906,7 @@ reached with the right hand.")
             (invoke "make" "info"))))))
    (native-inputs
     (list texinfo))
-   (home-page "http://cc-mode.sourceforge.net/")
+   (home-page "https://cc-mode.sourceforge.net/")
    (synopsis "Framework for creating major modes for C-style languages")
    (description
     "CC Mode is an Emacs and XEmacs mode for editing C and other languages with
@@ -16810,13 +17070,13 @@ containing words from the Rime project.")
 (define-public emacs-pyim
   (package
     (name "emacs-pyim")
-    (version "5.2.9")
+    (version "5.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/pyim-" version ".tar"))
        (sha256
-        (base32 "0blsz344jq1zx4qs73zinb8fhh2a35k5nx12i2wn76902qx2qc6j"))))
+        (base32 "0q0h705k1yymp1pqyycmq1zqvzawzkl4q2ckvflbncgrqh306xmh"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-async emacs-popup emacs-posframe emacs-xr))
@@ -16898,14 +17158,14 @@ the center of the screen and not at the bottom.")
 (define-public emacs-posframe
   (package
     (name "emacs-posframe")
-    (version "1.3.2")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "posframe-" version ".tar"))
        (sha256
-        (base32 "05qkwb3ys05chn0maz7q19kp539m7p5acb8di4rni4vjjlkpx2bj"))))
+        (base32 "0pqy7scdi3qxj518xm0bbr3979byfxqxxh64wny37xzhd4apsw5j"))))
     (build-system emacs-build-system)
     ;; emacs-minimal does not include the function font-info.
     (arguments
@@ -17287,7 +17547,7 @@ gnugo-image-display-mode}.")
 (define-public emacs-gnuplot
   (package
     (name "emacs-gnuplot")
-    (version "0.8.0")
+    (version "0.8.1")
     (source
      (origin
        (method git-fetch)
@@ -17296,7 +17556,7 @@ gnugo-image-display-mode}.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "09y177sq24gs7wwjihw59g0m4n1rv2ws9890ynxjxawv823r0fxm"))))
+        (base32 "0s0k18ibi4b2vn6l7rwdk79g6ck6xafxzzbja8a8y0r8ljfssfgb"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/emacsorphanage/gnuplot-mode")
     (synopsis "Emacs major mode for interacting with Gnuplot")
@@ -17497,6 +17757,43 @@ for the current file, using the major mode as a hint.  It prompts you to enter
 one if it fails.")
     (license license:gpl3+)))
 
+(define-public emacs-jabber
+  ;; No releases available.
+  (let ((commit "af0315e174fa6446d5c4dd3e6465d48912950e58")
+        (revision "0"))
+    (package
+      (name "emacs-jabber")
+      (version (git-version "0.8.92" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://codeberg.org/emacs-jabber/emacs-jabber")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "08q0hbm4pvp8sf261w1ihqa93sg8blfybfkhq7wrnvgs6kasgwvq"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:emacs emacs                   ;requires gnutls
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'build 'make-info
+              (lambda _
+                (invoke "makeinfo" "jabber.texi")
+                (install-file "jabber.info"
+                              (string-append #$output "/share/info")))))))
+      (native-inputs (list texinfo))
+      (propagated-inputs (list emacs-fsm emacs-hexrgb emacs-srv gnutls))
+      (home-page "https://codeberg.org/emacs-jabber/emacs-jabber")
+      (synopsis "XMPP (Jabber) client for Emacs")
+      (description
+       "@code{jabber.el} is an XMPP client for Emacs.  XMPP (also known as
+\"Jabber\") is an instant messaging system; see @url{https://xmpp.org} for
+more information.")
+      (license license:gpl2+))))
+
 (define-public emacs-jarchive
   (package
     (name "emacs-jarchive")
@@ -17529,7 +17826,7 @@ one if it fails.")
        (sha256
         (base32 "0c05dzrs7vrhibj46jpz625482ah6xywji7way6wcvwc711y74fz"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/eldoc.html")
+    (home-page "https://elpa.gnu.org/packages/eldoc.html")
     (synopsis "Show function arglist or variable docstring in echo area")
     (description
      "This program was inspired by the behavior of the ``mouse documentation
@@ -17614,10 +17911,10 @@ running tests easier.")
     (license license:gpl3+)))
 
 (define-public emacs-org-transclusion
-  (let ((commit "cf51df7b87e0d32ba13ac5380557e81d9845d81b")) ;version bump
+  (let ((commit "7f4ad67bf1944b814a8763d304d4d27325504eb4")) ;version bump
     (package
       (name "emacs-org-transclusion")
-      (version "1.3.1")
+      (version "1.3.2")
       (source
        (origin
          (method git-fetch)
@@ -17626,7 +17923,7 @@ running tests easier.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0ix5l8cjcafw8lqhkmwa3cpdw6cbpx65k0iww426nxya849y61yx"))))
+          (base32 "0dgqbazr22y0kmyw5ki1rkca10j6fy0ps5s9gx247gqlbmqz7088"))))
       (build-system emacs-build-system)
       (arguments
        (list
@@ -17635,8 +17932,6 @@ running tests easier.")
                                "-l" "org-transclusion.el"
                                "-l" "test/unit-tests.el"
                                "-f" "ert-run-tests-batch-and-exit")))
-      (native-inputs
-       (list emacs-ert-runner))
       (home-page "https://nobiot.github.io/org-transclusion/")
       (synopsis "Enable transclusion with Org Mode")
       (description "Org-transclusion lets you insert a copy of text content via
@@ -17790,7 +18085,7 @@ highlighting.")
                      (chdir "source")
                      (copy-file (string-append source "/lisp/jsonrpc.el")
                                 "jsonrpc.el"))))))
-      (home-page "http://elpa.gnu.org/packages/jsonrpc.html")
+      (home-page "https://elpa.gnu.org/packages/jsonrpc.html")
       (synopsis "JSON-RPC library")
       (description
        "This library implements the JSONRPC 2.0 specification as
@@ -18011,7 +18306,6 @@ or @code{treemacs}, but leveraging @code{Dired} to do the job of display.")
                 "1nmp5ci4dvcpih6phfhk66s98lf8b49qd35ymy29kqkf5v4cnwga"))
               (file-name (git-file-name name version))))
     (build-system emacs-build-system)
-    (propagated-inputs (list emacs-transient))
     (arguments
      (list
       #:phases
@@ -18063,6 +18357,32 @@ available key bindings that follow C-x (or as many as space allows given your
 settings).")
     (license license:gpl3+)))
 
+(define-public emacs-display-wttr
+  (package
+    (name "emacs-display-wttr")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sr.ht/~josegpt/display-wttr")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hmawlnd2l89p48pviwn4khvjs0iry8x67cyqw70r10dd0ybn851"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list #:tests? #t
+           #:test-command #~(list "emacs" "--batch"
+                                  "-l" "display-wttr-test.el"
+                                  "-f" "ert-run-tests-batch-and-exit")))
+    (home-page "https://git.sr.ht/~josegpt/display-wttr")
+    (synopsis "Display wttr (weather) in the mode line")
+    (description "This package contains a minor mode that can be toggled.  It
+fetches weather information based on your location or on a given location from
+@uref{https://wttr.in} and then displays it on the mode line.")
+    (license license:gpl3+)))
+
 (define-public emacs-free-keys
   (package
     (name "emacs-free-keys")
@@ -18792,7 +19112,7 @@ groups.")
 (define-public emacs-taxy-magit-section
   (package
     (name "emacs-taxy-magit-section")
-    (version "0.12.1")
+    (version "0.12.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -18800,7 +19120,7 @@ groups.")
                     ".tar"))
               (sha256
                (base32
-                "0bs00y8pl51dji23zx5w64h6la0y109q0jv2q1nggizk6q5bsxmg"))))
+                "1pf83zz5ibhqqlqgcxig0dsl1rnkk5r6v16s5ngvbc37q40vkwn1"))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-magit emacs-taxy))
     (home-page "https://github.com/alphapapa/taxy.el")
@@ -18939,14 +19259,14 @@ database of references on life sciences.")
 (define-public emacs-websocket
   (package
     (name "emacs-websocket")
-    (version "1.13.1")
+    (version "1.14")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "websocket-" version ".tar"))
        (sha256
-        (base32 "1x664zswas0fpml7zaj59zy97avrm49zb80zd69rlkqzz1m45psc"))))
+        (base32 "0g75kaw9bdk30apiyk09583amnw9458kkmgbbcl2myqfqspywnva"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/websocket.html")
     (synopsis "Emacs WebSocket client and server")
@@ -19138,38 +19458,40 @@ Slack client.")
       (license license:gpl3+))))
 
 (define-public emacs-bash-completion
-  (package
-    (name "emacs-bash-completion")
-    (version "3.1.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/szermatt/emacs-bash-completion")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0cly0m6msn8xv9857nv4syw8fldqzvsa4kciq7av40y26a61hvrh"))))
-    (build-system emacs-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'make-git-checkout-writable
-            (λ _
-              (for-each make-file-writable (find-files "."))))
-          (add-before 'install 'configure
-            (lambda* (#:key inputs #:allow-other-keys)
-              (emacs-substitute-variables "bash-completion.el"
-                ("bash-completion-prog"
-                 (search-input-file inputs "/bin/bash"))))))))
-    (inputs (list bash))
-    (home-page "https://github.com/szermatt/emacs-bash-completion")
-    (synopsis "Bash completion for the shell buffer")
-    (description
-     "Bash Completion defines dynamic completion hooks for Shell mode and
+  ;; This commit includes unreleased fixes that make using completion inside
+  ;; 'guix shell' possible (see:
+  ;; https://github.com/szermatt/emacs-bash-completion/issues/62).
+  (let ((commit "796a806c5531fc20afea590ba3c1d8a42fb793fc")
+        (revision "0"))
+    (package
+      (name "emacs-bash-completion")
+      (version (git-version "3.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/szermatt/emacs-bash-completion")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "13mdb5arifkwghdclvp23q336n49x2hgqnll7m1lg3nh6jgq8jvk"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-before 'install 'configure
+              (lambda* (#:key inputs #:allow-other-keys)
+                (emacs-substitute-variables "bash-completion.el"
+                  ("bash-completion-prog"
+                   (search-input-file inputs "/bin/bash"))))))))
+      (inputs (list bash))
+      (home-page "https://github.com/szermatt/emacs-bash-completion")
+      (synopsis "Bash completion for the shell buffer")
+      (description
+       "Bash Completion defines dynamic completion hooks for Shell mode and
 @code{shell-command} prompts that are based on Bash completion.")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
 
 (define-public emacs-easy-kill
   (package
@@ -19193,14 +19515,14 @@ let users kill or mark things easily.")
 (define-public emacs-csv-mode
   (package
     (name "emacs-csv-mode")
-    (version "1.21")
+    (version "1.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "csv-mode-" version ".tar"))
        (sha256
-        (base32 "11f01lyz6i133njigg53r890cic8y13kz7dswc8mj7m60a316dmv"))))
+        (base32 "1f9pny1hkhdfmkmfpsk6ayjmb9p5hdpxpnmcprf51nfbvmi7ssig"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/csv-mode.html")
     (synopsis "Major mode for editing comma/char separated values")
@@ -20309,69 +20631,77 @@ object has been freed.")
   (license license:unlicense)))
 
 (define-public emacs-emacsql
-  (package
-    (name "emacs-emacsql")
-    (version "3.1.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/magit/emacsql")
-             (commit (string-append version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1xpmji2qgr9r38cdhws65x9s9jy7fk93q8g1j2fm7j8kcfjh9x3g"))))
-    (build-system emacs-build-system)
-    (arguments
-     (list
-      #:tests? #true
-      #:test-command #~(list "emacs" "-Q" "--batch"
-                             "-L" "tests"
-                             "-L" "."
-                             "-l" "tests/emacsql-tests.el"
-                             "-f" "ert-run-tests-batch-and-exit")
-      #:modules '((guix build emacs-build-system)
-                  (guix build utils)
-                  (guix build emacs-utils)
-                  (srfi srfi-26))
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'install 'patch-elisp-shell-shebangs
-            (lambda _
-              (substitute* (find-files "." "\\.el")
-                (("/bin/sh") (which "sh")))))
-          (add-after 'patch-elisp-shell-shebangs 'setenv-shell
-            (lambda _
-              (setenv "SHELL" "sh")))
-          (add-after 'setenv-shell 'build-emacsql-sqlite
-            (lambda _
-              (invoke "make" "binary" (string-append "CC=" #$(cc-for-target)))))
-          (add-after 'build-emacsql-sqlite 'install-emacsql-sqlite
-            ;; This build phase installs emacs-emacsql binary.
-            (lambda _
-              (install-file "sqlite/emacsql-sqlite"
-                            (string-append #$output "/bin"))))
-          (add-after 'install-emacsql-sqlite 'patch-emacsql-sqlite.el
-            ;; This build phase removes interactive prompts
-            ;; and makes sure Emacs look for binaries in the right places.
-            (lambda _
-              (emacs-substitute-variables "emacsql-sqlite.el"
-                ("emacsql-sqlite-executable"
-                 (string-append #$output "/bin/emacsql-sqlite"))
-                ;; Make sure Emacs looks for ‘GCC’ binary in the right place.
-                ("emacsql-sqlite-c-compilers"
-                 `(list ,(which "gcc")))))))))
-    (inputs
-     (list emacs-minimal `(,mariadb "dev") `(,mariadb "lib") postgresql))
-    (propagated-inputs
-     (list emacs-finalize emacs-pg))
-    (home-page "https://github.com/magit/emacsql")
-    (synopsis "Emacs high-level SQL database front-end")
-    (description "Any readable Lisp value can be stored as a value in EmacSQL,
+  (let ((commit "e1baaf2f874df7f9259a8ecca978e03d3ddae5b5")
+        (revision "0"))
+    (package
+      (name "emacs-emacsql")
+      (version (git-version "3.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/magit/emacsql")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0dvqs1jg5zqn0i3r67sn1a40h5rm961q9vxvmqxbgvdhkjvip8fn"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #true
+        #:test-command #~(list "emacs" "-Q" "--batch"
+                               "-L" "tests"
+                               "-L" "."
+                               "-l" "tests/emacsql-tests.el"
+                               "-f" "ert-run-tests-batch-and-exit")
+        #:modules '((guix build emacs-build-system)
+                    (guix build utils)
+                    (guix build emacs-utils)
+                    (srfi srfi-26))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-before 'install 'remove-sqlite-builtin
+              ;; Current emacs 28.2 doesn't have sqlite feature and compilation
+              ;; of this file fails.  This phase should be removed, when emacs
+              ;; package is updated to 29.
+              (lambda _
+                (delete-file "emacsql-sqlite-builtin.el")))
+            (add-before 'install 'patch-elisp-shell-shebangs
+              (lambda _
+                (substitute* (find-files "." "\\.el")
+                  (("/bin/sh") (which "sh")))))
+            (add-after 'patch-elisp-shell-shebangs 'setenv-shell
+              (lambda _
+                (setenv "SHELL" "sh")))
+            (add-after 'setenv-shell 'build-emacsql-sqlite
+              (lambda _
+                (invoke "make" "binary" (string-append "CC=" #$(cc-for-target)))))
+            (add-after 'build-emacsql-sqlite 'install-emacsql-sqlite
+              ;; This build phase installs emacs-emacsql binary.
+              (lambda _
+                (install-file "sqlite/emacsql-sqlite"
+                              (string-append #$output "/bin"))))
+            (add-after 'install-emacsql-sqlite 'patch-emacsql-sqlite.el
+              ;; This build phase removes interactive prompts
+              ;; and makes sure Emacs look for binaries in the right places.
+              (lambda _
+                (emacs-substitute-variables "emacsql-sqlite.el"
+                  ("emacsql-sqlite-executable"
+                   (string-append #$output "/bin/emacsql-sqlite"))
+                  ;; Make sure Emacs looks for ‘GCC’ binary in the right place.
+                  ("emacsql-sqlite-c-compilers"
+                   `(list ,(which "gcc")))))))))
+      (inputs
+       (list emacs-minimal `(,mariadb "dev") `(,mariadb "lib") postgresql))
+      (propagated-inputs
+       (list emacs-finalize emacs-pg emacs-sqlite3-api))
+      (home-page "https://github.com/magit/emacsql")
+      (synopsis "Emacs high-level SQL database front-end")
+      (description "Any readable Lisp value can be stored as a value in EmacSQL,
 including numbers, strings, symbols, lists, vectors, and closures.  EmacSQL
 has no concept of @code{TEXT} values; it's all just Lisp objects.  The Lisp
 object @code{nil} corresponds 1:1 with @code{NULL} in the database.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-emacsql-sqlite3
   (package
@@ -20675,6 +21005,32 @@ a heuristic based on frequency and recency.")
 as well as functions for navigating between these headings.")
       (license license:gpl3+))))
 
+(define-public emacs-org-recur
+  (package
+    (name "emacs-org-recur")
+    (version "1.3.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/m-cat/org-recur")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0s2n62y3qc72ldzpaq2jz9335h532s566499n346nx21l4qsqdz6"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? #t
+      #:test-command #~(list "emacs" "--batch" "-l" "org-recur-test.el"
+                             "-f" "ert-run-tests-batch-and-exit")))
+    (propagated-inputs (list emacs-dash))
+    (home-page "https://github.com/m-cat/org-recur")
+    (synopsis "Simple recurring Org mode tasks")
+    (description "This package extends Org mode and Org Agenda with support
+for defining recurring tasks and easily scheduling them.")
+    (license license:gpl3+)))
+
 (define-public emacs-org-super-agenda
   (package
     (name "emacs-org-super-agenda")
@@ -21136,38 +21492,35 @@ with (La)TeX mode, Org mode and other Emacs editing modes.")
                    license:gpl3+))))
 
 (define-public emacs-biblio
-  (let ((commit "517ec18f00f91b61481214b178f7ae0b8fbc499b")
-        (revision "1"))
-    (package
-      (name "emacs-biblio")
-      (version (git-version "0.2" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/cpitclaudel/biblio.el")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0m5vpyj6312rc3xq8lrr1g2hyl26adzwvjxb3jqrm7bvqvs4i5zp"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       (list emacs-dash emacs-let-alist emacs-seq))
-      (home-page "https://github.com/cpitclaudel/biblio.el")
-      (synopsis "Browse and import bibliographic references")
-      (description "This package provides an extensible Emacs package for
+  (package
+    (name "emacs-biblio")
+    (version "0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cpitclaudel/biblio.el")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0iya5ybc54kia5vnb3bfr8yilykhbn2xvp157vya06cw4af2cw65"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-dash emacs-let-alist emacs-seq))
+    (home-page "https://github.com/cpitclaudel/biblio.el")
+    (synopsis "Browse and import bibliographic references")
+    (description "This package provides an extensible Emacs package for
 browsing and fetching references.
 
 @file{biblio.el} makes it easy to browse and gather bibliographic references
 and publications from various sources, by keywords or by DOI.  References are
 automatically fetched from well-curated sources, and formatted as BibTeX.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-citar
   (package
     (name "emacs-citar")
-    (version "1.0")
+    (version "1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -21176,7 +21529,7 @@ automatically fetched from well-curated sources, and formatted as BibTeX.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1n69lkp7298gasm9hlbx9nhgp9ggh8w8ffyvi1rmbj96lcnpsyi9"))))
+                "1d7qp580b9svgykpmcdyij8lja23b20sprc7653dbl4zj7ncxxry"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -22276,28 +22629,25 @@ within Emacs.")
       (license license:gpl3+))))
 
 (define-public emacs-ibrowse
-  (let* ((commit "7e4a2987fc63861514b441f65db2008da5949ef2")
-         (revision "0"))
-    (package
-      (name "emacs-ibrowse")
-      (version (git-version "0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://git.sr.ht/~ngraves/ibrowse.el")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "15661xgjxdxk1p0g87dsas9jd9v7g64y6n9irlbyzww09gjsjwwd"))))
-      (build-system emacs-build-system)
-      (inputs (list sqlite))
-      (propagated-inputs (list emacs-embark emacs-marginalia))
-      (home-page "https://git.sr.ht/~ngraves/ibrowse.el")
-      (synopsis "Interact with your browser from emacs")
-      (description "This package provides some commands to act on the browser
+  (package
+    (name "emacs-ibrowse")
+    (version "0.1.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~ngraves/ibrowse.el")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0q3imid9byaay0lqvv5n2klwk680w8x3qzdb279rdr08bb36w5ya"))))
+    (build-system emacs-build-system)
+    (inputs (list sqlite))
+    (home-page "https://git.sr.ht/~ngraves/ibrowse.el")
+    (synopsis "Interact with your browser from emacs")
+    (description "This package provides some commands to act on the browser
 tabs, history, or bookmarks from Emacs.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-ibuffer-projectile
   (package
@@ -24437,6 +24787,34 @@ the GIF result.")
 on-line service.")
     (license license:gpl3+)))
 
+(define-public emacs-langtool
+  (package
+    (name "emacs-langtool")
+    (version "2.3.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/mhayashi1120/Emacs-langtool")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0vzs3hkhmvdrbii1hmg87brddpjfmqfqykf7a2hnwmdbkihiwwk9"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? #true
+      #:test-command #~(list "make" "test")))
+    (propagated-inputs (list emacs-popup))
+    (home-page "https://github.com/mhayashi1120/Emacs-langtool")
+    (synopsis "Emacs interface to LanguageTool")
+    (description
+     "Emacs Langtool offers a frontend to @url{https://languagetool.org,
+LanguageTool} server.")
+    (license license:gpl3+)))
+
 (define-public emacs-lingva
   (let ((commit "6c33594068fa33de622172503deeec6778d9c744")
         (revision "1"))
@@ -24954,6 +25332,29 @@ later.")
 them in your web browser.")
       (license license:expat))))
 
+(define-public emacs-srv
+  (package
+    (name "emacs-srv")
+    (version "0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/legoscia/srv.el")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1a8pqhdi7m3lis5ad2f74s1sy8zpxlwvfsvd80lw746235x2v06z"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/legoscia/srv.el")
+    (synopsis "Emacs Lisp library to perform SRV DNS requests")
+    (description
+     "SRV implements RFC 2782 (SRV records).  It is used to look up hostname
+and port for a service at a specific domain.  There might be multiple results,
+and the caller is supposed to attempt to connect to each hostname+port in
+turn.")
+    (license license:gpl2+)))
+
 (define-public emacs-github-review
   (let ((commit "a13a3b4f1b6114a32af843971a145ab880f51232")
         (revision "2"))
@@ -26303,7 +26704,7 @@ scratch buffer.
                ("gtk-lookup-devhelp-indices"
                 '(list (expand-file-name "~/.guix-profile/share/gtk-doc/html/*/*.devhelp*"))))
              #t)))))
-    (home-page "http://user42.tuxfamily.org/gtk-look/index.html")
+    (home-page "https://user42.tuxfamily.org/gtk-look/index.html")
     (synopsis "Find and display HTML documentation for GTK, GNOME and Glib")
     (description "@command{gtk-look} finds and displays HTML documentation for
 GTK, GNOME and Glib functions and variables in Emacs, similar to what
@@ -27032,7 +27433,7 @@ tabulated-lists).")
 (define-public emacs-eat
   (package
     (name "emacs-eat")
-    (version "0.4")
+    (version "0.6")
     (source
      (origin
        (method git-fetch)
@@ -27042,7 +27443,7 @@ tabulated-lists).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0zs1fwbapgsap8vai97f1inginb896gl15kyjm521nvaywk4rc12"))
+         "1279dcagg01vb5izd95lm7i6z5zck136vw3lb06kam8xagrkvfjf"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
@@ -27097,6 +27498,8 @@ integration.")
                     (guix build utils))
          #:imported-modules (,@%emacs-build-system-modules
                              (guix build cmake-build-system))
+         ;; Include the `etc' folder for shell-side configuration files
+         #:include (cons* "^etc/.*" %default-include)
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'substitute-vterm-module-path
@@ -28464,6 +28867,32 @@ buffers.")
 JavaScript.")
       (license license:gpl3+))))
 
+(define-public emacs-jsdoc
+  (let ((commit "10ccff7a5cec6fd2f4484c1d55347634e5b46432")) ;version bump
+    (package
+      (name "emacs-jsdoc")
+      (version "0.3")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/isamert/jsdoc.el")
+               (commit commit)))
+         (sha256
+          (base32 "0cbchri4117wjcnlk3npi4x1sfx248vck1q61cis8drrrz4c8jyp"))
+         (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (arguments (list #:emacs emacs-next))
+      (propagated-inputs
+       (list emacs-dash
+             emacs-s
+             tree-sitter-javascript))
+      (home-page "https://github.com/isamert/jsdoc.el")
+      (synopsis "Inserts JSDoc function comments/typedefs easily.")
+      (description "This package provides an easy way to insert JSDoc function
+comments and typedefs using Emacs' builtin tree-sitter.")
+      (license license:gpl3+))))
+
 (define-public emacs-prettier
   (let ((commit "e9b73e81d3e1642aec682195f127a42dfb0b5774")
         (version "0.1.0")
@@ -29537,14 +29966,14 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-tramp
   (package
     (name "emacs-tramp")
-    (version "2.6.0")
+    (version "2.6.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "tramp-" version ".tar"))
        (sha256
-        (base32 "1y58k0qdc9i3av61p9ks7hg5vynsi2zslv5mswcbd1wf23iggr7c"))))
+        (base32 "1mxkl8v40wdcyvsyjayw9yj7ghn5zrnzgaapwh1prxs42scw85x8"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -30081,7 +30510,7 @@ deletion of the frame.")
        (sha256
         (base32 "0hgblj8ng7vfsdb7g1mm9m2qhzfprycdd77836l59prpak5kp55q"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/xclip.html")
+    (home-page "https://elpa.gnu.org/packages/xclip.html")
     (synopsis "Copy and paste GUI clipboard from Emacs in text terminal")
     (description
      "This package allows Emacs to copy to and paste from the GUI clipboard
@@ -30691,7 +31120,7 @@ JIRA issue servers.")
         (base32 "07xavg6xq5ckrfy5sk5k5ldb46m5w8nw1r1k006ck8f23ajaw5z2"))))
     (build-system emacs-build-system)
     (arguments '(#:include '("\\.el$" "\\.svg$" "\\.b64$" "slime\\.el\\.gz$")))
-    (home-page "http://elpa.gnu.org/packages/slime-volleyball.html")
+    (home-page "https://elpa.gnu.org/packages/slime-volleyball.html")
     (synopsis "SVG slime volleyball game")
     (description
      "Emacs Slime Volleyball is a volleyball game.  Win points by
@@ -30944,7 +31373,7 @@ Emacs that integrate with major modes like Org-mode.")
 (define-public emacs-modus-themes
   (package
     (name "emacs-modus-themes")
-    (version "4.0.1")
+    (version "4.1.0")
     (source
      (origin
        (method git-fetch)
@@ -30953,7 +31382,7 @@ Emacs that integrate with major modes like Org-mode.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16m8y56jyf44rj541fqb243pmbz9bk5py5zl1xhzal4fsk5bsfrg"))))
+        (base32 "1rfnn7c6qv3qmzpksdzy7623qijbldnmr7hl9ka2kwnhdarsigkk"))))
     (native-inputs (list texinfo))
     (build-system emacs-build-system)
     (arguments
@@ -31123,7 +31552,7 @@ variable and the @code{minibuffer-line} face.")
        (sha256
         (base32 "09fm0ziy8cdzzw08l7l6p63dxz2a27p3laia2v51mvbva8177ls1"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/minimap.html")
+    (home-page "https://elpa.gnu.org/packages/minimap.html")
     (synopsis "Sidebar showing a @emph{mini-map} of a buffer")
     (description
      "Minimap provides Emacs with a minimap sidebar, which is a smaller
@@ -32746,7 +33175,7 @@ uses BBDB and Message-X.")
        (sha256
         (base32 "191294k92qp8gmfypf0q8j8qrym96aqikzvyb9p03wqvbr3r1dsk"))))
     (build-system emacs-build-system)
-    (home-page "http://nschum.de/src/emacs/auto-dictionary/")
+    (home-page "https://nschum.de/src/emacs/auto-dictionary/")
     (synopsis "Automatic dictionary switcher for Emacs spell checking")
     (description "@code{auto-dictionary} is a minor mode that hooks into
 Flyspell's on-the-fly spell checking and extends these checks to also detect
@@ -32766,7 +33195,7 @@ detected language.")
        (sha256
         (base32 "090n4479zs82by7a3vb551gyjvv8lpfcylk43ywr2lfyssc9xiq0"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/persist.html")
+    (home-page "https://elpa.gnu.org/packages/persist.html")
     (synopsis "Persist variables between Emacs sessions")
     (description
      "This package provides variables which persist across sessions.
@@ -33122,66 +33551,68 @@ go directly to where they belong.")
       (license license:gpl3+))))
 
 (define-public emacs-org-roam
-  (package
-    (name "emacs-org-roam")
-    (version "2.2.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/org-roam/org-roam")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "09wcqdqy2gcsyd1mbcm90b70y3qj921m4ky8l3avhzpdwgyw8wy5"))))
-    (build-system emacs-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Move the extensions source files to the top level, which
-          ;; is included in the EMACSLOADPATH.
-          (add-after 'unpack 'move-source-files
-            (lambda _
-              (let ((el-files (find-files "./extensions" ".*\\.el$")))
-                (for-each (lambda (f)
-                            (rename-file f (basename f)))
-                          el-files))))
-          (add-after 'move-source-files 'patch-exec-paths
-            (lambda* (#:key inputs #:allow-other-keys)
-              (make-file-writable "org-roam-graph.el")
-              (emacs-substitute-variables "org-roam-graph.el"
-                ("org-roam-graph-executable"
-                 (search-input-file inputs "/bin/dot")))))
-          (add-after 'install 'install-image
-            (lambda* (#:key outputs #:allow-other-keys)
-              (install-file "doc/images/org-ref-citelink.png"
-                            (string-append #$output "/share/info/images"))))
-          (add-after 'install-image 'make-info
-            (lambda* (#:key outputs #:allow-other-keys)
-              (with-directory-excursion "doc"
-                (invoke "makeinfo" "-o" "org-roam.info" "org-roam.texi")
-                (install-file "org-roam.info"
-                              (string-append #$output "/share/info"))))))))
-    (inputs
-     (list graphviz))
-    (native-inputs
-     (list texinfo))
-    (propagated-inputs
-     (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
+  (let ((commit "74422df546a515bc984c2f3d3a681c09d6f43916")
+        (revision "0"))
+    (package
+      (name "emacs-org-roam")
+      (version (git-version "2.2.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/org-roam/org-roam")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0vhl69y6yk2zzfixjdwr8vxl2k921h0syshk5123r1nm9jp3i1s9"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            ;; Move the extensions source files to the top level, which
+            ;; is included in the EMACSLOADPATH.
+            (add-after 'unpack 'move-source-files
+              (lambda _
+                (let ((el-files (find-files "./extensions" ".*\\.el$")))
+                  (for-each (lambda (f)
+                              (rename-file f (basename f)))
+                            el-files))))
+            (add-after 'move-source-files 'patch-exec-paths
+              (lambda* (#:key inputs #:allow-other-keys)
+                (make-file-writable "org-roam-graph.el")
+                (emacs-substitute-variables "org-roam-graph.el"
+                  ("org-roam-graph-executable"
+                   (search-input-file inputs "/bin/dot")))))
+            (add-after 'install 'install-image
+              (lambda* (#:key outputs #:allow-other-keys)
+                (install-file "doc/images/org-ref-citelink.png"
+                              (string-append #$output "/share/info/images"))))
+            (add-after 'install-image 'make-info
+              (lambda* (#:key outputs #:allow-other-keys)
+                (with-directory-excursion "doc"
+                  (invoke "makeinfo" "-o" "org-roam.info" "org-roam.texi")
+                  (install-file "org-roam.info"
+                                (string-append #$output "/share/info"))))))))
+      (inputs
+       (list graphviz))
+      (native-inputs
+       (list texinfo))
+      (propagated-inputs
+       (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
 notes with Org mode.  Notes are captured without hierarchy and are connected
 by tags.  Notes can be found and created quickly.  Org Roam should also work
 as a plug-and-play solution for anyone already using Org mode for their
 personal wiki.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-org-roam-bibtex
   (package
@@ -33462,7 +33893,7 @@ rather excellent completion provided by both Bash and Zsh.")
               (sha256
                (base32 "14akj7pavfhch6ljwl26mhv7qczgmqn7mld62cf6mh4ghmhy3z4y"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/shell-command+.html")
+    (home-page "https://elpa.gnu.org/packages/shell-command+.html")
     (synopsis "Extended Emacs @code{shell-command}")
     (description
      "Shell-command+ is a @code{shell-command} substitute that extends the
@@ -34058,7 +34489,7 @@ s-expression.")
         (base32
          "1gvywhdfg27nx6pyq7yfwq9x6j96jama59i5s9rp41pvg2dlmvm0"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/map.html")
+    (home-page "https://elpa.gnu.org/packages/map.html")
     (synopsis "Map manipulation functions")
     (description "This package provides Emacs map-manipulation functions that
 work on alists, hash-table and arrays.  All functions are prefixed with
@@ -34068,16 +34499,16 @@ work on alists, hash-table and arrays.  All functions are prefixed with
 (define-public emacs-xref
   (package
     (name "emacs-xref")
-    (version "1.6.1")
+    (version "1.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/xref-"
                            version ".tar"))
        (sha256
-        (base32 "0z9kpbnrdh9y9qlj2fa64v660biakvw6x3z9klqa47qcx8gbyqp6"))))
+        (base32 "16vzjl2dv5nmb40xfw7mfrk8i64fac3cy4sf2d2hy832rwlg15q0"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/xref.html")
+    (home-page "https://elpa.gnu.org/packages/xref.html")
     (synopsis "Cross-referencing commands")
     (description
      "This library provides a generic infrastructure for cross referencing
@@ -34255,7 +34686,7 @@ and preferred services can easily be configured.")
 (define-public emacs-vertico
   (package
     (name "emacs-vertico")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin
        (method git-fetch)
@@ -34264,21 +34695,33 @@ and preferred services can easily be configured.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0g2zy70gks24g7i4qj1ijx57g016svbymb8l493j81c4bhc88mjl"))))
+        (base32 "0djc1im6caa67aq0bi8d607ycb1lq4lsirfqsx8kqbfl46852f60"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Move the extensions source files to the top level, which is included in
-         ;; the EMACSLOADPATH.
-         (add-after 'unpack 'move-source-files
-           (lambda _
-             (let ((el-files (find-files "./extensions" ".*\\.el$")))
-               (for-each (lambda (f)
-                           (rename-file f (basename f)))
-                         el-files)))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Move the extensions source files to the top level, which is
+          ;; included in the EMACSLOADPATH.
+          (add-after 'unpack 'move-source-files
+            (lambda _
+              (let ((el-files (find-files "./extensions" ".*\\.el$")))
+                (for-each (lambda (f)
+                            (rename-file f (basename f)))
+                          el-files))))
+          (add-after 'install 'makeinfo
+            (lambda* (#:key outputs #:allow-other-keys)
+              (invoke "emacs"
+                      "--batch"
+                      "--eval=(require 'ox-texinfo)"
+                      "--eval=(find-file \"README.org\")"
+                      "--eval=(org-texinfo-export-to-info)")
+              (install-file "vertico.info"
+                            (string-append #$output "/share/info")))))))
     (native-inputs
      (list texinfo))
+    (propagated-inputs
+     (list emacs-compat))
     (home-page "https://github.com/minad/vertico")
     (synopsis "Vertical interactive completion")
     (description
@@ -34293,7 +34736,7 @@ complementary packages.")
 (define-public emacs-wisp-mode
   (package
     (name "emacs-wisp-mode")
-    (version "1.0.8")
+    (version "1.0.10")
     (source
      (origin
        (method hg-fetch)
@@ -34302,7 +34745,7 @@ complementary packages.")
              (changeset (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1hqwdmx081icv516cyndjkwvgr7b41hi5qdaylkv0jran35jwjiw"))))
+        (base32 "13xlagkjmnzv0fn6bwb3vrqn6arxx1g2m1b4wg2rzm7dadlpgmpn"))))
     (build-system emacs-build-system)
     (home-page "https://www.draketo.de/software/wisp")
     (synopsis "Syntax highlighting and indentation support for Wisp files")
@@ -34371,7 +34814,7 @@ shorter than usual, using mostly unprefixed keys.")
        (sha256
         (base32 "0zsjbpq0s0xdxd9r541f04bj1khhgzhdlzr0m4p17zjh1zardbpi"))))
     (build-system emacs-build-system)
-    (home-page "http://www.myrkr.in-berlin.de/dictionary/index.html")
+    (home-page "https://www.myrkr.in-berlin.de/dictionary/index.html")
     (synopsis "Emacs client for dictionary servers")
     (description "This package provides commands for interacting with a
 dictionary server (as defined by RFC 2229; by default, the public server at
@@ -34579,6 +35022,29 @@ line.  This minor mode provides an easy way to run it from Emacs on the
 current region or entire buffer.")
       (license license:gpl3+))))
 
+(define-public emacs-discover
+  (package
+    (name "emacs-discover")
+    (version "0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/mickeynp/discover.el")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0qxw30zrlcxhxb0alrgyiclrk44dysal8xsbz2mvgrb6jli8wg18"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-makey))
+    (home-page "https://github.com/mickeynp/discover.el")
+    (synopsis "Discover more of Emacs using context menus")
+    (description
+     "Discover adds context menus to commonly-used features in Emacs.")
+    (license license:gpl3+)))
+
 (define-public emacs-nasm-mode
   (package
     (name "emacs-nasm-mode")
@@ -34973,7 +35439,7 @@ hacker.")
 (define-public emacs-osm
   (package
     (name "emacs-osm")
-    (version "0.9")
+    (version "0.10")
     (home-page "https://github.com/minad/osm")
     (source (origin
               (method git-fetch)
@@ -34983,7 +35449,7 @@ hacker.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0iacf3mqjq8vfhd0nyzry0spishyvn92zgd55ivqxb9xfdr3lx9x"))))
+                "07caffh30sgmcbhxqk3wfpml3310ldvwkqbh19czq7nx4llynixc"))))
     (build-system emacs-build-system)
     (arguments
      (list #:phases #~(modify-phases %standard-phases
@@ -35008,6 +35474,7 @@ hacker.")
                                                          "/share/info")))))))
     (inputs (list curl))
     (native-inputs (list texinfo))
+    (propagated-inputs (list emacs-compat))
     (synopsis "OpenStreetMap viewer for Emacs")
     (description
      "This package provides an OpenStreetMap viewer for Emacs, featuring
@@ -35581,7 +36048,7 @@ across sessions.")
 (define-public emacs-vertico-posframe
   (package
     (name "emacs-vertico-posframe")
-    (version "0.6.0")
+    (version "0.7.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -35589,7 +36056,7 @@ across sessions.")
                     ".tar"))
               (sha256
                (base32
-                "1cwi26jz9dn8la6zxxai2pfkcpz8lwf4cd8hr44lak6x0ca9bwr3"))))
+                "1sbgg0syyk24phwzji40lyw5dmwxssgvwv2fs8mbmkhv0q44f9ny"))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-posframe emacs-vertico))
     (home-page "https://github.com/tumashu/vertico-posframe")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 686720a881..0c47dbde1f 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -23,6 +23,7 @@
 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2023 Declan Tsien <declantsien@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,6 +66,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages lesstif)   ; motif
   #:use-module (gnu packages linux)     ; alsa-lib, gpm
   #:use-module (gnu packages mail)      ; for mailutils
   #:use-module (gnu packages multiprecision)
@@ -75,6 +77,7 @@
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages tree-sitter)
   #:use-module (gnu packages web)       ; for jansson
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xml)
@@ -365,7 +368,15 @@
             (files '("lib/emacs/native-site-lisp")))
            (search-path-specification
             (variable "INFOPATH")
-            (files '("share/info")))))
+            (files '("share/info")))
+           ;; tree-sitter support is not yet available in emacs 28, but this
+           ;; search path won't harm and also will be beneficial for
+           ;; emacs-next and other emacs-* packages, which have tree-sitter
+           ;; support enabled.  Please, remove this comment, when emacs
+           ;; package is updated to 29.
+           (search-path-specification
+            (variable "TREE_SITTER_GRAMMAR_PATH")
+            (files '("lib/tree-sitter")))))
 
     (home-page "https://www.gnu.org/software/emacs/")
     (synopsis "The extensible, customizable, self-documenting text editor")
@@ -381,12 +392,12 @@ languages.")
     (license license:gpl3+)))
 
 (define-public emacs-next
-  (let ((commit "6adc193ad66445acd84caba6973424ecbd21da26")
-        (revision "4"))
+  (let ((commit "f1f571e72ae10285762d3a941e56f7c4048272af")
+        (revision "1"))
     (package
       (inherit emacs)
       (name "emacs-next")
-      (version (git-version "29.0.50" revision commit))
+      (version (git-version "29.0.60" revision commit))
       (source
        (origin
          (inherit (package-source emacs))
@@ -401,7 +412,7 @@ languages.")
                                   "emacs-native-comp-driver-options.patch"))
          (sha256
           (base32
-           "0b48qg9w7fzvhva78gzi3cs2m6asj11fk0kgys49fqhwskigzg1f"))))
+           "1rildbxq53yvc2rllg2qccgxzbbnr6qbija0lyqacsy8dlzaysch"))))
       (inputs
        (modify-inputs (package-inputs emacs)
          (prepend sqlite)))
@@ -409,6 +420,35 @@ languages.")
        (modify-inputs (package-native-inputs emacs)
          (prepend autoconf))))))
 
+(define-public emacs-next-tree-sitter
+  (let ((commit "ac7ec87a7a0db887e4ae7fe9005aea517958b778")
+        (revision "0"))
+    (package
+      (inherit emacs)
+      (name "emacs-next-tree-sitter")
+      (version (git-version "30.0.50" revision commit))
+      (source
+       (origin
+         (inherit (package-source emacs))
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.savannah.gnu.org/git/emacs.git/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         ;; emacs-source-date-epoch.patch is no longer necessary
+         (patches (search-patches "emacs-exec-path.patch"
+                                  "emacs-fix-scheme-indent-function.patch"
+                                  "emacs-native-comp-driver-options.patch"))
+         (sha256
+          (base32
+           "1akq6dbllwwqwx21wnwnv6aax1nsi2ypbd7j3i79sw62s3gf399z"))))
+      (inputs
+       (modify-inputs (package-inputs emacs)
+         (prepend sqlite tree-sitter)))
+      (native-inputs
+       (modify-inputs (package-native-inputs emacs)
+         (prepend autoconf))))))
+
 (define-public emacs-next-pgtk
   (package
     (inherit emacs-next)
@@ -473,6 +513,30 @@ editor (with xwidgets support)")
      (modify-inputs (package-inputs emacs)
        (prepend webkitgtk-with-libsoup2 libxcomposite)))))
 
+(define-public emacs-motif
+  (package/inherit emacs
+    (name "emacs-motif")
+    (synopsis
+     "The extensible, customizable, self-documenting text editor (with Motif
+toolkit)")
+    (build-system gnu-build-system)
+    (inputs (modify-inputs (package-inputs emacs)
+              (delete "gtk+")
+              (prepend inotify-tools motif)))
+    (arguments
+     (substitute-keyword-arguments
+         (package-arguments
+          emacs)
+       ((#:configure-flags flags #~'())
+        #~(cons "--with-x-toolkit=motif"
+                #$flags))
+       ((#:modules _)
+        (%emacs-modules build-system))
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            (delete 'restore-emacs-pdmp)
+            (delete 'strip-double-wrap)))))))
+
 (define-public emacs-no-x
   (package/inherit emacs
     (name "emacs-no-x")
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 87c572ba0f..8d854c7e6d 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -1585,7 +1585,7 @@ plus many of their variants.")
                                "TARGETS += sdcc-misc\n"
                                "PKGS += $(SDCC_MISC)")))
              #t)))))
-    (home-page "http://sdcc.sourceforge.net")
+    (home-page "https://sdcc.sourceforge.net")
     (synopsis "C compiler suite for 8-bit microcontrollers")
     (description "SDCC is a retargetable, optimizing Standard C compiler suite
 that targets 8-bit microcontrollers in the Intel MCS-51 (8051); MOS Technology
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 7c04465526..25439ceadf 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015, 2016, 2021 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2015, 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2015, 2018 David Thompson <dthompson2@worcester.edu>
+;;; Copyright © 2015, 2018, 2023 David Thompson <dthompson2@worcester.edu>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
@@ -74,6 +74,7 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libedit)
@@ -1506,6 +1507,57 @@ reference frontend for the libretro API, currently used by most as a modular
 multi-system game/emulator system.")
     (license license:gpl3+)))
 
+(define-public wasm4
+  (package
+    (name "wasm4")
+    (version "2.5.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/aduros/wasm4")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ycnznwy4i4fw6l507y5xm986rxqvnpl971725q8xinsnq2swpnl"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:tests? #f ; no check target
+      #:configure-flags
+      #~(list (string-append "-DCMAKE_C_FLAGS="
+                             "-I" #$minifb "/include "
+                             "-I" #$wasm3 "/include"))
+      #:phases
+      '(modify-phases %standard-phases
+         ;; WASM4's source is a combination of multiple runtimes.  We want to
+         ;; build the native one.
+         (add-after 'unpack 'chdir-to-native-runtime
+           (lambda _
+             (chdir "runtimes/native")))
+         ;; WASM4 uses git submodules to bundle several dependencies, which we
+         ;; have instead made dedicated packages for.  This phase hacks the
+         ;; build system to use our own stuff.
+         (add-after 'chdir-to-native-runtime 'unbundle
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               ;; These directories do not exist because we aren't pulling in
+               ;; submodules.
+               (("add_subdirectory\\(vendor/minifb\\)") "")
+               (("add_subdirectory\\(vendor/cubeb\\)") "")
+               ;; Add additional libraries needed to successfully link the
+               ;; wasm4 executable using the unbundled dependencies.
+               (("target_link_libraries\\(wasm4 minifb cubeb\\)")
+                "target_link_libraries(wasm4 m GL X11 xkbcommon minifb cubeb m3)")))))))
+    (inputs (list cubeb minifb wasm3))
+    (synopsis "WebAssembly fantasy console")
+    (description "WASM-4 is a low-level fantasy game console for building
+small games with WebAssembly.  Game cartridges (ROMs) are small,
+self-contained .wasm files that can be built with any programming language
+that compiles to WebAssembly.")
+    (home-page "https://wasm4.org")
+    (license license:isc)))
+
 (define-public scummvm
   (package
     (name "scummvm")
@@ -1716,7 +1768,7 @@ This is a part of the TiLP project.")
 (define-public mame
   (package
     (name "mame")
-    (version "0.249")
+    (version "0.251")
     (source
      (origin
        (method git-fetch)
@@ -1725,7 +1777,7 @@ This is a part of the TiLP project.")
              (commit (apply string-append "mame" (string-split version #\.)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1akws4l3b7z5mkf09mdaz640rj41sbg3sh1xlv1sp0yhdjqjpi90"))
+        (base32 "102p6kz4ph9m0sxsyavqhjzg00gmnq8m5mnd5sf14c61d2jc0vzk"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 14beec9d28..f62e31d631 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2020, 2023 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
-;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021 Gerd Heber <gerd.heber@gmail.com>
@@ -68,6 +68,7 @@
   #:use-module (guix build-system emacs)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
   #:use-module (gnu packages)
@@ -86,6 +87,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages dejagnu)
   #:use-module (gnu packages digest)
@@ -147,6 +149,7 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages text-editors)
+  #:use-module (gnu packages tree-sitter)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages version-control)
@@ -944,7 +947,7 @@ Emacs).")
 (define-public kicad
   (package
     (name "kicad")
-    (version "6.0.10")
+    (version "7.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -952,7 +955,7 @@ Emacs).")
                     (commit version)))
               (sha256
                (base32
-                "0pz8d96imc0q3nh7npr5zf0jkzi94wchvw57spcrgqfac9yrld3q"))
+                "1zgpj1rvf97qv36hg4dja46pbzyixlh2g04wlh7cizcrs16b9mzw"))
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -997,22 +1000,23 @@ Emacs).")
             (variable "KICAD") ;to find kicad-doc
             (files '("")))
            (search-path-specification
-            (variable "KICAD6_TEMPLATE_DIR")
+            (variable "KICAD7_TEMPLATE_DIR")
             (files '("share/kicad/template")))
            (search-path-specification
-            (variable "KICAD6_SYMBOL_DIR")
+            (variable "KICAD7_SYMBOL_DIR")
             (files '("share/kicad/symbols")))
            (search-path-specification
-            (variable "KICAD6_FOOTPRINT_DIR")
+            (variable "KICAD7_FOOTPRINT_DIR")
             (files '("share/kicad/footprints")))
            (search-path-specification
-            (variable "KICAD6_3DMODEL_DIR")
+            (variable "KICAD7_3DMODEL_DIR")
             (files '("share/kicad/3dmodels")))))
     (native-inputs (list boost
                          desktop-file-utils
                          gettext-minimal
                          pkg-config
                          swig
+                         unixodbc
                          zlib))
     (inputs (list bash-minimal
                   cairo
@@ -1051,7 +1055,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "06aw8f1pnh63dscv2bkii0cpr2m5yc4baka3avszsxnv8mqn0hwx"))))
+                "0xsj3fl6gkvyr97gx3nvy4ylcr6sc4byj4hbgcdwl2zx3wm02ifz"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBUILD_FORMATS=html")
@@ -1085,7 +1089,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fwnr8x345jbifk71rhyd4b88c4ijp2rcw3pmivnwfb444hbr1lp"))))
+                "1r87xr1453dpfglkg1m4p5d7kcv9gxls1anwk3vp2yppnwz24ydm"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; no tests exist
@@ -1114,7 +1118,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1rs05n1wjb2w3x7xqkkijbdxyw3fj0fph8znvnsxp9bgwaaipd4h"))))
+                "1akhifnjm8jvqsvscn2rr1wpzrls73bpdc6sk40355r1in2djmry"))))
     (synopsis "Official KiCad footprint libraries")
     (description "This package contains the official KiCad footprint libraries.")))
 
@@ -1131,7 +1135,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0nmvfchp25i4bkx6yf7fz1rwy7w6whj2w7mlp02ag3w5v4f137vz"))))
+                "1qw5xm0wbhv6gqvd8mn0jp4abjbizrkx79r6y8f6911mkzi47r6n"))))
     (synopsis "Official KiCad 3D model libraries")
     (description "This package contains the official KiCad 3D model libraries.")))
 
@@ -1148,7 +1152,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "08zxh83fbygh1x2jhca8nrp3f9kihf7kmg65qmyp95wvps4p5h8v"))))
+                "02i279269mhq7wjhb1yqk90820ncssxl9n7b20qr2r4fmm7jpvxv"))))
     (synopsis "Official KiCad project and worksheet templates")
     (description "This package contains the official KiCad project and
 worksheet templates.")))
@@ -1765,7 +1769,7 @@ it suitable for security research and analysis.")
      `(("mpi" ,openmpi)))
     (inputs
      (list coreutils-minimal))
-    (home-page "http://asco.sourceforge.net/")
+    (home-page "https://asco.sourceforge.net/")
     (synopsis "SPICE circuit optimizer")
     (description
      "ASCO brings circuit optimization capabilities to existing SPICE simulators using a
@@ -1820,7 +1824,7 @@ high-performance parallel differential evolution (DE) optimization algorithm.")
      (list bison flex))
     (inputs
      (list libxaw openmpi))
-    (home-page "http://ngspice.sourceforge.net/")
+    (home-page "https://ngspice.sourceforge.net/")
     (synopsis "Mixed-level/mixed-signal circuit simulator")
     (description
      "Ngspice is a mixed-level/mixed-signal circuit simulator.  It includes
@@ -2351,6 +2355,74 @@ specification can be downloaded at @url{http://3mf.io/specification/}.")
     (home-page "https://3mf.io/")
     (license license:bsd-2)))
 
+(define-public python-pyvisa
+  (package
+    (name "python-pyvisa")
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "PyVISA" version))
+              (sha256
+               (base32
+                "1iprr3h6d4w6v8ksgqpkgg545sai7i8hi5a5an394p26b25h1yl9"))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          ;; Delete bundled python-prettytable.
+                          (delete-file-recursively "pyvisa/thirdparty")))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'use-system-prettytable
+                          (lambda _
+                            (substitute* "pyvisa/shell.py"
+                              (("from .thirdparty import prettytable")
+                               "import prettytable")))))))
+    (native-inputs (list python-pytest-7.1))
+    (propagated-inputs (list python-dataclasses python-prettytable
+                             python-typing-extensions))
+    (home-page "https://pyvisa.readthedocs.io/en/latest/")
+    (synopsis "Python binding for the VISA library")
+    (description "PyVISA is a Python package for support of the
+@acronym{VISA, Virtual Instrument Software Architecture}, in order to control
+measurement devices and test equipment via GPIB, RS232, Ethernet or USB.")
+    (license license:expat)))
+
+(define-public python-scikit-rf
+  (package
+    (name "python-scikit-rf")
+    (version "0.24.1")
+    (source (origin
+              (method git-fetch) ;PyPI misses some files required for tests
+              (uri (git-reference
+                    (url "https://github.com/scikit-rf/scikit-rf")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1shp8q8324dkwf448mv9zzi7krx882p122ma4fk015qz91sg4wff"))
+              (file-name (git-file-name name version))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-matplotlib
+                             python-networkx
+                             python-numpy
+                             python-openpyxl
+                             python-pandas
+                             python-pyqt
+                             python-pyqtgraph
+                             python-qtpy
+                             python-scipy))
+    (native-inputs (list python-coverage
+                         python-flake8
+                         python-nbval
+                         python-networkx
+                         python-pytest-7.1
+                         python-pytest-cov
+                         python-pyvisa))
+    (home-page "https://scikit-rf.org/")
+    (synopsis "Radio frequency and Microwave Engineering Scikit")
+    (description "Scikit-rf, or @code{skrf}, is a Python package for RF and
+Microwave engineering.")
+    (license license:bsd-3)))
+
 (define-public openscad
   (package
     (name "openscad")
@@ -2694,7 +2766,7 @@ operations.")
     (inputs
      (list libx11))
     (arguments `(#:tests? #f))
-    (home-page "http://spacenav.sourceforge.net/")
+    (home-page "https://spacenav.sourceforge.net/")
     (synopsis
      "Library for communicating with spacenavd or 3dxsrv")
     (description
@@ -2767,7 +2839,7 @@ for compression of 3D triangle meshes.  The geometry is compressed to a
 fraction of comparable file formats (3DS, STL, COLLADA...), and the format is
 accessible through a simple API")
       (license license:zlib)
-      (home-page "http://openctm.sourceforge.net/"))))
+      (home-page "https://openctm.sourceforge.net/"))))
 
 (define-public lib3ds
   (package
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 8dae5f40d3..64d8945f8e 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -1,10 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Tomáš Čech <sleep_walker@suse.cz>
 ;;; Copyright © 2015 Daniel Pimentel <d4n1@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Timo Eisenmann <eisenmann@fn.de>
+;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,7 +27,6 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
-  #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
@@ -82,63 +82,67 @@
                 "05bxc58hj0z6pkp6yy5cmy1lc575q0nrbr5lxr6z8d4kznh3my6r"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("check" ,check)
-       ("gettext" ,gettext-minimal)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list check
+           gettext-minimal
+           pkg-config
+           python))
     (inputs
-     `(("curl" ,curl)
-       ("giflib" ,giflib)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("ibus" ,ibus)
-       ("mesa" ,mesa)
-       ("libraw" ,libraw)
-       ("librsvg" ,(librsvg-for-system))
-       ("libspectre" ,libspectre)
-       ("libtiff" ,libtiff)
-       ("libxau" ,libxau)
-       ("libxcomposite" ,libxcomposite)
-       ("libxcursor" ,libxcursor)
-       ("libxdamage" ,libxdamage)
-       ("libxdmcp" ,libxdmcp)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxfixes" ,libxfixes)
-       ("libxinerama" ,libxinerama)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("libxss" ,libxscrnsaver)
-       ("libxtst" ,libxtst)
-       ("libwebp" ,libwebp)
-       ("openjpeg" ,openjpeg)
-       ("poppler" ,poppler)
-       ("util-linux" ,util-linux "lib")
-       ("wayland-protocols" ,wayland-protocols)))
+     (list curl
+           giflib
+           gstreamer
+           gst-plugins-base
+           ibus-minimal
+           mesa
+           libraw
+           (librsvg-for-system)
+           libspectre
+           libtiff
+           libxau
+           libxcomposite
+           libxcursor
+           libxdamage
+           libxdmcp
+           libxext
+           libxi
+           libxfixes
+           libxinerama
+           libxrandr
+           libxrender
+           libxscrnsaver
+           libxtst
+           libwebp
+           openjpeg
+           poppler
+           `(,util-linux "lib")
+           wayland-protocols))
     (propagated-inputs
      ;; All these inputs are in package config files in section
      ;; Requires.private.
-     `(("dbus" ,dbus)
-       ("elogind" ,elogind)
-       ("eudev" ,eudev)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("fribidi" ,fribidi)
-       ("glib" ,glib)
-       ("harfbuzz" ,harfbuzz)
-       ("libinput" ,libinput-minimal)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libsndfile" ,libsndfile)
-       ("libpng" ,libpng)
-       ("libunwind" ,libunwind)
-       ("libx11" ,libx11)
-       ("libxkbcommon" ,libxkbcommon)
-       ("luajit" ,luajit)
-       ("lz4" ,lz4)
-       ("openssl" ,openssl)
-       ("pulseaudio" ,pulseaudio)
-       ("wayland" ,wayland)
-       ("zlib" ,zlib)))
+     (append
+       (list dbus
+             elogind
+             eudev
+             fontconfig
+             freetype
+             fribidi
+             glib
+             harfbuzz
+             libinput-minimal
+             libjpeg-turbo
+             libsndfile
+             libpng
+             libunwind
+             libx11
+             libxkbcommon)
+       (if (member (%current-system)
+                   (package-transitive-supported-systems luajit))
+         (list luajit)
+         (list lua-5.2))
+       (list lz4
+             openssl
+             pulseaudio
+             wayland
+             zlib)))
     (arguments
      `(#:configure-flags
        `("-Dembedded-lz4=false"
@@ -148,6 +152,10 @@
          "-Dmount-path=/run/setuid-programs/mount"
          "-Dunmount-path=/run/setuid-programs/umount"
          "-Dnetwork-backend=connman"
+         ,,@(if (member (%current-system)
+                        (package-transitive-supported-systems luajit))
+              `("-Dlua-interpreter=luajit")
+              `("-Dlua-interpreter=lua"))
          ;; For Wayland.
          "-Dwl=true"
          "-Ddrm=true")
@@ -158,22 +166,17 @@
          ;; have to wrap the outputs of efl's dependencies in those libraries.
          (add-after 'unpack 'hardcode-dynamic-libraries
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((curl    (assoc-ref inputs "curl"))
-                   (pulse   (assoc-ref inputs "pulseaudio"))
-                   (sndfile (assoc-ref inputs "libsndfile"))
-                   (elogind (assoc-ref inputs "elogind"))
-                   (lib     "/lib/"))
-               (substitute* "src/lib/ecore_con/ecore_con_url_curl.c"
-                 (("libcurl.so.?" libcurl) ; libcurl.so.[45]
-                  (string-append curl lib libcurl)))
-               (substitute* "src/lib/ecore_audio/ecore_audio.c"
-                 (("libpulse.so.0" libpulse)
-                  (string-append pulse lib libpulse))
-                 (("libsndfile.so.1" libsnd)
-                  (string-append sndfile lib libsnd)))
-               (substitute* "src/lib/elput/elput_logind.c"
-                 (("libelogind.so.0" libelogind)
-                  (string-append elogind "/lib/" libelogind))))))
+             (substitute* "src/lib/ecore_con/ecore_con_url_curl.c"
+               (("libcurl.so.4")
+                (search-input-file inputs "lib/libcurl.so.4")))
+             (substitute* "src/lib/ecore_audio/ecore_audio.c"
+               (("libpulse.so.0")
+                (search-input-file inputs "lib/libpulse.so.0"))
+               (("libsndfile.so.1")
+                (search-input-file inputs "lib/libsndfile.so.1")))
+             (substitute* "src/lib/elput/elput_logind.c"
+               (("libelogind.so.0")
+                (search-input-file inputs "lib/libelogind.so.0")))))
          (add-after 'unpack 'fix-install-paths
            (lambda _
              (substitute* "dbus-services/meson.build"
diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm
index cfada5a619..57350a523c 100644
--- a/gnu/packages/erlang.scm
+++ b/gnu/packages/erlang.scm
@@ -376,14 +376,14 @@ Markdown.")
     (propagated-inputs
      (list erlang-cf))
     (native-inputs
-     (list git-minimal/fixed))  ;; Required for tests
+     (list git-minimal/pinned))  ;; Required for tests
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'check 'check-setup
            (lambda _
              (setenv "TERM" "xterm")))))) ; enable color in logs
-    (home-page "http://erlware.github.io/erlware_commons/")
+    (home-page "https://erlware.github.io/erlware_commons/")
     (synopsis "Additional standard library for Erlang")
     (description "Erlware Commons is an Erlware project focused on all aspects
 of reusable Erlang components.")
@@ -701,7 +701,7 @@ applications as a dependent libraries.")
           (base32 "1dfz56034pa25axly9vqdzv3phkn8ll0qwrkws96pbgcprhky1hx"))))
     (build-system rebar-build-system)
     (inputs
-     (list git-minimal/fixed))
+     (list git-minimal/pinned))
     (arguments
      `(;; Running the tests require binary artifact (tar-file containing
        ;; samples git repos)  TODO: remove these from the source
diff --git a/gnu/packages/fabric-management.scm b/gnu/packages/fabric-management.scm
index 13851639ae..3ab1a35d7c 100644
--- a/gnu/packages/fabric-management.scm
+++ b/gnu/packages/fabric-management.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2017 Dave Love <fx@gnu.org>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages fabric-management)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix licenses)
   #:use-module (guix download)
@@ -108,28 +109,30 @@ running the opensm daemon.")
      ;; FIXME: needs rst2man for man pages
      (list perl pkg-config))
     (arguments
-     '(#:configure-flags
-       (list (string-append "CPPFLAGS=-I" (assoc-ref %build-inputs "opensm")
-                            "/include/infiniband")
-             (string-append "--with-perl-installdir=" (assoc-ref %outputs "lib")
-                            "/lib/perl5/vendor_perl")
-             "--disable-static")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'licence
-           (lambda _
-             (let ((doc (string-append (assoc-ref %outputs "lib") "/share/doc")))
-               (mkdir-p doc)
-               (install-file "COPYING" doc))))
-         (add-after 'install-file 'move-perl
-           ;; Avoid perl in lib closure
-           (lambda _
-             (let ((perlout (string-append (assoc-ref %outputs "out") "/lib"))
-                   (perlin (string-append (assoc-ref %outputs "lib")
-                                          "/lib/perl5")))
-               (mkdir-p perlout)
-               (rename-file perlin perlout)
-               #t))))))
+     (list #:configure-flags
+           #~(list (string-append "CPPFLAGS=-I"
+                                  #$(this-package-input "opensm")
+                                  "/include/infiniband")
+                   (string-append "--with-perl-installdir=" #$output:lib
+                                  "/lib/perl5/vendor_perl")
+                   "--disable-static")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'licence
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((doc (string-append (assoc-ref outputs "lib")
+                                             "/share/doc")))
+                     (mkdir-p doc)
+                     (install-file "COPYING" doc))))
+               (add-after 'install-file 'move-perl
+                 ;; Avoid perl in lib closure
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((perlout (string-append (assoc-ref outputs "out")
+                                                 "/lib"))
+                         (perlin (string-append (assoc-ref outputs "lib")
+                                                "/lib/perl5")))
+                     (mkdir-p perlout)
+                     (rename-file perlin perlout)))))))
     (home-page "https://github.com/linux-rdma/infiniband-diags")
     (synopsis "Infiniband diagnostic tools")
     (description "This is a set of command-line utilities to help configure,
@@ -161,10 +164,16 @@ interface to this library is not guaranteed to be stable.")
                   perl))
     (native-inputs (list swig))
     (arguments
-     `(#:configure-flags
-       (list (string-append "--with-osm="  (assoc-ref %build-inputs "opensm"))
-             (string-append "--with-tk-lib=" (assoc-ref %build-inputs "tk") "/lib")
-             "--disable-static")))
+     (list #:configure-flags
+           #~(list (string-append "--with-osm="
+                                  #$(this-package-input "opensm"))
+                   (string-append "--with-tk-lib="
+                                  #$(this-package-input "tk") "/lib")
+                   "--disable-static"
+
+                   ;; Address this link error:
+                   ;; ld: .libs/ibis.o:/ibis/src/ibis.c:55: multiple definition of `IbisObj'; .libs/ibis_wrap.o:/ibis/src/ibis_wrap.c:3007: first defined here
+                   "CFLAGS=-O2 -g -fcommon")))
     (synopsis "InfiniBand network utilities")
     (description "These command-line utilities allow for diagnosing and
 testing InfiniBand networks.")
@@ -187,30 +196,29 @@ testing InfiniBand networks.")
                 "0i0ji5ivzxjqh3ys1m517ghw3am7cw1hvf40ma7hsq3wznsyx5s1"))))
     (build-system gnu-build-system)
     (arguments
-     '( ;; These are some of the flags found in 'contrib/configure-release'.
-       #:configure-flags (list
-                          "--disable-static"
+     (list
+      ;; These are some of the flags found in ;; 'contrib/configure-release'.
+      #:configure-flags #~(list
+                           "--disable-static"
 
-                          ;; XXX: Disable optimizations specific to the build
-                          ;; machine (AVX, etc.)  There's apparently no way to
-                          ;; have them picked up at load time.
-                          "--disable-optimizations"
+                           ;; XXX: Disable optimizations specific to the build
+                           ;; machine (AVX, etc.)  There's apparently no way to
+                           ;; have them picked up at load time.
+                           "--disable-optimizations"
 
-                          "--disable-logging"
-                          "--disable-debug"
-                          "--disable-assertions"
-                          "--disable-params-check"
+                           "--disable-logging"
+                           "--disable-debug"
+                           "--disable-assertions"
+                           "--disable-params-check"
 
-                          (string-append "--with-verbs="
-                                         (assoc-ref %build-inputs
-                                                    "rdma-core"))
+                           (string-append "--with-verbs="
+                                          #$(this-package-input "rdma-core"))
 
-                          (string-append "--with-rdmacm="
-                                         (assoc-ref %build-inputs
-                                                    "rdma-core")))
+                           (string-append "--with-rdmacm="
+                                          #$(this-package-input "rdma-core")))
 
-       ;; Be verbose so that compiler flags are displayed.
-       #:make-flags '("V=1")))
+      ;; Be verbose so that compiler flags are displayed.
+      #:make-flags #~'("V=1")))
     (native-inputs
      (list autoconf automake libtool pkg-config))
     (inputs
@@ -228,4 +236,4 @@ memory mechanisms for efficient intra-node communication.")
 
     ;; <ucm/bistro/bistro.h> lists only PowerPC64, AArch64, and x86_64 as
     ;; supported.
-    (supported-systems '("x86_64-linux" "aarch64-linux"))))
+    (supported-systems '("x86_64-linux" "aarch64-linux" "powerpc64le-linux"))))
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 049ef04ea8..bc5bb41fb3 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -461,8 +461,8 @@ from a mounted file system.")
     (license license:gpl2+)))
 
 (define-public bcachefs-tools
-  (let ((commit "494421ee6e85514f90bb316d77e1dd4f7dad3420")
-        (revision "15"))
+  (let ((commit "46a6b9210c927ab46fd1227cb6f641be0b4a7505")
+        (revision "16"))
     (package
       (name "bcachefs-tools")
       (version (git-version "0.1" revision commit))
@@ -474,7 +474,7 @@ from a mounted file system.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1sdh9rl8ydnb28646773lsxpdy5jysvjbxs2nwr3hsv4qyv93vc4"))))
+          (base32 "0jblpwz8mxrx0pa2gc5bwj60qjj2c0zmd8r06f2bhgzs75avpkj3"))))
       (build-system gnu-build-system)
       (arguments
        (list #:make-flags
@@ -706,7 +706,7 @@ single file can be mounted.")
     (build-system gnu-build-system)
     (inputs
      (list `(,util-linux "lib")))
-    (home-page "http://jfs.sourceforge.net/home.html")
+    (home-page "https://jfs.sourceforge.net/home.html")
     (synopsis "Utilities for managing JFS file systems")
     (description
      "The JFSutils are a collection of utilities for managing the @acronym{JFS,
@@ -926,7 +926,7 @@ All of this is accomplished without a centralized metadata server.")
      (list curl glib fuse))
     (native-inputs
      (list pkg-config))
-    (home-page "http://curlftpfs.sourceforge.net/")
+    (home-page "https://curlftpfs.sourceforge.net/")
     (synopsis "Mount remote file systems over FTP")
     (description
      "This is a file system client based on the FTP File Transfer Protocol.")
@@ -1251,7 +1251,7 @@ with the included @command{xfstests-check} helper.")
 (define-public zfs
   (package
     (name "zfs")
-    (version "2.1.7")
+    (version "2.1.9")
     (outputs '("out" "module" "src"))
     (source
       (origin
@@ -1260,7 +1260,7 @@ with the included @command{xfstests-check} helper.")
                               "/download/zfs-" version
                               "/zfs-" version ".tar.gz"))
           (sha256
-           (base32 "06x7mjsgqdl1gqyn0gniklphh6i0fgbnxyjgqq8gzrjx30zfcqk4"))))
+           (base32 "1xjhzqi4jqc3mdps93w4b5f0qhy16fmhz44gsvy1fkmm5vgjq5vb"))))
     (build-system linux-module-build-system)
     (arguments
      (list
@@ -1809,7 +1809,7 @@ in FUSE for rootless containers.")
 (define-public bees
   (package
     (name "bees")
-    (version "0.8")
+    (version "0.9.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1826,14 +1826,9 @@ in FUSE for rootless containers.")
                      (("city.o.*") ""))
                    (substitute* "src/bees-hash.cc"
                      (("#include .crucible/city.h.") "#include <city.h>"))))
-              (patches
-               (search-patches
-                ;; XXX: Cherry-picked from upstream, remove the patch when
-                ;; bumping version.
-                "bees-beesd-honor-destdir-on-installation.patch"))
               (sha256
                (base32
-                "1kxpz1p9k5ir385kpvmfjawki5vg22hlx768k7835w6n5z5a65y4"))))
+                "0xik1xg6ma5yglhvs60ny27242iapqwzikmqbgij1avjffs6776a"))))
     (build-system gnu-build-system)
     (arguments
      (list #:test-target "test"
@@ -1867,16 +1862,19 @@ in FUSE for rootless containers.")
                       (search-input-file inputs (string-append "/bin/" command)))
 
                      (("btrfs sub")
-                      (string-append (search-input-file inputs "/bin/btrfs") " sub"))))))))
+                      (string-append (search-input-file inputs "/bin/btrfs")
+                                     " sub"))))))))
     (inputs (list btrfs-progs cityhash util-linux))
     (home-page "https://github.com/Zygo/bees")
-    (synopsis "Best-Effort Extent-Same, a btrfs dedupe agent")
+    (synopsis "Deduplication agent for btrfs file systems")
     (description
-     "@code{bees} is a block-oriented userspace deduplication agent designed
-for large btrfs filesystems.  It is an offline dedupe combined with an
-incremental data scan capability to minimize time data spends on disk from
-write to dedupe.")
-    (license license:gpl3+)))
+     "@acronym{BEES, Best-Effort Extent-Same} is a block-oriented, user-space
+deduplication agent designed for large btrfs file systems.  It combines off-line
+data deduplication with incremental scanning to minimize the time your data
+spend on disk between being written and being deduplicated.")
+    (license (list license:gpl3+     ; the combined work
+                   license:zlib      ; lib/crc64.cc
+                   license:gpl2))))  ; include/crucible/btrfs.h
 
 (define-public dwarfs
   (package
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 7b8c1a8c03..bd9125c919 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -32,6 +32,8 @@
 ;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
 ;;; Copyright © 2022 Collin J. Doering <collin@rekahsoft.ca>
 ;;; Copyright © 2022 Justin Veilleux <terramorpha@cock.li>
+;;; Copyright © 2023 Frank Pursel <frank.pursel@gmail.com>
+;;; Copyright © 2023 Skylar Hill <stellarskylark@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -213,57 +215,46 @@ line client and a client based on Qt.")
 
 (define-public bitcoin-core bitcoin-core-23.0)
 
-(define-public hledger
+(define-public ghc-hledger
   (package
-    (name "hledger")
-    (version "1.21")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hledger/hledger-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "07fcfkmv4cy92njnf2qc7jh0naz96q962hxldcd7hk4k7ddv0mss"))))
+    (name "ghc-hledger")
+    (version "1.27.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hledger" version))
+              (sha256
+               (base32
+                "0qdg87m7ys2ykqqq32p7h7aw827w4f5bcqx4dspxxq6zqlvzddqb"))))
     (build-system haskell-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'install 'install-doc
-            (lambda _
-              (install-file "hledger.info" (string-append #$output "/share/info"))
-              (install-file "hledger.1" (string-append #$output "/man/man1")))))))
-    (inputs
-     (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")
+    (properties '((upstream-name . "hledger")))
+    (inputs (list ghc-decimal
+                  ghc-diff
+                  ghc-aeson
+                  ghc-ansi-terminal
+                  ghc-breakpoint
+                  ghc-cmdargs
+                  ghc-data-default
+                  ghc-extra
+                  ghc-githash
+                  ghc-hashable
+                  ghc-hledger-lib
+                  ghc-lucid
+                  ghc-math-functions
+                  ghc-megaparsec
+                  ghc-microlens
+                  ghc-regex-tdfa
+                  ghc-safe
+                  ghc-shakespeare
+                  ghc-split
+                  ghc-tabular
+                  ghc-tasty
+                  ghc-temporary
+                  ghc-timeit
+                  ghc-unordered-containers
+                  ghc-utf8-string
+                  ghc-utility-ht
+                  ghc-wizards))
+    (home-page "http://hledger.org")
     (synopsis "Command-line interface for the hledger accounting system")
     (description
      "The command-line interface for the hledger accounting system.  Its basic
@@ -277,17 +268,34 @@ rewrite of Ledger, and one of the leading implementations of Plain Text
 Accounting.")
     (license license:gpl3)))
 
+(define-public hledger
+  (package
+    (inherit ghc-hledger)
+    (name "hledger")
+    (arguments
+     (list
+      #:haddock? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'install-doc
+            (lambda _
+              (install-file "hledger.info" (string-append #$output "/share/info"))
+              (install-file "hledger.1" (string-append #$output "/man/man1"))))
+           (add-after 'register 'remove-libraries
+             (lambda* (#:key outputs #:allow-other-keys)
+               (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))))))
+
 (define-public homebank
   (package
     (name "homebank")
-    (version "5.6.1")
+    (version "5.6.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://homebank.free.fr/public/sources/"
                                   "homebank-" version ".tar.gz"))
               (sha256
                (base32
-                "03wgyc777bzys32iv32yf7aj3z4hx87dskq1maw9l9jkqlqrqj1s"))))
+                "1w8nafqr54i3gksd2s0n246ip178qikn0jcmdx4ihg2dw1cdxsqj"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      (list pkg-config intltool))
@@ -351,7 +359,8 @@ and dynamically with report tools based on filtering and graphical charts.")
              (let ((examples (string-append (assoc-ref outputs "out")
                                             "/share/doc/ledger/examples")))
                (install-file "test/input/sample.dat" examples)
-               (install-file "test/input/demo.ledger" examples))
+               (install-file "test/input/demo.ledger" examples)
+               (install-file "contrib/report" examples))
              #t))
          (add-after 'build 'build-doc
            (lambda _ (invoke "make" "doc")))
@@ -705,7 +714,7 @@ blockchain.")
   ;; the system's dynamically linked library.
   (package
     (name "monero")
-    (version "0.18.1.2")
+    (version "0.18.2.0")
     (source
      (origin
        (method git-fetch)
@@ -723,7 +732,7 @@ blockchain.")
             delete-file-recursively
             '("external/miniupnp" "external/rapidjson"))))
        (sha256
-        (base32 "033hfc98gv28x05gc1ln6dmyc45cki4qdylmz35wh4dchyr74pf9"))))
+        (base32 "0k41mkz0lp8qavgy3d9813pkmyy8rnhd0fl7wvzdhr7fznqn9sca"))))
     (build-system cmake-build-system)
     (native-inputs
      (list doxygen
@@ -810,7 +819,7 @@ the Monero command line client and daemon.")
 (define-public monero-gui
   (package
     (name "monero-gui")
-    (version "0.18.1.2")
+    (version "0.18.2.0")
     (source
      (origin
        (method git-fetch)
@@ -826,7 +835,7 @@ the Monero command line client and daemon.")
            ;; See the 'extract-monero-sources' phase.
            (delete-file-recursively "monero")))
        (sha256
-        (base32 "1lwlkqj8liflk0jfzmlclm1xca0x3z8v3kcbzd671rgismm8v332"))))
+        (base32 "0ka20p4f6fbhkhrm1jbssnjh5sjl419fy418jl8hcg34jriywvck"))))
     (build-system qt-build-system)
     (native-inputs
      `(,@(package-native-inputs monero)
@@ -1575,7 +1584,7 @@ information.")
                            patch
                            pkg-config))
       (build-system glib-or-gtk-build-system)
-      (home-page "http://gbonds.sourceforge.net")
+      (home-page "https://gbonds.sourceforge.net")
       (synopsis "@acronym{U.S.} Savings Bond inventory program for GNOME")
       (description
        "GBonds is a @acronym{U.S.} Savings Bond inventory program for the
@@ -1993,59 +2002,68 @@ generate a variety of reports from them, and provides a web interface.")
 (define-public hledger-web
   (package
     (name "hledger-web")
-    (version "1.21")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hledger-web/hledger-web-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0ivszqcypw0j2wn4r7fv7dqm1pvr0b1y6rqpxagzyk8cxn3ic9g2"))))
+    (version "1.27.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hledger-web" version))
+              (sha256
+               (base32
+                "151dxci7dld8626dzw823sr3d9iaac92wfzbfcbdz4jh9f7n07wa"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hledger-web")))
+    (inputs (list ghc-decimal
+                  ghc-aeson
+                  ghc-base64
+                  ghc-blaze-html
+                  ghc-blaze-markup
+                  ghc-breakpoint
+                  ghc-case-insensitive
+                  ghc-clientsession
+                  ghc-cmdargs
+                  ghc-conduit
+                  ghc-conduit-extra
+                  ghc-data-default
+                  ghc-extra
+                  ghc-hjsmin
+                  ghc-hledger
+                  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
+                  ghc-wai-cors
+                  ghc-wai-extra
+                  ghc-wai-handler-launch
+                  ghc-warp
+                  ghc-yaml
+                  ghc-yesod
+                  ghc-yesod-core
+                  ghc-yesod-form
+                  ghc-yesod-static
+                  ghc-yesod-test))
     (arguments
-     `(#:tests? #f ; TODO: fail.
-       #:cabal-revision
-       ("1" "1hnw10ibhbafbsfj5lzlxwjg4cjnqr5bb51n6mqbi30qqabgq78x")))
-    (inputs
-     (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")
+     (list
+      #:haddock? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Tests write to $HOME.
+          (add-before 'check 'set-home
+            (lambda _
+              (setenv "HOME" "/tmp")))
+           (add-after 'register 'remove-libraries
+             (lambda* (#:key outputs #:allow-other-keys)
+               (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))))
+    (home-page "http://hledger.org")
     (synopsis "Web-based user interface for the hledger accounting system")
-    (description "This package provides a simple Web-based User
+    (description
+     "This package provides a simple Web-based User
 Interface (UI) for the hledger accounting system.  It can be used as a
 local, single-user UI, or as a multi-user UI for viewing, adding, and
 editing on the Web.")
@@ -2201,7 +2219,7 @@ and manipulation.")
 (define-public xmrig
   (package
     (name "xmrig")
-    (version "6.18.1")
+    (version "6.19.0")
     (source
      (origin
        (method git-fetch)
@@ -2209,17 +2227,19 @@ and manipulation.")
              (url "https://github.com/xmrig/xmrig")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
-       (sha256 (base32 "0f0kly374pkgnpnx60hac0bg9297a5zhycss6p37iavayn28jg39"))
+       (sha256 (base32 "10vaq6ld4sddnpmv9dg71fjvw1jrfaddrp3bq6p3dxhsl153khm4"))
        (modules '((guix build utils)))
        (snippet
         ;; TODO: Try to use system libraries instead of bundled ones in
         ;; "src/3rdparty/". It requires changes to some "cmake/..." scripts
         ;; and to some source files.
-        #~(substitute* "src/donate.h"
-            (("constexpr const int kDefaultDonateLevel = 1;")
-             "constexpr const int kDefaultDonateLevel = 0;")
-            (("constexpr const int kMinimumDonateLevel = 1;")
-             "constexpr const int kMinimumDonateLevel = 0;")))))
+        #~(begin
+            (delete-file-recursively "src/3rdparty/hwloc")
+            (substitute* "src/donate.h"
+              (("constexpr const int kDefaultDonateLevel = 1;")
+               "constexpr const int kDefaultDonateLevel = 0;")
+              (("constexpr const int kMinimumDonateLevel = 1;")
+               "constexpr const int kMinimumDonateLevel = 0;"))))))
     (build-system cmake-build-system)
     (inputs
      (list
@@ -2257,7 +2277,7 @@ mining.")
 (define-public p2pool
   (package
     (name "p2pool")
-    (version "2.6")
+    (version "3.1")
     (source
      (origin
        (method git-fetch)
@@ -2266,7 +2286,7 @@ mining.")
              (commit (string-append "v" version))
              (recursive? #t)))
        (file-name (git-file-name name version))
-       (sha256 (base32 "0832mv3f4c61w8s25higjbmmajjkvjdriw1xfygjiw5qxdcs202z"))
+       (sha256 (base32 "0fvm864p4pxjsb03g88jkaj3wj94dkxrbwjwa1jk6s11skzn0z68"))
        (modules '((guix build utils)))
        (snippet
         #~(for-each delete-file-recursively
@@ -2280,13 +2300,22 @@ mining.")
     (inputs
      (list cppzmq curl gss libuv rapidjson zeromq))
     (arguments
-     (list
-      #:tests? #f
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'install
-            (lambda _
-              (install-file "p2pool" (string-append #$output "/bin")))))))
+     (list ; FIXME: Linking fails when LTO is activated.
+           #:configure-flags #~(list "-DWITH_LTO=OFF")
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (mkdir-p "tests")
+                     (chdir "tests")
+                     (invoke "cmake" "../../source/tests")
+                     (invoke "make" "-j" (number->string (parallel-job-count)))
+                     (invoke "./p2pool_tests")
+                     (chdir ".."))))
+               (replace 'install
+                 (lambda _
+                   (install-file "p2pool" (string-append #$output "/bin")))))))
     (home-page "https://p2pool.io/")
     (synopsis "Decentralized Monero mining pool")
     (description "Monero P2Pool is a peer-to-peer Monero mining pool.  P2Pool
@@ -2294,3 +2323,67 @@ combines the advantages of pool and solo mining; you still fully control your
 Monero node and what it mines, but you get frequent payouts like on a regular
 pool.")
     (license license:gpl3)))
+
+(define-public opentaxsolver
+  ;; The OTS version is formatted like tax-year_version. So, at time of
+  ;; writing, the version is 2022_20.00. Each part of this is used in
+  ;; different places in the source uri, so it's convenient to have them
+  ;; separately like this.
+  (let ((tax-year "2022")
+        (ots-version "20.00"))
+    (package
+      (name "opentaxsolver")
+      (version (string-append tax-year "_" ots-version))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "mirror://sourceforge/opentaxsolver/OTS_"
+                             tax-year "/v" ots-version
+                             "_linux/OpenTaxSolver" version "_linux64.tgz"))
+         (sha256
+          (base32
+           "06k0a72bmwdmr71dvrp8b4vl8vilnggsh92hrp7wjdgcjj9m074w"))
+         (patches (search-patches "opentaxsolver-file-browser-fix.patch"))))
+      (build-system glib-or-gtk-build-system)
+      (arguments
+       (list
+        #:tests? #f                     ;no tests
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'configure)         ;no configure script
+            ;; OTS does provide a shellscript that does exactly this, but we
+            ;; need to do it ourselves to specify the correct compiler and to
+            ;; delete the GUI binaries.
+            (replace 'build
+              (lambda _
+                (delete-file "Run_taxsolve_GUI")
+                (delete-file-recursively "bin")
+                (mkdir "bin")
+                (chdir "src/Gui_gtk")
+                (invoke "make"
+                        (string-append "CC=" #$(cc-for-target)))
+                (chdir "..")
+                (invoke "make"
+                        (string-append "CC=" #$(cc-for-target)))))
+            ;; OTS doesn't provide a `make install` target, because it assumes
+            ;; it'll be run from the tarball. So, we do it ourselves, making
+            ;; sure to replicate the directory structure of the tarball.
+            (replace 'install
+              (lambda _
+                (copy-recursively "../bin"
+                                  (string-append #$output "/bin"))
+                (symlink (string-append #$output "/bin/ots_gui2")
+                         (string-append #$output "/bin/Run_taxsolve_GUI"))
+                (copy-recursively "../tax_form_files"
+                                  (string-append #$output "/tax_form_files"))
+                (copy-recursively "formdata"
+                                  (string-append #$output "/src/formdata")))))))
+      (native-inputs (list pkg-config))
+      (inputs (list gtk+-2))
+      (synopsis "Yearly tax preparation tool")
+      (description
+       "OpenTaxSolver is a program for calculating tax form entries for
+federal and state personal income taxes.  It automatically fills out and
+prints your forms for mailing.")
+      (home-page "https://opentaxsolver.sourceforge.net/")
+      (license license:gpl2+))))
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index aac1b5bf73..a876aa727a 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -456,6 +456,13 @@ provide OpenFirmware functionality on top of an already running system.")
       (inherit base)
       (arguments
        (substitute-keyword-arguments (package-arguments base)
+         ((#:system system (%current-system))
+          (if (string-prefix? "aarch64-linux" (or (%current-system)
+                                                  (%current-target-system)))
+            "armhf-linux"
+            system))
+         ;; No need to cross-compile, package produces reproducible firmware.
+         ((#:target _ #f) #f)
          ((#:phases phases)
           #~(modify-phases #$phases
               (add-after 'install 'rename-executable
@@ -569,6 +576,7 @@ executing in M-mode.")
     (arguments
      (list
       #:tests? #f                       ;no tests
+      #:target #f                       ; Package produces firmware.
       #:make-flags
       ;; If EXTRAVERSION is not set the build system will embed the current
       ;; date in binaries.  Use this opportunity to personalize as recommended
@@ -740,6 +748,7 @@ coreboot.")
                      "HOSTCC=gcc")
              #:parallel-build? #f
              #:tests? #f   ;no tests
+             #:target #f   ; Package produces firmware.
              #:phases
              #~(modify-phases %standard-phases
                  (add-after 'unpack 'build-reproducibly
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index e7165efe79..028631cbd2 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -216,7 +216,7 @@ intended to download and upload firmware to devices connected over USB.  It
 ranges from small devices like micro-controller boards up to mobile phones.
 With dfu-util you are able to download firmware to your device or upload
 firmware from it.")
-    (home-page "http://dfu-util.sourceforge.net/")
+    (home-page "https://dfu-util.sourceforge.net/")
     (license license:gpl2+)))
 
 (define-public teensy-loader-cli
@@ -507,7 +507,7 @@ Unifinished Extensible Firmware Interface (UEFI) images.")
            groff
            libtool
            which))
-    (home-page "http://srecord.sourceforge.net/")
+    (home-page "https://srecord.sourceforge.net/")
     (synopsis "Tools for EPROM files")
     (description "The SRecord package is a collection of powerful tools for
 manipulating EPROM load files.  It reads and writes numerous EPROM file
diff --git a/gnu/packages/fltk.scm b/gnu/packages/fltk.scm
index dee77d6aa4..5a1582b1bc 100644
--- a/gnu/packages/fltk.scm
+++ b/gnu/packages/fltk.scm
@@ -138,7 +138,7 @@ UI builder called FLUID that can be used to create applications in minutes.")
      (list cairo libxft libx11))
     (native-inputs
      (list pkg-config))
-    (home-page "http://non.tuxfamily.org/ntk/")
+    (home-page "https://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
 library, adding improved graphics rendering via Cairo, a streamlined and
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 6d1fc14f37..bcd5960bda 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -286,6 +286,30 @@ The Lato 2.010 family supports more than 100 Latin-based languages, over
 50 Cyrillic-based languages as well as Greek and IPA phonetics.")
     (license license:silofl1.1)))
 
+(define-public font-carlito
+  (let ((commit "64cab86c9b602088697294736b86f2831f3f44be")
+        (revision "0"))
+    (package
+      (name "font-carlito")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/googlefonts/carlito")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "02wy8vs5m4whm5apl3p6cpz0qa9jwjj9qi219zjspiszha2ivssz"))))
+      (build-system font-build-system)
+      (home-page "https://github.com/googlefonts/carlito")
+      (synopsis "Free alternative to Calibri")
+      (description
+       "Carlito is a font designed by Łukasz Dziedzic derived from
+Lato (also designed by Łukasz Dziedzic) that is metric-compatible with
+Calibri.")
+      (license license:silofl1.1))))
+
 (define-public font-gfs-ambrosia
   ;; Based on
   ;; https://src.fedoraproject.org/rpms/gfs-ambrosia-fonts
@@ -522,7 +546,7 @@ The unified Libertinus family consists of:
                       make-flags)))))))
     (native-inputs
      (list bdftopcf font-util mkfontdir pkg-config python))
-    (home-page "http://terminus-font.sourceforge.net/")
+    (home-page "https://terminus-font.sourceforge.net/")
     (synopsis "Simple bitmap programming font")
     (description "Terminus Font is a clean, fixed-width bitmap font, designed
 for long periods of working with computers (8 or more hours per day).")
@@ -729,7 +753,7 @@ printing old Malayalam books without compromising the writing style.")
         (base32
          "0kph9l3g7jb2bpmxdbdg5zl56wacmnvdvsdn7is1gc750sqvsn31"))))
     (build-system font-build-system)
-    (home-page "http://www.gust.org.pl/projects/e-foundry/tex-gyre/")
+    (home-page "https://www.gust.org.pl/projects/e-foundry/tex-gyre/")
     (synopsis "Remake of Ghostscript fonts")
     (description "The TeX Gyre collection of fonts is the result of an
 extensive remake and extension of the freely available base PostScript fonts
@@ -958,11 +982,15 @@ display all Unicode symbols.")
      (list
       #:phases
       #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-unsupported
+          (add-after 'unpack 'enter-font-directory
+            (lambda _
+              ;; Note this ensures the correct license file is installed.
+              (chdir "fonts")))
+          (add-after 'enter-font-directory 'remove-unsupported
             (lambda* _
-              (delete-file "fonts/NotoColorEmoji_WindowsCompatible.ttf")
-              (delete-file "fonts/Noto-COLRv1-noflags.ttf")
-              (delete-file "fonts/Noto-COLRv1.ttf"))))))
+              (delete-file "NotoColorEmoji_WindowsCompatible.ttf")
+              (delete-file "Noto-COLRv1-noflags.ttf")
+              (delete-file "Noto-COLRv1.ttf"))))))
     (home-page "https://fonts.google.com/noto/specimen/Noto+Color+Emoji")
     (synopsis "Font for rendering color emoji characters")
     (description
@@ -1242,6 +1270,30 @@ work well in user interface (UI) environments.")
 Sans Pro family.")
     (license license:silofl1.1)))
 
+(define-public font-microsoft-cascadia
+  (package
+    (name "font-microsoft-cascadia")
+    (version "2111.01")
+    (source (origin
+              (method url-fetch/zipbomb)
+              (uri (string-append
+                    "https://github.com/microsoft/cascadia-code/"
+                    "releases/download/v"
+                    version
+                    "/CascadiaCode-"
+                    version
+                    ".zip"))
+              (sha256
+               (base32
+                "04p72jmbafblrliy5phqi6sqi52wgzpilf3rphppxf7zdlbnizai"))))
+    (build-system font-build-system)
+    (home-page "https://github.com/microsoft/cascadia-code")
+    (synopsis "Monospaced font with programming ligatures")
+    (description
+     "Cascadia is a fun new coding font that comes bundled with Windows
+Terminal, and is now the default font in Visual Studio as well.")
+    (license license:silofl1.1)))
+
 (define-public font-fira-sans
   ;; Fira Sans v4.203 (which corresponds to Fira Mono v3.206) is the final
   ;; version to include UFO sources. It is the same version packaged by other
@@ -1508,7 +1560,7 @@ later hand-tweaked with the gbdfed(1) editor:
   </alias>
 </fontconfig>\n"))))
              #t)))))
-    (home-page "http://www.comicneue.com/")
+    (home-page "https://www.comicneue.com/")
     (synopsis "Font that fixes the shortcomings of Comic Sans")
     (description
      "Comic Neue is a font that attempts to create a respectable casual
@@ -2876,7 +2928,7 @@ within GB 2312, standard glyphs for Mainland China is used.")
   (package
     (inherit font-lxgw-wenkai)
     (name "font-lxgw-wenkai-tc")
-    (version "0.931")
+    (version "0.932")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2884,7 +2936,7 @@ within GB 2312, standard glyphs for Mainland China is used.")
                     version "/lxgw-wenkai-tc-v" version ".tar.gz"))
               (sha256
                (base32
-                "1dba201p8ch09n5wcr5gx263rd2851v76m6f3xac5m3pd9f4i8fg"))))
+                "12yp3q3hhv847qj7a51cjxxqb2rqm4lvbm54wdr2j4awg3g8lflg"))))
     (home-page "https://github.com/lxgw/LxgwWenKaitc")
     (synopsis "Traditional Chinese Imitation Song typeface")
     (description
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 8405124201..341554b687 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -1088,7 +1088,7 @@ poorly hinted Adobe Type 1 font through the FreeType library and get it back
 with freshly generated hints.  The files produced by default are in
 human-readable form, which further needs to be encoded with t1utilities to
 work with most software requiring Type 1 fonts.")
-    (home-page "http://ttf2pt1.sourceforge.net/")
+    (home-page "https://ttf2pt1.sourceforge.net/")
     (license license:bsd-3)))
 
 (define-public woff2
@@ -1387,7 +1387,7 @@ company or university logos, handwritten notes, etc.  The resulting image is
 not \"jaggy\" like a bitmap, but smooth.  It can then be rendered at any
 resolution.")
     (license license:gpl2+)
-    (home-page "http://potrace.sourceforge.net/")))
+    (home-page "https://potrace.sourceforge.net/")))
 
 (define-public libotf
   (package
@@ -1432,7 +1432,7 @@ using the above tables.")
      "Raph Levien's Spiro package as a library.  A mechanism for drawing
 smooth contours with constant curvature at the spline joins.")
     (license license:gpl2+)
-    (home-page "http://libspiro.sourceforge.net/")))
+    (home-page "https://libspiro.sourceforge.net/")))
 
 (define-public libuninameslist
   (package
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index acce5f8f82..31fc0bc5c6 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -137,93 +137,85 @@ For synthesis, the compiler generates netlists in the desired format.")
 (define-public yosys
   (package
     (name "yosys")
-    (version "0.9")
+    (version "0.26")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/cliffordwolf/yosys")
-                    (commit (string-append "yosys-" version))
-                    (recursive? #t))) ; for the ‘iverilog’ submodule
+                    (url "https://github.com/YosysHQ/yosys")
+                    (commit (string-append "yosys-" version))))
               (sha256
-                (base32
-                   "0lb9r055h8y1vj2z8gm4ip0v06j5mk7f9zx9gi67kkqb7g4rhjli"))
-              (file-name (git-file-name name version))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "Makefile"
-                    (("ABCREV = .*") "ABCREV = default\n"))
-                  #t))))
+               (base32
+                "0s79ljgbcfkm7l9km7dcvlz4mnx38nbyxppscvh5il5lw07n45gx"))
+              (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     `(#:test-target "test"
-       #:make-flags (list "CC=gcc"
-                          "CXX=g++"
-                          (string-append "PREFIX=" %output))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'fix-paths
-           (lambda _
-             (substitute* "./passes/cmds/show.cc"
-               (("exec xdot") (string-append "exec " (which "xdot")))
-               (("dot -") (string-append (which "dot") " -"))
-               (("fuser") (which "fuser")))
-             #t))
-         (replace 'configure
-           (lambda* (#:key inputs (make-flags '()) #:allow-other-keys)
-             (apply invoke "make" "config-gcc" make-flags)))
-         (add-after 'configure 'prepare-abc
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((sourceabc (assoc-ref inputs "abc"))
-                    (sourcebin (string-append sourceabc "/bin"))
-                    (source (string-append sourcebin "/abc")))
-                   (mkdir-p "abc")
-                   (call-with-output-file "abc/Makefile"
-                     (lambda (port)
-                       (format port ".PHONY: all\nall:\n\tcp -f abc abc-default\n")))
-                   (copy-file source "abc/abc")
-                   (invoke "chmod" "+w" "abc/abc"))))
-          (add-before 'check 'fix-iverilog-references
-             (lambda* (#:key inputs native-inputs #:allow-other-keys)
-               (let* ((xinputs (or native-inputs inputs))
-                      (xdirname (assoc-ref xinputs "iverilog"))
-                      (iverilog (string-append xdirname "/bin/iverilog")))
-                     (substitute* '("./manual/CHAPTER_StateOfTheArt/synth.sh"
-                                    "./manual/CHAPTER_StateOfTheArt/validate_tb.sh"
-                                    "./techlibs/ice40/tests/test_bram.sh"
-                                    "./techlibs/ice40/tests/test_ffs.sh"
-                                    "./techlibs/xilinx/tests/bram1.sh"
-                                    "./techlibs/xilinx/tests/bram2.sh"
-                                    "./tests/bram/run-single.sh"
-                                    "./tests/realmath/run-test.sh"
-                                    "./tests/simple/run-test.sh"
-                                    "./tests/techmap/mem_simple_4x1_runtest.sh"
-                                    "./tests/tools/autotest.sh"
-                                    "./tests/vloghtb/common.sh")
-                        (("if ! which iverilog") "if ! true")
-                        (("iverilog ") (string-append iverilog " "))
-                        (("iverilog_bin=\".*\"") (string-append "iverilog_bin=\""
-                                                                iverilog "\"")))
-                     #t))))))
+     (list
+      #:test-target "test"
+      #:make-flags #~(list "CC=gcc"
+                           "CXX=g++"
+                           (string-append "PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'configure 'fix-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "./backends/smt2/smtio.py"
+                (("\\['z3")
+                 (string-append "['" (search-input-file inputs "/bin/z3"))))
+              (substitute* "./kernel/fstdata.cc"
+                (("vcd2fst")
+                 (search-input-file inputs "/bin/vcd2fst")))
+              (substitute* '("./passes/cmds/show.cc"
+                             "./passes/cmds/viz.cc")
+                (("exec xdot")
+                 (string-append "exec " (search-input-file inputs
+                                                           "/bin/xdot")))
+                (("dot -")
+                 (string-append (search-input-file inputs "/bin/dot") " -"))
+                (("fuser")
+                 (search-input-file inputs "/bin/fuser")))))
+          (replace 'configure
+            (lambda* (#:key make-flags #:allow-other-keys)
+              (apply invoke "make" "config-gcc" make-flags)))
+          (add-after 'configure 'use-external-abc
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* '("./Makefile")
+                (("ABCEXTERNAL \\?=")
+                 (string-append "ABCEXTERNAL = "
+                                (search-input-file inputs "/bin/abc"))))))
+          (add-after 'install 'add-symbolic-link
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Previously this package provided a copy of the "abc"
+              ;; executable in its output, named "yosys-abc".  Create a
+              ;; symbolic link so any external uses of that name continue to
+              ;; work.
+              (symlink (search-input-file inputs "/bin/abc")
+                       (string-append #$output "/bin/yosys-abc"))))
+          (add-after 'install 'wrap
+            (lambda* (#:key inputs #:allow-other-keys)
+              (wrap-program (string-append #$output "/bin/yosys-witness")
+                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))))))))
     (native-inputs
-     (list pkg-config
-           python
-           bison
+     (list bison
            flex
            gawk ; for the tests and "make" progress pretty-printing
-           tcl ; tclsh for the tests
-           iverilog)) ; for the tests
+           iverilog ; for the tests
+           pkg-config
+           python
+           tcl)) ; tclsh for the tests
     (inputs
-     (list tcl
-           readline
-           libffi
+     (list abc
            graphviz
+           gtkwave
+           libffi
            psmisc
+           readline
+           tcl
            xdot
-           abc))
-    (propagated-inputs
-     (list z3)) ; should be in path for yosys-smtbmc
-    (home-page "http://www.clifford.at/yosys/")
+           z3
+           zlib
+           python
+           python-click))
+    (home-page "https://yosyshq.net/yosys/")
     (synopsis "FPGA Verilog RTL synthesizer")
     (description "Yosys synthesizes Verilog-2005.")
     (license license:isc)))
@@ -267,7 +259,7 @@ For synthesis, the compiler generates netlists in the desired format.")
     (native-inputs
      `(("python-3" ,python)
        ("pkg-config" ,pkg-config)))
-    (home-page "http://www.clifford.at/icestorm/")
+    (home-page "https://www.clifford.at/icestorm/")
     (synopsis "Project IceStorm - Lattice iCE40 FPGAs bitstream tools")
     (description "Project IceStorm - Lattice iCE40 FPGAs Bitstream Tools.
 Includes the actual FTDI connector.")
@@ -361,7 +353,7 @@ FOSS FPGA place and route tool.")
        (uri (list (string-append "mirror://sourceforge/gtkwave/"
                                  "gtkwave-" version "/"
                                  "gtkwave-" version ".tar.gz")
-                  (string-append "http://gtkwave.sourceforge.net/"
+                  (string-append "https://gtkwave.sourceforge.net/"
                                  "gtkwave-" version ".tar.gz")))
        (sha256
         (base32 "1zqkfchmns5x90qxa8kg39bfhax3vxf1mrdz3lhyb9fz1gp4difn"))))
@@ -381,7 +373,7 @@ FOSS FPGA place and route tool.")
     (synopsis "Waveform viewer for FPGA simulator trace files")
     (description "This package is a waveform viewer for FPGA
 simulator trace files (@dfn{FST}).")
-    (home-page "http://gtkwave.sourceforge.net/")
+    (home-page "https://gtkwave.sourceforge.net/")
     ;; Exception against free government use in tcl_np.c and tcl_np.h.
     (license (list license:gpl2+ license:expat license:tcl/tk))))
 
@@ -424,7 +416,7 @@ constructed by a Python program.")
           (base32
             "04fi59cyn5dsci0ai7djg74ybkqfcjzhj1jfmac2xanbcrw9j3yk"))))
     (build-system python-build-system)
-    (home-page "http://www.myhdl.org/")
+    (home-page "https://www.myhdl.org/")
     (synopsis "Python as a Hardware Description Language")
     (description "This package provides a library to turn Python into
 a hardware description and verification language.")
@@ -433,7 +425,7 @@ a hardware description and verification language.")
 (define-public nvc
   (package
     (name "nvc")
-    (version "1.7.2")
+    (version "1.8.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -442,7 +434,7 @@ a hardware description and verification language.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "01b0yhr0fw59nxwi4pz04mp9b71mg6s7zaysp0r8h0m2nd5pbpgc"))))
+                "03dnn77n50b5n06gd81hh36gh0h2nc266yzwl70qjlb00qs8cf7p"))))
     (build-system gnu-build-system)
     (arguments
      `(#:out-of-source? #t
@@ -464,7 +456,8 @@ a hardware description and verification language.")
            check)) ; for the tests
     (inputs
      (list elfutils
-           llvm-9))
+           llvm-9
+           libffi))
     (synopsis "VHDL compiler and simulator")
     (description "This package provides a VHDL compiler and simulator.")
     (home-page "https://www.nickg.me.uk/nvc/")
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index f58d53e7ac..9ba53cd044 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -134,7 +134,7 @@
 (define-public appstream
   (package
     (name "appstream")
-    (version "0.15.5")
+    (version "0.15.6")
     (source
      (origin
        (method url-fetch)
@@ -143,7 +143,7 @@
                        "appstream/releases/"
                        "AppStream-" version ".tar.xz"))
        (sha256
-        (base32 "1hh41r82a2p7anyadfsp9lmylrrj1a6gknx2g4w6ha97riifs5fb"))))
+        (base32 "03pirmc5r4izl6mzff879g7pk1nxq03kgpr2yvnnqnlb6r0ckmi3"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -835,7 +835,8 @@ of a the system to know what users are logged in, and where.")
     (build-system meson-build-system)
     (native-inputs
      (list pkg-config python gperf))
-    (inputs
+    (propagated-inputs
+     ;; Propagated because of pkg-config
      (list libcap))
     (synopsis "The sd-bus library, extracted from systemd")
     (description "Some projects rely on the sd-bus library for DBus support.
@@ -1531,7 +1532,7 @@ formats.")
      (list pkg-config))
     (inputs
      (list eudev))
-    (home-page "http://0pointer.de/blog/projects/being-smart.html")
+    (home-page "https://0pointer.de/blog/projects/being-smart.html")
     (synopsis "ATA S.M.A.R.T. reading and parsing library")
     (description
      "This library supports a subset of the ATA S.M.A.R.T. (Self-Monitoring,
@@ -2659,7 +2660,7 @@ compatible with the well-known scripts of the same name.")
 (define-public xdg-desktop-portal
   (package
     (name "xdg-desktop-portal")
-    (version "1.14.4")
+    (version "1.14.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2667,7 +2668,7 @@ compatible with the well-known scripts of the same name.")
                     version "/xdg-desktop-portal-" version ".tar.xz"))
               (sha256
                (base32
-                "0wqc9x3k7lf3mig53i4rjazi0xi8bcykwaaw7r7prvnscnd1k405"))))
+                "1q0djpnwlrqm0h0alyh1r6dlkqdrr7mj5hiam4mqzxqa5jbqkrgj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 80ffa927e3..5edbc412ea 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -165,7 +165,7 @@ FTP browser, as well as non-interactive commands such as @code{ncftpput} and
     (build-system gnu-build-system)
     (native-inputs
      (list automake autoconf gettext-minimal))
-    (home-page "http://weex.sourceforge.net/")
+    (home-page "https://weex.sourceforge.net/")
     (synopsis "Non-interactive client for FTP synchronization")
     (description
      "Weex is a utility designed to automate the task of remotely
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index da9c63b799..a0de1b339e 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -242,7 +242,7 @@ is used in some video games and movies.")
      (list gawk procps))
     (inputs
      (list boost))
-    (home-page "http://privat.bahnhof.se/wb758135/")
+    (home-page "https://privat.bahnhof.se/wb758135/")
     (synopsis "Double dummy solver for the bridge card game")
     (description "DDS is a double-dummy solver of bridge hands.  It supports
 single-threading and multi-threading for improved performance.  DDS
@@ -466,7 +466,7 @@ possible, and it also makes the SGE easy to learn.")
     (build-system python-build-system)
     (propagated-inputs
      (list python-six))
-    (home-page "http://python-tmx.nongnu.org")
+    (home-page "https://python-tmx.nongnu.org")
     (synopsis "Python library for the @code{Tiled} TMX format")
     (description
      "Python TMX reads and writes the @code{Tiled} TMX format in a simple way.
@@ -797,7 +797,7 @@ window, graphics, audio and network.")
     (description "Sfxr is a tool for quickly generating simple sound effects.
 Originally created for use in video game prototypes, it can generate random
 sounds from presets such as \"explosion\" or \"powerup\".")
-    (home-page "http://www.drpetter.se/project_sfxr.html")
+    (home-page "https://www.drpetter.se/project_sfxr.html")
     (license license:expat)))
 
 (define-public surgescript
@@ -1184,7 +1184,7 @@ It offers the following features:
     (build-system gnu-build-system)
     (native-inputs (list pkg-config))
     (inputs (list fontconfig freeglut fribidi glew))
-    (home-page "http://quesoglc.sourceforge.net")
+    (home-page "https://quesoglc.sourceforge.net")
     (synopsis "Implementation of the OpenGL Character Renderer (GLC)")
     (description
      "The OpenGL Character Renderer (GLC) is a state machine that provides
@@ -2047,7 +2047,7 @@ scripted in a Python-like language.")
     (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
 a 2D editor view.")
-    (home-page "http://eureka-editor.sourceforge.net/")
+    (home-page "https://eureka-editor.sourceforge.net/")
     (license license:gpl2+)))
 
 (define-public guile-chickadee
@@ -2176,7 +2176,7 @@ joystick support.")))
      (list mesa libxi libxmu))
     (native-inputs
      (list pkg-config))
-    (home-page "http://plib.sourceforge.net/")
+    (home-page "https://plib.sourceforge.net/")
     (synopsis "Suite of portable game libraries")
     (description "PLIB is a set of libraries that will permit programmers to
 write games and other realtime interactive applications that are 100% portable
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index f85e9333f7..a5783c1d1b 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -68,7 +68,7 @@
 ;;; Copyright © 2021, 2022 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
-;;; Copyright © 2022 Yovan Naumovski <yovan@gorski.stream>
+;;; Copyright © 2022, 2023 Yovan Naumovski <yovan@gorski.stream>
 ;;; Copyright © 2022 Roman Riabenko <roman@riabenko.com>
 ;;; Copyright © 2022 zamfofex <zamfofex@twdb.moe>
 ;;; Copyright © 2022 Gabriel Arazas <foo.dogsquared@gmail.com>
@@ -216,7 +216,6 @@
   #:use-module (gnu packages xml)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
@@ -288,7 +287,7 @@
        ("libxmu" ,libxmu)
        ("libxt" ,libxt)
        ("sdl" ,(sdl-union (list sdl sdl-mixer)))))
-    (home-page "http://abe.sourceforge.net")
+    (home-page "https://abe.sourceforge.net")
     (synopsis "Scrolling, platform-jumping, ancient pyramid exploring game")
     (description
      "Abe's Amazing Adventure is a scrolling,
@@ -402,7 +401,7 @@ mouse and joystick control, and original music.")
     (inputs
      `(("allegro" ,allegro-4)
        ("dumb" ,dumb-allegro4)))
-    (home-page "http://allegator.sourceforge.net/")
+    (home-page "https://allegator.sourceforge.net/")
     (synopsis "Retro platform game")
     (description
      "Guide Alex the Allegator through the jungle in order to save his
@@ -433,7 +432,7 @@ The game includes a built-in editor so you can design and share your own maps.")
            freeglut
            libpng
            libjpeg-turbo))
-    (home-page "http://www.armagetronad.org")
+    (home-page "https://www.armagetronad.org")
     (synopsis "Tron clone in 3D")
     (description "Armagetron Advanced is a multiplayer game in 3d that
 attempts to emulate and expand on the lightcycle sequence from the movie Tron.
@@ -545,7 +544,7 @@ regret their insolence.")
            zlib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://baronygame.com")
+    (home-page "https://baronygame.com")
     (synopsis "3D first-person roguelike game")
     (description
      "Barony is a first-person roguelike role-playing game with cooperative
@@ -1288,7 +1287,7 @@ should be placed in @file{~/.local/share/falltergeist}.")
          ("glu" ,glu)
          ("libpng" ,libpng)
          ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net)))))
-      (home-page "http://foobillardplus.sourceforge.net/")
+      (home-page "https://foobillardplus.sourceforge.net/")
       (synopsis "3D billiard game")
       (description "FooBillard++ is an advanced 3D OpenGL billiard game
 based on the original foobillard 3.0a sources from Florian Berger.
@@ -1474,7 +1473,7 @@ real-time combat.")
      (list lua))
     (inputs
      (list glu mesa python sdl2 wxwidgets zlib))
-    (home-page "http://golly.sourceforge.net/")
+    (home-page "https://golly.sourceforge.net/")
     (synopsis "Software for exploring cellular automata")
     (description
      "Golly simulates Conway's Game of Life and many other types of cellular
@@ -1978,7 +1977,7 @@ Chess).  It is similar to standard chess but this variant is far more complicate
                       ":" (or (getenv "CPATH") ""))))))))
     (inputs
      (list (sdl-union (list sdl sdl-mixer))))
-    (home-page "http://lgames.sourceforge.net/LTris/")
+    (home-page "https://lgames.sourceforge.net/LTris/")
     (synopsis "Tetris clone based on the SDL library")
     (description
      "LTris is a tetris clone: differently shaped blocks are falling down the
@@ -2145,7 +2144,7 @@ role, and your gender.")
              #t)))))
     (inputs
      (list libpng mesa sdl))
-    (home-page "http://pipewalker.sourceforge.net/")
+    (home-page "https://pipewalker.sourceforge.net/")
     (synopsis "Logical tile puzzle")
     (description
      "PipeWalker is a simple puzzle game with many diffent themes: connect all
@@ -2194,7 +2193,7 @@ Every puzzle has a complete solution, although there may be more than one.")
           pcre
           portmidi
           (sdl-union (list sdl sdl-image sdl-mixer sdl-net))))
-   (home-page "http://prboom-plus.sourceforge.net/")
+   (home-page "https://prboom-plus.sourceforge.net/")
    (synopsis "Version of the classic 3D shoot'em'up game Doom")
    (description
     "PrBoom+ is a Doom source port developed from the original PrBoom project.")
@@ -2823,7 +2822,7 @@ saved automatically, and you can select between currently in progress games.")
                             Keywords=racing;tracks;~@
                             Keywords[de]=Rennstrecke;~%"
                            out)))))))))
-    (home-page "http://trigger-rally.sourceforge.net")
+    (home-page "https://trigger-rally.sourceforge.net")
     (synopsis "Fast-paced single-player racing game")
     (description "Trigger-rally is a 3D rally simulation with great physics
 for drifting on over 200 maps.  Different terrain materials like dirt,
@@ -3300,7 +3299,7 @@ is very small), and shoot at the adversaries that keep appear on the screen.")
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
     (inputs (list ncurses))
-    (home-page "http://www.asty.org/cmatrix")
+    (home-page "https://www.asty.org/cmatrix")
     (synopsis "Simulate the display from \"The Matrix\"")
     (description "CMatrix simulates the display from \"The Matrix\" and is
 based on the screensaver from the movie's website.  It works with terminal
@@ -3739,7 +3738,7 @@ match, cannon keep, and grave-itation pit.")
               (install-file "libglkterm.a" lib))
             #t))
         (delete 'configure))))          ; no configure script
-   (home-page "http://www.eblong.com/zarf/glk/")
+   (home-page "https://www.eblong.com/zarf/glk/")
    (synopsis "Curses Implementation of the Glk API")
    (description
     "Glk defines a portable API for applications with text UIs.  It was
@@ -4082,7 +4081,7 @@ This package expects the game(s) to be placed in subdirectories of
 (define-public supertuxkart
   (package
     (name "supertuxkart")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method url-fetch)
@@ -4091,7 +4090,7 @@ This package expects the game(s) to be placed in subdirectories of
                            version "/SuperTuxKart-" version "-src.tar.xz"))
        (sha256
         (base32
-         "1z9z13zarv28h4jrmjna5hr6m9266pm7c2kgiwhqls01k06ypazf"))
+         "00qg5i9y4i5gdiiq1dbfsgp7dwj60zb5lkgi2d9p3x5s34j3k44q"))
        (modules '((guix build utils)))
        (snippet
         ;; Delete bundled library sources
@@ -4099,10 +4098,11 @@ This package expects the game(s) to be placed in subdirectories of
            ;; Supertuxkart uses modified versions of the Irrlicht engine
            ;; and the bullet library.  The developers gave an explanation
            ;; here: http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
-           ;; FIXME: try to unbundle angelscript, libmcpp and libraqm
+           ;; FIXME: try to unbundle angelscript and libraqm
            (for-each delete-file-recursively
                      '("lib/dnsc"
                        "lib/enet"
+                       "lib/mcpp"
                        "lib/mojoal"
                        "lib/wiiuse"))
            #t))))
@@ -4115,15 +4115,14 @@ This package expects the game(s) to be placed in subdirectories of
              "-DUSE_CRYPTO_OPENSSL=TRUE"
              ;; In order to use the system ENet library, IPv6 support (added in
              ;; SuperTuxKart version 1.1) must be disabled.
-             "-DUSE_IPV6=FALSE"
-             ;; FIXME: needs libopenglrecorder
-             "-DBUILD_RECORDER=0")))
+             "-DUSE_IPV6=FALSE")))
     (inputs
      `(("curl" ,curl)
        ("freetype" ,freetype)
        ("fribidi" ,fribidi)
        ("glew" ,glew)
        ("harfbuzz" ,harfbuzz)
+       ("libopenglrecorder" ,libopenglrecorder)
        ("libvorbis" ,libvorbis)
        ("libx11" ,libx11)
        ("libxrandr" ,libxrandr)
@@ -4137,8 +4136,7 @@ This package expects the game(s) to be placed in subdirectories of
        ("enet" ,enet)
        ("libjpeg" ,libjpeg-turbo)
        ("openssl" ,openssl)))
-    (native-inputs
-     (list pkg-config))
+    (native-inputs (list mcpp pkg-config python))
     (home-page "https://supertuxkart.net/Main_Page")
     (synopsis "3D kart racing game")
     (description "SuperTuxKart is a 3D kart racing game, with a focus on
@@ -4412,14 +4410,14 @@ world}, @uref{http://evolonline.org, Evol Online} and
 (define openttd-engine
   (package
     (name "openttd-engine")
-    (version "12.2")
+    (version "13.0")
     (source
      (origin (method url-fetch)
              (uri (string-append "https://cdn.openttd.org/openttd-releases/"
                                  version "/openttd-" version "-source.tar.xz"))
              (sha256
               (base32
-               "0p79mi6hnj9138911l56zxxzy7rqz02nmxbf455jc31sx46qyl41"))))
+               "0rxbsymfirkw2d9hn2lmi8yhlfx7qvpzhy7y7b48fw42w3hgi79k"))))
     (build-system cmake-build-system)
     (inputs
      (list allegro
@@ -4865,7 +4863,7 @@ logging, so games can be viewed again.")
              (symlink "README.md" "README")
              (display (which "autoreconf")) (newline)
              (invoke "autoreconf" "-vif"))))))
-    (home-page "http://pinball.sourceforge.net")
+    (home-page "https://pinball.sourceforge.net")
     (synopsis "Pinball simulator")
     (description "The Emilia Pinball Project is a pinball simulator.  There
 are only two levels to play with, but they are very addictive.")
@@ -4899,7 +4897,7 @@ are only two levels to play with, but they are very addictive.")
     (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
 players.")
-    (home-page "http://pio.sourceforge.net/")
+    (home-page "https://pio.sourceforge.net/")
     (license license:gpl2+)))
 
 (define-public einstein
@@ -5256,7 +5254,7 @@ fullscreen, use F5 or Alt+Enter.")
     (inputs
      `(("python" ,python-wrapper)
        ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf sdl-net)))))
-    (home-page "http://icculus.org/tennix/")
+    (home-page "https://icculus.org/tennix/")
     (synopsis "Play tennis against the computer or a friend")
     (description "Tennix is a 2D tennis game.  You can play against the
 computer or against another player using the keyboard.  The game runs
@@ -5501,7 +5499,7 @@ in strikes against the evil corporation.")
     (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/")
+    (home-page "https://chromium-bsu.sourceforge.net/")
     (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
     (description
      "In this game you are the captain of the cargo ship Chromium B.S.U. and
@@ -6021,7 +6019,7 @@ for Un*x systems with X11.")
 (define-public freeciv
   (package
    (name "freeciv")
-   (version "3.0.0")
+   (version "3.0.6")
    (source
     (origin
      (method url-fetch)
@@ -6033,13 +6031,13 @@ for Un*x systems with X11.")
                   (version-major+minor version) "/" version
                   "/freeciv-" version ".tar.xz")))
      (sha256
-      (base32 "1cm0530xmbqdhqkr89xb845cd756nillbdq53r3z5zpxsj18fapa"))))
+      (base32 "0hp4mkbcf5sipqkfjynls4m1qlh6kn0mp3jlqjrjwylmgcah3rs0"))))
    (build-system gnu-build-system)
    (inputs
     (list curl cyrus-sasl gtk+ sdl-mixer zlib))
    (native-inputs
     (list pkg-config))
-   (home-page "http://www.freeciv.org/")
+   (home-page "https://www.freeciv.org/")
    (synopsis "Turn-based empire building strategy game")
    (description "Freeciv is a turn-based empire building strategy game
 inspired by the history of human civilization.  The game commences in
@@ -6343,7 +6341,7 @@ over 100 user-created campaigns.")
        ("python" ,python-2)))
     (native-inputs
      (list swig))
-    (home-page "http://kiki.sourceforge.net/")
+    (home-page "https://kiki.sourceforge.net/")
     (synopsis "3D puzzle game")
     (description "Kiki the nano bot is a 3D puzzle game.  It is basically a
 mixture of the games Sokoban and Kula-World.  Your task is to help Kiki, a
@@ -6927,7 +6925,7 @@ at their peak of economic growth and military prowess.
 (define-public open-adventure
   (package
     (name "open-adventure")
-    (version "1.11")
+    (version "1.12")
     (source
      (origin
        (method git-fetch)
@@ -6936,7 +6934,7 @@ at their peak of economic growth and military prowess.
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1n0fzrdlbc6px88qr574ww2q85xk43bv09jpmsskzv1l2cncwm37"))))
+        (base32 "07mg7cp12g27dw8sya17jqz6qp93q7c8zadsvym3w602z87g40in"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -7144,7 +7142,7 @@ Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
     (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,
 some graphical niceities, and numerous bug-fixes and other improvements.")
-    (home-page "http://quakespasm.sourceforge.net/")
+    (home-page "https://quakespasm.sourceforge.net/")
     (license license:gpl2+)))
 
 (define-public vkquake
@@ -7727,7 +7725,7 @@ original.")
                                    (string-append xonotic "/data"))
                  (copy-recursively "server"
                                    (string-append xonotic "/server"))))))
-    (home-page "http://xonotic.org")
+    (home-page "https://xonotic.org")
     (synopsis "Data files for Xonotic")
     (description
      "Xonotic-data provides the data files required by the game Xonotic.")
@@ -7925,13 +7923,13 @@ games in the text adventure/interactive fiction genre.  This version of Frotz
 complies with standard 1.0 of Graham Nelson's specification.  It plays all
 Z-code games V1-V8, including V6, with sound support through libao, and uses
 ncurses for text display.")
-    (home-page "http://frotz.sourceforge.net")
+    (home-page "https://frotz.sourceforge.net")
     (license license:gpl2+)))
 
 (define-public naev
   (package
     (name "naev")
-    (version "0.10.2")
+    (version "0.10.4")
     (source
      (origin
        (method git-fetch)
@@ -7941,7 +7939,7 @@ ncurses for text display.")
              (recursive? #t))) ; for game data
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ll5a6ldc2khagwrkb3z84rp7cf1hb83lw0yc1di481xgr6f960q"))))
+        (base32 "0lg8cmzdzzpmqgmh9a1v190vv4d15hwa0inyzdwsq5x8lyc13hyr"))))
     (build-system meson-build-system)
     (arguments
      ;; XXX: Do not add debugging symbols, which cause the build to fail.
@@ -8026,7 +8024,7 @@ scrolling.  Maybe you'd like to experience what it's like to play Adventure on
 a teletype.  A much cooler use for compiling Frotz with the dumb interface is
 that it can be wrapped in CGI scripting, PHP, and the like to allow people
 to play games on webpages.  It can also be made into a chat bot.")
-    (home-page "http://frotz.sourceforge.net")
+    (home-page "https://frotz.sourceforge.net")
     (license license:gpl2+)))
 
 (define-public frotz-sdl
@@ -8086,7 +8084,7 @@ using SDL fully supports all these versions of the Z-Machine including the
 graphical version 6.  Graphics and sound are created through the use of the SDL
 libraries.  AIFF sound effects and music in MOD and OGG formats are supported
 when packaged in Blorb container files or optionally from individual files.")
-      (home-page "http://frotz.sourceforge.net")
+      (home-page "https://frotz.sourceforge.net")
       (license license:gpl2+))))
 
 (define-public frozen-bubble
@@ -8565,7 +8563,7 @@ download and unpack them separately.")
        ("zlib" ,zlib)))
     (native-inputs
      (list pkg-config zip))
-    (home-page "http://btanks.sourceforge.net")
+    (home-page "https://btanks.sourceforge.net")
     (synopsis "Multiplayer tank battle game")
     (description "Battle Tanks (also known as \"btanks\") is a funny battle
 game, where you can choose one of three vehicles and eliminate your enemy
@@ -8739,7 +8737,7 @@ where the player draws runes in real time to effect the desired spell.")
 (define-public edgar
   (package
     (name "edgar")
-    (version "1.35")
+    (version "1.36")
     (source
      (origin
        (method url-fetch)
@@ -8747,7 +8745,7 @@ where the player draws runes in real time to effect the desired spell.")
         (string-append "https://github.com/riksweeney/edgar/releases/download/"
                        version "/edgar-" version "-1.tar.gz"))
        (sha256
-        (base32 "0hwp73ili10kzx0aibhvgxfddqm94pimdaqhpnba6jzn119834q7"))))
+        (base32 "0fcsmwwfdwap5v6qdijw91kqnnc2i91yzgwfi7vpwvasw70qvna1"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f            ; there are no tests
                  #:make-flags
@@ -8907,7 +8905,7 @@ fight each other on an arena-like map.")
      (list hicolor-icon-theme
            python-wrapper
            (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))
-    (home-page "http://www.flarerpg.org/")
+    (home-page "https://www.flarerpg.org/")
     (synopsis "Action Roleplaying Engine")
     (description "Flare (Free Libre Action Roleplaying Engine) is a simple
 game engine built to handle a very specific kind of game: single-player 2D
@@ -10335,7 +10333,7 @@ and chess engines.")
      "ChessX is a chess database.  With ChessX you can operate on your
 collection of chess games in many ways: browse, edit, add, organize, analyze,
 etc.  You can also play games on FICS or against an engine.")
-    (home-page "http://chessx.sourceforge.net/")
+    (home-page "https://chessx.sourceforge.net/")
     (license license:gpl2+)))
 
 (define-public stockfish
@@ -10426,7 +10424,7 @@ ChessX.")
         (string-append "CFLAGS="
                        "-I" (assoc-ref %build-inputs "sdl-mixer")
                        "/include/SDL"))))
-    (home-page "http://lgames.sourceforge.net/Barrage/")
+    (home-page "https://lgames.sourceforge.net/Barrage/")
     (synopsis "Violent point-and-click shooting game with nice effects")
     (description
      "Barrage is a rather destructive action game that puts you on a shooting
@@ -10799,7 +10797,7 @@ inside the Zenith Colony.")
     (build-system gnu-build-system)
     (inputs
      (list libx11 libxt xorgproto))
-    (home-page "http://cgoban1.sourceforge.net/")
+    (home-page "https://cgoban1.sourceforge.net/")
     (synopsis "Go client for X11")
     (description "Provides a large set of Go-related services for X11:
 @itemize
@@ -10859,7 +10857,7 @@ such as GnuGo.
      `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
     (native-inputs
      (list imagemagick))
-    (home-page "http://hcsoftware.sourceforge.net/passage/")
+    (home-page "https://hcsoftware.sourceforge.net/passage/")
     (synopsis "Memento mori game")
     (description
      "Passage is meant to be a memento mori game.  It presents an entire life,
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 5e2783d0dc..6f7bebb6a7 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; 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, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2018, 2020-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020, 2022 Marius Bakke <marius@gnu.org>
@@ -1087,8 +1087,11 @@ provides the GNU compiler for the Go programming language.")
                  (substitute* "libgo/Makefile.in"
                    (("(GccgoToolDir = \\\")[^\\\"]+" _ start)
                     (string-append start "/nonexistent"))
-                   (("(DefaultGoroot = \\\")[^\\\"]+" _ start)
-                    (string-append start "/nonexistent"))
+                   ,@(if (version>=? (package-version gccgo) "12.0")
+                       '((("(defaultGOROOT = `)[^`]+" _ start)
+                          (string-append start "/nonexistent")))
+                       '((("(DefaultGoroot = \\\")[^\\\"]+" _ start)
+                          (string-append start "/nonexistent"))))
                    (("(defaultGOROOTValue.*?return `)[^`]+" _ start)
                     (string-append start "/nonexistent"))))))))))))
 
@@ -1112,6 +1115,9 @@ provides the GNU compiler for the Go programming language."))
 (define-public gccgo-11
   (make-gccgo gcc-11))
 
+(define-public gccgo-12
+  (make-gccgo gcc-12))
+
 (define %objc-search-paths
   (list (search-path-specification
          (variable "OBJC_INCLUDE_PATH")
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 561e62a696..149b82468c 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2016, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;; 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>
@@ -23,6 +23,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages gd)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
@@ -111,18 +112,18 @@ most common applications of GD involve website development.")
         (base32 "0arjpa8id6k5yjxfq0j2hsinhhjzjch5lwk6gscf48l54drrw729"))))
     (build-system perl-build-system)
     (inputs
-     `(("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("gd" ,gd)
-       ("libpng" ,libpng)
-       ("libjpeg" ,libjpeg-turbo)
-       ("zlib" ,zlib)))
+     (list fontconfig
+           freetype
+           gd
+           libpng
+           libjpeg-turbo
+           zlib))
     (native-inputs
      (list perl-extutils-pkgconfig))
     (arguments
-     `(#:make-maker-flags
-       (list (string-append "--lib_jpeg_path="
-                            (assoc-ref %build-inputs "libjpeg")))))
+     (list #:make-maker-flags
+           #~(list (string-append "--lib_jpeg_path="
+                                  #$(this-package-input "libjpeg-turbo")))))
     (home-page "https://metacpan.org/release/GD")
     (synopsis "Perl interface to the GD graphics library")
     (description "GD.pm is an autoloadable interface module for libgd, a
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 78d1131788..9465c0eda7 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2020 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2020, 2021, 2022 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
-;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2021, 2022 Nikolay Korotkiy <sikmir@disroot.org>
 ;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
@@ -46,8 +46,6 @@
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
-  #:use-module (guix build-system scons)
-  #:use-module (guix build-system r)
   #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -831,7 +829,7 @@ pyproj, Rtree, and Shapely.")
       (list python-fiona python-pandas python-pyproj python-shapely))
     (native-inputs
       (list python-pytest))
-    (home-page "http://geopandas.org")
+    (home-page "https://geopandas.org")
     (synopsis "Geographic pandas extensions")
     (description "The goal of GeoPandas is to make working with
 geospatial data in Python easier.  It combines the capabilities of
@@ -1166,13 +1164,13 @@ utilities for data translation and processing.")
   (package
     (name "python-cartopy")
     ;; This is a post-release fix that adds build_ext to setup.py.
-    (version "0.21.0")
+    (version "0.21.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cartopy" version))
        (sha256
-        (base32 "0hnfs75dcnz12ximah5xn9566r8zz189lxikmj4lrs9jl4l3l7ff"))))
+        (base32 "02i5rjhvrsi3vgj8kfsdx77g1xl59jh2a671qqqj4n682abn9mc9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1414,7 +1412,7 @@ based on the Osmium library.")
 (define-public osm2pgsql
   (package
     (name "osm2pgsql")
-    (version "1.7.0")
+    (version "1.8.0")
     (source
      (origin
        (method git-fetch)
@@ -1423,7 +1421,7 @@ based on the Osmium library.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15fxr4xq7siy237763l7nswx7v0swr3qzs2h3zkjzgvajw4p6qii"))
+        (base32 "0ssz7ny4wx8dzl3027p37xc5h7m1aj6bzxzdc6g8fbp7q57ykvxz"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
@@ -1434,8 +1432,7 @@ based on the Osmium library.")
        #:configure-flags
        (list "-DEXTERNAL_LIBOSMIUM=ON"
              "-DEXTERNAL_PROTOZERO=ON"
-             "-DEXTERNAL_FMT=ON"
-             "-DEXTERNAL_RAPIDJSON=ON")))
+             "-DEXTERNAL_FMT=ON")))
     (inputs
      (list boost
            bzip2
@@ -1446,7 +1443,6 @@ based on the Osmium library.")
            postgresql
            proj
            protozero
-           rapidjson
            zlib))
     (native-inputs
      (list python python-psycopg2))
@@ -1763,7 +1759,7 @@ to the OSM opening hours specification.")
 (define-public josm
   (package
     (name "josm")
-    (version "18583")
+    (version "18646")
     (source (origin
               (method svn-fetch)
               (uri (svn-reference
@@ -1772,7 +1768,7 @@ to the OSM opening hours specification.")
                      (recursive? #f)))
               (sha256
                (base32
-                "01ghh9kl984lr8f70jsks31p6a4cqpxqjpmbc4x6mzbmvy87dfvy"))
+                "0zr3p1i39wi0f29lgb3xrnv6lijrq5ia8jxn4wnq1yz0xdlbg98i"))
               (file-name (string-append name "-" version "-checkout"))
               (modules '((guix build utils)))
             (snippet
@@ -2461,7 +2457,7 @@ visualization.")
 Information System (GIS) software.  It has been designed for an easy and
 effective implementation of spatial algorithms and it offers a comprehensive,
 growing set of geoscientific methods.")
-    (home-page "http://www.saga-gis.org")
+    (home-page "https://www.saga-gis.org")
     (license (list license:gpl2+ license:lgpl2.1+))))
 
 (define-public qgis
@@ -2825,6 +2821,36 @@ coordinates of addresses, cities, countries, and landmarks across the globe
 using third-party geocoders and other data sources.")
     (license license:expat)))
 
+(define-public python-haversine
+  (package
+    (name "python-haversine")
+    (version "2.7.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    ;; There are no tests in the PyPi archive.
+                    (url "https://github.com/mapado/haversine")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0inxyj5n4jzgg5xiadqx9sk83gdx5ff989l9s04smdzbd3b8c0c8"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest python-numpy))
+    (arguments
+      (list #:phases
+            #~(modify-phases %standard-phases
+                (replace 'check
+                  (lambda* (#:key tests? inputs #:allow-other-keys)
+                    (when tests?
+                      (invoke "pytest")))))))
+    (home-page "https://github.com/mapado/haversine")
+    (synopsis "Calculate the distance between 2 points on Earth")
+    (description "This package provides functions to calculate the
+distance in various units between two points on Earth using their
+latitude and longitude.")
+    (license license:expat)))
+
 (define-public gplates
   (package
     (name "gplates")
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 8142d0b9cd..3c85f61d88 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -45,7 +45,6 @@
   #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1))
 
 (define-public lcms
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index beb43f0ae2..69281f98e9 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -302,6 +302,19 @@ buffers.")
                "doc"))                  ; 9 MiB of gtk-doc HTML
     (arguments
      (list
+      #:modules `((ice-9 popen)
+                  (ice-9 rdelim)
+                  ,@%gnu-build-system-modules)
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-gcc-reference
+            ;; Avoid reference to GCC.
+            (lambda _
+              (let* ((port (open-input-pipe "gcc -v 2>&1 | tail -n 1"))
+                     (cc-version (read-line port)))
+                (close-pipe port)
+                (substitute* "app/gimp-version.c"
+                  (("CC_VERSION") (string-append "\"" cc-version "\"")))))))
       #:configure-flags
       #~(list (string-append "--with-html-dir=" #$output "/share/gtk-doc/html")
 
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 5151ecdce4..3ffdd8346d 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -64,7 +64,6 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system waf)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix gexp)
@@ -128,7 +127,7 @@ as ASCII text.")
     (propagated-inputs
      ;; Headers from Mesa and GLU are needed.
      (list glu mesa))
-    (home-page "http://freeglut.sourceforge.net/")
+    (home-page "https://freeglut.sourceforge.net/")
     (synopsis "Alternative to the OpenGL Utility Toolkit (GLUT)")
     (description
      "Freeglut is a completely Free/OpenSourced alternative to
@@ -785,6 +784,32 @@ Both GLX and EGL are supported, in any combination with OpenGL and OpenGL ES.")
                    license:x11
                    license:expat))))
 
+(define-public libopenglrecorder
+  (package
+    (name "libopenglrecorder")
+    (version "0.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Benau/libopenglrecorder")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sfx2kdw2mca3mx4fnk1yy74pilp2i9npcpyj894qkngz5aaz2wl"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:tests? #f)) ;no test suite
+    (native-inputs (list pkg-config))
+    (inputs (list libjpeg-turbo))
+    (home-page "https://github.com/Benau/libopenglrecorder")
+    (synopsis "Async readback OpenGL frame buffer with audio recording")
+    (description
+     "libopenglrecorder is a library allowing optional async readback OpenGL
+frame buffer with optional audio recording.  It will do video and audio
+encoding together.")
+    (license license:bsd-3)))
+
 (define-public soil
   (package
     (name "soil")
@@ -909,7 +934,7 @@ and visualizations.")
      (list libpng mesa zlib))
     (arguments
      `(#:tests? #f))                    ; no tests
-    (home-page "http://www.geuz.org/gl2ps/")
+    (home-page "https://www.geuz.org/gl2ps/")
     (synopsis "OpenGL to PostScript printing library")
     (description "GL2PS is a C library providing high quality vector
 output for any OpenGL application.  GL2PS uses sorting algorithms
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index 1e6fa6a9c4..19838c3dd5 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
-;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020, 2023 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2020 Ellis Kenyo <me@elken.dev>
 ;;; Copyright © 2020 Stefan Reichör <stefan@xsteve.at>
@@ -216,7 +216,21 @@ simple and consistent.")
        (modify-phases %standard-phases
          (delete 'bootstrap)
          (delete 'configure)
-         (delete 'build))))
+         (delete 'build)
+         (add-before 'install 'halve-inode-consumption
+           ;; This package uses over 100K inodes, which is a lot.  We can easily
+           ;; halve that number by using (hard) links, to no ill effect.
+           ;; See <https://logs.guix.gnu.org/guix/2023-01-31.log#171227>.
+           ;; However, the source checkout will still use the full amount!
+           (lambda _
+             (let ((symlink? (lambda (_ stat)
+                               (eq? 'symlink (stat:type stat)))))
+               (for-each (lambda (file)
+                           (let ((target (canonicalize-path file)))
+                             (when (eq? 'regular (stat:type (stat target)))
+                               (delete-file file)
+                               (link target file))))
+                         (find-files "." symlink?))))))))
     (native-inputs
      (list `(,gtk+ "bin")))
     (home-page "https://git.io/papirus-icon-theme")
@@ -225,6 +239,87 @@ simple and consistent.")
 and a few extra features.")
     (license license:gpl3)))
 
+(define-public flat-remix-icon-theme
+  (package
+    (name "flat-remix-icon-theme")
+    (version "20220525")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/daniruiz/flat-remix")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ygazxccqf7hn1hxnf1mmsp17gm1m4hpcandfz9v5ijrgkd1m596"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no included tests
+       #:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (home-page "https://drasite.com/flat-remix")
+    (synopsis "Icon theme with material design")
+    (description "Flat Remix is an icon theme inspired by material design.  It
+is mostly flat using a colorful palette with some shadows, highlights, and
+gradients for some depth.")
+    (license license:gpl3+)))
+
+(define-public flat-remix-gtk-theme
+  (package
+    (name "flat-remix-gtk-theme")
+    (version "20220627")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/daniruiz/flat-remix-gtk")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1kwahlrcm9rfsrd97q9lsbfz5390qafwbv78zl6j2vqgqnxhpwng"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no included tests
+       #:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (home-page "https://drasite.com/flat-remix-gtk")
+    (synopsis "GTK application theme with material design")
+    (description "Flat Remix GTK is a GTK application theme inspired by
+material design.  It is mostly flat using a colorful palette with some
+shadows, highlights, and gradients for some depth.")
+    (license license:gpl3+)))
+
+(define-public flat-remix-gnome-theme
+  (package
+    (name "flat-remix-gnome-theme")
+    (version "20221107-1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/daniruiz/flat-remix-gnome")
+         ;; This commit adds GtkSourceView 5 theme, for GNOME Text Editor.
+         (commit "b5616efc515e9f1417436e67d94718db7529a2ba")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "10fgdz8hz8rd7aj4vb3bvl8khzb2fvaia7n00gi0x19yvnnh36pr"))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       `(("share" "/")
+         ("themes" "/share/"))))
+    (home-page "https://drasite.com/flat-remix-gnome")
+    (synopsis "GNOME shell theme with material design")
+    (description "Flat Remix GNOME is a GNOME shell theme inspired by material
+design.  It is mostly flat using a colorful palette with some shadows,
+highlights, and gradients for some depth.")
+    (license license:gpl3+)))
+
 (define-public gnome-plots
   (package
     (name "gnome-plots")
@@ -1189,7 +1284,7 @@ of windows.")
 (define-public arc-theme
   (package
     (name "arc-theme")
-    (version "20220405")
+    (version "20221218")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1198,11 +1293,11 @@ of windows.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1gjwf75sg4xyfypb08qiy2cmqyr2mamjc4i46ifrq7snj15gy608"))))
+                "0yznqjz1a1mcwks8z7pybgzrjiwg978bfpdmkaq926wy82qslngd"))))
     (build-system meson-build-system)
     (arguments
      '(#:configure-flags
-       '("-Dthemes=gnome-shell,gtk2,gtk3,metacity,plank,unity,xfwm")
+       '("-Dthemes=gnome-shell,gtk2,gtk3,gtk4,metacity,plank,unity,xfwm")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'set-home   ;placate Inkscape
@@ -1217,6 +1312,7 @@ of windows.")
            pkg-config
            python
            sassc/libsass-3.5))
+    (inputs (list gtk-engines)) ;for gtk+-2 to work properly
     (synopsis "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
@@ -1301,7 +1397,7 @@ like Gnome, Unity, Budgie, Pantheon, XFCE, Mate and others.")
 (define-public materia-theme
   (package
     (name "materia-theme")
-    (version "20200916")
+    (version "20210322")
     (source
       (origin
         (method git-fetch)
@@ -1312,7 +1408,7 @@ like Gnome, Unity, Budgie, Pantheon, XFCE, Mate and others.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "0qaxxafsn5zd2ysgr0jyv5j73360mfdmxyd55askswlsfphssn74"))))
+            "1fsicmcni70jkl4jb3fvh7yv0v9jhb8nwjzdq8vfwn256qyk0xvl"))))
     (build-system meson-build-system)
     (native-inputs
      (list gtk+ sassc))
@@ -1421,6 +1517,30 @@ variants.")
                    license:lgpl2.1         ; Some style sheets.
                    license:cc-by-sa4.0)))) ; Some icons
 
+(define-public postmarketos-theme
+  (package
+    (name "postmarketos-theme")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/postmarketOS/postmarketos-theme")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "09in7737cirmw2c0ac40ac29szfgdva6q0zl32mdi12marybd2g5"))))
+    (build-system meson-build-system)
+    (native-inputs (list sassc))
+    (home-page "https://gitlab.com/postmarketOS/postmarketos-theme")
+    (synopsis "PostmarketOS themed themes")
+    (description
+     "@code{postmarketos-theme} contains a GTK3 and GTK4 theme which is based
+on Adwaita but replaces the standard blue highlights in the theme with
+postmarketOS green.  There's also the oled and paper variants of the theme
+that are completely black and completely white.")
+    (license license:lgpl2.0+)))
+
 (define-public eiciel
   (package
     (name "eiciel")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index b32ab8f97e..df6762f159 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2014, 2016, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2015, 2017 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015-2023 Efraim Flashner <efraim@flashner.co.il>
@@ -907,7 +907,7 @@ tomorrow, the rest of the week and for special occasions.")
      (list dbus
            desktop-file-utils
            gettext-minimal
-           git-minimal/fixed
+           git-minimal/pinned
            `(,glib "bin")
            gobject-introspection
            gsettings-desktop-schemas
@@ -1143,6 +1143,55 @@ freedesktop.org desktop notification specification.")
     (home-page "https://wiki.gnome.org/Projects/NotificationDaemon")
     (license license:gpl2+)))
 
+(define-public metacity
+  (package
+    (name "metacity")
+    (version "3.46.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/metacity/"
+                                  (version-major+minor version) "/"
+                                  "metacity-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1ifnbpiflaw72m0flysa5qy44c1axd2rr9zcparz5210c7vlkfh0"))))
+    (build-system glib-or-gtk-build-system)
+    (native-inputs
+     (list gettext-minimal
+           libtool
+           autoconf
+           automake
+           pkg-config
+           (list glib "bin")
+           grep))
+    (inputs
+     (list libcanberra
+           zenity
+           libsm
+           libice
+           gtk+
+           pango
+           gsettings-desktop-schemas
+           gobject-introspection
+           libgtop
+           libxcomposite
+           libxcursor
+           libxfixes
+           libxdamage
+           libxext
+           libxpresent
+           libxres
+           libxrender
+           libxinerama
+           libx11
+           libxrandr))
+    (home-page "https://gitlab.gnome.org/GNOME/metacity")
+    (synopsis "Simple compositing window manager")
+    (description "Metacity is a window manager with a focus on simplicity and
+usability rather than novelties or gimmicks.  Its author has characterized it
+as a \"boring window manager for the adult in you.\"")
+    (license license:gpl2+)))
+
 (define-public mm-common
   (package
     (name "mm-common")
@@ -1220,8 +1269,12 @@ Library reference documentation.")
            pkg-config))
     (inputs
      (list avahi
-           libgudev
-           libsoup))
+           libgudev))
+    (propagated-inputs
+     ;; These inputs are required by the pkg-config file.
+     (list glib
+           libsoup
+           libxml2))
     (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,
@@ -2870,7 +2923,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
 (define-public adwaita-icon-theme
   (package
     (name "adwaita-icon-theme")
-    (version "42.0")
+    (version "43")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -2878,7 +2931,7 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1q5i31zd5jzr12p6vn831afwnzbzf6x73wna1y86drnyr2nvb1ay"))))
+                "1iiflc6rfpshipl23mszlv2lzm8d1a7pxwsx2ma5bam669ywffif"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
@@ -4239,7 +4292,8 @@ Hints specification (EWMH).")
      (list license:gpl2 license:gpl3))))
 
 (define-public goffice-0.8
-  (package (inherit goffice)
+  (package
+    (inherit goffice)
     (version "0.8.17")
     (source (origin
               (method url-fetch)
@@ -4262,9 +4316,8 @@ Hints specification (EWMH).")
     (propagated-inputs
      ;; libgoffice-0.8.pc mentions libgsf-1
      (list libgsf))
-    (inputs
-     `(("gtk" ,gtk+-2)
-       ,@(alist-delete "gtk" (package-inputs goffice))))))
+    (inputs (modify-inputs (package-inputs goffice)
+              (replace "gtk+" gtk+-2)))))
 
 (define-public gnumeric
   (package
@@ -5107,7 +5160,7 @@ as OpenStreetMap, OpenCycleMap, OpenAerialMap and Maps.")
            sqlite
            zlib))
     (inputs
-     (list mit-krb5 samba/fixed))     ; For ntlm_auth support
+     (list mit-krb5 samba/pinned))     ; For ntlm_auth support
     (home-page "https://wiki.gnome.org/Projects/libsoup")
     (synopsis "GLib-based HTTP Library")
     (description
@@ -6279,7 +6332,7 @@ throughout GNOME for API documentation).")
                    #t)
                  (format #t "test suite not run~%"))
              #t)))))
-    (home-page "http://www.clutter-project.org")
+    (home-page "https://www.clutter-project.org")
     (synopsis "Object oriented GL/GLES Abstraction/Utility Layer")
     (description
      "Cogl is a small library for using 3D graphics hardware to draw pretty
@@ -6365,7 +6418,7 @@ presentations, kiosk style applications and so on.")
     (propagated-inputs
      ;; clutter-gtk.pc refers to all these.
      (list clutter gtk+))
-    (home-page "http://www.clutter-project.org")
+    (home-page "https://www.clutter-project.org")
     (synopsis "OpenGL-based interactive canvas library GTK+ widget")
     (description
      "Clutter is an OpenGL-based interactive canvas library, designed for
@@ -6391,7 +6444,7 @@ presentations, kiosk style applications and so on.")
            pkg-config gobject-introspection))
     (inputs
      (list clutter gstreamer gst-plugins-base))
-    (home-page "http://www.clutter-project.org")
+    (home-page "https://www.clutter-project.org")
     (synopsis "Integration library for using GStreamer with Clutter")
     (description
      "Clutter-Gst is an integration library for using GStreamer with Clutter.
@@ -7114,7 +7167,7 @@ USB transfers with your high-level application or system daemon.")
 (define-public simple-scan
   (package
     (name "simple-scan")
-    (version "42.1")
+    (version "42.5")
     (source
      (origin
        (method url-fetch)
@@ -7122,7 +7175,7 @@ USB transfers with your high-level application or system daemon.")
                            (version-major version) "/"
                            "simple-scan-" version ".tar.xz"))
        (sha256
-        (base32 "09i23f8j3knppyxmikzfq9s09xarsgp9sqx9mfyvas8p3ihw16w5"))))
+        (base32 "0l201qjig6bk34bw8d77jcbhjhn4swfqdj84sjlyy1p2x6jdzx85"))))
     (build-system meson-build-system)
     ;; TODO: Fix icons in home screen, About dialogue, and scan menu.
     (arguments
@@ -8682,7 +8735,7 @@ to virtual private networks (VPNs) via Fortinet SSLVPN.")
 (define-public network-manager-applet
   (package
     (name "network-manager-applet")
-    (version "1.28.0")
+    (version "1.30.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/network-manager-applet/"
@@ -8690,7 +8743,7 @@ to virtual private networks (VPNs) via Fortinet SSLVPN.")
                                   "network-manager-applet-" version ".tar.xz"))
               (sha256
                (base32
-                "17742kgmbj9w545zwnirgr0i40zl0xzp8jx7b8c1krp93mc4h0sw"))))
+                "1lswxfxjfbiknspwli8d65i0bnyfazzcnrqckaw0s44zkm7bh5lm"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -8711,7 +8764,6 @@ to virtual private networks (VPNs) via Fortinet SSLVPN.")
      (list gcr
            libappindicator
            libgudev
-           libnotify
            libsecret
            libselinux
            jansson ; for team support
@@ -10935,7 +10987,7 @@ supports both X and Wayland display servers.")
      (list desktop-file-utils intltool pkg-config))
     (inputs
      (list enchant gtk+ python-wrapper libxml2 gucharmap))
-    (home-page "http://bluefish.openoffice.nl")
+    (home-page "https://bluefish.openoffice.nl")
     (synopsis "Web development studio")
     (description
      "Bluefish is an editor aimed at programmers and web developers,
@@ -11559,7 +11611,7 @@ configurable file renaming.")
      "Workrave is a program that assists in the recovery and prevention of
 repetitive strain injury (@dfn{RSI}).  The program frequently alerts you to take
 micro-pauses and rest breaks, and restricts you to your daily limit.")
-    (home-page "http://www.workrave.org")
+    (home-page "https://www.workrave.org")
     (license license:gpl3+)))
 
 (define-public ghex
@@ -12272,7 +12324,7 @@ integrate seamlessly with the GNOME desktop.")
 (define-public gnome-boxes
   (package
     (name "gnome-boxes")
-    (version "42.3")
+    (version "43.3")
     (source
      (origin
        (method url-fetch)
@@ -12280,18 +12332,16 @@ integrate seamlessly with the GNOME desktop.")
                            (version-major version) "/"
                            "gnome-boxes-" version ".tar.xz"))
        (sha256
-        (base32 "1lv0bdh935qj6wkv3ixg2pcv8yrapj79z02gw4fal3rhz3xggvsn"))))
+        (base32 "14zd5ii3igy0am4zqw2jg1xshf2zxsy96yv5pss2vf6rh3svmnzf"))))
     (build-system meson-build-system)
     (arguments
      (list #:glib-or-gtk? #t
-           #:configure-flags #~(list "-Drdp=false"
-                                     (string-append "-Dc_link_args=-Wl,-rpath="
-                                                    #$output
-                                                    "/lib/gnome-boxes"))
            #:phases #~(modify-phases %standard-phases
                         (add-after 'unpack 'disable-gtk-update-icon-cache
                           (lambda _
-                            (setenv "DESTDIR" "/")))
+                            (substitute* "meson.build"
+                              (("gtk_update_icon_cache: true")
+                               "gtk_update_icon_cache: false"))))
                         (add-before 'configure 'set-qemu-file-name
                           (lambda* (#:key inputs #:allow-other-keys)
                             (substitute* "src/installed-media.vala"
@@ -12305,11 +12355,11 @@ integrate seamlessly with the GNOME desktop.")
            itstool
            pkg-config
            python
-           vala))
+           vala-next))
     (inputs
      (list glib-networking              ;for TLS support
            gsettings-desktop-schemas
-           gtk+
+           gtk
            gtk-vnc
            gtksourceview-4
            json-glib
@@ -12318,24 +12368,29 @@ integrate seamlessly with the GNOME desktop.")
            libhandy
            libosinfo
            libsecret
-           libsoup-minimal-2
+           libsoup
            libusb
            libvirt
            libvirt-glib
            libxml2
-           qemu-minimal                           ;for qemu-img
+           qemu-minimal                 ;for qemu-img
            sparql-query
            spice-gtk
            tracker
            vte
-           webkitgtk-with-libsoup2))    ;for webkit2gtk-4.0
+           webkitgtk))
     (home-page "https://wiki.gnome.org/Apps/Boxes")
     (synopsis "View, access, and manage remote and virtual systems")
     (description "GNOME Boxes is a simple application to view, access, and
 manage remote and virtual systems.  Note that this application requires the
 @code{libvirt} and @code{virtlog} daemons to run.  Use the command
 @command{info '(guix) Virtualization Services'} to learn how to configure
-these services on the Guix System.")
+these services on the Guix System.  If you do not use the
+@code{gnome-desktop-service-type}, you will also want to extend the
+@code{polkit-service-type} with the @code{spice-gtk} package, as well as
+configure the @file{libexec/spice-client-glib-usb-acl-helper} executable of
+@code{spice-gtk} as setuid, to make it possible to redirect USB devices as a
+non-privileged user.")
     (license (list
               ;; For data/icons/empty-boxes.png.
               license:cc-by2.0
@@ -13050,7 +13105,7 @@ profiler via Sysprof, debugging support, and more.")
 (define-public komikku
   (package
     (name "komikku")
-    (version "1.9.0")
+    (version "1.11.1")
     (source
      (origin
        (method git-fetch)
@@ -13060,7 +13115,7 @@ profiler via Sysprof, debugging support, and more.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0vz7mw9kvp3yhn7iqg11dvmk77l65wjp6p1rpn4xnr335zfacmjh"))))
+         "0wvz7ca427x16vrjqzq7b9k1xlgdyhykdix41f48b1m3ry4wcqp2"))))
     (build-system meson-build-system)
     (arguments
      (list
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index c98ceefad7..3ed18fbdb5 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2023 Adam Faiz <adam.faiz@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +61,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages text-editors)
   #:use-module (gnu packages tls)
@@ -258,7 +260,7 @@ supports HTTP, HTTPS and GnuTLS.")
 (define-public gnunet
   (package
    (name "gnunet")
-   (version "0.16.3")
+   (version "0.19.3")
    (source
     (origin
       (method url-fetch)
@@ -266,12 +268,19 @@ supports HTTP, HTTPS and GnuTLS.")
                           ".tar.gz"))
       (sha256
        (base32
-        "12n33r9nnkl5xwx8pwf571l2zvnvfllc8vm6mamrlyjk2cphaf9j"))))
+        "09bspbjl6cll8wcrl1vnb56jwp30pcrg1yyj6xy3i0fl2bzdbdw2"))
+      (modules '((guix build utils)))
+      (snippet
+       #~(begin
+           ;; This is fixed in the upstream repository but the fix
+           ;; has not been released.
+           (substitute* "src/gns/test_proxy.sh"
+             (("test_gnunet_proxy.conf") "test_gns_proxy.conf"))))))
    (build-system gnu-build-system)
    (inputs
     (list bluez
           glpk
-          gnurl
+          curl
           gnutls/dane
           gstreamer
           jansson
@@ -291,7 +300,13 @@ supports HTTP, HTTPS and GnuTLS.")
           zbar
           zlib))
    (native-inputs
-    (list curl openssl pkg-config python xxd
+    (list curl
+          openssl
+          pkg-config
+          python
+          python-sphinx
+          python-sphinx-rtd-theme
+          xxd
           (@ (gnu packages base) which)))
    (arguments
     '(#:parallel-tests? #f ; Parallel tests aren't supported.
@@ -422,29 +437,30 @@ The following services are supported:
 (define-public gnunet-gtk
   (package (inherit gnunet)
     (name "gnunet-gtk")
-    (version "0.13.1")
+    (version "0.19.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gnunet/gnunet-gtk-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1zdzgq16h77w6ybwg3lqjsjr965np6iqvncqvkbj07glqd4wss0j"))))
+                "0z2731l69vnfsa0cdsw8wh8g1d08wz15y5n0a58qjpf7baric01k"))))
     (arguments
-     `(#:configure-flags
-       (list "--with-libunique"
-             "--with-qrencode"
-             (string-append "--with-gnunet="
-                            (assoc-ref %build-inputs "gnunet")))))
+     (list #:configure-flags
+           #~(list "--with-libunique"
+                   "--with-qrencode"
+                   (string-append "--with-gnunet="
+                                  #$(this-package-input "gnunet")))))
     (inputs
-     `(("glade3" ,glade3)
-       ("gnunet" ,gnunet)
-       ("gnutls" ,gnutls/dane)
-       ("gtk+" ,gtk+)
-       ("libextractor" ,libextractor)
-       ("libgcrypt" ,libgcrypt)
-       ("libunique" ,libunique)
-       ("qrencode" ,qrencode)))
+     (list glade3
+           gnunet
+           gnutls/dane
+           gtk+
+           libextractor
+           libgcrypt
+           libsodium
+           libunique
+           qrencode))
     (native-inputs
      (list pkg-config libglade))
     (synopsis "Graphical front-end tools for GNUnet")
diff --git a/gnu/packages/gnustep.scm b/gnu/packages/gnustep.scm
index a6f9b0e2fb..2819993d73 100644
--- a/gnu/packages/gnustep.scm
+++ b/gnu/packages/gnustep.scm
@@ -248,7 +248,7 @@ graph), and battery status (high - green, low - yellow, or critical - red).")
      (list libx11 libxext libxpm))
     (native-inputs
      (list pkg-config))
-    (home-page "http://www.thregr.org/~wavexx/software/wmnd/")
+    (home-page "https://www.thregr.org/~wavexx/software/wmnd/")
     (synopsis "Network interface monitor")
     (description
      "WMND is a dockapp for monitoring network interfaces under WindowMaker and
@@ -314,7 +314,7 @@ display, and can run a user-specified program on mouse click.")
     (version "1.2.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.improbability.net/"
+              (uri (string-append "https://www.improbability.net/"
                                   name "/" name "-" version ".tar.gz"))
               (sha256
                (base32
@@ -326,7 +326,7 @@ display, and can run a user-specified program on mouse click.")
      (list gtk+-2 libgtop))
     (native-inputs
      (list pkg-config))
-    (home-page "http://www.improbability.net/")
+    (home-page "https://www.improbability.net/")
     (synopsis "Display flames to represent resource usage")
     (description
      "wmfire is an applet for Window Maker that can monitor the average cpu
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 2cd7f0f7d8..0cdd0936ba 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 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>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
@@ -17,7 +17,7 @@
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -37,6 +37,7 @@
 
 (define-module (gnu packages gnuzilla)
   #:use-module ((srfi srfi-1) #:hide (zip))
+  #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
@@ -46,6 +47,7 @@
   #:use-module (guix hg-download)
   #:use-module (guix gexp)
   #:use-module (guix store)
+  #:use-module (guix modules)
   #:use-module (guix monads)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
@@ -92,7 +94,8 @@
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages sqlite))
+  #:use-module (gnu packages sqlite)
+  #:autoload (json parser) (json->scm))
 
 (define-public mozjs
   (package
@@ -368,6 +371,10 @@ from collections.abc import MutableSequence"))))
     (inputs
      (list icu4c-69 readline zlib))))
 
+
+;;;
+;;; Localization helper procedures.
+;;;
 (define mozilla-compare-locales
   (origin
     (method hg-fetch)
@@ -391,11 +398,23 @@ from collections.abc import MutableSequence"))))
   (list (mozilla-locale locale changeset hash-string)
         ...))
 
+(define (update-mozilla-locales changesets.json)
+  "Output a new list of Mozilla locales, to update the ALL-MOZILLA-LOCALES
+variable defined below.  It requires guile-json to be installed."
+  (match (call-with-input-file changesets.json json->scm)
+    (((lang ("revision" . revision) platforms pin) ...)
+     (let ((data (reverse (map (lambda (rev lang)
+                                 `(,(list->string (make-list 40 #\0))
+                                   ,(string-take rev 12) ,lang))
+                               revision lang))))
+       (format #t "~{~s~%~}" data)
+       data))))
+
 (define all-mozilla-locales
   (mozilla-locales
    ;;                      sha256                            changeset    locale
    ;;---------------------------------------------------------------------------
-   ("1y562h0dg33vhhhwfk6jl7xbr67gng21vcf3rpm96zzcgbnf8rjj" "503a7baec899" "ach")
+   ("1s59ihmj8x6z0ssq4xav689jb5azrpdnay8csgjm1b9pw7wmvcli" "a6940ae1a02f" "ach")
    ("1cqixlk9f8p63jz20wzsvnfb7xa82ba725gzdydlwz2axgp09c26" "4e2c7d1ddbed" "af")
    ("19r1yhmfxqasyslc8gr9as5w1scscz1xr8iqy9zi4b90fdjzs0ac" "06897e40a7ea" "an")
    ("0nfknb1p03j9fgmkwlm1mzdyh10g0l33x34ab39kc072apziyv0n" "9272819b09e2" "ar")
@@ -497,20 +516,19 @@ from collections.abc import MutableSequence"))))
 ;; XXXX: Workaround 'snippet' limitations.
 (define computed-origin-method (@@ (guix packages) computed-origin-method))
 
-(define %icecat-version "102.7.0-guix0-preview1")
-(define %icecat-build-id "20230117000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-base-version "102.8.0")
+(define %icecat-version (string-append %icecat-base-version "-guix0-preview1"))
+(define %icecat-build-id "20230214000000") ;must be of the form YYYYMMDDhhmmss
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
 ;; script from the upstream IceCat project.
 (define icecat-source
-  (let* ((base-version (first (string-split %icecat-version #\-)))
-
-         (major-version (first  (string-split base-version #\.)))
-         (minor-version (second (string-split base-version #\.)))
-         (sub-version   (third  (string-split base-version #\.)))
+  (let* ((major-version (first  (string-split %icecat-base-version #\.)))
+         (minor-version (second (string-split %icecat-base-version #\.)))
+         (sub-version   (third  (string-split %icecat-base-version #\.)))
 
-         (upstream-firefox-version (string-append base-version "esr"))
+         (upstream-firefox-version (string-append %icecat-base-version "esr"))
          (upstream-firefox-source
           (origin
             (method url-fetch)
@@ -520,11 +538,12 @@ from collections.abc import MutableSequence"))))
                   "firefox-" upstream-firefox-version ".source.tar.xz"))
             (sha256
              (base32
-              "1ahl66x8chnsz80capqa5ivyrqhc50s91zrcgz1jxd7w2ws61957"))))
+              "0j6afrgfsmd0adbbmffw4p1f2hznpck9d36z3bsjx36f7cjgdy27"))))
 
-         (upstream-icecat-base-version "102.7.0") ; maybe older than base-version
-         ;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
-         (gnuzilla-commit "7f76da3cfd5d04fa38d894f6ea6ac5f2fd0ea837")
+         ;; The upstream-icecat-base-version may be older than the
+         ;; %icecat-base-version.
+         (upstream-icecat-base-version "102.8.0")
+         (gnuzilla-commit "f23f8b609ef4afcc7d8ac5fa795093f1c403f8da")
          (gnuzilla-source
           (origin
             (method git-fetch)
@@ -536,7 +555,7 @@ from collections.abc import MutableSequence"))))
                                       (string-take gnuzilla-commit 8)))
             (sha256
              (base32
-              "19i66qvwzgllgnlw270bxphymybjj1qb5hdznqi4i2dcgpcrq77l"))))
+              "1zvvgjvsj7k8753f7xmpmkq35dqzyik95943hzl84v2j5mnahhj4"))))
 
          ;; 'search-patch' returns either a valid file name or #f, so wrap it
          ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -554,14 +573,13 @@ from collections.abc import MutableSequence"))))
           #~(begin
               (use-modules (guix build utils))
               (let ((firefox-dir
-                     (string-append "firefox-" #$base-version))
+                     (string-append "firefox-" #$%icecat-base-version))
                     (icecat-dir
                      (string-append "icecat-" #$%icecat-version)))
 
                 (set-path-environment-variable
                  "PATH" '("bin")
-                 (list #+rename
-                       #+python
+                 (list #+python
                        #+(canonical-package bash)
                        #+(canonical-package coreutils)
                        #+(canonical-package findutils)
@@ -673,9 +691,9 @@ from collections.abc import MutableSequence"))))
                         "--sort=name"
                         icecat-dir)))))))))
 
-(define-public icecat
+(define-public icecat-minimal
   (package
-    (name "icecat")
+    (name "icecat-minimal")
     (version %icecat-version)
     (source icecat-source)
     (build-system mozilla-build-system)
@@ -687,7 +705,6 @@ from collections.abc import MutableSequence"))))
            gdk-pixbuf
            glib
            gtk+
-           gtk+-2
            ;; UNBUNDLE-ME! graphite2
            cairo
            pango
@@ -718,10 +735,8 @@ from collections.abc import MutableSequence"))))
            mit-krb5
            hunspell
            libnotify
-           ;; See <https://bugs.gnu.org/32833>
-           ;;   and related comments in the 'remove-bundled-libraries' phase.
-           ;; UNBUNDLE-ME! nspr
-           ;; UNBUNDLE-ME! nss
+           nspr-next
+           nss-next
            shared-mime-info
            sqlite
            eudev
@@ -776,7 +791,8 @@ from collections.abc import MutableSequence"))))
          "--disable-tests"
          "--disable-updater"
          "--disable-crashreporter"
-         "--disable-eme"
+         ;; The --disable-eme option is not available on aarch64.
+         #$(if (target-aarch64?) "" "--disable-eme")
 
          ;; Building with debugging symbols takes ~5GiB, so disable it.
          "--disable-debug"
@@ -816,12 +832,8 @@ from collections.abc import MutableSequence"))))
          ;; UNBUNDLE-ME! "--with-system-theora" ; wants theora-1.2, not yet released
          ;; UNBUNDLE-ME! "--with-system-libvpx"
          "--with-system-icu"
-
-         ;; See <https://bugs.gnu.org/32833>
-         ;;   and related comments in the
-         ;;   'remove-bundled-libraries' phase below.
-         ;; UNBUNDLE-ME! "--with-system-nspr"
-         ;; UNBUNDLE-ME! "--with-system-nss"
+         "--with-system-nspr"
+         "--with-system-nss"
 
          ;; UNBUNDLE-ME! "--with-system-harfbuzz"
          ;; UNBUNDLE-ME! "--with-system-graphite2"
@@ -870,12 +882,9 @@ from collections.abc import MutableSequence"))))
                           ;; FIXME: A script from the bundled nspr is used.
                           ;;"nsprpub"
                           ;;
-                          ;; FIXME: With the update to IceCat 60, using system NSS
-                          ;;        broke certificate validation.  See
-                          ;;        <https://bugs.gnu.org/32833>.  For now, we use
-                          ;;        the bundled NSPR and NSS.  TODO: Investigate,
-                          ;;        and try to unbundle these libraries again.
-                          ;; UNBUNDLE-ME! "security/nss"
+                          ;; FIXME: Some of the bundled NSS sources are used
+                          ;; to build third_party/prio.
+                          ;;"security/nss"
                           ;;
                           ;; TODO: Use more system media libraries.  See:
                           ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=517422>
@@ -1117,27 +1126,196 @@ standards of the IceCat project.")
        (cpe-name . "firefox_esr")
        (cpe-version . ,(first (string-split version #\-)))))))
 
-(define %icedove-build-id "20230119000000") ;must be of the form YYYYMMDDhhmmss
-(define %icedove-version "102.7.0")
+(define %icecat-locales
+  '("ach" "af" "an" "ar" "ast" "az" "be" "bg" "bn" "br" "bs" "ca" "cak"
+    "ca-valencia" "cs" "cy" "da" "de" "dsb" "el" "en-CA" "en-GB" "eo" "es-AR"
+    "es-CL" "es-ES" "es-MX" "et" "eu" "fa" "ff" "fi" "fr" "fy-NL" "ga-IE" "gd"
+    "gl" "gn" "gu-IN" "he" "hi-IN" "hr" "hsb" "hu" "hy-AM" "ia" "id" "is" "it"
+    "ja" "ja-JP-mac" "ka" "kab" "kk" "km" "kn" "ko" "lij" "lt" "lv" "mk" "mr" "ms"
+    "my" "nb-NO" "ne-NP" "nl" "nn-NO" "oc" "pa-IN" "pl" "pt-BR" "pt-PT" "rm" "ro"
+    "ru" "sco" "si" "sk" "sl" "son" "sq" "sr" "sv-SE" "szl" "ta" "te" "th" "tl"
+    "tr" "trs" "uk" "ur" "uz" "vi" "xh" "zh-CN" "zh-TW"))
+
+(define %icedove-build-id "20230207000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-version "102.7.2")
 
 ;; Provides the "comm" folder which is inserted into the icecat source.
 ;; Avoids the duplication of Icecat's source tarball.
-(define thunderbird-source
+(define thunderbird-comm-source
   (origin
     (method hg-fetch)
     (uri (hg-reference
           (url "https://hg.mozilla.org/releases/comm-esr102")
-          (changeset "a786f143946e93a3059e6fe290bb954840ab9778")))
+          (changeset "0f6deed0752b618055c34e06c268af3da9d1548d")))
     (file-name (string-append "thunderbird-" %icedove-version "-checkout"))
     (sha256
      (base32
-      "02pz9yhpp3lswjmvj30vbx05mbi31bnzzfwyw5v996zg5wz2fpyv"))))
-
-(define-public icedove
+      "071q0pcfvfpzx741ly1sl8anlmzx02h17w4ylfnrkwrpaclq3p6p"))))
+
+(define (comm-source->locales+changeset source)
+  "Given SOURCE, a checkout of the Thunderbird 'comm' component, return the
+list of languages supported as well as the currently used changeset."
+  (match (update-mozilla-locales
+          (string-append source "/mail/locales/l10n-changesets.json"))
+    (((_ changeset locale) ...)
+     (values locale (first changeset)))))
+
+;;; Generated with comm-source->locales+changeset.
+(define %icedove-locales
+  '("af" "ar" "ast" "be" "bg" "br" "ca" "cak" "cs" "cy" "da" "de" "dsb" "el"
+    "en-CA" "en-GB" "es-AR" "es-ES" "es-MX" "et" "eu" "fi" "fr" "fy-NL" "ga-IE"
+    "gd" "gl" "he" "hr" "hsb" "hu" "hy-AM" "id" "is" "it" "ja" "ja-JP-mac" "ka"
+    "kab" "kk" "ko" "lt" "lv" "ms" "nb-NO" "nl" "nn-NO" "pa-IN" "pl" "pt-BR"
+    "pt-PT" "rm" "ro" "ru" "sk" "sl" "sq" "sr" "sv-SE" "th" "tr" "uk" "uz" "vi"
+    "zh-CN" "zh-TW"))
+
+;;; To find out which changeset to use for the comm-l10n repo, use the
+;;; 'comm-source->locales+changeset' procedure on the thunderbird-comm-source
+;;; checkout directory.  The complete localization data should be released as
+;;; a tarball in the next release (see:
+;;; https://bugzilla.mozilla.org/show_bug.cgi?id=1817086).  When this tarball
+;;; is available, it should replace the complete 'l10n' directory at the root
+;;; of the IceCat source, instead of only the 'calendar', chat and mail
+;;; directories that it provides.
+(define thunderbird-comm-l10n
+  (let* ((changeset "5b6788295358")
+         (version (git-version %icedove-version "0" changeset)))
+    (origin
+      (method hg-fetch)
+      (uri (hg-reference
+            (url "https://hg.mozilla.org/projects/comm-l10n")
+            (changeset changeset)))
+      (file-name (git-file-name "comm-l10n" version))
+      (sha256
+       (base32
+        "1jrsmkscjjllcfawi3788vwm53wn25inbhdis5nk4vfpr7wk5ill")))))
+
+(define icedove-source
+  (let ((name (string-append "icedove-" %icedove-version)))
+    (origin
+      (method computed-origin-method)
+      (file-name (string-append name ".tar.xz"))
+      (sha256 #f)
+      (uri
+       (delay
+         (with-imported-modules (source-module-closure '((guix build utils)))
+           #~(begin
+               (use-modules (guix build utils)
+                            (sxml simple))
+
+               (set-path-environment-variable
+                "PATH" '("bin")
+                (list #+(canonical-package tar)
+                      #+(canonical-package xz)))
+
+               ;; Extract the base Icecat tarball, renaming its top-level
+               ;; directory.
+               (invoke "tar" "--transform" (string-append "s,[^/]*," #$name ",")
+                       "-xf" #$icecat-source)
+               (chdir #$name)
+
+               ;; Merge the Thunderdbird localization data.
+               (copy-recursively #$thunderbird-comm-l10n "l10n")
+
+               ;; Add the Thunderbird-specific "comm" directory..
+               (mkdir "comm")
+               (copy-recursively #$thunderbird-comm-source "comm")
+               (delete-file "sourcestamp.txt")
+
+               ;; Adjust the application name.
+               (substitute* "comm/mail/confvars.sh"
+                 (("MOZ_APP_NAME=thunderbird")
+                  "MOZ_APP_NAME=icedove")
+                 (("MOZ_UPDATER=1")
+                  "MOZ_UPDATER=0"))
+
+               ;; Remove branding to comply with Mozilla's trademark policy
+               (with-directory-excursion "comm/mail/branding/nightly"
+                 (delete-file "content/about-wordmark.svg")
+                 (call-with-output-file "content/about-wordmark.svg"
+                   (lambda (port)
+                     (sxml->xml '(svg (@ (xmlns "http://www.w3.org/2000/svg")
+                                         (viewBox "0 0 789.1 90.78")
+                                         (width "333")
+                                         (height "48")
+                                         (fill "#fff"))
+                                      (text (@ (x "400") (y "70")
+                                               (text-anchor "middle")
+                                               (font-size "90"))
+                                            "Icedove Daily"))
+                                port)))
+                 (substitute* '("locales/en-US/brand.properties"
+                                "locales/en-US/brand.ftl"
+                                "locales/en-US/brand.dtd"
+                                "configure.sh")
+                   (("Thunderbird") "Icedove")
+                   (("mozilla.org") "guix.gnu.org")))
+               ;; Remove other mentions of Thunderbird in user-visible text.
+               (with-directory-excursion "comm/mail/base/content"
+                 (substitute* '("overrides/app-license-name.html")
+                   (("Thunderbird") "Icedove")))
+               (with-directory-excursion "comm/mail/components/"
+                 (substitute* '("MailGlue.jsm"
+                                "extensions/schemas/addressBook.json"
+                                "extensions/schemas/tabs.json"
+                                "extensions/schemas/cloudFile.json"
+                                "extensions/schemas/chrome_settings_overrides.json"
+                                "extensions/schemas/windows.json"
+                                "extensions/parent/ext-mail.js"
+                                "im/messages/mail/Info.plist"
+                                "enterprisepolicies/moz.build"
+                                "enterprisepolicies/helpers/moz.build"
+                                "enterprisepolicies/schemas/moz.build")
+                   (("Thunderbird") "Icedove")))
+               (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js"
+                              "comm/mail/base/content/customizeToolbar.js"
+                              "comm/suite/components/customizeToolbar.js")
+                 (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
+                  (format #f "AppConstants.MOZ_APP_NAME ~a= \"icedove" e)))
+
+               ;; Override addon URLs and settings
+               (substitute* "comm/mail/app/profile/all-thunderbird.js"
+                 (("(pref\\(\"extensions.webservice.discoverURL\").*" _ m)
+                  (string-append m ", \"https://directory.fsf.org/wiki/Icedove\");"))
+                 (("(pref\\(\"extensions.getAddons.search.url\").*" _ m)
+                  (string-append m ", \"https://guix.gnu.org/packages\");"))
+                 (("(pref\\(\"extensions.update.enabled\").*" _ m)
+                  (string-append m ", false);"))
+                 (("(pref\\(\"extensions.systemAddon.update.enabled\").*" _ m)
+                  (string-append m ", false);"))
+                 (("(pref\\(\"lightweightThemes.update.enabled\").*" _ m)
+                  (string-append m ", false);"))
+
+                 ;; XXX: The autoDisableScopes is tweaked by the makeicecat
+                 ;; script, but it doesn't know about Thunderbird.  This is
+                 ;; necessary to allow picking up the extensions found in the
+                 ;; system global application directory, such as the language
+                 ;; packs.
+                 (("\"extensions.autoDisableScopes\", 15")
+                  "\"extensions.autoDisableScopes\", 3")
+
+                 ;; Set the default locale to that of the operating system.
+                 ((".*extensions.autoDisableScopes.*" anchor)
+                  (string-append anchor
+                                 "pref(\"intl.locale.requested\", \"\");\n")))
+
+               ;; Step out of the directory and create the tarball.
+               (chdir "..")
+               (format #t "Packing Icedove source tarball...~%")
+               (force-output)
+               (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+               (invoke "tar" "cfa" #$output
+                       "--mtime=@315619200" ;1980-01-02 UTC
+                       "--owner=root:0"
+                       "--group=root:0"
+                       "--sort=name"
+                       #$name))))))))
+
+(define-public icedove-minimal
   (package
-    (name "icedove")
+    (name "icedove-minimal")
     (version %icedove-version)
-    (source icecat-source)
+    (source icedove-source)
     (properties
      `((cpe-name . "thunderbird_esr")))
     (build-system gnu-build-system)
@@ -1151,11 +1329,6 @@ standards of the IceCat project.")
                   ,@%gnu-build-system-modules)
       #:phases
       #~(modify-phases %standard-phases
-          (add-after 'unpack 'prepare-thunderbird-sources
-            (lambda _
-              (mkdir "comm")
-              (copy-recursively #$thunderbird-source "comm")
-              (delete-file "sourcestamp.txt")))
           (add-after 'patch-source-shebangs 'patch-cargo-checksums
             (lambda _
               (use-modules (guix build cargo-utils))
@@ -1183,71 +1356,8 @@ ca495991b7852b855"))
           (add-after 'patch-source-shebangs 'fix-profile-setting
             (lambda _
               (substitute* "comm/mail/moz.configure"
-                (("MOZ_DEDICATED_PROFILES, True")
-                 "MOZ_DEDICATED_PROFILES, False"))))
-          (add-after 'prepare-thunderbird-sources 'rename-to-icedove
-            (lambda _
-              (substitute* "comm/mail/confvars.sh"
-                (("MOZ_APP_NAME=thunderbird")
-                 "MOZ_APP_NAME=icedove")
-                (("MOZ_UPDATER=1")
-                 "MOZ_UPDATER=0"))
-              ;; Remove branding to comply with Mozilla's trademark policy
-              (with-directory-excursion "comm/mail/branding/nightly"
-                (delete-file "content/about-wordmark.svg")
-                (call-with-output-file "content/about-wordmark.svg"
-                  (lambda (port)
-                    (sxml->xml '(svg (@ (xmlns "http://www.w3.org/2000/svg")
-                                        (viewBox "0 0 789.1 90.78")
-                                        (width "333")
-                                        (height "48")
-                                        (fill "#fff"))
-                                     (text (@ (x "400") (y "70")
-                                              (text-anchor "middle")
-                                              (font-size "90"))
-                                           "Icedove Daily"))
-                               port)))
-                (substitute* '("locales/en-US/brand.properties"
-                               "locales/en-US/brand.ftl"
-                               "locales/en-US/brand.dtd"
-                               "configure.sh")
-                  (("Thunderbird") "Icedove")
-                  (("mozilla.org") "guix.gnu.org")))
-              ;; Remove other mentions of Thunderbird in user-visible text.
-              (with-directory-excursion "comm/mail/base/content"
-                (substitute* '("overrides/app-license-name.html")
-                  (("Thunderbird") "Icedove")))
-              (with-directory-excursion "comm/mail/components/"
-                (substitute* '("MailGlue.jsm"
-                               "extensions/schemas/addressBook.json"
-                               "extensions/schemas/tabs.json"
-                               "extensions/schemas/cloudFile.json"
-                               "extensions/schemas/chrome_settings_overrides.json"
-                               "extensions/schemas/windows.json"
-                               "extensions/parent/ext-mail.js"
-                               "im/messages/mail/Info.plist"
-                               "enterprisepolicies/moz.build"
-                               "enterprisepolicies/helpers/moz.build"
-                               "enterprisepolicies/schemas/moz.build")
-                  (("Thunderbird") "Icedove")))
-              (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js"
-                             "comm/mail/base/content/customizeToolbar.js"
-                             "comm/suite/components/customizeToolbar.js")
-                (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
-                 (format #f "AppConstants.MOZ_APP_NAME ~a= \"icedove" e)))
-
-              ;; Override addon URLs and settings
-              (substitute* "comm/mail/app/profile/all-thunderbird.js"
-                (("(pref\\(\"extensions.webservice.discoverURL\").*" _ m)
-                 (string-append m ", \"https://directory.fsf.org/wiki/Icedove\");"))
-                (("(pref\\(\"extensions.getAddons.search.url\").*" _ m)
-                 (string-append m ", \"https://guix.gnu.org/packages\");"))
-                (("(pref\\(\"extensions.update.enabled\").*" _ m)
-                 (string-append m ", false);"))
-                (("(pref\\(\"extensions.systemAddon.update.enabled\").*" _ m)
-                 (string-append m ", false);"))
-                (("(pref\\(\"lightweightThemes.update.enabled\").*" _ m)
-                 (string-append m ", false);")))))
+                (("\"MOZ_DEDICATED_PROFILES\", True")
+                 "\"MOZ_DEDICATED_PROFILES\", False"))))
           (add-after 'build 'neutralize-store-references
             (lambda _
               ;; Mangle the store references to compilers & other build tools in
@@ -1266,7 +1376,8 @@ ca495991b7852b855"))
                                 (string-drop hash 8))))))
           (delete 'bootstrap)
           (replace 'configure
-            (lambda* (#:key inputs configure-flags #:allow-other-keys)
+            (lambda* (#:key native-inputs inputs configure-flags
+                      #:allow-other-keys)
               (let* ((bash (which "bash"))
                      (abs-srcdir (getcwd))
                      (srcdir (string-append "../" (basename abs-srcdir)))
@@ -1299,6 +1410,8 @@ ca495991b7852b855"))
                   (lambda ()
                     (display
                      (string-append
+                      "ac_add_options --allow-addon-sideload\n"
+                      "ac_add_options --with-unsigned-addon-scopes=app,system\n"
                       "ac_add_options --disable-crashreporter\n"
                       "ac_add_options --disable-debug\n"
                       "ac_add_options --disable-debug-symbols\n"
@@ -1318,15 +1431,18 @@ ca495991b7852b855"))
                       "ac_add_options --enable-system-ffi\n"
                       "ac_add_options --enable-system-pixman\n"
                       "ac_add_options --prefix=" #$output "\n"
-                      "ac_add_options --with-clang-path=" (assoc-ref %build-inputs "clang") "/bin/clang\n"
+                      "ac_add_options --with-clang-path="
+                      (search-input-file (or native-inputs inputs)
+                                         "bin/clang") "\n"
                       "ac_add_options --with-distribution-id=org.gnu\n"
-                      "ac_add_options --with-libclang-path=" (assoc-ref %build-inputs "clang") "/lib\n"
+                      "ac_add_options --with-libclang-path="
+                      #$(this-package-native-input "clang") "/lib\n"
                       "ac_add_options --with-system-bz2\n"
                       "ac_add_options --with-system-icu\n"
                       "ac_add_options --with-system-jpeg\n"
                       "ac_add_options --with-system-libevent\n"
                       "ac_add_options --with-system-nspr\n"
-                                        ;"ac_add_options --with-system-nss\n"
+                      "ac_add_options --with-system-nss\n"
                       "ac_add_options --with-system-zlib\n"
                       "ac_add_options --without-wasm-sandboxed-libraries\n"
                       "mk_add_options MOZ_MAKE_FLAGS=-j"
@@ -1363,6 +1479,20 @@ ca495991b7852b855"))
                             Name=Write new message~@
                             Exec=~@*~a/bin/icedove -compose~%"
                             #$output))))))
+          (add-after 'install-desktop-file 'install-icons
+            ;; TODO: Use actual Icedove branding icons (currently the stock
+            ;; Thunderbird icon is used).
+            (lambda _
+              (with-directory-excursion "comm/mail/branding/thunderbird"
+                (for-each
+                 (lambda (file)
+                   (let* ((size (string-filter char-numeric? file))
+                          (icons (string-append #$output "/share/icons/hicolor/"
+                                                size "x" size "/apps")))
+                     (mkdir-p icons)
+                     (copy-file file (string-append icons "/icedove.png"))))
+                 '("default16.png" "default22.png" "default24.png"
+                   "default32.png" "default48.png" "default256.png")))))
           (add-after 'install 'wrap-program
             (lambda* (#:key inputs #:allow-other-keys)
               (let* ((lib (string-append #$output "/lib"))
@@ -1403,9 +1533,7 @@ ca495991b7852b855"))
            libxt
            mesa
            mit-krb5
-           nspr-4.32
-           ;; FIXME: create nss >= 3.68 after core-updates merge
-           ;;nss
+           nss-next
            pango
            pixman
            pulseaudio
@@ -1436,41 +1564,223 @@ ca495991b7852b855"))
 Thunderbird.  It supports email, news feeds, chat, calendar and contacts.")
     (license license:mpl2.0)))
 
+(define (make-l10n-package project version source locales)
+  "Return a package for PROJECT, a symbol (either icecat or icedove), with
+their corresponding VERSION, SOURCE and LOCALES variables."
+  (unless (member project '(icecat icedove))
+    (error "only icecat or icedove components are currently supported"))
+
+  (let ((name (if (eq? 'icecat project)
+                  "IceCat"
+                  "Icedove")))
+    (package
+      (name (format #f "~a-l10n" project))
+      (version version)
+      (source source)
+      (outputs (cons "out" locales))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:modules '((guix build gnu-build-system)
+                    (guix build utils)
+                    (ice-9 format)
+                    (ice-9 ftw)
+                    (srfi srfi-1)
+                    (srfi srfi-26))
+        #:tests? #f                     ;no tests, this is data
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'bootstrap)
+            (delete 'install)
+            (replace 'configure
+              (lambda _
+                ;; The following configuration is inspired by guidance at
+                ;; https://firefox-source-docs.mozilla.org/build/buildsystem/locales.html.
+                (call-with-output-file ".mozconfig"
+                  (lambda (p)
+                    (format p "~{~a~%~}"
+                            (list (if (eq? 'icecat '#$project)
+                                      "ac_add_options --enable-project=browser"
+                                      "ac_add_options --enable-project=comm/mail")
+                                  "ac_add_options --disable-compile-environment"
+                                  (string-append
+                                   "ac_add_options --with-l10n-base="
+                                   (getcwd) "/l10n")
+                                  ;; Hack, otherwise the build system throws:
+                                  ;; 'RuntimeError: File "brand.dtd" not found'.
+                                  "ac_add_options --enable-official-branding"
+                                  "mk_add_options MOZ_OBJDIR=obj"))))
+                (setenv "CONFIG_SHELL" (which "bash"))
+                (setenv "MOZBUILD_STATE_PATH"
+                        (string-append (getcwd) "/mach_state"))
+                (setenv "MOZCONFIG" (string-append (getcwd) "/.mozconfig"))
+                (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
+                (setenv "BUILD_BACKENDS" "FasterMake,RecursiveMake")))
+            (replace 'build             ;build and install data files
+              (lambda* (#:key outputs #:allow-other-keys)
+                (define (find-file dir name)
+                  (let ((files (find-files dir name)))
+                    (when (null? files)
+                      (error "could not find file in dir" name dir))
+                    (car files)))
+
+                (for-each
+                 (lambda (l)
+                   (let* ((out (assoc-ref outputs l))
+                          ;; The older lib/$project/distribution/extensions
+                          ;; directory is deprecated.  Use the newer app-global
+                          ;; directory, which is lib/$project/extensions.
+                          (ext-dir-prefix
+                           (format
+                            #f "lib/~a/~:[~;browser/~]extensions"
+                            '#$project (eq? 'icecat '#$project)))
+                          (all-ext (string-append #$output "/" ext-dir-prefix))
+                          (ext-dir (string-append out "/" ext-dir-prefix))
+                          ;; XXX: Because Icedove doesn't have a makeicedove
+                          ;; script that substitutes all the Thunderbird
+                          ;; references to Icedove, the MOZ_LANGPACK_EID
+                          ;; defined in comm/mail/locales/Makefile.in uses
+                          ;; 'thunderbird' in its ID extension rather than
+                          ;; 'icedove'.
+                          (name (format #f "langpack-~a@~a.mozilla.org.xpi"
+                                        l (if (eq? 'icedove '#$project)
+                                              'thunderbird
+                                              '#$project))))
+                     (format #t "processing locale `~a'...~%" l)
+                     (if (eq? 'icecat '#$project)
+                         ;; XXX: For some reasons, for IceCat, there are some
+                         ;; parsing errors that cause the build system to
+                         ;; return an unclean exit code; use system* to ignore
+                         ;; errors.
+                         (system* "./mach" "build" (string-append "langpack-" l))
+                         (invoke "./mach" "build" (string-append "langpack-" l)))
+                     (mkdir-p ext-dir)
+                     (let ((xpi (find-file "obj" (string-append
+                                                  "\\." l "\\.langpack\\.xpi$"))))
+                       (copy-file xpi (string-append ext-dir "/" name))
+                       ;; Symlink to the main output so that a user can
+                       ;; install all of the language packs at once.
+                       (mkdir-p all-ext)
+                       (symlink (string-append ext-dir "/" name)
+                                (string-append all-ext "/" name)))))
+                 (if (eq? 'icedove '#$project)
+                     '#$%icedove-locales
+                     '#$%icecat-locales)))))))
+      (native-inputs
+       (list m4
+             perl
+             python-wrapper
+             node
+             unzip))
+      (home-page "https://www.mozilla.org/")
+      (synopsis (string-append "Language localization data for " name))
+      (description (string-append "This package contains the various language
+localization data files (language pack extensions) for " name ".  The
+individual localization packages can be installed by using the output
+associated with their name."))
+      (license license:mpl2.0))))
+
+(define-public icecat-l10n
+  (make-l10n-package 'icecat %icecat-version icecat-source %icecat-locales))
+
+(define-public icedove-l10n
+  (make-l10n-package 'icedove %icedove-version icedove-source %icedove-locales))
+
+;;; This hack exists because there's no way to configure extra extension
+;;; search paths for IceCat or Icedove.  The global extensions directory is
+;;; constructed relatively to the executable file name.
+(define (make-mozilla-with-l10n project base l10n-package)
+  "Return a package definition for PROJECT (a symbol such as 'icecat or
+'icedove) that combines the BASE package with L10N-PACKAGE."
+
+  (unless (member project '(icecat icedove))
+    (error "only icecat or icedove components are currently supported"))
+
+  (let ((name (symbol->string project))
+        (icecat? (eq? 'icecat project)))
+    (package
+      (inherit base)
+      (name (symbol->string project))
+      (build-system trivial-build-system)
+      (arguments
+       (list
+        #:modules '((guix build union)
+                    (guix build utils))
+        #:builder
+        #~(begin
+            (use-modules (guix build union)
+                         (guix build utils))
+
+            (union-build #$output (list #$base #$l10n-package)
+                         #:create-all-directories? #t)
+
+            (define* (expose name #:optional (proc copy-file)
+                             #:key (source #$base))
+              (let ((dest (string-append #$output "/" name)))
+                (mkdir-p (dirname dest))
+                (proc (string-append source "/" name) dest)))
+
+            (let ((wrapper (string-append "lib/" #$name "/" #$name))
+                  (real-binary (string-append "lib/" #$name "/." #$name
+                                              "-real"))
+                  (desktop-file (string-append "share/applications/"
+                                               #$name ".desktop")))
+              ;; Copy wrapper file.
+              (delete-file (string-append #$output "/" wrapper))
+              (expose wrapper)
+
+              ;; Recreate bin symlink.
+              (delete-file (string-append #$output "/bin/" #$name))
+              (symlink (string-append #$output "/" wrapper)
+                       (string-append #$output "/bin/" #$name))
+
+              ;; Copy actual binary.
+              (delete-file (string-append #$output "/" real-binary))
+              (expose real-binary)
+
+              ;; Copy desktop file.
+              (delete-file (string-append #$output "/" desktop-file))
+              (expose desktop-file)
+
+              ;; Adjust the references in the desktop file and wrapper.
+              (substitute* (list (string-append #$output "/" desktop-file)
+                                 (string-append #$output "/" wrapper))
+                ((#$base) #$output)))))))))
+
+(define-public icecat
+  (make-mozilla-with-l10n 'icecat icecat-minimal icecat-l10n))
+
+(define-public icedove
+  (make-mozilla-with-l10n 'icedove icedove-minimal icedove-l10n))
+
 (define-public icedove/wayland
   (package
     (inherit icedove)
     (name "icedove-wayland")
-    (native-inputs '())
-    (inputs
-     `(("bash" ,bash-minimal)
-       ("icedove" ,icedove)))
     (build-system trivial-build-system)
     (arguments
-      '(#:modules ((guix build utils))
-        #:builder
-        (begin
+     (list
+      #:modules '((guix build utils))
+      #:builder
+      #~(begin
           (use-modules (guix build utils))
-          (let* ((bash    (assoc-ref %build-inputs "bash"))
-                 (icedove (assoc-ref %build-inputs "icedove"))
-                 (out     (assoc-ref %outputs "out"))
-                 (exe     (string-append out "/bin/icedove")))
+          (let* ((exe (string-append #$output "/bin/icedove")))
             (mkdir-p (dirname exe))
-
             (call-with-output-file exe
               (lambda (port)
                 (format port "#!~a
  MOZ_ENABLE_WAYLAND=1 exec ~a $@"
-                        (string-append bash "/bin/bash")
-                        (string-append icedove "/bin/icedove"))))
+                        #$(file-append bash-minimal "/bin/bash")
+                        #$(file-append icedove "/bin/icedove"))))
             (chmod exe #o555)
-
             ;; Provide the manual and .desktop file.
-            (copy-recursively (string-append icedove "/share")
-                              (string-append out "/share"))
-            (substitute* (string-append
-                          out "/share/applications/icedove.desktop")
-              ((icedove) out))
-            #t))))))
+            (copy-recursively (string-append #$icedove "/share")
+                              (string-append #$output "/share"))
+            (substitute* (string-append #$output
+                                        "/share/applications/icedove.desktop")
+              ((#$icedove) #$output))))))
+    (native-inputs '())
+    (inputs '())))
 
 (define-public firefox-decrypt
   (package
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 70ddef52f1..7268b661cf 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2016 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2016, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
@@ -12,7 +12,7 @@
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2018, 2019, 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
+;;; Copyright © 2018, 2019, 2020, 2023 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2019 Giovanni Biscuolo <g@xelera.eu>
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019, 2020, 2021 Arun Isaac <arunisaac@systemreboot.net>
@@ -38,6 +38,8 @@
 ;;; Copyright © 2022 Dhruvin Gandhi <contact@dhruvin.dev>
 ;;; Copyright © 2022 Nicolas Graves <ngraves@ngraves.fr>
 ;;; Copyright © 2022 ( <paren@disroot.org>
+;;; Copyright © 2023 Hilton Chain <hako@ultrarare.space>
+;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,7 +67,6 @@
   #:use-module (guix packages)
   #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system trivial)
   #:use-module (guix build-system go)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
@@ -92,13 +93,11 @@
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
-;; According to https://golang.org/doc/install/gccgo, gccgo-4.8.2 includes a
-;; complete go-1.1.2 implementation, gccgo-4.9 includes a complete go-1.2
-;; implementation, and gccgo-5 a complete implementation of go-1.4.  Ultimately
-;; we hope to build go-1.5+ with a bootstrap process using gccgo-5.  As of
-;; go-1.5, go cannot be bootstrapped without go-1.4, so we need to use go-1.4 or
-;; gccgo-5.  Mips is not officially supported, but it should work if it is
-;; bootstrapped.
+;; According to https://go.dev/doc/install/gccgo, gccgo-11 includes a complete
+;; implementation of go-1.16 and gccgo-12 includes a complete implementation of
+;; go-1.18.  Starting with go-1.5 go cannot be built without an existing
+;; installation of go, so we need to use go-1.4 or gccgo.  For architectures which
+;; are not supported with go-1.4 we use a version of gccgo to bootstrap them.
 
 (define-public go-1.4
   (package
@@ -462,7 +461,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
     (native-inputs
      `(,@(if (member (%current-system) (package-supported-systems go-1.4))
            `(("go" ,go-1.4))
-           `(("go" ,gccgo-10)))
+           `(("go" ,gccgo-12)))
        ("go-skip-gc-test.patch" ,(search-patch "go-skip-gc-test.patch"))
        ,@(match (%current-system)
            ((or "armhf-linux" "aarch64-linux")
@@ -626,9 +625,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                  (("^#!.*") "#!/usr/bin/env perl\n"))))))))
     (native-inputs
      `(("go-fix-script-tests.patch" ,(search-patch "go-fix-script-tests.patch"))
-       ,@(if (not (member (%current-system) (package-supported-systems go-1.4)))
-             (alist-replace "go" (list gccgo-10) (package-native-inputs go-1.14))
-             (package-native-inputs go-1.14))))))
+       ,@(package-native-inputs go-1.14)))))
 
 (define-public go-1.17
   (package
@@ -652,7 +649,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   (guix build utils))
        ;; TODO: Disable the test(s) in misc/cgo/test/cgo_test.go
        ;; that cause segfaults in the test suite.
-       #:tests? ,(not (target-aarch64?))
+       #:tests? ,(not (or (target-aarch64?) (target-riscv64?)))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -838,19 +835,13 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   "README.md" "SECURITY.md"))))))))
     (inputs (if (not (target-arm?))
               (alist-delete "gcc:lib" (package-inputs go-1.16))
-              (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)))))
+              (package-inputs go-1.16)))))
 
 (define-public go-1.18
   (package
     (inherit go-1.17)
     (name "go")
-    (version "1.18.6")
+    (version "1.18.10")
     (source
      (origin
        (method git-fetch)
@@ -860,13 +851,13 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1s2xwgd3mfbjdf7ls9gyj7n1lbqc4276qkr3znyq9694isj1ak20"))))))
+         "0ph3ajfq5q8j3nd91pfb25pm21aiphc58zf7fwis0h3a6nqbdyq9"))))))
 
 (define-public go-1.19
   (package
     (inherit go-1.18)
     (name "go")
-    (version "1.19.1")
+    (version "1.19.5")
     (source
      (origin
        (method git-fetch)
@@ -876,7 +867,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1gah4zhbkgbwrrryfmzdv2qwi1rgxk10q2r3hnlcb1dybf9c1i1w"))))
+         "0ah4l01h8qj0vj9668bdgr5m69fq16dz1fjlj332vhysxc6bkc27"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.18)
        ((#:phases phases)
@@ -889,6 +880,27 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                           '("CONTRIBUTING.md" "PATENTS" "README.md"
                             "SECURITY.md"))))))))))
 
+(define-public go-1.20
+  (package
+    (inherit go-1.19)
+    (name "go")
+    (version "1.20")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/golang/go")
+                    (commit (string-append "go" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0a7wjzv14kaqg5l7ambv5zj4rj7sgah9yhcg6k6da6ygm6bs4dv3"))))
+    (native-inputs
+     ;; Go 1.20 and later requires Go 1.17 as the bootstrap toolchain.
+     ;; See 'src/cmd/dist/notgo117.go' in the source code distribution,
+     ;; as well as the upstream discussion of this topic:
+     ;; https://go.dev/issue/44505
+     (alist-replace "go" (list go-1.17) (package-native-inputs go-1.17)))))
+
 (define-public go go-1.17)
 
 (define make-go-std
@@ -930,6 +942,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
 (define-public go-std-1.17 (make-go-std go-1.17))
 (define-public go-std-1.18 (make-go-std go-1.18))
 (define-public go-std-1.19 (make-go-std go-1.19))
+(define-public go-std-1.20 (make-go-std go-1.20))
 
 (define-public go-0xacab-org-leap-shapeshifter
   (let ((commit "0aa6226582efb8e563540ec1d3c5cfcd19200474")
@@ -2049,7 +2062,14 @@ for speed on short messages.")
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0y0kbzma55vmyqhyrw9ssgvxn6nw7d0zg72a7nz8vp1zly4hs6va"))))
+        (base32 "0y0kbzma55vmyqhyrw9ssgvxn6nw7d0zg72a7nz8vp1zly4hs6va"))
+       (snippet
+        #~(begin
+            (use-modules (guix build utils))
+            ;; Fix compatibility with go-1.18+
+            (substitute* "statik.go"
+              (("fmt\\.Println\\(helpText\\)")
+               "fmt.Print(helpText + \"\\n\")"))))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/rakyll/statik"))
@@ -2855,36 +2875,73 @@ expressing configuration which is easy for both humans and machines to read.")
     (home-page "https://github.com/hashicorp/hcl")
     (license license:mpl2.0)))
 
+(define-public go-golang-org-x-exp
+  (package
+    (name "go-golang-org-x-exp")
+    (version "0.0.0-20221004215720-b9f4876ce741")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://go.googlesource.com/exp")
+                    (commit (go-version->git-ref version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "030b929xyg8dpp6f4qbyg63msi6zgzj9sqmvnyphfcrjkqf7nr41"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "golang.org/x/exp"
+       ;; Source-only package
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (home-page "https://golang.org/x/exp")
+    (synopsis "Experimental and deprecated Go packages")
+    (description
+     "This subrepository holds experimental and deprecated (in the @code{old}
+directory) packages.")
+    (license license:bsd-3)))
+
 (define-public go-golang-org-x-tools
-  (let ((commit "8b927904ee0dec805c89aaf9172f4459296ed6e8")
-        (revision "0"))
-    (package
-      (name "go-golang-org-x-tools")
-      (version (git-version "0.1.3" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://go.googlesource.com/tools")
-                      (commit commit)))
-                (file-name (string-append "go.googlesource.com-tools-"
-                                          version "-checkout"))
-                (sha256
-                 (base32
-                  "0iinb70xhcjsddgi42ia1n745lx2ibnjdm6m2v666qrk3876vpck"))))
-      (build-system go-build-system)
-      (arguments
-       `(#:import-path "golang.org/x/tools"
+  (package
+    (name "go-golang-org-x-tools")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://go.googlesource.com/tools")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "08kx2nndq3sr6xai7403mbsqvz5shxmp2icylfr2fmwagr59cb2n"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; gopls versions are tagged separately, and it is a
+           ;; separate Guix package.
+           (delete-file-recursively "gopls")))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "golang.org/x/tools"
+       ;; Source-only package
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
          ;; Source-only package
-         #:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           ;; Source-only package
-           (delete 'build))))
-      (synopsis "Tools that support the Go programming language")
-      (description "This package provides miscellaneous tools that support the
+         (delete 'build))))
+    (propagated-inputs
+     (list
+      go-github-com-yuin-goldmark
+      go-golang-org-x-mod
+      go-golang-org-x-net
+      go-golang-org-x-sys))
+    (synopsis "Tools that support the Go programming language")
+    (description "This package provides miscellaneous tools that support the
 Go programming language.")
-      (home-page "https://go.googlesource.com/tools/")
-      (license license:bsd-3))))
+    (home-page "https://go.googlesource.com/tools/")
+    (license license:bsd-3)))
 
 (define-public go-golang-org-x-crypto
   (let ((commit "2aa609cf4a9d7d1126360de73b55b6002f9e052a")
@@ -2919,6 +2976,116 @@ for the Go language.")
       (home-page "https://go.googlesource.com/crypto/")
       (license license:bsd-3))))
 
+(define-public govulncheck
+  (package
+    (name "govulncheck")
+    (version "0.0.0-20221229164908-ebf31f7dc3ef")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://go.googlesource.com/vuln")
+                    (commit (go-version->git-ref version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1w055g90k7anrrcvfrsqklxzl9pl0vqdiwpayj9f0brwys9xhj7d"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "golang.org/x/vuln"
+       #:go ,go-1.19
+       #:install-source? #f
+       #:phases ,#~(modify-phases %standard-phases
+                     (add-after 'unpack 'remove-go-mod-tidy
+                       (lambda _
+                         (substitute* "src/golang.org/x/vuln/checks.bash"
+                           (("go mod tidy")
+                            #$(file-append coreutils-minimal "/bin/true")))))
+                     (replace 'build
+                       (lambda arguments
+                         (apply (assoc-ref %standard-phases
+                                           'build)
+                                `(,@arguments #:import-path
+                                  "golang.org/x/vuln/cmd/govulncheck")))))))
+    (native-inputs (list coreutils-minimal))
+    (inputs (list go-golang-org-x-sys
+                  go-github-com-google-renameio
+                  go-github-com-burntsushi-toml
+                  go-mvdan-cc-unparam
+                  go-honnef-co-go-tools
+                  go-golang-org-x-tools
+                  go-golang-org-x-sync
+                  go-golang-org-x-mod
+                  go-golang-org-x-exp
+                  go-github-com-google-go-cmp-cmp
+                  go-github-com-google-go-cmdtest
+                  go-github-com-client9-misspell))
+    (home-page "https://golang.org/x/vuln")
+    (synopsis "Go Vulnerability Management")
+    (description
+     "This repository contains packages for accessing and analyzing data from
+the @url{https://vuln.go.dev,Go Vulnerability Database}.")
+    (license license:bsd-3)))
+
+(define-public go-golang-org-x-vuln
+  (package
+    (inherit govulncheck)
+    (name "go-golang-org-x-vuln")
+    (arguments
+     `(#:import-path "golang.org/x/vuln"
+       #:tests? #f
+       #:install-source? #t
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs (package-inputs govulncheck))
+    (native-inputs '())
+    (inputs '())))
+
+(define-public gopls
+  (package
+    (name "gopls")
+    (version "0.11.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://go.googlesource.com/tools")
+                    (commit (string-append "gopls/v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1l9y1rp7x51s6dnjn227fhdlnz4z1h41jn3x1aq49qki241w7m73"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "golang.org/x/tools/gopls"
+       #:unpack-path "golang.org/x/tools"
+       #:install-source? #f
+       #:phases (modify-phases %standard-phases
+                  (add-before 'unpack 'override-tools
+                    (lambda _
+                      (delete-file-recursively "src/golang.org/x/tools"))))))
+    (propagated-inputs (list go-github-com-google-go-cmp-cmp
+                             go-github-com-jba-printsrc
+                             go-github-com-jba-templatecheck
+                             go-github-com-sergi-go-diff
+                             go-golang-org-x-mod
+                             go-golang-org-x-sync
+                             go-golang-org-x-sys
+                             go-golang-org-x-text
+                             go-gopkg-in-yaml-v3
+                             go-honnef-co-go-tools
+                             go-github-com-burntsushi-toml
+                             go-github-com-google-safehtml
+                             go-golang-org-x-exp
+                             go-mvdan-cc-gofumpt
+                             go-golang-org-x-vuln
+                             go-mvdan-cc-xurls))
+    (home-page "https://golang.org/x/tools/gopls")
+    (synopsis "Official language server for the Go language")
+    (description
+     "Pronounced ``Go please'', this is the official Go language server
+developed by the Go team.  It provides IDE features to any LSP-compatible
+editor.")
+    (license license:bsd-3)))
+
 (define-public go-github-com-protonmail-go-crypto
   (package
     (name "go-github-com-protonmail-go-crypto")
@@ -3021,11 +3188,11 @@ processing.")
       (license license:bsd-3))))
 
 (define-public go-golang-org-x-sync
-  (let ((commit "6e8e738ad208923de99951fe0b48239bfd864f28")
+  (let ((commit "8fcdb60fdcc0539c5e357b2308249e4e752147f1")
         (revision "1"))
     (package
       (name "go-golang-org-x-sync")
-      (version (git-version "0.0.0" revision commit))
+      (version (git-version "0.1.0" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -3034,17 +3201,17 @@ processing.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1avk27pszd5l5df6ff7j78wgla46ir1hhy2jwfl9a3c0ys602yx9"))))
+                  "07qrhni6f5hh5p95k1yk6s4wsj341q663irvx6rllrxfsymj6a0z"))))
       (build-system go-build-system)
       (arguments
        `(#:import-path "golang.org/x/sync"
          #:tests? #f
          ;; Source-only package
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'build))))
+         #:phases (modify-phases %standard-phases
+                    (delete 'build))))
       (synopsis "Additional Go concurrency primitives")
-      (description "This package provides Go concurrency primitives in addition
+      (description
+       "This package provides Go concurrency primitives in addition
 to the ones provided by the language and “sync” and “sync/atomic”
 packages.")
       (home-page "https://go.googlesource.com/sync/")
@@ -3190,28 +3357,27 @@ time.")
       (license license:bsd-3))))
 
 (define-public go-golang-org-x-mod
-  (let ((commit "0f08993efd8a8ec67e75bcccf86b0e1569b0ab0a")
+  (let ((commit "7c05a442b7c1d1a107879b4a090bb5a38d3774a1")
         (revision "0"))
     (package
       (name "go-golang-org-x-mod")
-      (version (git-version "0.5.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/golang/mod")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0pl0jc5jvg7hxj4z66zg6kglnq5g7li09f3k9klwvyr4jx5dw88k"))))
+      (version (git-version "0.7.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/golang/mod")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "14r24fq3kn84k2y2jvvg8hwpy52a3q429pimrdwl5zwknbr2awmh"))))
       (build-system go-build-system)
       (arguments
        '(#:import-path "golang.org/x/mod/"
          #:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           ;; Source-only package
-           (delete 'build))))
+         #:phases (modify-phases %standard-phases
+                    ;; Source-only package
+                    (delete 'build))))
       (home-page "https://golang.org/x/mod")
       (synopsis "Tools to work directly with Go module mechanics")
       (description
@@ -3227,23 +3393,23 @@ loading algorithms.")
 (define-public go-github-com-burntsushi-toml
   (package
     (name "go-github-com-burntsushi-toml")
-    (version "0.3.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/BurntSushi/toml")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6"))))
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/BurntSushi/toml")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1v9czq4hsyvdz7yx70y6sgq77wmrgfmn09r9cj4w85z38jqnamv7"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/BurntSushi/toml"))
     (home-page "https://github.com/BurntSushi/toml")
     (synopsis "Toml parser and encoder for Go")
-    (description "This package is toml parser and encoder for Go.  The interface
+    (description
+     "This package is toml parser and encoder for Go.  The interface
 is similar to Go's standard library @code{json} and @code{xml} package.")
     (license license:expat)))
 
@@ -3967,7 +4133,16 @@ applications as well as a program to generate applications and command files.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0gpmacngd0gpslnbkzi263f5ishigzgh6pbdv9hp092rnjl4nd31"))))
+          "0gpmacngd0gpslnbkzi263f5ishigzgh6pbdv9hp092rnjl4nd31"))
+        (snippet
+         #~(begin
+             (use-modules (guix build utils))
+             ;; Fix compatibility with go-1.19+
+             ;; https://github.com/spf13/pflag/issues/368
+             (substitute* "flag_test.go"
+               (("fmt\\.Println") "fmt.Print")
+               (("\\+ got\\)") "+ got + \"\\n\")")
+               (("\\+ defaultOutput\\)") "+ defaultOutput + \"\\n\")"))))))
     (build-system go-build-system)
     (arguments
       '(#:import-path "github.com/spf13/pflag"))
@@ -4520,7 +4695,7 @@ values.")
 (define-public go-gopkg-in-yaml-v3
   (package
     (name "go-gopkg-in-yaml-v3")
-    (version "3")
+    (version "3.0.1")
     (source
      (origin
        (method git-fetch)
@@ -4529,7 +4704,7 @@ values.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "06f4lnrp494wqaygv09dggr2dwf3z2bawqhnlnnwiamg5y787k4g"))))
+        (base32 "01b0wjb7yzv8wzzz2iim8mjpkwjnykcanrwiq06pkl89lr6gv8hn"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "gopkg.in/yaml.v3"))
@@ -4785,6 +4960,51 @@ Looks for an identical word on a list of words, if none is found, look for a
 similar word.")
       (license license:expat))))
 
+(define-public misspell
+  (package
+    (name "misspell")
+    (version "0.3.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/client9/misspell")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1vwf33wsc4la25zk9nylpbp9px3svlmldkm0bha4hp56jws4q9cs"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/client9/misspell"
+       #:phases (modify-phases %standard-phases
+                  (replace 'build
+                    (lambda arguments
+                      (apply (assoc-ref %standard-phases
+                                        'build)
+                             `(,@arguments #:import-path
+                               "github.com/client9/misspell/cmd/misspell")))))))
+    (home-page "https://github.com/client9/misspell")
+    (synopsis "Correct commonly misspelled English words in source files")
+    (description
+     "misspell assists with correcting commonly misspelled English words in
+source files.  A neutral variety of English is used by default, but a US or UK
+locale can be selected.")
+    (license license:expat)))
+
+(define-public go-github-com-client9-misspell
+  (package
+    (inherit misspell)
+    (name "go-github-com-client9-misspell")
+    (arguments
+     `(#:import-path "github.com/client9/misspell"
+       #:tests? #f
+       #:install-source? #t
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs (package-inputs misspell))
+    (native-inputs '())
+    (inputs '())))
+
 (define-public go-github-com-stevedonovan-luar
   (let ((commit "22d247e5366095f491cd83edf779ee99a78f5ead")
         (revision "0"))
@@ -6998,28 +7218,27 @@ colorized or SGR defined output to the standard output.")
 (define-public go-github-com-google-go-cmp-cmp
   (package
     (name "go-github-com-google-go-cmp-cmp")
-    (version "0.5.2")
+    (version "0.5.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/google/go-cmp")
-                     (commit (string-append "v" version))))
+                    (url "https://github.com/google/go-cmp")
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qchy411jm9q2l9mf7x3ry2ycaqp9xdhf2nx14qrpzcxfigv2705"))))
+                "0a13m7l1jrysa7mrlmra8y7n83zcnb23yjyg3a609p8i9lxkh1wm"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/google/go-cmp/cmp"
        #:unpack-path "github.com/google/go-cmp"))
-    (propagated-inputs
-     (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
-are semantically equal in Go (for writing tests).")
-    (home-page "https://godoc.org/github.com/google/go-cmp/cmp")
-    (license license:asl2.0)))
+    (description
+     "This package is intended to be a more powerful and safer
+alternative to @@code{reflect.DeepEqual} for comparing whether two values are
+semantically equal.")
+    (home-page "https://github.com/google/go-cmp")
+    (license license:bsd-3)))
 
 (define-public go-github-com-google-uuid
   (package
@@ -7043,6 +7262,28 @@ are semantically equal in Go (for writing tests).")
 4122 and DCE 1.1: Authentication and Security Services.")
     (license license:bsd-3)))
 
+(define-public go-github-com-google-gopacket
+  (package
+    (name "go-github-com-google-gopacket")
+    (version "1.1.19")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/google/gopacket")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "048qwm2n0wrpql4qqgd7jyynn3gk069yvqbxnshlayzmbhf87ls4"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/google/gopacket"))
+    (home-page "https://github.com/google/gopacket")
+    (synopsis "Packet processing capabilities library")
+    (description
+     "This package provides packet processing capabilities for Go.")
+    (license license:bsd-3)))
+
 (define-public go-github-com-google-goterm
   (let ((commit "fc88cf888a3fa99ecc23d1efc1a44284268457d3")
         (revision "1"))
@@ -7169,6 +7410,17 @@ common task.")
       (home-page "https://godoc.org/golang.org/x/sync/errgroup")
       (license license:bsd-3))))
 
+(define-public go-golang.org-x-sync-semaphore
+  (package
+    (inherit go-golang.org-x-sync-errgroup)
+    (name "go-golang.org-x-sync-semaphore")
+    (arguments
+     '(#:import-path "golang.org/x/sync/semaphore"
+       #:unpack-path "golang.org/x/sync"))
+    (synopsis "Weighted semaphore implementation in Go")
+    (description "Weighted semaphore implementation in Go.")
+    (home-page "https://godoc.org/golang.org/x/sync/semaphore")))
+
 (define (go-gotest-tools-source version sha256-base32-hash)
   (origin
     (method git-fetch)
@@ -7335,6 +7587,29 @@ This package is a successor to @code{go-github-com-golang-protobuf} with an
 improved and cleaner API.")
     (license license:bsd-3)))
 
+(define-public go-github-com-macronut-go-tproxy
+  (package
+    (name "go-github-com-macronut-go-tproxy")
+    (version "0.0.0-20190726054950-ef7efd7f24ed")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/FutureProtocolLab/go-tproxy")
+                    (commit (go-version->git-ref version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jibsg0xhsn0h1jq4g9qd4nr58w43y8majlwfri9ffk2cbfrwqdr"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/macronut/go-tproxy"))
+    (home-page "https://github.com/FutureProtocolLab/go-tproxy")
+    (synopsis "Linux Transparent Proxy library")
+    (description
+     "Golang TProxy provides an easy to use wrapper for the Linux Transparent
+Proxy functionality.")
+    (license license:expat)))
+
 (define-public go-github-com-mattn-go-zglob
   (package
     (name "go-github-com-mattn-go-zglob")
@@ -8002,7 +8277,7 @@ converts it into syntax highlighted HTML, ANSI-coloured text, etc.")
 (define-public go-github-com-andybalholm-cascadia
   (package
     (name "go-github-com-andybalholm-cascadia")
-    (version "1.0.0")
+    (version "1.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8011,7 +8286,7 @@ converts it into syntax highlighted HTML, ANSI-coloured text, etc.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "09j8cavbhqqdxjqrkwbc40g8p0i49zf3184rpjm5p2rjbprcghcc"))))
+                "0zgc9fjkn7d66cnmgnmalr9lrq4ii1spap95pf2x1hln4pflib5s"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/andybalholm/cascadia"))
@@ -8489,6 +8764,57 @@ This makes it virtually free to implement mocks and testing over
 file system operations.")
     (license license:asl2.0)))
 
+(define-public go-github-com-jba-printsrc
+  (package
+    (name "go-github-com-jba-printsrc")
+    (version "0.2.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jba/printsrc")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1gyy3kmb5a5i710wkv3b7ah7i7sz5sdc7v3sab5m4rxch1sd2fpj"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/jba/printsrc"
+       ;; TODO: Open bug; expecting time.Local, but when local=UTC, we get time.UTC
+       #:tests? #f))
+    (home-page "https://github.com/jba/printsrc")
+    (synopsis "Prints Go values as sourcecode")
+    (description
+     "Package printsrc prints Go values as Go source.  It strives to render
+legal Go source code, and returns an error when detects that it cannot.")
+    (license license:expat)))
+
+(define-public go-github-com-jba-templatecheck
+  (package
+    (name "go-github-com-jba-templatecheck")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jba/templatecheck")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "12iwkidz4p6wdl65jfddqxls80mv879k2rpb42dj7y4dja5advlc"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/jba/templatecheck"))
+    (propagated-inputs (list go-github-com-google-safehtml))
+    (home-page "https://github.com/jba/templatecheck")
+    (synopsis "Checks Go templates for problems")
+    (description
+     "Package templatecheck checks Go templates for problems.  It can detect
+many errors that are normally caught only during execution.  Use templatecheck
+in tests to find template errors early, and along template execution paths
+that might only rarely be reached.")
+    (license license:expat)))
+
 (define-public go-github-com-jbenet-go-context
   (let ((commit "d14ea06fba99483203c19d92cfcd13ebe73135f4")
         (revision "1"))
@@ -8658,30 +8984,26 @@ temporal directories.")
     (license license:asl2.0)))
 
 (define-public go-github-com-pkg-diff
-  (let ((commit "531926345625d489a6b56f860a569e68245ace36")
-        (revision "1"))
-    (package
-      (name "go-github-com-pkg-diff")
-      (version (git-version "0.0.1" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/pkg/diff")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1770m7qhww6lm0wj1v3mhv6hwa2v92p4w2fqxj1xyrg5dd58d944"))))
-      (build-system go-build-system)
-      (arguments
-       `(#:import-path "github.com/pkg/diff"))
-      (native-inputs
-       (list go-github-com-sergi-go-diff))
-      (home-page "https://github.com/pkg/diff/")
-      (synopsis "Create and print diffs")
-      (description
-       "This package provides a Go library to create and print diffs.")
-      (license license:bsd-3))))
+  (package
+    (name "go-github-com-pkg-diff")
+    (version "0.0.0-20210226163009-20ebb0f2a09e")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pkg/diff")
+                    (commit "20ebb0f2a09e612109b224b32f79370409108bcc")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1g3dzgwhz4fx3ddpsv7fsa4r1v5clsp2lbw2qrkdk9y1vc5gi8yi"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "github.com/pkg/diff"))
+    (home-page "https://github.com/pkg/diff/")
+    (synopsis "Create and print diffs")
+    (description
+     "This package provides a Go library to create and print diffs.")
+    (license license:bsd-3)))
 
 (define-public go-github-com-twpayne-go-shell
   (package
@@ -9030,7 +9352,7 @@ the necessary APIs to build a wide array of higher-level primitives.")
 (define-public go-github-com-rogpeppe-go-internal
   (package
     (name "go-github-com-rogpeppe-go-internal")
-    (version "1.6.1")
+    (version "1.9.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -9039,7 +9361,7 @@ the necessary APIs to build a wide array of higher-level primitives.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00j2vpp1bsggdvw1winkz23mg0q6drjiir5q0k49pmqx1sh7106l"))))
+                "0bh08k8fy1qcc0vzyv0xkg0sx5kjx348zd1dpjmp3rbrr6xrpaaw"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/rogpeppe/go-internal"
@@ -9048,6 +9370,8 @@ the necessary APIs to build a wide array of higher-level primitives.")
        #:phases
        (modify-phases %standard-phases
          (delete 'build))))
+    (propagated-inputs
+     (list go-github-com-pkg-diff))
     (home-page "https://github.com/rogpeppe/go-internal/")
     (synopsis "Internal packages from the Go standard library")
     (description "This repository factors out an opinionated selection of
@@ -9071,9 +9395,9 @@ Included are the following:
 @end itemize\n")
     (license license:bsd-3)))
 
-(define-public gopkg-in-errgo-fmt-errors
+(define-public go-gopkg-in-errgo-fmt-errors
   (package
-    (name "gopkg-in-errgo-fmt-errors")
+    (name "go-gopkg-in-errgo-fmt-errors")
     (version "2.1.0")
     (source (origin
               (method git-fetch)
@@ -9086,7 +9410,7 @@ Included are the following:
                 "065mbihiy7q67wnql0bzl9y1kkvck5ivra68254zbih52jxwrgr2"))))
     (build-system go-build-system)
     (arguments
-     `(#:import-path "gopkg.in/errgo.v2/fmt/errors"
+     `(#:import-path "gopkg.in/errgo.v2"
        #:tests? #f
        ;; Source-only package
        #:phases
@@ -9674,6 +9998,173 @@ atomic access.")
      "@code{multierr} allows combining one or more Go errors together.")
     (license license:expat)))
 
+(define-public gofumpt
+  (package
+    (name "gofumpt")
+    (version "0.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mvdan/gofumpt")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "13ahi8q1a9h4dj6a7xp95c79d5svz5p37b6z91aswbq043qd417k"))
+              (modules '((guix build utils)))
+              (snippet `(let ((fixed-version (string-append ,version
+                                                            " (GNU Guix)")))
+                          ;; Gofumpt formats Go files, and therefore modifies
+                          ;; them. To help the developers diagnose issues, it
+                          ;; replaces any occurrence of a `//gofumpt:diagnose`
+                          ;; comment with some debugging information which
+                          ;; includes the module version. In the event gofumpt
+                          ;; was built without module support, it falls back
+                          ;; to a string "(devel)". Since our build system
+                          ;; does not yet support modules, we'll inject our
+                          ;; version string instead, since this is more
+                          ;; helpful.
+                          (substitute* "internal/version/version.go"
+                            (("^const fallbackVersion.+")
+                             (format #f "const fallbackVersion = \"~a\"~%"
+                                     fixed-version)))
+                          ;; These tests rely on `//gofumpt:diagnose` comments
+                          ;; being replaced with fixed information injected
+                          ;; from the test scripts, but this requires a binary
+                          ;; compiled as a Go module. Since we can't do this
+                          ;; yet, modify the test scripts with the version
+                          ;; string we're injecting.
+                          (delete-file "testdata/script/diagnose.txtar")
+                          (substitute* (find-files "testdata/script/"
+                                                   "\\.txtar$")
+                            (("v0.0.0-20220727155840-8dda8068d9f3")
+                             fixed-version)
+                            (("(devel)")
+                             fixed-version)
+                            (("v0.3.2-0.20220627183521-8dda8068d9f3")
+                             fixed-version))))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "mvdan.cc/gofumpt"
+       #:go ,go-1.19))
+    (native-inputs (list go-gopkg-in-errgo-fmt-errors))
+    (propagated-inputs (list go-github-com-pkg-diff
+                             go-github-com-kr-text
+                             go-github-com-kr-pretty
+                             go-golang-org-x-tools
+                             go-golang-org-x-sys
+                             go-golang-org-x-sync
+                             go-golang-org-x-mod
+                             go-github-com-rogpeppe-go-internal
+                             go-github-com-google-go-cmp-cmp
+                             go-github-com-frankban-quicktest))
+    (home-page "https://mvdan.cc/gofumpt/")
+    (synopsis "Formats Go files with a stricter ruleset than gofmt")
+    (description
+     "Enforce a stricter format than @code{gofmt}, while being backwards compatible.
+That is, @code{gofumpt} is happy with a subset of the formats that
+@code{gofmt} is happy with.")
+    (license license:bsd-3)))
+
+(define-public go-mvdan-cc-gofumpt
+  (package
+    (inherit gofumpt)
+    (name "go-mvdan-cc-gofumpt")
+    (arguments
+     `(#:import-path "mvdan.cc/gofumpt"
+       #:tests? #f
+       #:install-source? #t
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs (package-inputs gofumpt))
+    (native-inputs '())
+    (inputs '())))
+
+(define-public unparam
+  (package
+    (name "unparam")
+    (version "0.0.0-20221223090309-7455f1af531d")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mvdan/unparam")
+                    (commit (go-version->git-ref version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0wynf0b32azxljncw5fh9bwkxpdflvf9q1z16wyj432566yjh12c"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "mvdan.cc/unparam"
+       #:go ,go-1.19))
+    (inputs (list go-golang-org-x-sys go-golang-org-x-mod
+                  go-github-com-pkg-diff go-golang-org-x-tools
+                  go-github-com-rogpeppe-go-internal))
+    (home-page "https://mvdan.cc/unparam/")
+    (synopsis "Find unused parameters in Go")
+    (description "Reports unused function parameters and results in Go code.")
+    (license license:bsd-3)))
+
+(define-public go-mvdan-cc-unparam
+  (package
+    (inherit unparam)
+    (name "go-mvdan-cc-unparam")
+    (arguments
+     `(#:import-path "github.com/mvdan/unparam"
+       #:tests? #f
+       #:install-source? #t
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs (package-inputs unparam))
+    (native-inputs '())
+    (inputs '())))
+
+(define-public xurls
+  (package
+    (name "xurls")
+    (version "2.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mvdan/xurls")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0b040nbk1vwlk1qljavh8w8fn2r243q700n6gr8j2asmnz0xq84p"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "mvdan.cc/xurls/v2"
+       #:unpack-path "mvdan.cc/xurls/v2"
+       #:phases (modify-phases %standard-phases
+                  (replace 'build
+                    (lambda arguments
+                      (apply (assoc-ref %standard-phases
+                                        'build)
+                             `(,@arguments #:import-path
+                               "mvdan.cc/xurls/v2/cmd/xurls")))))))
+    (inputs (list go-golang-org-x-sync go-github-com-rogpeppe-go-internal))
+    (home-page "https://mvdan.cc/xurls/v2/")
+    (synopsis "Extracts URLs from text")
+    (description
+     "Xurls extracts urls from plain text using regular expressions.  It can
+be used as both a binary and a library.")
+    (license license:bsd-3)))
+
+(define-public go-mvdan-cc-xurls
+  (package
+    (inherit xurls)
+    (name "go-mvdan-cc-xurls")
+    (arguments
+     `(#:import-path "mvdan.cc/xurls"
+       #:tests? #f
+       #:install-source? #t
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs (package-inputs xurls))
+    (native-inputs '())
+    (inputs '())))
+
 (define-public go-golang-org-x-lint
   (let ((commit "83fdc39ff7b56453e3793356bcff3070b9b96445")
         (revision "0"))
@@ -9729,27 +10220,26 @@ tools with similar semantics.")
 (define-public go-honnef-co-go-tools
   (package
     (name "go-honnef-co-go-tools")
-    (version "0.1.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/dominikh/go-tools")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "17li8jbw3cpn59kpcl3j3r2an4wkx3fc81xn0j4xgbjpkxh9493n"))))
+    (version "0.3.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/dominikh/go-tools")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "099z04v7vvwwglnps315s9fmal68xvzlc1g8m26iqi980grbwn32"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "honnef.co/go/tools"
        #:tests? #f
        ;; Source-only package
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'build))))
-    (propagated-inputs
-     (list go-golang-org-x-tools go-github-com-kisielk-gotool
-           go-github-com-burntsushi-toml))
+       #:phases (modify-phases %standard-phases
+                  (delete 'build))))
+    (propagated-inputs (list go-golang-org-x-exp go-golang-org-x-tools
+                             go-golang-org-x-mod go-github-com-kisielk-gotool
+                             go-github-com-burntsushi-toml))
     (home-page "https://honnef.co/go/tools")
     (synopsis "Staticcheck advanced Go linter")
     (description
@@ -10869,6 +11359,60 @@ production-ready implementation, compatible with the original Jsonnet C++
 implementation.")
     (license license:asl2.0)))
 
+(define-public go-github-com-google-go-cmdtest
+  (let ((commit "55ab3332a786118933ddf71544aae14951ba9bc5")
+        (revision "0"))
+    (package
+      (name "go-github-com-google-go-cmdtest")
+      (version (git-version "0.4.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/google/go-cmdtest")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "10kswvbdwissjb5mr0ys4b3ppxkxlpklqg7cr2z7rv21g2vwczbl"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/google/go-cmdtest"))
+      (propagated-inputs (list go-github-com-google-renameio
+                               go-github-com-google-go-cmp-cmp))
+      (home-page "https://github.com/google/go-cmdtest")
+      (synopsis "Testing for your CLI")
+      (description
+       "The cmdtest package simplifies testing of command-line interfaces.  It
+provides a simple, cross-platform, shell-like language to express command
+execution.  It can compare actual output with the expected output, and can
+also update a file with new \"golden\" output that is deemed correct.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-google-safehtml
+  (package
+    (name "go-github-com-google-safehtml")
+    (version "0.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/google/safehtml")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0j2xjy8xrk9y9k6bqpvimj84i6hg1wwsyvwsb0axhmp49cmnrp86"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/google/safehtml"))
+    (propagated-inputs `(("go-golang-org-x-text" ,go-golang-org-x-text)))
+    (home-page "https://github.com/google/safehtml")
+    (synopsis "Safe HTML for Go")
+    (description
+     "Package safehtml provides immutable string-like types which represent values
+that are guaranteed to be safe, by construction or by escaping or sanitization,
+to use in various HTML contexts and with various DOM APIs.")
+    (license license:bsd-3)))
+
 (define-public go-github-com-google-shlex
   (package
     (name "go-github-com-google-shlex")
@@ -11135,7 +11679,7 @@ library geared towards parsing MIME encoded emails.")
 (define-public go-github-com-gatherstars-com-jwz
   (package
     (name "go-github-com-gatherstars-com-jwz")
-    (version "1.3.0")
+    (version "1.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -11144,7 +11688,7 @@ library geared towards parsing MIME encoded emails.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1h37h5w139d3rhvp1n7kz2jm5zhk4pjzf3sip04v48nphkika60c"))))
+                "1zxg2vmka80m1vnlb1v1gdlrwnkpakcmwi1hxpl8jjjiyd4z2j2i"))))
     (build-system go-build-system)
     (arguments
      (list #:import-path "github.com/gatherstars-com/jwz"))
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index 560764bb33..104fe07b58 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018, 2019, 2020, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018, 2019, 2020, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018, 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
@@ -311,6 +311,41 @@ subplots, multiple-axes, polar charts, and bubble charts.")
 algorithm for community detection in large networks.")
     (license license:bsd-3)))
 
+(define-public python-vtraag-louvain
+  (package
+    (name "python-vtraag-louvain")
+    (version "0.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "louvain" version))
+              (sha256
+               (base32
+                "16l2zi4jwc3vpvpnz32jv7xy0g5087dp9y57wxplj1xa9r312x0i"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'do-not-use-bundled-igraph
+           (lambda _
+             (substitute* "setup.py"
+               (("self.external = False")
+                "self.external = True")
+               (("self.use_pkgconfig = False")
+                "self.use_pkgconfig = True")))))))
+    (inputs (list igraph))
+    (propagated-inputs (list python-igraph))
+    (native-inputs
+     (list pkg-config
+           python-ddt
+           python-setuptools-scm))
+    (home-page "https://github.com/vtraag/louvain")
+    (synopsis "Community detection in large networks")
+    (description
+     "Louvain is a general algorithm for methods of community detection in
+large networks.")
+    (license license:gpl3+)))
+
 (define-public faiss
   (package
     (name "faiss")
@@ -555,7 +590,7 @@ of graphs.")
      (list pkg-config))
     (inputs
      (list gd))
-    (home-page "http://www.mcternan.me.uk/mscgen/")
+    (home-page "https://www.mcternan.me.uk/mscgen/")
     (synopsis "Message Sequence Chart Generator")
     (description "Mscgen is a small program that parses Message Sequence Chart
 descriptions and produces PNG, SVG, EPS or server side image maps (ismaps) as
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 6c2eb1f26e..e2ae894801 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -34,6 +34,8 @@
 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2022 dan <i@dan.games>
 ;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2023 David Thompson <dthompson2@worcester.edu>
+;;; Copyright © 2023 Eric Bavier <bavier@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -234,6 +236,52 @@ minimum of resource usage and overhead.")
     (home-page "https://github.com/deniskropp/DirectFB")
     (license license:lgpl2.1+)))
 
+(define-public minifb
+  (let ((commit "43f8c1309341f4709a471b592d04434326042483")
+        (revision "1"))
+    (package
+      (name "minifb")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri
+                 (git-reference
+                  (url "https://github.com/emoon/minifb")
+                  (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "1z0720azsgi83yg4ysmfvpvsg0566s2cq59xx52w8w5rpkla4cjh"))))
+      (build-system cmake-build-system)
+      (arguments
+       ;; Don't build examples.
+       '(#:configure-flags '("-DMINIFB_BUILD_EXAMPLES=0")
+         #:phases
+         ;; There is no install target, so we have to copy the static library
+         ;; and headers to the output directory ourselves.
+         (modify-phases %standard-phases
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (includedir (string-append out "/include"))
+                      (libdir (string-append out "/lib")))
+                 (mkdir-p includedir)
+                 (mkdir-p libdir)
+                 (for-each (lambda (header)
+                             (copy-file header
+                                        (string-append includedir "/"
+                                                       (basename header))))
+                           (find-files "../source/include" "\\.h$"))
+                 (copy-file "libminifb.a" (string-append libdir "/libminifb.a"))))))
+         ;; No check target.
+         #:tests? #f))
+      ;; libminifb.a won't work without these libraries, so propagate them.
+      (propagated-inputs (list libx11 libxkbcommon mesa))
+      (synopsis "Small library for rendering pixels to a framebuffer")
+      (description "MiniFB (Mini FrameBuffer) is a small, cross-platform
+library that makes it easy to render (32-bit) pixels in a window.")
+      (home-page "https://github.com/emoon/minifb")
+      (license license:expat))))
+
 (define-public flux
   (package
     (name "flux")
@@ -578,7 +626,7 @@ and export to various formats including the format used by Magicavoxel.")
     (build-system cmake-build-system)
     (inputs
      (list zlib))
-    (home-page "http://www.assimp.org/")
+    (home-page "https://www.assimp.org/")
     (synopsis "Asset import library")
     (description
      "The Open Asset Import Library loads more than 40 3D file formats into
@@ -967,7 +1015,7 @@ other vector formats such as:
      `(#:configure-flags (list "-DUSE_HDF5=ON")))
     (inputs
      (list hdf5 imath zlib))
-    (home-page "http://www.alembic.io/")
+    (home-page "https://www.alembic.io/")
     (synopsis "Framework for storing and sharing scene data")
     (description "Alembic is a computer graphics interchange framework.  It
 distills complex, animated scenes into a set of baked geometric results.")
@@ -1284,17 +1332,53 @@ visual effects work for film.")
         (base32 "00i14h82qg3xzcyd8p02wrarnmby3aiwmz0z43l50byc9f8i05n1"))
        (file-name (git-file-name name version))))
     (properties
-     `((upstream-name . "OpenSceneGraph")))
+     `((upstream-name . "OpenSceneGraph")
+       (output-synopsis "pluginlib" "Plugins as shared libraries")))
     (build-system cmake-build-system)
+    (outputs (list "out" "pluginlib"))
     (arguments
-     `(#:tests? #f                      ; no test target available
-       ;; Without this flag, 'rd' will be added to the name of the
-       ;; library binaries and break linking with other programs.
-       #:build-type "Release"
-       #:configure-flags
-       (list (string-append "-DCMAKE_INSTALL_RPATH="
-                            (assoc-ref %outputs "out") "/lib:"
-                            (assoc-ref %outputs "out") "/lib64"))))
+     (list
+      #:tests? #f                      ; no test target available
+      ;; Without this flag, 'rd' will be added to the name of the
+      ;; library binaries and break linking with other programs.
+      #:build-type "Release"
+      #:configure-flags
+      #~(list (string-append "-DCMAKE_INSTALL_RPATH="
+                             #$output "/lib:"
+                             #$output "/lib64"))
+      #:modules `((guix build cmake-build-system)
+                  (guix build utils)
+                  (ice-9 regex))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'copy-plugins
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out"))
+                    (pluginlib (assoc-ref outputs "pluginlib")))
+                (mkdir-p (string-append pluginlib "/lib/pkgconfig"))
+                (with-directory-excursion (string-append out "/lib/osgPlugins-"
+                                                         #$version)
+                  (for-each
+                   (lambda (lib)
+                     (let ((blib (basename lib))
+                           (m (string-match "([^/]*)\\.so$" lib)))
+                       (symlink (canonicalize-path lib)
+                                (string-append pluginlib "/lib/lib" blib))
+                       (call-with-output-file (string-append
+                                               pluginlib
+                                               "/lib/pkgconfig/"
+                                               (match:substring m 1) ".pc")
+                         (lambda (port)
+                           (format port "libdir=~a/lib~%" pluginlib)
+                           (newline port)
+                           (format port "Name: ~a~%" (match:substring m 1))
+                           (format port "Version: ~a~%" #$version)
+                           (display "Description: A plugin for openscenegraph\n"
+                                    port)
+                           (display "Requires: openscenegraph\n" port)
+                           (format port "Libs: -L${libdir} -l~a~%"
+                                   (match:substring m 1))))))
+                   (find-files "." "\\.so")))))))))
     (native-inputs
      (list pkg-config unzip))
     (inputs
@@ -1388,18 +1472,18 @@ in Julia).")
         (substitute-keyword-arguments (package-arguments openscenegraph)
           ((#:configure-flags flags)
            ;; As per the above wiki link, the following plugins are enough:
-           `(append
-             '("-DBUILD_OSG_PLUGINS_BY_DEFAULT=0"
-               "-DBUILD_OSG_PLUGIN_OSG=1"
-               "-DBUILD_OSG_PLUGIN_DDS=1"
-               "-DBUILD_OSG_PLUGIN_TGA=1"
-               "-DBUILD_OSG_PLUGIN_BMP=1"
-               "-DBUILD_OSG_PLUGIN_JPEG=1"
-               "-DBUILD_OSG_PLUGIN_PNG=1"
-               "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0"
-               ;; The jpeg plugin requires conversion between integers and booleans
-               "-DCMAKE_CXX_FLAGS=-fpermissive")
-             ,flags))))))))
+           #~(append
+              '("-DBUILD_OSG_PLUGINS_BY_DEFAULT=0"
+                "-DBUILD_OSG_PLUGIN_OSG=1"
+                "-DBUILD_OSG_PLUGIN_DDS=1"
+                "-DBUILD_OSG_PLUGIN_TGA=1"
+                "-DBUILD_OSG_PLUGIN_BMP=1"
+                "-DBUILD_OSG_PLUGIN_JPEG=1"
+                "-DBUILD_OSG_PLUGIN_PNG=1"
+                "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0"
+                ;; The jpeg plugin requires conversion between integers and booleans
+                "-DCMAKE_CXX_FLAGS=-fpermissive")
+              #$flags))))))))
 
 (define-public povray
   (package
@@ -1480,7 +1564,7 @@ realistic reflections, shading, perspective and other effects.")
     ;; Headers include OpenEXR and IlmBase headers.
     (propagated-inputs (list openexr-2))
 
-    (home-page "http://ampasctl.sourceforge.net")
+    (home-page "https://ampasctl.sourceforge.net")
     (synopsis "Color Transformation Language")
     (description
      "The Color Transformation Language, or CTL, is a small programming
@@ -1596,7 +1680,7 @@ and understanding different BRDFs (and other component functions).")
      (list libx11 freetype sdl))
 
     ;; Antigrain.com was discontinued.
-    (home-page "http://agg.sourceforge.net/antigrain.com/index.html")
+    (home-page "https://agg.sourceforge.net/antigrain.com/index.html")
     (synopsis "High-quality 2D graphics rendering engine for C++")
     (description
      "Anti-Grain Geometry is a high quality rendering engine written in C++.
@@ -1628,19 +1712,72 @@ rendering @acronym{SVG, Scalable Vector Graphics}.")
 your terminal.")
     (license license:expat)))
 
+(define-public facedetect
+  (let ((commit "5f9b9121001bce20f7d87537ff506fcc90df48ca")
+        (revision "0"))
+    (package
+      (name "facedetect")
+      (version (git-version "0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/wavexx/facedetect")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32 "1jiz72y3ykkxkiij1qqjf45gxg223sghkjir7sr663x91kviwkjd"))))
+      (build-system copy-build-system)
+      (arguments
+       (list
+        #:install-plan
+        #~`(("facedetect" "bin/facedetect")
+            ("README.rst" ,(string-append "share/doc/" #$name
+                                          "-" #$version "/README.rst")))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'configure
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "facedetect"
+                  (("^DATA_DIR = .*")
+                   (string-append "DATA_DIR = '"
+                                  #$opencv "/share/opencv"
+                                  #$(version-major (package-version opencv))
+                                  "'\n")))))
+            (add-after 'install 'wrap
+              (lambda _
+                (let ((program (string-append #$output "/bin/facedetect")))
+                  (patch-shebang program)
+                  (wrap-program program
+                    `("GUIX_PYTHONPATH" prefix
+                      ,(search-path-as-string->list
+                        (getenv "GUIX_PYTHONPATH"))))))))))
+      (inputs
+       (list bash-minimal
+             opencv
+             python
+             python-numpy))
+      (home-page "https://www.thregr.org/~wavexx/software/facedetect/")
+      (synopsis "Face detector")
+      (description "@code{facedetect} is a face detector for batch processing.
+It answers the question: \"Is there a face in this image?\" and gives back
+either an exit code or the coordinates of each detect face in the standard
+output.  @code{facedetect} is used in software such as @code{fgallery} to
+improve the thumbnail cutting region, so that faces are always centered.")
+      (license license:gpl2+))))
+
 (define-public fgallery
   (package
     (name "fgallery")
-    (version "1.8.2")
+    (version "1.9.1")
     (source (origin
               (method url-fetch)
               (uri
                (string-append
-                "http://www.thregr.org/~wavexx/software/fgallery/releases/"
+                "https://www.thregr.org/~wavexx/software/fgallery/releases/"
                 "fgallery-" version ".zip"))
               (sha256
                (base32
-                "18wlvqbxcng8pawimbc8f2422s8fnk840hfr6946lzsxr0ijakvf"))))
+                "0zf6r88m2swgj1ylgh3qa1knzb4if501hzvga37h9psy8k179w8n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no tests
@@ -1651,19 +1788,12 @@ your terminal.")
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out    (assoc-ref outputs "out"))
-                    (bin    (string-append out "/bin/"))
-                    (share  (string-append out "/share/fgallery"))
-                    (man    (string-append out "/share/man/man1"))
-                    (perl5lib (getenv "PERL5LIB"))
-                    (script (string-append share "/fgallery")))
+                    (script (string-append out "/bin/fgallery"))
+                    (perl5lib (getenv "PERL5LIB")))
                (define (bin-directory input-name)
                  (string-append (assoc-ref inputs input-name) "/bin"))
 
-               (mkdir-p man)
-               (copy-file "fgallery.1" (string-append man "/fgallery.1"))
-
-               (mkdir-p share)
-               (copy-recursively "." share)
+               (invoke "make" "install" (string-append "PREFIX=" out))
 
                ;; fgallery copies files from store when it is run. The
                ;; read-only permissions from the store directories will cause
@@ -1673,37 +1803,35 @@ your terminal.")
                  (("'cp'")
                   "'cp', '--no-preserve=all'"))
 
-               (mkdir-p bin)
-               (symlink script (string-append out "/bin/fgallery"))
-
                (wrap-program script
                  `("PATH" ":" prefix
                    ,(map bin-directory '("imagemagick"
                                          "lcms"
+                                         "facedetect"
                                          "fbida"
-                                         "libjpeg"
+                                         "libjpeg-turbo"
                                          "zip"
                                          "jpegoptim"
                                          "pngcrush"
                                          "p7zip")))
-                 `("PERL5LIB" ":" prefix (,perl5lib)))
-               #t))))))
+                 `("PERL5LIB" ":" prefix (,perl5lib)))))))))
     (native-inputs
      (list unzip))
-    ;; TODO: Add missing optional dependency: facedetect.
     (inputs
-     `(("imagemagick" ,imagemagick)
-       ("lcms" ,lcms)
-       ("fbida" ,fbida)
-       ("libjpeg" ,libjpeg-turbo)
-       ("zip" ,zip)
-       ("perl" ,perl)
-       ("perl-cpanel-json-xs" ,perl-cpanel-json-xs)
-       ("perl-image-exiftool" ,perl-image-exiftool)
-       ("jpegoptim" ,jpegoptim)
-       ("pngcrush" ,pngcrush)
-       ("p7zip" ,p7zip)))
-    (home-page "http://www.thregr.org/~wavexx/software/fgallery/")
+     (list bash-minimal
+           imagemagick
+           lcms
+           facedetect
+           fbida
+           libjpeg-turbo
+           zip
+           perl
+           perl-cpanel-json-xs
+           perl-image-exiftool
+           jpegoptim
+           pngcrush
+           p7zip))
+    (home-page "https://www.thregr.org/~wavexx/software/fgallery/")
     (synopsis "Static photo gallery generator")
     (description
      "FGallery is a static, JavaScript photo gallery generator with minimalist
@@ -1791,7 +1919,7 @@ and GPU architectures.")
 OpenGL.  CSG is an approach for modeling complex 3D-shapes using simpler ones.
 For example, two shapes can be combined by uniting them, by intersecting them,
 or by subtracting one shape from the other.")
-      (home-page "http://www.opencsg.org/")
+      (home-page "https://www.opencsg.org/")
       (license license:gpl2))))
 
 (define-public coin3D
@@ -2438,3 +2566,28 @@ on the command line.  It supports a range of file formats (including animated
 glTF, STL, STEP, PLY, OBJ, FBX), and provides numerous rendering and texturing
 options.")
     (license license:bsd-3)))
+
+(define-public gpaint
+  (package
+    (name "gpaint")
+    (version "0.3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://alpha.gnu.org/gnu/"
+                                  name "/"
+                                  name "-2-" version ".tar.gz"))
+              (sha256
+               (base32
+                "13jv0zqbnyxjw7fa9x0yl08rrkqq0mdvki0yzbj6vqifvs393v5h"))))
+    (build-system gnu-build-system)
+    (inputs (list gtk+-2 libglade))
+    (native-inputs
+     (list gettext-minimal `(,glib "bin") pkg-config))
+    (synopsis "Simple paint program for GNOME")
+    (description
+     "GNU Paint is a simple, easy-to-use paint program for the GNOME
+environment.  It supports drawing freehand as well as basic shapes and text.
+It features cut-and-paste for irregular regions or polygons.")
+    (home-page "https://www.gnu.org/software/gpaint/")
+    (license license:gpl3+)))
+
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index dd5d2de87b..aa3cee6e5b 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -208,7 +208,7 @@ visualization tool suite.")
 (define-public python-pygraphviz
   (package
     (name "python-pygraphviz")
-    (version "1.7")
+    (version "1.10")
     (source
      (origin
        (method git-fetch)
@@ -218,7 +218,7 @@ visualization tool suite.")
        (file-name (string-append "pygraphviz-" version "-checkout"))
        (sha256
         (base32
-         "0jqc3dzy9n0hn3b99zq8jp53901zpjzvvi5ns5mbaxg8kdrb1lfx"))))
+         "1yrzjp5n86ynlj32p5dj1aj67md6bzkk8hac74j5y3mbl94m259g"))))
     (build-system python-build-system)
     (inputs
      (list graphviz))
@@ -308,7 +308,7 @@ Graphviz and LaTeX.")
     (propagated-inputs
      ;; The gts.pc file has glib-2.0 as required.
      (list glib))
-    (home-page "http://gts.sourceforge.net/")
+    (home-page "https://gts.sourceforge.net/")
 
     ;; Note: Despite the name, this is not official GNU software.
     (synopsis "Triangulated Surface Library")
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 36cdd70207..8ffd587b1d 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
@@ -1155,3 +1155,29 @@ framework.  It plays all file formats gstreamer supports, so if you have a
 music collection which contains different file formats, like flac, ogg and
 mp3, you can use gst123 to play all your music files.")
     (license license:lgpl2.0+)))
+
+(define-public gst-plugins-espeak
+  (let ((commit "7f6e41274fb833a487a7ee8ac0c236f0821330cc")
+        (revision "1"))
+    (package
+      (name "gst-plugins-espeak")
+      (version (git-version "0.5.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/sugarlabs/gst-plugins-espeak")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0va4ghcdda8cbqzv376hgmv1ay79va4kyazibfj8m5n52bhxxqgz"))))
+      (build-system gnu-build-system)
+      (inputs
+       (list espeak-ng gstreamer gst-plugins-base))
+      (native-inputs
+       (list autoconf automake libtool pkg-config))
+      (home-page "http://wiki.sugarlabs.org/go/Activity_Team/gst-plugins-espeak")
+      (synopsis "Use espeak ")
+      (description "This is a Gstreamer @code{src} plugin to use the espeak
+speech synthesizer as a sound source.")
+      (license license:lgpl2.0+))))
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index d92c9e0c28..125ffd7fdd 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -2366,7 +2366,7 @@ glass artworks done by Venicians glass blowers.")
      (list gobject-introspection gtk+ pango))
     (propagated-inputs
      (list enchant))           ; gtkspell3-3.0.pc refers to it
-    (home-page "http://gtkspell.sourceforge.net")
+    (home-page "https://gtkspell.sourceforge.net")
     (synopsis "Spell-checking addon for GTK's TextView widget")
     (description
      "GtkSpell provides word-processor-style highlighting and replacement of
@@ -2424,7 +2424,7 @@ Parcellite and adds bugfixes and features.")
               '("-Dintrospection=false")
               '()))))
     (native-inputs
-     `(("git" ,git-minimal/fixed)
+     `(("git" ,git-minimal/pinned)
        ("gobject-introspection" ,gobject-introspection)
        ("mutest" ,mutest)
        ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 0befff1576..54aaadadc0 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -898,33 +898,27 @@ is not available for Guile 2.0.")
 (define-public guile-filesystem
   (package
     (name "guile-filesystem")
-    (version "0.1.0")
+    (version "0.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://gitlab.com/leoprikler/guile-filesystem.git")
+                    (url "https://gitlab.com/lilyp/guile-filesystem")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1shmkc0y9r2sj3kw7hrsnamnp7y8xifkhf3m3rnfxczqg63k67vy"))))
+                "0waiaxcha584d0dc15nvs6gxh4clrfm2bwjidjsbqajgb03l4ngm"))))
     (build-system gnu-build-system)
     (native-inputs
      (list autoconf automake pkg-config texinfo))
     (inputs
      (list guile-3.0))
-    (home-page "https://gitlab.com/leoprikler/guile-filesystem")
+    (home-page "https://gitlab.com/lilyp/guile-filesystem")
     (synopsis "Complementary library to Guile's built-in file system procedures")
     (description "@code{guile-filesystem} provides a set of utility functions,
 that augment Guile's support for handling files and their names.")
     (license license:lgpl3+)))
 
-(define-public guile2.0-filesystem
-  (package
-    (inherit guile-filesystem)
-    (name "guile2.0-filesystem")
-    (inputs (list guile-2.0))))
-
 (define-public guile2.2-filesystem
   (package
     (inherit guile-filesystem)
@@ -2600,6 +2594,41 @@ for Guile\".  It provides the following modules:
     ;; details.
     (license license:gpl3+)))
 
+(define-public guile-simple-iterators
+  (let ((commit "50f16a2b2aa57e657e52e19fb3c35bdc182cfa36")
+        (revision "0"))
+    (package
+      (name "guile-simple-iterators")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/dustyweb/guile-simple-iterators")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1m1wirlnfwmp5a4rpszd5qsbwabz4ji033w6p2714p1r524ylah8"))))
+      (build-system guile-build-system)
+      (native-inputs (list guile-3.0))
+      (home-page "https://gitlab.com/dustyweb/guile-simple-iterators")
+      (synopsis "Simple iterators for Guile")
+      (description
+       "This is a collection of iteration macros for Guile. They are inspired by
+@code{racket}'s family of iterators. Specifically, the following iterators are
+available:
+@itemize
+@item @code{for}
+@item @code{for/map}
+@item @code{for/c}
+@item @code{for/fold}
+@item @code{for/fold-right}
+@item @code{for/folder}
+@item @code{folder}
+@end itemize")
+      (license license:asl2.0))))
+
 (define-public guile2.0-lib
   (package
     (inherit guile-lib)
@@ -2696,7 +2725,7 @@ See http://minikanren.org/ for more on miniKanren generally.")
        #:source-directory "src"))
     (native-inputs
      (list guile-3.0))
-    (home-page "http://synthcode.com/scheme/irregex")
+    (home-page "https://synthcode.com/scheme/irregex")
     (synopsis "S-expression based regular expressions")
     (description
      "Irregex is an s-expression based alternative to your classic
@@ -5493,44 +5522,37 @@ This module implements this interface by use of Guile's dynamic FFI.")
 (define-public guile-goblins
   (package
     (name "guile-goblins")
-    (version "0.8")
+    (version "0.10")
     (source
      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://gitlab.com/spritely/guile-goblins/")
-             (commit (string-append "v" version))))
-       (file-name (string-append name "-" version))
+       (method url-fetch)
+       (uri (string-append "https://spritely.institute/files/releases"
+                           "/guile-goblins/guile-goblins-"
+                           version ".tar.gz"))
        (sha256
         (base32
-         "1mmyykh79jwhrfgnhhw94aw7a8m6qw249kj7k60ynj16mcfm5iyy"))))
+         "13nzmwi4m0j27rmn2ks0p3k620npnhx736q25n8llj2ivkn2vxd2"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
            #~(list "GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     (list autoconf automake pkg-config texinfo))
+     (list pkg-config texinfo))
     (inputs (list guile-3.0))
     (propagated-inputs
      (list guile-fibers guile-gcrypt))
     (home-page "https://spritely.institute/goblins")
     (synopsis "Distributed programming environment for Guile")
-    ;; In guile-goblins 0.9, OCapN support will be added (it already
-    ;; exists in racket-goblins).  At that point we should add the
-    ;; following to this description:
-    ;;
-    ;;   Goblins allows for cooperation between networked programs
-    ;;   in a mutually suspicious network through OCapN, the Object
-    ;;   Capability Network.  This includes collaboration across
-    ;;   runtimes; for instance, programs written in the Guile and Racket
-    ;;   versions of Goblins are able to speak to each other.
     (description
      "@code{guile-goblins} is the Guile version of
-@url{https://spritely.institute/goblins, Spritely Goblins},
-a transactional, distributed programming environment following object
-capability security designs.  Goblins is a general toolkit, and also
-the core layer of Spritely's work to support healthy distributed
-networked communities.")
+@url{https://spritely.institute/goblins, Spritely Goblins}, a transactional,
+distributed programming environment following object capability security
+designs.  Goblins is a general toolkit, and also the core layer of Spritely's
+work to support healthy distributed networked communities.  Goblins allows for
+cooperation between networked programs in a mutually suspicious network
+through OCapN, the Object Capability Network.  This includes collaboration
+across runtimes; for instance, programs written in the Guile and Racket
+versions of Goblins are able to speak to each other.")
     (license license:asl2.0)))
 
 ;;;
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index c2ffbefeec..32faa8c020 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -400,7 +400,11 @@ without requiring the source code to be rewritten.")
 
 (define-public guile-3.0-latest guile-3.0)
 
-(define-public guile-3.0/fixed
+;;; The symbol guile-3.0/fixed should be used when guile-3.0 needs fixes
+;;; (security or else) and this deprecation could be removed.
+(define-deprecated/public-alias guile-3.0/fixed guile-3.0/pinned)
+
+(define-public guile-3.0/pinned
   ;; A package of Guile that's rarely changed.  It is the one used in the
   ;; `base' module, and thus changing it entails a full rebuild.
   (package
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 81f38d069b..c00a6e2d91 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -325,7 +325,7 @@ operability and find drivers.")
 (define-public hwinfo
   (package
     (name "hwinfo")
-    (version "21.82")
+    (version "22.2")
     (home-page "https://github.com/openSUSE/hwinfo")
     (source
      (origin
@@ -336,7 +336,7 @@ operability and find drivers.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ih6vrgh64408cijywy9by2snynkw91p3h0ry5pzk3lyqsl0wnlh"))
+        (base32 "1lfzcyiipxwi8rh0aw5sy7n8x986b9f9pa9g048rxn6k7anfpxk7"))
        (modules
         '((guix build utils)))
        (snippet
@@ -824,7 +824,7 @@ specific SMBIOS tables.")
 (define-public memtest86+
   (package
     (name "memtest86+")
-    (version "6.00")
+    (version "6.10")
     (source
      (origin
        (method git-fetch)
@@ -833,7 +833,7 @@ specific SMBIOS tables.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fv605blaf4z0jyl1wp37x5x014dkp0z0a0fh114ws62fhnhdnlv"))
+        (base32 "1igb648rsmbp0s95790qib6mhdsvbsrpigl91gk7yfkz32bip3bz"))
        (patches
         (search-patches "memtest86+-build-reproducibly.patch"))))
     (build-system gnu-build-system)
@@ -897,15 +897,22 @@ can scan as much of your RAM as possible for hardware defects.")
 (define-public memtester
   (package
     (name "memtester")
-    (version "4.5.1")
+    (version "4.6.0")
     (source
      (origin
        (method url-fetch)
        ;; Even the latest release is available under 'old-versions/'.
-       (uri (string-append "http://pyropus.ca/software/memtester/old-versions/"
-                           "memtester-" version ".tar.gz"))
+       (uri (list
+             (string-append "https://pyropus.ca/software/memtester/old-versions/"
+                            "memtester-" version ".tar.gz")
+             ;; XXX ‘pyropus.ca’ redirects to ‘pyropus.ca.’.  Valid, but wreaks
+             ;; havoc with Guile's Web stack & TLS verification.
+             ;; Remove this random mirror when that changes.
+             (string-append "https://ftp.dimensiondata.com/mirrors/"
+                            "ftp.gentoo.org/distfiles/3e/"
+                            "memtester-" version ".tar.gz")))
        (sha256
-        (base32 "0issrasdihav8jgsqb49cfyj0v564z8k9lyg2jrq9h3n4lwc4pqw"))))
+        (base32 "0bmv7n7gj02pda8mwif08xk63xc20r65q1pr099fz30cx2vlxzn9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 9cb383eeb2..02dc437abd 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -11,7 +11,7 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2019, 2020 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015 John Soo <jsoo1@asu.edu>
-;;; Copyright © 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019, 2020, 2022, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@member.fsf.org>
 ;;; Copyright © 2020 Brian Leung <bkleung89@gmail.com>
@@ -61,30 +61,27 @@
 (define-public apply-refact
   (package
     (name "apply-refact")
-    (version "0.9.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/apply-refact/apply-refact-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1sn5g71sx8xa4ggyk49m661iip6zrzl65vb87l16l31kf79bbm7w"))))
+    (version "0.10.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "apply-refact" version))
+              (sha256
+               (base32
+                "129bf8n66kpwh5420rxprngg43bqr2agyd8q8d7l49k2rxsjl1fb"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-refact
-           ghc-exactprint
-           ghc-syb
-           ghc-extra
-           ghc-uniplate
-           ghc-filemanip
-           ghc-unix-compat
-           ghc-optparse-applicative))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-golden ghc-tasty-expected-failure
-           ghc-silently))
-    (home-page "https://hackage.haskell.org/package/apply-refact")
+    (properties '((upstream-name . "apply-refact")))
+    (inputs (list ghc-refact
+                  ghc-exactprint
+                  ghc-paths
+                  ghc-extra
+                  ghc-syb
+                  ghc-filemanip
+                  ghc-uniplate
+                  ghc-unix-compat
+                  ghc-optparse-applicative))
+    (native-inputs (list ghc-tasty ghc-tasty-golden ghc-tasty-expected-failure
+                         ghc-silently))
+    (home-page "https://github.com/mpickering/apply-refact")
     (synopsis "Perform refactorings specified by the refact library")
     (description
      "This package lets you perform refactorings specified by the refact
@@ -95,45 +92,36 @@ library.  It is primarily used with HLint's @code{--refactor} flag.")
 ;; update this packages after updating GHC.
 (define-public cabal-install
  (package
-  (name "cabal-install")
-   (version "3.2.0.0")
-   (source
-    (origin
-     (method url-fetch)
-      (uri (string-append
-            "https://hackage.haskell.org/package/cabal-install/cabal-install-"
-            version
-            ".tar.gz"))
-      (patches (search-patches "cabal-install-base16-bytestring1.0.patch"
-                               "cabal-install-ghc8.10.patch"))
-      (sha256
-       (base32 "1c0cc256bha97aj7l0lf76l5swlnmwcqppiz8l4cl5xgba4mwmd0"))))
+   (name "cabal-install")
+   (version "3.6.2.0")
+   (source (origin
+             (method url-fetch)
+             (uri (hackage-uri "cabal-install" version))
+             (sha256
+              (base32
+               "0dihpm4h3xh13vnpvwflnb7v614qdvljycc6ffg5cvhwbwfrxyfw"))))
    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "cabal-install.cabal"
-               (("(base|base16-bytestring|random)\\s+[^,]+" all dep)
-                dep)))))))
-   (inputs
-    (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/")
+   (properties '((upstream-name . "cabal-install")))
+   (inputs (list ghc-async
+                 ghc-base16-bytestring
+                 ghc-cryptohash-sha256
+                 ghc-echo
+                 ghc-edit-distance
+                 ghc-hashable
+                 ghc-http
+                 ghc-network-uri
+                 ghc-random
+                 ghc-tar
+                 ghc-zlib
+                 ghc-hackage-security
+                 ghc-regex-base
+                 ghc-regex-posix
+                 ghc-resolv
+                 ghc-lukko))
+   (arguments
+    `(#:cabal-revision ("2"
+                        "1kpgyfl5njxp4c8ax5ziag1bhqvph3h0pn660v3vpxalz8d1j6xv")))
+   (home-page "http://www.haskell.org/cabal/")
    (synopsis "Command-line interface for Cabal and Hackage")
    (description
     "The cabal command-line program simplifies the process of managing
@@ -148,16 +136,18 @@ installation of Haskell libraries and programs.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/" name "/"
-             name "-" version ".tar.gz"))
+       (uri (hackage-uri "cpphs" version))
        (sha256
         (base32
          "17wi7fma2qaqdm1hwgaam3fd140v9bpa8ky0wg708h1pqc5v2nbz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cpphs")))
     (inputs
      (list ghc-polyparse ghc-old-locale ghc-old-time))
-    (home-page "http://projects.haskell.org/cpphs/")
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1f8jzs8zdh4wwbcq8fy6qqxkv75ypnvsm4yzw49wpr3b9vpnzlha")))
+    (home-page "https://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
 both more compatible with Haskell, and itself written in Haskell so that it
@@ -174,15 +164,14 @@ unlit literate code files; and an option to turn off macro-expansion.")
 (define-public darcs
   (package
     (name "darcs")
-    (version "2.16.4")
+    (version "2.16.5")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/darcs/"
-                           "darcs-" version ".tar.gz"))
+       (uri (hackage-uri "darcs" version))
        (sha256
         (base32
-         "07dygwh6p4fsrlgxmq6r7yvxmf4n2y04izzd30jzqgs0pi9645p4"))
+         "0ar4markr71l9hzrbgcz4q37cf2rf3936i6qi8p827p36v96qg6n"))
        (modules '((guix build utils)))
        ;; Remove time-dependent code for reproducibility.
        (snippet
@@ -192,11 +181,13 @@ unlit literate code files; and an option to turn off macro-expansion.")
              (("__TIME__") "\"00:00:00\""))
            #t))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "darcs")))
     (arguments
      `(#:tests? #f ; TODO: Needs QuickCheck ==2.13.*, and more…
        #:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
                            "-fnetwork-uri" "-fhttp" "--flag=executable"
                            "--flag=library")
+       #:haddock? #f
        #:phases
        (modify-phases %standard-phases
          (add-after 'patch-source-shebangs 'patch-sh
@@ -207,57 +198,53 @@ unlit literate code files; and an option to turn off macro-expansion.")
          (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "darcs.cabal"
-               (("(constraints)\\s+[^,]+" all dep)
-                dep)
-               (("(cryptonite)\\s+[^,]+" all dep)
-                dep)))))))
-    (inputs
-     (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
-           ghc-network
-           ghc-network-uri))
-    (native-inputs
-     (list pkg-config))
+               (("(attoparsec|base|bytestring|constraints|cryptonite|hashable|memory|regex-tdfa|time)\\s+[^,]+" all dep)
+                dep))))
+         (add-after 'register 'remove-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))))
+    (inputs (list ghc-regex-base
+                  ghc-regex-tdfa
+                  ghc-regex-applicative
+                  ghc-fgl
+                  ghc-html
+                  ghc-memory
+                  ghc-cryptonite
+                  ghc-base16-bytestring
+                  ghc-utf8-string
+                  ghc-vector
+                  ghc-tar
+                  ghc-data-ordlist
+                  ghc-attoparsec
+                  ghc-zip-archive
+                  ghc-async
+                  ghc-constraints
+                  ghc-unix-compat
+                  ghc-old-time
+                  ghc-temporary
+                  ghc-hashable
+                  ghc-mmap
+                  ghc-zlib
+                  ghc-network-uri
+                  ghc-network
+                  ghc-conduit
+                  ghc-http-conduit
+                  ghc-http-types
+                  curl))
+    (native-inputs (list ghc-cmdargs
+                         ghc-findbin
+                         ghc-quickcheck
+                         ghc-leancheck
+                         ghc-hunit
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2
+                         ghc-test-framework-leancheck
+                         ghc-monad-control
+                         ghc-system-filepath
+                         ghc-system-fileio
+                         ghc-transformers-base
+                         pkg-config))
     (home-page "http://darcs.net")
     (synopsis "Distributed Revision Control System")
     (description
@@ -283,11 +270,11 @@ unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/ghcid/"
-                           "ghcid-" version ".tar.gz"))
+       (uri (hackage-uri "ghcid" version))
        (sha256
         (base32 "0yqc1pkfajnr56gnh43sbj50r7c3r41b2jfz07ivgl6phi4frjbq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ghcid")))
     (inputs
      (list ghc-extra ghc-ansi-terminal ghc-cmdargs ghc-fsnotify
            ghc-terminal-size))
@@ -307,18 +294,19 @@ to @code{cabal repl}).")
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "10.20221212")
+    (version "10.20230126")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "git-annex/git-annex-" version ".tar.gz"))
+       (uri (hackage-uri "git-annex" version))
        (sha256
-        (base32 "0afnl2w29w4j0229rsla93dzkmhcjlp8dv76sr861n186ywv8rzg"))))
+        (base32 "06b5gnj0dxiz7lkc75xmmzi50svwbqhs5az01lfmw27r3ibcicpm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "git-annex")))
     (arguments
      `(#:configure-flags
        '("--flags=-Android -Webapp")
+       #:haddock? #f
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-shell-for-tests
@@ -399,17 +387,7 @@ to @code{cabal repl}).")
                (symlink (string-append bin "/git-annex")
                         (string-append bin "/git-annex-shell"))
                (symlink (string-append bin "/git-annex")
-                        (string-append bin "/git-remote-tor-annex")))))
-         (add-after 'install 'touch-static-output
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; The Haskell build system adds a "static" output by
-             ;; default, and there is no way to override this until
-             ;; <https://issues.guix.gnu.org/41569> is fixed.  Without
-             ;; this phase, the daemon complains because we do not
-             ;; create the "static" output.
-             (with-output-to-file (assoc-ref outputs "static")
-               (lambda ()
-                 (display "static output not used\n"))))))))
+                        (string-append bin "/git-remote-tor-annex"))))))))
     (inputs
      (list curl
            ghc-aeson
@@ -513,37 +491,39 @@ used to keep a folder in sync between computers.")
 (define-public hlint
   (package
     (name "hlint")
-    (version "3.2.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/" name
-             "/" name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0z6gxndrh7blzapkdn6fq1pkbkjlmbgjbq9ydnvy2wm00fb3v73g"))))
+    (version "3.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hlint" version))
+              (sha256
+               (base32
+                "0bkk03c9hacvfd73dk89g4r81b50g7pjgw5pavldali4qwss34cz"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "hlint")))
+    (inputs (list ghc-unordered-containers
+                  ghc-vector
+                  ghc-file-embed
+                  ghc-utf8-string
+                  ghc-data-default
+                  cpphs
+                  ghc-cmdargs
+                  ghc-uniplate
+                  ghc-ansi-terminal
+                  ghc-extra
+                  ghc-refact
+                  ghc-aeson
+                  ghc-deriving-aeson
+                  ghc-filepattern
+                  ghc-lib-parser-ex
+                  hscolour
+                  ghc-yaml))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1rdaffg5n179yfcn5zjwjb0bki09qy13gz2ijky455y9pbaz8yz9")))
+    (home-page "https://github.com/ndmitchell/hlint#readme")
     (synopsis "Suggest improvements for Haskell source code")
-    (description "HLint reads Haskell programs and suggests changes that
+    (description
+     "HLint reads Haskell programs and suggests changes that
 hopefully make them easier to read.  HLint also makes it easy to disable
 unwanted suggestions, and to add your own custom suggestions.")
     (license license:bsd-3)))
@@ -551,51 +531,50 @@ unwanted suggestions, and to add your own custom suggestions.")
 (define-public hoogle
   (package
     (name "hoogle")
-    (version "5.0.18.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append
-         "https://hackage.haskell.org/package/hoogle/hoogle-"
-         version ".tar.gz"))
-       (sha256
-        (base32
-         "1xacx2f33x1a4qlv25f8rlmb4wi0cjfzrj22nlnkrd0knghik3m7"))))
+    (version "5.0.18.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hoogle" version))
+              (sha256
+               (base32
+                "0v6k75w0an9pqgb7a6cicnpf9rz77xd2lmxfbafc5l4f99jg83bn"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "hoogle")))
+    (inputs (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-hashable
+                  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
+                  ghc-semigroups))
     (home-page "https://hoogle.haskell.org/")
     (synopsis "Haskell API Search")
-    (description "Hoogle is a Haskell API search engine, which allows
+    (description
+     "Hoogle is a Haskell API search engine, which allows
 you to search many standard Haskell libraries by either function name,
 or by approximate type signature.")
     (license license:bsd-3)))
@@ -607,14 +586,12 @@ or by approximate type signature.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hscolour/hscolour-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "hscolour" version))
        (sha256
         (base32
          "079jwph4bwllfp03yfr26s5zc6m6kw3nhb1cggrifh99haq34cr4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hscolour")))
     (home-page "https://hackage.haskell.org/package/hscolour")
     (synopsis "Script to colourise Haskell code")
     (description "HSColour is a small Haskell script to colourise Haskell
@@ -625,92 +602,89 @@ and mIRC chat codes.")
     (license license:bsd-3)))
 
 (define-public kmonad
-  (package
-    (name "kmonad")
-    (version "0.4.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/david-janssen/kmonad")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1rp880zxvrznx0y1k464wjrds441dpsz94syhrkaw5dnmxf74yjd"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (delete 'haddock)             ; Haddock fails to generate docs
-         (add-after 'install 'install-udev-rules
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (rules (string-append out "/lib/udev/rules.d")))
-               (mkdir-p rules)
-               (call-with-output-file (string-append rules "/70-kmonad.rules")
-                 (lambda (port)
-                   (display
-                    (string-append
-                     "KERNEL==\"uinput\", MODE=\"0660\", "
-                     "GROUP=\"input\", OPTIONS+=\"static_node=uinput\"\n")
-                    port)))
-               #t)))
-         (add-after 'install-udev-rules 'install-documentation
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (string-append out "/share/doc/kmonad-" ,version)))
-               (install-file "README.md" doc)
-               (copy-recursively "doc" doc)
-               (copy-recursively "keymap" (string-append doc "/keymap"))
-               #t))))))
-    (inputs
-     (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
+  ;; Project is active, but no new releases exist. Pick current master
+  ;; HEAD as of 2023-01-08.
+  (let ((commit "a0af5b8b3f085adb2c09ca52374a53566c25194c")
+        (revision "1"))
+    (package
+      (name "kmonad")
+      (version (git-version "0.4.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/david-janssen/kmonad")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "00qmmk1lgadhh32dqi530xm18v79ndcm7rrxvdsf827vicv2nhw1"))))
+      (build-system haskell-build-system)
+      (arguments
+       `(#:haddock? #f ; Haddock fails to generate docs
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-git-path
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "src/KMonad/Args/TH.hs"
+                 (("\"git\"")
+                  (string-append "\"" (search-input-file inputs "/bin/git") "\"")))))
+           (add-after 'install 'install-udev-rules
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (rules (string-append out "/lib/udev/rules.d")))
+                 (mkdir-p rules)
+                 (call-with-output-file (string-append rules "/70-kmonad.rules")
+                   (lambda (port)
+                     (display
+                      (string-append
+                       "KERNEL==\"uinput\", MODE=\"0660\", "
+                       "GROUP=\"input\", OPTIONS+=\"static_node=uinput\"\n")
+                      port)))
+                 #t)))
+           (add-after 'install-udev-rules 'install-documentation
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (string-append out "/share/doc/kmonad-" ,version)))
+                 (install-file "README.md" doc)
+                 (copy-recursively "doc" doc)
+                 (copy-recursively "keymap" (string-append doc "/keymap"))
+                 #t))))))
+      (inputs
+       (list ghc-cereal
+             ghc-exceptions
+             ghc-lens
+             ghc-megaparsec
+             ghc-optparse-applicative
+             ghc-resourcet
+             ghc-rio
+             ghc-unliftio
+             ghc-unordered-containers
+             ghc-template-haskell))
+      (native-inputs (list ghc-hspec hspec-discover git))
+      (home-page "https://github.com/david-janssen/kmonad")
+      (synopsis "Advanced keyboard manager")
+      (description "KMonad is a keyboard remapping utility that supports
 advanced functionality, such as custom keymap layers and modifiers, macros,
 and conditional mappings that send a different keycode when tapped or held.
 By operating at a lower level than most similar tools, it supports X11,
 Wayland, and Linux console environments alike.")
-    (license license:expat)))
+      (license license:expat))))
 
 (define-public nixfmt
   (package
     (name "nixfmt")
-    (version "0.4.0")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/nixfmt/nixfmt-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "nixfmt" version))
        (sha256
-        (base32 "1ispgl8rc2scr6v8bb6sks7px856jf61x74zj2iyddrn5qamkb3n"))))
+        (base32 "0rxi8zrd2xr72w673nvgnhb0g3r7rssc1ahlhz8rmdpc6c1a82wl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "nixfmt")))
     (inputs
      (list ghc-megaparsec ghc-parser-combinators ghc-cmdargs
            ghc-safe-exceptions))
-    (arguments
-     `(#:cabal-revision
-       ("1" "1hsj0jh6siph3afd9c2wii09sffl48rzqv653n4clpd8qy0rn48d")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "nixfmt.cabal"
-               (("(base|megaparsec)\\s+[^,]+" all dep)
-                dep)))))))
     (home-page "https://github.com/serokell/nixfmt")
     (synopsis "Opinionated formatter for Nix")
     (description
@@ -721,16 +695,16 @@ formatting by forgetting all existing formatting during parsing.")
 (define-public greenclip
   (package
     (name "greenclip")
-    (version "3.4")
+    (version "4.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/erebe/greenclip")
-             (commit version)))
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1baw360dcnyavacf7a8v6wq4m5g6bcmyybkckv4cz7r4xl5p3qws"))))
+        (base32 "10r485q055ci29fmpsjy55n1yqfil53cvdxldlzw2n6mpynmckyv"))))
     (build-system haskell-build-system)
     (native-inputs
      (list pkg-config))
@@ -744,6 +718,7 @@ formatting by forgetting all existing formatting during parsing.")
            ghc-microlens
            ghc-microlens-mtl
            ghc-protolude
+           ghc-tomland
            ghc-vector
            ghc-wordexp))
     (home-page "https://github.com/erebe/greenclip")
@@ -759,12 +734,12 @@ Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://hackage/package/Raincat/"
-                           "Raincat-" version ".tar.gz"))
+       (uri (hackage-uri "Raincat" version))
        (sha256
         (base32
          "10y9zi22m6hf13c9h8zd9vg7mljpwbw0r3djb6r80bna701fdf6c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Raincat")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -801,13 +776,12 @@ is programmed in Haskell.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/scroll/scroll-"
-               version ".tar.gz"))
+        (uri (hackage-uri "scroll" version))
         (sha256
          (base32
           "0apzrvf99rskj4dbmn57jjxrsf19j436s8a09m950df5aws3a0wj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "scroll")))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -842,15 +816,13 @@ too slow and you'll get wound up in the scroll and crushed.")
 (define-public shellcheck
   (package
     (name "shellcheck")
-    (version "0.8.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ShellCheck/ShellCheck-"
-             version ".tar.gz"))
+       (uri (hackage-uri "ShellCheck" version))
        (sha256
-        (base32 "05jlapp4m997w36h2wszdxz9gvczdczaylypsbn14jqpb650w232"))
+        (base32 "071k2gc8rzpg9lwq9g10c9xx0zm1wcgsf8v4n1csj9fm56vy7gmb"))
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system haskell-build-system)
     (arguments
@@ -864,11 +836,14 @@ too slow and you'll get wound up in the scroll and crushed.")
            (lambda* (#:key outputs #:allow-other-keys)
              (install-file "shellcheck.1"
                            (string-append (assoc-ref outputs "out")
-                                          "/share/man/man1/")))))))
+                                          "/share/man/man1/"))))
+         (add-after 'register 'remove-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))))
     (native-inputs
      (list pandoc))
     (inputs
-     (list ghc-aeson ghc-diff ghc-quickcheck ghc-regex-tdfa))
+     (list ghc-aeson ghc-diff ghc-fgl ghc-quickcheck ghc-regex-tdfa))
     (home-page "https://www.shellcheck.net/")
     (synopsis "Static analysis for shell scripts")
     (description "@code{shellcheck} provides static analysis for
@@ -884,7 +859,7 @@ that cause a shell to behave strangely and counter-intuitively.
 advanced user's otherwise working script to fail under future circumstances.
 @end enumerate")
     ;; CVE-2021-28794 is for a completely different, unofficial add-on.
-    (properties `((lint-hidden-cve . ("CVE-2021-28794"))))
+    (properties `((lint-hidden-cve . ("CVE-2021-28794")) (upstream-name . "ShellCheck")))
     (license license:gpl3+)))
 
 (define-public shelltestrunner
@@ -893,12 +868,12 @@ advanced user's otherwise working script to fail under future circumstances.
     (version "1.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://hackage/package/shelltestrunner-"
-                                  version "/shelltestrunner-" version ".tar.gz"))
+              (uri (hackage-uri "shelltestrunner" version))
               (sha256
                (base32
                 "1a5kzqbwg6990249ypw0cx6cqj6663as1kbj8nzblcky8j6kbi6b"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "shelltestrunner")))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -942,35 +917,31 @@ output, stderr, and exit status.")
 (define-public stylish-haskell
   (package
     (name "stylish-haskell")
-    (version "0.13.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append
-         "https://hackage.haskell.org/package/stylish-haskell/"
-         "stylish-haskell-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0x9w3zh1lzp6l5xj3mynnlr0fzb5mbv0wwpfxp8fr6bk0jcrzjwf"))))
+    (version "0.14.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "stylish-haskell" version))
+              (sha256
+               (base32
+                "17w92v0qnwj7m6yqdq5cxbr04xiz0yfnnyx5q54218wdl7n5lf6d"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "stylish-haskell")))
+    (inputs (list ghc-aeson
+                  ghc-file-embed
+                  ghc-regex-tdfa
+                  ghc-syb
+                  ghc-hsyaml-aeson
+                  ghc-hsyaml
+                  ghc-semigroups
+                  ghc-lib-parser-ex
+                  ghc-strict
+                  ghc-optparse-applicative))
+    (native-inputs (list ghc-hunit ghc-random ghc-test-framework
+                         ghc-test-framework-hunit))
+    (home-page "https://github.com/haskell/stylish-haskell")
     (synopsis "Haskell code prettifier")
-    (description "Stylish-haskell is a Haskell code prettifier.  The goal is
+    (description
+     "Stylish-haskell is a Haskell code prettifier.  The goal is
 not to format all of the code in a file, to avoid \"getting in the way\".
 However, this tool can e.g. clean up import statements and help doing various
 tasks that get tedious very quickly.  It can
diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index affe6a07b5..23727fc0b8 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -48,14 +48,12 @@
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-ant-xml/tasty-ant-xml-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tasty-ant-xml" version))
        (sha256
         (base32
          "0h9mllhw9cd0rn34xhj8grwmbny7z7hpd8qmp9lfcdj0s4qx9vx8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-ant-xml")))
     (inputs
      (list ghc-generic-deriving ghc-xml ghc-tagged ghc-tasty))
     (home-page
@@ -75,14 +73,12 @@ framework.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-smallcheck/tasty-smallcheck-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tasty-smallcheck" version))
        (sha256
         (base32
          "0csgwn3vch0jnpqyyfnrfjq4z0dpl67imh5a7byll3hhlyidgjym"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-smallcheck")))
     (inputs
      (list ghc-tasty ghc-smallcheck ghc-async ghc-tagged))
     (home-page "https://documentup.com/feuerbach/tasty")
@@ -94,26 +90,19 @@ Haskell test framework.")
 (define-public ghc-tasty-quickcheck
   (package
     (name "ghc-tasty-quickcheck")
-    (version "0.10.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-quickcheck/"
-             "tasty-quickcheck-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0i1i78587znqzwps49milyr5n2k388ld2kr9ysz1vw8gcw51qq49"))))
+    (version "0.10.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-quickcheck" version))
+              (sha256
+               (base32
+                "1qnc6rdvjvlw08q6sln2n98rvj0s0pp689h6w4z58smjbn0lr25l"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "tasty-quickcheck")))
+    (inputs (list ghc-tagged ghc-tasty ghc-random ghc-quickcheck
+                  ghc-optparse-applicative))
+    (native-inputs (list ghc-tasty-hunit ghc-pcre-light))
+    (home-page "https://github.com/UnkindPartition/tasty")
     (synopsis "QuickCheck support for the Tasty test framework")
     (description "This package provides QuickCheck support for the Tasty
 Haskell test framework.")
@@ -122,28 +111,23 @@ Haskell test framework.")
 (define-public ghc-tasty-golden
   (package
     (name "ghc-tasty-golden")
-    (version "2.3.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-golden/tasty-golden-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1nskavqgfxx1cw7q6c0cmizlwj54rnlv93yhgssaa77gv1nbvwpn"))))
+    (version "2.3.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-golden" version))
+              (sha256
+               (base32
+                "03klnxn9rcv0l7fl4w8q6s59fzl1328j1wzwi1za4gb0l90vadwb"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-async
-           ghc-optparse-applicative
-           ghc-tagged
-           ghc-tasty
-           ghc-temporary
-           ghc-unix-compat))
+    (properties '((upstream-name . "tasty-golden")))
+    (inputs (list ghc-tasty
+                  ghc-typed-process
+                  ghc-optparse-applicative
+                  ghc-temporary
+                  ghc-tagged
+                  ghc-async))
     (native-inputs (list ghc-tasty-hunit))
-    (home-page
-     "https://github.com/feuerbach/tasty-golden")
+    (home-page "https://github.com/UnkindPartition/tasty-golden")
     (synopsis "Golden tests support for tasty")
     (description
      "This package provides support for @code{golden testing}.  A @dfn{golden
@@ -155,30 +139,20 @@ contains the correct result for the test.")
 (define-public ghc-tasty
   (package
     (name "ghc-tasty")
-    (version "1.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty/tasty-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0574hbqzxzyv6vsk5kzbf04kz58y0iy8x9ydcj4b8fpncgmgy63g"))))
+    (version "1.4.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty" version))
+              (sha256
+               (base32
+                "006bf4gyc30i2gvb17hj1mzrh1kwnwf7l050x3f72wi6c2axl87l"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "tasty")))
+    (inputs (list ghc-tagged ghc-optparse-applicative ghc-ansi-terminal))
+    (home-page "https://github.com/UnkindPartition/tasty")
     (synopsis "Modern and extensible testing framework")
-    (description "Tasty is a modern testing framework for Haskell.  It lets
+    (description
+     "Tasty is a modern testing framework for Haskell.  It lets
 you combine your unit tests, golden tests, QuickCheck/SmallCheck properties,
 and any other types of tests into a single test suite.")
     (license license:expat)))
@@ -186,23 +160,21 @@ and any other types of tests into a single test suite.")
 (define-public ghc-tasty-hedgehog
   (package
     (name "ghc-tasty-hedgehog")
-    (version "1.1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "tasty-hedgehog/tasty-hedgehog-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0cy49z8n124xh2ra2482vfy5if1n6d9lbdjma2zg1mxfj0k0zyfb"))))
+    (version "1.3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-hedgehog" version))
+              (sha256
+               (base32
+                "1iq452mvd9wc9pfmjsmm848jwp3cvsk1faf2mlr21vcs0yaxvq3m"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-tagged ghc-tasty ghc-hedgehog))
-    (native-inputs
-     (list ghc-tasty-expected-failure))
+    (properties '((upstream-name . "tasty-hedgehog")))
+    (inputs (list ghc-tagged ghc-tasty ghc-hedgehog))
+    (native-inputs (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
+    (description
+     "This package provides the means for integrating the
 @url{https://hackage.haskell.org/package/hedgehog, hedgehog testing library}
 with the @url{https://hackage.haskell.org/package/tasty, tasty testing
 framework}.")
@@ -211,33 +183,27 @@ framework}.")
 (define-public ghc-tasty-hspec
   (package
     (name "ghc-tasty-hspec")
-    (version "1.1.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-hspec/tasty-hspec-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "02s82ijs2ringqxsqbm7m3vcy5brmwxa617azxv0v2phi3rdkjvl"))))
+    (version "1.2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-hspec" version))
+              (sha256
+               (base32
+                "0ibl2xi6mmqad2mriz67nb7pjwwvjik385amp24j9kc7a7zkx091"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hspec
-           ghc-hspec-core
-           ghc-quickcheck
-           ghc-tagged
-           ghc-tasty
-           ghc-tasty-smallcheck
-           ghc-tasty-quickcheck))
+    (properties '((upstream-name . "tasty-hspec")))
+    (inputs (list ghc-hspec
+                  ghc-hspec-core
+                  ghc-quickcheck
+                  ghc-tasty
+                  ghc-tasty-smallcheck
+                  ghc-tasty-quickcheck
+                  ghc-tagged))
     (arguments
-     `(#:cabal-revision
-       ("1" "0za15rg0szacxq9yfxxjzddr77ai7ng5827a20pj9dr5anjlnajj")))
-    (home-page
-     "https://github.com/mitchellwrosen/tasty-hspec")
-    (synopsis
-     "Hspec support for the Tasty test framework")
+     `(#:cabal-revision ("1"
+                         "0a6r4gzxzp6n90z0nif7ha7p7am57hs48i54i2y4z9kgjv6lnvll")))
+    (home-page "https://github.com/mitchellwrosen/tasty-hspec")
+    (synopsis "Hspec support for the Tasty test framework")
     (description
      "This package provides a Tasty provider for Hspec test suites.")
     (license license:bsd-3)))
@@ -249,14 +215,12 @@ framework}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-hunit/tasty-hunit-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tasty-hunit" version))
        (sha256
         (base32
          "0gz6zz3w7s44pymw33xcxnawryl27zk33766sab96nz2xh91kvxp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-hunit")))
     (inputs
      (list ghc-call-stack-boot ghc-tasty))
     (home-page "http://documentup.com/feuerbach/tasty")
@@ -271,12 +235,12 @@ test framework.")
     (version "0.0.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "tasty-kat/tasty-kat-" version ".tar.gz"))
+              (uri (hackage-uri "tasty-kat" version))
               (sha256
                (base32
                 "14yvlpli6cv6bn3kh8mlfp4x1l6ns4fvmfv6hmj75cvxyzq029d7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-kat")))
     (inputs
      (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/vincenthz/tasty-kat")
@@ -289,21 +253,23 @@ tasty.")
 (define-public ghc-tasty-lua
   (package
     (name "ghc-tasty-lua")
-    (version "0.2.3.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "tasty-lua/tasty-lua-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0wa73ihkjcxi50lgpdzwwdx7s903lqi79hw7hxlvhbcvdly1cq53"))))
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-lua" version))
+              (sha256
+               (base32
+                "1vnyvgcjsvqhwwyqkbgqksr9ppj5whiihpwcqkg33sl7jj3ysdwv"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-file-embed ghc-hslua ghc-tasty))
-    (native-inputs
-     (list ghc-tasty-hunit))
-    (home-page "https://github.com/hslua/tasty-lua")
+    (properties '((upstream-name . "tasty-lua")))
+    (inputs (list ghc-hslua-core
+                  ghc-hslua-marshalling
+                  ghc-lua-arbitrary
+                  ghc-tasty
+                  ghc-quickcheck
+                  ghc-file-embed))
+    (native-inputs (list ghc-tasty-hunit))
+    (home-page "https://github.com/hslua/hslua")
     (synopsis "Write tests in Lua, integrate into tasty")
     (description "This package gives users the ability to define tasty tests
 from Lua.")
@@ -316,13 +282,12 @@ from Lua.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tasty-th/tasty-th-"
-             version ".tar.gz"))
+       (uri (hackage-uri "tasty-th" version))
        (sha256
         (base32
          "0b2ivrw2257m4cy4rjnkwqlarh83j1y3zywnmaqqqbvy667sqnj3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-th")))
     (inputs
      (list ghc-haskell-src-exts ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/bennofs/tasty-th")
@@ -340,16 +305,18 @@ test-framework.")
     (version "1.1.18")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/tasty-rerun/"
-                    "tasty-rerun-" version ".tar.gz"))
+              (uri (hackage-uri "tasty-rerun" version))
               (sha256
                (base32
                 "0sccp5zx9v2rx741nbmgd8mzjhy5m4v74hk26d23xz93ph8aqx7s"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-rerun")))
     (inputs
      (list ghc-optparse-applicative ghc-reducers ghc-split ghc-tagged
            ghc-tasty))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0091arn90cx5rzn5n2bpb9alzybwraf9yj7hb0bwdfyamzpf3pkb")))
     (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
@@ -365,13 +332,12 @@ been added since previous test run.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "tasty-expected-failure/tasty-expected-failure-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "tasty-expected-failure" version))
        (sha256
         (base32
          "0zlgxs24d54byfhvwdg85xk1572zpjs71bjlxxrxcvralrfcq1yb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-expected-failure")))
     (arguments `(#:tests? #f)) ; TODO: Loops.
 ;    (native-inputs
 ;     `(("ghc-tasty-hunit" ,ghc-tasty-hunit)
@@ -392,39 +358,35 @@ development.")
 (define-public ghc-quickcheck-instances
   (package
     (name "ghc-quickcheck-instances")
-    (version "0.3.25.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "quickcheck-instances/quickcheck-instances-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0ihqbarl2ddrfgq3mq09lswwn8213qpw13g49qxs5mjkcm6gbk3h"))))
+    (version "0.3.28")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "quickcheck-instances" version))
+              (sha256
+               (base32
+                "1jycijv7gaj6qrkp219nllrdv9zd0ifp0mb0rch430fm95xin4f4"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("2" "1lsa3pbg4ljlk29fhm3mdklnx3hwffyga1nr5krbpcyc3ywq8fq8")))
-    (inputs
-     (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")
+    (properties '((upstream-name . "quickcheck-instances")))
+    (inputs (list ghc-quickcheck
+                  ghc-splitmix
+                  ghc-case-insensitive
+                  ghc-data-fix
+                  ghc-hashable
+                  ghc-integer-logarithms
+                  ghc-old-time
+                  ghc-onetuple
+                  ghc-primitive
+                  ghc-scientific
+                  ghc-strict
+                  ghc-tagged
+                  ghc-these
+                  ghc-time-compat
+                  ghc-transformers-compat
+                  ghc-unordered-containers
+                  ghc-uuid-types
+                  ghc-vector
+                  ghc-text-short))
+    (home-page "https://github.com/haskellari/qc-instances")
     (synopsis "Common quickcheck instances")
     (description "This package provides QuickCheck instances for types
 provided by the Haskell Platform.")
@@ -437,13 +399,12 @@ provided by the Haskell Platform.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/quickcheck-unicode/"
-             "quickcheck-unicode-" version ".tar.gz"))
+       (uri (hackage-uri "quickcheck-unicode" version))
        (sha256
         (base32
          "0s43s1bzbg3gwsjgm7fpyksd1339f0m26dlw2famxwyzgvm0a80k"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "quickcheck-unicode")))
     (inputs (list ghc-quickcheck))
     (home-page
      "https://github.com/bos/quickcheck-unicode")
@@ -459,14 +420,12 @@ testing Unicode-related software.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/quickcheck-io/quickcheck-io-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "quickcheck-io" version))
        (sha256
         (base32
          "08k4v7pkgjf30pv5j2dfv1gqv6hclxlniyq2sps8zq4zswcr2xzv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "quickcheck-io")))
     (inputs
      (list ghc-quickcheck ghc-hunit))
     (home-page
@@ -483,14 +442,12 @@ use HUnit assertions as QuickCheck properties.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/QuickCheck/QuickCheck-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "QuickCheck" version))
        (sha256
         (base32
          "1wrnrm9sq4s0bly0q58y80g4153q45iglqa34xsi2q3bd62nqyyq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "QuickCheck")))
     (inputs
      (list ghc-random ghc-splitmix-bootstrap))
     (home-page "https://github.com/nick8325/quickcheck")
@@ -510,12 +467,11 @@ expressed in Haskell, using combinators defined in the QuickCheck library.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "quickcheck-assertions/"
-                           "quickcheck-assertions-" version ".tar.gz"))
+       (uri (hackage-uri "quickcheck-assertions" version))
        (sha256
         (base32 "1kyam4cy7qmnizjwjm8jamq43w7f0fs6ljfplwj0ib6wi2kjh0wv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "quickcheck-assertions")))
     (native-inputs
      (list ghc-hspec))
     (inputs
@@ -535,18 +491,18 @@ HUnit.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/test-framework/"
-                           "test-framework-" version ".tar.gz"))
+       (uri (hackage-uri "test-framework" version))
        (sha256
         (base32
          "1hhacrzam6b8f10hyldmjw8pb7frdxh04rfg3farxcxwbnhwgbpm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "test-framework")))
     (arguments
      `(#:tests? #f  ; FIXME: Tests do not build.
        #:cabal-revision
        ("6" "0wbq9wiaag69nsqxwijzhs5y1hb9kbpkp1x65dvx158cxp8i9w9r")))
-    (native-inputs
-     (list ghc-hunit ghc-quickcheck))
+    ;(native-inputs
+    ; (list ghc-hunit ghc-quickcheck))
     (inputs
      `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
        ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
@@ -574,13 +530,12 @@ reporting and test statistics output.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "test-framework-hunit/test-framework-hunit-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "test-framework-hunit" version))
        (sha256
         (base32
          "1y0b6vg8nfm43v90lxxcydhi6qlxhfy4vpxbzm5ic2w55bh8xjwm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "test-framework-hunit")))
     (arguments
      `(#:cabal-revision
        ("3" "0i9mlalv7cl1iq43ld5myrnpszq5rxmd79hk495dcb08rglhgl3z")))
@@ -599,13 +554,12 @@ reporting and test statistics output.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "test-framework-quickcheck2/"
-                           "test-framework-quickcheck2-" version ".tar.gz"))
+       (uri (hackage-uri "test-framework-quickcheck2" version))
        (sha256
         (base32
          "0ngf9vvby4nrdf1i7dxf5m9jn0g2pkq32w48xdr92n9hxka7ixn9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "test-framework-quickcheck2")))
     (arguments
      `(#:cabal-revision
        ("3" "0mglqfimla4vvv80mg08aj76zf4993wmngqlirh05h8i9nmgv6lh")))
@@ -626,12 +580,11 @@ package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "test-framework-smallcheck/"
-                           "test-framework-smallcheck-" version ".tar.gz"))
+       (uri (hackage-uri "test-framework-smallcheck" version))
        (sha256
         (base32 "1xpgpk1gp4w7w46b4rhj80fa0bcyz8asj2dcjb5x1c37b7rw90b0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "test-framework-smallcheck")))
     (inputs
      (list ghc-smallcheck ghc-test-framework))
     (home-page "https://github.com/Bodigrim/smallcheck")
@@ -648,13 +601,12 @@ test-framework.  New projects should use ghc-tasty-smallcheck instead.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "test-framework-th-" version "/"
-                           "test-framework-th-" version ".tar.gz"))
+       (uri (hackage-uri "test-framework-th" version))
        (sha256
         (base32
          "12lw7yj02jb9s0i7rb98jjam43j2h0gzmnbj9zi933fx7sg0sy4b"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "test-framework-th")))
     (inputs
      (list ghc-test-framework ghc-language-haskell-extract
            ghc-haskell-src-exts ghc-regex-posix))
@@ -677,21 +629,21 @@ using Template Haskell")
   (package
     (name "ghc-hunit")
     (version "1.6.2.0")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/HUnit/"
-                           "HUnit-" version ".tar.gz"))
+       (uri (hackage-uri "HUnit" version))
        (sha256
         (base32
          "1as4sw5y39c3zrmr6sb8zbw74c9gdn4401y0dx45ih7zf6457dxh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "HUnit")))
     (inputs
      ;; We cannot use ghc-call-stack there, because it depends on
      ;; ghc-nanospec, which depends on ghc-hunit.
      (list ghc-call-stack-boot))
-    (home-page "http://hunit.sourceforge.net/")
+    (home-page "https://hunit.sourceforge.net/")
     (synopsis "Unit testing framework for Haskell")
     (description
      "HUnit is a unit testing framework for Haskell, inspired by the
@@ -701,20 +653,17 @@ JUnit tool for Java.")
 (define-public hspec-discover
   (package
     (name "hspec-discover")
-    (version "2.7.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hspec-discover/hspec-discover-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "13yzvd3b679skvs1insk4s0wc4zvmz6hs38kc8q0j6vzqq06smqa"))))
+    (version "2.9.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec-discover" version))
+              (sha256
+               (base32
+                "0536kdxjw6p8b6gcwvmr22jbmb6cgzbddi0fkd01b2m847z37sb5"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-hspec-meta))
-    (home-page "https://hspec.github.io/")
+    (properties '((upstream-name . "hspec-discover")))
+    (native-inputs (list ghc-quickcheck ghc-hspec-meta ghc-mockery-bootstrap))
+    (home-page "http://hspec.github.io/")
     (synopsis "Automatically discover and run Hspec tests")
     (description "hspec-discover is a tool which automatically discovers and
 runs Hspec tests.")
@@ -723,28 +672,28 @@ runs Hspec tests.")
 (define-public ghc-hspec-core
   (package
     (name "ghc-hspec-core")
-    (version "2.7.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/hspec-core/"
-                           "hspec-core-" version ".tar.gz"))
-       (sha256
-        (base32
-         "12k9yp5gznrda449ir60d5wv3xl7nnyffkb5mhfc0svw9f8lxlv1"))))
+    (version "2.9.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec-core" version))
+              (sha256
+               (base32
+                "040rzqiqwkp373jjpij8lkmv08pp2ya92zzcf95bw8px215rp08n"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; FIXME: testing libraries are missing.
-    (inputs
-     (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/")
+    (properties '((upstream-name . "hspec-core")))
+    (inputs (list ghc-hunit
+                  ghc-quickcheck
+                  ghc-ansi-terminal
+                  ghc-call-stack
+                  ghc-clock
+                  ghc-hspec-expectations
+                  ghc-quickcheck-io
+                  ghc-random
+                  ghc-setenv
+                  ghc-tf-random))
+    (native-inputs (list ghc-base-orphans-bootstrap ghc-hspec-meta
+                         ghc-silently-bootstrap ghc-temporary))
+    (home-page "http://hspec.github.io/")
     (synopsis "Testing framework for Haskell")
     (description "This library exposes internal types and functions that can
 be used to extend Hspec's functionality.")
@@ -753,26 +702,23 @@ be used to extend Hspec's functionality.")
 (define-public ghc-hspec-meta
   (package
     (name "ghc-hspec-meta")
-    (version "2.7.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/hspec-meta/"
-                           "hspec-meta-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0sfj0n2hy1r8ifysgbcmfdygcd7vyzr13ldkcp0l2ml337f8j0si"))))
+    (version "2.9.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec-meta" version))
+              (sha256
+               (base32
+                "1raxwpsmcijl3x2h5naw6aydhbiknxvhj3x7v384bi1rqi51ainm"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "hspec-meta")))
+    (inputs (list ghc-quickcheck
+                  ghc-ansi-terminal
+                  ghc-call-stack-boot
+                  ghc-clock
+                  ghc-quickcheck-io
+                  ghc-random
+                  ghc-setenv))
+    (home-page "http://hspec.github.io/")
     (synopsis "Version of Hspec to test Hspec itself")
     (description "This library provides a stable version of Hspec which is
 used to test the in-development version of Hspec.")
@@ -781,26 +727,18 @@ used to test the in-development version of Hspec.")
 (define-public ghc-hspec
   (package
     (name "ghc-hspec")
-    (version "2.7.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/hspec/"
-                           "hspec-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0z0lwrmrqkglr78n6k2c36n4h68142bh785ys0x4jaibjshvs6rw"))))
+    (version "2.9.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec" version))
+              (sha256
+               (base32
+                "092sfqjkargxxszp9jjqa8ldjz0xv34jwn6k21q59ys5ckvsrpc1"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-hspec-core
-           hspec-discover
-           ghc-hspec-expectations
-           ghc-quickcheck
-           ghc-hunit
-           ghc-stringbuilder
-           ghc-hspec-meta))
-    (home-page "https://hspec.github.io/")
+    (properties '((upstream-name . "hspec")))
+    (inputs (list ghc-quickcheck ghc-hspec-core hspec-discover
+                  ghc-hspec-expectations))
+    (home-page "http://hspec.github.io/")
     (synopsis "Testing Framework for Haskell")
     (description "This library provides the Hspec testing framework for
 Haskell, inspired by the Ruby library RSpec.")
@@ -809,24 +747,21 @@ Haskell, inspired by the Ruby library RSpec.")
 (define-public ghc-hspec-contrib
   (package
     (name "ghc-hspec-contrib")
-    (version "0.5.1")
+    (version "0.5.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "hspec-contrib/hspec-contrib-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "hspec-contrib" version))
               (sha256
                (base32
-                "0hhzxaa3fxz5mk5qcsrnfr98a7bn3szx2ydgr0x9mbqmm1jg06rc"))))
+                "1nyb5n2jiq920yyf3flzyxrs5xpfyppl3jn18zhviyysjjk5drpx"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hspec-core ghc-hunit ghc-hspec ghc-quickcheck))
-    (native-inputs
-     (list hspec-discover))
-    (home-page "https://hspec.github.io/")
+    (properties '((upstream-name . "hspec-contrib")))
+    (inputs (list ghc-hunit ghc-hspec-core))
+    (native-inputs (list ghc-quickcheck ghc-hspec hspec-discover))
+    (arguments (list #:tests? #f)) ; Tests fail to compile.
+    (home-page "http://hspec.github.io/")
     (synopsis "Contributed functionality for Hspec")
-    (description
-     "This package provides contributed Hspec extensions.")
+    (description "This package provides contributed Hspec extensions.")
     (license license:expat)))
 
 (define-public ghc-hspec-expectations
@@ -836,13 +771,12 @@ Haskell, inspired by the Ruby library RSpec.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hspec-expectations/hspec-expectations-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "hspec-expectations" version))
        (sha256
         (base32
          "1vxl9zazbaapijr6zmcj72j9wf7ka1pirrjbwddwwddg3zm0g5l1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hspec-expectations")))
     ;; Tests depend on ghc-nanospec.
     (arguments '(#:tests? #f))
     (inputs (list ghc-hunit))
@@ -859,15 +793,14 @@ Haskell, inspired by the Ruby library RSpec.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "nanospec/nanospec-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "nanospec" version))
        (sha256
         (base32
          "1rcmhl9bhyfvanalnf1r86wkx6rq6wdvagnw1h011jcnnb1cq56g"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hspec ghc-silently))
+    (properties '((upstream-name . "nanospec")))
+    (inputs (list ghc-silently-bootstrap))
+    (native-inputs (list ghc-hspec))
     (home-page "https://github.com/hspec/nanospec#readme")
     (synopsis "Lightweight implementation of a subset of Hspec's API")
     (description
@@ -875,6 +808,14 @@ Haskell, inspired by the Ruby library RSpec.")
 minimal dependencies.")
     (license license:expat)))
 
+(define-public ghc-nanospec-bootstrap
+  (package
+    (inherit ghc-nanospec)
+    (name "ghc-nanospec-bootstrap")
+    (arguments '(#:tests? #f))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
 (define-public ghc-crypto-cipher-tests
   (package
     (name "ghc-crypto-cipher-tests")
@@ -882,13 +823,12 @@ minimal dependencies.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "crypto-cipher-tests-" version "/"
-                           "crypto-cipher-tests-" version ".tar.gz"))
+       (uri (hackage-uri "crypto-cipher-tests" version))
        (sha256
         (base32
          "19wqignlq90qwpam01hnmmrxaxh5lkax9l1l6rlbi4a07nvp1dnz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "crypto-cipher-tests")))
     (inputs (list ghc-quickcheck
                   ghc-hunit
                   ghc-test-framework
@@ -907,33 +847,29 @@ implementations of cryptographic ciphers.")
 (define-public ghc-hedgehog
   (package
     (name "ghc-hedgehog")
-    (version "1.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hedgehog/hedgehog-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1qsqs8lmxa3wmw228cwi98vvvh9hqbc9d43i1sy2c9igw9xlhfi6"))))
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hedgehog" version))
+              (sha256
+               (base32
+                "0dbk75hk6hqpzkjdlpw3s63qhm42kqigij33p321by6xndb59jg1"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "hedgehog")))
+    (inputs (list ghc-ansi-terminal
+                  ghc-async
+                  ghc-barbies
+                  ghc-concurrent-output
+                  ghc-erf
+                  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
@@ -945,24 +881,30 @@ To get started quickly, see the examples:
 @uref{https://github.com/hedgehogqa/haskell-hedgehog/tree/master/hedgehog-example}")
     (license license:bsd-3)))
 
+;; Deprecated. Don’t use.
 (define-public cabal-doctest
   (package
     (name "cabal-doctest")
-    (version "1.0.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cabal-doctest/cabal-doctest-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "03if74imlhhk7m56nci5f1wclniwqdmwl4hl177040j1gnlac9i0"))))
+    (version "1.0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cabal-doctest" version))
+              (sha256
+               (base32
+                "0wxs0xkspc80h0g8ks792lrzldxvcnhc9rja1j0k678ijs20hmjm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cabal-doctest")))
     (arguments
-     `(#:cabal-revision
-       ("2" "05v1awad3d1wvc763xcgvxm4n6n7bs7byc6s14kdbw35zcaddlcb")))
-    (home-page "https://github.com/phadej/cabal-doctest")
+     `(#:cabal-revision ("2"
+                         "0868js0qgfhvmyw4hjzrvmlzyqsm8dfsbmqhybxb90x44xi3r0i1")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "cabal-doctest.cabal"
+               (("\\b(Cabal|base)\\s+[^,]+" all dep)
+                dep)))))))
+    (home-page "https://github.com/haskellari/cabal-doctest")
     (synopsis "Setup.hs helper for running doctests")
     (description
      "To properly work, the @code{doctest} package needs plenty of
@@ -970,6 +912,10 @@ configuration.  This library provides the common bits for writing custom
 @file{Setup.hs} files.")
     (license license:bsd-3)))
 
+;; Deprecated. Don’t use.
+(define-public ghc-cabal-doctest
+  (deprecated-package "ghc-cabal-doctest" cabal-doctest))
+
 (define-public ghc-testing-type-modifiers
   (package
     (name "ghc-testing-type-modifiers")
@@ -977,13 +923,12 @@ configuration.  This library provides the common bits for writing custom
     (source
       (origin
         (method url-fetch)
-        (uri (string-append "https://hackage.haskell.org/package/"
-                            "testing-type-modifiers/testing-type-modifiers-"
-                            version ".tar.gz"))
+        (uri (hackage-uri "testing-type-modifiers" version))
         (sha256
           (base32
             "1wh2n95n39ivv6kbqn42vbzrj8zagsmk6f2al2qj40bg5kgdl2q5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "testing-type-modifiers")))
     (home-page "https://hackage.haskell.org/package/testing-type-modifiers")
     (synopsis "Data type modifiers for property based testing")
     (description "Property based testing libraries such as QuickCheck tend to
@@ -996,22 +941,20 @@ testing frameworks.")
 (define-public ghc-testing-feat
   (package
     (name "ghc-testing-feat")
-    (version "1.1.0.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://hackage.haskell.org/package/"
-                            "testing-feat/testing-feat-" version ".tar.gz"))
-        (sha256
-          (base32
-            "1v2qzzpf1s008g7q6q67glf7vbm1pkpq4rc3ii74f4g6vhfx610r"))))
+    (version "1.1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "testing-feat" version))
+              (sha256
+               (base32
+                "14d6licgrkiw36xj1cshnqxcbx5iwzxwq731xlb1wb5n2sw8ijf2"))))
     (build-system haskell-build-system)
-    (inputs
-      (list ghc-quickcheck ghc-size-based ghc-testing-type-modifiers
-            ghc-semigroups))
-    (home-page "https://github.com/JonasDuregard/testing-feat")
+    (properties '((upstream-name . "testing-feat")))
+    (inputs (list ghc-quickcheck ghc-size-based ghc-testing-type-modifiers))
+    (home-page "https://github.com/size-based/testing-feat")
     (synopsis "Functional Enumeration of Algebraic Types")
-    (description "Feat (Functional Enumeration of Algebraic Types)
+    (description
+     "Feat (Functional Enumeration of Algebraic Types)
 provides enumerations as functions from natural numbers to
 values (similar to @code{toEnum} but for any algebraic data type).  This
 can be used for SmallCheck-style systematic testing, QuickCheck-style
@@ -1021,19 +964,16 @@ random testing, and hybrids of the two.")
 (define-public ghc-inspection-testing
   (package
     (name "ghc-inspection-testing")
-    (version "0.4.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/inspection-testing/"
-             "inspection-testing-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0qz1npyycj4bvyly9xmjbnhw569l52h38gx02rk0r7zhapw83aig"))))
+    (version "0.4.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "inspection-testing" version))
+              (sha256
+               (base32
+                "0mxff0v3ciccbk4b8kxnh4752fzbwn7213qd8xji0csv6gi2w83y"))))
     (build-system haskell-build-system)
-    (home-page
-     "https://github.com/nomeata/inspection-testing")
+    (properties '((upstream-name . "inspection-testing")))
+    (home-page "https://github.com/nomeata/inspection-testing")
     (synopsis "GHC plugin to do inspection testing")
     (description
      "Some carefully crafted libraries make promises to their users beyond
@@ -1065,13 +1005,11 @@ examples and more information.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/quickcheck-classes/quickcheck-classes-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "quickcheck-classes" version))
         (sha256
           (base32 "19iw15mvb7gws3ljdxqwsbb4pmfc0sfflf8szgmrhiqr3k82mqv2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "quickcheck-classes")))
     (inputs
       (list ghc-quickcheck
             ghc-primitive
@@ -1109,13 +1047,11 @@ constraints more cleanly.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/quickcheck-classes-base/quickcheck-classes-base-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "quickcheck-classes-base" version))
         (sha256
           (base32 "16c6gq4cqpkwnq1pzkhm6r7mrwk4an50ha5w77bmiia2qkhla6ch"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "quickcheck-classes-base")))
     (inputs
       (list ghc-quickcheck
             ghc-contravariant
@@ -1150,13 +1086,11 @@ these constraints more cleanly.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/doctest-lib/doctest-lib-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "doctest-lib" version))
         (sha256
           (base32 "1vswam0dhw52dihgnzirh18gqs8rj8h6jd7pl6y1mg2f9f9zmih2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "doctest-lib")))
     (home-page "https://hub.darcs.net/thielema/doctest-lib/")
     (synopsis "Parts of doctest exposed as library")
     (description
@@ -1170,15 +1104,16 @@ these constraints more cleanly.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/doctest-exitcode-stdio/doctest-exitcode-stdio-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "doctest-exitcode-stdio" version))
         (sha256
           (base32 "1g3c7yrqq2mwqbmvs8vkx1a3cf0p0x74b7fnn344dsk7bsfpgv0x"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "doctest-exitcode-stdio")))
     (inputs
       (list ghc-doctest-lib ghc-quickcheck ghc-semigroups))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1065s8bch6zhl6mc8nhvfpwd1irmjd04z7xgycbpihc14x4ijim3")))
     (home-page "https://hub.darcs.net/thielema/doctest-exitcode-stdio/")
     (synopsis "Run Doctests in a @code{Cabal.Test.exitcode-stdio} environment")
     (description
@@ -1186,59 +1121,33 @@ these constraints more cleanly.")
 environment.")
     (license license:bsd-3)))
 
-(define-public ghc-cabal-doctest
-  (package
-    (name "ghc-cabal-doctest")
-    (version "1.0.8")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/cabal-doctest/cabal-doctest-"
-               version
-               ".tar.gz"))
-        (sha256
-          (base32 "03if74imlhhk7m56nci5f1wclniwqdmwl4hl177040j1gnlac9i0"))))
-    (build-system haskell-build-system)
-    (arguments
-      `(#:cabal-revision
-        ("2" "05v1awad3d1wvc763xcgvxm4n6n7bs7byc6s14kdbw35zcaddlcb")))
-    (home-page "https://github.com/phadej/cabal-doctest")
-    (synopsis "@file{Setup.hs} helper for Doctests running")
-    (description
-      "This package provides helpers for running Doctests in @file{Setup.hs}.")
-    (license license:bsd-3)))
-
 (define-public ghc-tasty-silver
   (package
     (name "ghc-tasty-silver")
-    (version "3.2.3")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/tasty-silver/tasty-silver-"
-               version
-               ".tar.gz"))
-        (sha256
-          (base32 "0nvh2k8iqqkanmp7lpwd3asimyarzisly8wavbdahcxryn0j4xb7"))))
+    (version "3.3.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-silver" version))
+              (sha256
+               (base32
+                "13j0zs0ciijv9q2nncna1gbgsgw2g7xc228hzmqic1750n3ybz9m"))))
     (build-system haskell-build-system)
-    (inputs
-      (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
-     (list ghc-tasty-hunit ghc-silently))
+    (properties '((upstream-name . "tasty-silver")))
+    (inputs (list ghc-ansi-terminal
+                  ghc-async
+                  ghc-optparse-applicative
+                  ghc-process-extras
+                  ghc-regex-tdfa
+                  ghc-silently
+                  ghc-tagged
+                  ghc-tasty
+                  ghc-temporary
+                  ghc-semigroups))
+    (native-inputs (list ghc-tasty-hunit))
     (home-page "https://github.com/phile314/tasty-silver")
     (synopsis "Fancy test runner, including support for golden tests")
     (description
-      "This package provides a fancy test runner and support for @dfn{golden
+     "This package provides a fancy test runner and support for @dfn{golden
 testing}.  A golden test is an IO action that writes its result to a file.  To
 pass the test, this output file should be identical to the corresponding
 ``golden'' file, which contains the correct result for the test.  The test
@@ -1246,3 +1155,22 @@ runner allows filtering tests using regexes, and to interactively inspect the
 result of golden tests.")
     (license license:expat)))
 
+(define-public ghc-tasty-inspection-testing
+  (package
+    (name "ghc-tasty-inspection-testing")
+    (version "0.1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-inspection-testing" version))
+              (sha256
+               (base32
+                "0p46w44f19w7lvdzyg3vq6qzix0rjp8p23ilxz82dviq38lgmifp"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-inspection-testing")))
+    (inputs (list ghc-inspection-testing ghc-tasty))
+    (home-page "https://github.com/Bodigrim/tasty-inspection-testing")
+    (synopsis "Inspection testing support for tasty")
+    (description
+     "Integrate @@inspection-testing@@ into @@tasty@@ test suites.")
+    (license license:expat)))
+
diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index 6ddb459138..42e2a15709 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -27,6 +27,7 @@
   #:use-module (gnu packages haskell)
   #:use-module (gnu packages haskell-check)
   #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages tls)
   #:use-module (guix build-system haskell)
   #:use-module (guix download)
@@ -40,13 +41,12 @@
     (version "0.3.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "asn1-types/asn1-types-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "asn1-types" version))
               (sha256
                (base32
                 "1a119qxhxhr0yn37r26dkydm6g5kykdkx98ghb59i4ipa6i95vkq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "asn1-types")))
     (inputs
      (list ghc-memory ghc-hourglass))
     (home-page "https://github.com/vincenthz/hs-asn1-types")
@@ -62,13 +62,12 @@ format.")
     (version "0.9.6")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "asn1-encoding/asn1-encoding-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "asn1-encoding" version))
               (sha256
                (base32
                 "02nsr30h5yic1mk7znf0q4z3n560ip017n60hg7ya25rsfmxxy6r"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "asn1-encoding")))
     (inputs
      (list ghc-hourglass ghc-asn1-types))
     (native-inputs
@@ -86,13 +85,12 @@ supports for high level forms of ASN1 (BER, and DER).")
     (version "0.9.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "asn1-parse/asn1-parse-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "asn1-parse" version))
               (sha256
                (base32
                 "17pk8y3nwv9b9i5j15qlmwi7fmq9ab2z4kfpjk2rvcrh9lsf27wg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "asn1-parse")))
     (inputs
      (list ghc-asn1-types ghc-asn1-encoding))
     (home-page "https://github.com/vincenthz/hs-asn1")
@@ -109,13 +107,12 @@ when ASN1 pattern matching is not convenient.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "crypto-api-" version "/"
-                           "crypto-api-" version ".tar.gz"))
+       (uri (hackage-uri "crypto-api" version))
        (sha256
         (base32
          "19bsmkqkpnvh01b77pmyarx00fic15j4hvg4pzscrj4prskrx2i9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "crypto-api")))
     (inputs (list ghc-cereal ghc-tagged ghc-entropy))
     (home-page "https://github.com/TomMD/crypto-api")
     (synopsis "Provides generic interface for cryptographic operations
@@ -138,14 +135,12 @@ algorithm (ex: padding) is within scope of this package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "crypto-api-tests-" version "/"
-                           "crypto-api-tests-" version ".tar.gz"))
+       (uri (hackage-uri "crypto-api-tests" version))
        (sha256
         (base32
          "0w3j43jdrlj28jryp18hc6q84nkl2yf4vs1hhgrsk7gb9kfyqjpl"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "crypto-api-tests")))
     (inputs (list ghc-test-framework-quickcheck2
                   ghc-crypto-api
                   ghc-cereal
@@ -167,13 +162,12 @@ for common cryptographic algorithms are included.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cryptohash/cryptohash-"
-             version ".tar.gz"))
+       (uri (hackage-uri "cryptohash" version))
        (sha256
         (base32
          "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cryptohash")))
     (inputs
      (list ghc-byteable
            ghc-cryptonite
@@ -199,13 +193,12 @@ that hides the C implementation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cryptohash-md5-" version "/"
-                           "cryptohash-md5-" version ".tar.gz"))
+       (uri (hackage-uri "cryptohash-md5" version))
        (sha256
         (base32
          "018g13hkmq5782i24b4518hcd926fl6x6fh5hd7b9wlxwc5dn21v"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cryptohash-md5")))
     (native-inputs (list ghc-base16-bytestring ghc-puremd5 ghc-tasty
                          ghc-tasty-hunit ghc-tasty-quickcheck))
     (home-page "https://github.com/hvr/cryptohash-md5")
@@ -216,26 +209,24 @@ that hides the C implementation.")
 (define-public ghc-cryptohash-sha1
   (package
     (name "ghc-cryptohash-sha1")
-    (version "0.11.100.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cryptohash-sha1-" version "/"
-                           "cryptohash-sha1-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1aqdxdhxhl9jldh951djpwxx8z7gzaqspxl7iwpl84i5ahrsyy9w"))))
+    (version "0.11.101.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cryptohash-sha1" version))
+              (sha256
+               (base32
+                "0h9jl9v38gj0vnscqx7xdklk634p05fa6z2pcvknisq2mnbjq154"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("6" "10rpxrmqgwihmplczglwxf5q3l13z9j3kvi065z884y4dymmnkgc")
-       #:tests? #f)) ; tests require old version of ghc-hunit (0.9)
+    (properties '((upstream-name . "cryptohash-sha1")))
     (native-inputs (list ghc-base16-bytestring ghc-sha ghc-tasty
-                         ghc-tasty-quickcheck ghc-hunit))
+                         ghc-tasty-quickcheck ghc-tasty-hunit))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0bz9rfl7b2iwn45m0lxcmsyi5rrv3xdgzx2lzr79bds91dw6i25b")))
     (home-page "https://github.com/hvr/cryptohash-sha1")
     (synopsis "SHA-1 implementation for Haskell")
-    (description "This Haskell package provides an incremental and one-pass,
+    (description
+     "This Haskell package provides an incremental and one-pass,
 pure API to the @uref{https://en.wikipedia.org/wiki/SHA-1, SHA-1 hash algorithm},
 including @uref{https://en.wikipedia.org/wiki/HMAC, HMAC support}, with
 performance close to the fastest implementations available in other languages.
@@ -251,13 +242,12 @@ the C implementation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cryptohash-sha256-" version "/"
-                           "cryptohash-sha256-" version ".tar.gz"))
+       (uri (hackage-uri "cryptohash-sha256" version))
        (sha256
         (base32
          "1xkb7iqplbw4fy1122p79xf1zcb7k44rl0wmfj1q06l7cdqxr9vk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cryptohash-sha256")))
     (arguments
      `(#:cabal-revision
        ("1" "1hyzqv30rpj920ddnr0zypyjjlh52vyp2d140pn2byayj820rkgs")
@@ -279,24 +269,18 @@ the C implementation.")
 (define-public ghc-cryptonite
   (package
     (name "ghc-cryptonite")
-    (version "0.29")
+    (version "0.30")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "cryptonite/cryptonite-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "cryptonite" version))
               (sha256
                (base32
-                "13xhp3hshb8x06bw37kp16c9jpjmgfn06nkj9drz745fv8f04fnq"))))
+                "07bb97iszhnrfddh5ql6p3dqd0c13xycjw5n2kljw7d0ia59q2an"))))
     (build-system haskell-build-system)
-    ;; FIXME: tests are broken.
-    ;; See https://github.com/haskell-crypto/cryptonite/issues/260
-    (arguments '(#:tests? #f))
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-basement ghc-memory ghc-byteable))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit ghc-tasty-kat))
+    (properties '((upstream-name . "cryptonite")))
+    (inputs (list ghc-memory ghc-basement))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
+                         ghc-tasty-kat))
     (home-page "https://github.com/haskell-crypto/cryptonite")
     (synopsis "Cryptography primitives")
     (description
@@ -309,26 +293,21 @@ generators, and more.")
 (define-public ghc-digest
   (package
     (name "ghc-digest")
-    (version "0.0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/digest/digest-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1l5383l5pvp018rj3vabrppnzcqrr2g0dvgvmsrbjdn02wzab5jm"))))
+    (version "0.0.1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "digest" version))
+              (sha256
+               (base32
+                "05pc5l4bwddszc6vy1hazwi1dnrxg323521gdkis9cvh7zs2a4gr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "digest")))
     (arguments
      `(#:extra-directories ("zlib")))
-    (inputs
-     (list zlib))
-    (home-page
-     "https://hackage.haskell.org/package/digest")
-    (synopsis
-     "Various cryptographic hashes for bytestrings")
+    (inputs (list zlib))
+    (native-inputs (list pkg-config))
+    (home-page "http://hackage.haskell.org/package/digest")
+    (synopsis "Various cryptographic hashes for bytestrings")
     (description
      "This package provides efficient cryptographic hash implementations for
 strict and lazy bytestrings.  For now, CRC32 and Adler32 are supported; they
@@ -338,16 +317,15 @@ are implemented as FFI bindings to efficient code from zlib.")
 (define-public ghc-entropy
   (package
     (name "ghc-entropy")
-    (version "0.4.1.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "entropy-" version "/"
-                           "entropy-" version ".tar.gz"))
-       (sha256
-        (base32 "0qmzz0zgad13zl0kjrxz6cxg8ckn2w8saas2a2j72vbafpzmkixd"))))
+    (version "0.4.1.10")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "entropy" version))
+              (sha256
+               (base32
+                "1rbx4ydabrjs8kkdg9laznkh9nisiq6b5z93vnp9bh6iy59ivb45"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "entropy")))
     (home-page "https://github.com/TomMD/entropy")
     (synopsis "Provides platform independent entropy source for Haskell")
     (description "This Haskell package provides a platform independent method
@@ -360,12 +338,12 @@ to obtain cryptographically strong entropy.")
     (version "0.2.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "pem/pem-" version ".tar.gz"))
+              (uri (hackage-uri "pem" version))
               (sha256
                (base32
                 "1m7qjsxrd8m88cvkqmr8kscril500j2a9y0iynvksjyjkhdlq33p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pem")))
     (inputs
      (list ghc-basement ghc-memory))
     (native-inputs
@@ -385,13 +363,12 @@ Mail} (PEM) format.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "pureMD5-" version "/"
-                           "pureMD5-" version ".tar.gz"))
+       (uri (hackage-uri "pureMD5" version))
        (sha256
         (base32
          "0qwkvxwi9wh6knn69rg2hvc8ngmv1if77kmpcnp0xqr0l30fwavq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pureMD5")))
     (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
@@ -409,12 +386,12 @@ interface.")
     (version "1.6.4.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "SHA/SHA-" version ".tar.gz"))
+              (uri (hackage-uri "SHA" version))
               (sha256
                (base32
                 "0i4b2wjisivdy72synal711ywhx05mfqfba5n65rk8qidggm1nbb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "SHA")))
     (native-inputs
      (list ghc-quickcheck ghc-test-framework
            ghc-test-framework-quickcheck2))
@@ -432,26 +409,24 @@ libraries, like OpenSSL.")
 (define-public ghc-x509
   (package
     (name "ghc-x509")
-    (version "1.7.5")
+    (version "1.7.7")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "x509/x509-" version ".tar.gz"))
+              (uri (hackage-uri "x509" version))
               (sha256
                (base32
-                "1j67c35g8334jx7x32hh6awhr43dplp0qwal5gnlkmx09axzrc5i"))))
+                "1zk8lll1hmzl5xvrd16dhyz25151y59xhsqp2mm1wgymwl7r5ijr"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-memory
-           ghc-hourglass
-           ghc-pem
-           ghc-asn1-types
-           ghc-asn1-encoding
-           ghc-asn1-parse
-           ghc-cryptonite))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck))
-    (home-page "https://github.com/vincenthz/hs-certificate")
+    (properties '((upstream-name . "x509")))
+    (inputs (list ghc-memory
+                  ghc-hourglass
+                  ghc-pem
+                  ghc-asn1-types
+                  ghc-asn1-encoding
+                  ghc-asn1-parse
+                  ghc-cryptonite))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck))
+    (home-page "http://github.com/vincenthz/hs-certificate")
     (synopsis "X509 reader and writer")
     (description
      "This library provides functions to read and write X509 certificates.")
@@ -460,22 +435,19 @@ libraries, like OpenSSL.")
 (define-public ghc-x509-store
   (package
     (name "ghc-x509-store")
-    (version "1.6.7")
+    (version "1.6.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "x509-store/x509-store-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "x509-store" version))
               (sha256
                (base32
-                "1y8yyr1i95jkllg8k0z54k5v4vachp848clc07m33xpxidn3b1lp"))))
+                "1nn8ql7vkp4qgf2msm600sr6ranpsajbhq0sc4c0l6pk1i9174n5"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-pem ghc-asn1-types ghc-asn1-encoding ghc-cryptonite
-           ghc-x509))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit))
-    (home-page "https://github.com/vincenthz/hs-certificate")
+    (properties '((upstream-name . "x509-store")))
+    (inputs (list ghc-pem ghc-asn1-types ghc-asn1-encoding ghc-cryptonite
+                  ghc-x509))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "http://github.com/vincenthz/hs-certificate")
     (synopsis "X.509 collection accessing and storing methods")
     (description
      "This package provides functions for accessing and storing X.509
@@ -485,30 +457,26 @@ collections, certificates, revocation lists, and exception lists.")
 (define-public ghc-x509-validation
   (package
     (name "ghc-x509-validation")
-    (version "1.6.11")
+    (version "1.6.12")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "x509-validation/x509-validation-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "x509-validation" version))
               (sha256
                (base32
-                "16yihzljql3z8w5rgdl95fv3hgk7yd86kbl9b3glllsark5j2hzr"))))
+                "1j7is28ljz4yxwxz5ax3x7ykgwkr38dx46bw7vgj4arkk7hl93hd"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-tasty ghc-tasty-hunit))
-    (home-page "https://github.com/vincenthz/hs-certificate")
+    (properties '((upstream-name . "x509-validation")))
+    (inputs (list ghc-memory
+                  ghc-hourglass
+                  ghc-data-default-class
+                  ghc-pem
+                  ghc-asn1-types
+                  ghc-asn1-encoding
+                  ghc-x509
+                  ghc-x509-store
+                  ghc-cryptonite))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "http://github.com/vincenthz/hs-certificate")
     (synopsis "X.509 certificate and revocation list validation")
     (description
      "This package provides functions for X.509 certificate and revocation
@@ -518,19 +486,17 @@ list validation.")
 (define-public ghc-x509-system
   (package
     (name "ghc-x509-system")
-    (version "1.6.6")
+    (version "1.6.7")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "x509-system/x509-system-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "x509-system" version))
               (sha256
                (base32
-                "06a4m9c7vlr9nhp9gmqbb46arf0yj1dkdm4nip03hzy67spdmp20"))))
+                "049bdaxrih49nkhkyl2342qnbx2f0q99z8rld648bz1kkgyizz38"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-pem ghc-x509 ghc-x509-store))
-    (home-page "https://github.com/vincenthz/hs-certificate")
+    (properties '((upstream-name . "x509-system")))
+    (inputs (list ghc-pem ghc-x509 ghc-x509-store))
+    (home-page "http://github.com/vincenthz/hs-certificate")
     (synopsis "Handle system X.509 accessors and storage")
     (description
      "This package provides a library to handle system accessors and storage
@@ -544,13 +510,12 @@ for X.509 certificates.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "crypto-cipher-types-" version "/"
-                           "crypto-cipher-types-" version ".tar.gz"))
+       (uri (hackage-uri "crypto-cipher-types" version))
        (sha256
         (base32
          "03qa1i1kj07pfrxsi7fiaqnnd0vi94jd4jfswbmnm4gp1nvzcwr0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "crypto-cipher-types")))
     (inputs (list ghc-byteable ghc-securemem))
     (home-page "https://github.com/vincenthz/hs-crypto-cipher")
     (synopsis "Generic cryptography cipher types for Haskell")
@@ -565,13 +530,12 @@ for symmetric ciphers.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cipher-aes-" version "/"
-                           "cipher-aes-" version ".tar.gz"))
+       (uri (hackage-uri "cipher-aes" version))
        (sha256
         (base32
          "05ahz6kjq0fl1w66gpiqy0vndli5yx1pbsbw9ni3viwqas4p3cfk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cipher-aes")))
     (inputs (list ghc-byteable ghc-securemem ghc-crypto-cipher-types))
     (native-inputs (list ghc-quickcheck ghc-test-framework
                          ghc-test-framework-quickcheck2
@@ -602,13 +566,12 @@ AES-NI available, or you'll need to use a different implementation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "crypto-random-" version "/"
-                           "crypto-random-" version ".tar.gz"))
+       (uri (hackage-uri "crypto-random" version))
        (sha256
         (base32
          "0139kbbb2h7vshf68y3fvjda29lhj7jjwl4vq78w4y8k8hc7l2hp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "crypto-random")))
     (inputs (list ghc-securemem ghc-vector))
     (home-page "https://github.com/vincenthz/hs-crypto-random")
     (synopsis "Simple cryptographic random related types for Haskell")
@@ -623,13 +586,12 @@ abstraction for CPRNGs.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cprng-aes-" version "/"
-                           "cprng-aes-" version ".tar.gz"))
+       (uri (hackage-uri "cprng-aes" version))
        (sha256
         (base32
          "1wr15kbmk1g3l8a75n0iwbzqg24ixv78slwzwb2q6rlcvq0jlnb4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cprng-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
@@ -667,16 +629,15 @@ percent.
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ed25519/ed25519-"
-             version ".tar.gz"))
+       (uri (hackage-uri "ed25519" version))
        (sha256
         (base32
          "0v8msqvgzimhs7p5ri25hrb1ni2wvisl5rmdxy89fc59py79b9fq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ed25519")))
     (arguments
      `(#:cabal-revision
-       ("3" "1yidh86ymzwmp2b449pwim6vvfcs1qgkkncbixw1zmb7wj6v167v")
+       ("6" "0qyx6cl52fnll8lp6v9133wfvv3zhvq7v2crn441mng520j9wp48")
        ;; We omit these test suites because they require old versions of
        ;; packages and packages we do not have.
        #:configure-flags
@@ -693,33 +654,30 @@ guidelines.")
 (define-public ghc-tls
   (package
     (name "ghc-tls")
-    (version "1.5.5")
+    (version "1.5.8")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "tls/tls-" version ".tar.gz"))
+              (uri (hackage-uri "tls" version))
               (sha256
                (base32
-                "0j1rxxq5lzs584nk19610mk7mmsqqkgfxw2qj74ibb1zsk7baj4a"))))
+                "0rxdv8ab98kd4nqql7djmmi51k4vayq21s38s43sx3rzn0iyla3b"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (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)")
+    (properties '((upstream-name . "tls")))
+    (inputs (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-hourglass
+                  ghc-network))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck))
+    (home-page "http://github.com/vincenthz/hs-tls")
+    (synopsis "TLS/SSL protocol native implementation (Server and Client)")
     (description
      "Native Haskell TLS and SSL protocol implementation for server and client.
 This provides a high-level implementation of a sensitive security protocol,
@@ -733,23 +691,22 @@ extensions.")
 (define-public ghc-hsopenssl
   (package
     (name "ghc-hsopenssl")
-    (version "0.11.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "HsOpenSSL/HsOpenSSL-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0ysdfl8ck3nzhx597fa13dqf31jq5gzwajlak6r91jajks9w0dl5"))))
+    (version "0.11.7.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "HsOpenSSL" version))
+              (sha256
+               (base32
+                "0zxcfa8b0ng97v53vb8fvg2gss89b28xiz83rx38a0h4lsxpn2xf"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "HsOpenSSL")))
+    (inputs (list ghc-network openssl))
     (arguments
      `(#:extra-directories ("openssl")))
-    (inputs
-     (list ghc-network openssl))
-    (home-page "https://github.com/vshabanov/HsOpenSSL")
+    (home-page "https://github.com/haskell-cryptography/HsOpenSSL")
     (synopsis "Partial OpenSSL binding for Haskell")
-    (description "HsOpenSSL is an OpenSSL binding for Haskell.  It can
+    (description
+     "HsOpenSSL is an OpenSSL binding for Haskell.  It can
 generate RSA and DSA keys, read and write PEM files, generate message
 digests, sign and verify messages, encrypt and decrypt messages.  It has
 also some capabilities of creating SSL clients and servers.  This
@@ -766,17 +723,19 @@ implementation of SSL.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "openssl-streams/openssl-streams-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "openssl-streams" version))
        (sha256
         (base32
          "10pnnpzgb5xr811kc9qdk7h2cgn6hk2yiyhnzz8f8p0fjzc0pwjm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "openssl-streams")))
     (inputs
      (list ghc-hsopenssl ghc-io-streams ghc-network))
     (native-inputs
      (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0vfawnfcjrw29qg1n7k6z6bk4bmnk869gjlr9mxw4mzxgl80b2vp")))
     (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
@@ -790,13 +749,12 @@ networking using OpenSSL (by way of HsOpenSSL).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cryptonite-conduit/cryptonite-conduit-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "cryptonite-conduit" version))
        (sha256
         (base32
          "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cryptonite-conduit")))
     (inputs
      (list ghc-conduit
            ghc-conduit-extra
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index d2f706f222..75b84b10a7 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -49,12 +49,12 @@
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/tagsoup/"
-                           "tagsoup-" version ".tar.gz"))
+       (uri (hackage-uri "tagsoup" version))
        (sha256
         (base32
          "1m9sx6gr9y9yxvkmcap8xsks8cnhznvma1mrfl39zljkv005azms"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tagsoup")))
     (native-inputs
      (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/tagsoup")
@@ -76,14 +76,12 @@ for screen-scraping.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cookie/cookie-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "cookie" version))
        (sha256
         (base32
          "10rmdasb7mypbwxdj2mhr810vqhkakpik7hyd8fvj60hng8r8zvh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cookie")))
     (inputs
      (list ghc-old-locale
            ghc-blaze-builder
@@ -104,12 +102,12 @@ for screen-scraping.")
     (version "1.3.8")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://hackage/package/curl/curl-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "curl" version))
               (sha256
                (base32
                 "0vj4hpaa30jz7c702xpsfvqaqdxz28zslsqnsfx6bf6dpwvck1wh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "curl")))
     (inputs
      (list curl))
     (home-page "https://hackage.haskell.org/package/curl")
@@ -126,12 +124,12 @@ This package provides a Haskell binding to libcurl.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/httpd-shed/"
-                           "httpd-shed-" version ".tar.gz"))
+       (uri (hackage-uri "httpd-shed" version))
        (sha256
         (base32
          "19dgdimpzr7pxk7pqvyin6j87gmvnf0rm35gzhmna8qr835wy3sr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "httpd-shed")))
     (inputs
      (list ghc-network-bsd ghc-network-uri ghc-network))
     (home-page "https://hackage.haskell.org/package/httpd-shed")
@@ -149,12 +147,12 @@ requests, and the library is intended for implementing Ajax APIs.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/http-types/"
-                           "http-types-" version ".tar.gz"))
+       (uri (hackage-uri "http-types" version))
        (sha256
         (base32
          "05j00b9nqmwh9zaq9y9x50k81v2pd3j7a71kd91zlnbl8xk4m2jf"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-types")))
     (native-inputs
      (list ghc-doctest ghc-hspec ghc-quickcheck ghc-quickcheck-instances
            hspec-discover))
@@ -169,48 +167,26 @@ both client and server code).")
 (define-public ghc-http
   (package
     (name "ghc-http")
-    (version "4000.3.16")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/HTTP/"
-                           "HTTP-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0bgyj3ahqlyg0jw6qsm2sncp8mklc4h0dj91s043vb3ig01iq2fn"))))
+    (version "4000.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "HTTP" version))
+              (sha256
+               (base32
+                "0lyl5lpkk51xn3dfndh8ksgvwcdsviyigmsnp3d28lbpxkpxhcfz"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-httpd-shed ghc-hunit ghc-test-framework
-           ghc-test-framework-hunit))
-    (inputs
-     (list ghc-case-insensitive
-           ghc-conduit
-           ghc-conduit-extra
-           ghc-http-types
-           ghc-old-time
-           ghc-puremd5
-           ghc-network
-           ghc-network-uri
-           ghc-split))
+    (properties '((upstream-name . "HTTP")))
+    (inputs (list ghc-network ghc-network-uri))
+    (native-inputs (list ghc-httpd-shed
+                         ghc-hunit
+                         ghc-puremd5
+                         ghc-split
+                         ghc-test-framework
+                         ghc-test-framework-hunit))
     (arguments
-     `(#:tests? #f  ; FIXME: currently missing libraries used for tests.
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'create-simple-paths-module
-           (lambda _
-             (call-with-output-file "Paths_HTTP.hs"
-               (lambda (port)
-                 (format port "\
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE NoRebindableSyntax #-}
-{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
-module Paths_HTTP (version) where
-import Data.Version (Version(..))
-version :: Version
-version = Version [~a] []
-" (string-map (lambda (chr) (if (eq? chr #\.) #\, chr)) ,version))))
-             #t)))))
+     `(#:tests? #f ; Tests fail due to missing /etc/protocols?
+       #:cabal-revision ("1"
+                         "04y04vbxbnblpmqqmpl8km4bkcjaj96nbxkssdr1zgbhqisxay5q")))
     (home-page "https://github.com/haskell/HTTP")
     (synopsis "Library for client-side HTTP")
     (description
@@ -222,38 +198,35 @@ responses coming back.")
 (define-public ghc-http-client
   (package
     (name "ghc-http-client")
-    (version "0.7.11")
+    (version "0.7.13.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "http-client/http-client-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "http-client" version))
               (sha256
                (base32
-                "12j7vkpkm2djws6ny7vm2324c7916d0iaf1mbvf4mfjxzy2w7imv"))))
+                "09qfmakjk285jz2rnb53c1m9c764fg8vngfq43ipga1g72h8d3n9"))))
     (build-system haskell-build-system)
-    ;; Tests require access to the web.
-    (arguments `(#:tests? #f))
-    (inputs
-     (list ghc-async
-           ghc-base64-bytestring
-           ghc-blaze-builder
-           ghc-case-insensitive
-           ghc-cookie
-           ghc-data-default-class
-           ghc-exceptions
-           ghc-http-types
-           ghc-iproute
-           ghc-memory
-           ghc-mime-types
-           ghc-monad-control
-           ghc-network
-           ghc-network-uri
-           ghc-random
-           ghc-streaming-commons
-           ghc-zlib))
-    (native-inputs
-     (list ghc-hspec))
+    (properties '((upstream-name . "http-client")))
+    (inputs (list ghc-http-types
+                  ghc-blaze-builder
+                  ghc-network
+                  ghc-streaming-commons
+                  ghc-case-insensitive
+                  ghc-base64-bytestring
+                  ghc-cookie
+                  ghc-random
+                  ghc-mime-types
+                  ghc-iproute
+                  ghc-async
+                  ghc-network-uri))
+    (native-inputs (list ghc-hspec
+                         ghc-monad-control
+                         ghc-zlib
+                         ghc-hspec
+                         ghc-monad-control
+                         ghc-zlib
+                         hspec-discover))
+    (arguments (list #:tests? #f)) ; Tests try to access httpbin.org.
     (home-page "https://github.com/snoyberg/http-client")
     (synopsis "HTTP client engine")
     (description
@@ -267,13 +240,12 @@ for more user-friendly packages.")
     (version "0.3.6.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "http-client-tls/http-client-tls-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "http-client-tls" version))
               (sha256
                (base32
                 "03f8p9gxdzl6slyw1r6vpv2dqhsyjvbaawbjv75kaq0vlj3gz7xi"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-client-tls")))
     ;; Tests require Internet access
     (arguments `(#:tests? #f))
     (inputs
@@ -304,6 +276,7 @@ libraries, such as http-conduit.")
        (sha256
         (base32 "1vfm9qc3zr0rmq2ddgyg13i67020cdk8xqhyzfc2zcn1km2p6r85"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-client-restricted")))
     (inputs
      (list ghc-http-client
            ghc-http-client-tls
@@ -312,7 +285,7 @@ libraries, such as http-conduit.")
            ghc-network
            ghc-network-bsd
            ghc-utf8-string))
-    (home-page "http://hackage.haskell.org/package/http-client-restricted")
+    (home-page "https://hackage.haskell.org/package/http-client-restricted")
     (synopsis "Restrict the servers used by http-client")
     (description
      "This library makes it possible to restrict the HTTP servers that can be
@@ -328,13 +301,12 @@ servers on localhost or only allow connections to a specific server.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "http-date-" version "/"
-                           "http-date-" version ".tar.gz"))
+       (uri (hackage-uri "http-date" version))
        (sha256
         (base32
          "1lzlrj2flcnz3k5kfhf11nk5n8m6kcya0lkwrsnzxgfr3an27y9j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-date")))
     (inputs
      (list ghc-attoparsec))
     (native-inputs
@@ -348,43 +320,44 @@ Date in Haskell.")
 (define-public ghc-http2
   (package
     (name "ghc-http2")
-    (version "3.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "http2-" version "/"
-                           "http2-" version ".tar.gz"))
-       (sha256
-        (base32
-         "13c2z35gdimncgpyg5dn5cpjvd83rbrigc8b40crg36678m0k0d1"))))
+    (version "3.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "http2" version))
+              (sha256
+               (base32
+                "1kv99i3pnnx31xndlkaczrpd2j5mvzbqlfz1kaw6cwlwkdnl5bhv"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-async
-           ghc-doctest
-           ghc-glob
-           ghc-hspec
-           hspec-discover
-           ghc-typed-process))
+    (properties '((upstream-name . "http2")))
+    (inputs (list ghc-async
+                  ghc-case-insensitive
+                  ghc-http-types
+                  ghc-network
+                  ghc-network-byte-order
+                  ghc-psqueues
+                  ghc-time-manager
+                  ghc-unix-time
+                  ghc-network-run
+                  ghc-cryptonite
+                  ghc-aeson
+                  ghc-aeson-pretty
+                  ghc-base16-bytestring
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-word8))
+    (native-inputs (list ghc-doctest
+                         ghc-hspec
+                         ghc-typed-process
+                         ghc-hspec
+                         ghc-typed-process
+                         ghc-hspec
+                         ghc-glob
+                         ghc-hspec
+                         hspec-discover))
     (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
+    (description
+     "This package provides a HTTP/2.0 library including frames
 and HPACK.  Currently HTTP/2 16 framing and HPACK 10 is supported.")
     (license license:bsd-3)))
 
@@ -395,13 +368,12 @@ and HPACK.  Currently HTTP/2 16 framing and HPACK 10 is supported.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "http-conduit-" version "/" "http-conduit-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "http-conduit" version))
        (sha256
         (base32
          "1bj24phbcb7s3k6v48l5gk82m3m23j8zy9l7c5ccxp3ghn9z5gng"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-conduit")))
     ;; FIXME: `httpLbs TLS` in test-suite `test` fails with
     ;; ConnectionFailure getProtocolByName: does not exist (no such protocol
     ;; name: tcp)
@@ -450,35 +422,30 @@ which allow you to avoid direct usage of conduits.")
 (define-public ghc-http-reverse-proxy
   (package
     (name "ghc-http-reverse-proxy")
-    (version "0.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/http-reverse-proxy/"
-             "http-reverse-proxy-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1a6i5njf85b2lhg8m83njagcf09wih5q2irnyb2890s724qr277v"))))
+    (version "0.6.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "http-reverse-proxy" version))
+              (sha256
+               (base32
+                "0a0fc9rqr1crbb1sbq3gzbkwjcfff662d4bgmy3vzspk7ky697ld"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-hspec ghc-warp ghc-http-conduit))
-    (home-page
-     "https://github.com/fpco/http-reverse-proxy")
+    (properties '((upstream-name . "http-reverse-proxy")))
+    (inputs (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 (list ghc-hspec ghc-warp ghc-http-conduit))
+    (home-page "https://github.com/fpco/http-reverse-proxy")
     (synopsis
      "Reverse proxy HTTP requests, either over raw sockets or with WAI")
     (description
@@ -494,14 +461,12 @@ approach performs full request/response parsing via WAI and http-conduit.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/wai/wai-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "wai" version))
        (sha256
         (base32
          "1y19h9v0cq1fl17ywcyyvd6419fhgyw2s0yk0ki8z60021adcx2m"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wai")))
     (inputs
      (list ghc-bytestring-builder
            ghc-unix-compat
@@ -521,18 +486,16 @@ communication between web applications and web servers.")
 (define-public ghc-wai-logger
   (package
     (name "ghc-wai-logger")
-    (version "2.3.6")
+    (version "2.4.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/wai-logger/wai-logger-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "wai-logger" version))
        (sha256
         (base32
-         "0hbm7if28p6qa36cgpyq6i569275si53z9gsl2g1z8x09z3xiyz2"))))
+         "02i9jsy5gdglqwwk5gcvax8y498lz9flrfp4v9nrv8rmrmd66zh5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wai-logger")))
     (arguments `(#:tests? #f)) ; FIXME: Tests cannot find libraries exported
                                ; by propagated-inputs.
     (inputs
@@ -554,40 +517,39 @@ communication between web applications and web servers.")
 (define-public ghc-wai-extra
   (package
     (name "ghc-wai-extra")
-    (version "3.1.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/wai-extra/wai-extra-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1avf7bjcsbs8l6klp5kkd0cd2dc5n0j0a2yf8813pnwfn5b7qyd4"))))
+    (version "3.1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "wai-extra" version))
+              (sha256
+               (base32
+                "1h4cqd5akrq0vhv3l0fzryy7qw0c2jb58lngx7x8ij63bckjs3fz"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list hspec-discover ghc-hspec ghc-hunit ghc-zlib))
-    (home-page "https://github.com/yesodweb/wai")
+    (properties '((upstream-name . "wai-extra")))
+    (inputs (list ghc-aeson
+                  ghc-ansi-terminal
+                  ghc-base64-bytestring
+                  ghc-call-stack
+                  ghc-case-insensitive
+                  ghc-cookie
+                  ghc-data-default-class
+                  ghc-fast-logger
+                  ghc-http-types
+                  ghc-hunit
+                  ghc-iproute
+                  ghc-network
+                  ghc-resourcet
+                  ghc-streaming-commons
+                  ghc-vault
+                  ghc-wai
+                  ghc-wai-logger
+                  ghc-warp
+                  ghc-word8))
+    (native-inputs (list ghc-hspec ghc-temporary ghc-zlib hspec-discover))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0dyvg2bb37im790757khncxpnf45451dd8575p736ry4g8rpqgpw")))
+    (home-page "http://github.com/yesodweb/wai")
     (synopsis "Some basic WAI handlers and middleware")
     (description "This library provides basic WAI handlers and middleware
 functionality.")
@@ -600,13 +562,12 @@ functionality.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "wai-conduit-" version "/"
-                           "wai-conduit-" version ".tar.gz"))
+       (uri (hackage-uri "wai-conduit" version))
        (sha256
         (base32
          "07yn41rn2skd5p3wqqa09wa761vj7ibl8l19gh4bi4i8slxhk417"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wai-conduit")))
     (inputs
      (list ghc-conduit ghc-http-types ghc-wai ghc-blaze-builder))
     (home-page "https://github.com/yesodweb/wai")
@@ -622,20 +583,14 @@ Haskell's Web Application Interface (WAI).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "bsb-http-chunked/bsb-http-chunked-"
-             version ".tar.gz"))
+       (uri (hackage-uri "bsb-http-chunked" version))
        (sha256
         (base32
          "0z0f18yc6zlwh29c6175ivfcin325lvi4irpvv0n3cmq7vi0k0ql"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bsb-http-chunked")))
     (arguments
-     `(;; XXX: As of 0.0.4, one property test ("Identical output as Blaze")
-       ;; fails on i686-linux.
-       #:tests? ,(and (not (%current-target-system))
-                      (not (string-prefix? "i686" (or (%current-target-system)
-                                                      (%current-system)))))
+     `(#:tests? #f ; Tests fail: Variable not in scope.
        #:cabal-revision
        ("3" "15hg352id2f4x0dnvv47bdiz6gv5hp5a2mki9yzmhc7ajpk31mdd")))
     (native-inputs
@@ -656,16 +611,15 @@ transfers.")
 (define-public ghc-warp
   (package
     (name "ghc-warp")
-    (version "3.3.17")
+    (version "3.3.23")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "warp-" version "/" "warp-" version
-                           ".tar.gz"))
+       (uri (hackage-uri "warp" version))
        (sha256
-        (base32 "0v54ca3wpa79gdyiikwhbv9h8b5vr3d60piq3ndb2v7s7fi1qpm0"))))
+        (base32 "0y1r7czq5zrgklqrx1b9pmxn5lhmf7zpqdjz7hfmnzsmr3vndmms"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "warp")))
     (inputs
      (list ghc-async
            ghc-auto-update
@@ -685,7 +639,8 @@ transfers.")
            ghc-simple-sendfile
            ghc-unliftio
            ghc-x509
-           ghc-http2))
+           ghc-http2
+           ghc-recv))
     (native-inputs
      (list curl
            ghc-silently
@@ -709,14 +664,12 @@ based WAI (Web Application Interface in Haskell).")
   (source
     (origin
       (method url-fetch)
-      (uri (string-append
-            "https://hackage.haskell.org/package/"
-            "tls-session-manager/tls-session-manager-"
-             version ".tar.gz"))
+      (uri (hackage-uri "tls-session-manager" version))
       (sha256
         (base32
           "134kb5nz668f4xrr5g98g7fc1bwb3ri6q433a1i6asjkniwpy85s"))))
   (build-system haskell-build-system)
+  (properties '((upstream-name . "tls-session-manager")))
   (inputs
     (list ghc-auto-update ghc-clock ghc-psqueues ghc-tls))
   (home-page "https://hackage.haskell.org/package/tls-session-manager")
@@ -728,28 +681,25 @@ limitation, automatic pruning, energy saving and replay resistance.")
 (define-public ghc-warp-tls
   (package
     (name "ghc-warp-tls")
-    (version "3.3.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "warp-tls-" version "/"
-                           "warp-tls-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0b9viw26ymzq4q8snfddz3w59sqcf5ankxnw6f99iacxjhk6zs6m"))))
+    (version "3.3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "warp-tls" version))
+              (sha256
+               (base32
+                "00vgs9v7k0fapl05knqii9g47svf4lapb7ixkll7xr4zvmkk0r0m"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "warp-tls")))
+    (inputs (list ghc-wai
+                  ghc-warp
+                  ghc-data-default-class
+                  ghc-tls
+                  ghc-cryptonite
+                  ghc-network
+                  ghc-streaming-commons
+                  ghc-tls-session-manager
+                  ghc-unliftio))
+    (home-page "http://github.com/yesodweb/wai")
     (synopsis "SSL/TLS support for Warp")
     (description "This package provides SSL/TLS support for Warp,
 a WAI handler, via the native Haskell TLS implementation.")
@@ -758,36 +708,34 @@ a WAI handler, via the native Haskell TLS implementation.")
 (define-public ghc-websockets
   (package
     (name "ghc-websockets")
-    (version "0.12.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/websockets/websockets-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1b92a41l2var1ccg350mh2bjmb2plb6d79yzvmlwkd41nifmmi44"))))
+    (version "0.12.7.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "websockets" version))
+              (sha256
+               (base32
+                "0g3z0n4irf3gvbdf9p97jq05ybdg0gwjy5bj4nfc7ivsvyhaic6k"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (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")
+    (properties '((upstream-name . "websockets")))
+    (inputs (list ghc-async
+                  ghc-attoparsec
+                  ghc-base64-bytestring
+                  ghc-bytestring-builder
+                  ghc-case-insensitive
+                  ghc-clock
+                  ghc-network
+                  ghc-random
+                  ghc-sha
+                  ghc-streaming-commons
+                  ghc-entropy))
+    (native-inputs (list ghc-hunit ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1yx97y6jl74vy200y43vjxfyzx338kh10dx8vxkjhr0mfh36wldq")))
+    (home-page "http://jaspervdj.be/websockets")
+    (synopsis "Write WebSocket-capable servers in Haskell")
     (description
      "This library allows you to write WebSocket-capable servers.
 
@@ -812,14 +760,12 @@ See also:
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/wai-websockets/wai-websockets-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "wai-websockets" version))
        (sha256
         (base32
          "0b2xmdsrsqpssyib53wbr6r8hf75789ndyyanv37sv99iyqcwz4i"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wai-websockets")))
     (inputs
      (list ghc-wai ghc-case-insensitive ghc-network ghc-websockets
            ghc-http-types))
@@ -835,27 +781,25 @@ See also:
 (define-public ghc-xss-sanitize
   (package
     (name "ghc-xss-sanitize")
-    (version "0.3.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/xss-sanitize/xss-sanitize-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1d72s3a6520iwwc1wbn9v2znqgbw6a5wwzb23iq8ny9ccnjyx1dk"))))
+    (version "0.3.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "xss-sanitize" version))
+              (sha256
+               (base32
+                "1lmmyh28mb1k44m63m7qx6iy4x2fgqq5srmky47dsm0fby9iag1h"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-tagsoup ghc-utf8-string ghc-css-text ghc-network-uri))
-    (native-inputs
-     (list ghc-attoparsec ghc-hspec ghc-hunit))
-    (home-page "https://github.com/yesodweb/haskell-xss-sanitize")
+    (properties '((upstream-name . "xss-sanitize")))
+    (inputs (list ghc-attoparsec ghc-css-text ghc-network-uri ghc-tagsoup
+                  ghc-utf8-string))
+    (native-inputs (list ghc-hunit ghc-hspec))
+    (home-page "https://github.com/yesodweb/haskell-xss-sanitize#readme")
     (synopsis "Sanitize untrusted HTML to prevent XSS attacks")
-    (description "This library provides @code{sanitizeXSS}.  Run untrusted
+    (description
+     "This library provides @code{sanitizeXSS}.  Run untrusted
 HTML through @code{Text.HTML.SanitizeXSS.sanitizeXSS} to prevent XSS
 attacks.")
-    (license license:bsd-3)))
+    (license license:bsd-2)))
 
 (define-public ghc-css-text
   (package
@@ -864,14 +808,12 @@ attacks.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/css-text/css-text-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "css-text" version))
        (sha256
         (base32
          "0ynd9f4hn2sfwqzbsa0y7phmxq8za7jiblpjwx0ry8b372zhgxaz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "css-text")))
     (inputs
      (list ghc-attoparsec ghc-hspec ghc-quickcheck))
     (home-page "https://www.yesodweb.com/")
@@ -886,13 +828,12 @@ Haskell.")
     (version "0.1.0.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "mime-types/mime-types-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "mime-types" version))
               (sha256
                (base32
                 "1lkipa4v73z3l5lqs6sdhl898iq41kyxv2jb9agsajzgd58l6cha"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mime-types")))
     (home-page "https://github.com/yesodweb/wai")
     (synopsis "Basic MIME type handling types and functions")
     (description
@@ -906,14 +847,12 @@ Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/html/html-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "html" version))
        (sha256
         (base32
          "0q9hmfii62kc82ijlg238fxrzxhsivn42x5wd6ffcr9xldg4jd8c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "html")))
     (home-page
      "https://hackage.haskell.org/package/html")
     (synopsis "HTML combinator library")
@@ -929,13 +868,12 @@ documents.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/html-conduit/"
-             "html-conduit-" version ".tar.gz"))
+       (uri (hackage-uri "html-conduit" version))
        (sha256
         (base32
          "09bwrdam3y47kqllgg6w098ghqb8jb10dp4wxirsvx5ddpx9zpi6"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "html-conduit")))
     (inputs
      (list ghc-resourcet
            ghc-conduit
@@ -963,13 +901,12 @@ entity decoding bugfixes applied.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "blaze-html/blaze-html-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "blaze-html" version))
        (sha256
         (base32
          "0k1r1hddjgqighazcazxrx6xfhvy2gm8il8l82ainv3cai13yl30"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "blaze-html")))
     (arguments
      `(#:tests? #f ; TODO: Depends on quickcheck<2.14
        #:cabal-revision
@@ -979,7 +916,7 @@ entity decoding bugfixes applied.")
     (native-inputs
      (list ghc-hunit ghc-quickcheck ghc-test-framework
            ghc-test-framework-hunit ghc-test-framework-quickcheck2))
-    (home-page "http://jaspervdj.be/blaze")
+    (home-page "https://jaspervdj.be/blaze")
     (synopsis "Fast HTML combinator library")
     (description "This library provides HTML combinators for Haskell.")
     (license license:bsd-3)))
@@ -987,56 +924,54 @@ entity decoding bugfixes applied.")
 (define-public ghc-aeson
   (package
     (name "ghc-aeson")
-    (version "1.5.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/aeson/aeson-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1s5z4bgb5150h6a4cjf5vh8dmyrn6ilh29gh05999v6jwd5w6q83"))))
-    (build-system haskell-build-system)
+    (version "2.0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "aeson" version))
+              (sha256
+               (base32
+                "09dk0j33n262dm75vff3y3i9fm6lh06dyqswwv7a6kvnhhmhlxhr"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "aeson")))
+    (inputs (list ghc-base-compat-batteries
+                  ghc-time-compat
+                  ghc-attoparsec
+                  ghc-data-fix
+                  ghc-dlist
+                  ghc-hashable
+                  ghc-indexed-traversable
+                  ghc-onetuple
+                  ghc-primitive
+                  ghc-quickcheck
+                  ghc-scientific
+                  ghc-semialign
+                  ghc-strict
+                  ghc-tagged
+                  ghc-text-short
+                  ghc-th-abstraction
+                  ghc-these
+                  ghc-unordered-containers
+                  ghc-uuid-types
+                  ghc-vector
+                  ghc-witherable))
+    (native-inputs (list ghc-base-compat
+                         ghc-base-orphans
+                         ghc-base16-bytestring
+                         ghc-diff
+                         ghc-generic-deriving
+                         ghc-integer-logarithms
+                         ghc-quickcheck-instances
+                         ghc-tasty
+                         ghc-tasty-golden
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
     (arguments
-     `(#:tests? #f ; FIXME: testing libraries are missing.
-       #:cabal-revision
-       ("2" "1zxkarvmbgc2cpcc9sx1rlqm7nfh473052898ypiwk8azawp1hbj")))
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (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)
-;       ("ghc-base-orphans" ,ghc-base-orphans)
-;       ("ghc-diff" ,ghc-diff)
-;       ("ghc-generic-deriving" ,ghc-generic-deriving)
-;       ("ghc-hashable-time" ,ghc-hashable-time)
-;       ("ghc-integer-logarithms" ,ghc-integer-logarithms)
-;       ("ghc-quickcheck" ,ghc-quickcheck)
-;       ("ghc-quickcheck-instances" ,ghc-quickcheck-instances)
-;       ("ghc-tasty" ,ghc-tasty)
-;       ("ghc-tasty-golden" ,ghc-tasty-golden)
-;       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
-    (home-page "https://github.com/bos/aeson")
+     `(#:cabal-revision ("1"
+                         "1zrgn63jzrpk3n3vd44zkzgw7kb5qxlvhx4nk6g3sswwrsz5j32i")))
+    (home-page "https://github.com/haskell/aeson")
     (synopsis "Fast JSON parsing and encoding")
-    (description "This package provides a JSON parsing and encoding library
+    (description
+     "This package provides a JSON parsing and encoding library
 for Haskell, optimized for ease of use and high performance.  (A note on
 naming: in Greek mythology, Aeson was the father of Jason.)")
     (license license:bsd-3)))
@@ -1047,13 +982,12 @@ naming: in Greek mythology, Aeson was the father of Jason.)")
     (version "0.8.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/aeson-pretty/aeson-pretty-"
-                    version ".tar.gz"))
+              (uri (hackage-uri "aeson-pretty" version))
               (sha256
                (base32
                 "021az9az6xik9c9s3rnar5fr1lgy2h3igibf5ixnc7ps3m2lzg2x"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "aeson-pretty")))
     (inputs
      (list ghc-aeson
            ghc-base-compat
@@ -1080,12 +1014,12 @@ essentially the opposite of pretty-printing.")
     (version "0.8.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "aeson-qq/aeson-qq-" version ".tar.gz"))
+              (uri (hackage-uri "aeson-qq" version))
               (sha256
                (base32
                 "0dpklq2xdhrkg1rdc7zfdjnzm6c3qxx2i1xskrqdxpqi84ffnlyh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "aeson-qq")))
     (inputs
      (list ghc-base-compat
            ghc-attoparsec
@@ -1106,30 +1040,27 @@ of a JSON value into a @code{Data.Aeson.Value}.")
 (define-public ghc-aeson-better-errors
   (package
     (name "ghc-aeson-better-errors")
-    (version "0.9.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/aeson-better-errors/aeson-better-errors-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "09vkyrhwak3bmpfsqcd2az8hfqqkxyhg468hv5avgisy0nzh3w38"))))
+    (version "0.9.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "aeson-better-errors" version))
+              (sha256
+               (base32
+                "05yibq9kqbjb8rh84n12sbax05amvd8jccpja0hyadz58pjy4jnk"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     "Better error messages when decoding JSON values in Haskell")
+    (properties '((upstream-name . "aeson-better-errors")))
+    (inputs (list ghc-aeson
+                  ghc-unordered-containers
+                  ghc-dlist
+                  ghc-scientific
+                  ghc-vector
+                  ghc-transformers-compat
+                  ghc-void))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0wzvrmhn5q2x1mcv43cyxhlck815ldkhx7c7gz5ijjyva1iicgn2")))
+    (home-page "https://github.com/hdgarrood/aeson-better-errors")
+    (synopsis "Better error messages when decoding JSON values in Haskell")
     (description
      "Gives you the tools to build parsers to decode JSON values, and gives
 good error messages when parsing fails.  See also
@@ -1143,16 +1074,17 @@ good error messages when parsing fails.  See also
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/multipart/multipart-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "multipart" version))
        (sha256
         (base32
          "0p6n4knxpjv70nbl6cmd6x7gkdjsjqp4ya7fz00bfrqp7jvhlivn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "multipart")))
     (inputs
      (list ghc-stringsearch))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "03gaapwnvn843hpm5qwdci9df1wf383msd42p8w9ghilpfjj4qy9")))
     (home-page
      "http://www.github.com/silkapp/multipart")
     (synopsis
@@ -1168,15 +1100,17 @@ good error messages when parsing fails.  See also
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/uri-encode/uri-encode-"
-             version ".tar.gz"))
+       (uri (hackage-uri "uri-encode" version))
        (sha256
         (base32
          "0lj2h701af12539p957rw24bxr07mfqd5r4h52i42f43ax165767"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "uri-encode")))
     (inputs
      (list ghc-utf8-string ghc-network-uri))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "03pmvbi56gmg1z2wr3glncc7dbyh666bqp565inh31qzsp9zwmgj")))
     (home-page "https://hackage.haskell.org/package/uri-encode")
     (synopsis "Unicode aware uri-encoding")
     (description "Unicode aware uri-encoding for Haskell.")
@@ -1189,13 +1123,12 @@ good error messages when parsing fails.  See also
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "path-pieces-" version "/"
-                           "path-pieces-" version ".tar.gz"))
+       (uri (hackage-uri "path-pieces" version))
        (sha256
         (base32
          "0vx3sivcsld76058925hym2j6hm3g71f0qjr7v59f1g2afgx82q8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "path-pieces")))
     (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")
@@ -1210,13 +1143,12 @@ Haskell data types to and from route pieces.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "skein-" version "/"
-                           "skein-" version ".tar.gz"))
+       (uri (hackage-uri "skein" version))
        (sha256
         (base32
          "1jdqdk0rz2wnvw735clnj8jh0a9rkrbqjg7vk3w6wczdql6cm0pq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "skein")))
     (inputs (list ghc-cereal ghc-tagged ghc-crypto-api))
     (native-inputs (list ghc-hspec))
     (home-page "https://github.com/yesodweb/path-pieces")
@@ -1236,13 +1168,12 @@ This Haskell package uses bindings to the optimized C implementation of Skein.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "clientsession-" version "/"
-                           "clientsession-" version ".tar.gz"))
+       (uri (hackage-uri "clientsession" version))
        (sha256
         (base32
          "0s6h4ykj16mpf7nlw2iqn2ji0p8g1fn5ni0s7yqaili6vv2as5ar"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "clientsession")))
     (inputs (list ghc-cereal
                   ghc-tagged
                   ghc-crypto-api
@@ -1265,68 +1196,58 @@ avoid any issues with characters.")
 (define-public ghc-yesod-core
   (package
     (name "ghc-yesod-core")
-    (version "1.6.21.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "yesod-core-" version "/"
-                           "yesod-core-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0wmh7ip318p89lyy6k5mvxkkpq43knp41wlq9iaf3icz0ahqdmb7"))))
+    (version "1.6.24.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "yesod-core" version))
+              (sha256
+               (base32
+                "19ilgm73108ki1hvqc86kir0yrx36vp9g45na6g8dmfsvk9izr10"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-wai
-                  ghc-extra
-                  ghc-shakespeare
-                  ghc-blaze-builder
+    (properties '((upstream-name . "yesod-core")))
+    (inputs (list ghc-aeson
+                  ghc-auto-update
+                  ghc-blaze-html
+                  ghc-blaze-markup
+                  ghc-case-insensitive
+                  ghc-cereal
                   ghc-clientsession
+                  ghc-conduit
+                  ghc-conduit-extra
+                  ghc-cookie
+                  ghc-entropy
+                  ghc-fast-logger
+                  ghc-http-types
+                  ghc-memory
+                  ghc-monad-logger
+                  ghc-path-pieces
+                  ghc-primitive
                   ghc-random
-                  ghc-cereal
-                  ghc-old-locale
+                  ghc-resourcet
+                  ghc-shakespeare
+                  ghc-unix-compat
                   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
+                  ghc-wai-extra
                   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))
+                  ghc-word8))
     (native-inputs (list ghc-hspec
-                         ghc-path-pieces
                          ghc-hunit
+                         ghc-async
+                         ghc-hspec
                          ghc-hspec-expectations
-                         ghc-quickcheck
                          ghc-network
-                         ghc-async
-                         ghc-streaming-commons
-                         ghc-wai-extra))
-    (home-page "https://www.yesodweb.com")
+                         ghc-streaming-commons))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1406s7is60ji6nn3h1mafkdh7729ipq3i06cqsq77hz2ilj264jl")))
+    (home-page "http://www.yesodweb.com/")
     (synopsis "Core package for the Yesod web framework")
-    (description "This Haskell package provides all core functionality, for
+    (description
+     "This Haskell package provides all core functionality, for
 Yesod, on which other packages can be built.  It provides dispatch, handler
 functions, widgets, etc.")
     (license license:expat)))
@@ -1334,18 +1255,15 @@ functions, widgets, etc.")
 (define-public ghc-yesod-persistent
   (package
     (name "ghc-yesod-persistent")
-    (version "1.6.0.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "yesod-persistent-" version "/"
-                           "yesod-persistent-" version ".tar.gz"))
-       (sha256
-        (base32
-         "102xmp7n08sk1g5rv31jpln2v9kqf1zsqsnmi83mnhmgggcbj1k4"))))
+    (version "1.6.0.8")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "yesod-persistent" version))
+              (sha256
+               (base32
+                "02vm0qm0yxqn6x61iir81wf6ibwnf8gkia8lw71fgpxgav154ig6"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; FIXME: hspec-discover not available in PATH.
+    (properties '((upstream-name . "yesod-persistent")))
     (inputs (list ghc-yesod-core
                   ghc-persistent
                   ghc-persistent-template
@@ -1353,9 +1271,9 @@ functions, widgets, etc.")
                   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/")
+    (native-inputs (list ghc-hspec ghc-wai-extra ghc-persistent-sqlite
+                         hspec-discover))
+    (home-page "http://www.yesodweb.com/")
     (synopsis "Helpers for using Persistent from Yesod")
     (description "This Haskell package provides helpers for using Persistent
 from Yesod.")
@@ -1363,81 +1281,75 @@ from Yesod.")
 
 (define-public ghc-yesod-form
     (package
-    (name "ghc-yesod-form")
-    (version "1.7.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/yesod-form/yesod-form-"
-               version
-               ".tar.gz"))
-        (sha256
-          (base32
-            "170gby381h5pg9njn908cyx2931yiv79x3rc5npg2rd74kif06vi"))))
-    (build-system haskell-build-system)
-    (inputs
-      (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
+      (name "ghc-yesod-form")
+      (version "1.7.3")
+      (source (origin
+                (method url-fetch)
+                (uri (hackage-uri "yesod-form" version))
+                (sha256
+                 (base32
+                  "10y3mfh96sicqyzngvl7f4wrjgkvl3znqnh71s8gx1vf7158sjww"))))
+      (build-system haskell-build-system)
+      (properties '((upstream-name . "yesod-form")))
+      (inputs (list ghc-aeson
+                    ghc-attoparsec
+                    ghc-blaze-builder
+                    ghc-blaze-html
+                    ghc-blaze-markup
+                    ghc-byteable
+                    ghc-data-default
+                    ghc-email-validate
+                    ghc-persistent
+                    ghc-resourcet
+                    ghc-shakespeare
+                    ghc-wai
+                    ghc-xss-sanitize
+                    ghc-yesod-core
+                    ghc-yesod-persistent
+                    ghc-network-uri))
+      (native-inputs (list ghc-hspec))
+      (home-page "http://www.yesodweb.com/")
+      (synopsis "Form handling support for Yesod Web Framework")
+      (description
+       "This Haskell package provides a set of basic form inputs such
 as text, number, time, checkbox, select, textarea, etc through the
 @code{Yesod.Form.Fields} module.  Also, there is @code{Yesod.Form.Nic} module
 providing richtext field using Nic editor.")
-    (license license:expat)))
+      (license license:expat)))
 
 (define-public ghc-yesod
   (package
     (name "ghc-yesod")
-    (version "1.6.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/yesod/yesod-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "13r0ispprj41kgn2rkc7zhy1rxfmgpjbmdlnys15h0ihhh3zhw2f"))))
+    (version "1.6.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "yesod" version))
+              (sha256
+               (base32
+                "1qglaxqx96c7wi4817ff67c9g2fxlnjzdpgic458i80khpdlmb5c"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "yesod")))
+    (inputs (list ghc-aeson
+                  ghc-conduit
+                  ghc-data-default-class
+                  ghc-fast-logger
+                  ghc-file-embed
+                  ghc-monad-logger
+                  ghc-shakespeare
+                  ghc-streaming-commons
+                  ghc-unordered-containers
+                  ghc-wai
+                  ghc-wai-extra
+                  ghc-wai-logger
+                  ghc-warp
+                  ghc-yaml
+                  ghc-yesod-core
+                  ghc-yesod-form
+                  ghc-yesod-persistent))
+    (home-page "http://www.yesodweb.com/")
     (synopsis "Framework for creating type-safe, RESTful web applications")
-    (description "The Haskell package package groups together the various
+    (description
+     "The Haskell package package groups together the various
 Yesod related packages into one cohesive whole.  This is the version of Yesod,
 whereas most of the core code lives in @code{ghc-yesod-core}.")
     (license license:expat)))
@@ -1449,13 +1361,12 @@ whereas most of the core code lives in @code{ghc-yesod-core}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hxt-charproperties/hxt-charproperties-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "hxt-charproperties" version))
        (sha256
         (base32
          "0jm98jddbsd60jc2bz8wa71rslagbaqf00ia7fvfsaiaa54nk0r8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hxt-charproperties")))
     (home-page "https://github.com/UweSchmidt/hxt")
     (synopsis "Character properties and classes for XML and Unicode")
     (description
@@ -1471,14 +1382,12 @@ supported Unicode version is 7.0.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hxt-unicode/hxt-unicode-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "hxt-unicode" version))
        (sha256
         (base32
          "0rj48cy8z4fl3zpg5bpa458kqr83adav6jnqv4i71dclpprj6n3v"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hxt-unicode")))
     (inputs
      (list ghc-hxt-charproperties))
     (home-page
@@ -1499,13 +1408,12 @@ ignored.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hxt-regex-xmlschema/hxt-regex-xmlschema-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "hxt-regex-xmlschema" version))
        (sha256
         (base32
          "0ynrf65m7abq2fjnarlwq6i1r99pl89npibxx05rlplcgpybrdmr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hxt-regex-xmlschema")))
     (inputs
      (list ghc-hxt-charproperties ghc-hunit))
     (home-page "https://wiki.haskell.org/Regular_expressions_for_XML_Schema")
@@ -1523,14 +1431,12 @@ derivations of regular expressions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hxt/hxt-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "hxt" version))
        (sha256
         (base32
          "1n9snbdl46x23ka7bbsls1vsn0plpmfmbpbl0msjfm92fkk2yq7g"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hxt")))
     (outputs '("out" "static" "doc"))
     (inputs
      (list ghc-hxt-charproperties ghc-hxt-unicode ghc-hxt-regex-xmlschema
@@ -1553,6 +1459,7 @@ introduces a more general approach for processing XML with Haskell.")
                (base32
                 "0wlq9s01icalnvjkkilx5zaqp3ff4v5limj1xy8i18qpzjspqdsh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hxt-xpath")))
     (inputs (list ghc-hxt))
     (home-page "https://github.com/UweSchmidt/hxt")
     (synopsis "The XPath modules for HXT")
@@ -1569,12 +1476,12 @@ from them.  Some primitives have both a functional and an arrow interface.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "http-common/http-common-" version ".tar.gz"))
+       (uri (hackage-uri "http-common" version))
        (sha256
         (base32
          "1xpbnfac0fqa5r670ggwm4kq3cmz9jpaw9bx40j9w9qiw6xi4i28"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-common")))
     (inputs
      (list ghc-base64-bytestring
            ghc-blaze-builder
@@ -1594,56 +1501,69 @@ pipes-http re-export this package's types and functions.")
 (define-public ghc-http-streams
   (package
     (name "ghc-http-streams")
-    (version "0.8.9.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "http-streams/http-streams-" version ".tar.gz"))
-       (sha256
-        (base32
-         "03xdcb0v735xdrkjlm1w56mskh3x08cbsjrcd7wn4li65ixc20xa"))))
+    (version "0.8.9.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "http-streams" version))
+              (sha256
+               (base32
+                "1h8nnp1y4ngv6mwr3fxv428kcvrd3ming179sza8fkn49pcwdlxs"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "http-streams")))
+    (inputs (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))
+    (native-inputs (list ghc-hunit
+                         ghc-lifted-base
+                         ghc-aeson-pretty
+                         ghc-hspec
+                         ghc-hspec-expectations
+                         ghc-random
+                         ghc-snap-core
+                         ghc-snap-server))
+    (home-page "https://github.com/aesiniath/http-streams/")
     (synopsis "HTTP client using io-streams")
-    (description "An HTTP client using the Snap Framework's io-streams
+    (description
+     "An HTTP client using the Snap Framework's io-streams
 library to handle the streaming IO.  The API is optimized for ease of
 use for the rather common case of code needing to query web services and
 deal with the result.")
     (license license:bsd-3)))
 
+;; Breaks cycle between ghc-http-streams and ghc-snap-server
+(define-public ghc-http-streams-bootstrap
+  (package
+    (inherit ghc-http-streams)
+    (name "ghc-http-streams-bootstrap")
+    (arguments `(#:tests? #f))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
 (define-public ghc-snap-core
   (package
     (name "ghc-snap-core")
-    (version "1.0.4.2")
+    (version "1.0.5.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "snap-core/snap-core-" version ".tar.gz"))
+       (uri (hackage-uri "snap-core" version))
        (sha256
         (base32
-         "0zxdhx4wk70bkn71574lyz3zhq79yy98rv05r4564rd100xw3fqs"))))
+         "0hf671g7h4nikfvi05q3mmcxhfcsh874dkansssn0mc68k9fsak4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "snap-core")))
     (arguments
-     `(#:tests? #f ; TODO: Fail to compile.
-       #:cabal-revision
-       ("1" "065v61clskzikywv0gy9n4fjaszi2fnjklal83kqbzhzzgkf83ng")))
+     `(#:cabal-revision
+       ("3" "02r6plphl4vqig3xap9amdib0qjd98nqpn5jhy6hsbiwh3p7cy9b")))
     (inputs
      (list ghc-old-locale
            ghc-hunit
@@ -1685,12 +1605,12 @@ contains the core definitions and types for the Snap framework.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "snap-server/snap-server-" version ".tar.gz"))
+       (uri (hackage-uri "snap-server" version))
        (sha256
         (base32
          "0w4yv9a5ilpma0335ariwap2iscmdbaaif88lq3cm7px910nyc4j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "snap-server")))
     (inputs
      (list ghc-attoparsec
            ghc-blaze-builder
@@ -1712,12 +1632,20 @@ contains the core definitions and types for the Snap framework.")
            ghc-threads
            ghc-hunit
            ghc-quickcheck
-           ghc-http-streams
+           ghc-http-streams-bootstrap
            ghc-http-common
            ghc-parallel
            ghc-test-framework
            ghc-test-framework-hunit
            ghc-test-framework-quickcheck2))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "snap-server.cabal"
+               (("\\b(attoparsec|base|bytestring|time)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "http://snapframework.com/")
     (synopsis "Web server for the Snap Framework")
     (description "Snap is a simple and fast web development framework
@@ -1737,13 +1665,12 @@ protocol.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/js-jquery/js-jquery-"
-         version ".tar.gz"))
+        (hackage-uri "js-jquery" version))
        (sha256
         (base32
          "16q68jzbs7kp07dnq8cprdcc8fd41rim38039vg0w4x11lgniq70"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "js-jquery")))
     (arguments `(#:tests? #f)) ; tests do network IO
     (home-page "https://github.com/ndmitchell/js-jquery")
     (synopsis "Obtain minified jQuery code")
@@ -1763,13 +1690,12 @@ users (e.g. Debian).")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/js-flot/js-flot-"
-         version ".tar.gz"))
+        (hackage-uri "js-flot" version))
        (sha256
         (base32
          "0yjyzqh3qzhy5h3nql1fckw0gcfb0f4wj9pm85nafpfqp2kg58hv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "js-flot")))
     (inputs
      (list ghc-http))
     (home-page "https://github.com/ndmitchell/js-flot")
@@ -1785,40 +1711,35 @@ requirements of downstream users (e.g. Debian).")
 (define-public ghc-happstack-server
   (package
     (name "ghc-happstack-server")
-    (version "7.7.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/happstack-server/happstack-server-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0nc5rnvrzl9m3pinmdq234m80qkf4jszbdqnd567f7lh09yiqw9n"))))
+    (version "7.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "happstack-server" version))
+              (sha256
+               (base32
+                "175aal1l4g558y89skck3s04db0bjblkxp77bijf1s9iyc07n669"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "happstack-server")))
+    (inputs (list ghc-network
+                  ghc-network-uri
+                  ghc-base64-bytestring
+                  ghc-blaze-html
+                  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")
+    (home-page "https://happstack.com")
     (synopsis "Web related tools and services for Haskell")
     (description
      "Happstack Server provides an HTTP server and a rich set of functions for
@@ -1829,20 +1750,17 @@ cookies, serving files, and more.")
 (define-public ghc-sendfile
   (package
     (name "ghc-sendfile")
-    (version "0.7.11.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/sendfile/sendfile-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0988snmx3bylpw3kcq8hsgji8idc6xcrcfp275qjv3apfdgc9rp0"))))
+    (version "0.7.11.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "sendfile" version))
+              (sha256
+               (base32
+                "1i2i0w18l2ysambyylv93jzy0adiiqwwnhg7zagqb7p2srybxc3k"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "sendfile")))
     (inputs (list ghc-network))
-    (home-page
-     "https://hub.darcs.net/stepcut/sendfile")
+    (home-page "https://github.com/Happstack/sendfile")
     (synopsis "Portable sendfile library for Haskell")
     (description
      "Haskell library which exposes zero-copy sendfile functionality in a portable way.")
@@ -1851,29 +1769,25 @@ cookies, serving files, and more.")
 (define-public ghc-scalpel-core
   (package
     (name "ghc-scalpel-core")
-    (version "0.6.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/scalpel-core/"
-               "scalpel-core-" version ".tar.gz"))
-        (sha256
-         (base32
-          "07mjff8aqwabx8yhq8bd7jpnarkkrjqss8h8s2wkfmfj808fllmf"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-data-default
-           ghc-fail
-           ghc-pointedlist
-           ghc-regex-base
-           ghc-regex-tdfa
-           ghc-tagsoup
-           ghc-vector))
+    (version "0.6.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "scalpel-core" version))
+              (sha256
+               (base32
+                "1yl1lsi5xm3qdlww2sb6vyppjiisj54f4yzvffv3qg8dgkfjfdra"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "scalpel-core")))
+    (inputs (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")
+    (synopsis "High level web scraping library for Haskell")
     (description
      "Scalpel core provides a subset of the scalpel web scraping library
 that is intended to have lightweight dependencies and to be free of all
@@ -1883,27 +1797,23 @@ non-Haskell dependencies.")
 (define-public ghc-scalpel
   (package
     (name "ghc-scalpel")
-    (version "0.6.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/scalpel/"
-               "scalpel-" version ".tar.gz"))
-        (sha256
-         (base32
-          "04hhvk0yjxha3yg6n9fxivrz97hpjjiiblnj0bvs5myax1ggkjch"))))
+    (version "0.6.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "scalpel" version))
+              (sha256
+               (base32
+                "0w3l38czfsgbyd3x6yir7qw9bl8nmhclrbpbwfyhs39728jlscnc"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-scalpel-core
-           ghc-case-insensitive
-           ghc-data-default
-           ghc-http-client
-           ghc-http-client-tls
-           ghc-tagsoup))
+    (properties '((upstream-name . "scalpel")))
+    (inputs (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")
+    (synopsis "High level web scraping library for Haskell")
     (description
      "Scalpel is a web scraping library inspired by libraries like Parsec
 and Perl's @code{Web::Scraper}.  Scalpel builds on top of TagSoup to provide a
@@ -1913,27 +1823,21 @@ declarative and monadic interface.")
 (define-public ghc-sourcemap
   (package
     (name "ghc-sourcemap")
-    (version "0.1.6.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/sourcemap/sourcemap-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0kz8xpcd5syg5s4qa2qq8ylaxjhabj127w42may46vv6i0q1bf8a"))))
+    (version "0.1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "sourcemap" version))
+              (sha256
+               (base32
+                "09i340mhzlfi5ayy9cb0378glnygdmpdhhsgikm3zrvwf2wmwr2h"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-aeson ghc-unordered-containers ghc-attoparsec
-           ghc-utf8-string))
-    (arguments
-     `(#:tests? #f ; FIXME: Fail to compile
-       #:cabal-revision
-       ("1" "1f7q44ar6qfip8fsllg43jyn7r15ifn2r0vz32cbmx0sb0d38dax")))
+    (properties '((upstream-name . "sourcemap")))
+    (inputs (list ghc-aeson ghc-unordered-containers ghc-attoparsec
+                  ghc-utf8-string))
+    ;(native-inputs (list node))
+    (arguments (list #:tests? #f)) ; Needs node and module source-map.
     (home-page
-     "http://hackage.haskell.org/package/sourcemap")
+     "https://hackage.haskell.org/package/sourcemap")
     (synopsis
      "Implementation of source maps as proposed by Google and Mozilla")
     (description
@@ -1949,14 +1853,12 @@ proposed by Google and Mozilla here
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/language-javascript/language-javascript-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "language-javascript" version))
        (sha256
         (base32
          "0s6igb54cxm2jywgc3sq53f52gcsc39wd3g78yisfzvl9jm3d86i"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "language-javascript")))
     (inputs
      (list ghc-blaze-builder ghc-utf8-string))
     (native-inputs
@@ -1972,18 +1874,16 @@ as frontend to hjsmin.")
 (define-public ghc-bower-json
   (package
     (name "ghc-bower-json")
-    (version "1.0.0.1")
+    (version "1.1.0.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/bower-json/bower-json-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "bower-json" version))
        (sha256
         (base32
-         "0wvygg3rdbxzrmr61a9w6ddv9pfric85ih8hnxyk0ydzn7i59abs"))))
+         "0lnhcgivg38nicncb6czkkk3z2mk3jbifv1b4r51lk3p9blzydfl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bower-json")))
     (inputs
      (list ghc-aeson ghc-aeson-better-errors ghc-scientific
            ghc-transformers ghc-unordered-containers))
@@ -2003,11 +1903,11 @@ Bower's package manifest file, bower.json.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/DAV/DAV-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "DAV" version))
        (sha256
         (base32 "1isvi4fahq70lzxfz23as7qzkc01g7kba568l6flrgd0j1984fsy"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "DAV")))
     (inputs
      (list ghc-case-insensitive
            ghc-data-default
@@ -2034,42 +1934,41 @@ Authoring and Versioning (WebDAV) extensions to HTTP as well an executable,
 (define-public ghc-yesod-test
   (package
     (name "ghc-yesod-test")
-    (version "1.6.12")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "yesod-test/yesod-test-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1xgy7dzhqjgllqcpyyxs0spdg6vlz2c1sjvni7w7qnsf0ckyw2l8"))))
+    (version "1.6.15")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "yesod-test" version))
+              (sha256
+               (base32
+                "16q4f1l3m4l8iy5vmaa8c0vm2iiqhpghf3kykymlh41xy96mqpn3"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-hspec ghc-yesod-form ghc-unliftio ghc-unliftio-core))
-    (home-page "https://www.yesodweb.com")
+    (properties '((upstream-name . "yesod-test")))
+    (inputs (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-wai
+                  ghc-wai-extra
+                  ghc-xml-conduit
+                  ghc-xml-types
+                  ghc-yesod-core
+                  ghc-blaze-markup))
+    (native-inputs (list ghc-hspec ghc-yesod-form ghc-unliftio
+                         ghc-unliftio-core))
+    (home-page "http://www.yesodweb.com")
     (synopsis "Integration testing for WAI/Yesod Applications")
-    (description "This package's main goal is to encourage integration
+    (description
+     "This package's main goal is to encourage integration
 and system testing of web applications by making everything easy to
 test.  Tests are like browser sessions that keep track of cookies and
 the last visited page.  You can perform assertions on the content of
@@ -2079,42 +1978,36 @@ HTML responses using CSS selectors.")
 (define-public ghc-wai-app-static
   (package
     (name "ghc-wai-app-static")
-    (version "3.1.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "wai-app-static/wai-app-static-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "138gd5482psq0wbm8s1az672lksi7vbavq6ayiyjkliivf6xpry8"))))
+    (version "3.1.7.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "wai-app-static" version))
+              (sha256
+               (base32
+                "1h8zy3dprqjxvlqxrids65yg5qf1h4f63ddspwxrbp0r9d28hwb4"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-hspec ghc-network ghc-temporary ghc-mockery))
-    (arguments
-     `(#:cabal-revision
-       ("1" "1q7zwjasysgbp9rdp75535igd7s6mhi2bnl4pzsn6vbyfw3qnsxd")))
-    (home-page "https://www.yesodweb.com/book/web-application-interface")
+    (properties '((upstream-name . "wai-app-static")))
+    (inputs (list ghc-wai
+                  ghc-http-types
+                  ghc-unix-compat
+                  ghc-old-locale
+                  ghc-file-embed
+                  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
+                  ghc-cryptonite
+                  ghc-memory))
+    (native-inputs (list ghc-hspec ghc-network ghc-temporary ghc-mockery))
+    (home-page "http://www.yesodweb.com/book/web-application-interface")
     (synopsis "WAI application for static serving")
-    (description "This package provides a Web Application
+    (description
+     "This package provides a Web Application
 Interface (WAI) application for static serving.  It also provides some
 helper functions and datatypes for use outside of WAI.")
     (license license:expat)))
@@ -2126,14 +2019,16 @@ helper functions and datatypes for use outside of WAI.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hjsmin/hjsmin-" version ".tar.gz"))
+       (uri (hackage-uri "hjsmin" version))
        (sha256
         (base32
          "1r2p5rjdjr25j3w4s57q5hxw2c3ymw12x7ms18yvglnq2ivr9fc1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hjsmin")))
     (arguments
-     `(#:phases
+     `(#:cabal-revision ("2"
+                         "184g49wsj2sfm8d75kgr7ylfw29gbyrqbqp4syyz30ch047jd0af")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'build 'fix-dist-directory-for-tests
            (lambda _
@@ -2157,12 +2052,12 @@ syntactic elements, without changing the semantics.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "yesod-static/yesod-static-" version ".tar.gz"))
+       (uri (hackage-uri "yesod-static" version))
        (sha256
         (base32
          "18f5hm9ncvkzl8bkn39cg841z0k5iqs5w45afsyk9y6k98pjd54p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "yesod-static")))
     (inputs
      (list ghc-async
            ghc-attoparsec
@@ -2199,13 +2094,12 @@ for the Yesod Web Framework.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "wai-handler-launch/wai-handler-launch-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "wai-handler-launch" version))
        (sha256
         (base32
          "1ifqgyc1ccig5angh5l1iq7vyms4lvi8wzvysg5dw82nml49n02m"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wai-handler-launch")))
     (inputs
      (list ghc-wai ghc-warp ghc-http-types ghc-streaming-commons
            ghc-async))
@@ -2223,12 +2117,12 @@ server no longer receives pings, it shuts down.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "wai-cors/wai-cors-" version ".tar.gz"))
+       (uri (hackage-uri "wai-cors" version))
        (sha256
         (base32
          "10gv3jjlkcb13031frr818p56v2s0qf6dqjsfpwlhwdxdssvx5r5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wai-cors")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2266,13 +2160,11 @@ aims to be compliant with @url{https://www.w3.org/TR/cors}.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/network-run/network-run-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "network-run" version))
         (sha256
           (base32 "0w3dmwk03j4n01xkiq8m4sqa27bskh239mpw7m4ihjmkxqcwc5gl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "network-run")))
     (inputs (list ghc-network))
     (home-page "https://hackage.haskell.org/package/network-run")
     (synopsis "Simple network runner library")
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 79b4ae7bed..86af842980 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -28,7 +28,7 @@
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@member.fsf.org>
 ;;; Copyright © 2020 Carlo Holl <carloholl@gmail.com>
 ;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org>
-;;; Copyright © 2021, 2022 Alice BRENON <alice.brenon@ens-lyon.fr>
+;;; Copyright © 2021–2023 Alice BRENON <alice.brenon@ens-lyon.fr>
 ;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;;
@@ -55,6 +55,7 @@
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages haskell)
@@ -73,6 +74,7 @@
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system haskell)
@@ -91,13 +93,12 @@
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "abstract-deque-" version "/"
-                           "abstract-deque-" version ".tar.gz"))
+       (uri (hackage-uri "abstract-deque" version))
        (sha256
         (base32
          "18jwswjxwzc9bjiy4ds6hw2a74ki797jmfcifxd2ga4kh7ri1ah9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "abstract-deque")))
     (inputs (list ghc-random))
     (home-page "https://github.com/rrnewton/haskell-lockfree/wiki")
     (synopsis "Abstract, parameterized interface to mutable Deques for Haskell")
@@ -128,13 +129,12 @@ This package also includes a simple reference implementation based on
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "abstract-par-" version "/"
-                           "abstract-par-" version ".tar.gz"))
+       (uri (hackage-uri "abstract-par" version))
        (sha256
         (base32
          "0q6qsniw4wks2pw6wzncb1p1j3k6al5njnvm2v5n494hplwqg2i4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "abstract-par")))
     (home-page "https://github.com/simonmar/monad-par")
     (synopsis "Abstract parallelization interface for Haskell")
     (description "This Haskell package is an abstract interface
@@ -147,24 +147,25 @@ module for more details.")
 (define-public ghc-active
   (package
     (name "ghc-active")
-    (version "0.2.0.15")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "active/active-" version ".tar.gz"))
-       (sha256
-        (base32
-         "019xr66pahsssqr2hybs88mga4qshv1vmd22j7624wqafqm57d74"))))
+    (version "0.2.0.16")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "active" version))
+              (sha256
+               (base32
+                "1fz2rsyk41p9f9avlmn9lrdmii5alv88lkw677mw8q6mzyxpw67i"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-vector ghc-semigroups ghc-semigroupoids ghc-lens
-           ghc-linear))
-    (native-inputs
-     (list ghc-quickcheck))
-    (home-page "https://hackage.haskell.org/package/active")
+    (properties '((upstream-name . "active")))
+    (inputs (list ghc-vector ghc-semigroups ghc-semigroupoids ghc-lens
+                  ghc-linear))
+    (native-inputs (list ghc-quickcheck))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0cyfwrr5c14f5rgrf8dv7i8qsrnmnzigw0xp6l88kfxd61zhk4n8")))
+    (home-page "http://hackage.haskell.org/package/active")
     (synopsis "Abstractions for animation")
-    (description "This package defines an @code{Active} abstraction for
+    (description
+     "This package defines an @code{Active} abstraction for
 time-varying values with finite start and end times.  It is used for
 describing animations within the
 @url{https://archives.haskell.org/projects.haskell.org/diagrams/,
@@ -174,40 +175,33 @@ diagrams framework}.")
 (define-public ghc-adjunctions
   (package
     (name "ghc-adjunctions")
-    (version "4.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/adjunctions/adjunctions-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1sbal7cbhm12crfnfhkk322jnzgx7lhw3jzq0p463bipagsjwz2h"))))
+    (version "4.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "adjunctions" version))
+              (sha256
+               (base32
+                "06354xzgf78jl4g1xw11rp74gi7zh94rgvsji7ma1g0hp26myyql"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("2" "1yfsjx7dqikg3hvld7i91xfsg5lawmr5980lvfd794sybmgxsf17")))
-    (inputs
-     (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/")
+    (properties '((upstream-name . "adjunctions")))
+    (inputs (list ghc-comonad
+                  ghc-contravariant
+                  ghc-distributive
+                  ghc-free
+                  ghc-profunctors
+                  ghc-tagged
+                  ghc-semigroupoids
+                  ghc-semigroups
+                  ghc-transformers-compat
+                  ghc-void))
+    (native-inputs (list ghc-generic-deriving ghc-hspec hspec-discover))
+    (home-page "http://github.com/ekmett/adjunctions/")
     (synopsis "Adjunctions and representable functors")
     (description "This library provides adjunctions and representable functors
 for Haskell.")
     (license license:bsd-3)))
 
+;; Deprecated package.
 (define-public ghc-aeson-compat
   (package
     (name "ghc-aeson-compat")
@@ -215,13 +209,12 @@ for Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "aeson-compat-" version "/"
-                           "aeson-compat-" version ".tar.gz"))
+       (uri (hackage-uri "aeson-compat" version))
        (sha256
         (base32
          "0ia3qfdpbrzhwwg4ywpdwca0z1m85k081pcz6jh1sx8qjsvcr71w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "aeson-compat")))
     (inputs (list ghc-base-compat
                   ghc-aeson
                   ghc-attoparsec
@@ -239,6 +232,9 @@ for Haskell.")
            ghc-quickcheck
            ghc-quickcheck-instances
            ghc-base-orphans))
+    (arguments
+     `(#:cabal-revision ("4"
+                         "001w7pck3q5k4cnx53npllil5cblkg1ssqza4s9v347dfih3zmss")))
     (home-page "https://github.com/phadej/aeson-compat")
     (synopsis "Compatibility layer for ghc-aeson")
     (description "This Haskell package provides compatibility layer for
@@ -248,16 +244,16 @@ ghc-aeson.")
 (define-public ghc-aeson-diff
   (package
     (name "ghc-aeson-diff")
-    (version "1.1.0.9")
+    (version "1.1.0.13")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "aeson-diff/aeson-diff-" version ".tar.gz"))
+       (uri (hackage-uri "aeson-diff" version))
        (sha256
         (base32
-         "18bm4qyjjwgrr6dxc4y0vai0z6qgrh2lcqb4jrr4xqs4cxrlwr92"))))
+         "0sd13q0nj0k1sam5xfj6dcjcki18f375sa69hm6i4xc6snfhn3cb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "aeson-diff")))
     (inputs
      (list ghc-aeson
            ghc-edit-distance-vector
@@ -276,7 +272,20 @@ ghc-aeson.")
            ghc-quickcheck
            ghc-doctest
            hlint))
-    (home-page "https://github.com/thsutton/aeson-diff")
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1028adallw7bm72948lj322bb5a99gfs0qc1j0pnm8hryp6n7ma5")
+       #:tests? #f ; Needs doctest Setup.hs
+       #:phases
+       (modify-phases %standard-phases
+         ;; Tries to use non-existent doctest API.
+         (add-after 'unpack 'disable-doctest
+           (lambda _
+             (with-output-to-file "Setup.hs"
+               (lambda _
+                 (display
+                  "import Distribution.Simple\nmain = defaultMain\n"))))))))
+   (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
 documents.  It includes a library and two command-line executables in the
@@ -287,32 +296,17 @@ systems.")
 (define-public ghc-alex
   (package
     (name "ghc-alex")
-    (version "3.2.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/alex/alex-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "042lrkn0dbpjn5ivj6j26jzb1fwrj8c1aj18ykxja89isg0hiali"))))
+    (version "3.2.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "alex" version))
+              (sha256
+               (base32
+                "1v0vm1l4xvybzwj1p6j5j58yiw5nhbnx7yxjnpyjy6wggsig3llv"))))
     (build-system haskell-build-system)
-    (arguments
-      (list #:phases
-            #~(modify-phases %standard-phases
-                (add-before 'check 'set-check-variables
-                  (lambda _
-                    (setenv "PATH" (string-append (getcwd) "/dist/build/alex:"
-                                                  (getenv "PATH")))
-                    (setenv "alex_datadir" (string-append (getcwd) "/data")))))))
-    (inputs (list ghc-quickcheck))
-    (native-inputs
-     (list which))
-    (home-page "https://www.haskell.org/alex/")
-    (synopsis
-     "Tool for generating lexical analysers in Haskell")
+    (properties '((upstream-name . "alex")))
+    (home-page "http://www.haskell.org/alex/")
+    (synopsis "Tool for generating lexical analysers in Haskell")
     (description
      "Alex is a tool for generating lexical analysers in Haskell.  It takes a
 description of tokens based on regular expressions and generates a Haskell
@@ -327,14 +321,12 @@ tool lex or flex for C/C++.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/alsa-core/alsa-core-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "alsa-core" version))
        (sha256
         (base32
          "1avh4a419h9d2zsslg6j8hm87ppgsgqafz8ll037rk2yy1g4jl7b"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "alsa-core")))
     (arguments
      `(#:extra-directories ("alsa-lib")))
     (inputs
@@ -355,13 +347,12 @@ needed by both alsa-seq and alsa-pcm.")
     (origin
      (method url-fetch)
      (uri
-      (string-append
-       "mirror://hackage/package/alsa-mixer/alsa-mixer-"
-       version ".tar.gz"))
+      (hackage-uri "alsa-mixer" version))
      (sha256
       (base32
        "00ny2p3276jilidjs44npc8zmbhynz3f2lpmlwwl6swwx5yijsnb"))))
    (build-system haskell-build-system)
+   (properties '((upstream-name . "alsa-mixer")))
    (inputs (list ghc-alsa-core))
    (native-inputs (list ghc-c2hs))
    (home-page "https://github.com/ttuegel/alsa-mixer")
@@ -377,14 +368,12 @@ needed by both alsa-seq and alsa-pcm.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/annotated-wl-pprint"
-             "/annotated-wl-pprint-" version
-             ".tar.gz"))
+       (uri (hackage-uri "annotated-wl-pprint" version))
        (sha256
         (base32
          "061xfz6qany3wf95csl8dcik2pz22cn8iv1qchhm16isw5zjs9hc"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "annotated-wl-pprint")))
     (home-page
      "https://github.com/david-christiansen/annotated-wl-pprint")
     (synopsis
@@ -398,23 +387,20 @@ a variety of ways.")
 (define-public ghc-ansi-terminal
   (package
     (name "ghc-ansi-terminal")
-    (version "0.11")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ansi-terminal/ansi-terminal-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "14rp62c7y79n9dmmi7m0l9n3mcq6dh331b4yyyrivm5da6g1nqf6"))))
+    (version "0.11.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ansi-terminal" version))
+              (sha256
+               (base32
+                "098f8bdxqmgxaz8y87s6b6bshsq950zq0b75rmbihp2k1a7y963q"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-colour))
-    (home-page "https://github.com/feuerbach/ansi-terminal")
+    (properties '((upstream-name . "ansi-terminal")))
+    (inputs (list ghc-colour))
+    (home-page "https://github.com/UnkindPartition/ansi-terminal")
     (synopsis "ANSI terminal support for Haskell")
-    (description "This package provides ANSI terminal support for Haskell.  It
+    (description
+     "This package provides ANSI terminal support for Haskell.  It
 allows cursor movement, screen clearing, color output showing or hiding the
 cursor, and changing the title.")
     (license license:bsd-3)))
@@ -426,13 +412,12 @@ cursor, and changing the title.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "ansi-wl-pprint/ansi-wl-pprint-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "ansi-wl-pprint" version))
        (sha256
         (base32
          "1b2fg8px98dzbaqyns10kvs8kn6cl1hdq5wb9saz40izrpkyicm7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ansi-wl-pprint")))
     (arguments
      `(#:cabal-revision
        ("2" "1xrv66v5hqchjhj8a0g3awy1qpsswk2jqb4w4yh3mm1py5s0dlr0")))
@@ -452,14 +437,12 @@ colored output using the ansi-terminal package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/appar/appar-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "appar" version))
        (sha256
         (base32
          "07v3h766q9mnhphsm53718h1lds147ix7dj15kc5hnsj4vffvkn4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "appar")))
     (home-page
      "https://hackage.haskell.org/package/appar")
     (synopsis "Simple applicative parser")
@@ -474,18 +457,19 @@ style.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/assoc/assoc-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "assoc" version))
        (sha256
         (base32
          "0kqlizznjy94fm8zr1ng633yxbinjff7cnsiaqs7m33ix338v66q"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "assoc")))
     (inputs
      (list ghc-bifunctors ghc-tagged))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0mrb12dx316q4gxyn68x2rl8jq0gd77zffd12r8j1r41l0xd9f4k")))
     (home-page
-     "http://hackage.haskell.org/package/assoc")
+     "https://hackage.haskell.org/package/assoc")
     (synopsis
      "Swap and assoc: Symmetric and Semigroupy Bifunctors")
     (description
@@ -501,18 +485,19 @@ similar operations (e.g. @code{Either}, @code{These}).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/async/async-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "async" version))
        (sha256
         (base32
          "09d7w3krfhnmf9dp6yffa9wykinhw541wibnjgnlyv77w1dzhka8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "async")))
     (inputs
      (list ghc-hashable))
     (native-inputs
      (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1j93w1krkadqijn59yjiws1366yhcn2mad1irqrk50in6l10k51b")))
     (home-page "https://github.com/simonmar/async")
     (synopsis "Library to run IO operations asynchronously")
     (description "Async provides a library to run IO operations
@@ -528,12 +513,12 @@ will eventually deliver a value of type @code{a}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/atomic-primops"
-                           "/atomic-primops-" version ".tar.gz"))
+       (uri (hackage-uri "atomic-primops" version))
        (sha256
         (base32
          "0gidqyk913vhcz3q4vnpadx3vkkrwb66rqhsxvdba8g2p5z63a12"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "atomic-primops")))
     (inputs (list ghc-primitive))
     (home-page "https://github.com/rrnewton/haskell-lockfree/wiki")
     (synopsis "Safe approach to CAS and other atomic ops")
@@ -546,18 +531,16 @@ This library provides a safer method based on the concept of @code{Ticket}s.")
 (define-public ghc-atomic-write
   (package
     (name "ghc-atomic-write")
-    (version "0.2.0.6")
+    (version "0.2.0.7")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/atomic-write/atomic-write-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "atomic-write" version))
        (sha256
         (base32
-         "1xs3shwnlj8hmnm3q6jc8nv78z0481i5n4hrqqdmbpx8grvlnqyl"))))
+         "03cn3ii74h0w3g4h78xsx9v2sn58r3qsr2dbdwq340xwhiwcgxdm"))))
     (build-system haskell-build-system)
+    (properties `((upstream-name . "atomic-write")))
     (inputs
      (list ghc-temporary ghc-unix-compat))
     (native-inputs
@@ -572,90 +555,46 @@ will destroy the permissions on the original file.  This library preserves
 permissions while atomically writing to a file.")
     (license license:expat)))
 
-(define-public ghc-atomic-write-0.2.0.7
-  (package
-    (inherit ghc-atomic-write)
-    (version "0.2.0.7")
-    (source
-     (origin
-       (inherit (package-source ghc-atomic-write))
-       (uri (string-append
-             "https://hackage.haskell.org/package/atomic-write/atomic-write-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "03cn3ii74h0w3g4h78xsx9v2sn58r3qsr2dbdwq340xwhiwcgxdm"))))))
-
 (define-public ghc-attoparsec
   (package
     (name "ghc-attoparsec")
-    (version "0.13.2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/attoparsec/attoparsec-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0vv88m5m7ynjrg114psp4j4s69f1a5va3bvn293vymqrma7g7q11"))))
+    (version "0.14.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "attoparsec" version))
+              (sha256
+               (base32
+                "0v4yjz4qi8bwhbyavqxlhsfb1iv07v10gxi64khmsmi4hvjpycrz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "attoparsec")))
+    (inputs (list ghc-scientific))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-unicode ghc-tasty
+                         ghc-tasty-quickcheck ghc-vector))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-for-newer-quickcheck
-           (lambda _
-             (substitute* "attoparsec.cabal"
-               (("QuickCheck >= 2\\.7 && < 2\\.10")
-                "QuickCheck >= 2.7 && < 2.12"))
-             ;; This test fails because of the newer QuickCheck:
-             ;; <https://github.com/bos/attoparsec/issues/134>.
-             (substitute* "tests/QC/ByteString.hs"
-               ((", testProperty \"satisfyWith\" satisfyWith")
-                "")))))))
-    (inputs
-     (list ghc-scientific))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck
-           ghc-quickcheck-unicode ghc-vector))
-    (home-page "https://github.com/bos/attoparsec")
+     `(#:cabal-revision ("2"
+                         "00jyrn2asz1kp698l3fyh19xxxz4npf1993y041x9b9cq239smn0")))
+    (home-page "https://github.com/bgamari/attoparsec")
     (synopsis "Fast combinator parsing for bytestrings and text")
-    (description "This library provides a fast parser combinator library,
+    (description
+     "This library provides a fast parser combinator library,
 aimed particularly at dealing efficiently with network protocols and
 complicated text/binary file formats.")
     (license license:bsd-3)))
 
-(define-public ghc-attoparsec-bootstrap
-  (package
-    (inherit ghc-attoparsec)
-    (name "ghc-attoparsec-bootstrap")
-    (arguments `(#:tests? #f))
-    (inputs
-     `(("ghc-scientific" ,ghc-scientific-bootstrap)))
-    (native-inputs '())
-    (properties '((hidden? #t)))))
-
 (define-public ghc-attoparsec-iso8601
   (package
     (name "ghc-attoparsec-iso8601")
-    (version "1.0.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "attoparsec-iso8601-" version "/"
-                           "attoparsec-iso8601-" version ".tar.gz"))
-       (sha256
-        (base32
-         "162gc101mwhmjbfhhv1wm3yvk2h4ra34wpw5x87735cfqxvjv582"))))
+    (version "1.0.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "attoparsec-iso8601" version))
+              (sha256
+               (base32
+                "1zmj6v63xjj20ja50ffbi222yg513cnnqyxl76ybb4x98z9jld0k"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("2" "18557xy5gvkhj0sb35wwxmhqirkiqrkwm0y0pqygsr0aimccs5zm")))
+    (properties '((upstream-name . "attoparsec-iso8601")))
     (inputs (list ghc-attoparsec ghc-base-compat-batteries ghc-time-compat))
-    (home-page "https://github.com/bos/aeson")
+    (home-page "https://github.com/haskell/aeson")
     (synopsis "Parse ISO 8601 dates")
     (description "Haskell library for parsing of ISO 8601 dates, originally
 from aeson.")
@@ -668,14 +607,12 @@ from aeson.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/auto-update/auto-update-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "auto-update" version))
        (sha256
         (base32
          "1i36xc2i34aync8271x3pv515l3zb53i518dybn8ghqkhzf27q7l"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "auto-update")))
     (native-inputs
      (list ghc-hspec ghc-hunit ghc-retry hspec-discover))
     (home-page "https://github.com/yesodweb/wai")
@@ -687,27 +624,18 @@ periodic, on-demand actions in Haskell.")
 (define-public ghc-aws
   (package
     (name "ghc-aws")
-    (version "0.22")
+    (version "0.23")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "aws-" version "/aws-" version ".tar.gz"))
+       (uri (hackage-uri "aws" version))
        (sha256 (base32
-                "1l3f94mpih7slz37ikyjkyrwvlf110w87997d8sbnbd8glwlcb8r"))))
+                "0kfdj9hxjvziq1y74xj9mm17zcgwywpvp9c0i6gfd5malf4qxgg0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "aws")))
     (arguments
      `(#:tests? #f ; Tests require AWS credentials.
-       #:configure-flags (list "-fNetworkBSD") ; Use network-bsd.
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "aws.cabal"
-               (("(base16-bytestring)\\s+==\\s+0\\.1\\.\\*" all dep)
-                dep)
-               (("(base64-bytestring)\\s+==\\s+1\\.0\\.\\*" all dep)
-                dep)))))))
+       #:configure-flags (list "-fNetworkBSD"))) ; Use network-bsd.
     (inputs
      (list ghc-aeson
            ghc-attoparsec
@@ -756,21 +684,19 @@ Web Services.")
 (define-public ghc-base16-bytestring
   (package
     (name "ghc-base16-bytestring")
-    (version "1.0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/base16-bytestring/"
-             "base16-bytestring-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1ynnplw8iz3v5ld0xxgpxgasb0hg62x62wxxf5lx6lxyb15hmiy0"))))
+    (version "1.0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base16-bytestring" version))
+              (sha256
+               (base32
+                "1167f9jaivnabn6kg2gc421ac9njb67fr4v0adbj3qph7qa92nhx"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hunit ghc-quickcheck ghc-test-framework
-           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
-    (home-page "https://github.com/bos/base16-bytestring")
+    (properties '((upstream-name . "base16-bytestring")))
+    (native-inputs (list ghc-hunit ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (home-page "http://github.com/haskell/base16-bytestring")
     (synopsis "Fast base16 (hex) encoding and decoding for ByteStrings")
     (description
      "This package provides a Haskell library for working with base16-encoded
@@ -780,19 +706,19 @@ data quickly and efficiently, using the ByteString type.")
 (define-public ghc-base64-bytestring
   (package
     (name "ghc-base64-bytestring")
-    (version "1.1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/base64-bytestring/base64-bytestring-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1adcnkcx4nh3d59k94bkndj0wkgbvchz576qwlpaa7148a86q391"))))
+    (version "1.2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base64-bytestring" version))
+              (sha256
+               (base32
+                "1ja9vkgnpkzaw8gz6sm5jmgha6wg3m1j281m0nv1w9yyxlqfvy7v"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f))         ; FIXME: testing libraries are missing.
-    (home-page "https://github.com/bos/base64-bytestring")
+    (properties '((upstream-name . "base64-bytestring")))
+    (native-inputs (list ghc-hunit ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (home-page "https://github.com/haskell/base64-bytestring")
     (synopsis "Base64 encoding and decoding for ByteStrings")
     (description "This library provides fast base64 encoding and decoding for
 Haskell @code{ByteString}s.")
@@ -801,49 +727,41 @@ Haskell @code{ByteString}s.")
 (define-public ghc-base-compat
   (package
     (name "ghc-base-compat")
-    (version "0.11.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/base-compat/base-compat-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1nyvkaij4m01jndw72xl8931czz1xp6jpnynpajabys2ahabb9jk"))))
+    (version "0.12.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base-compat" version))
+              (sha256
+               (base32
+                "1gah466nd6hkj716gwljfh0g270iaqy2rq2a1vw3di2s7a4dqam6"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (native-inputs
-     (list ghc-quickcheck ghc-hspec hspec-discover))
-    (home-page "https://hackage.haskell.org/package/base-compat")
+    (properties '((upstream-name . "base-compat")))
+    (home-page "http://hackage.haskell.org/package/base-compat")
     (synopsis "Haskell compiler compatibility library")
-    (description "This library provides functions available in later versions
+    (description
+     "This library provides functions available in later versions
 of base to a wider range of compilers, without requiring the use of CPP
 pragmas in your code.")
-    (license license:bsd-3)))
+    (license license:expat)))
 
 (define-public ghc-base-compat-batteries
   (package
     (name "ghc-base-compat-batteries")
-    (version "0.11.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "base-compat-batteries/base-compat-batteries-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "08rh9nlm9ir28fm42xim06ga8qwdqdcvkbb5ckz99bwnmajndq1i"))))
+    (version "0.12.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base-compat-batteries" version))
+              (sha256
+               (base32
+                "16gbqng8556wqcvrmj3dmqxh9sxp7z6ixgv0j5sy017r0wp0ksgd"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-base-compat))
-    (native-inputs
-     (list ghc-hspec ghc-quickcheck hspec-discover))
-    (home-page "https://hackage.haskell.org/package/base-compat-batteries")
+    (properties '((upstream-name . "base-compat-batteries")))
+    (inputs (list ghc-base-compat))
+    (native-inputs (list ghc-hspec ghc-quickcheck hspec-discover))
+    (home-page "http://hackage.haskell.org/package/base-compat-batteries")
     (synopsis "base-compat with extra batteries")
-    (description "This library provides functions available in later
+    (description
+     "This library provides functions available in later
 versions of @code{base} to a wider range of compilers, without requiring
 you to use CPP pragmas in your code.  This package provides the same API
 as the @code{base-compat} library, but depends on compatibility
@@ -854,18 +772,16 @@ than @code{base-compat}, which has no dependencies.")
 (define-public ghc-basement
   (package
     (name "ghc-basement")
-    (version "0.0.12")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "basement/basement-" version ".tar.gz"))
-       (sha256
-        (base32
-         "12zsnxkgv86im2prslk6ddhy0zwpawwjc1h4ff63kpxp2xdl7i2k"))))
+    (version "0.0.15")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "basement" version))
+              (sha256
+               (base32
+                "1d2xj5dmjps7nc7rwp5s0kyjcg9v8xfql6ik4yk1d3affnvazhjn"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (home-page "https://github.com/haskell-foundation/foundation")
+    (properties '((upstream-name . "basement")))
+    (home-page "https://github.com/haskell-foundation/foundation#readme")
     (synopsis "Basic primitives for Foundation starter pack")
     (description
      "This package contains basic primitives for the Foundation set of
@@ -875,45 +791,48 @@ packages.")
 (define-public ghc-base-orphans
   (package
     (name "ghc-base-orphans")
-    (version "0.8.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/base-orphans/base-orphans-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1lw1jhrrsdq7x9wr2bwkxq9mscidcad0n30kh9gfk8kgifl5xh9k"))))
+    (version "0.8.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base-orphans" version))
+              (sha256
+               (base32
+                "0iz4v4h2ydncdwfqzs8fd2qwl38dx0n94w5iymw2g4xy1mzxd3w8"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-hspec hspec-discover))
-    (home-page "https://hackage.haskell.org/package/base-orphans")
+    (properties '((upstream-name . "base-orphans")))
+    (native-inputs (list ghc-quickcheck ghc-hspec hspec-discover))
+    (home-page "https://github.com/haskell-compat/base-orphans#readme")
     (synopsis "Orphan instances for backwards compatibility")
-    (description "This package defines orphan instances that mimic instances
+    (description
+     "This package defines orphan instances that mimic instances
 available in later versions of base to a wider (older) range of compilers.")
-    (license license:bsd-3)))
+    (license license:expat)))
+
+(define-public ghc-base-orphans-bootstrap
+  (package
+    (inherit ghc-base-orphans)
+    (name "ghc-base-orphans-bootstrap")
+    (arguments '(#:tests? #f))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
 
 (define-public ghc-base-prelude
   (package
     (name "ghc-base-prelude")
-    (version "1.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "base-prelude-" version "/"
-                           "base-prelude-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0nn5v2y9kl7i3n21250m7cvn55lvkmzj22wx6q4kaag5ycwwczrs"))))
+    (version "1.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base-prelude" version))
+              (sha256
+               (base32
+                "0rbx6k85svqrkw5ixp2xal8bg6xrz729g7rrhkgsr3ixv38k943j"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "base-prelude")))
     (home-page "https://github.com/nikita-volkov/base-prelude")
     (synopsis "The most complete prelude formed solely from the Haskell's base
 package")
-    (description "This Haskell package aims to reexport all the non-conflicting
+    (description
+     "This Haskell package aims to reexport all the non-conflicting
 and most general definitions from the \"base\" package.
 
 This includes APIs for applicatives, arrows, monoids, foldables, traversables,
@@ -936,14 +855,12 @@ the bounds of \"base\" as well.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/base-unicode-symbols/base-unicode-symbols-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "base-unicode-symbols" version))
        (sha256
         (base32
          "0qkhp4ybmx4nbqqkrmw3hkm47bv61i2wpi20qb09wvk10g2dcr23"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "base-unicode-symbols")))
     (home-page "https://wiki.haskell.org/Unicode-symbols")
     (synopsis "Unicode alternatives for common functions and operators")
     (description "This package defines new symbols for a number of functions,
@@ -964,13 +881,12 @@ stand for certain ASCII character sequences, i.e. → instead of @code{->},
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/basic-prelude/"
-             "basic-prelude-" version ".tar.gz"))
+       (uri (hackage-uri "basic-prelude" version))
        (sha256
         (base32
          "0yckmnvm6i4vw0mykj4fzl4ldsf67v8d2h0vp1bakyj84n4myx8h"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "basic-prelude")))
     (inputs
      (list ghc-hashable ghc-unordered-containers ghc-vector))
     (home-page "https://github.com/snoyberg/basic-prelude#readme")
@@ -1000,12 +916,11 @@ wishing to create a new prelude should use CorePrelude.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/bencode/bencode-"
-             version ".tar.gz"))
+       (uri (hackage-uri "bencode" version))
        (sha256
         (base32 "0znv0y3b3zm5jvhlvj5f5s7y93db67j9yd59w1bnrw2pqv30gqaq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bencode")))
     (inputs
      (list ghc-transformers-compat))
     (native-inputs
@@ -1021,28 +936,18 @@ storing and transmitting loosely structured data.")
 (define-public ghc-bifunctors
   (package
     (name "ghc-bifunctors")
-    (version "5.5.11")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/bifunctors/bifunctors-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "070964w7gz578379lyj6xvdbcf367csmz22cryarjr5bz9r9csrb"))))
+    (version "5.5.14")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "bifunctors" version))
+              (sha256
+               (base32
+                "0r4jd4s66xvnx0bk75rz0cwnf6cr0lgx3dxrqdv3ppkwqk81c0ak"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-base-orphans
-           ghc-comonad
-           ghc-th-abstraction
-           ghc-transformers-compat
-           ghc-tagged
-           ghc-semigroups))
-    (native-inputs
-     (list ghc-hspec hspec-discover ghc-quickcheck))
-    (home-page "https://github.com/ekmett/bifunctors/")
+    (properties '((upstream-name . "bifunctors")))
+    (inputs (list ghc-base-orphans ghc-comonad ghc-th-abstraction ghc-tagged))
+    (native-inputs (list ghc-hspec ghc-quickcheck ghc-transformers-compat hspec-discover))
+    (home-page "http://github.com/ekmett/bifunctors/")
     (synopsis "Bifunctors for Haskell")
     (description "This package provides bifunctors for Haskell.")
     (license license:bsd-3)))
@@ -1054,12 +959,12 @@ storing and transmitting loosely structured data.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/bindings-DSL/"
-                           "bindings-DSL-" version ".tar.gz"))
+       (uri (hackage-uri "bindings-DSL" version))
        (sha256
         (base32
          "0kqrd78nspl3lk4a0fqn47d8dirjg3b24dkvkigcrlb81hw35pk3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bindings-DSL")))
     (home-page "https://github.com/jwiegley/bindings-dsl/wiki")
     (synopsis "FFI domain specific language, on top of hsc2hs")
     (description
@@ -1079,12 +984,12 @@ functions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "bitarray/bitarray-" version ".tar.gz"))
+       (uri (hackage-uri "bitarray" version))
        (sha256
         (base32
          "00nqd62cbh42qqqvcl6iv1i9kbv0f0mkiygv4j70wfh5cl86yzxj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bitarray")))
     (arguments
      `(#:cabal-revision
        ("1" "10fk92v9afjqk43zi621jxl0n8kci0xjj32lz3vqa9xbh67zjz45")))
@@ -1100,14 +1005,12 @@ functions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/blaze-builder/blaze-builder-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "blaze-builder" version))
        (sha256
         (base32
          "0rxg6vjr0ji6g1nngrqpl4k1q9w66fwkhld9cqm5yfhx0a69kp1c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "blaze-builder")))
     (inputs
      (list ghc-bytestring-builder ghc-semigroups))
     (native-inputs
@@ -1133,26 +1036,20 @@ interoperate with code that uses the new implementation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "blaze-markup/blaze-markup-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "blaze-markup" version))
        (sha256
         (base32
          "0jd30wg5yz0a97b36zwqg4hv8faifza1n2gys3l1p3fwf9l3zz23"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "blaze-markup.cabal"
-               (("tasty            >= 1\\.0  && < 1\\.1")
-                "tasty            >= 1.0  && < 1.2")))))))
+    (properties '((upstream-name . "blaze-markup")))
     (inputs
      (list ghc-blaze-builder))
     (native-inputs
      (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
            ghc-tasty-quickcheck))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "1hn694kk615prqdn7bfzl0wvbw8bksxk4cxwmx8yhwpl0cq3fiwa")))
     (home-page "https://jaspervdj.be/blaze")
     (synopsis "Fast markup combinator library for Haskell")
     (description "This library provides core modules of a markup combinator
@@ -1166,15 +1063,26 @@ library for Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "bloomfilter/bloomfilter-" version ".tar.gz"))
+       (uri (hackage-uri "bloomfilter" version))
        (sha256
         (base32
-         "03vrmncg1c10a2wcg5skq30m1yiknn7nwxz2gblyyfaxglshspkc"))))
+         "03vrmncg1c10a2wcg5skq30m1yiknn7nwxz2gblyyfaxglshspkc"))
+       (patches (search-patches "ghc-bloomfilter-ghc9.2.patch"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bloomfilter")))
     (native-inputs
      (list ghc-quickcheck ghc-random ghc-test-framework
            ghc-test-framework-quickcheck2))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1hi6hwvhv7lxqv0l6hv2854g1rvc52zcmr3ldvnaan1l1b666867")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "bloomfilter.cabal"
+               (("\\b(base)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "https://github.com/bos/bloomfilter")
     (synopsis "Pure and impure Bloom filter implementations")
     (description "This package provides both mutable and immutable Bloom
@@ -1189,11 +1097,11 @@ interface.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/boxes/boxes-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "boxes" version))
        (sha256
         (base32 "1hsnmw95i58d4bkpxby3ddsj1cawypw4mdyb18m393s5i8p7iq9q"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "boxes")))
     (inputs
      (list ghc-split ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/boxes")
@@ -1209,12 +1117,12 @@ using a simple box model.")
     (version "0.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "byteable/byteable-" version ".tar.gz"))
+              (uri (hackage-uri "byteable" version))
               (sha256
                (base32
                 "1qizg0kxxjqnd3cbrjhhidk5pbbciz0pb3z5kzikjjxnnnhk8fr4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "byteable")))
     (home-page "https://github.com/vincenthz/hs-byteable")
     (synopsis "Type class for sequence of bytes")
     (description
@@ -1230,14 +1138,12 @@ wrapping a bytestring with stronger and more meaniful name.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/byteorder/byteorder-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "byteorder" version))
        (sha256
         (base32
          "06995paxbxk8lldvarqpb3ygcjbg4v8dk4scib1rjzwlhssvn85x"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "byteorder")))
     (home-page
      "http://community.haskell.org/~aslatter/code/byteorder")
     (synopsis
@@ -1249,33 +1155,33 @@ system.")
 
 (define-public ghc-bytes
   (package
-   (name "ghc-bytes")
-   (version "0.17.1")
-   (source
-    (origin
-     (method url-fetch)
-     (uri
-      (string-append "https://hackage.haskell.org/package/bytes-"
-                     version "/bytes-"
-                     version ".tar.gz"))
-     (file-name (string-append name "-" version ".tar.gz"))
-     (sha256
-      (base32
-       "1qmps8vvg98wfm9xm734hwzi56bsk8r1zc6vx20rlhc79krv5s9s"))))
-   (build-system haskell-build-system)
-   (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
+    (name "ghc-bytes")
+    (version "0.17.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "bytes" version))
+              (sha256
+               (base32
+                "06kqqk19qjhrwdqi6pyd1lwqfnj2sw3b3s49lc5vr2fmv8gg8mdw"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "bytes")))
+    (inputs (list ghc-binary-orphans
+                  ghc-cereal
+                  ghc-hashable
+                  ghc-transformers-compat
+                  ghc-unordered-containers
+                  ghc-scientific
+                  ghc-void))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0frs6ag93kmg2fw3vd686czx8g7h9qmdn1ip6wdk96d94ap0fz9i")))
+    (home-page "https://github.com/ekmett/bytes")
+    (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
 serialization code.")
-   (home-page "https://hackage.haskell.org/package/bytes")
-   (license license:bsd-3)))
+    (license license:bsd-3)))
 
 (define-public ghc-bytestring-builder
   (package
@@ -1284,13 +1190,12 @@ serialization code.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/bytestring-builder"
-             "/bytestring-builder-" version ".tar.gz"))
+       (uri (hackage-uri "bytestring-builder" version))
        (sha256
         (base32
          "0grcrgwwwcvwrs9az7l4d3kf0lsqfa9qpmjzf6iyanvwn9nyzyi7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bytestring-builder")))
     (arguments `(#:haddock? #f)) ; Package contains no documentation.
     (home-page "https://hackage.haskell.org/package/bytestring-builder")
     (synopsis "The new bytestring builder, packaged outside of GHC")
@@ -1299,6 +1204,7 @@ debuting in bytestring-0.10.4.0, which should be shipping with GHC 7.8.
 Compatibility package for older packages.")
     (license license:bsd-3)))
 
+;; XXX: Incompatible with base
 (define-public ghc-bytestring-handle
   (package
     (name "ghc-bytestring-handle")
@@ -1306,16 +1212,22 @@ Compatibility package for older packages.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/bytestring-handle/bytestring-handle-"
-             version ".tar.gz"))
+       (uri (hackage-uri "bytestring-handle" version))
        (sha256
         (base32
-         "18f17aja1ivhr3zyg2cccn2m03hdn5jf5410dndkhf12gvgiqs7y"))))
+         "18f17aja1ivhr3zyg2cccn2m03hdn5jf5410dndkhf12gvgiqs7y"))
+       (patches (search-patches "ghc-bytestring-handle-ghc9.patch"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bytestring-handle")))
     (arguments
      `(#:cabal-revision
-       ("2" "1x1sy3dz2ph9v6jk22wmcv5gk2bka5fv4s68i8q0j9m9pk085w37")))
+       ("2" "1x1sy3dz2ph9v6jk22wmcv5gk2bka5fv4s68i8q0j9m9pk085w37")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "bytestring-handle.cabal"
+               (("base >= 4\\.2 && < 4\\.15") "base")))))))
     (inputs
      (list ghc-hunit ghc-quickcheck ghc-test-framework
            ghc-test-framework-hunit ghc-test-framework-quickcheck2))
@@ -1327,25 +1239,22 @@ Compatibility package for older packages.")
 (define-public ghc-bytestring-lexing
   (package
     (name "ghc-bytestring-lexing")
-    (version "0.5.0.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "bytestring-lexing/bytestring-lexing-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1p7i2haix4m11an3djaq65cnd293hzwqy4cd2i8jxzcl248pk6iy"))))
+    (version "0.5.0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "bytestring-lexing" version))
+              (sha256
+               (base32
+                "14nx7sfs75g57mlfiwgzm5sc3wm4va58zryjp27m5lmfdp30873c"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-smallcheck))
-    (home-page "http://code.haskell.org/~wren/")
+    (properties '((upstream-name . "bytestring-lexing")))
+    (native-inputs (list ghc-tasty ghc-tasty-smallcheck ghc-tasty-quickcheck))
+    (home-page "https://wrengr.org/software/hackage.html")
     (synopsis "Parse and produce literals from strict or lazy bytestrings")
     (description
      "This package provides tools to parse and produce literals efficiently
 from strict or lazy bytestrings.")
-    (license license:bsd-2)))
+    (license license:bsd-3)))
 
 (define-public ghc-bzlib-conduit
   (package
@@ -1354,12 +1263,12 @@ from strict or lazy bytestrings.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/bzlib-conduit/"
-                           "bzlib-conduit-" version ".tar.gz"))
+       (uri (hackage-uri "bzlib-conduit" version))
        (sha256
         (base32
          "0a21zin5plsl37hkxh2jv8cxwyjrbs2fy7n5cyrzgdaa7lmp6b7b"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "bzlib-conduit")))
     (inputs
      (list ghc-bindings-dsl ghc-conduit ghc-data-default-class
            ghc-resourcet))
@@ -1379,21 +1288,21 @@ streaming compression and decompression.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/c2hs/c2hs-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "c2hs" version))
        (sha256
         (base32
          "0k482wv94jbpwd96a2c2lc7qz9k8072slx7l7943472nzk7k41ir"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "c2hs")))
     (inputs
      (list ghc-language-c ghc-dlist))
     (native-inputs
      (list ghc-test-framework ghc-test-framework-hunit ghc-hunit
            ghc-shelly))
     (arguments
-     `(#:phases
+     `(#:cabal-revision
+       ("1" "0hbv1j9b04gm617c5xqndr4iqidabwdpcn2dcrnaacc04ylchvl2")
+       #:phases
        (modify-phases %standard-phases
          ;; The tarball on Hackage does not ship these tests. See
          ;; https://github.com/haskell/c2hs/issues/269
@@ -1432,21 +1341,20 @@ imported with the correct Haskell types.")
 (define-public ghc-cairo
   (package
     (name "ghc-cairo")
-    (version "0.13.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/cairo/"
-                           "cairo-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1hpkyhrlg1d24s34kq6d379z8l8fvznm98wpq37haqjma4nl25hk"))))
+    (version "0.13.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cairo" version))
+              (sha256
+               (base32
+                "1sq2imy359vnbny610n7655a4z5a8fgdxanys4f5nw84246hc2yl"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-utf8-string cairo))
-    (native-inputs
-     (list ghc-gtk2hs-buildtools pkg-config))
-    (home-page "http://projects.haskell.org/gtk2hs/")
+    (properties '((upstream-name . "cairo")))
+    (inputs (list ghc-utf8-string cairo))
+    (native-inputs (list ghc-gtk2hs-buildtools pkg-config))
+    (arguments
+     `(#:extra-directories ("cairo")))
+    (home-page "https://projects.haskell.org/gtk2hs/")
     (synopsis "Haskell bindings to the Cairo vector graphics library")
     (description
      "Cairo is a library to render high quality vector graphics.  There exist
@@ -1457,18 +1365,17 @@ documents, amongst others.")
 (define-public ghc-call-stack
   (package
     (name "ghc-call-stack")
-    (version "0.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "call-stack/call-stack-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0ski7ihdxah7x4x07qgkjljg8hzqs9d6aa5k4cmr40bzp3i8s3mq"))))
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "call-stack" version))
+              (sha256
+               (base32
+                "0yxq6v37kcmgv6rrna4g1ipr8mhkgf00ng2p359ybxq46j5cy2s3"))))
     (build-system haskell-build-system)
-    (native-inputs (list ghc-nanospec))
+    (properties '((upstream-name . "call-stack")))
+    ;(arguments (list #:tests? #f))
+    (native-inputs (list ghc-nanospec-bootstrap))
     (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
@@ -1488,18 +1395,16 @@ call stacks with different versions of the compiler.")
   (package
     (name "ghc-case-insensitive")
     (version "1.2.1.0")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/case-insensitive/case-insensitive-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "case-insensitive" version))
        (sha256
         (base32
          "01p40hfjyldfds5jg6vlvvn3ihs4ki63xn6fh8yzngaz1izc2v99"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "case-insensitive")))
     ;; these inputs are necessary to use this library
     (inputs
      (list ghc-hashable))
@@ -1518,39 +1423,29 @@ the resulting type will be insensitive to cases.")
 (define-public ghc-cassava
   (package
     (name "ghc-cassava")
-    (version "0.5.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cassava/cassava-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "01h1zrdqb313cjd4rqm1107azzx4czqi018c2djf66a5i7ajl3dk"))))
+    (version "0.5.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cassava" version))
+              (sha256
+               (base32
+                "1gp954w05bj83z4i6isq2qxi1flqwppsgxxrp1f75mrs8cglbj5l"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-attoparsec
-           ghc-hashable
-           ghc-scientific
-           ghc-unordered-containers
-           ghc-vector
-           ghc-only
-           ghc-text-short
-           ghc-bytestring-builder))
-    (native-inputs
-     (list ghc-hunit
-           ghc-quickcheck
-           ghc-quickcheck-instances
-           ghc-test-framework
-           ghc-test-framework-hunit
-           ghc-test-framework-quickcheck2))
-    (arguments
-     `(#:cabal-revision
-       ("4"
-        "19rkq41r5vj8drnj850b1wqnc54mxpw0x5z54brq0nvyww5f8ai8")
-       #:configure-flags '("--flags=-bytestring--lt-0_10_4")))
+    (properties '((upstream-name . "cassava")))
+    (inputs (list ghc-attoparsec
+                  ghc-hashable
+                  ghc-scientific
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-only
+                  ghc-bytestring-builder
+                  ghc-nats))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
     (home-page "https://github.com/haskell-hvr/cassava")
     (synopsis "CSV parsing and encoding library")
     (description
@@ -1591,7 +1486,9 @@ very simple example of encoding CSV data:
 
 @verbatim
 >>> Data.Csv.encode [(\"John\",27),(\"Jane\",28)]
-\"John,27\r\nJane,28\r\n\"
+\"John,27

+Jane,28

+\"
 @end verbatim
 ")
     (license license:bsd-3)))
@@ -1603,15 +1500,12 @@ very simple example of encoding CSV data:
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cassava-megaparsec/"
-             "cassava-megaparsec-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "cassava-megaparsec" version))
        (sha256
         (base32
          "0pg9z38jmrylbj683b6pf7psipp7lrdq6mn1hbj8v2gj5lh8yf8n"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cassava-megaparsec")))
     (inputs
      (list ghc-cassava ghc-megaparsec ghc-unordered-containers ghc-vector))
     (native-inputs
@@ -1626,32 +1520,31 @@ provides for better error messages at the expense of some speed.")
 (define-public ghc-cborg
   (package
     (name "ghc-cborg")
-    (version "0.2.5.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cborg/cborg-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "08da498bpbnl5c919m45mjm7sr78nn6qs7xyl0smfgd06wwm65xf"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-half ghc-primitive))
-    (native-inputs
-     (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")
+    (version "0.2.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cborg" version))
+              (sha256
+               (base32
+                "07mh5bk61k5dz2x5g7fqw2cv7bjzs7v65yxvzkq7mdbkq8kwhn9f"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "cborg")))
+    (inputs (list ghc-half ghc-primitive))
+    (native-inputs (list ghc-base-orphans
+                         ghc-aeson
+                         ghc-base64-bytestring
+                         ghc-base16-bytestring
+                         ghc-quickcheck
+                         ghc-random
+                         ghc-scientific
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-vector))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "13m2shrlpvg5s9d40a2463mmckzg50y8jb47zfd6i1rg6q3q6xx6")))
+    (home-page "https://hackage.haskell.org/package/cborg")
     (synopsis "Concise Binary Object Representation")
     (description
      "This package (formerly binary-serialise-cbor) provides an
@@ -1673,55 +1566,48 @@ command-line utility for working with CBOR data.")
 (define-public ghc-cborg-json
   (package
     (name "ghc-cborg-json")
-    (version "0.2.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/cborg-json/cborg-json-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0ysilz7rrjk94sqr3a61s98hr9qfi1xg13bskmlpc6mpgi2s4s5b"))))
+    (version "0.2.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cborg-json" version))
+              (sha256
+               (base32
+                "1m3w0yyp6xb07fx04g5c52pb0b46vpkgpi32w1c8bz867x2p7hsq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cborg-json")))
+    (inputs (list ghc-aeson
+                  ghc-aeson-pretty
+                  ghc-unordered-containers
+                  ghc-scientific
+                  ghc-vector
+                  ghc-cborg))
     (arguments
-     `(#:cabal-revision
-       ("3" "1sn2f9nfjcbr0n62n4kklbdi3pzpwrcy7ilg7m3v41nwrk53ifwy")))
-    (inputs
-     (list ghc-aeson
-           ghc-aeson-pretty
-           ghc-unordered-containers
-           ghc-scientific
-           ghc-vector
-           ghc-cborg))
+     `(#:cabal-revision ("1"
+                         "0zzn2p6yl9mqw7agm5w7iiz105078gv66vxr8bqazilgssqk5wyg")))
     (home-page "https://github.com/well-typed/cborg")
     (synopsis "Library for encoding JSON as CBOR")
-    (description
-     "This package implements the bijection between JSON and CBOR
+    (description "This package implements the bijection between JSON and CBOR
 defined in the CBOR specification, RFC 7049.")
     (license license:bsd-3)))
 
 (define-public ghc-cereal
   (package
     (name "ghc-cereal")
-    (version "0.5.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cereal/cereal-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1mqvd1iwzr50az4y24332x3g3wsrzw8j1iwph02vr7jbjfn8i7id"))))
+    (version "0.5.8.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cereal" version))
+              (sha256
+               (base32
+                "0shg3q933cvf18j1gmxill48d4sl4mvxj2qkj6yya9hvcqh5544r"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-fail ghc-test-framework
-           ghc-test-framework-quickcheck2))
-    (home-page "https://hackage.haskell.org/package/cereal")
+    (properties '((upstream-name . "cereal")))
+    (native-inputs (list ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-quickcheck2))
+    (home-page "https://github.com/GaloisInc/cereal")
     (synopsis "Binary serialization library")
-    (description "This package provides a binary serialization library,
+    (description
+     "This package provides a binary serialization library,
 similar to @code{binary}, that introduces an @code{isolate} primitive for
 parser isolation, and labeled blocks for better error messages.")
     (license license:bsd-3)))
@@ -1733,13 +1619,12 @@ parser isolation, and labeled blocks for better error messages.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cereal-conduit/cereal-conduit-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "cereal-conduit" version))
        (sha256
         (base32
          "1srr7agvgfw78q5s1npjq5sgynvhjgllpihiv37ylkwqm4c4ap6r"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cereal-conduit")))
     (inputs
      (list ghc-conduit ghc-resourcet ghc-cereal))
     (native-inputs
@@ -1751,6 +1636,7 @@ parser isolation, and labeled blocks for better error messages.")
 @code{Sources}, @code{Sinks}, and @code{Conduits}.")
     (license license:bsd-3)))
 
+;; XXX: bytestring <0.11, time >=1.5 && <1.10
 (define-public ghc-cgi
   (package
     (name "ghc-cgi")
@@ -1758,18 +1644,24 @@ parser isolation, and labeled blocks for better error messages.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cgi/cgi-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "cgi" version))
        (sha256
         (base32
          "09wvp9vkqasns4flw9z46nhcy96r4qxjv6h47d5f90drz77pmm8a"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cgi")))
     (inputs
      (list ghc-exceptions ghc-multipart ghc-network-uri ghc-network))
     (native-inputs
      (list ghc-doctest ghc-quickcheck))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "cgi.cabal"
+               (("\\b(bytestring|time)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page
      "https://github.com/cheecheeo/haskell-cgi")
     (synopsis "Library for writing CGI programs")
@@ -1780,21 +1672,17 @@ parser isolation, and labeled blocks for better error messages.")
 (define-public ghc-charset
   (package
     (name "ghc-charset")
-    (version "0.3.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/charset/charset-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1rw6y2insgljbi5l1nwqwv9v865sswjly9rvwipd8zajkgks7aks"))))
+    (version "0.3.9")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "charset" version))
+              (sha256
+               (base32
+                "12wrphd5j1asb3n6awbph4n695mfmnzk6yzggrp387hx960qfkyb"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-semigroups ghc-unordered-containers))
-    (home-page "https://github.com/ekmett/charset")
+    (properties '((upstream-name . "charset")))
+    (inputs (list ghc-unordered-containers ghc-semigroups))
+    (home-page "http://github.com/ekmett/charset")
     (synopsis "Fast unicode character sets for Haskell")
     (description "This package provides fast unicode character sets for
 Haskell, based on complemented PATRICIA tries.")
@@ -1803,26 +1691,21 @@ Haskell, based on complemented PATRICIA tries.")
 (define-public ghc-chart
   (package
     (name "ghc-chart")
-    (version "1.9.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/Chart/"
-                           "Chart-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0p69kq5kh40gd4y8wqabypmw67pqh42vaaw64zv9sf8j075g85ry"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("2" "04mmsm54mdqcrypvgawhhbwjscmky3j7g5841bc71c0q6d33h2k4")))
-    (inputs
-     (list ghc-old-locale
-           ghc-lens
-           ghc-colour
-           ghc-data-default-class
-           ghc-operational
-           ghc-vector))
+    (version "1.9.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "Chart" version))
+              (sha256
+               (base32
+                "0ylxin419s35xq1j4hcnylrch3m252wqdkfjp5b323qhv4a8y1im"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "Chart")))
+    (inputs (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
@@ -1837,15 +1720,15 @@ backends provided by the @code{Cairo} and @code{Diagrams} libraries.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/Chart-cairo/"
-                           "Chart-cairo-" version ".tar.gz"))
+       (uri (hackage-uri "Chart-cairo" version))
        (sha256
         (base32
          "0clm68alzsakkn5m4h49dgx33crajacsykb4hry2fh9zxp9j743f"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Chart-cairo")))
     (arguments
-     `(#:cabal-revision
-       ("2" "0z93znn3dpgj80iiz3a67m90x0j9ljr0jd1ws9jkzj7rk88014gp")))
+     `(#:cabal-revision ("3"
+                         "1d48i6y0lzj066swdb3x56jipxwlx1szwn7j43d50hxmcfjrsgc9")))
     (inputs
      (list ghc-old-locale
            ghc-cairo
@@ -1864,23 +1747,19 @@ backend for the Charts library.")
 (define-public ghc-chasingbottoms
   (package
     (name "ghc-chasingbottoms")
-    (version "1.3.1.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/ChasingBottoms/"
-                           "ChasingBottoms-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1flr56hd8ny0ddlv1agi0ikdjv5wgx0aba6xqdsn3nv6dyw9nbf3"))))
+    (version "1.3.1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ChasingBottoms" version))
+              (sha256
+               (base32
+                "1vy9yq07p95qiap1pcp2bbbn1mqvp3spyrswpdz0qfcn06656650"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-quickcheck ghc-random ghc-syb))
-    (home-page "https://hackage.haskell.org/package/ChasingBottoms")
+    (properties '((upstream-name . "ChasingBottoms")))
+    (inputs (list ghc-quickcheck ghc-random ghc-syb))
+    (home-page "http://hackage.haskell.org/package/ChasingBottoms")
     (synopsis "Testing of partial and infinite values in Haskell")
     (description
-     ;; FIXME: There should be a @comma{} in the uref text, but it is not
-     ;; rendered properly.
      "This is a library for testing code involving bottoms or infinite values.
 For the underlying theory and a larger example involving use of QuickCheck,
 see the article
@@ -1896,14 +1775,12 @@ Partial and Infinite Values\"}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cheapskate/cheapskate-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "cheapskate" version))
        (sha256
         (base32
          "17n6laihqrjn62l8qw4565nf77zkvrl68bjmc3vzr4ckqfblhdzd"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cheapskate")))
     (inputs
      (list ghc-blaze-html ghc-xss-sanitize ghc-data-default ghc-syb
            ghc-uniplate))
@@ -1923,13 +1800,12 @@ cross-site scripting (@dfn{XSS}) attacks.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/chell/chell-"
-             version ".tar.gz"))
+       (uri (hackage-uri "chell" version))
        (sha256
         (base32
          "1i845isfbk0yq852am9bqmxfpfkpnlha8nfidffsv4gw2p8gg6fg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "chell")))
     (arguments
      `(#:cabal-revision
        ("1" "1q93wrw03ix4cmnkz3lzkixcvvizw6i2ia2zifdfak1dvxnblxk0")))
@@ -1952,13 +1828,12 @@ testing strategies.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/chell-quickcheck/"
-             "chell-quickcheck-" version ".tar.gz"))
+       (uri (hackage-uri "chell-quickcheck" version))
        (sha256
         (base32
          "0n8c57n88r2bx0bh8nabsz07m42rh23ahs3hgyzf8gr76l08zq03"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "chell-quickcheck")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2014,13 +1889,12 @@ testing strategies.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "chunked-data-" version "/"
-                           "chunked-data-" version ".tar.gz"))
+       (uri (hackage-uri "chunked-data" version))
        (sha256
         (base32
          "16m7y7fwrirbjbqqcsfmr4yxa9qvfax6r7pw0zl9ky71ms0wa47p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "chunked-data")))
     (inputs (list ghc-vector ghc-semigroups))
     (home-page "https://github.com/snoyberg/mono-traversable")
     (synopsis "Typeclasses for dealing with various chunked data
@@ -2032,22 +1906,20 @@ classy-prelude.")
 (define-public ghc-clock
   (package
     (name "ghc-clock")
-    (version "0.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "clock/"
-             "clock-" version ".tar.gz"))
-       (sha256
-        (base32 "0qg4ljwmw28vvxjzr4sknh8220abjcx2b0sq3ljqprh3qw8b2p8b"))))
+    (version "0.8.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "clock" version))
+              (sha256
+               (base32
+                "1l850pf1dxjf3i15wc47d64gzkpzgvw0bq13fd8zvklq9kdyap44"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-tasty ghc-tasty-quickcheck))
-    (home-page "https://hackage.haskell.org/package/clock")
+    (properties '((upstream-name . "clock")))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck))
+    (home-page "https://github.com/corsis/clock")
     (synopsis "High-resolution clock for Haskell")
-    (description "A package for convenient access to high-resolution clock and
+    (description
+     "A package for convenient access to high-resolution clock and
 timer functions of different operating systems via a unified API.")
     (license license:bsd-3)))
 
@@ -2069,12 +1941,12 @@ timer functions of different operating systems via a unified API.")
               (method url-fetch)
               ;; XXX As of version 0.6, this package bundles libcmark 0.28.0.
               ;; See cbits/cmark_version.h.
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "cmark/cmark-" version ".tar.gz"))
+              (uri (hackage-uri "cmark" version))
               (sha256
                (base32
                 "1p41z6z8dqxk62287lvhhg4ayy9laai9ljh4azsnzb029v6mbv0d"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "cmark")))
     (native-inputs
      (list ghc-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
@@ -2089,22 +1961,18 @@ sources, and does not require prior installation of the C library.")
 (define-public ghc-cmark-gfm
   (package
     (name "ghc-cmark-gfm")
-    (version "0.2.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "cmark-gfm/cmark-gfm-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1skzdg1icmhn0zrkhbnba4200ymah8sd5msk4qfgawrk77zilw7f"))))
+    (version "0.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "cmark-gfm" version))
+              (sha256
+               (base32
+                "0la4sd0cmv3zmn0kygbd77dknyh55h0b0qx5jg883hqnvnhaq721"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hunit))
+    (properties '((upstream-name . "cmark-gfm")))
+    (native-inputs (list ghc-hunit))
     (home-page "https://github.com/kivikakk/cmark-gfm-hs")
-    (synopsis
-     "Fast, accurate GitHub Flavored Markdown parser and renderer")
+    (synopsis "Fast, accurate GitHub Flavored Markdown parser and renderer")
     (description
      "This package provides Haskell bindings for libcmark-gfm, the reference
 parser for GitHub Flavored Markdown, a fully specified variant of Markdown.
@@ -2119,14 +1987,13 @@ of the C library.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/cmdargs/cmdargs-"
-             version ".tar.gz"))
+       (uri (hackage-uri "cmdargs" version))
        (sha256
         (base32
          "0xfabq187n1vqrnnm4ciprpl0dcjq97rksyjnpcniwva9rffmn7p"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "cmdargs")))
+    (outputs '("out" "doc"))
     (home-page
      "http://community.haskell.org/~ndm/cmdargs/")
     (synopsis "Command line argument processing")
@@ -2141,13 +2008,12 @@ of the C library.")
   (source
    (origin
      (method url-fetch)
-     (uri (string-append
-           "https://hackage.haskell.org/package/code-page/code-page-"
-           version ".tar.gz"))
+     (uri (hackage-uri "code-page" version))
       (sha256
        (base32
         "1aiavczjk6f2kc1cdwjc1mwkr4d9shiz3xwmfbzsdn0yqqchxydj"))))
   (build-system haskell-build-system)
+  (properties '((upstream-name . "code-page")))
   (home-page "https://github.com/RyanGlScott/code-page")
   (synopsis "Windows code page library for Haskell")
   (description "A cross-platform library with functions for adjusting
@@ -2162,9 +2028,7 @@ nothing.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/colour/colour-"
-             version ".tar.gz"))
+       (uri (hackage-uri "colour" version))
        (sha256
         (base32
          "0wgqj64mh2y2zk77kv59k3xb3dk4wmgfp988y74sp9a4d76mvlrc"))))
@@ -2173,6 +2037,7 @@ nothing.")
      ;; ghc-test-framework -> ghc-ansi-terminal -> ghc-colour.
      `(#:tests? #f))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "colour")))
     (home-page "https://wiki.haskell.org/Colour")
     (synopsis "Model for human colour perception")
     (description
@@ -2188,14 +2053,12 @@ supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/comonad/comonad-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "comonad" version))
        (sha256
         (base32
          "04rxycp2pbkrvhjgpgx08jmsipjz4cdmhv59dbp47k4jq8ndyv7g"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "comonad")))
     (inputs
      (list ghc-distributive ghc-tagged ghc-indexed-traversable
            ghc-transformers-compat))
@@ -2210,13 +2073,12 @@ supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
     (version "1.0.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/concatenative/concatenative-"
-                    version ".tar.gz"))
+              (uri (hackage-uri "concatenative" version))
               (sha256
                (base32
                 "05xwqvcdnk8bsyj698ab9jxpa1nk23pf3m7wi9mwmw0q8n99fngd"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "concatenative")))
     (home-page
      "https://patch-tag.com/r/salazar/concatenative/snapshot/current/content/pretty")
     (synopsis "Library for postfix control flow")
@@ -2233,13 +2095,12 @@ postfix notation.  For more information on stack based languages, see
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "concurrent-extra/concurrent-extra-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "concurrent-extra" version))
        (sha256
         (base32
          "1y8xk460fvnw0idzdiylmm874sjny4q9jxb1js9fjz8lw2wns3h4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "concurrent-extra")))
     (arguments
      ;; XXX: The ReadWriteLock 'stressTest' fails.
      `(#:tests? #f))
@@ -2277,24 +2138,18 @@ Python.")
 (define-public ghc-concurrent-output
   (package
     (name "ghc-concurrent-output")
-    (version "1.10.12")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/concurrent-output/concurrent-output-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "081wpag1d5znr0ynrjvkc14xl816m88vz9hgfm3g3sp6ak7s3y47"))))
+    (version "1.10.16")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "concurrent-output" version))
+              (sha256
+               (base32
+                "0l4k0bkq5bddqraf14g3ngyzwff17f3ngg4axlilcl3zf3c4bamh"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-async ghc-exceptions ghc-ansi-terminal ghc-terminal-size))
-    (home-page
-     "https://hackage.haskell.org/package/concurrent-output")
-    (synopsis
-     "Ungarble output from several threads or commands")
+    (properties '((upstream-name . "concurrent-output")))
+    (inputs (list ghc-async ghc-ansi-terminal ghc-terminal-size))
+    (home-page "http://hackage.haskell.org/package/concurrent-output")
+    (synopsis "Ungarble output from several threads or commands")
     (description
      "Lets multiple threads and external processes concurrently output to the
 console, without it getting all garbled up.
@@ -2310,13 +2165,13 @@ concurrent threads.  Can be used for progress displays etc.")
     (version "1.3.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "conduit/conduit-" version ".tar.gz"))
+              (uri (hackage-uri "conduit" version))
               (sha256
                (base32
                 "18izjgff4pmrknc8py06yvg3g6x27nx0rzmlwjxcflwm5v4szpw4"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "conduit")))
+    (outputs '("out" "doc"))
     (inputs
      (list ghc-exceptions
            ghc-lifted-base
@@ -2344,36 +2199,35 @@ space as enumerator/iteratee and pipes.")
 (define-public ghc-conduit-algorithms
   (package
     (name "ghc-conduit-algorithms")
-    (version "0.0.11.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "conduit-algorithms/conduit-algorithms-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0c1jwz30kkvimx7lb61782yk0kyfamrf5bqc3g1h7g51lk8bbv9i"))))
+    (version "0.0.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "conduit-algorithms" version))
+              (sha256
+               (base32
+                "1i5jq66xylcnk3yhv2m6lhyqfdrwr94w8v67jzwlvja15jv7mj9v"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "conduit-algorithms")))
+    (inputs (list ghc-async
+                  ghc-bzlib-conduit
+                  ghc-conduit
+                  ghc-conduit-combinators
+                  ghc-conduit-extra
+                  ghc-conduit-zstd
+                  ghc-fingertree
+                  ghc-lzma-conduit
+                  ghc-monad-control
+                  ghc-resourcet
+                  ghc-stm-conduit
+                  ghc-streaming-commons
+                  ghc-unliftio-core
+                  ghc-vector))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-tasty-th))
     (home-page "https://github.com/luispedro/conduit-algorithms#readme")
     (synopsis "Conduit-based algorithms")
     (description
@@ -2388,13 +2242,12 @@ level asynchronous processing and some other utilities.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "conduit-combinators-" version "/"
-                           "conduit-combinators-" version ".tar.gz"))
+       (uri (hackage-uri "conduit-combinators" version))
        (sha256
         (base32
          "1lz70vwp4y4lpsivxl0cshq7aq3968rh48r6rjvpyaj2l0bdj5wp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "conduit-combinators")))
     (inputs (list ghc-conduit
                   ghc-conduit-extra
                   ghc-transformers-base
@@ -2420,36 +2273,27 @@ as well as a convenient Conduit module.")
 (define-public ghc-conduit-extra
   (package
     (name "ghc-conduit-extra")
-    (version "1.3.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "conduit-extra/conduit-extra-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1n8js1y1rdswvp0bkjmmz19fag19bdxgwsrqz93yc09w43p8sr4a"))))
+    (version "1.3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "conduit-extra" version))
+              (sha256
+               (base32
+                "0lzip3af77wxf3a3vilfymqhd26gkvabx2fkj22w74nq960c6l49"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "conduit-extra")))
+    (inputs (list ghc-conduit
+                  ghc-async
+                  ghc-attoparsec
+                  ghc-network
+                  ghc-primitive
+                  ghc-resourcet
+                  ghc-streaming-commons
+                  ghc-unliftio-core
+                  ghc-typed-process
+                  hspec-discover))
+    (native-inputs (list ghc-hspec ghc-quickcheck ghc-transformers-base))
+    (home-page "http://github.com/snoyberg/conduit")
     (synopsis "Conduit adapters for common libraries")
     (description
      "The @code{conduit} package itself maintains relative small dependencies.
@@ -2466,12 +2310,12 @@ dependencies.  The basic idea is that this package should only depend on
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "conduit-zstd/conduit-zstd-" version ".tar.gz"))
+       (uri (hackage-uri "conduit-zstd" version))
        (sha256
         (base32
          "0f0ir4zs3skw33c8mfppxhfsyqh1c2cnc4gkf8bvv3bdiikdj1yl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "conduit-zstd")))
     (inputs
      (list ghc-conduit ghc-zstd))
     (native-inputs
@@ -2488,25 +2332,17 @@ interface}.")
 (define-public ghc-config-ini
   (package
     (name "ghc-config-ini")
-    (version "0.2.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "config-ini/config-ini-" version ".tar.gz"))
-       (sha256
-        (base32 "0dfm4xb1sd713rcqzplzdgw68fyhj24i6lj8j3q8kldpmkl98lbf"))))
+    (version "0.2.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "config-ini" version))
+              (sha256
+               (base32
+                "07vgpydzd44ayhq9c3q1335vphw384z8baf0wd0mnarr48yfaz3g"))))
     (build-system haskell-build-system)
-    (arguments
-     ;; XXX The tests fail to compile: “The constructor ‘I1.Ini’ should have 2
-     ;; arguments, but has been given 1”.
-     `(#:tests? #f
-       #:cabal-revision
-       ("2" "0iwraaa0y1b3xdsg760j1wpylkqshky0k2djcg0k4s97lrwqpbcz")))
-    (native-inputs
-     (list ghc-doctest ghc-hedgehog ghc-ini ghc-microlens))
-    (inputs
-     (list ghc-megaparsec ghc-unordered-containers))
+    (properties '((upstream-name . "config-ini")))
+    (inputs (list ghc-unordered-containers ghc-megaparsec))
+    (native-inputs (list ghc-ini ghc-hedgehog ghc-doctest ghc-microlens))
     (home-page "https://github.com/aisamanra/config-ini")
     (synopsis "Monadic Haskell DSL for parsing simple INI configuration files")
     (description
@@ -2526,13 +2362,12 @@ human-readable error messages when things go wrong.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "configurator/configurator-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "configurator" version))
        (sha256
         (base32
          "1d1iq1knwiq6ia5g64rw5hqm6dakz912qj13r89737rfcxmrkfbf"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "configurator")))
     (inputs
      (list ghc-attoparsec ghc-hashable ghc-unix-compat
            ghc-unordered-containers))
@@ -2563,13 +2398,12 @@ and daemons.  The features include:
     (version "0.3.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "connection/connection-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "connection" version))
               (sha256
                (base32
                 "1nbmafhlg0wy4aa3p7amjddbamdz6avzrxn4py3lvhrjqn4raxax"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "connection")))
     (inputs
      (list ghc-byteable
            ghc-data-default-class
@@ -2591,29 +2425,25 @@ the choice of SSL/TLS, and SOCKS.")
 (define-public ghc-constraints
   (package
     (name "ghc-constraints")
-    (version "0.13")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/constraints/constraints-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "143558jykvya7y8134dx30g6nh27q5s61nbq369p69igd1aayncj"))))
+    (version "0.13.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "constraints" version))
+              (sha256
+               (base32
+                "0d248szyp70k1qlivsimk0j5vz9hdx1alhismry5v35qyinr91j1"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hashable ghc-semigroups ghc-transformers-compat
-           ghc-type-equality))
-    (native-inputs
-     (list ghc-hspec hspec-discover))
-    (home-page "https://github.com/ekmett/constraints/")
+    (properties '((upstream-name . "constraints")))
+    (inputs (list ghc-hashable ghc-transformers-compat ghc-type-equality
+                  ghc-semigroups-bootstrap))
+    (native-inputs (list ghc-hspec hspec-discover))
+    (home-page "http://github.com/ekmett/constraints/")
     (synopsis "Constraint manipulation")
     (description
      "GHC 7.4 gave us the ability to talk about @code{ConstraintKinds}.
 They stopped crashing the compiler in GHC 7.6.  This package provides
 a vocabulary for working with them.")
-    (license license:bsd-3)))
+    (license license:bsd-2)))
 
 (define-public ghc-contravariant
   (package
@@ -2622,14 +2452,12 @@ a vocabulary for working with them.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/contravariant/contravariant-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "contravariant" version))
        (sha256
         (base32
          "1ynz89vfn7czxpa203zmdqknkvpylzzl9rlkpasx1anph1jxcbq6"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "contravariant")))
     (inputs
      (list ghc-void ghc-transformers-compat ghc-statevar ghc-semigroups))
     (home-page
@@ -2641,19 +2469,16 @@ a vocabulary for working with them.")
 (define-public ghc-contravariant-extras
   (package
     (name "ghc-contravariant-extras")
-    (version "0.3.5.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "contravariant-extras-" version "/"
-                           "contravariant-extras-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0ikwzg0992j870yp0x2ssf4mv2hw2nml979apg493m72xnvr1jz9"))))
+    (version "0.3.5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "contravariant-extras" version))
+              (sha256
+               (base32
+                "0r4bnl4gi6zd46h6fjkr33hw37rjxwwr00m08vgbzgkdp853g1ba"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-contravariant ghc-template-haskell-compat-v0208))
+    (properties '((upstream-name . "contravariant-extras")))
+    (inputs (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
@@ -2667,15 +2492,12 @@ a vocabulary for working with them.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/"
-             "package/control-monad-free/control-monad-free-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "control-monad-free" version))
        (sha256
         (base32
          "1habgf7byffqf1rqjkzpihvdhclaafgqsqpfpwp3fgpj5ayk1j33"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "control-monad-free")))
     (home-page "https://github.com/pepeiborra/control-monad-free")
     (synopsis "Free monads and monad transformers")
     (description
@@ -2693,19 +2515,18 @@ Free Monads, MPC'08}
 (define-public ghc-convertible
   (package
     (name "ghc-convertible")
-    (version "1.1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/convertible/"
-                           "convertible-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0v18ap1mccnndgxmbfgyjdicg8jlss01bd5fq8a576dr0h4sgyg9"))))
+    (version "1.1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "convertible" version))
+              (sha256
+               (base32
+                "1vwc6h1z88xkw4bq3js8x9x86jnk3amdskyksca77p0kwiqbs7lr"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-old-time ghc-old-locale))
-    (home-page "https://hackage.haskell.org/package/convertible")
+    (properties '((upstream-name . "convertible")))
+    (inputs (list ghc-old-time))
+    (native-inputs (list ghc-quickcheck))
+    (home-page "http://hackage.haskell.org/package/convertible")
     (synopsis "Typeclasses and instances for converting between types")
     (description
      "This package provides a typeclass with a single function that is
@@ -2722,14 +2543,12 @@ function performs the conversion you desire.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/csv/csv-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "csv" version))
        (sha256
         (base32
          "00767ai09wm7f0yzmpqck3cpgxncpr9djnmmz5l17ajz69139x4c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "csv")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2738,7 +2557,7 @@ function performs the conversion you desire.")
              (substitute* "Setup.hs"
                (("defaultMainWithHooks defaultUserHooks")
                 "defaultMain")))))))
-    (home-page "http://hackage.haskell.org/package/csv")
+    (home-page "https://hackage.haskell.org/package/csv")
     (synopsis "CSV loader and dumper")
     (description
      "This library parses and dumps documents that are formatted according to
@@ -2754,12 +2573,11 @@ lingua franca for spreadsheets, and for certain web services.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/data-accessor/data-accessor-"
-             version ".tar.gz"))
+       (uri (hackage-uri "data-accessor" version))
        (sha256
         (base32 "0f1yvvzr24qgrx6k2g101s7vp012802iw6kli903n28nig93yn0x"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-accessor")))
     (home-page "https://wiki.haskell.org/Record_access")
     (synopsis
      "Haskell utilities for accessing and manipulating fields of records")
@@ -2774,12 +2592,11 @@ manipulating fields of records.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/data-accessor-transformers/"
-             "data-accessor-transformers-" version ".tar.gz"))
+       (uri (hackage-uri "data-accessor-transformers" version))
        (sha256
         (base32 "0yp030vafbpddl27m606aibbbr5ar5j5bsv4bksscz3cq4yq5j10"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-accessor-transformers")))
     (inputs (list ghc-data-accessor))
     (home-page "https://wiki.haskell.org/Record_access")
     (synopsis "Use Accessor to access state in transformers State monad")
@@ -2790,20 +2607,16 @@ Accessor to access state in transformers State monad.")
 (define-public ghc-data-clist
   (package
     (name "ghc-data-clist")
-    (version "0.1.2.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/data-clist/"
-                           "data-clist-" version ".tar.gz"))
-       (sha256
-        (base32 "1mwfhnmvi3vicyjzl33m6pcipi2v887zazyqxygq258ndd010s9m"))))
+    (version "0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "data-clist" version))
+              (sha256
+               (base32
+                "04mj0d1yp0l27v2my51w9q5zpdrdhp29fdyvmwqgxxp8f6yiwfhw"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck))
-    (arguments
-     `(#:cabal-revision
-       ("1" "13hg7a3d4ky8b765dl03ryxg28lq8iaqj5ky3j51r0i1i4f2a9hy")))
+    (properties '((upstream-name . "data-clist")))
+    (native-inputs (list ghc-quickcheck))
     (home-page "https://github.com/sw17ch/data-clist")
     (synopsis "Simple, functional, bidirectional circular list type")
     (description
@@ -2820,13 +2633,11 @@ observed.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/data-default/data-default-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "data-default" version))
        (sha256
         (base32 "04d5n8ybmcxba9qb6h389w9zfq1lvj81b82jh6maqp6pkhkmvydh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-default")))
     (inputs
      (list ghc-data-default-class ghc-data-default-instances-base
            ghc-data-default-instances-containers
@@ -2847,12 +2658,11 @@ packages.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/data-default-class/"
-             "data-default-class-" version ".tar.gz"))
+       (uri (hackage-uri "data-default-class" version))
        (sha256
         (base32 "0miyjz8d4jyvqf2vp60lyfbnflx6cj2k8apmm9ly1hq0y0iv80ag"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-default-class")))
     (home-page "https://hackage.haskell.org/package/data-default-class")
     (synopsis "Types with default values")
     (description
@@ -2866,13 +2676,11 @@ packages.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "data-default-instances-base/"
-             "data-default-instances-base-" version ".tar.gz"))
+       (uri (hackage-uri "data-default-instances-base" version))
        (sha256
         (base32 "0ym1sw3ssdzzifxxhh76qlv8kkmb2iclc158incv1dklyr9y8kw4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-default-instances-base")))
     (inputs
      (list ghc-data-default-class))
     (home-page "https://hackage.haskell.org/package/data-default-instances-base")
@@ -2889,13 +2697,11 @@ package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "data-default-instances-containers/"
-             "data-default-instances-containers-" version ".tar.gz"))
+       (uri (hackage-uri "data-default-instances-containers" version))
        (sha256
         (base32 "06h8xka031w752a7cjlzghvr8adqbl95xj9z5zc1b62w02phfpm5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-default-instances-containers")))
     (inputs
      (list ghc-data-default-class))
     (home-page "https://hackage.haskell.org/package/data-default-instances-containers")
@@ -2911,13 +2717,11 @@ package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "data-default-instances-dlist/"
-             "data-default-instances-dlist-" version ".tar.gz"))
+       (uri (hackage-uri "data-default-instances-dlist" version))
        (sha256
         (base32 "0narkdqiprhgayjiawrr4390h4rq4pl2pb6mvixbv2phrc8kfs3x"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-default-instances-dlist")))
     (inputs
      (list ghc-data-default-class ghc-dlist))
     (home-page "https://hackage.haskell.org/package/data-default-instances-dlist")
@@ -2933,13 +2737,11 @@ package.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-              "https://hackage.haskell.org/package/"
-              "data-default-instances-old-locale/"
-              "data-default-instances-old-locale-" version ".tar.gz"))
+        (uri (hackage-uri "data-default-instances-old-locale" version))
         (sha256
           (base32 "00h81i5phib741yj517p8mbnc48myvfj8axzsw44k34m48lv1lv0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-default-instances-old-locale")))
     (inputs
      (list ghc-data-default-class ghc-old-locale))
     (home-page
@@ -2956,13 +2758,15 @@ package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/data-fix/"
-             "data-fix-" version ".tar.gz"))
+       (uri (hackage-uri "data-fix" version))
        (sha256
         (base32 "1k0rcbb6dzv0ggdxqa2bh4jr829y0bczjrg98mrk5733q0xjs5rs"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-fix")))
     (inputs (list ghc-hashable))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0z77i9y86wlc13396akl8qxq39rwpkhhcs5fadzk47bwn7v1gsmx")))
     (home-page "https://github.com/spell-music/data-fix")
     (synopsis "Fixpoint data types")
     (description
@@ -2979,11 +2783,11 @@ Thanks for contribution to: Matej Kollar, Herbert Valerio Riedel")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/data-hash"
-                           "/data-hash-" version ".tar.gz"))
+       (uri (hackage-uri "data-hash" version))
        (sha256
         (base32 "1ghbqvc48gf9p8wiy71hdpaj7by3b9cw6wgwi3qqz8iw054xs5wi"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-hash")))
     (inputs
      (list ghc-quickcheck ghc-test-framework
            ghc-test-framework-quickcheck2))
@@ -3001,13 +2805,12 @@ It includes hashing functions for all basic Haskell98 types.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/data-ordlist/data-ordlist-"
-             version ".tar.gz"))
+       (uri (hackage-uri "data-ordlist" version))
        (sha256
         (base32
          "03a9ix1fcx08viwv2jg5ndw1qbkydyyrmjvqr9wasmcik9x1wv3g"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "data-ordlist")))
     (home-page "https://hackage.haskell.org/package/data-ordlist")
     (synopsis "Set and bag operations on ordered lists")
     (description
@@ -3017,43 +2820,38 @@ It includes hashing functions for all basic Haskell98 types.")
 (define-public ghc-dbus
   (package
     (name "ghc-dbus")
-    (version "1.2.17")
-    (source
-      (origin
-        (method url-fetch)
-        (uri
-         (string-append
-          "https://hackage.haskell.org/package/dbus/dbus-"
-          version ".tar.gz"))
-        (sha256
-          (base32
-            "0iyfnkxcnm1vl379ry88fqxgn2y8q6ilsvpic6ciassnyv5pcbrv"))))
-    (build-system haskell-build-system)
-    (inputs
-      (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")
+    (version "1.2.27")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "dbus" version))
+              (sha256
+               (base32
+                "0lkk9hd78h2ilvi0bj5jqq5q5lwyxzdlknwvckhwyxnlf3y6dz8z"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "dbus")))
+    (inputs (list ghc-cereal
+                  ghc-conduit
+                  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
+                         ;; dbus-daemon spawned by testsuite.
+                         dbus))
+    (arguments (list #:tests? #f)) ; Network tests fail to connect.
+    (home-page "https://github.com/rblaze/haskell-dbus#readme")
     (synopsis "Client library for the D-Bus IPC system")
     (description
-      "D-Bus is a simple, message-based protocol for inter-process
+     "D-Bus is a simple, message-based protocol for inter-process
 communication, which allows applications to interact with other parts
 of the machine and the user's session using remote procedure
 calls.   D-Bus is a essential part of the modern Linux desktop, where
@@ -3070,14 +2868,12 @@ interfaces common to foreign bindings.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/Decimal/Decimal-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "Decimal" version))
        (sha256
         (base32
          "19w7i9f0lbiyzwa0v3bm95233vi7f1688f0xms6cnjsf88h04ym3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Decimal")))
     (native-inputs
      (list ghc-hunit ghc-quickcheck ghc-test-framework
            ghc-test-framework-quickcheck2 ghc-test-framework-hunit))
@@ -3095,16 +2891,15 @@ value.")
     (version "0.2.0.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "deepseq-generics/deepseq-generics-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "deepseq-generics" version))
               (sha256
                (base32
                 "17bwghc15mc9pchfd1w46jh2p3wzc86aj6a537wqwxn08rayzcxh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "deepseq-generics")))
     (arguments
-     `(#:cabal-revision
-       ("6" "1qwnpdjsrqzn18pjmvv9aqz3l12fbdcimf62wkj33yfh69rx4s42")))
+     `(#:cabal-revision ("8"
+                         "0dcv4kf2g4xyacjpci9kql1gm706lkzhcyz9ks9jkbdvyvs8lf90")))
     (native-inputs
      (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/hvr/deepseq-generics")
@@ -3122,13 +2917,12 @@ providing an @code{rnf} implementation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "dense-linear-algebra/dense-linear-algebra-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "dense-linear-algebra" version))
        (sha256
         (base32
          "1m7jjxahqxj7ilic3r9806mwp5rnnsmn8vvipkmk40xl65wplxzp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "dense-linear-algebra")))
     (inputs
      (list ghc-math-functions
            ghc-primitive
@@ -3144,60 +2938,34 @@ providing an @code{rnf} implementation.")
 related modules split from the statistics library.")
     (license license:bsd-2)))
 
-(define-public ghc-descriptive
-  (package
-    (name "ghc-descriptive")
-    (version "0.9.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/descriptive/descriptive-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0y5693zm2kvqjilybbmrcv1g6n6x2p6zjgi0k0axjw1sdhh1g237"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-aeson ghc-bifunctors ghc-scientific ghc-vector))
-    (native-inputs
-     (list ghc-hunit ghc-hspec))
-    (home-page
-     "https://github.com/chrisdone/descriptive")
-    (synopsis
-     "Self-describing consumers/parsers: forms, cmd-line args, JSON, etc.")
-    (description
-     "This package provides datatypes and functions for creating consumers
-and parsers with useful semantics.")
-    (license license:bsd-3)))
-
 (define-public ghc-diagrams-core
   (package
     (name "ghc-diagrams-core")
-    (version "1.5.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "diagrams-core/diagrams-core-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0y3smp3hiyfdirdak3j4048cgqv7a5q9p2jb6z8na2llys5mrmdn"))))
+    (version "1.5.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "diagrams-core" version))
+              (sha256
+               (base32
+                "1gv1p5hrxi3hks0nb4l38gdgfq9bh9d86b6dxcyzqxrwxbxk1khn"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "diagrams-core")))
+    (inputs (list ghc-unordered-containers
+                  ghc-semigroups
+                  ghc-monoid-extras
+                  ghc-dual-tree
+                  ghc-lens
+                  ghc-linear
+                  ghc-adjunctions
+                  ghc-distributive
+                  ghc-profunctors))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1gahbyv00xyr4pcmpq4g95jyh7844fp8z0g9l2ybifv4s73vdrym")))
+    (home-page "https://diagrams.github.io")
     (synopsis "Core libraries for diagrams embedded domain-specific language")
-    (description "This package provides the core modules underlying
+    (description
+     "This package provides the core modules underlying
 diagrams, an embedded domain-specific language for compositional,
 declarative drawing.")
     (license license:bsd-3)))
@@ -3205,49 +2973,46 @@ declarative drawing.")
 (define-public ghc-diagrams-lib
   (package
     (name "ghc-diagrams-lib")
-    (version "1.4.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "diagrams-lib/diagrams-lib-" version ".tar.gz"))
-       (sha256
-        (base32
-         "09np7kj8si8kcb854f95a0cq392mgbxif8lnazbpfsa1k87d9vzy"))))
-    (build-system haskell-build-system)
-    (inputs
-     (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))
+    (version "1.4.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "diagrams-lib" version))
+              (sha256
+               (base32
+                "1vx51g9znb4a9bf20pjd9zr98wmh39avk2i06217p0iidcw8whz6"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "diagrams-lib")))
+    (inputs (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-cereal))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
+                         ghc-quickcheck ghc-numeric-extras))
     (arguments
-     `(#:cabal-revision
-       ("1" "1c7kpnbvxwdcmk5znqyig3l6s986ppj168ck5v72dfbp8cjvwa8i")))
-    (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
+     `(#:cabal-revision ("1"
+                         "14lxvlxdzkrhdgblgglr5k0rwak0yl4gzawqkfla04mkg6hkh5bb")))
+    (home-page "http://diagrams.github.io")
     (synopsis "Embedded domain-specific language for declarative graphics")
-    (description "Diagrams is a flexible, extensible embedded
+    (description
+     "Diagrams is a flexible, extensible embedded
 domain-specific language (EDSL) for creating graphics of many types.
 Graphics can be created in arbitrary vector spaces and rendered with
 multiple backends.  This package provides a standard library of
@@ -3261,13 +3026,12 @@ primitives and operations for creating diagrams.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "diagrams-solve/diagrams-solve-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "diagrams-solve" version))
        (sha256
         (base32
          "09qqwcvbvd3a0j5fnp40dbzw0i3py9c7kgizj2aawajwbyjvpd17"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "diagrams-solve")))
     (native-inputs
      (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (arguments
@@ -3286,33 +3050,31 @@ and cyclic tridiagonal linear systems.")
 (define-public ghc-diagrams-svg
   (package
     (name "ghc-diagrams-svg")
-    (version "1.4.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "diagrams-svg/diagrams-svg-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1ysv6cz0fngrndl4wjmw4hrdj2rik5fxa1dkxzwnlgf1xwpvxgk8"))))
-    (build-system haskell-build-system)
-    (inputs
-     (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))
+    (version "1.4.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "diagrams-svg" version))
+              (sha256
+               (base32
+                "002lgmq78c6rsvds9bgm6m4w8j6qpg260mc52hf97wj6m050l237"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "diagrams-svg")))
+    (inputs (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")))
-    (home-page "https://archives.haskell.org/projects.haskell.org/diagrams/")
+     `(#:cabal-revision ("4"
+                         "026mkj9fz64rdrap25mp8cwdrzwj90h35qg9kkn078fac93aaq10")))
+    (home-page "https://diagrams.github.io/")
     (synopsis "Scalable Vector Grpahics backend for the diagrams framework")
     (description "This package provides a modular backend for rendering
 diagrams created with the diagrams embedded domain-specific
@@ -3326,13 +3088,12 @@ language (EDSL) to Scalable Vector Graphics (SVG) files.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append "https://hackage.haskell.org/package/"
-                            "dictionary-sharing/dictionary-sharing-"
-                            version ".tar.gz"))
+        (uri (hackage-uri "dictionary-sharing" version))
         (sha256
           (base32
             "00aspv943qdqhlk39mbk00kb1dsa5r0caj8sslrn81fnsn252fwc"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "dictionary-sharing")))
     (arguments
       `(#:cabal-revision
         ("3" "1mn7jcc7h3b8f1pn9zigqp6mc2n0qb66lms5qnrx4zswdv5w9439")))
@@ -3345,19 +3106,18 @@ members are shared.")
 (define-public ghc-diff
   (package
     (name "ghc-diff")
-    (version "0.4.0")
+    (version "0.4.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "Diff/Diff-" version ".tar.gz"))
+              (uri (hackage-uri "Diff" version))
               (sha256
                (base32
-                "1is9y5rlqyxacnj6kbi6h9laym5shp699r0hkj5p9d6qi84sr43j"))))
+                "0w166w5jksiqad7xf2ldjl2ykap0xf08byrl92qwp6r1qym4lppx"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-test-framework
-           ghc-test-framework-quickcheck2))
-    (home-page "https://hub.darcs.net/sterlingclover/Diff")
+    (properties '((upstream-name . "Diff")))
+    (native-inputs (list ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-quickcheck2))
+    (home-page "http://hackage.haskell.org/package/Diff")
     (synopsis "O(ND) diff algorithm in Haskell")
     (description
      "This package provides an implementation of the standard diff algorithm,
@@ -3371,13 +3131,12 @@ and utilities for pretty printing.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "disk-free-space/disk-free-space-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "disk-free-space" version))
        (sha256
         (base32
          "07rqj8k1vh3cykq9yidpjxhgh1f7vgmjs6y1nv5kq2217ff4yypi"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "disk-free-space")))
     (home-page "https://github.com/redneb/disk-free-space")
     (synopsis "Retrieve information about disk space usage")
     (description "A cross-platform library for retrieving information about
@@ -3391,19 +3150,17 @@ disk space usage.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/distributive/distributive-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "distributive" version))
        (sha256
         (base32
          "14bb66qyfn43bj688igfvnfjw7iycjf4n2k38sm8rxbqw2916dfp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "distributive")))
     (inputs
      (list ghc-tagged ghc-base-orphans ghc-transformers-compat
            ghc-semigroups ghc-generic-deriving))
     (native-inputs
-     (list cabal-doctest ghc-doctest ghc-hspec hspec-discover))
+     (list 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.
@@ -3417,13 +3174,11 @@ Dual to @code{Traversable}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/dlist/dlist-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "dlist" version))
        (sha256
         (base32 "0581a60xw4gw7pmqlmg5w2hr4hm9yjgx4c2z6v63y5xv51rn6g8p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "dlist")))
     (inputs
      (list ghc-quickcheck))
     (home-page "https://github.com/spl/dlist")
@@ -3437,29 +3192,27 @@ Writer monad), where list append quickly becomes too expensive.")
 (define-public ghc-doctemplates
   (package
     (name "ghc-doctemplates")
-    (version "0.9")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "doctemplates/doctemplates-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "048h8ka849h1f0xxwkasjbrrwq03rfz2m7aqg5xc5286kp02w9ns"))))
+    (version "0.10.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "doctemplates" version))
+              (sha256
+               (base32
+                "0as0sc4x4ch5z233dqlb8xqg97xbfbzw2dqsz9rfq8rw10v9yx57"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-aeson
-           ghc-doclayout
-           ghc-hsyaml
-           ghc-safe
-           ghc-scientific
-           ghc-text-conversions
-           ghc-unordered-containers
-           ghc-vector))
-    (native-inputs
-     (list ghc-glob ghc-tasty ghc-tasty-golden ghc-tasty-hunit
-           ghc-temporary))
+    (properties '((upstream-name . "doctemplates")))
+    (inputs (list ghc-safe
+                  ghc-text-conversions
+                  ghc-aeson
+                  ghc-hsyaml
+                  ghc-doclayout
+                  ghc-vector
+                  ghc-scientific))
+    (native-inputs (list ghc-glob ghc-tasty ghc-tasty-golden ghc-tasty-hunit
+                         ghc-temporary))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "17r6ig72bzqd59p11sjaf9y27pm4yig1a1s1igs57s88cy47qz05")))
     (home-page "https://github.com/jgm/doctemplates#readme")
     (synopsis "Pandoc-style document templates")
     (description
@@ -3469,33 +3222,29 @@ Writer monad), where list append quickly becomes too expensive.")
 (define-public ghc-doctest
   (package
     (name "ghc-doctest")
-    (version "0.17")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/doctest/doctest-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0f0knggq6yjcznyri35fll619q5jr8vcsbiyvdiz4prkawhaa4pz"))))
+    (version "0.20.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "doctest" version))
+              (sha256
+               (base32
+                "00jbpqvcqxx1nmf41li947d9d3ifwchzzp37mlag68hgnza6z9a4"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f))          ; FIXME: missing test framework
-    (inputs
-     (list ghc-base-compat ghc-code-page ghc-paths ghc-syb))
-    (native-inputs
-     (list ghc-hunit
-           ghc-quickcheck
-           ghc-hspec
-           ghc-mockery
-           ghc-setenv
-           ghc-silently
-           ghc-stringbuilder))
-    (home-page
-     "https://github.com/sol/doctest#readme")
+    (properties '((upstream-name . "doctest")))
+    (inputs (list ghc-base-compat ghc-code-page ghc-paths ghc-syb))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-hspec
+                         ghc-hspec-core
+                         ghc-mockery
+                         ghc-setenv
+                         ghc-silently
+                         ghc-stringbuilder
+                         hspec-discover))
+    (home-page "https://github.com/sol/doctest#readme")
     (synopsis "Test interactive Haskell examples")
-    (description "The doctest program checks examples in source code comments.
+    (description
+     "The doctest program checks examples in source code comments.
 It is modeled after doctest for Python, see
 @uref{https://docs.python.org/library/doctest.html, the Doctest website}.")
     (license license:expat)))
@@ -3507,14 +3256,12 @@ It is modeled after doctest for Python, see
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/dotgen/dotgen-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "dotgen" version))
        (sha256
         (base32
          "1jcn5m9342jrdq7jln2v9msf9978ngrx0pq9rrjh8izhvbvph76s"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "dotgen")))
     (home-page "https://github.com/ku-fpg/dotgen")
     (synopsis
      "Simple interface for building .dot graph files")
@@ -3527,22 +3274,23 @@ monadic interface for building graphs.")
 (define-public ghc-double-conversion
   (package
     (name "ghc-double-conversion")
-    (version "2.0.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "double-conversion/double-conversion-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0sx2kc1gw72mjvd8vph8bbjw5whfxfv92rsdhjg1c0al75rf3ka4"))))
+    (version "2.0.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "double-conversion" version))
+              (sha256
+               (base32
+                "0r7c1801gzdm5x1flmpx8ajxygbc9dl7sgdj0xn3bpm71wgvrf4s"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (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")
+    (properties '((upstream-name . "double-conversion")))
+    (native-inputs (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1mpnx4m2pg5crfz9k8wamh5mgsha0np3ynnllrmglmwh54gvfjj3")))
+    (home-page "https://github.com/haskell/double-conversion")
+    (synopsis
+     "Fast conversion between double precision floating point and text")
     (description
      "This package provides a library that performs fast, accurate conversion
 between double precision floating point and text.")
@@ -3551,28 +3299,21 @@ between double precision floating point and text.")
 (define-public ghc-dual-tree
   (package
     (name "ghc-dual-tree")
-    (version "0.2.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "dual-tree/dual-tree-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0qyn7kb42wvlcvb1wbf1qx3isc2y6k3hzp5iq6ab0r0llw9g6qlg"))))
+    (version "0.2.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "dual-tree" version))
+              (sha256
+               (base32
+                "19nm34d166fhlkk7npx0iq9kbx7300a82bg75q1sx98jqfa4nffh"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f ; TODO: ghc-testing-feat does not build.
-       #:cabal-revision
-       ("1" "1babd7ybsgk73x57yl35q0n1i7mbbqmv4am710kq1hzg3in4g9dv")))
-    (inputs
-     (list ghc-semigroups ghc-newtype-generics ghc-monoid-extras))
-;    (native-inputs
-;     `(("ghc-quickcheck" ,ghc-quickcheck)
-;       ("ghc-testing-feat" ,ghc-testing-feat)))
-    (home-page "https://hackage.haskell.org/package/dual-tree")
+    (properties '((upstream-name . "dual-tree")))
+    (inputs (list ghc-semigroups ghc-monoid-extras))
+    (native-inputs (list ghc-quickcheck ghc-testing-feat))
+    (home-page "http://hackage.haskell.org/package/dual-tree")
     (synopsis "Rose trees with cached and accumulating monoidal annotations")
-    (description "Rose (@math{n}-ary) trees with both upwards- (i.e.
+    (description
+     "Rose (@math{n}-ary) trees with both upwards- (i.e.
 cached) and downwards-traveling (i.e. accumulating) monoidal
 annotations.  This is used as the core data structure underlying the
 @url{https://archives.haskell.org/projects.haskell.org/diagrams/,
@@ -3586,14 +3327,12 @@ diagrams framework}, but potentially has other applications as well.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/easy-file/easy-file-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "easy-file" version))
        (sha256
         (base32
          "0zmlcz723051qpn8l8vi51c5rx1blwrw4094jcshkmj8p9r2xxaj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "easy-file")))
     (home-page
      "https://github.com/kazu-yamamoto/easy-file")
     (synopsis "File handling library for Haskell")
@@ -3607,12 +3346,11 @@ diagrams framework}, but potentially has other applications as well.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/easyplot/easyplot-"
-             version ".tar.gz"))
+       (uri (hackage-uri "easyplot" version))
        (sha256
         (base32 "18kndgvdj2apjpfga6fp7m16y1gx8zrwp3c5vfj03sx4v6jvciqk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "easyplot")))
     (propagated-inputs (list gnuplot))
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -3631,13 +3369,12 @@ Haskell, using gnuplot for rendering.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/echo/echo-"
-             version ".tar.gz"))
+       (uri (hackage-uri "echo" version))
        (sha256
         (base32
          "0hqfdd4kvpp59cjjv790bkf72yqr9xjfqlbjcrdsc9a8j3r1pzn9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "echo")))
     (arguments
      `(#:cabal-revision
        ("1" "0br8wfiybcw5hand4imiw0i5hacdmrax1dv8g95f35gazffbx42l")))
@@ -3657,11 +3394,11 @@ MinTTY and other consoles.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/edit-distance"
-                           "/edit-distance-" version ".tar.gz"))
+       (uri (hackage-uri "edit-distance" version))
        (sha256
         (base32 "0jkca97zyv23yyilp3jydcrzxqhyk27swhzh82llvban5zp8b21y"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "edit-distance")))
     (arguments
      `(#:tests? #f ; TODO: Needs quickcheck<2.10
        #:cabal-revision
@@ -3684,13 +3421,12 @@ Damerau-Levenshtein algorithms.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "edit-distance-vector/edit-distance-vector-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "edit-distance-vector" version))
        (sha256
         (base32
          "07qgc8dyi9kkzkd3xcd78wdlljy0xwhz65b4r2qg2piidpcdvpxp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "edit-distance-vector")))
     (inputs
      (list ghc-vector))
     (native-inputs
@@ -3712,34 +3448,19 @@ but is otherwise agnostic to:
 (define-public ghc-either
   (package
     (name "ghc-either")
-    (version "5.0.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "either-" version "/"
-                           "either-" version ".tar.gz"))
-       (sha256
-        (base32
-         "09yzki8ss56xhy9vggdw1rls86b2kf55hjl5wi0vbv02d8fxahq2"))))
+    (version "5.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "either" version))
+              (sha256
+               (base32
+                "1gl748ia68bldbqb2fl7vjv44g0y8ivn659fjmy1qyypgyb5p95z"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "03bgnq55lc6f1nx4p662gidfsyyfm3xm4fi84h77wnsppxrpa5j1")))
-    (inputs `(("ghc-bifunctors" ,ghc-bifunctors)
-              ("ghc-exceptions" ,ghc-exceptions)
-              ("ghc-free" ,ghc-free)
-              ("ghc-monad-control" ,ghc-monad-control)
-              ("ghc-manodrandom" ,ghc-monadrandom)
-              ("ghc-mmorph" ,ghc-mmorph)
-              ("ghc-profunctors" ,ghc-profunctors)
-              ("ghc-semigroups" ,ghc-semigroups)
-              ("ghc-semigroupoids" ,ghc-semigroupoids)
-              ("ghc-transformers-base" ,ghc-transformers-base)))
-    (native-inputs
-     (list ghc-quickcheck ghc-test-framework
-           ghc-test-framework-quickcheck2))
-    (home-page "https://github.com/ekmett/either")
+    (properties '((upstream-name . "either")))
+    (inputs (list ghc-bifunctors ghc-profunctors ghc-semigroupoids))
+    (native-inputs (list ghc-test-framework ghc-test-framework-quickcheck2
+                         ghc-quickcheck))
+    (home-page "http://github.com/ekmett/either/")
     (synopsis "Provides an either monad transformer for Haskell")
     (description "This Haskell package provides an either monad transformer.")
     (license license:bsd-3)))
@@ -3747,23 +3468,18 @@ but is otherwise agnostic to:
 (define-public ghc-email-validate
   (package
     (name "ghc-email-validate")
-    (version "2.3.2.15")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "email-validate/email-validate-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0n67wss6k8lhwfkybkhsa04bbdfdv541sacbxlylkx2hqpj5r5gh"))))
+    (version "2.3.2.18")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "email-validate" version))
+              (sha256
+               (base32
+                "11bi5y5qmri62nl34nl5pv4zs59bjpjknw560yw5ds62gsi2sjcp"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-attoparsec ghc-hspec ghc-quickcheck ghc-doctest))
-    (home-page
-     "https://github.com/Porges/email-validate-hs")
+    (properties '((upstream-name . "email-validate")))
+    (inputs (list ghc-attoparsec))
+    (native-inputs (list ghc-hspec ghc-quickcheck ghc-doctest))
+    (home-page "https://github.com/Porges/email-validate-hs")
     (synopsis "Email address validator for Haskell")
     (description
      "This Haskell package provides a validator that can validate an email
@@ -3776,13 +3492,12 @@ address string against RFC 5322.")
     (version "1.0.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "enclosed-exceptions/enclosed-exceptions-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "enclosed-exceptions" version))
               (sha256
                (base32
                 "1fghjj7nkiddrf03ks8brjpr5x25yi9fs7xg6adbi4mc2gqr6vdg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "enclosed-exceptions")))
     ;; FIXME: one of the tests blocks forever:
     ;; "thread blocked indefinitely in an MVar operation"
     (arguments '(#:tests? #f))
@@ -3802,18 +3517,17 @@ asynchronous exceptions.")
 (define-public ghc-equivalence
   (package
     (name "ghc-equivalence")
-    (version "0.3.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/equivalence"
-                           "/equivalence-" version ".tar.gz"))
-       (sha256
-        (base32 "167njzd1cf32aa7br90rjafrxy6hw3fxkk8awifqbxjrcwm5maqp"))))
+    (version "0.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "equivalence" version))
+              (sha256
+               (base32
+                "13q0lklm58n0l7bx0d4k1cw1i2il8hpdjp76lb79ix8lv7cxd2jr"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-stmonadtrans ghc-transformers-compat ghc-fail
-           ghc-quickcheck))
+    (properties '((upstream-name . "equivalence")))
+    (inputs (list ghc-stmonadtrans ghc-transformers-compat ghc-fail))
+    (native-inputs (list ghc-quickcheck))
     (home-page "https://github.com/pa-ba/equivalence")
     (synopsis "Maintaining an equivalence relation implemented as union-find")
     (description
@@ -3831,13 +3545,12 @@ monad transformer (instead of the IO monad).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "erf-" version "/"
-                           "erf-" version ".tar.gz"))
+       (uri (hackage-uri "erf" version))
        (sha256
         (base32
          "0dxk2r32ajmmc05vaxcp0yw6vgv4lkbmh8jcshncn98xgsfbgw14"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "erf")))
     (home-page "https://hackage.haskell.org/package/erf")
     (synopsis "The error function, erf, and related functions for Haskell")
     (description "This Haskell library provides a type class for the
@@ -3852,13 +3565,12 @@ Double.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "errorcall-eq-instance/errorcall-eq-instance-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "errorcall-eq-instance" version))
        (sha256
         (base32
          "0hqw82m8bbrxy5vgdwb83bhzdx070ibqrm9rshyja7cb808ahijm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "errorcall-eq-instance")))
     (inputs
      (list ghc-base-orphans))
     (native-inputs
@@ -3877,16 +3589,18 @@ This package provides an orphan instance.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "errors-" version "/"
-                           "errors-" version ".tar.gz"))
+       (uri (hackage-uri "errors" version))
        (sha256
         (base32
          "0x8znwn31qcx6kqx99wp7bc86kckfb39ncz3zxvj1s07kxlfawk7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "errors")))
     (inputs
      (list ghc-exceptions ghc-transformers-compat ghc-unexceptionalio
            ghc-safe))
+    (arguments
+     `(#:cabal-revision ("4"
+                         "0sji6ny86f4j9ch1cyf2p1mcr5b2ighvw4bb9rssvypxb6k2r68f")))
     (home-page "https://github.com/gabriel439/haskell-errors-library")
     (synopsis "Error handling library for Haskell")
     (description "This library encourages an error-handling style that
@@ -3896,44 +3610,41 @@ directly uses the type system, rather than out-of-band exceptions.")
 (define-public ghc-esqueleto
   (package
     (name "ghc-esqueleto")
-    (version "3.5.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "esqueleto/esqueleto-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0z3cf49sha6q965qw2m08jfmb91ki2rsdpnr7l39lka5b4ffxjlz"))))
+    (version "3.5.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "esqueleto" version))
+              (sha256
+               (base32
+                "0k7h2hbxv14x0kq9w2wi83h0swzlri99ic9rj76540l39yqwjc5v"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f))  ; TODO: Cannot connect to mysql server.
-    (inputs
-     (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))
+    (properties '((upstream-name . "esqueleto")))
+    (inputs (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
+                         ghc-hspec-core
+                         ghc-mysql
+                         ghc-mysql-simple
+                         ghc-persistent-mysql
+                         ghc-persistent-postgresql
+                         ghc-persistent-sqlite
+                         ghc-postgresql-simple
+                         ghc-quickcheck))
+    (arguments (list #:tests? #f)) ; Needs a running MySQLd.
     (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
+    (description
+     "This library provides a type-safe embedded domain specific
 language (EDSL) for SQL queries that works with SQL backends as provided by
 @code{ghc-persistent}.  Its language closely resembles SQL, so you don't have
 to learn new concepts, just new syntax, and it's fairly easy to predict the
@@ -3943,23 +3654,26 @@ generated SQL and optimize it for your backend.")
 (define-public ghc-exactprint
   (package
     (name "ghc-exactprint")
-    (version "0.6.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "ghc-exactprint/ghc-exactprint-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0a6baza962d4pz2m02hxmh8234i47zkizmwhsy68namr05dmlgpw"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-paths ghc-syb ghc-free))
-    (native-inputs
-     (list ghc-hunit ghc-diff ghc-silently ghc-filemanip))
-    (home-page
-     "https://hackage.haskell.org/package/ghc-exactprint")
+    (version "1.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ghc-exactprint" version))
+              (sha256
+               (base32
+                "07m4cg47knrrvpyimnbc0nq9176vkzwwa64b2iqfj6azn6q2hagp"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "ghc-exactprint")))
+    (inputs (list ghc-ordered-containers
+                  ghc-data-default
+                  ghc-paths
+                  ghc-syb
+                  ghc-free
+                  ghc-fail))
+    (native-inputs (list ghc-hunit ghc-diff ghc-silently ghc-filemanip))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1v6my8bnhjhw7k3v2q9iwjpz9lj5g6ilvlzdq6svcabxahmzbr2c")))
+    (home-page "http://hackage.haskell.org/package/ghc-exactprint")
     (synopsis "ExactPrint for GHC")
     (description
      "Using the API Annotations available from GHC 7.10.2, this library
@@ -3974,14 +3688,12 @@ excluding @file{.lhs} files.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/exceptions/exceptions-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "exceptions" version))
        (sha256
         (base32
          "1kw4pmx7j7zwbdwm0dyn9rcs6kp4byfxy48861yxdz6gam1zn2sd"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "exceptions")))
     (arguments
      `(#:cabal-revision
        ("2" "1154g0dqil2xf4wc1v6gndzhnbf5saf2dzf77c6lcjxssx360m6j")))
@@ -4002,13 +3714,12 @@ for Haskell.")
     (version "0.0.3.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "executable-path/executable-path-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "executable-path" version))
               (sha256
                (base32
                 "0vxwmnsvx13cawcyhbyljkds0l1vr996ijldycx7nj0asjv45iww"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "executable-path")))
     (home-page "https://hackage.haskell.org/package/executable-path")
     (synopsis "Find out the full path of the executable")
     (description
@@ -4025,12 +3736,11 @@ as invoked.\" This library tries to provide the missing path.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "extensible-exceptions/extensible-exceptions-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "extensible-exceptions" version))
        (sha256
         (base32 "1273nqws9ij1rp1bsq5jc7k2jxpqa0svawdbim05lf302y0firbc"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "extensible-exceptions")))
     (home-page "https://hackage.haskell.org/package/extensible-exceptions")
     (synopsis "Extensible exceptions for Haskell")
     (description
@@ -4041,24 +3751,21 @@ versions of GHC (i.e., < 6.10).")
 (define-public ghc-extra
   (package
     (name "ghc-extra")
-    (version "1.7.9")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/extra/extra-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "17fzmxwrv0w7inhq7kia36prc2nsx845r9v56sihqvr17fk2cvpn"))))
+    (version "1.7.12")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "extra" version))
+              (sha256
+               (base32
+                "0g5h8fp0nq4k9asiknw0bhvb10zpfnsixfp0n3xz0rc83pnajwg5"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-clock ghc-semigroups ghc-quickcheck
-           ghc-quickcheck-instances))
-    (home-page "https://github.com/ndmitchell/extra")
+    (properties '((upstream-name . "extra")))
+    (inputs (list ghc-clock))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-instances))
+    (home-page "https://github.com/ndmitchell/extra#readme")
     (synopsis "Extra Haskell functions")
-    (description "This library provides extra functions for the standard
+    (description
+     "This library provides extra functions for the standard
 Haskell libraries.  Most functions are simple additions, filling out missing
 functionality.  A few functions are available in later versions of GHC, but
 this package makes them available back to GHC 7.2.")
@@ -4071,11 +3778,11 @@ this package makes them available back to GHC 7.2.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/fail/fail-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "fail" version))
        (sha256
         (base32 "18nlj6xvnggy61gwbyrpmvbdkq928wv0wx2zcsljb52kbhddnp3d"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "fail")))
     (arguments `(#:haddock? #f)) ; Package contains no documentation.
     (home-page "https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail")
     (synopsis "Forward-compatible MonadFail class")
@@ -4092,23 +3799,19 @@ when used with GHC versions which already provide the
 (define-public ghc-fast-logger
   (package
     (name "ghc-fast-logger")
-    (version "3.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/fast-logger/fast-logger-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1mbnah6n8lig494523czcd95dfn01f438qai9pf20wpa2gdbz4x6"))))
+    (version "3.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "fast-logger" version))
+              (sha256
+               (base32
+                "1rx866swvqq7lzngv4bx7qinnwmm3aa2la8caljvbfbi0xz6wps3"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-auto-update ghc-easy-file ghc-unix-time ghc-unix-compat))
-    (native-inputs
-     (list hspec-discover ghc-hspec))
-    (home-page "https://hackage.haskell.org/package/fast-logger")
+    (properties '((upstream-name . "fast-logger")))
+    (inputs (list ghc-auto-update ghc-easy-file ghc-unix-time ghc-unix-compat
+                  ghc-bytestring-builder hspec-discover))
+    (native-inputs (list ghc-hspec))
+    (home-page "https://github.com/kazu-yamamoto/logger")
     (synopsis "Fast logging system")
     (description "This library provides a fast logging system for Haskell.")
     (license license:bsd-3)))
@@ -4116,37 +3819,35 @@ when used with GHC versions which already provide the
 (define-public ghc-feed
   (package
     (name "ghc-feed")
-    (version "1.3.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "feed/feed-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0kv3vx3njqlhwvkmf12m1gmwl8jj97kfa60da2362vwdavhcf4dk"))))
+    (version "1.3.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "feed" version))
+              (sha256
+               (base32
+                "0marh7qmggq1z5339nid3gil7k786d3yk79b0rwfkxxaxmr41xd8"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Fail.
-    (inputs
-     (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")
+    (properties '((upstream-name . "feed")))
+    (inputs (list ghc-base-compat
+                  ghc-old-locale
+                  ghc-old-time
+                  ghc-safe
+                  ghc-time-locale-compat
+                  ghc-utf8-string
+                  ghc-xml-types
+                  ghc-xml-conduit))
+    (native-inputs (list ghc-hunit
+                         ghc-markdown-unlit
+                         ghc-syb
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-doctest
+                         ghc-doctest-driver-gen))
+    (arguments (list #:tests? #f)) ; Must be installed before testing.
+    (home-page "https://github.com/haskell-party/feed")
     (synopsis "Haskell package for handling various syndication formats")
-    (description "This Haskell package includes tools for generating and
+    (description
+     "This Haskell package includes tools for generating and
 consuming feeds in both RSS (Really Simple Syndication) and Atom format.")
     (license license:bsd-3)))
 
@@ -4154,28 +3855,25 @@ consuming feeds in both RSS (Really Simple Syndication) and Atom format.")
   (package
     (name "ghc-fgl")
     (version "5.7.0.3")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/fgl/fgl-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "fgl" version))
        (sha256
         (base32
          "04k5grp5d381wkc7sxgcl0sd3z3nlm6l6mmh103vhzh6p49vhs99"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "fgl")))
     (arguments
-     `(#:phases
+     `(#:cabal-revision ("1"
+                         "0d5b88j42a3f50b7kbksszvwvcgr59f8pcg3p6cvzq9f4n7y51s7")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "fgl.cabal"
-               (("QuickCheck >= 2\\.8 && < 2\\.13")
-                "QuickCheck >= 2.8 && < 2.14")
-               (("hspec >= 2\\.1 && < 2\\.7")
-                "hspec >= 2.1 && < 2.8")))))))
+               (("hspec >= 2\\.1 && < 2\\.8") "hspec")))))))
     (inputs
      (list ghc-hspec ghc-quickcheck))
     (home-page "https://web.engr.oregonstate.edu/~erwig/fgl/haskell")
@@ -4194,15 +3892,21 @@ encourages inductive, recursive definitions of graph algorithms.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/fgl-arbitrary/fgl-arbitrary-"
-             version ".tar.gz"))
+       (uri (hackage-uri "fgl-arbitrary" version))
        (sha256
         (base32
          "1mykbd1r43gpsn10ys8q3nr0i4wnhn6wq23hcici18mxxji11wkc"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "fgl-arbitrary")))
     (inputs
      (list ghc-fgl ghc-quickcheck ghc-hspec))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "fgl-arbitrary.cabal"
+               (("hspec >= 2\\.1 && < 2\\.8") "hspec")))))))
     (home-page "https://hackage.haskell.org/package/fgl-arbitrary")
     (synopsis "QuickCheck support for fgl")
     (description
@@ -4219,12 +3923,12 @@ for generating graph-like data structures.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/file-embed/"
-                           "file-embed-" version ".tar.gz"))
+       (uri (hackage-uri "file-embed" version))
        (sha256
         (base32
          "1pavxj642phrkq67620g10wqykjfhmm9yj2rm8pja83sadfvhrph"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "file-embed")))
     (home-page "https://github.com/snoyberg/file-embed")
     (synopsis "Use Template Haskell to embed file contents directly")
     (description
@@ -4239,12 +3943,12 @@ embedded in your Haskell code.")
     (version "0.3.6.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "filemanip/filemanip-" version ".tar.gz"))
+              (uri (hackage-uri "filemanip" version))
               (sha256
                (base32
                 "0ilqr8jv41zxcj5qyicg29m8s30b9v70x6f9h2h2rw5ap8bxldl8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "filemanip")))
     (inputs
      (list ghc-unix-compat))
     (home-page "https://github.com/bos/filemanip")
@@ -4255,25 +3959,31 @@ directories.  It includes code for pattern matching, finding files, modifying
 file contents, and more.")
     (license license:bsd-3)))
 
+;; Deprecated.
 (define-public ghc-filepath-bytestring
   (package
     (name "ghc-filepath-bytestring")
-    (version "1.4.2.1.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-              "https://hackage.haskell.org/package/filepath-bytestring/"
-              "filepath-bytestring-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0qrrvbjpjsk75ghqrdqzwqg7wjgm3rr9kk7p04ax98ilv90pm0ip"))))
+    (version "1.4.2.1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "filepath-bytestring" version))
+              (sha256
+               (base32
+                "0i8j724fz8h1bcqvlvp3sxmgyrvx2sim74cvzkpc9m05yn9p27sq"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck))
-    (home-page "https://hackage.haskell.org/package/filepath-bytestring")
+    (properties '((upstream-name . "filepath-bytestring")))
+    (native-inputs (list ghc-quickcheck))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "filepath-bytestring.cabal"
+               (("filepath >= 1\\.4\\.2 && <= 1\\.4\\.2\\.1") "filepath")))))))
+    (home-page "http://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
+    (description
+     "This package provides a drop-in replacement for the standard
 @code{filepath} library, operating on @code{RawFilePath} values rather than
 @code{FilePath} values to get the speed benefits of using @code{ByteStrings}.")
     (license license:bsd-3)))
@@ -4285,13 +3995,12 @@ file contents, and more.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/FindBin/FindBin-"
-             version ".tar.gz"))
+       (uri (hackage-uri "FindBin" version))
        (sha256
         (base32
          "197xvn05yysmibm1p5wzxfa256lvpbknr5d1l2ws6g40w1kpk717"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "FindBin")))
     (home-page "https://github.com/audreyt/findbin")
     (synopsis "Get the absolute path of the running program")
     (description
@@ -4304,23 +4013,22 @@ an executable.")
 (define-public ghc-fingertree
   (package
     (name "ghc-fingertree")
-    (version "0.1.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/fingertree/fingertree-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0zvandj8fysck7ygpn0dw5bhrhmj1s63i326nalxbfkh2ls4iacm"))))
+    (version "0.1.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "fingertree" version))
+              (sha256
+               (base32
+                "0wdzpli8bpgk8lrsp105zb0y5gn1r2029laclvhz264bza93q9pk"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hunit ghc-quickcheck ghc-test-framework
-           ghc-test-framework-hunit ghc-test-framework-quickcheck2))
-    (home-page "https://hackage.haskell.org/package/fingertree")
+    (properties '((upstream-name . "fingertree")))
+    (native-inputs (list ghc-hunit ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (home-page "http://hackage.haskell.org/package/fingertree")
     (synopsis "Generic finger-tree structure")
-    (description "This library provides finger trees, a general sequence
+    (description
+     "This library provides finger trees, a general sequence
 representation with arbitrary annotations, for use as a base for
 implementations of various collection types.  It includes examples, as
 described in section 4 of Ralf Hinze and Ross Paterson, \"Finger trees: a
@@ -4330,16 +4038,16 @@ simple general-purpose data structure\".")
 (define-public ghc-finite-typelits
   (package
     (name "ghc-finite-typelits")
-    (version "0.1.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "finite-typelits/"
-                           "finite-typelits-" version ".tar.gz"))
-       (sha256
-        (base32 "0iyp9fyd2ki9qcmk9infz9p6rjhsx9jrs3f5yz0yqs8vj5na81yj"))))
+    (version "0.1.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "finite-typelits" version))
+              (sha256
+               (base32
+                "0f047dywlxiz3pl3rq6maym9wpwjwl4zjqfwlwnj0yiv7dmlaiih"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "finite-typelits")))
+    (native-inputs (list ghc-quickcheck))
     (home-page "https://github.com/mniip/finite-typelits")
     (synopsis "Finitely many values, indexed by type-level naturals")
     (description
@@ -4354,12 +4062,12 @@ and indexed by type-level naturals.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/fixed/fixed-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "fixed" version))
        (sha256
         (base32
          "10l2sh179xarb774q92cff2gkb20rsrlilfwp1fk61rzmz9yn64j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "fixed")))
     (home-page "https://github.com/ekmett/fixed")
     (synopsis "Signed 15.16 precision fixed point arithmetic")
     (description
@@ -4375,13 +4083,12 @@ arithmetic.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/fmlist/fmlist-"
-         version ".tar.gz"))
+        (hackage-uri "fmlist" version))
        (sha256
         (base32
          "19h95ph7lh7llw6j1v1rssrdi5k7xw8x0iac9rgzss371s2w3g9d"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "fmlist")))
     (home-page "https://github.com/sjoerdvisscher/fmlist")
     (synopsis "FoldMap lists")
     (description "FoldMap lists are lists represented by their
@@ -4394,32 +4101,30 @@ completely unverified though.")
 (define-public ghc-foldl
   (package
     (name "ghc-foldl")
-    (version "1.4.12")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "foldl-" version "/"
-                           "foldl-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0zf4yljh3s2ddxa7dhzdglmylj14kfldhkclc44g37zvjq6kcnag"))))
+    (version "1.4.13")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "foldl" version))
+              (sha256
+               (base32
+                "14vlhgf40qmwkznwza37z4www3q1v5acsx4nw5vmg25wdnc8ibfw"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs (list ghc-comonad
-                  ghc-contravariant
-                  ghc-hashable
+    (properties '((upstream-name . "foldl")))
+    (inputs (list ghc-random
                   ghc-primitive
+                  ghc-vector
+                  ghc-unordered-containers
+                  ghc-hashable
+                  ghc-contravariant
                   ghc-profunctors
-                  ghc-random
                   ghc-semigroupoids
-                  ghc-semigroups
-                  ghc-unordered-containers
-                  ghc-vector))
+                  ghc-comonad
+                  ghc-semigroups))
     (native-inputs (list ghc-doctest))
-    (home-page "https://github.com/Gabriel439/Haskell-Foldl-Library")
+    (home-page "http://hackage.haskell.org/package/foldl")
     (synopsis "Composable, streaming, and efficient left folds for Haskell")
-    (description "This Haskell library provides strict left folds that stream
+    (description
+     "This Haskell library provides strict left folds that stream
 in constant memory, and you can combine folds using @code{Applicative} style
 to derive new folds.  Derived folds still traverse the container just once
 and are often as efficient as hand-written folds.")
@@ -4428,27 +4133,15 @@ and are often as efficient as hand-written folds.")
 (define-public ghc-foundation
   (package
     (name "ghc-foundation")
-    (version "0.0.26.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "foundation/foundation-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1hri3raqf6nhh6631gfm2yrkv4039gb0cqfa9cqmjp8bbqv28w5d"))))
+    (version "0.0.29")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "foundation" version))
+              (sha256
+               (base32
+                "1hbkh6a3g6wsj2z48pjimd7djkm82mdxfwc24bnmmzag8amrp0rl"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; This test is broken.  For details, see
-         ;; https://github.com/haskell-foundation/foundation/issues/530
-         (add-after 'unpack 'patch-tests
-           (lambda _
-             (substitute* "tests/Test/Foundation/Number.hs"
-               ((", testDividible proxy") ""))
-             #t)))))
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "foundation")))
     (inputs (list ghc-basement))
     (home-page "https://github.com/haskell-foundation/foundation")
     (synopsis "Alternative prelude with batteries and no dependencies")
@@ -4467,39 +4160,33 @@ Foundation has the following goals:
 @item Numerical classes that better represent mathematical things (no more
    all-in-one @code{Num});
 @item I/O system with less lazy IO.
-@end enumerate\n")
+@end enumerate
+")
     (license license:bsd-3)))
 
 (define-public ghc-free
   (package
     (name "ghc-free")
-    (version "5.1.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/free/free-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "121b81wxjk30nc27ivwzxjxi1dcwc30y0gy8l6wac3dxwvkx2c5j"))))
+    (version "5.1.10")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "free" version))
+              (sha256
+               (base32
+                "0whff0r0nvii5l9z9crw7v0rj0wwblwbnfp99515siyxjkzs9phj"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (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/")
+    (properties '((upstream-name . "free")))
+    (inputs (list ghc-comonad
+                  ghc-distributive
+                  ghc-indexed-traversable
+                  ghc-semigroupoids
+                  ghc-th-abstraction
+                  ghc-transformers-base
+                  ghc-profunctors))
+    (home-page "http://github.com/ekmett/free/")
     (synopsis "Unrestricted monads for Haskell")
-    (description "This library provides free monads, which are useful for many
+    (description
+     "This library provides free monads, which are useful for many
 tree-like structures and domain specific languages.  If @code{f} is a
 @code{Functor} then the free @code{Monad} on @code{f} is the type of trees
 whose nodes are labeled with the constructors of @code{f}.  The word \"free\"
@@ -4514,13 +4201,12 @@ definition of @code{Monad}.")
     (version "0.3.0.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/fsnotify/"
-                    "fsnotify-" version ".tar.gz"))
+              (uri (hackage-uri "fsnotify" version))
               (sha256
                (base32
                 "19bdbz9wb9jvln6yg6qm0hz0w84bypvkxf0wjhgrgd52f9gidlny"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "fsnotify")))
     (inputs
      (list ghc-async
            ghc-unix-compat
@@ -4540,24 +4226,19 @@ specific Windows, Mac, and Linux file system event notification.")
 (define-public ghc-generic-deriving
   (package
     (name "ghc-generic-deriving")
-    (version "1.14.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/generic-deriving/generic-deriving-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "19qpahcfhs9nqqv6na8znybrvpw885cajbdnrfylxbsmm0sys4s7"))))
+    (version "1.14.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "generic-deriving" version))
+              (sha256
+               (base32
+                "0bxacg6b1vz135x93vf7jk6129m08hdyj7426ymaylfl2w8kapi6"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-th-abstraction))
-    (native-inputs
-     (list ghc-hspec hspec-discover))
-    (home-page "https://hackage.haskell.org/package/generic-deriving")
+    (properties '((upstream-name . "generic-deriving")))
+    (inputs (list ghc-th-abstraction))
+    ;(native-inputs (list ghc-hspec))
+    (arguments (list #:tests? #f)) ;; Cannot resolve package cycle.
+    (home-page "https://github.com/dreixel/generic-deriving")
     (synopsis "Generalise the deriving mechanism to arbitrary classes")
     (description "This package provides functionality for generalising the
 deriving mechanism in Haskell to arbitrary classes.")
@@ -4566,22 +4247,17 @@ deriving mechanism in Haskell to arbitrary classes.")
 (define-public ghc-generic-random
   (package
     (name "ghc-generic-random")
-    (version "1.2.0.0")
+    (version "1.5.0.1")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/generic-random/"
-             "generic-random-" version ".tar.gz"))
+       (uri (hackage-uri "generic-random" version))
        (sha256
-        (base32 "130lmblycxnpqbsl7vf6a90zccibnvcb5zaclfajcn3by39007lv"))))
+        (base32 "02iczjf2xc4sxfi234nf6irfj5slvf3p5hpaxl8r5nc8hy052d6x"))))
     (build-system haskell-build-system)
+    (properties `((upstream-name . "generic-random")))
     (inputs (list ghc-quickcheck))
-    (native-inputs
-     (list ghc-inspection-testing))
-    (arguments
-     `(#:cabal-revision
-       ("1" "1d0hx41r7yq2a86ydnfh2fv540ah8cz05l071s2z4wxcjw0ymyn4")))
+    (native-inputs (list ghc-inspection-testing ghc-inspection-testing))
     (home-page
      "https://github.com/lysxia/generic-random")
     (synopsis
@@ -4603,89 +4279,47 @@ trivially terminating generator given explicitly (@code{genericArbitraryRec}
 and @code{withBaseCase}) or implicitly (@code{genericArbitrary'}).")
     (license license:expat)))
 
-(define-public ghc-generic-random-1.3.0.1
-  (package
-    (inherit ghc-generic-random)
-    (version "1.4.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/generic-random/"
-             "generic-random-" version ".tar.gz"))
-       (sha256
-        (base32 "12rvb1dzrfjc46n9vdcw3yv773iih8vwhrac3hpzq70yp2z77jdw"))))
-    (arguments '())))
-
 (define-public ghc-generics-sop
   (package
     (name "ghc-generics-sop")
-    (version "0.5.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "generics-sop-" version "/"
-                           "generics-sop-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1n65wjdbb9fswa43ys5k6c746c905877lw5ij33y66iabj5w7dw1"))))
+    (version "0.5.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "generics-sop" version))
+              (sha256
+               (base32
+                "098blydb7c7wg77dn658r0zb1z20vfkar1him1rqlq0da90437b3"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-sop-core ghc-th-abstraction))
-    (home-page "https://github.com/well-typed/generics-sop")
+    (properties '((upstream-name . "generics-sop")))
+    (inputs (list ghc-sop-core ghc-th-abstraction))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1s8bx25yrjqy1cj9y1s1m8a8qlby9dxjzin16yymz7g39fqcqxz8")))
+    (home-page "http://hackage.haskell.org/package/generics-sop")
     (synopsis "Generic Programming using True Sums of Products for Haskell")
-    (description "This Haskell package supports the definition of generic
+    (description
+     "This Haskell package supports the definition of generic
 functions.  Datatypes are viewed in a uniform, structured way: the choice
 between constructors is represented using an n-ary sum, and the arguments of
 each constructor are represented using an n-ary product.")
     (license license:bsd-3)))
 
-(define-public ghc-geniplate-mirror
-  (package
-    (name "ghc-geniplate-mirror")
-    (version "0.7.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package"
-                           "/geniplate-mirror"
-                           "/geniplate-mirror-" version ".tar.gz"))
-       (sha256
-        (base32 "1kw4q7l556sfd82r2p0z3cv4sg8kcr45wb4s2sy996bs3ymn8fjb"))))
-    (build-system haskell-build-system)
-    (home-page "https://github.com/danr/geniplate")
-    (synopsis "Use Template Haskell to generate Uniplate-like functions")
-    (description
-     "Use Template Haskell to generate Uniplate-like functions.  This is a
-maintained mirror of the @uref{https://hackage.haskell.org/package/geniplate,
-geniplate} package, written by Lennart Augustsson.")
-    (license license:bsd-3)))
-
 (define-public ghc-genvalidity
   (package
     (name "ghc-genvalidity")
-    (version "0.11.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/genvalidity/genvalidity-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "16bd5dx0ngc8z7mij23i2l3a8v3c112x8ksd623alik18zx7pi8j"))))
+    (version "1.1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "genvalidity" version))
+              (sha256
+               (base32
+                "08xvbgzhi9f2s3g81zzd8yhrn66mr84m0dvp478nrbck19jdg5sq"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-quickcheck ghc-validity))
-    (native-inputs
-     (list ghc-hspec hspec-discover ghc-hspec-core))
-    (home-page
-     "https://github.com/NorfairKing/validity")
-    (synopsis
-     "Testing utilities for the @code{validity} library")
+    (properties '((upstream-name . "genvalidity")))
+    (inputs (list ghc-quickcheck ghc-random ghc-validity))
+    (native-inputs (list ghc-hspec ghc-hspec-core hspec-discover))
+    (home-page "https://github.com/NorfairKing/validity#readme")
+    (synopsis "Testing utilities for the @code{validity} library")
     (description
      "This package provides testing utilities that are useful in conjunction
 with the @code{Validity} typeclass.")
@@ -4694,31 +4328,19 @@ with the @code{Validity} typeclass.")
 (define-public ghc-genvalidity-property
   (package
     (name "ghc-genvalidity-property")
-    (version "0.5.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "genvalidity-property/genvalidity-property-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0cvzc4z4771vpycwfgcj0yswyglzl6cl1h2wrfhs224nrcmk5a7z"))))
+    (version "1.0.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "genvalidity-property" version))
+              (sha256
+               (base32
+                "1nxcdq04rkckrb3v49pjx378n5s828k24x7hix6manyxqmd3hplw"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     "Standard properties for functions on @code{Validity} types")
+    (properties '((upstream-name . "genvalidity-property")))
+    (inputs (list ghc-quickcheck ghc-genvalidity ghc-hspec ghc-pretty-show
+                  ghc-validity hspec-discover))
+    (home-page "https://github.com/NorfairKing/validity#readme")
+    (synopsis "Standard properties for functions on @code{Validity} types")
     (description
      "This package supplements the @code{Validity} typeclass with standard
 properties for functions operating on them.")
@@ -4731,13 +4353,12 @@ properties for functions operating on them.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "getopt-generics/getopt-generics-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "getopt-generics" version))
        (sha256
         (base32
          "1rszkcn1rg38wf35538ljk5bbqjc57y9sb3a0al7qxm82gy8yigr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "getopt-generics")))
     (inputs
      (list ghc-base-compat ghc-base-orphans ghc-generics-sop ghc-tagged))
     (native-inputs
@@ -4755,11 +4376,11 @@ interfaces with ease.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/gitrev/gitrev-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "gitrev" version))
        (sha256
         (base32 "0cl3lfm6k1h8fxp2vxa6ihfp4v8igkz9h35iwyq2frzm4kdn96d8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "gitrev")))
     (inputs (list ghc-base-compat))
     (home-page "https://github.com/acfoltzer/gitrev")
     (synopsis "Compile git revision info into Haskell projects")
@@ -4773,23 +4394,25 @@ info for more informative bug reports.")
 (define-public ghc-glob
   (package
     (name "ghc-glob")
-    (version "0.10.1")
+    (version "0.10.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "Glob-" version "/"
-                           "Glob-" version ".tar.gz"))
+       (uri (hackage-uri "Glob" version))
        (sha256
         (base32
-         "05fknrb114qvfzv6324ngx0fz43cwgrhrc700l3h2is9jinlgr6a"))))
+         "1h3kh46qds4nqvixm4myy1kb5slg53f44hfn8aymrlr7hjn75xka"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Glob")))
+    (arguments
+     `(#:cabal-revision
+       ("3" "1080rd5073g87rfm5whimb72b75105lqanybrbsfi14gmvndnbfx")))
     (inputs
      (list ghc-dlist ghc-semigroups ghc-transformers-compat))
     (native-inputs
      (list ghc-hunit ghc-quickcheck ghc-test-framework
            ghc-test-framework-hunit ghc-test-framework-quickcheck2))
-    (home-page "http://iki.fi/matti.niemenmaa/glob/")
+    (home-page "https://iki.fi/matti.niemenmaa/glob/")
     (synopsis "Haskell library matching glob patterns against file paths")
     (description "This package provides a Haskell library for @dfn{globbing}:
 matching patterns against file paths.")
@@ -4798,23 +4421,20 @@ matching patterns against file paths.")
 (define-public ghc-gluraw
   (package
     (name "ghc-gluraw")
-    (version "2.0.0.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/GLURaw/GLURaw-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1i2xi35n5z0d372px9mh6cyhgg1m0cfaiy3fnspkf6kbn9fgsqxq"))))
+    (version "2.0.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "GLURaw" version))
+              (sha256
+               (base32
+                "1b3rnva77k9naw5bl573bqgmsq7n9i8rrrvfvhbjcndqgmzhkini"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-openglraw))
-    (home-page "https://wiki.haskell.org/Opengl")
+    (properties '((upstream-name . "GLURaw")))
+    (inputs (list ghc-openglraw))
+    (home-page "http://www.haskell.org/haskellwiki/Opengl")
     (synopsis "Raw Haskell bindings GLU")
-    (description "GLURaw is a raw Haskell binding for the GLU 1.3 OpenGL
+    (description
+     "GLURaw is a raw Haskell binding for the GLU 1.3 OpenGL
 utility library.  It is basically a 1:1 mapping of GLU's C API, intended as a
 basis for a nicer interface.")
     (license license:bsd-3)))
@@ -4826,14 +4446,12 @@ basis for a nicer interface.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/GLUT/GLUT-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "GLUT" version))
        (sha256
         (base32
          "0vdkfj4wjzigdpzgr5l001y9wkhwgl00mclr26gf93kps14fkymn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "GLUT")))
     (inputs
      (list ghc-statevar ghc-opengl ghc-openglraw freeglut))
     (home-page "https://wiki.haskell.org/Opengl")
@@ -4846,33 +4464,18 @@ programs.")
 (define-public ghc-gnuplot
   (package
     (name "ghc-gnuplot")
-    (version "0.5.6.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/gnuplot/gnuplot-"
-             version ".tar.gz"))
-       (sha256
-        (base32 "1rfq94lnsyjr8y9p5r56jpllv3p8rvh9xxzjji016b6r5adi8cnb"))))
+    (version "0.5.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "gnuplot" version))
+              (sha256
+               (base32
+                "1glahh3si5bpazsklnpwxx4h4ivgb4wyngc032797zq1496fhhm3"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-temporary
-           ghc-utility-ht
-           ghc-data-accessor-transformers
-           ghc-data-accessor
-           ghc-semigroups
-           gnuplot))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'fix-path-to-gnuplot
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gnuplot (assoc-ref inputs "gnuplot")))
-               (substitute* "os/generic/Graphics/Gnuplot/Private/OS.hs"
-                 (("(gnuplotName = ).*$" all cmd)
-                  (string-append cmd "\"" gnuplot "/bin/gnuplot\"")))))))))
-    (home-page "https://wiki.haskell.org/Gnuplot")
+    (properties '((upstream-name . "gnuplot")))
+    (inputs (list ghc-temporary ghc-utility-ht ghc-data-accessor-transformers
+                  ghc-data-accessor ghc-semigroups))
+    (home-page "http://www.haskell.org/haskellwiki/Gnuplot")
     (synopsis "2D and 3D plots using gnuplot")
     (description "This package provides a Haskell module for creating 2D and
 3D plots using gnuplot.")
@@ -4884,12 +4487,12 @@ programs.")
     (version "2999.20.1.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "graphviz/graphviz-" version ".tar.gz"))
+              (uri (hackage-uri "graphviz" version))
               (sha256
                (base32
                 "0l0zxgb938hh09qirggbaskq79mgj3s081cnr42y5vm1rp1jir2s"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "graphviz")))
     (inputs
      (list ghc-colour
            ghc-dlist
@@ -4900,6 +4503,9 @@ programs.")
     (native-inputs
      (list ghc-hspec graphviz ghc-fgl-arbitrary ghc-quickcheck
            hspec-discover))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "110yp1h2jrswllnx2ks772g10v9h4vqxc07b33wfaksyim9769bp")))
     (home-page "https://hackage.haskell.org/package/graphviz")
     (synopsis "Bindings to Graphviz for graph visualisation")
     (description
@@ -4927,12 +4533,12 @@ and edge labels with positional information, etc.
     (source
       (origin
         (method url-fetch)
-        (uri (string-append "https://hackage.haskell.org/package/"
-                            "groups/groups-" version ".tar.gz"))
+        (uri (hackage-uri "groups" version))
         (sha256
           (base32
             "0f5c8dg9b74glfw2sdvdcl9c8igs6knz1bayk4gvvzvypsl547nf"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "groups")))
     (home-page "https://hackage.haskell.org/package/groups")
     (synopsis "Haskell 98 groups")
     (description "This package provides Haskell 98 groups.  A group is a
@@ -4942,22 +4548,18 @@ monoid with invertibility.")
 (define-public ghc-gtk2hs-buildtools
   (package
     (name "ghc-gtk2hs-buildtools")
-    (version "0.13.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "gtk2hs-buildtools/gtk2hs-buildtools-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "102x753jbc90lfm9s0ng5kvm0risqwpar331xwsd752as0bms142"))))
+    (version "0.13.8.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "gtk2hs-buildtools" version))
+              (sha256
+               (base32
+                "0fcm0v32hm9j908nyziia16ahb181y9hqppsy18clx2prvj480rv"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-random ghc-hashtables))
-    (native-inputs
-     (list ghc-alex ghc-happy))
-    (home-page "http://projects.haskell.org/gtk2hs/")
+    (properties '((upstream-name . "gtk2hs-buildtools")))
+    (inputs (list ghc-random ghc-hashtables))
+    (native-inputs (list ghc-alex ghc-happy))
+    (home-page "https://projects.haskell.org/gtk2hs/")
     (synopsis "Tools to build the Gtk2Hs suite of user interface libraries")
     (description
      "This package provides a set of helper programs necessary to build the
@@ -4971,43 +4573,37 @@ tools are not needed to actually run Gtk2Hs programs.")
 (define-public ghc-hackage-security
   (package
     (name "ghc-hackage-security")
-    (version "0.6.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hackage-security/hackage-security-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "05rgz31cmp52137j4jk0074z8lfgk8mrf2x56bzw28asmxrv8qli"))))
+    (version "0.6.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hackage-security" version))
+              (sha256
+               (base32
+                "0rm0avcc1k247qbrajhzi3vz92cgcc4nr3kbhhfmfm8rjxv0bvjj"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("8" "1xpzcdpfz0agbv75sadsylq6r8pq7zr0pyzbzrz0nz130yixsv5f")
-       #:tests? #f)) ; Tests fail because of framework updates.
-    (inputs
-     (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))
+    (properties '((upstream-name . "hackage-security")))
+    (inputs (list ghc-base16-bytestring
+                  ghc-base64-bytestring
+                  ghc-ed25519
+                  ghc-cryptohash-sha256
+                  ghc-tar
+                  ghc-zlib
+                  ghc-lukko
+                  ghc-cabal-syntax
+                  ghc-network-uri
+                  ghc-network))
+    (native-inputs (list ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-quickcheck
+                         ghc-aeson
+                         ghc-vector
+                         ghc-unordered-containers
+                         ghc-temporary))
     (home-page "https://github.com/haskell/hackage-security")
     (synopsis "Hackage security library")
-    (description "This Hackage security library provides both server and
+    (description
+     "This Hackage security library provides both server and
 client utilities for securing @uref{http://hackage.haskell.org/, the
 Hackage package server}.  It is based on
 @uref{http://theupdateframework.com/, The Update Framework}, a set of
@@ -5019,18 +4615,16 @@ Tor project}.")
 (define-public ghc-haddock
   (package
     (name "ghc-haddock")
-    (version "2.24.2")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haddock/haddock-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "haddock" version))
        (sha256
         (base32
-         "1ha4hrnidwkmwalqwd1ixa2933as5n4sj1lvz0cx89a3png7r930"))))
+         "0jqp37pbz4zjqc3dm0jkcsdqsh2ql9ygnr06m75bbk330yqchnl3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "haddock")))
     (arguments
      `(#:tests? #f ; TODO: haddock-test does not build.
        #:phases
@@ -5054,22 +4648,28 @@ Tor project}.")
 (define-public ghc-haddock-api
   (package
     (name "ghc-haddock-api")
-    (version "2.24.2")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haddock-api/haddock-api-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "haddock-api" version))
        (sha256
         (base32
-         "1jj2csi85nlywsyvnbwhclfdz27j2kyfbhrl9cm7av0243br9vg1"))))
+         "0ris5m61vig5nh5y2ddm98midl3v51vzgfgvsfyhm3nwk5hif6ay"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "haddock-api")))
     (inputs
      (list ghc-paths ghc-haddock-library))
     (native-inputs
      (list ghc-quickcheck ghc-hspec hspec-discover))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "haddock-api.cabal"
+               (("haddock-library \\^>= 1\\.9\\.0") "haddock-library")
+               (("hspec           \\^>= 2.8") "hspec")))))))
     (home-page "https://www.haskell.org/haddock/")
     (synopsis "API for documentation-generation tool Haddock")
     (description "This package provides an API to Haddock, the
@@ -5083,15 +4683,22 @@ documentation-generation tool for Haskell libraries.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haddock-library/haddock-library-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "haddock-library" version))
        (sha256
         (base32
          "15ak06q8yp11xz1hwr0sg2jqi3r78p1n89ik05hicqvxl3awf1pq"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: optparse-applicative ==0.15.*, tree-diff ==0.1.*
+    (properties '((upstream-name . "haddock-library")))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "1fnfcr3gvdjrya0czr3k2sqv4xmmvyv66yni2mckfppra93mcglg")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "haddock-library.cabal"
+               (("(base-compat|hspec|optparse-applicative|tree-diff)\\s+[^,]+" all dep)
+                dep)))))))
     (native-inputs
      (list ghc-base-compat
            ghc-hspec
@@ -5149,13 +4756,12 @@ the ‘haddock’ package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/half/half-"
-             version ".tar.gz"))
+       (uri (hackage-uri "half" version))
        (sha256
         (base32
          "1l8m2spqg0ac50qys2jk5b32v6wxklbbk5ypjp3ga6z14hkw7bz2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "half")))
     (native-inputs
      (list ghc-test-framework ghc-test-framework-quickcheck2
            ghc-quickcheck))
@@ -5172,14 +4778,12 @@ computation library for Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/happy/happy-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "happy" version))
        (sha256
         (base32
          "1346r2x5ravs5fqma65bzjragqbb2g6v41wz9maknwm2jf7kl79v"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "happy")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -5200,26 +4804,22 @@ Happy works in a similar way to the yacc tool for C.")
 (define-public ghc-hashable
   (package
     (name "ghc-hashable")
-    (version "1.3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hashable/hashable-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1d4sn4xjf0swrfg8pl93ipavbj12ch3a9aykhkl6mjnczc9m8bl2"))))
+    (version "1.4.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hashable" version))
+              (sha256
+               (base32
+                "11sycr73821amdz8g0k8c97igi4z7f9xdvgaxlkxhsp6h310bcz1"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f ; TODO: Tests require random<1.2
-       #:cabal-revision
-       ("2" "16va8hx4ynw0n5s2warhs13ilj7hrs5fcdn140h1fiix480as36n")))
-    (native-inputs
-     (list ghc-test-framework ghc-test-framework-hunit
-           ghc-test-framework-quickcheck2 ghc-hunit ghc-quickcheck))
-    (home-page "https://github.com/tibbe/hashable")
+    (properties '((upstream-name . "hashable")))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-random
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (home-page "http://github.com/haskell-unordered-containers/hashable")
     (synopsis "Class for types that can be converted to a hash value")
     (description
      "This package defines a class, @code{Hashable}, for types that can be
@@ -5238,58 +4838,29 @@ combine hash values.")
     (native-inputs '())
     (properties '((hidden? #t)))))
 
-(define-public ghc-hashable-time
-  (package
-    (name "ghc-hashable-time")
-    (version "0.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hashable-time/hashable-time-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1zw2gqagpbwq1hgx5rlvy6mhsnb15cxg3pmhawwv0ylfihmx2yxh"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "151gxiprdlj3masa95vvrxal9nwa72n3p1y15xyj4hp7mvvl4s2l")))
-    (inputs
-     (list ghc-hashable ghc-time-compat))
-    (home-page "https://hackage.haskell.org/package/hashable-time")
-    (synopsis "Hashable instances for Data.Time")
-    (description
-     "This package provides @code{Hashable} instances for types in
-@code{Data.Time}.")
-    (license license:bsd-3)))
-
 (define-public ghc-hashtables
   (package
     (name "ghc-hashtables")
-    (version "1.2.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hashtables/hashtables-"
-             version ".tar.gz"))
-       (sha256
-        (base32 "0vgggm7bqq55zmqj6qji89bfj3k1rdkikkfhyg81vsqf0f3bzhqa"))))
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hashtables" version))
+              (sha256
+               (base32
+                "1hsrihk948xfpy14qrhar50b41kp60i1rx8bkadjg1xb4bml0gbg"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hashable ghc-primitive ghc-vector))
-    (native-inputs
-     (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")
+    (properties '((upstream-name . "hashtables")))
+    (inputs (list ghc-hashable ghc-primitive ghc-vector))
+    (native-inputs (list ghc-mwc-random
+                         ghc-quickcheck
+                         ghc-hunit
+                         ghc-test-framework
+                         ghc-test-framework-quickcheck2
+                         ghc-test-framework-hunit))
+    (home-page "http://github.com/gregorycollins/hashtables")
     (synopsis "Haskell Mutable hash tables in the ST monad")
-    (description "This package provides a Haskell library including a
+    (description
+     "This package provides a Haskell library including a
 couple of different implementations of mutable hash tables in the ST
 monad, as well as a typeclass abstracting their common operations, and
 a set of wrappers to use the hash tables in the IO monad.")
@@ -5298,25 +4869,31 @@ a set of wrappers to use the hash tables in the IO monad.")
 (define-public ghc-haskeline
   (package
     (name "ghc-haskeline")
-    (version "0.8.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haskeline/haskeline-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0gqsa5s0drim9m42hv4wrq61mnvcdylxysfxfw3acncwilfrn9pb"))))
+    (version "0.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "haskeline" version))
+              (sha256
+               (base32
+                "1pr7zik1138cj0463867i1qqb2bgsq716mryap18jx7zb9f1b7gc"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-exceptions))
-    (native-inputs (list ghc-hunit))
-    ;; FIXME: Tests failing
-    (arguments `(#:tests? #f))
+    (properties '((upstream-name . "haskeline")))
+    (native-inputs (list ghc-hunit which))
+    (arguments
+      (list
+       #:tests? #f ; Cannot run binary haskeline-examples-Test, which is just
+                   ; built, even with PATH and LD_LIBRARY_PATH set.
+       #:cabal-revision
+       '("3" "101qavk0fmc4c6qa307kswz3345psskxqyxhk6hmykynjm05jjrv")
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-before 'configure 'patch-which
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "tests/Unit.hs"
+                 (("\"which\"")
+                  (string-append "\"" (search-input-file inputs "/bin/which") "\""))))))))
     (home-page "https://github.com/judah/haskeline")
-    (synopsis
-     "Command-line interface for user input, written in Haskell")
+    (synopsis "Command-line interface for user input, written in Haskell")
     (description
      "Haskeline provides a user interface for line input in command-line
 programs.  This library is similar in purpose to readline, but since it is
@@ -5329,46 +4906,38 @@ Haskeline runs both on POSIX-compatible systems and on Windows.")
 (define-public ghc-haskell-lexer
   (package
     (name "ghc-haskell-lexer")
-    (version "1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haskell-lexer/haskell-lexer-"
-             version ".tar.gz"))
-       (sha256
-        (base32 "1mb3np20ig0hbgnfxrzr3lczq7ya4p76g20lvnxch8ikck61afii"))))
+    (version "1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "haskell-lexer" version))
+              (sha256
+               (base32
+                "0jgkv1api3w7i9j5z01h7qdx2i9cp93h54hp9hj1bw9hk9bdmvn8"))))
     (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/haskell-lexer")
+    (properties '((upstream-name . "haskell-lexer")))
+    (home-page "https://github.com/yav/haskell-lexer")
     (synopsis "Fully compliant Haskell 98 lexer")
-    (description
-     "This package provides a fully compliant Haskell 98 lexer.")
-    (license license:bsd-3)))
+    (description "This package provides a fully compliant Haskell 98 lexer.")
+    (license license:expat)))
 
 (define-public ghc-haskell-src
   (package
     (name "ghc-haskell-src")
-    (version "1.0.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haskell-src/haskell-src-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0cjigvshk4b8wqdk0v0hz9ag1kyjjsmqsy4a1m3n28ac008cg746"))))
+    (version "1.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "haskell-src" version))
+              (sha256
+               (base32
+                "1spkhv83hy5v1lxs44l3w53vk8zj7gnx42c40hrkj4fcz6apdiwb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "haskell-src")))
+    (inputs (list ghc-happy ghc-syb))
     (arguments
-     `(#:cabal-revision
-       ("4" "0cyqdw77clzz7mq0b4c0jg2d1kdz9xii41268w2psmqmfpyn29pc")))
-    (inputs
-     (list ghc-happy ghc-syb))
-    (home-page
-     "https://hackage.haskell.org/package/haskell-src")
-    (synopsis
-     "Support for manipulating Haskell source code")
+     `(#:cabal-revision ("1"
+                         "0dfjzq0sxxcalqxygp2svx4890qx8b4amad0xldwy1f4xrp3lsnb")))
+    (home-page "http://hackage.haskell.org/package/haskell-src")
+    (synopsis "Support for manipulating Haskell source code")
     (description
      "The @code{haskell-src} package provides support for manipulating Haskell
 source code.  The package provides a lexer, parser and pretty-printer, and a
@@ -5383,15 +4952,13 @@ package are to parse or generate Haskell 98 code.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haskell-src-exts/haskell-src-exts-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "haskell-src-exts" version))
        (sha256
         (base32
          "01bcrxs9af4yqpclw43aijmsd1g19qhyzb47blz7vzwz2r3k11b7"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "haskell-src-exts")))
+    (outputs '("out" "doc"))
     (inputs
      (list cpphs ghc-happy ghc-pretty-show))
     (native-inputs
@@ -5412,13 +4979,12 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "haskell-src-exts-util/haskell-src-exts-util-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "haskell-src-exts-util" version))
        (sha256
         (base32
          "0fvqi72m74p7q5sbpy8m2chm8a1lgy10mfrcxcz8wrh59vngj0n8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "haskell-src-exts-util")))
     (inputs
      (list ghc-data-default ghc-haskell-src-exts ghc-semigroups
            ghc-uniplate))
@@ -5432,24 +4998,20 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
 (define-public ghc-haskell-src-meta
   (package
     (name "ghc-haskell-src-meta")
-    (version "0.8.7")
+    (version "0.8.11")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "haskell-src-meta/haskell-src-meta-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "haskell-src-meta" version))
               (sha256
                (base32
-                "1yy2dfb1ip1zqx3xh28g92209555abzvxrxiwcl95j27zzqxc6in"))))
+                "1wks0xb7ah2gj9n0ffbcaskjihy45l99qkf2h9k13cyfvqkzp9rw"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-haskell-src-exts ghc-syb ghc-th-orphans))
-    (native-inputs
-     (list ghc-hunit ghc-tasty ghc-tasty-hunit))
-    (home-page "https://hackage.haskell.org/package/haskell-src-meta")
+    (properties '((upstream-name . "haskell-src-meta")))
+    (inputs (list ghc-haskell-src-exts ghc-syb ghc-th-orphans))
+    (native-inputs (list ghc-hunit ghc-tasty ghc-tasty-hunit))
+    (home-page "http://hackage.haskell.org/package/haskell-src-meta")
     (synopsis "Parse source to template-haskell abstract syntax")
-    (description
-     "This package provides tools to parse Haskell sources to the
+    (description "This package provides tools to parse Haskell sources to the
 template-haskell abstract syntax.")
     (license license:bsd-3)))
 
@@ -5460,17 +5022,15 @@ template-haskell abstract syntax.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hasktags/hasktags-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "hasktags" version))
        (sha256
         (base32
          "09p79w16fgpqi6bwq162769xdrnyb7wnmz56k00nz6dj1a0bbbdd"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hasktags")))
     (arguments
      `(#:cabal-revision
-       ("1" "0q39ssdgm6lcmqj92frjvr53i34divx53zli0qar39mx8ka1l8ml")))
+       ("2" "0f3v6k3bvsczz0z5i09286c0i74wz782vayzyp5lndqvrx3b4g0x")))
     (inputs
      (list ghc-system-filepath ghc-optparse-applicative))
     (native-inputs
@@ -5489,13 +5049,12 @@ Vim.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hex-" version "/"
-                           "hex-" version ".tar.gz"))
+       (uri (hackage-uri "hex" version))
        (sha256
         (base32
          "1mc66758254d93m7vab7q6lhn7qphzxd6wyc3v6yq1diy0gji4va"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hex")))
     (home-page "https://hackage.haskell.org/package/hex")
     (synopsis "Convert strings into hexadecimal and back")
     (description "This package converts between bytestrings and their
@@ -5508,13 +5067,12 @@ hexadecimal string representation.")
     (version "0.6.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "highlighting-kate/highlighting-kate-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "highlighting-kate" version))
               (sha256
                (base32
                 "1bqv00gfmrsf0jjr4qf3lhshvfkyzmhbi3pjb6mafbnsyn2k7f6q"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "highlighting-kate")))
     (inputs
      (list ghc-diff ghc-regex-pcre-builtin))
     (native-inputs
@@ -5533,54 +5091,25 @@ descriptions.")
 (define-public ghc-hindent
   (package
     (name "ghc-hindent")
-    (version "5.3.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hindent/hindent-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "129gkn8qg68wsd60mq8yk7hrqsc8sd8v56xn41m5ii3hriq1mmv7"))))
+    (version "5.3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hindent" version))
+              (sha256
+               (base32
+                "1pc20iza3v0ljzbx6cycm1j1kbmz8h95xwfq47fd6zfmsrx9w6vn"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:modules ((guix build haskell-build-system)
-                  (guix build utils)
-                  (guix build emacs-utils))
-       #:imported-modules (,@%haskell-build-system-modules
-                           (guix build emacs-utils))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'emacs-install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out   (assoc-ref outputs "out"))
-                    (elisp-file "elisp/hindent.el")
-                    (dest  (string-append out "/share/emacs/site-lisp"))
-                    (emacs (search-input-file inputs "/bin/emacs")))
-               (make-file-writable elisp-file)
-               (emacs-substitute-variables elisp-file
-                 ("hindent-process-path"
-                  (string-append out "/bin/hindent")))
-               (install-file elisp-file dest)
-               (emacs-generate-autoloads "hindent" dest)))))))
-    (inputs
-     (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)
-       ("emacs" ,emacs-minimal)))
-    (home-page
-     "https://github.com/commercialhaskell/hindent")
+    (properties '((upstream-name . "hindent")))
+    (inputs (list ghc-haskell-src-exts
+                  ghc-monad-loops
+                  ghc-utf8-string
+                  ghc-yaml
+                  ghc-unix-compat
+                  ghc-path
+                  ghc-path-io
+                  ghc-optparse-applicative))
+    (native-inputs (list ghc-hspec ghc-diff))
+    (home-page "https://github.com/mihaimaruseac/hindent")
     (synopsis "Extensible Haskell pretty printer")
     (description
      "This package provides automatic formatting for Haskell files.  Both a
@@ -5593,13 +5122,12 @@ library and an executable.")
     (version "0.4.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/hinotify/"
-                    "hinotify-" version ".tar.gz"))
+              (uri (hackage-uri "hinotify" version))
               (sha256
                (base32
                 "06pqfikfa61i45g92b65br83kplwmizqkm42yp8d0ddgmq0b21qk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hinotify")))
     (inputs
      (list ghc-async))
     (home-page "https://github.com/kolmodin/hinotify.git")
@@ -5612,49 +5140,47 @@ accessed or modified.")
 (define-public ghc-hledger-lib
   (package
     (name "ghc-hledger-lib")
-    (version "1.21")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hledger-lib/hledger-lib-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "00prslqk8vnbyz388cpc0nsamzy8xcjzday5q9n3m9lx4p2dhb5y"))))
+    (version "1.27.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hledger-lib" version))
+              (sha256
+               (base32
+                "0w2jnpyfc6pp3n5fzdjd78hdh9vv9w98xwd2j6dw98rm6hlapwhb"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "hledger-lib")))
+    (inputs (list ghc-decimal
+                  ghc-glob
+                  ghc-aeson
+                  ghc-aeson-pretty
+                  ghc-ansi-terminal
+                  ghc-blaze-markup
+                  ghc-breakpoint
+                  ghc-call-stack
+                  ghc-cassava
+                  ghc-cassava-megaparsec
+                  ghc-cmdargs
+                  ghc-data-default
+                  ghc-doclayout
+                  ghc-extra
+                  ghc-file-embed
+                  ghc-hashtables
+                  ghc-megaparsec
+                  ghc-microlens
+                  ghc-microlens-th
+                  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")
+    (home-page "http://hledger.org")
     (synopsis "Reusable library providing the core functionality of hledger")
     (description
      "A reusable library containing hledger's core functionality.
@@ -5675,12 +5201,11 @@ Accounting.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hmatrix/hmatrix-"
-             version ".tar.gz"))
+       (uri (hackage-uri "hmatrix" version))
        (sha256
         (base32 "05462prqkbqpxfbzsgsp8waf0sirg2qz6lzsk7r1ll752n7gqkbg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hmatrix")))
     (arguments
      `(#:extra-directories ("lapack")))
     (inputs
@@ -5708,12 +5233,11 @@ numerical computations based on BLAS and LAPACK.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hmatrix-gsl/hmatrix-gsl-"
-             version ".tar.gz"))
+       (uri (hackage-uri "hmatrix-gsl" version))
        (sha256
         (base32 "0v6dla426x4ywaq59jm89ql1i42n39iw6z0j378xwb676v9kfxhm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hmatrix-gsl")))
     (arguments
      `(#:extra-directories ("gsl")))
     (inputs
@@ -5734,16 +5258,15 @@ using GSL.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/hmatrix-gsl-stats/hmatrix-gsl-stats-"
-         version ".tar.gz"))
+        (hackage-uri "hmatrix-gsl-stats" version))
        (sha256
         (base32 "1cq049sj3q5r06x7i35hqrkf2jc4p4kfi9zv0jmi2vp7w4644i5q"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hmatrix-gsl-stats")))
     (inputs
      (list ghc-vector ghc-storable-complex ghc-hmatrix gsl))
     (native-inputs (list pkg-config))
-    (home-page "http://code.haskell.org/hmatrix-gsl-stats")
+    (home-page "https://code.haskell.org/hmatrix-gsl-stats")
     (synopsis "GSL Statistics interface for Haskell")
     (description "This Haskell library provides a purely functional
 interface for statistics based on hmatrix and GSL.")
@@ -5757,12 +5280,11 @@ interface for statistics based on hmatrix and GSL.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/hmatrix-special/hmatrix-special-"
-         version ".tar.gz"))
+        (hackage-uri "hmatrix-special" version))
        (sha256
         (base32 "1mywr61kr852sbff26n9x95kswx9l4ycbv6s68qsbkh02xzqq7qz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hmatrix-special")))
     (inputs
      (list ghc-hmatrix ghc-hmatrix-gsl))
     (home-page "https://github.com/albertoruiz/hmatrix")
@@ -5778,12 +5300,12 @@ functions for Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/hostname/"
-                           "hostname-" version ".tar.gz"))
+       (uri (hackage-uri "hostname" version))
        (sha256
         (base32
          "0p6gm4328946qxc295zb6vhwhf07l1fma82vd0siylnsnsqxlhwv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hostname")))
     (home-page "https://hackage.haskell.org/package/hostname")
     (synopsis "Hostname in Haskell")
     (description "Network.HostName is a simple package providing a means to
@@ -5796,16 +5318,17 @@ determine the hostname.")
     (version "0.2.12")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "hourglass/hourglass-" version ".tar.gz"))
+              (uri (hackage-uri "hourglass" version))
               (sha256
                (base32
                 "0jnay5j13vpz6i1rkaj3j0d9v8jfpri499xn3l7wd01f81f5ncs4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hourglass")))
+    (arguments (list #:tests? #f)) ; Tests incompatible with newer versions.
     (inputs
      (list ghc-old-locale))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
+    ;(native-inputs
+    ; (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
@@ -5819,38 +5342,35 @@ representations of current time.")
 (define-public ghc-hpack
   (package
     (name "ghc-hpack")
-    (version "0.34.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/hpack/"
-                           "hpack-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0gmm6jgi1sgyilphww6apq1x04grqznm7xhyb7g1rj5j7my40ws2"))))
+    (version "0.35.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hpack" version))
+              (sha256
+               (base32
+                "1hpc6bwx94v943p73l12nnncbs656f2fn7q3hb4qs13xrxygzl4g"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "hpack")))
+    (inputs (list ghc-glob
+                  ghc-aeson
+                  ghc-bifunctors
+                  ghc-cryptonite
+                  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-hunit
+                         ghc-quickcheck
+                         ghc-hspec
+                         ghc-interpolate
+                         ghc-mockery
+                         ghc-temporary
+                         hspec-discover))
+    (home-page "https://github.com/sol/hpack#readme")
     (synopsis "Tools for an alternative Haskell package format")
     (description
      "Hpack is a format for Haskell packages.  It is an alternative to the
@@ -5868,15 +5388,12 @@ are described in a file named @code{package.yaml}.  Both @code{cabal2nix} and
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/"
-             "package/hspec-megaparsec/hspec-megaparsec-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "hspec-megaparsec" version))
        (sha256
         (base32
          "0hyf06gzzqd6sqd76crwxycwgx804sd39z7i0c2vmv1qgsxv82gn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hspec-megaparsec")))
     (inputs
      (list ghc-hspec-expectations ghc-megaparsec))
     (native-inputs
@@ -5895,13 +5412,12 @@ with Hspec.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hs-bibutils/hs-bibutils-"
-             version ".tar.gz"))
+       (uri (hackage-uri "hs-bibutils" version))
        (sha256
         (base32
          "1wnpy1v5rbii2iwlcc9psnww8pkirv9zl21s64cmbi6q7dv15g3n"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hs-bibutils")))
     (inputs (list ghc-syb))
     (home-page "https://hackage.haskell.org/package/hs-bibutils")
     (synopsis "Haskell bindings to bibutils")
@@ -5911,6 +5427,26 @@ that interconverts between various bibliography formats using a common
 MODS-format XML intermediate.")
     (license license:gpl2+)))
 
+(define-public ghc-hs-conllu
+  (package
+    (name "ghc-hs-conllu")
+    (version "0.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hs-conllu" version))
+              (sha256
+               (base32
+                "1azh4g5kdng8v729ldgblkmrdqrc501rgm9wwqx6gkqwwzn8w3r4"))))
+    (build-system haskell-build-system)
+    (inputs (list ghc-megaparsec ghc-void))
+    (home-page "https://github.com/arademaker/hs-conllu")
+    (synopsis "CoNLL-U validating parser and utils")
+    (description
+     "Utilities to parse, print, diff, and analyse data in CoNLL-U, a format
+used in linguistics to represent the syntactic annotation of sentences.  See
+@url{https://universaldependencies.org/format.html}")
+    (license license:lgpl3)))
+
 (define-public ghc-hslogger
   (package
     (name "ghc-hslogger")
@@ -5918,15 +5454,14 @@ MODS-format XML intermediate.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hslogger-" version "/" "hslogger-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "hslogger" version))
        (sha256 (base32
                 "0nyar9xcblx5jwks85y8f4jfy9k1h4ss6rvj4mdbiidrq3v688vz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hslogger")))
     (arguments
-     `(#:cabal-revision
-       ("3" "04mda3bwr2a00f5nbkqc84d46lmqfsk3gibzg3amdh74ngb451xq")))
+     `(#:cabal-revision ("6"
+                         "0xiqjl646kxynsccc2q1q91sch7pfx3274yl2745fsqhpb115df1")))
     (inputs
      (list ghc-network ghc-old-locale))
     (native-inputs
@@ -5942,29 +5477,29 @@ handler built in.")
 (define-public ghc-hslua
   (package
     (name "ghc-hslua")
-    (version "1.3.0.2")
+    (version "2.2.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "hslua/hslua-" version ".tar.gz"))
+              (uri (hackage-uri "hslua" version))
               (sha256
                (base32
-                "0p39xm0mmxzs5x6aim11qkb7npn0d9h7li2kwfhry0dijd1vm18i"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:configure-flags '("-fsystem-lua")
-       #:extra-directories ("lua")))
-    (inputs
-     (list lua ghc-base-compat))
-    (native-inputs
-     (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")
+                "1q587cjwb29jsf71hhmra6djr2sycbx2hr0rhwlgvb8ax699vkv3"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua")))
+    (inputs (list ghc-hslua-aeson
+                  ghc-hslua-core
+                  ghc-hslua-classes
+                  ghc-hslua-marshalling
+                  ghc-hslua-objectorientation
+                  ghc-hslua-packaging))
+    (native-inputs (list ghc-lua
+                         ghc-lua-arbitrary
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-tasty-hslua
+                         ghc-tasty
+                         ghc-tasty-hunit))
+    (home-page "https://hslua.org/")
     (synopsis "Lua language interpreter embedding in Haskell")
     (description
      "The Scripting.Lua module is a wrapper of the Lua language interpreter as
@@ -5974,24 +5509,22 @@ described in @url{https://www.lua.org/}.")
 (define-public ghc-hslua-module-system
   (package
     (name "ghc-hslua-module-system")
-    (version "0.2.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hslua-module-system/hslua-module-system-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0hk2splyasbplnggknjhlb423axc5b32xq8aq8zal4vvwlqhzvf1"))))
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-module-system" version))
+              (sha256
+               (base32
+                "0lacf9jzd53r75dk5nvkx0nwgiakpkingjnz58bhjfnvi81r6ddn"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hslua ghc-temporary))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-lua ghc-tasty-hunit))
-    (home-page "https://github.com/hslua/hslua-module-system")
+    (properties '((upstream-name . "hslua-module-system")))
+    (inputs (list ghc-hslua-core ghc-hslua-packaging ghc-hslua-marshalling
+                  ghc-temporary))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
+    (home-page "https://github.com/hslua/hslua")
     (synopsis "Lua module wrapper around Haskell's System module")
-    (description "This library provides access to system information and
+    (description
+     "This library provides access to system information and
 functionality to Lua scripts via Haskell's @code{System} module.  Intended
 usage for this package is to preload it by adding the loader function to
 @code{package.preload}.  Note that the Lua @code{package} library must have
@@ -6001,22 +5534,18 @@ already been loaded before the loader can be added.")
 (define-public ghc-hslua-module-text
   (package
     (name "ghc-hslua-module-text")
-    (version "0.3.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "hslua-module-text/hslua-module-text-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1vmd15n905i2pcsx748hz3h9kv5nnv74y663rj57q8mp0b40cbfl"))))
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-module-text" version))
+              (sha256
+               (base32
+                "0xq5ndgjhs37d73s8lvm0pndwjpj2pqb67pr0ckjap8yzhjna7fq"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hslua))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-lua ghc-tasty-hunit))
-    (home-page "https://github.com/hslua/hslua-module-text")
+    (properties '((upstream-name . "hslua-module-text")))
+    (inputs (list ghc-hslua-core ghc-hslua-packaging ghc-hslua-marshalling))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
+    (home-page "https://github.com/hslua/hslua")
     (synopsis "Lua module for text")
     (description
      "This package provides a UTF-8 aware subset of Lua's @code{string} module
@@ -6027,28 +5556,23 @@ for Haskell.  The functions provided by this module are @code{upper},
 (define-public ghc-hsyaml
   (package
     (name "ghc-hsyaml")
-    (version "0.2.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "HsYAML/HsYAML-" version ".tar.gz"))
-       (sha256
-        (base32
-         "10qzhsg789h37q22hm9p27dx4rhbykcbxp7p3pvkws8fr7ajgxv0"))))
+    (version "0.2.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "HsYAML" version))
+              (sha256
+               (base32
+                "0a7nbvpl4p8kwbbjfn1dj6s3fif5k8zhbckdvyz1k74pj3yb8ns6"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "HsYAML")))
+    (native-inputs (list ghc-quickcheck ghc-tasty ghc-tasty-quickcheck))
     (arguments
-     `(#:tests? #f ; TODO: Loops.
-       #:cabal-revision
-       ("2" "0f7867jfzlmlqnkv3fjrzjvvfzjlvhbm10kmg7n0qk69ic8grkbc")))
-;    (native-inputs
-;     `(("ghc-hsyaml" ,ghc-hsyaml)
-;       ("ghc-quickcheck" ,ghc-quickcheck)
-;       ("ghc-tasty" ,ghc-tasty)
-;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+     `(#:cabal-revision ("1"
+                         "0jmbgrjywcblrd8k6zzv2b5givdz83f479y15v5gs0r93z25xpmv")))
     (home-page "https://github.com/haskell-hvr/HsYAML")
     (synopsis "Pure Haskell YAML 1.2 parser")
-    (description "This library provides a
+    (description
+     "This library provides a
 @url{http://yaml.org/spec/1.2/spec.html, YAML 1.2} parser implementation
 for Haskell.  Its features include:
 
@@ -6078,35 +5602,31 @@ for user-defined custom schemas).
 (define-public ghc-http-api-data
   (package
     (name "ghc-http-api-data")
-    (version "0.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "http-api-data-" version "/"
-                           "http-api-data-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0xzfvxxh33ivlnrnzmm19cni3jgb5ph18n9hykkw3d6l3rhwzcnl"))))
+    (version "0.4.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "http-api-data" version))
+              (sha256
+               (base32
+                "171bw2a44pg50d3y77gw2y9vmx72laky7hnn5hw6r93pnjmlf9yz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "http-api-data")))
     (inputs (list ghc-attoparsec
                   ghc-attoparsec-iso8601
+                  ghc-base-compat
                   ghc-cookie
                   ghc-hashable
                   ghc-http-types
+                  ghc-tagged
                   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")
+    (native-inputs (list ghc-hunit ghc-hspec ghc-quickcheck
+                         ghc-quickcheck-instances hspec-discover))
+    (arguments
+     `(#:cabal-revision ("6"
+                         "0q4rhz81r5v0z1mn7x9q0ldbfv1a2cp3dpw8s2j96halsq34l4zl")))
+    (home-page "http://github.com/fizruk/http-api-data")
     (synopsis "Convert to/from HTTP API data like URL pieces, headers and
 query parameters")
     (description "This Haskell package defines typeclasses used for converting
@@ -6119,13 +5639,12 @@ Haskell data types to and from HTTP API data.")
     (version "0.8.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/ieee754/"
-                    "ieee754-" version ".tar.gz"))
+              (uri (hackage-uri "ieee754" version))
               (sha256
                (base32
                 "1lcs521g9lzy9d7337vg4w7q7s8500rfqy7rcifcz6pm6yfgyb8f"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ieee754")))
     (home-page "https://github.com/patperry/hs-ieee754")
     (synopsis "Utilities for dealing with IEEE floating point numbers")
     (description "Utilities for dealing with IEEE floating point numbers,
@@ -6140,12 +5659,12 @@ for general types.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "IfElse/IfElse-" version ".tar.gz"))
+       (uri (hackage-uri "IfElse" version))
        (sha256
         (base32
          "1kfx1bwfjczj93a8yqz1n8snqiq5655qgzwv1lrycry8wb1vzlwa"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "IfElse")))
     (home-page "https://hackage.haskell.org/package/IfElse")
     (synopsis "Monadic control flow with anaphoric variants")
     (description "This library provides functions for control flow inside of
@@ -6159,13 +5678,12 @@ monads with anaphoric variants on @code{if} and @code{when} and a C-like
     (version "0.5.0.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/indents/indents-"
-                    version ".tar.gz"))
+              (uri (hackage-uri "indents" version))
               (sha256
                (base32
                 "0dpcwiz0dwn5aqdsc50plfaawh86adhf7jx5dsmhn5q5nz32qn51"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "indents")))
     ;; This package needs an older version of tasty.
     (arguments '(#:tests? #f))
     (inputs
@@ -6187,12 +5705,12 @@ lines continued at an indented level below.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "infer-license/infer-license-" version ".tar.gz"))
+       (uri (hackage-uri "infer-license" version))
        (sha256
         (base32
          "0wlfm6bf55kfvm74xar9lmjg5v1103rs9m3grw1rq5bmcmhzxrhj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "infer-license")))
     (inputs
      (list ghc-text-metrics))
     (native-inputs
@@ -6206,19 +5724,18 @@ license from a given license file.")
 (define-public ghc-ini
   (package
     (name "ghc-ini")
-    (version "0.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "ini/ini-" version ".tar.gz"))
-       (sha256
-        (base32 "0mvwii8jbh2ll54qb9dij5m66c6324s2y4vrwz1qr4wz40m3qa8l"))))
+    (version "0.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ini" version))
+              (sha256
+               (base32
+                "0dp9c48vli8z6058yajnqg9hyf9swglk8ga4wcwl03aal7n8r7gp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ini")))
+    (inputs (list ghc-attoparsec ghc-unordered-containers))
     (native-inputs (list ghc-hspec))
-    (inputs
-     (list ghc-attoparsec ghc-unordered-containers))
-    (home-page "https://github.com/chrisdone/ini")
+    (home-page "https://github.com/andreasabel/ini")
     (synopsis
      "Haskell library to easily handle configuration files in the INI format")
     (description
@@ -6229,23 +5746,24 @@ read and write configuration files in the simple INI format.")
 (define-public ghc-inline-c
   (package
     (name "ghc-inline-c")
-    (version "0.9.1.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/inline-c/"
-                           "inline-c-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0a0m3bhh910c5g46cwkxgflsgw5ab7lzymwll9hijyvwgnsw3h7i"))))
+    (version "0.9.1.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "inline-c" version))
+              (sha256
+               (base32
+                "06az494fp2nh6fnibq28yw8jsrpj4jq1swyx53a328qv04cbhrym"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-ansi-wl-pprint ghc-hashable ghc-parsers
-           ghc-unordered-containers ghc-vector))
-    (native-inputs
-     (list ghc-quickcheck ghc-hspec ghc-raw-strings-qq ghc-regex-posix
-           ghc-split))
-    (home-page "https://hackage.haskell.org/package/inline-c")
+    (properties '((upstream-name . "inline-c")))
+    (inputs (list ghc-ansi-wl-pprint ghc-hashable ghc-parsers
+                  ghc-unordered-containers ghc-vector))
+    (native-inputs (list ghc-quickcheck
+                         ghc-hspec
+                         ghc-quickcheck
+                         ghc-raw-strings-qq
+                         ghc-regex-posix
+                         ghc-split))
+    (home-page "http://hackage.haskell.org/package/inline-c")
     (synopsis "Write Haskell source files including C code inline")
     (description
      "inline-c lets you seamlessly call C libraries and embed high-performance
@@ -6257,21 +5775,18 @@ minimal overhead.  No FFI required.")
 (define-public ghc-inline-c-cpp
   (package
     (name "ghc-inline-c-cpp")
-    (version "0.4.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/inline-c-cpp/"
-                           "inline-c-cpp-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0bqrhyic3cw1pqg7knsmkqx5swpr4kvf9bmz0mhmqbl6brmv5il0"))))
+    (version "0.5.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "inline-c-cpp" version))
+              (sha256
+               (base32
+                "0m14nb9brpnh2cgq8gg6182mdcmn45hf734la68dnhq23sn63lpx"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-inline-c ghc-safe-exceptions))
-    (native-inputs
-     (list ghc-hspec))
-    (home-page "https://hackage.haskell.org/package/inline-c-cpp")
+    (properties '((upstream-name . "inline-c-cpp")))
+    (inputs (list ghc-inline-c ghc-safe-exceptions))
+    (native-inputs (list ghc-hspec ghc-vector))
+    (home-page "http://hackage.haskell.org/package/inline-c-cpp")
     (synopsis "Lets you embed C++ code into Haskell")
     (description
      "This package provides utilities to inline C++ code into Haskell using
@@ -6285,14 +5800,12 @@ minimal overhead.  No FFI required.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "integer-logarithms/integer-logarithms-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "integer-logarithms" version))
        (sha256
         (base32
          "0zzapclfabc76g8jzsbsqwdllx2zn0gp4raq076ib6v0mfgry2lv"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Needs tasty<1.4
+    (properties '((upstream-name . "integer-logarithms")))
     (native-inputs
      (list ghc-quickcheck
            ghc-smallcheck
@@ -6300,6 +5813,17 @@ minimal overhead.  No FFI required.")
            ghc-tasty-hunit
            ghc-tasty-quickcheck
            ghc-tasty-smallcheck))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0z81yksgx20d0rva41blsjcp3jsp1qy9sy385fpig0l074fzv6ym")
+       #:phases
+       (modify-phases %standard-phases
+         ;; Needs tasty<1.4
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "integer-logarithms.cabal"
+               (("(tasty)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "https://github.com/Bodigrim/integer-logarithms")
     (synopsis "Integer logarithms")
     (description
@@ -6311,14 +5835,6 @@ minimal overhead.  No FFI required.")
 in migrated modules.")
     (license license:expat)))
 
-(define-public ghc-integer-logarithms-bootstrap
-  (package
-    (inherit ghc-integer-logarithms)
-    (name "ghc-integer-logarithms-bootstrap")
-    (arguments `(#:tests? #f))
-    (native-inputs '())
-    (properties '((hidden? #t)))))
-
 (define-public ghc-interpolate
   (package
     (name "ghc-interpolate")
@@ -6326,12 +5842,12 @@ in migrated modules.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/interpolate/"
-                           "interpolate-" version ".tar.gz"))
+       (uri (hackage-uri "interpolate" version))
        (sha256
         (base32
          "03jrkj9c62w0c2awym8mhpsgpd0jffl50cqwfrm7bbdfhd8dsxi7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "interpolate")))
     (inputs
      (list ghc-haskell-src-meta))
     (native-inputs
@@ -6350,15 +5866,15 @@ Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/IntervalMap/"
-                           "IntervalMap-" version ".tar.gz"))
+       (uri (hackage-uri "IntervalMap" version))
        (sha256
         (base32
          "03smzhwk1zf5na544b0azp49j4gvafqsih9ggwf6yng38yhixwld"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "IntervalMap")))
     (native-inputs
      (list ghc-quickcheck))
-    (home-page "http://www.chr-breitkopf.de/comp/IntervalMap")
+    (home-page "https://www.chr-breitkopf.de/comp/IntervalMap")
     (synopsis "Containers for intervals, with efficient search")
     (description
      "This package provides ordered containers of intervals, with efficient
@@ -6373,12 +5889,12 @@ example code on the home page for a quick introduction.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "intervals/intervals-" version ".tar.gz"))
+       (uri (hackage-uri "intervals" version))
        (sha256
         (base32
          "1qibvgys8lw61x9na3iy3dcglyj9qyhcbfc00glnagl7cbk1shlv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "intervals")))
     (inputs
      (list ghc-distributive))
     (native-inputs
@@ -6392,33 +5908,32 @@ which represets a closed, convex set of floating point values.")
 (define-public ghc-invariant
   (package
     (name "ghc-invariant")
-    (version "0.5.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/invariant/invariant-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1jlp0gbfjsx7k08275djh8m3v4rpg8llw5gdkg9s9qfx0lc0mymr"))))
+    (version "0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "invariant" version))
+              (sha256
+               (base32
+                "07ffgcfpacsdihcmcmx2m1gp8czlg28657bxncxjykjiiiwjlaxm"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-hspec ghc-quickcheck hspec-discover))
+    (properties '((upstream-name . "invariant")))
+    (inputs (list ghc-bifunctors
+                  ghc-comonad
+                  ghc-contravariant
+                  ghc-profunctors
+                  ghc-statevar
+                  ghc-tagged
+                  ghc-th-abstraction
+                  ghc-transformers-compat
+                  ghc-unordered-containers))
+    (native-inputs (list ghc-hspec ghc-quickcheck hspec-discover))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0551ll1swnrmq09j89jqnxl4qnirbbpdpsdym23adaf36qdd7v37")))
     (home-page "https://github.com/nfrisby/invariant-functors")
     (synopsis "Haskell98 invariant functors")
-    (description "Haskell98 invariant functors (also known as exponential
+    (description
+     "Haskell98 invariant functors (also known as exponential
 functors).  For more information, see Edward Kmett's article
 @uref{http://comonad.com/reader/2008/rotten-bananas/, Rotten Bananas}.")
     (license license:bsd-2)))
@@ -6426,31 +5941,24 @@ functors).  For more information, see Edward Kmett's article
 (define-public ghc-io-streams
   (package
     (name "ghc-io-streams")
-    (version "1.5.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "io-streams/io-streams-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1y3sqmxrwiksz7pl4hf3vzvg8p8n00qnv98nj5xbpcadlh468rny"))))
+    (version "1.5.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "io-streams" version))
+              (sha256
+               (base32
+                "1zn4iyd18g9jc1qdgixp6hi56nj7czy4jdz2xca59hcn2q2xarfk"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-attoparsec
-           ghc-bytestring-builder
-           ghc-network
-           ghc-primitive
-           ghc-vector
-           ghc-zlib-bindings))
-    (native-inputs
-     (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")
+    (properties '((upstream-name . "io-streams")))
+    (inputs (list ghc-attoparsec ghc-primitive ghc-vector ghc-zlib-bindings
+                  ghc-network))
+    (native-inputs (list ghc-zlib
+                         ghc-hunit
+                         ghc-quickcheck
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2))
+    (home-page "http://hackage.haskell.org/package/io-streams")
     (synopsis "Simple and composable stream I/O")
     (description "This library contains simple and easy-to-use
 primitives for I/O using streams.")
@@ -6463,16 +5971,15 @@ primitives for I/O using streams.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "io-streams-haproxy/io-streams-haproxy-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "io-streams-haproxy" version))
        (sha256
         (base32
          "1dcn5hd4fiwyq7m01r6fi93vfvygca5s6mz87c78m0zyj29clkmp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "io-streams-haproxy")))
     (arguments
-     `(#:cabal-revision
-       ("3" "02k9halblgnynlm781ahc81yxla8z7cck1gikm8555v78rf5hv7x")))
+     `(#:cabal-revision ("6"
+                         "024aw98q1x3fb1xq07qki3z446w6lk5gyjl13shy0dbrd5aafh92")))
     (inputs
      (list ghc-attoparsec ghc-io-streams ghc-network))
     (native-inputs
@@ -6489,25 +5996,22 @@ through a forwarding proxy that is configured to speak this protocol.")
 (define-public ghc-iproute
   (package
     (name "ghc-iproute")
-    (version "1.7.11")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/iproute/iproute-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "12wa59b1zgjqp8dmygq2x44ml0cb89fhn1k0zkj4aqz7rhkwsp90"))))
+    (version "1.7.12")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "iproute" version))
+              (sha256
+               (base32
+                "0qvb4d7nw8f6j4s09cnpn6z1rdwcwknwklfrhsgivg7wg4aisxgi"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; FIXME: Tests cannot find System.ByteOrder,
-                               ; exported by ghc-byteorder.  Doctest issue.
-    (inputs
-     (list ghc-appar ghc-byteorder ghc-network ghc-safe))
-    (home-page "https://www.mew.org/~kazu/proj/iproute/")
+    (properties '((upstream-name . "iproute")))
+    (inputs (list ghc-appar ghc-byteorder ghc-network ghc-semigroups))
+    (native-inputs (list ghc-doctest ghc-hspec ghc-quickcheck ghc-safe
+                         hspec-discover))
+    (home-page "http://www.mew.org/~kazu/proj/iproute/")
     (synopsis "IP routing table")
-    (description "IP Routing Table is a tree of IP ranges to search one of
+    (description
+     "IP Routing Table is a tree of IP ranges to search one of
 them on the longest match base.  It is a kind of TRIE with one way branching
 removed.  Both IPv4 and IPv6 are supported.")
     (license license:bsd-3)))
@@ -6515,24 +6019,26 @@ removed.  Both IPv4 and IPv6 are supported.")
 (define-public ghc-ipynb
   (package
     (name "ghc-ipynb")
-    (version "0.1.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "ipynb/ipynb-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0qky4l5aaiq7ypwbxh0mr7s572290fi596f18dg68qpyzc49a9kx"))))
+    (version "0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ipynb" version))
+              (sha256
+               (base32
+                "1iwia4sxg40m4d290gys72wabqmkqx24ywsaranwzk2wx5s3sx4s"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-unordered-containers ghc-base64-bytestring ghc-aeson
-           ghc-semigroups))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit ghc-microlens-aeson ghc-microlens))
-    (home-page "https://hackage.haskell.org/package/ipynb")
+    (properties '((upstream-name . "ipynb")))
+    (inputs (list ghc-unordered-containers ghc-base64-bytestring ghc-aeson
+                  ghc-semigroups))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-microlens-aeson
+                         ghc-microlens))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0fl9x5amq0g5dg57dcgc0g4ir0r1fdbx06aldsqdwzdc9zs97v6k")))
+    (home-page "http://hackage.haskell.org/package/ipynb")
     (synopsis "Data structure for working with Jupyter notebooks")
-    (description "This library defines a data structure for representing
+    (description
+     "This library defines a data structure for representing
 Jupyter notebooks, along with @code{ToJSON} and @code{FromJSON}
 instances for conversion to and from JSON .ipynb files.")
     (license license:bsd-3)))
@@ -6544,11 +6050,11 @@ instances for conversion to and from JSON .ipynb files.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/iwlib/iwlib-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "iwlib" version))
        (sha256
         (base32 "0khmfwql4vwj55idsxmhjhrbqzfir3g9wm5lmpvnf77mm95cfpdz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "iwlib")))
     (arguments
      `(#:extra-directories ("wireless-tools")))
     (inputs
@@ -6568,12 +6074,12 @@ supported systems.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/json/"
-                           "json-" version ".tar.gz"))
+       (uri (hackage-uri "json" version))
        (sha256
         (base32
          "1fjnd2r4gl2hfqx158db3cn3rsyin4ch7rf9scb2hcy90cy6l10c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "json")))
     (arguments
      `(#:cabal-revision
        ("1" "16fp0y95gaibjravzj1hxdkng1cr8zqjqzd14m48kf4jrq3npz6r")))
@@ -6589,19 +6095,16 @@ Notation, JSON} is a lightweight data-interchange format.")
 (define-public ghc-juicypixels
   (package
     (name "ghc-juicypixels")
-    (version "3.3.6")
+    (version "3.3.7")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "JuicyPixels/JuicyPixels-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "JuicyPixels" version))
               (sha256
                (base32
-                "1f8giivsqxma19ax78dr7j4gir12iyfqn2mlsd27zzl8dn7dy6w1"))))
+                "1rrvapzcj0q8sigxq1zq2k4h88i1r2hyca4p7pkqa1b4pk6vhdny"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-zlib ghc-vector ghc-primitive))
+    (properties '((upstream-name . "JuicyPixels")))
+    (inputs (list ghc-zlib ghc-vector ghc-primitive))
     (home-page "https://github.com/Twinside/Juicy.Pixels")
     (synopsis "Picture loading and serialization library")
     (description
@@ -6612,31 +6115,29 @@ TIFF and GIF formats.")
 (define-public ghc-kan-extensions
   (package
     (name "ghc-kan-extensions")
-    (version "5.2.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/kan-extensions/kan-extensions-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1rkjxwc2k2425d2shdra6wzd4f4dpj76hxmq8mish4f0lz9gxxml"))))
+    (version "5.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "kan-extensions" version))
+              (sha256
+               (base32
+                "08mddsk9v75mahp1jqn28vglygmdil1g37drcj3ivbqc0k6dq55r"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "kan-extensions")))
+    (inputs (list ghc-adjunctions
+                  ghc-comonad
+                  ghc-contravariant
+                  ghc-distributive
+                  ghc-invariant
+                  ghc-free
+                  ghc-profunctors
+                  ghc-semigroupoids
+                  ghc-tagged
+                  ghc-transformers-compat))
+    (home-page "http://github.com/ekmett/kan-extensions/")
     (synopsis "Kan extensions library")
-    (description "This library provides Kan extensions, Kan lifts, various
+    (description
+     "This library provides Kan extensions, Kan lifts, various
 forms of the Yoneda lemma, and (co)density (co)monads for Haskell.")
     (license license:bsd-3)))
 
@@ -6647,12 +6148,12 @@ forms of the Yoneda lemma, and (co)density (co)monads for Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "language-c/language-c-" version ".tar.gz"))
+       (uri (hackage-uri "language-c" version))
        (sha256
         (base32
          "0bi02jdirkys8v7flf39vrpla2a74z1z0sdhy9lb9v7cmcc6rmpk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "language-c")))
     (inputs (list ghc-syb))
     (native-inputs
      (list ghc-happy ghc-alex))
@@ -6671,12 +6172,12 @@ and a large set of GNU extensions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "language-glsl/language-glsl-" version ".tar.gz"))
+       (uri (hackage-uri "language-glsl" version))
        (sha256
         (base32
          "0hdg67ainlqpjjghg3qin6fg4p783m0zmjqh4rd5gyizwiplxkp1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "language-glsl")))
     (inputs (list ghc-prettyclass))
     (arguments
      `(#:tests? #f
@@ -6695,14 +6196,13 @@ representation, parsing, and pretty-printing of GLSL 1.50 code.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "language-haskell-extract-" version "/"
-                           "language-haskell-extract-" version ".tar.gz"))
+       (uri (hackage-uri "language-haskell-extract" version))
        (patches (search-patches "ghc-language-haskell-extract-ghc-8.10.patch"))
        (sha256
         (base32
          "1nxcs7g8a1sp91bzpy4cj6s31k5pvc3gvig04cbrggv5cvjidnhl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "language-haskell-extract")))
     (arguments
      `(#:cabal-revision
        ("1" "1chx4g8ngb1hpyh3r9rbl8rkjkm67klms4wmw3p1g2llg47vvqip")
@@ -6730,79 +6230,71 @@ with @code{wc} (for a web service).")
 (define-public ghc-lens
   (package
     (name "ghc-lens")
-    (version "4.19.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/lens/lens-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0fy2vr5r11cc6ana8m2swqgs3zals4kims55vd6119bi76p5iy2j"))))
-    (build-system haskell-build-system)
+    (version "5.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lens" version))
+              (sha256
+               (base32
+                "08mkm2mjvhmwg9hc4kd4cd6dgmcszs1p2mzp1nmri7lqbpy9jknc"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "lens")))
+    (inputs (list ghc-assoc
+                  ghc-base-orphans
+                  ghc-bifunctors
+                  ghc-call-stack
+                  ghc-comonad
+                  ghc-contravariant
+                  ghc-distributive
+                  ghc-free
+                  ghc-hashable
+                  ghc-indexed-traversable
+                  ghc-indexed-traversable-instances
+                  ghc-kan-extensions
+                  ghc-parallel
+                  ghc-profunctors
+                  ghc-reflection
+                  ghc-semigroupoids
+                  ghc-strict
+                  ghc-tagged
+                  ghc-th-abstraction
+                  ghc-these
+                  ghc-transformers-compat
+                  ghc-unordered-containers
+                  ghc-vector))
+    (native-inputs (list ghc-quickcheck
+                         ghc-test-framework
+                         ghc-test-framework-quickcheck2
+                         ghc-hunit
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-simple-reflect))
     (arguments
-     `(#:tests? #f ; TODO: Needs vector<0.12.2
-       #:cabal-revision
-       ("6" "1k08my9rh1il3ibiyhljxkgndfgk143pn5a6nyzjnckw3la09myl")))
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (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/")
+     `(#:cabal-revision ("1"
+                         "19z3k7ikpfa96b86yabxghfqpnq9d0ayy4gdlvci3ycvws0s8cy6")))
+    (home-page "http://github.com/ekmett/lens/")
     (synopsis "Lenses, Folds and Traversals")
-    (description "This library provides @code{Control.Lens}.  The combinators
+    (description
+     "This library provides @code{Control.Lens}.  The combinators
 in @code{Control.Lens} provide a highly generic toolbox for composing families
 of getters, folds, isomorphisms, traversals, setters and lenses and their
 indexed variants.")
-    (license license:bsd-3)))
+    (license license:bsd-2)))
 
 (define-public ghc-lens-family-core
   (package
     (name "ghc-lens-family-core")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/lens-family-core/lens-family-core-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0ni6s873hy2h3b316835ssmlyr05yinb3a8jq5b01p9ppp9zrd0r"))))
+    (version "2.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lens-family-core" version))
+              (sha256
+               (base32
+                "1dkkd33wh2ykgis92dpshjxz6d2d41dvjj4zz6b7mdy8frr9jnhv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "lens-family-core")))
     (home-page
-     "http://hackage.haskell.org/package/lens-family-core")
+     "https://hackage.haskell.org/package/lens-family-core")
     (synopsis "Haskell 98 Lens Families")
     (description
      "This package provides first class functional references.  In addition to
@@ -6825,19 +6317,16 @@ lenses and traversals for those who require Haskell 98.")
 (define-public ghc-libffi
   (package
     (name "ghc-libffi")
-    (version "0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "libffi/libffi-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0g7jnhng3j7z5517aaqga0144aamibsbpgm3yynwyfzkq1kp0f28"))))
+    (version "0.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "libffi" version))
+              (sha256
+               (base32
+                "1w9ssmjx521f4lmaynmh1zargl2zmfvvpq2bldsvnwldfdgikbkn"))))
     (build-system haskell-build-system)
-    (native-inputs (list pkg-config))
-    (inputs (list libffi))
-    (home-page "https://hackage.haskell.org/package/libffi")
+    (properties '((upstream-name . "libffi")))
+    (home-page "http://haskell.org/haskellwiki/Library/libffi")
     (synopsis "Haskell binding to libffi")
     (description
      "A binding to libffi, allowing C functions of types only known at runtime
@@ -6851,14 +6340,12 @@ to be called from Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/libmpd/libmpd-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "libmpd" version))
        (sha256
         (base32
          "088vlir0n3wps2p5ydgyx51p41nfjcm2v02sszpyjj3c8z7f4qkh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "libmpd")))
     (inputs
      (list ghc-attoparsec ghc-data-default-class ghc-network
            ghc-safe-exceptions ghc-utf8-string))
@@ -6873,22 +6360,21 @@ Music Player Daemon.")
 (define-public ghc-lib-parser
   (package
     (name "ghc-lib-parser")
-    (version "8.10.7.20210828")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "ghc-lib-parser/ghc-lib-parser-" version ".tar.gz"))
-       (sha256
-        (base32
-         "178v4f7q9ndqmlhg2vhlk6ifm3ilajlrz8iw84vggzs7rp0fnlx0"))))
+    (version "9.2.5.20221107")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ghc-lib-parser" version))
+              (sha256
+               (base32
+                "1xh8rm5lwbh96g4v34whkcbb1yjsyvx3rwwycj30lrglhqk7f4c4"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc")) ; documentation is 39M
-    (native-inputs
-     (list ghc-alex ghc-happy))
+    (properties '((upstream-name . "ghc-lib-parser")))
+    (outputs '("out" "doc")) ; documentation is 39M
+    (native-inputs (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
+    (description
+     "This library implements the GHC API.  It is like the
 compiler-provided @code{ghc} package, but it can be loaded on many
 compiler versions.")
     (license license:bsd-3)))
@@ -6900,12 +6386,12 @@ compiler versions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/libxml/"
-                           "libxml-" version ".tar.gz"))
+       (uri (hackage-uri "libxml" version))
        (sha256
         (base32
          "01zvk86kg726lf2vnlr7dxiz7g3xwi5a4ak9gcfbwyhynkzjmsfi"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "libxml")))
     (inputs
      (list libxml2))
     (arguments
@@ -6926,8 +6412,7 @@ compiler versions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "libyaml/libyaml-" version ".tar.gz"))
+       (uri (hackage-uri "libyaml" version))
        (sha256
         (base32
          "1dcpbsjg6n305l07isxmavgp01lbv1qggy16acjyxjlz35pxchlg"))
@@ -6938,6 +6423,7 @@ compiler versions.")
            (delete-file-recursively "libyaml_src")
            #t))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "libyaml")))
     (arguments
      `(#:configure-flags `("--flags=system-libyaml")
        #:extra-directories ("libyaml+static")))
@@ -6952,30 +6438,27 @@ LibYAML C library.")
 (define-public ghc-lifted-async
   (package
     (name "ghc-lifted-async")
-    (version "0.10.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/lifted-async/lifted-async-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0j4f5471qfxkxy84ri87bcvp30ikh4m30imcggwn8m5v8igp218d"))))
+    (version "0.10.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lifted-async" version))
+              (sha256
+               (base32
+                "1kq96cp9czf358gykai2vcmynnd7zivqja4pb3f8bif9ypln9vai"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "lifted-async")))
+    (inputs (list ghc-async ghc-lifted-base ghc-transformers-base
+                  ghc-monad-control ghc-constraints))
+    (native-inputs (list ghc-hunit
+                         ghc-tasty
+                         ghc-tasty-expected-failure
+                         ghc-tasty-hunit
+                         ghc-tasty-th
+                         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")
+    (synopsis
+     "Run lifted IO operations asynchronously and wait for their results")
     (description
      "This package provides IO operations from @code{async} package lifted to any
 instance of @code{MonadBase} or @code{MonadBaseControl}.")
@@ -6988,14 +6471,12 @@ instance of @code{MonadBase} or @code{MonadBaseControl}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/lifted-base/lifted-base-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "lifted-base" version))
        (sha256
         (base32
          "1i8p8d3rkdh21bhgjjh32vd7qqjr7jq7p59qds0aw2kmargsjd61"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "lifted-base")))
     (arguments `(#:tests? #f)) ; FIXME: Missing testing libraries.
     (inputs
      (list ghc-transformers-base ghc-monad-control ghc-transformers-compat
@@ -7012,40 +6493,35 @@ Kaseorg.")
 (define-public ghc-linear
   (package
     (name "ghc-linear")
-    (version "1.21.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/linear/"
-                           "linear-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0ax6prmc7b53w0lz5ddc40wrjj9bm7wldpp57283gx9hdf8qrb35"))))
-    (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (version "1.21.10")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "linear" version))
+              (sha256
+               (base32
+                "1d3s1p4imkifn7dccqci2qiwcg99x22kf250hzh4fh4xghi361xr"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "linear")))
+    (inputs (list ghc-adjunctions
+                  ghc-base-orphans
+                  ghc-bytes
+                  ghc-cereal
+                  ghc-distributive
+                  ghc-hashable
+                  ghc-indexed-traversable
+                  ghc-lens
+                  ghc-random
+                  ghc-reflection
+                  ghc-semigroups
+                  ghc-semigroupoids
+                  ghc-tagged
+                  ghc-transformers-compat
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-void))
+    (native-inputs (list ghc-simple-reflect ghc-test-framework
+                         ghc-test-framework-hunit ghc-hunit))
+    (home-page "http://github.com/ekmett/linear/")
     (synopsis "Linear algebra library for Haskell")
     (description
      "This package provides types and combinators for linear algebra on free
@@ -7055,29 +6531,21 @@ vector spaces.")
 (define-public ghc-listlike
   (package
     (name "ghc-listlike")
-    (version "4.7.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append
-         "https://hackage.haskell.org/package/ListLike/ListLike-"
-         version ".tar.gz"))
-       (sha256
-        (base32
-         "08jip0q2f9qc95wcqka2lrqpf8r7sswsi5104w73kyrbmfirqnrd"))))
+    (version "4.7.8")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ListLike" version))
+              (sha256
+               (base32
+                "1l9pfjy7gh7xqnzflixp37d6lsppmlffzmmq75xn9r8ij3r2jycs"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-vector
-           ghc-dlist
-           ghc-fmlist
-           ghc-hunit
-           ghc-quickcheck
-           ghc-random
-           ghc-utf8-string))
-    (home-page "https://github.com/JohnLato/listlike")
+    (properties '((upstream-name . "ListLike")))
+    (inputs (list ghc-vector ghc-dlist ghc-fmlist ghc-utf8-string))
+    (native-inputs (list ghc-hunit ghc-quickcheck ghc-random))
+    (home-page "http://github.com/ddssff/listlike")
     (synopsis "Generic support for list-like structures")
-    (description "The ListLike module provides a common interface to the
+    (description
+     "The ListLike module provides a common interface to the
 various Haskell types that are list-like.  Predefined interfaces include
 standard Haskell lists, Arrays, ByteStrings, and lazy ByteStrings.
 Custom types can easily be made ListLike instances as well.
@@ -7087,108 +6555,54 @@ ByteString, for types that support input and output, and for types that
 can handle infinite lists.")
     (license license:bsd-3)))
 
-(define-public ghc-llvm-hs-pure
-  (package
-    (name "ghc-llvm-hs-pure")
-    (version "9.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/llvm-hs-pure/"
-                           "llvm-hs-pure-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0pxb5ah8r5pzpz2ibqw3g9g1isigb4z7pbzfrwr8kmcjn74ab3kf"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-attoparsec ghc-fail ghc-unordered-containers))
-    (native-inputs
-     (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
-for interacting with LLVM.  It includes an algebraic datatype (ADT) to represent
-LLVM IR.  The llvm-hs package builds on this one with FFI bindings to LLVM, but
-llvm-hs-pure does not require LLVM to be available.")
-    (license license:bsd-3)))
-
-(define-public ghc-llvm-hs
-  (package
-    (name "ghc-llvm-hs")
-    (version "9.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/llvm-hs/llvm-hs-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0723xgh45h9cyxmmjsvxnsp8bpn1ljy4qgh7a7vqq3sj9d6wzq00"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-attoparsec ghc-exceptions ghc-utf8-string ghc-llvm-hs-pure
-           llvm-9))
-    (native-inputs
-     (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
-current Haskell bindings, it uses an algebraic datatype (ADT) to represent LLVM
-IR, and so offers two advantages: it handles almost all of the stateful
-complexities of using the LLVM API to build IR; and it supports moving IR not
-only from Haskell into LLVM C++ objects, but the other direction - from LLVM C++
-into Haskell.")
-    (license license:bsd-3)))
-
 (define-public ghc-logging-facade
   (package
     (name "ghc-logging-facade")
-    (version "0.3.0")
+    (version "0.3.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "logging-facade/logging-facade-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "logging-facade" version))
               (sha256
                (base32
-                "0d0lwxxgd16is9aw6v3ps4r9prv3dj8xscmm45fvzq3nicjiawcf"))))
+                "0rn12j77gn3p84khrmbn5kq6fyj44i3z1hrdm29apikp7csv65ib"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hspec hspec-discover))
-    (home-page "https://hackage.haskell.org/package/logging-facade")
+    (properties '((upstream-name . "logging-facade")))
+    ;(arguments (list #:tests? #f))
+    (inputs (list ghc-call-stack))
+    (native-inputs (list ghc-hspec hspec-discover))
+    (home-page "https://github.com/sol/logging-facade#readme")
     (synopsis "Simple logging abstraction that allows multiple back-ends")
     (description
      "This package provides a simple logging abstraction that allows multiple
 back-ends.")
     (license license:expat)))
 
+(define-public ghc-logging-facade-bootstrap
+  (package
+    (inherit ghc-logging-facade)
+    (name "ghc-logging-facade-bootstrap")
+    (arguments `(#:tests? #f))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
 (define-public ghc-logict
   (package
     (name "ghc-logict")
-    (version "0.7.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/logict/logict-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1d22b7r8lnak5k8ars166cxbk1lv7gf8g0qs604irsx2s474ybi7"))))
+    (version "0.8.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "logict" version))
+              (sha256
+               (base32
+                "0mpv50ifb3x9vfmgi1p9piwcgz8d19x0wdj789wxyhxwjpr6v4py"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "logict")))
     (inputs (list ghc-fail))
-    (native-inputs
-     (list ghc-async ghc-tasty ghc-tasty-hunit))
-    (home-page "http://code.haskell.org/~dolio/")
+    (native-inputs (list ghc-async ghc-tasty ghc-tasty-hunit))
+    (home-page "https://github.com/Bodigrim/logict#readme")
     (synopsis "Backtracking logic-programming monad")
-    (description "This library provides a continuation-based, backtracking,
+    (description
+     "This library provides a continuation-based, backtracking,
 logic programming monad.  An adaptation of the two-continuation implementation
 found in the paper \"Backtracking, Interleaving, and Terminating Monad
 Transformers\" available @uref{http://okmij.org/ftp/papers/LogicT.pdf,
@@ -7198,30 +6612,24 @@ online}.")
 (define-public ghc-lucid
   (package
     (name "ghc-lucid")
-    (version "2.9.12.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/lucid/lucid-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0nky4pqxd6828kg3js90ks6r3hxs5x48ibfz37pw2dr7y1nygq21"))))
+    (version "2.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lucid" version))
+              (sha256
+               (base32
+                "13krwrvv0w24rnl7pc7qhv18c6030fkxpx7sxkffdm8sr9173xfw"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-blaze-builder ghc-hashable ghc-mmorph
-           ghc-unordered-containers))
-    (native-inputs
-     (list ghc-hunit ghc-hspec ghc-bifunctors))
+    (properties '((upstream-name . "lucid")))
+    (inputs (list ghc-blaze-builder ghc-hashable ghc-mmorph))
+    (native-inputs (list ghc-hunit ghc-hspec ghc-bifunctors))
     (arguments
-     `(#:cabal-revision
-       ("1"
-        "1xllyf26ypk37k807g5v6fl1449mhpvk18dljmqgwj723n0v8rpj")))
+     `(#:cabal-revision ("1"
+                         "0wipmh3xcs00x8lbq5j780rdc2klfj67nzni21qc1pdbhr2whn9d")))
     (home-page "https://github.com/chrisdone/lucid")
     (synopsis "Haskell DSL for rendering HTML")
-    (description "Clear to write, read and edit Haskell DSL for HTML.
+    (description
+     "Clear to write, read and edit Haskell DSL for HTML.
 
 @itemize @bullet
 @item
@@ -7236,23 +6644,17 @@ Same combinator can be used for attributes and elements
 (define-public ghc-lzma
   (package
     (name "ghc-lzma")
-    (version "0.0.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/lzma/"
-                           "lzma-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0i416gqi8j55nd1pqbkxvf3f6hn6fjys6gq98lkkxphva71j30xg"))))
+    (version "0.0.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lzma" version))
+              (sha256
+               (base32
+                "0fy11i7fanrsbh8w7cclwx0i6csn5df6vl38dh2112aqw6n7h382"))))
     (build-system haskell-build-system)
-    (arguments
-     '(#:tests? #f ; requires older versions of QuickCheck and tasty.
-       #:cabal-revision
-       ("6" "1sh2g5wkh0m6646cxnii0k20f0crwdcnprfl9jfg7gxn5875bkip")))
-    (native-inputs
-     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
-           ghc-tasty-quickcheck))
+    (properties '((upstream-name . "lzma")))
+    (native-inputs (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
@@ -7264,26 +6666,23 @@ monadic incremental interface is provided as well.")
 (define-public ghc-lzma-conduit
   (package
     (name "ghc-lzma-conduit")
-    (version "1.2.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/lzma-conduit/"
-                           "lzma-conduit-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1z6q16hzp2r5a4gdbg9akky5l9bfarzzhzswrgvh0v28ax400whb"))))
+    (version "1.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lzma-conduit" version))
+              (sha256
+               (base32
+                "1pmvmchrg429b2yk485x0066lxcr37cbyczlyp3ala2iaq8hm61z"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-conduit ghc-lzma ghc-resourcet))
-    (native-inputs
-     (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")
+    (properties '((upstream-name . "lzma-conduit")))
+    (inputs (list ghc-conduit ghc-lzma ghc-resourcet))
+    (native-inputs (list ghc-base-compat
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2
+                         ghc-hunit
+                         ghc-quickcheck))
+    (home-page "http://github.com/alphaHeavy/lzma-conduit")
     (synopsis "Conduit interface for lzma/xz compression")
     (description
      "This package provides a @code{Conduit} interface for the LZMA
@@ -7297,13 +6696,12 @@ compression algorithm used in the @code{.xz} file format.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/magic/magic-"
-             version ".tar.gz"))
+       (uri (hackage-uri "magic" version))
        (sha256
         (base32
          "10p0gjjjwr1dda7hahwrwn5njbfhl67arq3v3nf1jr3vymlkn75j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "magic")))
     (home-page "https://hackage.haskell.org/package/magic")
     (synopsis "Interface to C file/magic library")
     (description
@@ -7315,19 +6713,19 @@ than its name.")
 (define-public ghc-managed
   (package
     (name "ghc-managed")
-    (version "1.0.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/managed/managed-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "00wzfy9facwgimrilz7bxaigr79w10733h8zfgyhll644p2rnz38"))))
+    (version "1.0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "managed" version))
+              (sha256
+               (base32
+                "0vx8aim8bcyyvxxnmi1xkbl3kwrvskjn99z3y8h458g7nsinsisd"))))
     (build-system haskell-build-system)
-    (home-page "http://hackage.haskell.org/package/managed")
+    (properties '((upstream-name . "managed")))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "017h9533j7rlxlsf65ynxpva59yr0qwrdmvhp7if141i98ld4664")))
+    (home-page "https://hackage.haskell.org/package/managed")
     (synopsis "Monad for managed values")
     (description
      "In Haskell you very often acquire values using the with... idiom using
@@ -7354,13 +6752,12 @@ orphan instances
     (version "0.5.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/markdown-unlit/"
-                    "markdown-unlit-" version ".tar.gz"))
+              (uri (hackage-uri "markdown-unlit" version))
               (sha256
                (base32
                 "0njzn56m8z6lm70xyixbylbnpjz1gk7x8vdsdvi3qld9m66gc3n7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "markdown-unlit")))
     (inputs
      (list ghc-base-compat
            ghc-hspec
@@ -7382,13 +6779,12 @@ same time is a literate Haskell program.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "math-functions-" version "/"
-                           "math-functions-" version ".tar.gz"))
+       (uri (hackage-uri "math-functions" version))
        (sha256
         (base32
          "18y1hlc8p6yyxa14zdbm84aaq58kksbrlfp3rj2bd4ilsb00mrf1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "math-functions")))
     (arguments `(#:tests? #f))  ; FIXME: 1 test fails.
     (inputs
      (list ghc-data-default-class ghc-vector ghc-vector-th-unbox))
@@ -7409,21 +6805,16 @@ functions are often useful in statistical and numerical computing.")
 (define-public ghc-megaparsec
   (package
     (name "ghc-megaparsec")
-    (version "9.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "megaparsec/megaparsec-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "00953zvxfyjibw8c1ssmixxh0cwn59pz24zbh6s34rk3v14vqa3j"))))
+    (version "9.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "megaparsec" version))
+              (sha256
+               (base32
+                "0d52dbcz9nlqkkfqfs9kck5kmvkfzf3628z4ik4gr7hbbkjh72x4"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-case-insensitive ghc-parser-combinators ghc-scientific))
-    (native-inputs
-     (list ghc-quickcheck ghc-hspec ghc-hspec-expectations hspec-discover))
+    (properties '((upstream-name . "megaparsec")))
+    (inputs (list ghc-case-insensitive ghc-parser-combinators ghc-scientific))
     (home-page "https://github.com/mrkkrp/megaparsec")
     (synopsis "Monadic parser combinators")
     (description
@@ -7435,19 +6826,20 @@ speed, flexibility, and quality of parse errors.")
 (define-public ghc-memory
   (package
     (name "ghc-memory")
-    (version "0.15.0")
+    (version "0.17.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "memory/memory-" version ".tar.gz"))
+              (uri (hackage-uri "memory" version))
               (sha256
                (base32
-                "0a9mxcddnqn4359hk59d6l2zbh0vp154yb5vs1a8jw4l38n8kzz3"))))
+                "0yl3ivvn7i9wbx910b7bzj9c3g0jjjk91j05wj74qb5zx2yyf9rk"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-basement ghc-foundation))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
+    (properties '((upstream-name . "memory")))
+    (inputs (list ghc-basement))
+    (native-inputs (list ghc-foundation))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1gybf726kz17jm1am0rphi0srmyqyza45y6jdqbq0b8sspm8kggb")))
     (home-page "https://github.com/vincenthz/hs-memory")
     (synopsis "Memory abstractions for Haskell")
     (description
@@ -7465,14 +6857,12 @@ set, memory copy, ..) and more")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/MemoTrie/MemoTrie-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "MemoTrie" version))
        (sha256
         (base32
          "0lxsarhyhhkp58wpbp7b08scmjxq7s46jfl9vhp2yfq973hz0kaq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "MemoTrie")))
     (inputs
      (list ghc-newtype-generics))
     (home-page "https://github.com/conal/MemoTrie")
@@ -7488,13 +6878,12 @@ efficient memo functions using tries.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "microlens-" version "/"
-                           "microlens-" version ".tar.gz"))
+       (uri (hackage-uri "microlens" version))
        (sha256
         (base32
          "10q7gl9yavcln58sxdxzih7ff0ixxq5hpd87icvxw97yqf1p6hmm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "microlens")))
     (home-page
      "https://github.com/monadfix/microlens")
     (synopsis "Provides a tiny lens Haskell library with no dependencies")
@@ -7509,17 +6898,16 @@ stripped.  As the result, this package has no dependencies.")
 (define-public ghc-microlens-aeson
   (package
     (name "ghc-microlens-aeson")
-    (version "2.3.1")
+    (version "2.5.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "microlens-aeson/microlens-aeson-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "microlens-aeson" version))
        (sha256
         (base32
-         "074mzpk7av6i0xf7xy42jpzgljlmyw805md1vz4sqy85m99f0ikr"))))
+         "0h5q0b2b4y28llhq28mb28kpdv2iifz0qkbbhmrwrz2bs6arr3d2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "microlens-aeson")))
     (inputs
      (list ghc-aeson
            ghc-attoparsec
@@ -7539,22 +6927,20 @@ microlens.")
 (define-public ghc-microlens-ghc
   (package
     (name "ghc-microlens-ghc")
-    (version "0.4.13")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/microlens-ghc/microlens-ghc-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1r6x788br3f9rksj0dmk1nyh5mfvd9zzasclf1mi3rxhb7c0j926"))))
+    (version "0.4.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "microlens-ghc" version))
+              (sha256
+               (base32
+                "1258p84jj4kv6l71ijwjzpvzvqxxsqbvs5vrksi24mlf29gaxqi0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "microlens-ghc")))
     (inputs (list ghc-microlens))
-    (home-page "https://github.com/monadfix/microlens")
+    (home-page "http://github.com/monadfix/microlens")
     (synopsis "Use @code{microlens} with GHC libraries like @code{array}")
-    (description "This library provides everything that @code{microlens}
+    (description
+     "This library provides everything that @code{microlens}
 provides plus instances to make @code{each}, @code{at}, and @code{ix}
 usable with arrays, @code{ByteString}, and containers.  This package is
 a part of the @uref{http://hackage.haskell.org/package/microlens,
@@ -7565,23 +6951,18 @@ microlens} family; see the readme
 (define-public ghc-microlens-mtl
   (package
     (name "ghc-microlens-mtl")
-    (version "0.2.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/microlens-mtl/microlens-mtl-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0ijy7xyd5lbc3calhcrhy8czkf3fjcxrv68p7kd2a5b352rfi7fp"))))
+    (version "0.2.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "microlens-mtl" version))
+              (sha256
+               (base32
+                "1ilz0zyyk9f6h97gjsaqq65njfs23fk3wxhigvj4z0brf7rnlssd"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-microlens ghc-transformers-compat))
-    (home-page "https://github.com/monadfix/microlens")
-    (synopsis
-     "@code{microlens} support for Reader/Writer/State from mtl")
+    (properties '((upstream-name . "microlens-mtl")))
+    (inputs (list ghc-microlens ghc-transformers-compat))
+    (home-page "http://github.com/monadfix/microlens")
+    (synopsis "@code{microlens} support for Reader/Writer/State from mtl")
     (description
      "This package contains functions (like @code{view} or @code{+=}) which
 work on @code{MonadReader}, @code{MonadWriter}, and @code{MonadState} from the
@@ -7593,26 +6974,23 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
 (define-public ghc-microlens-platform
   (package
     (name "ghc-microlens-platform")
-    (version "0.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "microlens-platform/microlens-platform-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0yf0z0glq2d6mpclzswc64h9w2cck4fd8l8ffm89pyb0a5n8m4c7"))))
-    (build-system haskell-build-system)
-    (inputs
-     (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")
+    (version "0.4.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "microlens-platform" version))
+              (sha256
+               (base32
+                "0z8snyzy18kqj32fb89mzgscjrg6w2z0jkkj4b9vl2jvbps0gkg6"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "microlens-platform")))
+    (inputs (list ghc-hashable
+                  ghc-microlens
+                  ghc-microlens-ghc
+                  ghc-microlens-mtl
+                  ghc-microlens-th
+                  ghc-unordered-containers
+                  ghc-vector))
+    (home-page "http://github.com/monadfix/microlens")
     (synopsis "Feature-complete microlens")
     (description
      "This package exports a module which is the recommended starting point
@@ -7636,24 +7014,22 @@ readme @uref{https://github.com/aelve/microlens#readme, on Github}.")
 (define-public ghc-microlens-th
   (package
     (name "ghc-microlens-th")
-    (version "0.4.3.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "microlens-th-" version "/"
-                           "microlens-th-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1dg2xhj85fy8q39m5dd94kjlabjyxgc0336vzkg0174l6l110l1c"))))
+    (version "0.4.3.11")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "microlens-th" version))
+              (sha256
+               (base32
+                "1vjjaclfxr0kvlpmj8zh7f6ci4n4b8vynqd67zszx42al7gal6pj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "microlens-th")))
     (inputs (list ghc-microlens ghc-th-abstraction))
     (native-inputs (list ghc-tagged))
-    (home-page
-     "https://github.com/aelve/microlens")
+    (home-page "http://github.com/monadfix/microlens")
     (synopsis "Automatic generation of record lenses for
 @code{ghc-microlens}")
-    (description "This Haskell package lets you automatically generate lenses
+    (description
+     "This Haskell package lets you automatically generate lenses
 for data types; code was extracted from the lens package, and therefore
 generated lenses are fully compatible with ones generated by lens (and can be
 used both from lens and microlens).")
@@ -7662,36 +7038,26 @@ used both from lens and microlens).")
 (define-public ghc-missingh
   (package
     (name "ghc-missingh")
-    (version "1.4.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/MissingH/"
-                           "MissingH-" version ".tar.gz"))
-       (sha256
-        (base32
-         "196cniya5wzcv2d777nr0f7hinclpals4ia1mkzzv35870pqr6lw"))))
-    (build-system haskell-build-system)
+    (version "1.5.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "MissingH" version))
+              (sha256
+               (base32
+                "0c92fdv32nq51kfdizi3lpxmnvscsgk6marfzaycd7k05aka8byb"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "MissingH")))
+    (inputs (list ghc-hslogger
+                  ghc-old-locale
+                  ghc-old-time
+                  ghc-regex-compat
+                  ghc-network-bsd
+                  ghc-network))
+    (native-inputs (list ghc-hunit))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "MissingH.cabal"
-               (("(random)\\s+[^,]+" all dep)
-                dep)))))))
-    (inputs
-     (list ghc-network
-           ghc-hunit
-           ghc-regex-compat
-           ghc-hslogger
-           ghc-random
-           ghc-old-time
-           ghc-old-locale))
-    (native-inputs
-     (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")
+     `(#:cabal-revision ("2"
+                         "11d922r06p00gcgzhb29hhjkq8ajy1xbqdiwdpbmhp2ar7fw7g9l")))
+    (home-page "http://hackage.haskell.org/package/MissingH")
     (synopsis "Large utility library")
     (description
      "MissingH is a library of all sorts of utility functions for Haskell
@@ -7705,12 +7071,12 @@ portable and easy to use.")
     (version "0.5.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "mmap/mmap-" version ".tar.gz"))
+              (uri (hackage-uri "mmap" version))
               (sha256
                (base32
                 "1y5mk3yf4b8r6rzmlx1xqn4skaigrqnv08sqq0v7r3nbw42bpz2q"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mmap")))
     (home-page "https://hackage.haskell.org/package/mmap")
     (synopsis "Memory mapped files for Haskell")
     (description
@@ -7723,21 +7089,20 @@ do on-demand loading.")
 (define-public ghc-mmorph
   (package
     (name "ghc-mmorph")
-    (version "1.1.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/mmorph/mmorph-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0bq9m3hlfax1826gg5yhih79x33rvfx59wdh8yf43azd7l74bys6"))))
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "mmorph" version))
+              (sha256
+               (base32
+                "1022d8mm523dihkf85mqsqxpm9rnyicmv91c8rm4csv7xdc80cv1"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-transformers-compat))
-    (home-page "https://hackage.haskell.org/package/mmorph")
+    (properties '((upstream-name . "mmorph")))
+    (inputs (list ghc-transformers-compat ghc-fail))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "1582vcpjiyimb1vwnhgq8gp805iziwa8sivv2frir0cgq4z236yz")))
+    (home-page "http://hackage.haskell.org/package/mmorph")
     (synopsis "Monad morphisms")
     (description
      "This library provides monad morphism utilities, most commonly used for
@@ -7750,12 +7115,12 @@ manipulating monad transformer stacks.")
     (version "0.3.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "mockery/mockery-" version ".tar.gz"))
+              (uri (hackage-uri "mockery" version))
               (sha256
                (base32
                 "09ypgm3z69gq8mj6y66ss58kbjnk15r8frwcwbqcfbfksfnfv8dp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mockery")))
     (inputs
      (list ghc-temporary ghc-logging-facade ghc-base-compat))
     (native-inputs
@@ -7766,6 +7131,16 @@ manipulating monad transformer stacks.")
      "The mockery package provides support functions for automated testing.")
     (license license:expat)))
 
+(define-public ghc-mockery-bootstrap
+  (package
+    (inherit ghc-mockery)
+    (name "ghc-mockery-bootstrap")
+    (arguments `(#:tests? #f))
+    (inputs (modify-inputs (package-inputs ghc-mockery)
+              (replace "ghc-logging-facade" ghc-logging-facade-bootstrap)))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
 (define-public ghc-monad-control
   (package
     (name "ghc-monad-control")
@@ -7773,13 +7148,12 @@ manipulating monad transformer stacks.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/monad-control"
-             "/monad-control-" version ".tar.gz"))
+       (uri (hackage-uri "monad-control" version))
        (sha256
         (base32
          "0g3if9km8ik80bcy130a826ig9wlk4bnf0qli3vmwdwr9nhaw2xf"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "monad-control")))
     (inputs
      (list ghc-transformers-base ghc-transformers-compat))
     (home-page "https://github.com/basvandijk/monad-control")
@@ -7793,32 +7167,33 @@ a subset of @code{MonadBase} into which generic control operations such as
 (define-public ghc-monad-logger
   (package
     (name "ghc-monad-logger")
-    (version "0.3.36")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "monad-logger-" version "/"
-                           "monad-logger-" version ".tar.gz"))
-       (sha256
-        (base32
-         "12rw0k01gkhiqjm2fhxgkmribksmizhj14xphfn8fkd86wzl0vbh"))))
+    (version "0.3.37")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "monad-logger" version))
+              (sha256
+               (base32
+                "1z275a428zcj73zz0cpfha2adwiwqqqp7klx3kbd3i9rl20xa106"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-transformers-compat
-                  ghc-stm-chans
-                  ghc-lifted-base
-                  ghc-resourcet
-                  ghc-conduit
+    (properties '((upstream-name . "monad-logger")))
+    (inputs (list ghc-conduit
                   ghc-conduit-extra
                   ghc-fast-logger
-                  ghc-transformers-base
+                  ghc-lifted-base
                   ghc-monad-control
                   ghc-monad-loops
-                  ghc-blaze-builder
-                  ghc-exceptions))
-    (home-page "https://github.com/kazu-yamamoto/logger")
+                  ghc-resourcet
+                  ghc-stm-chans
+                  ghc-transformers-base
+                  ghc-transformers-compat
+                  ghc-unliftio-core))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "1dzkw08b4ijacdw0vcfxlr13rd819x2yj7b6sr9jrrwicd45zm1z")))
+    (home-page "https://github.com/snoyberg/monad-logger#readme")
     (synopsis "Provides a class of monads which can log messages for Haskell")
-    (description "This Haskell package uses a monad transformer approach
+    (description
+     "This Haskell package uses a monad transformer approach
 for logging.
 
 This package provides Template Haskell functions for determining source
@@ -7832,13 +7207,12 @@ code locations of messages.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "monad-loops-" version "/"
-                           "monad-loops-" version ".tar.gz"))
+       (uri (hackage-uri "monad-loops" version))
        (sha256
         (base32
          "062c2sn3hc8h50p1mhqkpyv6x8dydz2zh3ridvlfjq9nqimszaky"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "monad-loops")))
     (native-inputs (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/mokus0/monad-loops")
     (synopsis "Monadic loops for Haskell")
@@ -7853,13 +7227,12 @@ operators for looping.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "monad-par-" version "/"
-                           "monad-par-" version ".tar.gz"))
+       (uri (hackage-uri "monad-par" version))
        (sha256
         (base32
          "1a8m99g9x1ivch4vhksk7fdzygbil3d33w8gdqngxbmwdikdafl2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "monad-par")))
     (arguments
      `(#:tests? #f ; TODO: ghc-test-framework-th does not build.
        #:cabal-revision
@@ -7889,13 +7262,12 @@ that are much lighter weight than IO-threads.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "monad-par-extras-" version "/"
-                           "monad-par-extras-" version ".tar.gz"))
+       (uri (hackage-uri "monad-par-extras" version))
        (sha256
         (base32
          "0bl4bd6jzdc5zm20q1g67ppkfh6j6yn8fwj6msjayj621cck67p2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "monad-par-extras")))
     (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")
@@ -7910,15 +7282,17 @@ and other added capabilities layered on top of the @code{Par} monad.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "MonadRandom-" version "/"
-                           "MonadRandom-" version ".tar.gz"))
+       (uri (hackage-uri "MonadRandom" version))
        (sha256
         (base32
          "17qaw1gg42p9v6f87dj5vih7l88lddbyd8880ananj8avanls617"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "MonadRandom")))
     (inputs (list ghc-transformers-compat ghc-primitive ghc-fail
                   ghc-random))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1diy29if7w1c9ckc465mrrb52fm0zmd8zzym1h5ryh5a58qafwhr")))
     (home-page "https://github.com/byorgey/MonadRandom")
     (synopsis "Random-number generation monad for Haskell")
     (description "This Haskell package provides support for computations
@@ -7932,13 +7306,12 @@ which consume random values.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/monads-tf/monads-tf-"
-             version ".tar.gz"))
+       (uri (hackage-uri "monads-tf" version))
        (sha256
         (base32
          "1wdhskwa6dw8qljbvwpyxj8ca6y95q2np7z4y4q6bpf4anmd5794"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "monads-tf")))
     (home-page "https://hackage.haskell.org/package/monads-tf")
     (synopsis "Monad classes, using type families")
     (description
@@ -7955,14 +7328,13 @@ the @code{mtl-tf} package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "mono-traversable-" version "/"
-                           "mono-traversable-" version ".tar.gz"))
+       (uri (hackage-uri "mono-traversable" version))
        (sha256
         (base32
          "1dvlp7r7r1lc3fxkwaz68f1nffg83240q8a989x24x1x67rj1clq"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "mono-traversable")))
+    (outputs '("out" "doc"))
     (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))
@@ -7979,21 +7351,20 @@ data structures as non-empty.")
 (define-public ghc-monoid-extras
   (package
     (name "ghc-monoid-extras")
-    (version "0.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "monoid-extras/monoid-extras-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0ki1d3b1xpf653qj7brlqdgngghwrnmapy5gja75iiydfx2506a1"))))
+    (version "0.6.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "monoid-extras" version))
+              (sha256
+               (base32
+                "1qaxp0cf2cvzvfpk7x9mjz1zmlpjfzxij8v2n45w89s7bq9ckvlw"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-groups ghc-semigroupoids))
-    (home-page "https://hackage.haskell.org/package/monoid-extras")
+    (properties '((upstream-name . "monoid-extras")))
+    (inputs (list ghc-groups ghc-semigroupoids))
+    (home-page "http://hackage.haskell.org/package/monoid-extras")
     (synopsis "Various extra monoid-related definitions and utilities")
-    (description "This package provides various extra monoid-related
+    (description
+     "This package provides various extra monoid-related
 definitions and utilities, such as monoid actions, monoid coproducts,
 semi-direct products, \"deletable\" monoids, \"split\" monoids, and
 \"cut\" monoids.")
@@ -8006,16 +7377,14 @@ semi-direct products, \"deletable\" monoids, \"split\" monoids, and
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/mountpoints/mountpoints-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "mountpoints" version))
        (sha256
         (base32
          "1hnm31pqcffphyc463wf0vbik9fzm5lb2r4wjdc1y4dqzmjdzz37"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mountpoints")))
     (home-page
-     "http://hackage.haskell.org/package/mountpoints")
+     "https://hackage.haskell.org/package/mountpoints")
     (synopsis "Haskell library for listing mount points")
     (description "This library provides Haskell bindings for checking
 currently mounted filesystems.")
@@ -8028,14 +7397,12 @@ currently mounted filesystems.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/mtl-compat/mtl-compat-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "mtl-compat" version))
        (sha256
         (base32
          "17iszr5yb4f17g8mq6i74hsamii8z6m2qfsmgzs78mhiwa7kjm8r"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mtl-compat")))
     (home-page
      "https://github.com/haskell-compat/mtl-compat")
     (synopsis
@@ -8059,16 +7426,16 @@ the top of your file to get all of the ExceptT instances in scope.")
 (define-public ghc-murmur-hash
   (package
     (name "ghc-murmur-hash")
-    (version "0.1.0.9")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/murmur-hash"
-                           "/murmur-hash-" version ".tar.gz"))
-       (sha256
-        (base32 "1bb58kfnzvx3mpc0rc0dhqc1fk36nm8prd6gvf20gk6lxaadpfc9"))))
+    (version "0.1.0.10")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "murmur-hash" version))
+              (sha256
+               (base32
+                "145z91zkx8jdd3y181pi8z9imqjgpk99cl55pbda4fl201hasbz9"))))
     (build-system haskell-build-system)
-    (home-page "https://github.com/nominolo/murmur-hash")
+    (properties '((upstream-name . "murmur-hash")))
+    (home-page "http://github.com/nominolo/murmur-hash")
     (synopsis "MurmurHash2 implementation for Haskell")
     (description
      "This package provides an implementation of MurmurHash2, a good, fast,
@@ -8085,13 +7452,12 @@ binding.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "mwc-random-" version "/"
-                           "mwc-random-" version ".tar.gz"))
+       (uri (hackage-uri "mwc-random" version))
        (sha256
         (base32
          "0ny2mw4am24d6ykrm8rbcjnrq6p2cjmzjb4m6qfk54wfdxflvmim"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mwc-random")))
     (inputs
      (list ghc-primitive ghc-vector ghc-math-functions))
     (arguments
@@ -8119,14 +7485,12 @@ between 2 and 3 times faster than the Mersenne Twister.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/nats/nats-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "nats" version))
        (sha256
         (base32
          "1v40drmhixck3pz3mdfghamh73l4rp71mzcviipv1y8jhrfxilmr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "nats")))
     (arguments `(#:haddock? #f))
     (inputs
      (list ghc-hashable))
@@ -8150,13 +7514,12 @@ between 2 and 3 times faster than the Mersenne Twister.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/ncurses/ncurses-"
-               version ".tar.gz"))
+        (uri (hackage-uri "ncurses" version))
         (sha256
          (base32
           "0gsyyaqyh5r9zc0rhwpj5spyd6i4w2vj61h4nihgmmh0yyqvf3z5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ncurses")))
     (arguments
      '(#:extra-directories ("ncurses")
        #:phases
@@ -8184,28 +7547,20 @@ ncurses.")
 (define-public ghc-network
   (package
     (name "ghc-network")
-    (version "3.1.1.1")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/network/network-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "16ic2hgvadyiy0zfnyd2zknf8rxqmwzpy5mw5x9apwpzfc0mkvyp"))))
+    (version "3.1.2.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "network" version))
+              (sha256
+               (base32
+                "119xqsyj44ix0z79mzfpww0cd9936bki1xa7cwykvbx1y7z20xkz"))))
     (build-system haskell-build-system)
-    ;; The regression tests depend on an unpublished module.
-    (arguments `(#:tests? #f))
-    (native-inputs
-     (list ghc-hunit ghc-doctest ghc-test-framework
-           ghc-test-framework-hunit))
+    (properties '((upstream-name . "network")))
+    (native-inputs (list ghc-hunit ghc-temporary ghc-hspec ghc-quickcheck
+                         ghc-doctest hspec-discover))
     (home-page "https://github.com/haskell/network")
     (synopsis "Low-level networking interface")
-    (description
-     "This package provides a low-level networking interface.")
+    (description "This package provides a low-level networking interface.")
     (license license:bsd-3)))
 
 (define-public ghc-network-bsd
@@ -8215,12 +7570,12 @@ ncurses.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "network-bsd/network-bsd-" version ".tar.gz"))
+       (uri (hackage-uri "network-bsd" version))
        (sha256
         (base32
          "0kid0811lv4x761fd5gv6lsc8p5j2bn41rfd366pjb642p562jfr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "network-bsd")))
     (arguments
      `(#:cabal-revision
        ("4" "1gd9a8j7fwg0jz0s6il5fk9sl0hm19ja1w56ix51wa0qi2h5x56d")))
@@ -8239,13 +7594,12 @@ network database (<netdb.h>) API.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "network-byte-order/network-byte-order-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "network-byte-order" version))
        (sha256
         (base32
          "0pnwcg13k4qw82n0zc1xibyc24sc77y79j5a62pqdmjrnz4wrc7j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "network-byte-order")))
     (native-inputs
      (list ghc-doctest))
     (home-page "https://hackage.haskell.org/package/network-byte-order")
@@ -8257,20 +7611,19 @@ byte order.")
 (define-public ghc-network-info
   (package
     (name "ghc-network-info")
-    (version "0.2.0.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "network-info-" version "/"
-                           "network-info-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0anmgzcpnz7nw3n6vq0r25m1s9l2svpwi83wza0lzkrlbnbzd02n"))))
+    (version "0.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "network-info" version))
+              (sha256
+               (base32
+                "015lm3b8n8sb16qsffjxz1jvijyy0z600ch0sm8h6a685wqqhbcv"))))
     (build-system haskell-build-system)
-    (home-page "https://github.com/jystic/network-info")
+    (properties '((upstream-name . "network-info")))
+    (home-page "http://github.com/jacobstanley/network-info")
     (synopsis "Access the local computer's basic network configuration")
-    (description "This Haskell library provides simple read-only access to the
+    (description
+     "This Haskell library provides simple read-only access to the
 local computer's networking configuration.  It is currently capable of
 getting a list of all the network interfaces and their respective
 IPv4, IPv6 and MAC addresses.")
@@ -8283,18 +7636,16 @@ IPv4, IPv6 and MAC addresses.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/network-multicast/network-multicast-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "network-multicast" version))
        (sha256
         (base32
          "0whvi0pbwjy6dbwfdf9rv1j3yr3lcmfp3q7a8pwq63g537l4l2l3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "network-multicast")))
     (inputs
      (list ghc-network ghc-network-bsd))
     (home-page
-     "http://hackage.haskell.org/package/network-multicast")
+     "https://hackage.haskell.org/package/network-multicast")
     (synopsis "Simple multicast library for Haskell")
     (description
      "This package provides the Network.Multicast Haskell module for
@@ -8308,28 +7659,22 @@ sending UDP datagrams over multicast (class D) addresses.")
 (define-public ghc-network-uri
   (package
     (name "ghc-network-uri")
-    (version "2.6.4.1")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/network-uri/network-uri-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "111m485rx2kyqdymi1x6sl08hi6lp34q3f41yqcx99086swnv1ap"))))
+    (version "2.6.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "network-uri" version))
+              (sha256
+               (base32
+                "0a3jg6aykwm1yw32nh137hi6r86w2640xwl1p18352bf29rqj64w"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-th-compat))
-    (native-inputs
-     (list ghc-hunit ghc-quickcheck ghc-tasty ghc-tasty-hunit
-           ghc-tasty-quickcheck))
-    (home-page
-     "https://github.com/haskell/network-uri")
+    (properties '((upstream-name . "network-uri")))
+    (inputs (list ghc-th-compat))
+    (native-inputs (list ghc-hunit ghc-tasty ghc-tasty-hunit
+                         ghc-tasty-quickcheck ghc-quickcheck))
+    (home-page "https://github.com/haskell/network-uri")
     (synopsis "Library for URI manipulation")
-    (description "This package provides an URI manipulation interface.  In
+    (description
+     "This package provides an URI manipulation interface.  In
 @code{network-2.6} the @code{Network.URI} module was split off from the
 @code{network} package into this package.")
     (license license:bsd-3)))
@@ -8337,22 +7682,23 @@ sending UDP datagrams over multicast (class D) addresses.")
 (define-public ghc-newtype-generics
   (package
     (name "ghc-newtype-generics")
-    (version "0.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "newtype-generics/newtype-generics-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "04bymwhkvlsgcsd0v630mndrzf0xnh3v81ba6nfzwcvbg3ksr2wa"))))
+    (version "0.6.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "newtype-generics" version))
+              (sha256
+               (base32
+                "0km7cp041bgdgrxrbrawz611mcylxp943880a2yg228a09961b51"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hspec hspec-discover))
-    (home-page "https://github.com/sjakobi/newtype-generics")
+    (properties '((upstream-name . "newtype-generics")))
+    (native-inputs (list ghc-hspec hspec-discover))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0xgc7sxs1p3qibgwbikjdrhn47j7m4gk5x1wrv9hncks6hd6hsyf")))
+    (home-page "http://github.com/sjakobi/newtype-generics")
     (synopsis "Typeclass and set of functions for working with newtypes")
-    (description "The @code{Newtype} typeclass represents the packing and
+    (description
+     "The @code{Newtype} typeclass represents the packing and
 unpacking of a newtype, and allows you to operate under that newtype with
 functions such as @code{ala}.  Generics support was added in version 0.4,
 making this package a full replacement for the original newtype package,
@@ -8367,13 +7713,12 @@ and an alternative to newtype-th.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/non-negative/non-negative-"
-         version ".tar.gz"))
+        (hackage-uri "non-negative" version))
        (sha256
         (base32
          "0f01q916dzkl1i0v15qrw9cviycki5g3fgi6x8gs45iwbzssq52n"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "non-negative")))
     (inputs
      (list ghc-semigroups ghc-utility-ht ghc-quickcheck))
     (home-page "https://hackage.haskell.org/package/non-negative")
@@ -8391,13 +7736,12 @@ of Peano numbers).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/nonce/"
-             "nonce-" version ".tar.gz"))
+       (uri (hackage-uri "nonce" version))
        (sha256
         (base32
          "1q9ph0aq51mvdvydnriqd12sfin36pfb8f588zgac1ybn8r64ksb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "nonce")))
     (arguments
      `(#:cabal-revision
        ("2" "09xvg4lpmb1hw153afhbjrdg9v3npfwpdfhpv5y8b0qvb4zi3n9q")))
@@ -8422,13 +7766,12 @@ package are usable on your design.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "numeric-extras/numeric-extras-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "numeric-extras" version))
        (sha256
         (base32
          "1mk11c0gz1yjy5b8dvq6czfny57pln0bs7x28fz38qyr44872067"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "numeric-extras")))
     (home-page "https://github.com/ekmett/numeric-extras")
     (synopsis "Useful tools from the C standard library")
     (description "This library provides some useful tools from the C
@@ -8438,21 +7781,19 @@ standard library.")
 (define-public ghc-objectname
   (package
     (name "ghc-objectname")
-    (version "1.1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ObjectName/ObjectName-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "046jm94rmm46cicd31pl54vdvfjvhd9ffbfycy2lxzc0fliyznvj"))))
+    (version "1.1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ObjectName" version))
+              (sha256
+               (base32
+                "0xdkfc97salzj5s3fvmwk4k0097dcd8c4xcr5ghhv9mz0wcxm9gz"))))
     (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/ObjectName")
+    (properties '((upstream-name . "ObjectName")))
+    (home-page "https://github.com/svenpanne/ObjectName")
     (synopsis "Helper library for Haskell OpenGL")
-    (description "This tiny package contains the class ObjectName, which
+    (description
+     "This tiny package contains the class ObjectName, which
 corresponds to the general notion of explicitly handled identifiers for API
 objects, e.g. a texture object name in OpenGL or a buffer object name in
 OpenAL.")
@@ -8465,13 +7806,11 @@ OpenAL.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/old-locale/old-locale-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "old-locale" version))
        (sha256
         (base32 "0l3viphiszvz5wqzg7a45zp40grwlab941q5ay29iyw8p3v8pbyv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "old-locale")))
     (arguments
      `(#:cabal-revision
        ("2" "04b9vn007hlvsrx4ksd3r8r3kbyaj2kvwxchdrmd4370qzi8p6gs")))
@@ -8489,14 +7828,12 @@ date and time formats.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/old-time/old-time-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "old-time" version))
        (sha256
         (base32
          "1h9b26s3kfh2k0ih4383w90ibji6n0iwamxp6rfp2lbq1y5ibjqw"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "old-time")))
     (arguments
      `(#:cabal-revision
        ("2" "1j6ln1dkvhdvnwl33bp0xf9lhc4sybqk0aw42p8cq81xwwzbn7y9")))
@@ -8516,14 +7853,12 @@ old @code{time} library.  For new projects, the newer
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/Only/Only-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "Only" version))
        (sha256
         (base32
          "0rdj3a629fk2vp121jq8mf2smkblrz5w3cxhlsyx6my2x29s2ymb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Only")))
     (arguments
      `(#:cabal-revision
        ("1"
@@ -8548,17 +7883,15 @@ traditionally so named type-wrapper for attaching typeclass instances.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/OpenGL/OpenGL-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "OpenGL" version))
        (sha256
         (base32
          "069fg8jcxqq2z9iikynd8vi3jxm2b5y3qywdh4bdviyzab3zy1as"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "OpenGL")))
     (arguments
-     `(#:cabal-revision
-       ("1" "1748mrb6r9mpf5jbrx436lwbg8w6dadyy8dhxw2dwnrj5z7zf741")))
+     `(#:cabal-revision ("2"
+                         "1nhlswxgxn8l1ysjq3fp3w5pvx6651d33036i8dlbqygzrn6iwmh")))
     (inputs
      (list ghc-objectname ghc-gluraw ghc-statevar ghc-openglraw))
     (home-page "https://wiki.haskell.org/Opengl")
@@ -8571,25 +7904,24 @@ version 1.3).")
 (define-public ghc-openglraw
   (package
     (name "ghc-openglraw")
-    (version "3.3.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/OpenGLRaw/OpenGLRaw-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0gmsmysqzpm13qnyq4vvqxm4dzw25nayfd9wi5x645pympm6jqbm"))))
+    (version "3.3.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "OpenGLRaw" version))
+              (sha256
+               (base32
+                "07nk0rgm6jcxz6yshwhv5lj5frs6371w3hdjxwa4biws2kmbs6hj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "OpenGLRaw")))
+    (inputs (list ghc-fixed ghc-half glu))
     (arguments
-     `(#:extra-directories ("glu")))
-    (inputs
-     (list ghc-half ghc-fixed glu))
-    (home-page "https://wiki.haskell.org/Opengl")
+     `(#:extra-directories ("glu")
+       #:cabal-revision ("1"
+                         "15abvqkxc08lx9d44323izccfp7bqfiljnd587zn80vdvmkzs6zc")))
+    (home-page "http://www.haskell.org/haskellwiki/Opengl")
     (synopsis "Raw Haskell bindings for the OpenGL graphics system")
-    (description "OpenGLRaw is a raw Haskell binding for the OpenGL 4.5
+    (description
+     "OpenGLRaw is a raw Haskell binding for the OpenGL 4.5
 graphics system and lots of OpenGL extensions.  It is basically a 1:1 mapping
 of OpenGL's C API, intended as a basis for a nicer interface.  OpenGLRaw
 offers access to all necessary functions, tokens and types plus a general
@@ -8603,20 +7935,19 @@ found at runtime, a userError is thrown.")
 (define-public ghc-operational
   (package
     (name "ghc-operational")
-    (version "0.2.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/operational/"
-                           "operational-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1hwmwbsxzwv68b39rv4gn3da6irv8zm89gqrkc3rdsgwi5ziyn3i"))))
+    (version "0.2.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "operational" version))
+              (sha256
+               (base32
+                "0aa1pxymvkhbs0x03ikfiap2skzyf2z7307kz5adkmb3qmykcqa2"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-random))
+    (properties '((upstream-name . "operational")))
+    (inputs (list ghc-random))
     (home-page "http://wiki.haskell.org/Operational")
-    (synopsis "Implementation of difficult monads made easy with operational semantics")
+    (synopsis
+     "Implementation of difficult monads made easy with operational semantics")
     (description
      "This library makes it easy to implement monads with tricky control
 flow. This is useful for: writing web applications in a sequential style,
@@ -8632,16 +7963,14 @@ DSLs, etc.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/optional-args/optional-args-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "optional-args" version))
        (sha256
         (base32
          "1r5hhn6xvc01grggxdyy48daibwzi0aikgidq0ahpa6bfynm8d1f"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "optional-args")))
     (home-page
-     "http://hackage.haskell.org/package/optional-args")
+     "https://hackage.haskell.org/package/optional-args")
     (synopsis "Optional function arguments")
     (description
      "This library provides a type for specifying @code{Optional} function
@@ -8655,13 +7984,12 @@ arguments.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/options/options-"
-             version ".tar.gz"))
+       (uri (hackage-uri "options" version))
        (sha256
         (base32
          "0qjs0v1ny52w51n5582d4z8wy9h6n0zw1xb5dh686ff5wadflgi8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "options")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -8709,51 +8037,23 @@ easily work with command-line options.")
 (define-public ghc-optparse-applicative
   (package
     (name "ghc-optparse-applicative")
-    (version "0.16.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/optparse-applicative"
-             "/optparse-applicative-" version ".tar.gz"))
-       (sha256
-        (base32
-         "16nnrkmgd28h540f17nb017ziq4gbzgkxpdraqicaczkca1jf1b2"))))
+    (version "0.17.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "optparse-applicative" version))
+              (sha256
+               (base32
+                "097p1bkvw9r3rvcr65w53yw14drb0s46ldkkl1jbmq5g7m6jwnw2"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "0401ik87gm9gjpch6lmkczygp59na3f1j7bcs6mc2r929c2xgsqn")))
-    (inputs
-     (list ghc-transformers-compat ghc-ansi-wl-pprint))
-    (native-inputs
-     (list ghc-quickcheck))
+    (properties '((upstream-name . "optparse-applicative")))
+    (inputs (list ghc-transformers-compat ghc-ansi-wl-pprint))
+    (native-inputs (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
 command line options in Haskell.")
     (license license:bsd-3)))
 
-(define-public ghc-optparse-applicative-0.15.1.0
-  (package
-    (inherit ghc-optparse-applicative)
-    (name "ghc-optparse-applicative")
-    (version "0.15.1.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/optparse-applicative/optparse-applicative-"
-               version
-               ".tar.gz"))
-        (sha256
-          (base32 "1ws6y3b3f6hsgv0ff0yp6lw4hba1rps4dnvry3yllng0s5gngcsd"))))
-    (inputs
-      (list ghc-transformers-compat ghc-ansi-wl-pprint))
-    (native-inputs (list ghc-quickcheck))
-    (arguments
-      `(#:cabal-revision
-        ("1" "0zmhqkd96v2z1ilhqdkd9z4jgsnsxb8yi2479ind8m5zm9363zr9")))))
-
 (define-public ghc-jira-wiki-markup
   (package
     (name "ghc-jira-wiki-markup")
@@ -8761,12 +8061,11 @@ command line options in Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/jira-wiki-markup/"
-             "jira-wiki-markup-" version ".tar.gz"))
+       (uri (hackage-uri "jira-wiki-markup" version))
        (sha256
         (base32 "0p6axj6km4440ss5naw68r3r85si4qxqgrklp6ssfyapawy0s88w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "jira-wiki-markup")))
     (native-inputs
      (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/tarleb/jira-wiki-markup")
@@ -8783,12 +8082,11 @@ to other formats.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/emojis/"
-             "emojis-" version ".tar.gz"))
+       (uri (hackage-uri "emojis" version))
        (sha256
         (base32 "09x2xrppwypi369y7rzf3ln2g7c3g9qfckn2gydxpfzglcp9rziw"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "emojis")))
     (native-inputs
      (list ghc-hunit))
     (home-page "https://github.com/jgm/emojis#readme")
@@ -8812,21 +8110,18 @@ require aeson
 (define-public ghc-text-conversions
   (package
     (name "ghc-text-conversions")
-    (version "0.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/text-conversions/"
-             "text-conversions-" version ".tar.gz"))
-       (sha256
-        (base32 "0kbxin1q8xj9sgdl185gncrdjwcfzndp8sl5qll8y93l60yq8dxi"))))
+    (version "0.3.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "text-conversions" version))
+              (sha256
+               (base32
+                "0pbjlzsjd3m8np5p6iq7zb0bx6n40d8jha76r8s07s4wg2x0yxy8"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-base16-bytestring ghc-base64-bytestring ghc-errors))
-    (native-inputs
-     (list ghc-hspec hspec-discover))
-    (home-page "https://github.com/cjdev/text-conversions#readme")
+    (properties '((upstream-name . "text-conversions")))
+    (inputs (list ghc-base16-bytestring ghc-base64-bytestring))
+    (native-inputs (list ghc-hspec hspec-discover))
+    (home-page "https://github.com/cjdev/text-conversions")
     (synopsis "Safe conversions between textual types")
     (description "Safe conversions between textual types")
     (license license:isc)))
@@ -8834,29 +8129,24 @@ require aeson
 (define-public ghc-text-short
   (package
     (name "ghc-text-short")
-    (version "0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/text-short/text-short-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0xyrxlb602z8bc9sr2y1fag0x56a20yj5qrkvy7iwc6hnznrynxz"))))
+    (version "0.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "text-short" version))
+              (sha256
+               (base32
+                "1nid00c1rg5c1z7l9mwk3f2izc2sps2mip2hl30q985dwb6wcpm3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "text-short")))
     (inputs (list ghc-hashable))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
-           ghc-quickcheck-instances))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck))
     (arguments
-     `(#:tests? #f ; TODO: Needs tasty<1.3
-       #:cabal-revision
-       ("3" "1wjy98ihhipzr34b310sgjjq3cc12aydhckbrgr21kxkzwglm4nv")))
-    (home-page "https://hackage.haskell.org/package/text-short")
+     `(#:cabal-revision ("1"
+                         "0gmmwwchy9312kz8kr5jhiamqrnjqxdqg1wkrww4289yfj1p7dzb")))
+    (home-page "http://hackage.haskell.org/package/text-short")
     (synopsis "Memory-efficient representation of Unicode text strings")
-    (description "This package provides the @code{ShortText} type which
+    (description
+     "This package provides the @code{ShortText} type which
 is suitable for keeping many short strings in memory.  This is similar
 to how @code{ShortByteString} relates to @code{ByteString}.
 
@@ -8870,19 +8160,17 @@ plus the length of the UTF-8 encoded payload.")
 (define-public ghc-text-zipper
   (package
     (name "ghc-text-zipper")
-    (version "0.11")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/text-zipper/"
-                           "text-zipper-" version ".tar.gz"))
-       (sha256
-        (base32 "07l1pyx93gv95cn1wh1di129axhm9sqsn4znykliacv60ld854ys"))))
+    (version "0.12")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "text-zipper" version))
+              (sha256
+               (base32
+                "00k7d6qfznhp6l2ihw3pppkn580pwd7ac7wx9vidil4y9hjagaw6"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hspec ghc-quickcheck hspec-discover))
-    (inputs
-     (list ghc-vector))
+    (properties '((upstream-name . "text-zipper")))
+    (inputs (list ghc-vector))
+    (native-inputs (list ghc-hspec ghc-quickcheck hspec-discover))
     (home-page "https://github.com/jtdaugherty/text-zipper/")
     (synopsis "Text editor zipper library")
     (description
@@ -8898,21 +8186,21 @@ Implementations using both of these examples are provided.")
 (define-public ghc-doclayout
   (package
     (name "ghc-doclayout")
-    (version "0.3.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/doclayout/"
-             "doclayout-" version ".tar.gz"))
-       (sha256
-        (base32 "1p9kgjlf7y4p1symvkwndgs4lvyw2c45bsgld09y9r4aiqbhdrxp"))))
+    (version "0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "doclayout" version))
+              (sha256
+               (base32
+                "18xkzywfw0hl3hgbq9z36hs040vb0iz9yygx33cybxfi4i0dwbkx"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-safe ghc-emojis))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-golden ghc-tasty-hunit
-           ghc-tasty-quickcheck))
+    (properties '((upstream-name . "doclayout")))
+    (inputs (list ghc-emojis ghc-safe))
+    (native-inputs (list ghc-tasty ghc-tasty-golden ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0djwb7nrdablc0iy1qakrxpd4m7nn0w94vhb78il3jhjbj2ji179")))
     (home-page "https://github.com/jgm/doclayout")
     (synopsis "Pretty-printing library for laying out text documents")
     (description
@@ -8924,90 +8212,90 @@ code.  It was designed for use in @code{Pandoc}.")
 (define-public ghc-pandoc
   (package
     (name "ghc-pandoc")
-    (version "2.14.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/pandoc/pandoc-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1pgd6125mrvzj2faxbsfmackb7kchzcr6bjkrwqbyn9hzxdzbqw2"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'find-library
-           (lambda _
-             (substitute* "test/Tests/Command.hs"
-               (("= dynlibEnv")
-                (format #f "= [(\"LD_LIBRARY_PATH\" , \"~a/dist/build\")]"
-                        (getcwd))))
-             #t)))))
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (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))
+    (version "2.19.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "pandoc" version))
+              (sha256
+               (base32
+                "0ia2gpl345lwymk38y89sgcqjci7sjmxbi228idg6nkaqfa3ds1n"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Fix test case.
+                  (substitute* "test/writer.ms"
+                    (("\\\\\\[u2212\\]") "-"))))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "pandoc")))
+    (inputs (list ghc-glob
+                  ghc-juicypixels
+                  ghc-sha
+                  ghc-aeson
+                  ghc-aeson-pretty
+                  ghc-attoparsec
+                  ghc-blaze-html
+                  ghc-blaze-markup
+                  ghc-case-insensitive
+                  ghc-citeproc
+                  ghc-commonmark
+                  ghc-commonmark-extensions
+                  ghc-commonmark-pandoc
+                  ghc-connection
+                  ghc-data-default
+                  ghc-doclayout
+                  ghc-doctemplates
+                  ghc-base64
+                  ghc-emojis
+                  ghc-file-embed
+                  ghc-gridtables
+                  ghc-haddock-library
+                  ghc-hslua-module-doclayout
+                  ghc-hslua-module-path
+                  ghc-hslua-module-system
+                  ghc-hslua-module-text
+                  ghc-hslua-module-version
+                  ghc-http-client
+                  ghc-http-client-tls
+                  ghc-http-types
+                  ghc-ipynb
+                  ghc-jira-wiki-markup
+                  ghc-lpeg
+                  ghc-network
+                  ghc-network-uri
+                  ghc-pandoc-lua-marshal
+                  ghc-pandoc-types
+                  ghc-pretty-show
+                  ghc-random
+                  ghc-safe
+                  ghc-scientific
+                  ghc-skylighting
+                  ghc-skylighting-core
+                  ghc-split
+                  ghc-syb
+                  ghc-tagsoup
+                  ghc-temporary
+                  ghc-texmath
+                  ghc-text-conversions
+                  ghc-unicode-collation
+                  ghc-unicode-transforms
+                  ghc-xml
+                  ghc-xml-conduit
+                  ghc-xml-types
+                  ghc-yaml
+                  ghc-zip-archive
+                  ghc-zlib
+                  ghc-servant-server
+                  ghc-wai
+                  ghc-hslua
+                  ghc-hslua-aeson
+                  ghc-wai-extra
+                  ghc-warp))
+    (native-inputs (list ghc-diff
+                         ghc-tasty
+                         ghc-tasty-golden
+                         ghc-tasty-hunit
+                         ghc-tasty-lua
+                         ghc-tasty-quickcheck))
     (home-page "https://pandoc.org")
     (synopsis "Conversion between markup formats")
     (description
@@ -9026,163 +8314,32 @@ provided for those who need a drop-in replacement for Markdown.pl.")
     (inherit ghc-pandoc)
     (name "pandoc")
     (arguments
-     `(#:configure-flags
-       (list "-fstatic"
-             ;; Do not build trypandoc; this is the default but it's better to
-             ;; be explicit.
-             "-f-trypandoc"
-             ;; TODO: Without these we cannot link the Haskell libraries
-             ;; statically.  It would be nice if we could also build the
-             ;; shared libraries.
-             "--disable-shared"
-             "--disable-executable-dynamic"
-             ;; That's where we place all static libraries
-             "--extra-lib-dirs=static-libs/"
-             "--ghc-option=-static")
-       #:modules ((guix build haskell-build-system)
-                  (guix build utils)
-                  (ice-9 match)
-                  (srfi srfi-1))
+     (list
        #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'create-simple-paths-module
-           (lambda* (#:key outputs #:allow-other-keys)
-             (call-with-output-file "Paths_pandoc.hs"
-               (lambda (port)
-                 (format port "\
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE NoRebindableSyntax #-}
-{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
-module Paths_pandoc (version,getDataDir,getDataFileName) where
-import Prelude
-import Data.Version (Version(..))
-import System.Info
-version :: Version
-version = Version [~a] []
-
-datadir :: FilePath
-datadir = \"~a/share/\" ++
-  arch ++ \"-\" ++
-  os ++ \"-\" ++
-  compilerName ++ \"-~a/pandoc-~a\"
-
-getDataDir :: IO FilePath
-getDataDir = return datadir
-
-getDataFileName :: FilePath -> IO FilePath
-getDataFileName name = do
-  dir <- getDataDir
-  return (dir ++ \"/\" ++ name)
-"
-                         (string-map (lambda (chr) (if (eq? chr #\.) #\, chr))
-                                     ,(package-version ghc-pandoc))
-                         (assoc-ref outputs "out")
-                         ,(package-version ghc)
-                         ,(package-version ghc-pandoc))))
-             #t))
-         (add-after 'unpack 'prepare-static-libraries
-           (lambda* (#:key inputs #:allow-other-keys)
-             (mkdir-p (string-append (getcwd) "/static-libs"))
-             (for-each
-              (lambda (input)
-                (when (or (string-prefix? "static-" (car input))
-                          (string-prefix? "ghc" (car input)))
-                  (match (find-files (cdr input) "\\.a$")
-                    ((and (first . rest) libs)
-                     (for-each (lambda (lib)
-                                 (let ((target (string-append (getcwd) "/static-libs/"
-                                                              (basename lib))))
-                                   (unless (file-exists? target)
-                                     (symlink first target))))
-                               libs))
-                    (_ #f))))
-              inputs)
-             #t))
-         (delete 'check)
-         ;; Remove libraries. If you need them, install ghc-pandoc instead.
-         (add-after 'register 'delete-libraries
-           (lambda* (#:key outputs #:allow-other-keys)
-             (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib"))))
-         (add-after 'install 'post-install-check
-           (assoc-ref %standard-phases 'check)))))
-    (outputs '("out" "doc" "static"))
-    (inputs
-     (let* ((direct-inputs (package-inputs ghc-pandoc))
-            (all-static-inputs
-             (map (lambda (pkg)
-                    (list (string-append "static-" (package-name pkg))
-                          pkg "static"))
-                  (delete-duplicates
-                   (append (map cadr direct-inputs)
-                           (filter (lambda (pkg)
-                                     (and
-                                      (string-prefix? "ghc-" (package-name pkg))
-                                      (not (string=? "ghc-next" (package-name pkg)))))
-                                   (package-closure
-                                    (map cadr direct-inputs))))))))
-       `(("zlib:static" ,zlib "static")
-         ,@all-static-inputs
-         ,@direct-inputs)))
-    (native-inputs
-     (let* ((direct-inputs (package-native-inputs ghc-pandoc))
-            (all-static-inputs
-             (map (lambda (pkg)
-                    (list (string-append "static-" (package-name pkg))
-                          pkg "static"))
-                  (delete-duplicates
-                   (append (map cadr direct-inputs)
-                           (filter (lambda (pkg)
-                                     (and
-                                      (string-prefix? "ghc-" (package-name pkg))
-                                      (not (string=? "ghc-next" (package-name pkg)))))
-                                   (package-closure
-                                    (map cadr direct-inputs))))))))
-       `(,@all-static-inputs
-         ,@direct-inputs)))))
+       #~(modify-phases %standard-phases
+           (add-after 'register 'remove-libraries
+             (lambda* (#:key outputs #:allow-other-keys)
+               (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))
+       ;; Haddock documentation is for the library.
+       #:haddock? #f))))
 
 (define-public ghc-pandoc-types
   (package
     (name "ghc-pandoc-types")
-    (version "1.22.1")
+    (version "1.22.2.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "pandoc-types/pandoc-types-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "pandoc-types" version))
               (sha256
                (base32
-                "0z2j306jsiriwhib0201hsllwyck7qcvqci5c25frwsmknr3mls2"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; None of the directory names are actually used.  By generating a
-         ;; simpler module without references to store names we avoid
-         ;; introducing references in the pandoc executable.
-         (add-after 'unpack 'create-simple-paths-module
-           (lambda _
-             (call-with-output-file "Paths_pandoc_types.hs"
-               (lambda (port)
-                 (format port "\
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE NoRebindableSyntax #-}
-{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
-module Paths_pandoc_types (version) where
-import Data.Version (Version(..))
-version :: Version
-version = Version [~a] []
-" (string-map (lambda (chr) (if (eq? chr #\.) #\, chr)) ,version))))
-             #t)))))
-    (inputs
-     (list ghc-syb ghc-aeson))
-    (native-inputs
-     (list ghc-quickcheck
-           ghc-test-framework
-           ghc-test-framework-hunit
-           ghc-test-framework-quickcheck2
-           ghc-string-qq
-           ghc-hunit))
-    (home-page "https://pandoc.org")
+                "17b5c4b9jmx2gca1wk9vlnvvlzdw21qiqc0bpikkkiv7kl99drsc"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "pandoc-types")))
+    (inputs (list ghc-syb ghc-aeson ghc-quickcheck))
+    (native-inputs (list ghc-test-framework ghc-test-framework-hunit
+                         ghc-test-framework-quickcheck2 ghc-hunit
+                         ghc-string-qq))
+    (home-page "https://pandoc.org/")
     (synopsis "Types for representing a structured document")
     (description
      "This module defines the @code{Pandoc} data structure, which is used by
@@ -9194,21 +8351,19 @@ building up, manipulating and serialising @code{Pandoc} structures.")
   (package
     (name "ghc-parallel")
     (version "3.2.2.0")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/parallel/parallel-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "parallel" version))
        (sha256
         (base32
          "1xkfi96w6yfpppd0nw1rnszdxmvifwzm699ilv6332ra3akm610p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "parallel")))
     (arguments
-     `(#:cabal-revision
-       ("3" "1lv3y3zrdfc09nsiqxg7mzcahgnqi6z9caspd4lvifhhfrqy2722")))
+     `(#:cabal-revision ("5"
+                         "1q45wzpf2sda0244l55gakl3g5zqhcb27m86nhl3vslcjc35mpbf")))
     (home-page "https://hackage.haskell.org/package/parallel")
     (synopsis "Parallel programming library")
     (description
@@ -9218,18 +8373,15 @@ building up, manipulating and serialising @code{Pandoc} structures.")
 (define-public ghc-parsec
   (package
     (name "ghc-parsec")
-    (version "3.1.14.0")
+    (version "3.1.15.0")
     (source (origin
               (method url-fetch)
               (uri (hackage-uri "parsec" version))
               (sha256
                (base32
-                "132waj2cpn892midbhpkfmb74qq83v0zv29v885frlp1gvh94b67"))))
+                "1v8zs8zv1rk16lag2yqaxfwanjpgnh4gxw1vd70py0n04d20z0lq"))))
     (build-system haskell-build-system)
-    (native-inputs (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
-    (arguments
-     `(#:cabal-revision
-       ("4" "0p65q054iaz2117a5qk1428dic4sb41acclys9k00zna24ks7iq3")))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/haskell/parsec")
     (synopsis "Monadic parser combinators")
     (description "Parsec is designed from scratch as an industrial-strength
@@ -9246,11 +8398,11 @@ is also parametric in the input stream type.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "parsec-numbers/parsec-numbers-" version ".tar.gz"))
+       (uri (hackage-uri "parsec-numbers" version))
        (sha256
         (base32 "1gzy4v3r02kvdxvgg1nj83mmb6aph2v4ilf9c7y6nbvi2x49l0bp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "parsec-numbers")))
     (home-page "https://hackage.haskell.org/package/parsec-numbers")
     (synopsis "Utilities for parsing numbers from strings")
     (description
@@ -9261,17 +8413,15 @@ is also parametric in the input stream type.")
 (define-public ghc-parser-combinators
   (package
     (name "ghc-parser-combinators")
-    (version "1.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "parser-combinators/parser-combinators-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "0k95nvgnl5820y094yfh7b868l0xd1diclm4kx9560p5rm02w5h3"))))
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "parser-combinators" version))
+              (sha256
+               (base32
+                "0is45q3q6ngfqvzpwwga9phbwk45v7g1q2x1rlm95a7q946yy44k"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "parser-combinators")))
     (home-page "https://github.com/mrkkrp/parser-combinators")
     (synopsis "Commonly useful parser combinators")
     (description
@@ -9282,30 +8432,26 @@ combinators.")
 (define-public ghc-parsers
   (package
     (name "ghc-parsers")
-    (version "0.12.10")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/parsers/parsers-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0v0smxbzk1qpdfkfqqmrzd2dngv3vxba10mkjn9nfm6a309izf8p"))))
+    (version "0.12.11")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "parsers" version))
+              (sha256
+               (base32
+                "068k7fm0s13z0jkkffc149cqcxnzpk1m066lp4ccdfcb41km1zwi"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; FIXME: Test fails with "cannot satisfy
-                               ; -package attoparsec-0.13.0.1"
-    (inputs
-     (list ghc-base-orphans
-           ghc-attoparsec
-           ghc-scientific
-           ghc-semigroups
-           ghc-charset
-           ghc-unordered-containers))
-    (home-page "https://github.com/ekmett/parsers/")
+    (properties '((upstream-name . "parsers")))
+    (inputs (list ghc-base-orphans
+                  ghc-charset
+                  ghc-scientific
+                  ghc-unordered-containers
+                  ghc-attoparsec
+                  ghc-semigroups))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-instances))
+    (home-page "http://github.com/ekmett/parsers/")
     (synopsis "Parsing combinators")
-    (description "This library provides convenient combinators for working
+    (description
+     "This library provides convenient combinators for working
 with and building parsing combinator libraries.  Given a few simple instances,
 you get access to a large number of canned definitions.  Instances exist for
 the parsers provided by @code{parsec}, @code{attoparsec} and @code{base}'s
@@ -9315,33 +8461,24 @@ the parsers provided by @code{parsec}, @code{attoparsec} and @code{base}'s
 (define-public ghc-path
   (package
     (name "ghc-path")
-    (version "0.8.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/path/path-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0vzsa41q5sxs1ni72yv1vfpnc6r5mjdwnmdb6jrs6cszb2xlkjr4"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "02vhx94mqapyigvayb6cj7p7snn354pb542n3qyvsm0gih52wlja")))
-    (inputs
-     (list ghc-aeson ghc-hashable))
-    (native-inputs
-     (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")
+    (version "0.9.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "path" version))
+              (sha256
+               (base32
+                "15xxsjdxxqxnh20iqhprbdyhldk2igl5gd4ld6hhk9nqgwqdcr0f"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "path")))
+    (inputs (list ghc-aeson ghc-hashable))
+    (native-inputs (list ghc-hspec
+                         ghc-quickcheck
+                         ghc-genvalidity
+                         ghc-genvalidity-property
+                         ghc-genvalidity-hspec
+                         ghc-hspec
+                         ghc-validity))
+    (home-page "http://hackage.haskell.org/package/path")
     (synopsis "Support for well-typed paths")
     (description "This package introduces a type for paths upholding useful
 invariants.")
@@ -9350,34 +8487,21 @@ invariants.")
 (define-public ghc-path-io
   (package
     (name "ghc-path-io")
-    (version "1.6.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/path-io/path-io-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1dnc48hf8x83p0jy05qi8j8gmfmsy50swnql9ssdv74lsryp615n"))))
+    (version "1.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "path-io" version))
+              (sha256
+               (base32
+                "1jr1inh3x0a42rdh4q0jipbw8jsprdza1j5xkzd7nxcq0a143g9l"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("3" "0rsr9r2175lf7zcz2sns0mhxkvl21pm50sjidjq5v75nalrsw6rp")))
-    (inputs
-     (list ghc-dlist
-           ghc-exceptions
-           ghc-path
-           ghc-transformers-base
-           ghc-unix-compat
-           ghc-temporary))
-    (native-inputs
-     (list ghc-hspec))
-    (home-page
-     "https://github.com/mrkkrp/path-io")
+    (properties '((upstream-name . "path-io")))
+    (inputs (list ghc-dlist ghc-path ghc-temporary ghc-unix-compat))
+    (native-inputs (list ghc-hspec))
+    (home-page "https://github.com/mrkkrp/path-io")
     (synopsis "Functions for manipulating well-typed paths")
-    (description "This package provides an interface to the @code{directory}
+    (description
+     "This package provides an interface to the @code{directory}
 package for users of @code{path}.  It also implements some missing stuff like
 recursive scanning and copying of directories, working with temporary
 files/directories, and more.")
@@ -9387,18 +8511,16 @@ files/directories, and more.")
   (package
     (name "ghc-paths")
     (version "0.1.0.12")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ghc-paths/ghc-paths-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "ghc-paths" version))
        (sha256
         (base32
          "1164w9pqnf7rjm05mmfjznz7rrn415blrkk1kjc0gjvks1vfdjvf"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ghc-paths")))
     (home-page "https://github.com/simonmar/ghc-paths")
     (synopsis
      "Knowledge of GHC's installation directories")
@@ -9413,13 +8535,12 @@ files/directories, and more.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/patience/patience-"
-             version ".tar.gz"))
+       (uri (hackage-uri "patience" version))
        (sha256
         (base32
          "1i1b37lgi31c17yrjyf8pdm4nf5lq8vw90z3rri78hf0k66d0p3i"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "patience")))
     (home-page "https://hackage.haskell.org/package/patience")
     (synopsis "Patience diff and longest increasing subsequence")
     (description
@@ -9437,14 +8558,12 @@ performance, nice output for humans, and simplicity of implementation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/pattern-arrows/pattern-arrows-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "pattern-arrows" version))
        (sha256
         (base32
          "13q7bj19hd60rnjfc05wxlyck8llxy11z3mns8kxg197wxrdkhkg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pattern-arrows")))
     (home-page
      "https://blog.functorial.com/posts/2013-10-27-Pretty-Printing-Arrows.html")
     (synopsis "Arrows for Pretty Printing")
@@ -9460,14 +8579,12 @@ rules.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/pcre-light/pcre-light-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "pcre-light" version))
        (sha256
         (base32
          "0lqvsmc6bfhdv6igm3fmw8nklyhw3j3jsl0s1k6r3fhb6ambzxhn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pcre-light")))
     (arguments
      `(#:extra-directories ("pcre")))
     (inputs
@@ -9485,85 +8602,81 @@ syntax and semantics as Perl 5.")
 (define-public ghc-persistent
   (package
     (name "ghc-persistent")
-    (version "2.13.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent/"
-             "persistent-" version ".tar.gz"))
-       (sha256
-        (base32
-         "13lp9i94f57qhifdmr1vnsrra34526f7kqa1sybcaj2jh2v3q85k"))))
+    (version "2.13.3.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "persistent" version))
+              (sha256
+               (base32
+                "0z69yvk0rd29dp5qdhi4p587b891y90azrzzpa3g10cxp3gyywvm"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "persistent")))
+    (inputs (list ghc-conduit
+                  ghc-aeson
+                  ghc-attoparsec
+                  ghc-base64-bytestring
+                  ghc-blaze-html
+                  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
+                  ghc-unliftio-core
+                  ghc-unordered-containers
+                  ghc-vault
+                  ghc-vector))
+    (native-inputs (list ghc-hspec ghc-quickcheck ghc-quickcheck-instances
+                         ghc-shakespeare))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0kyipwaspzah6f88s51d61kr8i9g05grm2g0lnnw28jp06nggg5d")))
+    (home-page "http://www.yesodweb.com/book/persistent")
     (synopsis "Type-safe, multi-backend data serialization for Haskell")
-    (description "This Haskell package allows Haskell programs to access data
+    (description
+     "This Haskell package allows Haskell programs to access data
 storage systems like PostgreSQL, SQLite, and MariaDB in a type-safe way.")
     (license license:expat)))
 
 (define-public ghc-persistent-sqlite
   (package
     (name "ghc-persistent-sqlite")
-    (version "2.13.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent-sqlite/"
-             "persistent-sqlite-" version ".tar.gz"))
-       (sha256
-        (base32
-         "12za89crbk74mya4qxpw5fp5fqp64vwz5s8vbjd7m8r3j3vbw338"))))
+    (version "2.13.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "persistent-sqlite" version))
+              (sha256
+               (base32
+                "1z8650nv10f6yldn9sihk54c7mlcnkxwaj956igvs6q3x3s8aa1b"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "persistent-sqlite")))
+    (inputs (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-test
+                         ghc-fast-logger
+                         ghc-hspec
+                         ghc-hunit
+                         ghc-microlens
+                         ghc-quickcheck
+                         ghc-system-fileio
+                         ghc-system-filepath
+                         ghc-temporary))
+    (home-page "http://www.yesodweb.com/book/persistent")
     (synopsis "Backend for the persistent library using sqlite3")
-    (description "This Haskell package includes a thin sqlite3 wrapper based
+    (description
+     "This Haskell package includes a thin sqlite3 wrapper based
 on the direct-sqlite package, as well as the entire C library, so there are no
 system dependencies.")
     (license license:expat)))
@@ -9575,13 +8688,12 @@ system dependencies.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent-template/"
-             "persistent-template-" version ".tar.gz"))
+       (uri (hackage-uri "persistent-template" version))
        (sha256
         (base32
          "0c9cs27j43azimj74s2m2cdks87682ibpy1xbyzvygipgmb8nj6w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "persistent-template")))
     (inputs
      (list ghc-persistent
            ghc-aeson
@@ -9602,17 +8714,16 @@ functions for the ghc-persistent package.")
 (define-public ghc-persistent-test
   (package
     (name "ghc-persistent-test")
-    (version "2.13.0.3")
+    (version "2.13.1.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent-test/"
-             "persistent-test-" version ".tar.gz"))
+       (uri (hackage-uri "persistent-test" version))
        (sha256
         (base32
-         "07q53jvhz00cf10k7a8fkvykgwcl10fgzh8k9gv1d248f336crvs"))))
+         "0cah2gyp5lm9hipm3wvcxnl14cmq51dajzcw3wcf9xd19sbm4k49"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "persistent-test")))
     (inputs
      (list ghc-aeson
            ghc-blaze-html
@@ -9646,14 +8757,12 @@ libraries.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/pgp-wordlist/pgp-wordlist-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "pgp-wordlist" version))
        (sha256
         (base32
          "15g6qh0fb7kjj3l0w8cama7cxgnhnhybw760md9yy7cqfq15cfzg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pgp-wordlist")))
     (inputs
      (list ghc-vector))
     (native-inputs
@@ -9682,18 +8791,20 @@ For further information, see
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/pipes/"
-             "pipes-" version ".tar.gz"))
+       (uri (hackage-uri "pipes" version))
        (sha256
         (base32
          "163lx5sf68zx5kik5h1fjsyckwr9shdsn5k2dsjq3mhg077nxqgl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pipes")))
     (inputs
      (list ghc-exceptions ghc-mmorph ghc-void ghc-semigroups))
     (native-inputs
      (list ghc-quickcheck ghc-test-framework
            ghc-test-framework-quickcheck2))
+    (arguments
+     `(#:cabal-revision ("6"
+                         "16s8a1ijakhsk73ny2vrw6a8r2dszgncd0wk735ii6csg3l2c9pm")))
     (home-page
      "https://hackage.haskell.org/package/pipes")
     (synopsis "Compositional pipelines")
@@ -9720,13 +8831,12 @@ dependencies
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/pointedlist/"
-             "pointedlist-" version ".tar.gz"))
+       (uri (hackage-uri "pointedlist" version))
        (sha256
         (base32
          "16xsrzqql7i4z6a3xy07sqnbyqdmcar1jiacla58y4mvkkwb0g3l"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pointedlist")))
     (home-page
      "https://hackage.haskell.org/package/pointedlist")
     (synopsis
@@ -9745,17 +8855,15 @@ other end when progressing past the actual edge.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/polyparse/polyparse-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "polyparse" version))
        (sha256
         (base32
          "0yvhg718dlksiw3v27m2d8m1sn4r4f5s0p56zq3lynhy1sc74k0w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "polyparse")))
     (arguments
-     `(#:cabal-revision
-       ("2" "1n5q6w7x46cvcq7j1pg9jx9h72vcsc5di35rbkmwgjw6pq4w4gfl")))
+     `(#:cabal-revision ("5"
+                         "05qrn5pfdy45x1nkx7dvhnxs9j6d6cssws4kwn2sl3n9qmagr8mc")))
     (home-page
      "http://code.haskell.org/~malcolm/polyparse/")
     (synopsis
@@ -9772,18 +8880,19 @@ Strings.")
 (define-public ghc-pqueue
   (package
     (name "ghc-pqueue")
-    (version "1.4.1.3")
+    (version "1.4.3.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "pqueue/pqueue-" version ".tar.gz"))
+       (uri (hackage-uri "pqueue" version))
        (sha256
         (base32
-         "1sz7hlnfd86hbwrgqxczmsjsl1ki0ryi9dgzscxlsgjkdgcdia2p"))))
+         "0kl608jw0xz0n4ysw7p3cvlm1s71xrysw8862cddrzbr38bv8jvq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pqueue")))
+    (inputs (list ghc-indexed-traversable))
     (native-inputs
-     (list ghc-quickcheck))
+     (list ghc-tasty ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/pqueue")
     (synopsis "Reliable, persistent, fast priority queues")
     (description
@@ -9798,14 +8907,12 @@ based on a binomial heap.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/prelude-extras/prelude-extras-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "prelude-extras" version))
        (sha256
         (base32
          "0xzqdf3nl2h0ra4gnslm1m1nsxlsgc0hh6ky3vn578vh11zhifq9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "prelude-extras")))
     (home-page "https://github.com/ekmett/prelude-extras")
     (synopsis "Higher order versions of Prelude classes")
     (description "This library provides higher order versions of
@@ -9820,12 +8927,12 @@ reduce @code{UndecidableInstances}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "prettyclass/prettyclass-" version ".tar.gz"))
+       (uri (hackage-uri "prettyclass" version))
        (sha256
         (base32
          "11l9ajci7nh1r547hx8hgxrhq8mh5gdq30pdf845wvilg9p48dz5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "prettyclass")))
     (home-page "https://hackage.haskell.org/package/prettyclass")
     (synopsis "Pretty printing class similar to Show")
     (description "This package provides a pretty printing class similar
@@ -9841,13 +8948,11 @@ types.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/prettyprinter/prettyprinter-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "prettyprinter" version))
        (sha256
         (base32 "0i8b3wjjpdvp5b857j065jwyrpgcnzgk75imrj7i3yhl668acvjy"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "prettyprinter")))
     (native-inputs
      (list ghc-doctest
            ghc-pgp-wordlist
@@ -9872,12 +8977,11 @@ clashes, @code{Text}-based, extensible.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/prettyprinter-ansi-terminal/"
-             "prettyprinter-ansi-terminal-" version ".tar.gz"))
+       (uri (hackage-uri "prettyprinter-ansi-terminal" version))
        (sha256
         (base32 "1cqxbcmy9ykk4pssq5hp6h51g2h547zfz549awh0c1fni8q3jdw1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "prettyprinter-ansi-terminal")))
     (inputs
      (list ghc-ansi-terminal ghc-prettyprinter))
     (native-inputs (list ghc-doctest))
@@ -9895,13 +8999,12 @@ clashes, @code{Text}-based, extensible.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "pretty-hex-" version "/"
-                           "pretty-hex-" version ".tar.gz"))
+       (uri (hackage-uri "pretty-hex" version))
        (sha256
         (base32
          "0c8pa0rdb2q8rf4acy4gww0hj5lrzclzdh52yi2aiaaij4lqzir7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pretty-hex")))
     (home-page "https://github.com/GaloisInc/hexdump")
     (synopsis "Haskell library for hex dumps of ByteStrings")
     (description "This Haskell library generates pretty hex dumps of
@@ -9915,12 +9018,12 @@ ByteStrings in the style of other common *nix hex dump tools.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/pretty-show/"
-                           "pretty-show-" version ".tar.gz"))
+       (uri (hackage-uri "pretty-show" version))
        (sha256
         (base32
          "1lkgvbv00v1amvpqli6y4dzsbs25l4v3wlagvhwx8qxhw2390zrh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pretty-show")))
     (inputs
      (list ghc-haskell-lexer ghc-happy))
     (home-page "https://wiki.github.com/yav/pretty-show")
@@ -9938,22 +9041,19 @@ examination.")
 (define-public ghc-pretty-simple
   (package
     (name "ghc-pretty-simple")
-    (version "4.0.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/pretty-simple/"
-             "pretty-simple-" version ".tar.gz"))
-       (sha256
-        (base32 "1srvx854ml2gffnkxr2fm12xk8syjsk078rfzrq0a3idwgv46myw"))))
+    (version "4.1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "pretty-simple" version))
+              (sha256
+               (base32
+                "0di7n3kq2bl0xqj9b1xxf3jznyy6cfyjs6hf6g0bi72rf4wprd1w"))))
     (build-system haskell-build-system)
-
-    (inputs
-     (list ghc-aeson ghc-optparse-applicative
-           ghc-prettyprinter-ansi-terminal ghc-prettyprinter))
-    (native-inputs
-     (list cabal-doctest ghc-doctest ghc-glob ghc-quickcheck))
+    (properties '((upstream-name . "pretty-simple")))
+    (inputs (list ghc-prettyprinter ghc-prettyprinter-ansi-terminal
+                  ghc-optparse-applicative ghc-aeson))
+    (native-inputs (list ghc-doctest ghc-glob ghc-quickcheck))
+    (arguments (list #:tests? #f)) ; Could not find module ‘Build_doctests’
     (home-page "https://github.com/cdepillabout/pretty-simple")
     (synopsis "Pretty printer for data types with a 'Show' instance")
     (description
@@ -9964,29 +9064,27 @@ Show instance.")
 (define-public ghc-primitive
   (package
     (name "ghc-primitive")
-    (version "0.7.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/primitive/primitive-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1facmq2wxhn5mbgd209zz5swyaw1q970fv3hd84klaxrhabqaxwi"))))
-    (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Loops.
-;    (native-inputs
-;     `(("ghc-base-orphans" ,ghc-base-orphans)
-;       ("ghc-quickcheck-classes-base" ,ghc-quickcheck-classes-base)
-;       ("ghc-quickcheck" ,ghc-quickcheck)
-;       ("ghc-tasty" ,ghc-tasty)
-;       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-;       ("ghc-tagged" ,ghc-tagged)
-;       ("ghc-transformers-compat" ,ghc-transformers-compat)))
-    (home-page
-     "https://github.com/haskell/primitive")
+    (version "0.7.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "primitive" version))
+              (sha256
+               (base32
+                "1p01fmw8yi578rvwicrlpbfkbfsv7fbnzb88a7vggrhygykgs31w"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "primitive")))
+;    (native-inputs (list ghc-base-orphans
+;                         ghc-quickcheck-classes-base
+;                         ghc-quickcheck
+;                         ghc-tasty
+;                         ghc-tasty-quickcheck
+;                         ghc-tagged
+;                         ghc-transformers-compat))
+    (arguments
+     `(#:tests? #f ; Cannot resolve package cycle.
+       #:cabal-revision ("2"
+                         "0xh1m8nybz760c71gm1w9fga25y2rys1211q77v6wagdsas634yf")))
+    (home-page "https://github.com/haskell/primitive")
     (synopsis "Primitive memory-related operations")
     (description
      "This package provides various primitive memory-related operations.")
@@ -9999,13 +9097,11 @@ Show instance.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/primitive-addr/primitive-addr-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "primitive-addr" version))
         (sha256
           (base32 "06r1p56wm8rbjxnlaqbmc3rbsj1rsv5scwnh80lsn0xw56jc70a2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "primitive-addr")))
     (inputs (list ghc-primitive))
     (home-page "https://github.com/haskell-primitive/primitive-addr")
     (synopsis "Addresses to unmanaged memory")
@@ -10022,13 +9118,12 @@ of the @code{primitive} library before @code{primitive-0.7.0.0}.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/process-extras/"
-         "process-extras-" version ".tar.gz"))
+        (hackage-uri "process-extras" version))
        (sha256
         (base32
          "0klqgr37f1z2z6i0a9b0giapmq0p35l5k9kz1p7f0k1597w7agi9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "process-extras")))
     (inputs
      (list ghc-data-default ghc-generic-deriving ghc-hunit ghc-listlike))
     (home-page "https://github.com/seereason/process-extras")
@@ -10048,15 +9143,13 @@ API.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/profunctors/profunctors-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "profunctors" version))
        (sha256
         (base32
          "0an9v003ivxmjid0s51qznbjhd5fsa1dkcfsrhxllnjja1xmv5b5"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
+    (properties '((upstream-name . "profunctors")))
+    (outputs '("out" "doc"))
     (inputs
      (list ghc-base-orphans
            ghc-bifunctors
@@ -10077,13 +9170,12 @@ API.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/project-template/project-template-"
-             version ".tar.gz"))
+       (uri (hackage-uri "project-template" version))
        (sha256
         (base32
          "0ac43x36i6b595jhflif1qqhri1rrqw90ama5n7rsh0ffnzyb69d"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "project-template")))
     (inputs
      (list ghc-base64-bytestring ghc-conduit ghc-conduit-extra
            ghc-resourcet))
@@ -10105,22 +9197,18 @@ the ideal templating system.")
 (define-public ghc-protolude
   (package
     (name "ghc-protolude")
-    (version "0.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/protolude/protolude-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1b6wprbwfdjyvds2bm6na0fbqgzdkj5ikkk33whbkyh3krd3i0s0"))))
+    (version "0.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "protolude" version))
+              (sha256
+               (base32
+                "0i53yxg44nrz0czwr8cqhw1fdapz9db8kfnqz9a3lmj5skrikh3y"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-async ghc-hashable ghc-mtl-compat ghc-paths
-           ghc-transformers-compat))
-    (home-page "https://github.com/protolude/protolude")
+    (properties '((upstream-name . "protolude")))
+    (inputs (list ghc-async ghc-hashable ghc-mtl-compat
+                  ghc-transformers-compat))
+    (home-page "https://github.com/sdiehl/protolude")
     (synopsis "Sensible set of defaults for writing custom Preludes")
     (description
      "Protolude gives you sensible defaults for writing custom Preludes to
@@ -10130,18 +9218,19 @@ replace the standard one provided by GHC.")
 (define-public ghc-psqueue
   (package
     (name "ghc-psqueue")
-    (version "1.1.0.1")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://hackage/package/PSQueue-"
-                                  version "/PSQueue-" version ".tar.gz"))
+              (uri (hackage-uri "PSQueue" version))
               (sha256
                (base32
-                "1cik7sw10sacsijmfhghzy54gm1qcyxw14shlp86lx8z89kcnkza"))))
+                "02pgqzwxndi8cwa5fw668gfsh7z3lzbygkgcsf56bwrxwqjyz4bi"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "PSQueue")))
+    (native-inputs (list ghc-quickcheck))
     (arguments
      '(#:cabal-revision
-       ("2" "0n1yrv1x1dxbjn9hjr8lk4k5in9c75ixzldlmszayi26bvax7329")))
+       ("1" "02a5g59sc9jh3v4pibhjpijv8lsbiydznrpqyin7qhwsyc0p813a")))
     (home-page "https://hackage.haskell.org/package/PSQueue")
     (synopsis "Priority search queue")
     (description
@@ -10156,33 +9245,26 @@ keys, in linear time.")
 (define-public ghc-psqueues
   (package
     (name "ghc-psqueues")
-    (version "0.2.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "psqueues-" version "/"
-                           "psqueues-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1yckx2csqswghiy9nfj03cybmza8104nmnpbpcc9ngwlbmakn9i6"))))
+    (version "0.2.7.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "psqueues" version))
+              (sha256
+               (base32
+                "1cmz7spfzx7niglmsphnndh0m4b8njkn0fhb9nshbnbq6nx515yh"))))
     (build-system haskell-build-system)
-    (arguments
-     '(#:tests? #f ; TODO: Needs quickcheck<2.14
-       #:cabal-revision
-       ("1" "0d0mm3c8x31dasfzp1884r2irkm3c9irvvbahjzfr1bzzxfb7vyv")))
-    (inputs
-     (list ghc-hashable))
-    (native-inputs
-     (list ghc-hunit
-           ghc-quickcheck
-           ghc-tagged
-           ghc-tasty
-           ghc-tasty-hunit
-           ghc-tasty-quickcheck))
-    (home-page "https://github.com/jaspervdj/psqueues")
+    (properties '((upstream-name . "psqueues")))
+    (inputs (list ghc-hashable))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-tagged))
+    (home-page "http://hackage.haskell.org/package/psqueues")
     (synopsis "Pure priority search queues")
-    (description "The psqueues package provides
+    (description
+     "The psqueues package provides
 @uref{https://en.wikipedia.org/wiki/Priority_queue, Priority Search Queues} in
 three different flavors:
 
@@ -10229,13 +9311,12 @@ Typical applications of Priority Search Queues include:
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/pwstore-fast/"
-             "pwstore-fast-" version ".tar.gz"))
+       (uri (hackage-uri "pwstore-fast" version))
        (sha256
         (base32
          "1cpvlwzg3qznhygrr78f75p65mnljd9v5cvnagfxjqppnrkay6bj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "pwstore-fast")))
     (inputs
      (list ghc-base64-bytestring ghc-cryptohash ghc-random ghc-byteable))
     (home-page "https://github.com/PeterScott/pwstore")
@@ -10252,38 +9333,33 @@ usable.")
 (define-public ghc-random
   (package
     (name "ghc-random")
-    (version "1.2.0")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/random/random-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1pmr7zbbqg58kihhhwj8figf5jdchhi7ik2apsyxbgsqq3vrqlg4"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f
-       #:cabal-revision
-       ("6" "1hzfz9b1cxrsya8i53yx145iypaakfsfjix7l8girhx7vbz0cm8r")))
-    (inputs `(("ghc-splitmix" ,ghc-splitmix-bootstrap)))
-   ;; ghc-random is widely used and causes quite a few loops.
-;    (native-inputs
-;     `(("ghc-doctest" ,ghc-doctest)
-;       ("ghc-mwc-random" ,ghc-mwc-random)
-;       ("ghc-primitive" ,ghc-primitive)
-;       ("ghc-unliftio" ,ghc-unliftio)
-;       ("ghc-vector" ,ghc-vector)
-;       ("ghc-smallcheck" ,ghc-smallcheck)
-;       ("ghc-tasty" ,ghc-tasty)
-;       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
-;       ("ghc-tasty-expected-failure" ,ghc-tasty-expected-failure)
-;       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
-    (home-page "https://hackage.haskell.org/package/random")
+    (version "1.2.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "random" version))
+              (sha256
+               (base32
+                "0xlv1k4sj87akwvj54kq4nrfkzi6qcz1941bf78pnkbaxpvp44iy"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "random")))
+    ;; ghc-random is widely used and causes quite a few loops, so disable tests.
+    (arguments (list #:tests? #f))
+    (inputs (list ghc-splitmix-bootstrap))
+;    (native-inputs (list ghc-doctest
+;                         ghc-mwc-random
+;                         ghc-primitive
+;                         ghc-unliftio-bootstrap
+;                         ghc-vector
+;                         ghc-smallcheck
+;                         ghc-tasty
+;                         ghc-tasty-smallcheck
+;                         ghc-tasty-hunit
+;                         ghc-tasty
+;                         ghc-tasty-inspection-testing))
+    (home-page "http://hackage.haskell.org/package/random")
     (synopsis "Random number library")
-    (description "This package provides a basic random number generation
+    (description
+     "This package provides a basic random number generation
 library, including the ability to split random number generators.")
     (license license:bsd-3)))
 
@@ -10304,13 +9380,12 @@ library, including the ability to split random number generators.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "raw-strings-qq/raw-strings-qq-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "raw-strings-qq" version))
        (sha256
         (base32
          "1lxy1wy3awf52968iy5y9r5z4qgnn2sxkdrh7js3m9gadb11w09f"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "raw-strings-qq")))
     (native-inputs (list ghc-hunit))
     (home-page "https://github.com/23Skidoo/raw-strings-qq")
     (synopsis "Raw string literals for Haskell")
@@ -10329,12 +9404,15 @@ DOS/Windows paths and markup languages (such as XML).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "readable/readable-" version ".tar.gz"))
+       (uri (hackage-uri "readable" version))
        (sha256
         (base32
          "1ja39cg26wy2fs00gi12x7iq5k8i366pbqi3p916skfa5jnkfc3h"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "readable")))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0dywlvxjszqa1dj5r1cva0viv2l1hm8mw75zddnf96pfpd00fmga")))
     (home-page "https://github.com/mightybyte/readable")
     (synopsis "Type class for reading from Text and ByteString")
     (description "This package provides a @code{Readable} type class for
@@ -10345,39 +9423,41 @@ includes efficient implementations for common data types.")
 (define-public ghc-rebase
   (package
     (name "ghc-rebase")
-    (version "1.13.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "rebase-" version "/"
-                           "rebase-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0sh1vha10n28c4jb97p99xglghqph8ppydqzbnb2h25a34057927"))))
+    (version "1.16.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "rebase" version))
+              (sha256
+               (base32
+                "0mb1x5p3lvfhxsrnmkhsv6f4rd1cxp6m3qg6kyz30svrbwxsvvkz"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (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))
+    (properties '((upstream-name . "rebase")))
+    (inputs (list ghc-bifunctors
+                  ghc-contravariant
+                  ghc-comonad
+                  ghc-dlist
+                  ghc-either
+                  ghc-groups
+                  ghc-hashable
+                  ghc-invariant
+                  ghc-profunctors
+                  ghc-scientific
+                  ghc-selective
+                  ghc-semigroupoids
+                  ghc-time-compat
+                  ghc-unordered-containers
+                  ghc-uuid-types
+                  ghc-vector
+                  ghc-vector-instances
+                  ghc-void))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1igpk9gz54jfvf5m69xcp7hl567c4lkbmwhzylcbx0i1n0pd7i2n")))
     (home-page "https://github.com/nikita-volkov/rebase")
     (synopsis "Progressive alternative to the base package
 for Haskell")
-    (description "This Haskell package is intended for those who are
+    (description
+     "This Haskell package is intended for those who are
 tired of keeping long lists of dependencies to the same essential libraries
 in each package as well as the endless imports of the same APIs all over again.
 
@@ -10403,26 +9483,23 @@ the community, with the missing features being added with pull-requests.")
 (define-public ghc-reducers
   (package
     (name "ghc-reducers")
-    (version "3.12.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/reducers/reducers-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "09wf8pl9ycglcv6qj5ba26gkg2s5iy81hsx9xp0q8na0cwvp71ki"))))
+    (version "3.12.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "reducers" version))
+              (sha256
+               (base32
+                "0hsycdir52jdijnnvc77jj971fjrrc722v952wr62ivrvx2zarn0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "reducers")))
+    (inputs (list ghc-fingertree ghc-hashable ghc-unordered-containers
+                  ghc-semigroupoids ghc-semigroups))
     (arguments
-     '(#:cabal-revision
-       ("2" "1kd38n9h2hxl09khvkvkhnflgm6rbky1zkw3iazlpb8xk9zkk39s")))
-    (inputs
-     (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")
+     `(#:cabal-revision ("2"
+                         "1ji6rp0f857d0vp2kjqcck7avrjgqvqjgwnhdcxs3zbjkwpqyhfb")))
+    (home-page "http://github.com/ekmett/reducers/")
+    (synopsis
+     "Semigroups, specialized containers and a general map/reduce framework")
     (description "This library provides various semigroups, specialized
 containers and a general map/reduce framework for Haskell.")
     (license license:bsd-3)))
@@ -10434,13 +9511,12 @@ containers and a general map/reduce framework for Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "refact/refact-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "refact" version))
        (sha256
         (base32
          "0v0zxcx29b8jxs2kgy9csykqcp8kzhdvyylw2xfwmj4pfxr2kl0a"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "refact")))
     (home-page "https://hackage.haskell.org/package/refact")
     (synopsis "Specify refactorings to perform with apply-refact")
     (description
@@ -10456,14 +9532,12 @@ specify refactorings without depending on GHC.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/reflection/reflection-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "reflection" version))
        (sha256
         (base32
          "1kd6dgnp99dzbkxdnj01g81j03v7zq5cwg0sf19rlcmvgs8i8gmz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "reflection")))
     (inputs (list ghc-tagged))
     (native-inputs
      (list ghc-hspec ghc-quickcheck hspec-discover))
@@ -10479,37 +9553,24 @@ configurations to coexist without resorting to mutable global variables or
 (define-public ghc-regex
   (package
     (name "ghc-regex")
-    (version "1.1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/regex/"
-                           "regex-" version ".tar.gz"))
-       (sha256
-        (base32
-         "02hxgy5ck3h5pwd5gzs4565qbql8457cjdbbc2yrk236qzc1qa8x"))))
+    (version "1.1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "regex" version))
+              (sha256
+               (base32
+                "1nzyfkqmclmawmphvksvm9l64awqgnypic4xplc2s9sjcj4h814a"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'relax-dependencies
-           (lambda _
-             (substitute* "regex.cabal"
-               (("base-compat.*>=.*0.6.*")
-                "base-compat >= 0.6\n")
-               (("template-haskell.*>=.*2.7.*")
-                "template-haskell >= 2.7\n"))
-             #t)))))
-    (inputs
-     (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")
+    (properties '((upstream-name . "regex")))
+    (inputs (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 "https://regex.uk")
     (synopsis "Toolkit for regex-base")
     (description
      "This package provides a regular expression toolkit for @code{regex-base}
@@ -10527,13 +9588,12 @@ copious examples.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-applicative/"
-             "regex-applicative-" version ".tar.gz"))
+       (uri (hackage-uri "regex-applicative" version))
        (sha256
         (base32
          "0di66pi2kq5rrsn0k6pwakzwa0bgi9jfb2csm72kp5gzqdws8s8p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "regex-applicative")))
     (inputs (list ghc-filtrable))
     (native-inputs
      (list ghc-smallcheck ghc-tasty ghc-tasty-hunit ghc-tasty-smallcheck))
@@ -10547,22 +9607,22 @@ regular expressions.  Parsers can be built using Applicative interface.")
 (define-public ghc-regex-base
   (package
     (name "ghc-regex-base")
-    (version "0.94.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-base/regex-base-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1ngdmmrxs1rhvib052c6shfa40yad82jylylikz327r0zxpxkcbi"))))
+    (version "0.94.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "regex-base" version))
+              (sha256
+               (base32
+                "1w9fxad1dwi040r3db9i2cjhhrl86p3hngj13ixbcnqgb27l16bv"))))
     (build-system haskell-build-system)
-    (home-page
-     "https://sourceforge.net/projects/lazy-regex")
+    (properties '((upstream-name . "regex-base")))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1k2gzjm7xz69f7zr08wh2wzb5dhb659cvimsvx0g9p8cf5f45x2g")))
+    (home-page "https://wiki.haskell.org/Regular_expressions")
     (synopsis "Replaces/Enhances Text.Regex")
-    (description "@code{Text.Regex.Base} provides the interface API for
+    (description
+     "@code{Text.Regex.Base} provides the interface API for
 regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
     (license license:bsd-3)))
 
@@ -10573,59 +9633,35 @@ regex-posix, regex-pcre, regex-parsec, regex-tdfa, regex-dfa.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-compat/regex-compat-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "regex-compat" version))
        (sha256
         (base32
          "0ivrdrcphrz3g6nr5wbsmfiv8i82caw0kf6z5qlmlq7xf9n3hywg"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "regex-compat")))
     (inputs
      (list ghc-regex-base ghc-regex-posix))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "0ldqpdxikm17ydrkfmichflkdqdrkspv4r0qy3zbdgqf5033pj4n")))
     (home-page "https://sourceforge.net/projects/lazy-regex")
     (synopsis "Replaces/Enhances Text.Regex")
     (description "This library provides one module layer over
 @code{regex-posix} to replace @code{Text.Regex}.")
     (license license:bsd-3)))
 
-(define-public ghc-regex-compat-tdfa
-  (package
-    (name "ghc-regex-compat-tdfa")
-    (version "0.95.1.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-compat-tdfa/regex-compat-tdfa-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1p90fn90yhp7fvljjdqjp41cszidcfz4pw7fwvzyx4739b98x8sg"))))
-    (build-system haskell-build-system)
-    (inputs
-     (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
-     "One module layer over @code{regex-tdfa} to replace @code{Text.Regex}.
-@code{regex-compat} can't use Unicode characters correctly because of using regex-posix.
-This is not good for Unicode users.  This modified regex-compat uses regex-tdfa to solve
-this problem.")
-    (license license:bsd-3)))
-
 (define-public ghc-regex-pcre
   (package
     (name "ghc-regex-pcre")
     (version "0.95.0.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "regex-pcre/regex-pcre-" version ".tar.gz"))
+              (uri (hackage-uri "regex-pcre" version))
               (sha256
                (base32
                 "0nn76q4bsjnxim0j0d01jifmh36as9jdpcvm001a851vvq86zb8n"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "regex-pcre")))
     (arguments
      `(#:extra-directories ("pcre")
        #:cabal-revision
@@ -10647,13 +9683,12 @@ expressions.")
     (version "0.95.2.3.8.44")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "regex-pcre-builtin/regex-pcre-builtin-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "regex-pcre-builtin" version))
               (sha256
                (base32
                 "0pn55ssrwr05c9sa9jvp0knvzjksz04wn3pmzf5dz4xgbyjadkna"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "regex-pcre-builtin")))
     (inputs
      (list ghc-regex-base))
     (home-page "https://hackage.haskell.org/package/regex-pcre-builtin")
@@ -10671,14 +9706,12 @@ providing the PCRE backend to accompany regex-base, with bundled code from
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-posix/regex-posix-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "regex-posix" version))
        (sha256
         (base32
          "1715b57z67q4hg0jz44wkxrxi3v7n5iagw6gw48pf8hr34wpr0n7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "regex-posix")))
     (inputs
      (list ghc-regex-base))
     (home-page "https://sourceforge.net/projects/lazy-regex")
@@ -10690,24 +9723,18 @@ Haskell library @code{regex-base}.")
 (define-public ghc-regex-tdfa
   (package
     (name "ghc-regex-tdfa")
-    (version "1.3.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/regex-tdfa/regex-tdfa-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1msrq31k4jmn2lmrdzn87jqarqhw265ca69rfg5jpa5adrzm3gmi"))))
+    (version "1.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "regex-tdfa" version))
+              (sha256
+               (base32
+                "1lfzhir5zbgga44zhr4qvc2xc9pa9lslv12c8lwqqw80bzfdfq16"))))
     (build-system haskell-build-system)
-    (arguments
-     '(#:cabal-revision
-       ("1" "02gwf740vs0jy3l6dgw72r8c04yggshia6w16n140ncpsici8c4r")))
-    (inputs
-     (list ghc-regex-base))
-    (native-inputs (list ghc-utf8-string))
-    (home-page "https://github.com/haskell-hvr/regex-tdfa")
+    (properties '((upstream-name . "regex-tdfa")))
+    (inputs (list ghc-regex-base))
+    (native-inputs (list ghc-utf8-string ghc-doctest-parallel))
+    (home-page "https://wiki.haskell.org/Regular_expressions")
     (synopsis "POSIX extended regular expressions in Haskell")
     (description
      "Regex-tdfa is a pure Haskell regular expression library implementing POSIX
@@ -10718,20 +9745,15 @@ inspired by libtre.")
 (define-public ghc-repline
   (package
     (name "ghc-repline")
-    (version "0.4.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/repline/repline-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1dspwi28krinkxdd7waq4y6plz0dfmzz72885p9pcqp1r14qrhj3"))))
+    (version "0.4.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "repline" version))
+              (sha256
+               (base32
+                "0nldn02yqqmrxkzwzrx3v6hkb4y2hch48jkcr2qrw1dl0vqv70b1"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-exceptions ghc-haskeline))
+    (properties '((upstream-name . "repline")))
     (home-page "https://github.com/sdiehl/repline")
     (synopsis "Haskeline wrapper for GHCi-like REPL interfaces")
     (description
@@ -10742,23 +9764,20 @@ normal mtl transformers.")
 (define-public ghc-rerebase
   (package
     (name "ghc-rerebase")
-    (version "1.13.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/rerebase/rerebase-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0j50l96whwi65ir35nfhn24h6103zy1ilfjsqiax63ajzw169fkv"))))
+    (version "1.16.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "rerebase" version))
+              (sha256
+               (base32
+                "04pw2j4nh8x53axmfzp9d2plmiwxpxddgwcji0a8j24lkdyv8k32"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-rebase))
+    (properties '((upstream-name . "rerebase")))
+    (inputs (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
+    (description
+     "A rich drop-in replacement for @code{base}.  For details and
 documentation please visit @uref{https://github.com/nikita-volkov/rerebase,
 the project's home page}.")
     (license license:expat)))
@@ -10770,17 +9789,23 @@ the project's home page}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/resolv/resolv-"
-             version ".tar.gz"))
+       (uri (hackage-uri "resolv" version))
        (sha256
         (base32
          "0wa6wsh6i52q4ah2z0hgzlks325kigch4yniz0y15nw4skxbm8l1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "resolv")))
     (arguments
-     `(#:tests? #f ; TODO: tasty >=1.2.3 && <1.3 || >=1.3.1 && <1.4
-       #:cabal-revision
-       ("3" "0af5dsdyn04i76d012xhhfkkml10bqzl6q2yivkhf8rlvh1fiii5")))
+     `(;#:tests? #f ; tasty >=1.2.3 && <1.3 || >=1.3.1 && <1.4
+       #:cabal-revision ("5"
+                         "0df5y8bj9bxjmqnkvpwxvb17k70g1i174xs6vfrv9f1lys7xkqk1")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "resolv.cabal"
+               (("\\b(tasty)\\s+[^,]+" all dep)
+                dep)))))))
     (inputs
      (list ghc-base16-bytestring))
     (native-inputs
@@ -10801,13 +9826,12 @@ Unix systems.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "resource-pool-" version "/"
-                           "resource-pool-" version ".tar.gz"))
+       (uri (hackage-uri "resource-pool" version))
        (sha256
         (base32
          "04mw8b9djb14zp4rdi6h7mc3zizh597ffiinfbr4m0m8psifw9w6"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "resource-pool")))
     (inputs (list ghc-hashable ghc-monad-control ghc-transformers-base
                   ghc-vector))
     (home-page "https://github.com/bos/pool")
@@ -10820,26 +9844,18 @@ connections.")
 (define-public ghc-resourcet
   (package
     (name "ghc-resourcet")
-    (version "1.2.4.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/resourcet/"
-                           "resourcet-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0zrvnikw1a0r2j59k12fxikyrg0ki5a7xhqhjgfl9h6dqpz54h85"))))
+    (version "1.2.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "resourcet" version))
+              (sha256
+               (base32
+                "0d7xnpysrick56gxzkkj0mpblywbxaaldhziyl77am3822r3afzq"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-transformers-base
-           ghc-monad-control
-           ghc-transformers-compat
-           ghc-mmorph
-           ghc-exceptions
-           ghc-unliftio-core))
-    (native-inputs
-     (list ghc-lifted-base ghc-hspec))
-    (home-page "https://github.com/snoyberg/conduit")
+    (properties '((upstream-name . "resourcet")))
+    (inputs (list ghc-unliftio-core ghc-primitive))
+    (native-inputs (list ghc-hspec))
+    (home-page "http://github.com/snoyberg/conduit")
     (synopsis "Deterministic allocation and freeing of scarce resources")
     (description "ResourceT is a monad transformer which creates a region of
 code where you can safely allocate resources.")
@@ -10848,24 +9864,22 @@ code where you can safely allocate resources.")
 (define-public ghc-retry
   (package
     (name "ghc-retry")
-    (version "0.8.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "retry/retry-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0nwyis42xpmxfw8nz8qn59r3v7q0dkfzkzkhllgn30cdjbbmwhf5"))))
+    (version "0.9.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "retry" version))
+              (sha256
+               (base32
+                "1kafm17xk6hylr0lwa98wxjcx7z3rgnqi4fzxcks7dy9dz5ms7n1"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-exceptions ghc-random))
-    (native-inputs
-     (list ghc-hunit ghc-tasty ghc-tasty-hunit ghc-tasty-hedgehog
-           ghc-hedgehog))
-    (home-page "https://github.com/Soostone/retry")
+    (properties '((upstream-name . "retry")))
+    (inputs (list ghc-random ghc-mtl-compat ghc-unliftio-core))
+    (native-inputs (list ghc-hunit ghc-tasty ghc-tasty-hunit
+                         ghc-tasty-hedgehog ghc-hedgehog))
+    (home-page "http://github.com/Soostone/retry")
     (synopsis "Retry combinators for monadic actions that may fail")
-    (description "This package exposes combinators that can wrap
+    (description
+     "This package exposes combinators that can wrap
 arbitrary monadic actions.  They run the action and potentially retry
 running it with some configurable delay for a configurable number of
 times.  The purpose is to make it easier to work with IO and especially
@@ -10882,12 +9896,12 @@ the query instead of simply raising an exception.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/rfc5051/"
-                           "rfc5051-" version ".tar.gz"))
+       (uri (hackage-uri "rfc5051" version))
        (sha256
         (base32
          "0nri7js5ymywh2gi3li25wrkl1nf712qhbzw5hn46fib83qsq73k"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "rfc5051")))
     (home-page "https://hackage.haskell.org/package/rfc5051")
     (synopsis "Simple unicode collation as per RFC5051")
     (description
@@ -10901,32 +9915,29 @@ better for some purposes.")
 (define-public ghc-rio
   (package
     (name "ghc-rio")
-    (version "0.1.21.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/rio/rio-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "013m4xgsmg8h1rba9krxppz49lc5wz26gksms5zibsjj0w59m58h"))))
+    (version "0.1.22.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "rio" version))
+              (sha256
+               (base32
+                "0rpc4f2yvw0y6mqz9ykm3778j6srya7ssww691kpf9nb8vddgjb6"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-hspec ghc-quickcheck hspec-discover))
+    (properties '((upstream-name . "rio")))
+    (inputs (list ghc-hashable
+                  ghc-microlens
+                  ghc-microlens-mtl
+                  ghc-primitive
+                  ghc-typed-process
+                  ghc-unliftio
+                  ghc-unliftio-core
+                  ghc-unordered-containers
+                  ghc-vector))
+    (native-inputs (list ghc-quickcheck ghc-hspec hspec-discover))
     (home-page "https://github.com/commercialhaskell/rio#readme")
     (synopsis "Standard library for Haskell")
-    (description "This package works as a prelude replacement for Haskell,
+    (description
+     "This package works as a prelude replacement for Haskell,
 providing more functionality and types out of the box than the standard
 prelude (such as common data types like @code{ByteString} and
 @code{Text}), as well as removing common ``gotchas'', like partial
@@ -10950,7 +9961,16 @@ expose it from another module in the hierarchy.
                (base32
                 "10da5vls9l5i255bapms4b2r7dnwmxgsaa1cdll2lrmid5dikixr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "roman-numerals")))
     (inputs (list ghc-base-unicode-symbols))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "roman-numerals.cabal"
+               (("\\b(bytestring)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "https://github.com/roelvandijk/roman-numerals")
     (synopsis "Parsing and pretty printing of Roman numerals")
     (description
@@ -10967,14 +9987,12 @@ the conversion functions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/safe/safe-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "safe" version))
        (sha256
         (base32
          "18pp6cn9np9jgs01x9mac6wk41k34g86fx5ibfarbapqr1138115"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "safe")))
     (native-inputs
      (list ghc-quickcheck))
     (home-page "https://github.com/ndmitchell/safe#readme")
@@ -10987,22 +10005,20 @@ exceptions.")
 (define-public ghc-safe-exceptions
   (package
     (name "ghc-safe-exceptions")
-    (version "0.1.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "safe-exceptions/safe-exceptions-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "15a80s87f603w8l7fnaba2cyqx62042vvcidpjzyga2685wpyqv9"))))
+    (version "0.1.7.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "safe-exceptions" version))
+              (sha256
+               (base32
+                "1gxm61mccivrdz2qcfh5sim596nbrpapx0nli0bx7vx6z3c2ikli"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-hspec ghc-void hspec-discover))
-    (home-page "https://github.com/fpco/safe-exceptions")
+    (properties '((upstream-name . "safe-exceptions")))
+    (native-inputs (list ghc-hspec ghc-void hspec-discover))
+    (home-page "https://github.com/fpco/safe-exceptions#readme")
     (synopsis "Safe, consistent, and easy exception handling")
-    (description "Runtime exceptions - as exposed in @code{base} by the
+    (description
+     "Runtime exceptions - as exposed in @code{base} by the
 @code{Control.Exception} module - have long been an intimidating part of the
 Haskell ecosystem.  This package is intended to overcome this.  It provides a
 safe and simple API on top of the existing exception handling machinery.  The
@@ -11018,18 +10034,19 @@ handling wrong.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/safeio/"
-                           "safeio-" version ".tar.gz"))
+       (uri (hackage-uri "safeio" version))
        (sha256
         (base32
          "04g3070cbjdqj0h9l9ii6470xcbn40xfv4fr89a8yvnkdim9nyfm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "safeio")))
     (inputs
      (list ghc-conduit ghc-conduit-combinators ghc-exceptions
            ghc-resourcet))
     (native-inputs
      (list ghc-hunit ghc-test-framework ghc-test-framework-hunit
            ghc-test-framework-th))
+    (arguments (list #:tests? #f)) ; Fail to build: Module ‘Data.ByteString’ does not export ‘hPutStrLn’.
     (home-page "https://github.com/luispedro/safeio")
     (synopsis "Write output to disk atomically")
     (description
@@ -11044,12 +10061,12 @@ avoid the problem of partial intermediate files.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "SafeSemaphore/SafeSemaphore-" version ".tar.gz"))
+       (uri (hackage-uri "SafeSemaphore" version))
        (sha256
         (base32
          "0rpg9j6fy70i0b9dkrip9d6wim0nac0snp7qzbhykjkqlcvvgr91"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "SafeSemaphore")))
     (native-inputs
      (list ghc-hunit))
     (home-page "https://github.com/ChrisKuklewicz/SafeSemaphore")
@@ -11066,13 +10083,12 @@ are not exception safe and can be broken by @code{killThread}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/sandi/sandi-"
-             version ".tar.gz"))
+       (uri (hackage-uri "sandi" version))
        (sha256
         (base32
          "1ndgai8idlxyccvkz5zsgq06v58blc30i6hkky5b1sf5x6gs2h29"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "sandi")))
     (inputs
      (list ghc-stringsearch
            ghc-conduit
@@ -11094,14 +10110,12 @@ are not exception safe and can be broken by @code{killThread}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/say/say-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "say" version))
        (sha256
         (base32
          "1r5kffjfwpas45g74sip8glrj1m9nygrnxjm7xgw898rq9pnafgn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "say")))
     (native-inputs
      (list ghc-hspec hspec-discover ghc-unliftio))
     (home-page "https://github.com/fpco/say")
@@ -11126,14 +10140,12 @@ as sending some messages to the terminal - that has the following properties:
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/scientific/scientific-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "scientific" version))
        (sha256
         (base32
          "1aa3ngb71l2sh1x2829napnr1w285q0sn2f7z2wvi3ynng2238d3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "scientific")))
     (inputs
      (list ghc-integer-logarithms ghc-hashable ghc-primitive))
     (native-inputs
@@ -11144,6 +10156,9 @@ as sending some messages to the terminal - that has the following properties:
            ghc-tasty-quickcheck
            ghc-smallcheck
            ghc-quickcheck))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "1n67w1b64q59nn4845z3kr8rm0x0p7bi3cyp6n1dpnfs8k4l8x2i")))
     (home-page "https://github.com/basvandijk/scientific")
     (synopsis "Numbers represented using scientific notation")
     (description "This package provides @code{Data.Scientific}, which provides
@@ -11153,18 +10168,6 @@ and space efficient.  They are represented using
 notation}.")
     (license license:bsd-3)))
 
-(define-public ghc-scientific-bootstrap
-  (package
-    (inherit ghc-scientific)
-    (name "ghc-scientific-bootstrap")
-    (arguments `(#:tests? #f))
-    (inputs
-     `(("ghc-integer-logarithms" ,ghc-integer-logarithms-bootstrap)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-primitive" ,ghc-primitive)))
-    (native-inputs '())
-    (properties '((hidden? #t)))))
-
 (define-public ghc-sdl
   (package
     (name "ghc-sdl")
@@ -11172,14 +10175,12 @@ notation}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/SDL/SDL-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "SDL" version))
        (sha256
         (base32
          "00y67v80a8l09i3k76z09lg25kw72ivl09nag8ckdlk4a0cfnzfq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "SDL")))
     (inputs
      (list sdl))
     (home-page "https://hackage.haskell.org/package/SDL")
@@ -11194,22 +10195,22 @@ award winning Linux port of \"Civilization: Call To Power.\"")
 (define-public ghc-sdl2
   (package
     (name "ghc-sdl2")
-    (version "2.5.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "sdl2/sdl2-" version ".tar.gz"))
-       (sha256
-        (base32
-         "08l24cb92spnx3bn26bj0z2cszpsawhaa9vvhblvsr3d6z76065q"))))
+    (version "2.5.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "sdl2" version))
+              (sha256
+               (base32
+                "1g35phifz49kxk48s8jmgglxhxl79cbzc1cg2qlgk0vdpxpin8ym"))))
     (build-system haskell-build-system)
-    (arguments '(#:tests? #f)) ; tests require graphical environment
-    (inputs
-     (list ghc-exceptions ghc-linear ghc-statevar ghc-vector sdl2))
-    (native-inputs
-     (list ghc-weigh pkg-config))
-    (home-page "https://hackage.haskell.org/package/sdl2")
+    (properties '((upstream-name . "sdl2")))
+    (inputs (list ghc-statevar ghc-vector ghc-linear sdl2))
+    (native-inputs (list ghc-weigh pkg-config))
+    (arguments
+     `(#:tests? #f ; Needs a graphics card.
+       #:cabal-revision ("2"
+                         "1yxzq4gb6ig3d94lc76i5d50fa0j1fxr1wdlmgwhkvlfd4xnh6sg")))
+    (home-page "http://hackage.haskell.org/package/sdl2")
     (synopsis "High- and low-level bindings to the SDL library")
     (description
      "This package contains bindings to the SDL 2 library, in both high- and
@@ -11225,21 +10226,18 @@ programming.")
 (define-public ghc-sdl2-image
   (package
     (name "ghc-sdl2-image")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/sdl2-image/"
-                           "sdl2-image-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1pr6dkg73cy9z0w54lrkj9c5bhxj56nl92lxikjy8kz6nyr455rr"))))
+    (version "2.1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "sdl2-image" version))
+              (sha256
+               (base32
+                "03cjlmj844gmfxqn9mp8333hpsg227kaipgs6g68xwg0cvch696j"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-sdl2 sdl2-image))
-    (native-inputs
-     (list pkg-config))
-    (home-page "https://hackage.haskell.org/package/sdl2-image")
+    (properties '((upstream-name . "sdl2-image")))
+    (inputs (list ghc-sdl2 sdl2-image))
+    (native-inputs (list pkg-config))
+    (home-page "http://hackage.haskell.org/package/sdl2-image")
     (synopsis "Bindings to SDL2_image")
     (description "This package provides Haskell bindings to
 @code{SDL2_image}.")
@@ -11248,26 +10246,19 @@ programming.")
 (define-public ghc-sdl2-mixer
   (package
     (name "ghc-sdl2-mixer")
-    (version "1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/sdl2-mixer/"
-                           "sdl2-mixer-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1k8avyccq5l9z7bwxigim312yaancxl1sr3q6a96bcm7pnhiak0g"))))
+    (version "1.2.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "sdl2-mixer" version))
+              (sha256
+               (base32
+                "16fgnxq2nmifbz3lrr7dn1qj57l5f2kzv124lya1fjaxmwk1h52q"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-data-default-class
-           ghc-lifted-base
-           ghc-monad-control
-           ghc-sdl2
-           ghc-vector
-           sdl2-mixer))
-    (native-inputs
-     (list pkg-config))
-    (home-page "https://hackage.haskell.org/package/sdl2-mixer")
+    (properties '((upstream-name . "sdl2-mixer")))
+    (inputs (list ghc-data-default-class ghc-lifted-base ghc-monad-control
+                  ghc-sdl2 ghc-vector sdl2-mixer))
+    (native-inputs (list pkg-config))
+    (home-page "http://hackage.haskell.org/package/sdl2-mixer")
     (synopsis "Bindings to SDL2 mixer")
     (description "This package provides Haskell bindings to
 @code{SDL2_mixer}.")
@@ -11280,14 +10271,12 @@ programming.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/SDL-image/SDL-image-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "SDL-image" version))
        (sha256
         (base32
          "1gxwrvswgwjw6g7ym52gik22l9l3ljy592phv97jdmcf3gi6qcg1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "SDL-image")))
     (arguments
      `(#:configure-flags
        (let* ((sdl-image (assoc-ref %build-inputs "sdl-image"))
@@ -11309,14 +10298,12 @@ PNG, PNM, TGA, TIFF, XCF, XPM, XV.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/SDL-mixer/SDL-mixer-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "SDL-mixer" version))
        (sha256
         (base32
          "0k26hqgdh789ka3mv4dsk6rin6x6vwcs6hjmnsqq7j3mnrh1342r"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "SDL-mixer")))
     (arguments
      `(#:configure-flags
        (let* ((sdl-mixer (assoc-ref %build-inputs "sdl-mixer"))
@@ -11339,13 +10326,12 @@ MIDI, Ogg Vorbis, and SMPEG MP3 libraries.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "securemem-" version "/"
-                           "securemem-" version ".tar.gz"))
+       (uri (hackage-uri "securemem" version))
        (sha256
         (base32
          "19hnw2cfbsfjynxq1bq9f6djbxhsc1k751ml0y1ab3ah913mm29j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "securemem")))
     (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
@@ -11357,30 +10343,28 @@ a memory chunk that will be auto-scrubbed after it run out of scope.")
 (define-public ghc-semialign
   (package
     (name "ghc-semialign")
-    (version "1.1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/semialign/semialign-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "11qs4imy3cq4cx9mm6g30r6qk3rngqrmz7lkl5379gs1yvgvs44q"))))
+    (version "1.2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "semialign" version))
+              (sha256
+               (base32
+                "0ci1jpp37p1lzyjxc1bljd6zgg407qmkl9s36b50qjxf85q6j06r"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     "Align and Zip type-classes from the common Semialign ancestor")
+    (properties '((upstream-name . "semialign")))
+    (inputs (list ghc-these
+                  ghc-hashable
+                  ghc-indexed-traversable
+                  ghc-indexed-traversable-instances
+                  ghc-tagged
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-semigroupoids))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0dbcdnksik508i12arh3s6bis6779lx5f1df0jkc0bp797inhd7f")))
+    (home-page "https://github.com/haskellari/these")
+    (synopsis "Align and Zip type-classes from the common Semialign ancestor")
     (description
      "The major use of @code{These} of this is provided by the
 @code{align} member of @code{Semialign} class, representing a
@@ -11393,33 +10377,29 @@ class, forming lattice-like structure.")
 (define-public ghc-semigroupoids
   (package
     (name "ghc-semigroupoids")
-    (version "5.3.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/semigroupoids/semigroupoids-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0glhqc9x8i5z3bdg23xvl2lfns95msid3h3x0jksna7i6c8j869n"))))
+    (version "5.3.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "semigroupoids" version))
+              (sha256
+               (base32
+                "169pjrm7lxjxrqj5q1iyl288bx5nj8n0pf2ri1cclxccqnvcsibd"))))
     (build-system haskell-build-system)
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (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")
+    (properties '((upstream-name . "semigroupoids")))
+    (inputs (list ghc-base-orphans
+                  ghc-bifunctors
+                  ghc-transformers-compat
+                  ghc-generic-deriving
+                  ghc-contravariant
+                  ghc-distributive
+                  ghc-comonad
+                  ghc-tagged
+                  ghc-hashable
+                  ghc-unordered-containers))
+    (home-page "http://github.com/ekmett/semigroupoids")
     (synopsis "Semigroupoids operations for Haskell")
-    (description "This library provides a wide array of (semi)groupoids and
+    (description
+     "This library provides a wide array of (semi)groupoids and
 operations for working with them.  A @code{Semigroupoid} is a @code{Category}
 without the requirement of identity arrows for every object in the category.
 A @code{Category} is any @code{Semigroupoid} for which the Yoneda lemma holds.
@@ -11427,28 +10407,26 @@ Finally, to work with these weaker structures it is beneficial to have
 containers that can provide stronger guarantees about their contents, so
 versions of @code{Traversable} and @code{Foldable} that can be folded with
 just a @code{Semigroup} are added.")
-    (license license:bsd-3)))
+    (license license:bsd-2)))
 
 (define-public ghc-semigroups
   (package
     (name "ghc-semigroups")
-    (version "0.19.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/semigroups/semigroups-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0h1sl3i6k8csy5zkkpy65rxzds9wg577z83aaakybr3n1gcv4855"))))
+    (version "0.20")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "semigroups" version))
+              (sha256
+               (base32
+                "1qbk6scp1rzb69dy8mz26p6az5vi16g2lzwmwnfshh3br4rjwbch"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-nats ghc-tagged ghc-unordered-containers ghc-hashable))
-    (home-page "https://github.com/ekmett/semigroups/")
+    (properties '((upstream-name . "semigroups")))
+    (inputs (list ghc-nats ghc-tagged ghc-hashable ghc-unordered-containers
+                  ghc-transformers-compat))
+    (home-page "http://github.com/ekmett/semigroups/")
     (synopsis "Semigroup operations for Haskell")
-    (description "This package provides semigroups for Haskell.  In
+    (description
+     "This package provides semigroups for Haskell.  In
 mathematics, a semigroup is an algebraic structure consisting of a set
 together with an associative binary operation.  A semigroup generalizes a
 monoid in that there might not exist an identity element.  It
@@ -11473,13 +10451,11 @@ semigroup.")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/semirings/semirings-"
-               version
-               ".tar.gz"))
+        (uri (hackage-uri "semirings" version))
         (sha256
           (base32 "16q535bvjl7395sqkx6zlw48y4fzr7irp44pcp7w9irpn4cncdcr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "semirings")))
     (inputs
       (list ghc-base-compat-batteries ghc-hashable ghc-unordered-containers))
     (arguments
@@ -11503,31 +10479,28 @@ by @code{0} annihilates R.")
 (define-public ghc-serialise
   (package
     (name "ghc-serialise")
-    (version "0.2.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/serialise/serialise-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0vp4wyxpximpx10pssfgdsir1pc23zb62fg3kj3iblpzqfrryy69"))))
+    (version "0.2.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "serialise" version))
+              (sha256
+               (base32
+                "05m5h5vfjp4wvh6y7j2f3d4c3l6gxww2n1v38vqrjacpw641izwk"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-cborg
-           ghc-half
-           ghc-hashable
-           ghc-primitive
-           ghc-unordered-containers
-           ghc-vector))
-    (native-inputs
-     (list ghc-quickcheck ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck
-           ghc-quickcheck-instances))
+    (properties '((upstream-name . "serialise")))
+    (inputs (list ghc-cborg
+                  ghc-half
+                  ghc-hashable
+                  ghc-primitive
+                  ghc-strict
+                  ghc-these
+                  ghc-unordered-containers
+                  ghc-vector))
+    (native-inputs (list ghc-quickcheck ghc-tasty ghc-tasty-hunit
+                         ghc-tasty-quickcheck ghc-quickcheck-instances))
     (arguments
-     `(#:cabal-revision
-       ("2" "1qcsp15v0swxy2qlvc40fil09zq32y3wl00y3passc2a4b4yhmr4")))
+     `(#:cabal-revision ("1"
+                         "0rlsi4jq2d1dak2fps5flcn27lywjlhvsi0x2k2lvnjqawnfb3f9")))
     (home-page "https://github.com/well-typed/cborg")
     (synopsis "Binary serialisation library for Haskell values")
     (description
@@ -11554,14 +10527,12 @@ convenient command-line utility for working with CBOR data.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/setenv/setenv-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "setenv" version))
        (sha256
         (base32
          "0cnbgrvb9byyahb37zlqrj05rj25v190crgcw8wmlgf0mwwxyn73"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "setenv")))
     (home-page "https://hackage.haskell.org/package/setenv")
     (synopsis "Library for setting environment variables")
     (description "This package provides a Haskell library for setting
@@ -11574,13 +10545,15 @@ environment variables.")
     (version "1.0.0.10")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/setlocale-"
-                    version "/setlocale-" version ".tar.gz"))
+              (uri (hackage-uri "setlocale" version))
               (sha256
                (base32
                 "19rv89jkhq5ic7j5rzpygnmsbzim2mn8ip0m292za613q88gywir"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "setlocale")))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1k4idj2xl9dg5nfz128xazrrydz9mgm3bbjrc0cyby8n3c0ij9x1")))
     (home-page "https://hackage.haskell.org/package/setlocale")
     (synopsis "Haskell bindings to setlocale")
     (description "This package provides Haskell bindings to the
@@ -11590,28 +10563,28 @@ environment variables.")
 (define-public ghc-shakespeare
   (package
     (name "ghc-shakespeare")
-    (version "2.0.25")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "shakespeare-" version "/"
-                           "shakespeare-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1fjv3yg425d87d3dih0l3ff95g5a5yp9w85m58sjara6xqivj9s4"))))
+    (version "2.0.30")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "shakespeare" version))
+              (sha256
+               (base32
+                "038yprj9yig2xbjs2pqsjzs4pl9ir2frdz9wn2pklc4kvdazx3aw"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "shakespeare")))
     (inputs (list ghc-aeson
                   ghc-blaze-markup
                   ghc-blaze-html
+                  ghc-file-embed
                   ghc-vector
-                  ghc-th-lift
                   ghc-unordered-containers
-                  ghc-scientific))
+                  ghc-scientific
+                  ghc-th-lift))
     (native-inputs (list ghc-hspec ghc-hunit hspec-discover))
-    (home-page "https://www.yesodweb.com/book/shakespearean-templates")
+    (home-page "http://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
+    (description
+     "This Haskell package provides a family of type-safe
 templates with simple variable interpolation.  Shakespeare templates can
 be used inline with a quasi-quoter or in an external file and it
 interpolates variables according to the type being inserted.")
@@ -11620,31 +10593,26 @@ interpolates variables according to the type being inserted.")
 (define-public ghc-shelly
   (package
     (name "ghc-shelly")
-    (version "1.9.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/shelly/shelly-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1kma77gixhyciimh19p64h1ndbcrs9qhk8fgyv71iqh5q57zvday"))))
+    (version "1.10.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "shelly" version))
+              (sha256
+               (base32
+                "0hgzh0rrhipir8378civ5mwvkvcsd063jm2pyx8dqngdynph0h65"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "shelly")))
+    (inputs (list ghc-async
+                  ghc-enclosed-exceptions
+                  ghc-lifted-async
+                  ghc-lifted-base
+                  ghc-monad-control
+                  ghc-transformers-base
+                  ghc-unix-compat))
+    (native-inputs (list ghc-hspec ghc-hspec-contrib ghc-hunit))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "07c1rjwvg2ldam6yaksvrr9f703b7d1rcw0482ns5yi2f7y1kczp")))
     (home-page "https://github.com/yesodweb/Shelly.hs")
     (synopsis "Shell-like (systems) programming in Haskell")
     (description
@@ -11655,25 +10623,30 @@ spirit to POSIX shells.  Shelly is originally forked  from the Shellish package.
 (define-public ghc-silently
   (package
     (name "ghc-silently")
-    (version "1.2.5.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/silently/silently-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1lgs1gsr5dp0x21diqn4l03fxgai2kgdmj85gqp0iz3zykvbmjbz"))))
+    (version "1.2.5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "silently" version))
+              (sha256
+               (base32
+                "0wk3yci4r9v0vwyzylj3k07damz17jwc6n6imwqahf4lsapsz7ds"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ;; circular dependency with nanospec
+    (properties '((upstream-name . "silently")))
+    (native-inputs (list ghc-nanospec ghc-temporary))
     (home-page "https://github.com/hspec/silently")
     (synopsis "Prevent writing to stdout")
     (description "This package provides functions to prevent or capture
 writing to stdout and other handles.")
     (license license:bsd-3)))
 
+(define-public ghc-silently-bootstrap
+  (package
+    (inherit ghc-silently)
+    (name "ghc-silently-bootstrap")
+    (arguments `(#:tests? #f))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
 (define-public ghc-simple-reflect
   (package
     (name "ghc-simple-reflect")
@@ -11681,14 +10654,12 @@ writing to stdout and other handles.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/simple-reflect/simple-reflect-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "simple-reflect" version))
        (sha256
         (base32
          "0ayvrx5cm8n6db21jiyjmk5h93pw7cz1707hih09hlhk9jh5x0h7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "simple-reflect")))
     (home-page
      "https://twanvl.nl/blog/haskell/simple-reflection-of-expressions")
     (synopsis
@@ -11708,13 +10679,12 @@ them.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "simple-sendfile-" version "/"
-                           "simple-sendfile-" version ".tar.gz"))
+       (uri (hackage-uri "simple-sendfile" version))
        (sha256
         (base32
          "112j0qfsjazf9wg1zywf7hjybgsiywk9wkm27yi8xzv27hmlv1mn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "simple-sendfile")))
     (inputs
      (list ghc-conduit ghc-conduit-extra ghc-network ghc-resourcet))
     (native-inputs
@@ -11728,30 +10698,17 @@ are the bottleneck of web servers.")
 (define-public ghc-size-based
   (package
     (name "ghc-size-based")
-    (version "0.1.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "size-based/size-based-" version ".tar.gz"))
-       (sha256
-        (base32
-         "06hmlic0n73ncwlkpx49xlv09bzsrr27ncnp5byhzlknak2gd7vp"))))
+    (version "0.1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "size-based" version))
+              (sha256
+               (base32
+                "1x2z8iw4jgcp6xirclifjhh3rvyjy5xgqrd6lcv4gifj859sfjd2"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-dictionary-sharing ghc-testing-type-modifiers
-           ghc-template-haskell))
-    (arguments
-     `(#:cabal-revision
-       ("1" "0kax1ypjyglkn6iff1x4yz12y7f2n249m95xvdhrc63hsa4xlcqv")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "size-based.cabal"
-               (("(template-haskell)\\s+.+$" all dep)
-                (string-append dep "\n"))))))))
-    (home-page "https://hackage.haskell.org/package/size-based")
+    (properties '((upstream-name . "size-based")))
+    (inputs (list ghc-dictionary-sharing ghc-testing-type-modifiers))
+    (home-page "http://hackage.haskell.org/package/size-based")
     (synopsis "Sized functors for size-based enumerations")
     (description "This library provides a framework for size-based
 enumerations.")
@@ -11760,16 +10717,15 @@ enumerations.")
 (define-public ghc-skylighting-core
   (package
     (name "ghc-skylighting-core")
-    (version "0.10.5.2")
+    (version "0.13.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "skylighting-core/skylighting-core-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "skylighting-core" version))
               (sha256
                (base32
-                "0bskci0gng6nf324wna9ss4xbr1mwjkgk3mlfkr96r1m3wza5g3d"))))
+                "0iwzfgynj3l8rnvvrl4kg0i1n31rz15da8cf1943gw1vcfh6w585"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "skylighting-core")))
     (inputs
      (list ghc-aeson
            ghc-ansi-terminal
@@ -11798,21 +10754,115 @@ supported by that framework can be added.  An optional command-line program is
 provided.  Skylighting is intended to be the successor to highlighting-kate.")
     (license license:gpl2)))
 
+(define-public ghc-skylighting-format-blaze-html
+  (package
+    (name "ghc-skylighting-format-blaze-html")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "skylighting-format-blaze-html" version))
+              (sha256
+               (base32
+                "04zg92x1jnzv6hac6wdgksgma7gi5g82x2kdxk8r7pk9yd6rn4xi"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "skylighting-format-blaze-html")))
+    (inputs (list ghc-skylighting-core ghc-blaze-html))
+    (home-page "https://github.com/jgm/skylighting")
+    (synopsis "HTML formatter for skylighting syntax highlighting library")
+    (description
+     "This module allows tokens produced by skylighting-core to be rendered as HTML.")
+    (license license:bsd-3)))
+
+(define-public ghc-skylighting-format-latex
+  (package
+    (name "ghc-skylighting-format-latex")
+    (version "0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "skylighting-format-latex" version))
+              (sha256
+               (base32
+                "0y7v5aifwar24i976pw32scfdywjwy2ad05ajhdf8l84nsd6rdlp"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "skylighting-format-latex")))
+    (inputs (list ghc-skylighting-core))
+    (home-page "https://github.com/jgm/skylighting")
+    (synopsis "LaTeX formatter for skylighting syntax highlighting library")
+    (description
+     "This module allows tokens produced by skylighting-core to be rendered as LaTeX
+macros.")
+    (license license:bsd-3)))
+
+(define-public ghc-skylighting-format-context
+  (package
+    (name "ghc-skylighting-format-context")
+    (version "0.1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "skylighting-format-context" version))
+              (sha256
+               (base32
+                "1d4nf16wl2l4r627qnph09x21xwcq03r7bznqm08d4di1z241xv0"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "skylighting-format-context")))
+    (inputs (list ghc-skylighting-core))
+    (home-page "https://github.com/jgm/skylighting")
+    (synopsis "ConTeXt formatter for skylighting syntax highlighting library")
+    (description
+     "This module allows tokens produced by skylighting-core to be rendered as ConTeXt
+commands.")
+    (license license:bsd-3)))
+
+(define-public ghc-skylighting-format-ansi
+  (package
+    (name "ghc-skylighting-format-ansi")
+    (version "0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "skylighting-format-ansi" version))
+              (sha256
+               (base32
+                "16qavv10g5yqwi60axj7q595ll605vmnfjgdxyi029nd5rnaipr3"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "skylighting-format-ansi")))
+    (inputs (list ghc-skylighting-core ghc-ansi-terminal ghc-colour))
+    (home-page "https://github.com/jgm/skylighting")
+    (synopsis "ANSI formatter for skylighting syntax highlighting library")
+    (description
+     "This module allows tokens produced by skylighting-core to be rendered as ANSI
+colored text.")
+    (license license:bsd-3)))
+
 (define-public ghc-skylighting
   (package
-    (inherit ghc-skylighting-core)
     (name "ghc-skylighting")
-    (version "0.10.5.2")
+    (version "0.13.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/skylighting-"
-                                  version "/skylighting-" version ".tar.gz"))
+              (uri (hackage-uri "skylighting" version))
               (sha256
                (base32
-                "152ywiy7h04xjy0fdl571jwahl6c9350isqbm4p0na4cjd9cczzh"))))
-    (inputs
-     (modify-inputs (package-inputs ghc-skylighting-core)
-       (prepend ghc-skylighting-core)))))
+                "0dh4k39ddqca5px2d06ni8n9x3mifvkwd5i16077l472dwjcs879"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "skylighting")))
+    (inputs (list ghc-skylighting-core
+                  ghc-skylighting-format-ansi
+                  ghc-skylighting-format-context
+                  ghc-skylighting-format-latex
+                  ghc-skylighting-format-blaze-html
+                  ghc-pretty-show
+                  ghc-blaze-html))
+    (home-page "https://github.com/jgm/skylighting")
+    (synopsis "syntax highlighting library")
+    (description
+     "Skylighting is a syntax highlighting library with support for over one hundred
+languages.  It derives its tokenizers from XML syntax definitions used by KDE's
+KSyntaxHighlighting framework, so any syntax supported by that framework can be
+added.  An optional command-line program is provided.  Skylighting is intended
+to be the successor to highlighting-kate.  This package provides generated
+syntax modules based on the KDE XML definitions provided by the
+@code{skylighting-core} package.")
+    (license license:gpl2)))
 
 (define-public ghc-smallcheck
   (package
@@ -11821,14 +10871,12 @@ provided.  Skylighting is intended to be the successor to highlighting-kate.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/smallcheck/smallcheck-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "smallcheck" version))
        (sha256
         (base32
          "0sf87zjlrgjw7q6a0499g2ywx66zvpv6rg6953fjc18fnl8rs7z4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "smallcheck")))
     (inputs
      (list ghc-logict))
     (home-page
@@ -11845,12 +10893,12 @@ automatically by SmallCheck.")
     (version "0.6.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "socks/socks-" version ".tar.gz"))
+              (uri (hackage-uri "socks" version))
               (sha256
                (base32
                 "0wvaxy3dkv97wrncjv1rxrmjr4014hgxz82kixvcwqdhidalfi3k"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "socks")))
     (inputs
      (list ghc-cereal ghc-basement ghc-network))
     (home-page "https://github.com/vincenthz/hs-socks")
@@ -11862,19 +10910,22 @@ automatically by SmallCheck.")
 (define-public ghc-sop-core
   (package
     (name "ghc-sop-core")
-    (version "0.5.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "sop-core/sop-core-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1c4xk4bw1ij4gpgy35iv08bhcxhv1siy55qnvp2xd6wcc3qnghys"))))
+    (version "0.5.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "sop-core" version))
+              (sha256
+               (base32
+                "0rbj56icbaqlcxx5xwvbx4n4vmyv6cfcv7s45n1fv3drahigvgw7"))))
     (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/sop-core")
+    (properties '((upstream-name . "sop-core")))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1p6zyqja021gyndskn1qnj29glqr0hldyhxplnpxz06hz4xqwngz")))
+    (home-page "http://hackage.haskell.org/package/sop-core")
     (synopsis "True Sums of Products")
-    (description "This package provides an implementation of
+    (description
+     "This package provides an implementation of
 @math{n}-ary sums and @math{n}-ary products.  The module @code{Data.SOP}
 is the main module of this library and contains more detailed
 documentation.  The main use case of this package is to serve as the
@@ -11889,15 +10940,17 @@ generics-sop}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/special-values/"
-             "special-values-" version ".tar.gz"))
+       (uri (hackage-uri "special-values" version))
        (sha256
         (base32
          "1kkdw2c4d2hha99v9f89ahmifjxp7fxmxyfwq9a8xk6s0h9xs51w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "special-values")))
     (inputs
      (list ghc-scientific ghc-ieee754 ghc-nats))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1vv5gydjd65jniifl3mnch8bzvpvdahi913gsa3kv5zijwhad699")))
     (home-page
      "https://github.com/minad/special-values#readme")
     (synopsis "Typeclass providing special values")
@@ -11909,26 +10962,20 @@ used for example by QuickCheck, see quickcheck-special."  )
 (define-public ghc-split
   (package
     (name "ghc-split")
-    (version "0.2.3.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/split/split-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0ahzdjcxw5wywr3w4msspia99k6fkckddam1m5506h4z9h8fa7r7"))))
+    (version "0.2.3.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "split" version))
+              (sha256
+               (base32
+                "0n9ip49laq5jwqw0c43lhf69ii8y4lwci9j6d5bjnjim23bai2mz"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "06pmlvyrz4rr7rsrghpyrdypprphm9522rvnz4l3i8333n4pb304")))
-    (native-inputs
-     (list ghc-quickcheck))
-    (home-page "https://hackage.haskell.org/package/split")
+    (properties '((upstream-name . "split")))
+    (native-inputs (list ghc-quickcheck))
+    (home-page "http://hackage.haskell.org/package/split")
     (synopsis "Combinator library for splitting lists")
-    (description "This package provides a collection of Haskell functions for
+    (description
+     "This package provides a collection of Haskell functions for
 splitting lists into parts, akin to the @code{split} function found in several
 mainstream languages.")
     (license license:bsd-3)))
@@ -11936,30 +10983,36 @@ mainstream languages.")
 (define-public ghc-splitmix
   (package
     (name "ghc-splitmix")
-    (version "0.1.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "splitmix/splitmix-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0das5n44dhlcv5i233iakx37d17kidqvhrvp6w9nd7hc015ry026"))))
+    (version "0.1.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "splitmix" version))
+              (sha256
+               (base32
+                "1apck3nzzl58r0b9al7cwaqwjhhkl8q4bfrx14br2yjf741581kd"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (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")
+    (properties '((upstream-name . "splitmix")))
+    (native-inputs (list ghc-hunit
+                         ghc-base-compat
+                         ghc-hunit
+                         ghc-math-functions
+                         ghc-test-framework
+                         ghc-test-framework-hunit
+                         ghc-async
+                         ghc-base-compat-batteries
+                         ghc-random
+                         ghc-tf-random
+                         ghc-vector
+                         ghc-base-compat-batteries
+                         ghc-hunit))
+    (arguments
+     `(#:tests? #f ; Missing library testu01.
+       #:cabal-revision ("1"
+                         "1iqlg2d4mybqwzwp67c5a1yxzd47cbp4f7mrpa6d0ckypis2akl0")))
+    (home-page "http://hackage.haskell.org/package/splitmix")
     (synopsis "Fast and splittable pseudorandom number generator")
-    (description "This package provides a Pure Haskell implementation of the
+    (description
+     "This package provides a Pure Haskell implementation of the
 SplitMix pseudorandom number generator.  SplitMix is a \"splittable\"
 pseudorandom number generator that is quite fast: 9 64-bit
 arithmetic/logical operations per 64 bits generated.  SplitMix is tested
@@ -11988,20 +11041,18 @@ internal state).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/spoon/spoon-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "spoon" version))
        (sha256
         (base32
          "1m41k0mfy6fpfrv2ym4m5jsjaj9xdfl2iqpppd3c4d0fffv51cxr"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "spoon")))
     (arguments
      `(#:cabal-revision
        ("1"
         "09s5jjcsg4g4qxchq9g2l4i9d5zh3rixpkbiysqcgl69kj8mwv74")))
     (home-page
-     "http://hackage.haskell.org/package/spoon")
+     "https://hackage.haskell.org/package/spoon")
     (synopsis
      "Catch errors thrown from pure computations")
     (description
@@ -12019,14 +11070,12 @@ Note that this suffers from the
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/StateVar/StateVar-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "StateVar" version))
        (sha256
         (base32
          "098q4lk60najzpbfal4bg4sh7izxm840aa5h4ycaamjn77d3jjsy"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "StateVar")))
     (home-page "https://hackage.haskell.org/package/StateVar")
     (synopsis "State variables for Haskell")
     (description "This package provides state variables, which are references
@@ -12036,42 +11085,39 @@ in the @code{IO} monad, like @code{IORef}s or parts of the OpenGL state.")
 (define-public ghc-statistics
   (package
     (name "ghc-statistics")
-    (version "0.15.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "statistics-" version "/"
-                           "statistics-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0j9awbg47fzb58k5z2wgkp6a0042j7hqrl1g6lyflrbsfswdp5n4"))))
+    (version "0.16.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "statistics" version))
+              (sha256
+               (base32
+                "15yr0w25dqaqz16635qxkxvr6nj6mkjj9pl7wzw5yr3pn84xjryq"))))
     (build-system haskell-build-system)
-    (inputs
-     (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")
+    (properties '((upstream-name . "statistics")))
+    (inputs (list ghc-math-functions
+                  ghc-mwc-random
+                  ghc-random
+                  ghc-aeson
+                  ghc-async
+                  ghc-primitive
+                  ghc-dense-linear-algebra
+                  ghc-parallel
+                  ghc-vector
+                  ghc-vector-algorithms
+                  ghc-vector-th-unbox
+                  ghc-vector-binary-instances
+                  ghc-data-default-class))
+    (native-inputs (list ghc-quickcheck
+                         ghc-erf
+                         ghc-ieee754
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-tasty-expected-failure))
+    (home-page "https://github.com/haskell/statistics")
     (synopsis "Haskell library of statistical types, data, and functions")
-    (description "This library provides a number of common functions
+    (description
+     "This library provides a number of common functions
 and types useful in statistics.  We focus on high performance, numerical
 robustness, and use of good algorithms.  Where possible, we provide references
 to the statistical literature.
@@ -12100,13 +11146,12 @@ and regression and autocorrelation analysis.
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "stm-chans-" version "/"
-                           "stm-chans-" version ".tar.gz"))
+       (uri (hackage-uri "stm-chans" version))
        (sha256
         (base32
          "04hafqjq8ngvhcavkfx88a0zky8yc7i18q2n9ajav03kns1kwvpa"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "stm-chans")))
     (home-page "https://hackage.haskell.org/package/stm-chans")
     (synopsis "Additional types of channels for ghc-stm")
     (description "This Haskell package offers a collection of channel types,
@@ -12121,12 +11166,12 @@ features.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/stm-conduit/"
-                           "stm-conduit-" version ".tar.gz"))
+       (uri (hackage-uri "stm-conduit" version))
        (sha256
         (base32
          "0hhlxvpp7mah8dcvkknh6skx44jfk3092zz2w52zlr255bkmn3p8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "stm-conduit")))
     (inputs
      (list ghc-stm-chans
            ghc-cereal
@@ -12159,11 +11204,11 @@ source and a sink.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/STMonadTrans"
-                           "/STMonadTrans-" version ".tar.gz"))
+       (uri (hackage-uri "STMonadTrans" version))
        (sha256
         (base32 "0rvhh0hhwz601ibpzisry7xf3j61r5sxfgp47imaa37i5bvrlynb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "STMonadTrans")))
     (arguments `(#:tests? #f)) ; TODO: Loops.
     (inputs (list ghc-fail))
 ;    (native-inputs
@@ -12185,12 +11230,11 @@ for strict state threads.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/storable-complex/storable-complex-"
-             version ".tar.gz"))
+       (uri (hackage-uri "storable-complex" version))
        (sha256
         (base32 "0fnwbfmd5vsaaqvf9182qdcjrzcfjd1zhdyvjwzifbwvn6r9kx4s"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "storable-complex")))
     (inputs
      (list ghc-base-orphans))
     (home-page "https://github.com/cartazio/storable-complex")
@@ -12203,23 +11247,21 @@ and Fortran complex data types.")
 (define-public ghc-storable-record
   (package
     (name "ghc-storable-record")
-    (version "0.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append
-         "https://hackage.haskell.org/package/storable-record/"
-         "storable-record-" version ".tar.gz"))
-       (sha256
-        (base32
-         "17nf0bx3g169cpslf8prr5h5lvxl389m23rbsyb3kdai45fibpwf"))))
+    (version "0.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "storable-record" version))
+              (sha256
+               (base32
+                "1d4c1ccbrpq8rnacsjib9nmxhgxk9yb1zxx1nvfavhqhv8nwq2fd"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-semigroups ghc-utility-ht ghc-storablevector ghc-timeit))
-    (home-page "https://hackage.haskell.org/package/storable-record")
+    (properties '((upstream-name . "storable-record")))
+    (inputs (list ghc-quickcheck ghc-semigroups ghc-utility-ht
+                  ghc-storablevector ghc-timeit))
+    (home-page "http://code.haskell.org/~thielema/storable-record/")
     (synopsis "Elegant definition of Storable instances for records")
-    (description "With this package you can build a Storable instance of
+    (description
+     "With this package you can build a Storable instance of
 a record type from Storable instances of its elements in an elegant way.
 It does not do any magic, just a bit arithmetic to compute the right
 offsets, that would be otherwise done manually or by a preprocessor like
@@ -12237,13 +11279,12 @@ alignment of the record elements.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/storable-tuple/"
-         "storable-tuple-" version ".tar.gz"))
+        (hackage-uri "storable-tuple" version))
        (sha256
         (base32
          "0dfzhxgkn1l6ls7zh6iifhyvhm8l47n40z0ar23c6ibsa94w1ynw"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "storable-tuple")))
     (inputs
      (list ghc-storable-record ghc-utility-ht ghc-base-orphans))
     (home-page "https://hackage.haskell.org/package/storable-tuple")
@@ -12263,13 +11304,12 @@ together.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/storablevector/storablevector-"
-         version ".tar.gz"))
+        (hackage-uri "storablevector" version))
        (sha256
         (base32
          "06fgxbnc5vwmiv7dxywj7ncjhmxv0wjs0bys5hza6mrwn3sw5r2w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "storablevector")))
     (inputs
      (list ghc-non-negative
            ghc-utility-ht
@@ -12277,6 +11317,13 @@ together.")
            ghc-unsafe
            ghc-quickcheck
            ghc-syb))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "storablevector.cabal"
+               (("bytestring >=0\\.9 && <0\\.11") "bytestring")))))))
     (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
@@ -12296,17 +11343,16 @@ a library that provides fusion with lazy lists.")
 (define-public ghc-streaming-commons
   (package
     (name "ghc-streaming-commons")
-    (version "0.2.1.1")
+    (version "0.2.2.5")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "streaming-commons/streaming-commons-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "streaming-commons" version))
        (sha256
         (base32
-         "1lmyx3wkjsayhy5yilzvy0kf8qwmycwlk26r1d8f3cxbfhkr7s52"))))
+         "0157xjz8nhr65y9rm7rdf3pnjlrsgaqam7qfg7nqq91bvfdq2l6a"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "streaming-commons")))
     (inputs
      (list ghc-async ghc-blaze-builder ghc-network ghc-random ghc-zlib))
     (native-inputs
@@ -12325,13 +11371,16 @@ needed by various Haskell streaming data libraries, such as @code{conduit} and
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/strict/strict-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "strict" version))
        (sha256
         (base32 "0hb24a09c3agsq7sdv8r2b2jc2f4g1blg2xvj4cfadynib0apxnz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "strict")))
     (inputs
      (list ghc-hashable ghc-these ghc-assoc))
+    (arguments
+     `(#:cabal-revision ("4"
+                         "0pdzqhy7z70m8gxcr54jf04qhncl1jbvwybigb8lrnxqirs5l86n")))
     (home-page "https://hackage.haskell.org/package/strict")
     (synopsis "Strict data types and String IO")
     (description
@@ -12347,14 +11396,12 @@ IO operations.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/stringbuilder/stringbuilder-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "stringbuilder" version))
        (sha256
         (base32
          "1fh3csx1wcssn8xyvl4ip4aprh9l4qyz2kk8mgjvqvc0vb2bsy6q"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "stringbuilder")))
     (arguments `(#:tests? #f)) ; FIXME: circular dependencies with tests
                                ; enabled
     (home-page "https://hackage.haskell.org/package/stringbuilder")
@@ -12370,14 +11417,12 @@ literals.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/string-qq/string-qq-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "string-qq" version))
        (sha256
         (base32
          "0wfxkw4x6j6jq9nd82k83g2k3hskpsvk1dp4cpkshvjr4wg9qny8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "string-qq")))
     (native-inputs
      (list ghc-hunit))
     (home-page "https://hackage.haskell.org/package/string-qq")
@@ -12395,14 +11440,12 @@ and bytestrings.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/stringsearch/stringsearch-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "stringsearch" version))
        (sha256
         (base32
          "0jpy9xjcjdbpi3wk6mg7xwd7wfi2mma70p97v1ij5i8bj9qijpr9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "stringsearch")))
     (arguments
      `(#:cabal-revision
        ("1" "0z5pz5dccapz9k39r2zmf056m0x2m2lj3jahhnw3mfxlmps07378")))
@@ -12421,17 +11464,17 @@ occurrences of a substring (the first in case of overlaps) with another.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "svg-builder/svg-builder-" version ".tar.gz"))
+       (uri (hackage-uri "svg-builder" version))
        (sha256
         (base32
          "1k420f497lzkymmxin88ql6ib8dziic43avykv31yq65rgrf7l2g"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "svg-builder")))
     (inputs
      (list ghc-blaze-builder ghc-hashable ghc-unordered-containers))
     (arguments
-     `(#:cabal-revision
-       ("3" "1zc7shja5i63rn7kd9mnq2m052qhp7nh44qy8qp93dm64v9m9pi2")))
+     `(#:cabal-revision ("6"
+                         "1cprm8ya1rdid4pz1dk6692mv0kqkaxrsqaxg83bca5z4dkgqi2z")))
     (home-page "https://github.com/diagrams/svg-builder.git")
     (synopsis "Domain-specific language for building Scalable Vector Graphics")
     (description "Easy-to-write domain-specific language (DSL) for
@@ -12441,25 +11484,20 @@ building Scalable Vector Graphics (SVG).")
 (define-public ghc-syb
   (package
     (name "ghc-syb")
-    (version "0.7.2.1")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/syb/syb-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "15ld5929n3lzfb5sy9nnm77x2l6i2sgsxw47jdrqcrz6fxpwc1qq"))))
+    (version "0.7.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "syb" version))
+              (sha256
+               (base32
+                "1qxjjndfwz2vvpz9707banmcn6jl2v6w6zp401zxaj327fccchw1"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit))
-    (home-page
-     "http://www.cs.uu.nl/wiki/GenericProgramming/SYB")
+    (properties '((upstream-name . "syb")))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "http://www.cs.uu.nl/wiki/GenericProgramming/SYB")
     (synopsis "Scrap Your Boilerplate")
-    (description "This package contains the generics system described in the
+    (description
+     "This package contains the generics system described in the
 /Scrap Your Boilerplate/ papers (see
 @uref{http://www.cs.uu.nl/wiki/GenericProgramming/SYB, the website}).  It
 defines the @code{Data} class of types permitting folding and unfolding of
@@ -12474,13 +11512,12 @@ variety of traversals.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/system-fileio/system-fileio-"
-             version ".tar.gz"))
+       (uri (hackage-uri "system-fileio" version))
        (sha256
         (base32
          "1iy6g1f35gzyj12g9mdiw4zf75mmxpv1l8cyaldgyscsl648pr9l"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "system-fileio")))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -12539,13 +11576,12 @@ which can't be decoded in the current locale encoding.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/system-filepath/system-filepath-"
-             version ".tar.gz"))
+       (uri (hackage-uri "system-filepath" version))
        (sha256
         (base32
          "14yras4pz2dh55xpwmazcgxijvi8913pjgzb9iw50mjq1lycwmhn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "system-filepath")))
     (arguments
      `(#:tests? #f ; TODO: Needs chell ==0.4.*
        #:cabal-revision
@@ -12597,14 +11633,12 @@ increasing type safety.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tabular/tabular-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tabular" version))
        (sha256
         (base32
          "0z936gh8n8i8qdkagyxwd9gqq13skd5fv013vdvwsibrxkm0czfb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tabular")))
     (inputs
      (list ghc-csv ghc-html))
     (home-page "https://github.com/bgamari/tabular")
@@ -12640,14 +11674,12 @@ B 3 ||       meh |   well... ||  worst ever |          ok
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tagged/tagged-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tagged" version))
        (sha256
         (base32
          "00kcc6lmj7v3xm2r3wzw5jja27m4alcw1wi8yiismd0bbzwzrq7m"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tagged")))
     (arguments
      `(#:cabal-revision
        ("2" "0qi63c3z40i9qm44r571yjzcpb8d473vj2km4kq0fij0ljc7vii9")))
@@ -12666,17 +11698,17 @@ having to unsafely pass dummy arguments.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tar/tar-"
-             version ".tar.gz"))
+       (uri (hackage-uri "tar" version))
        (sha256
         (base32
          "1ppim7cgmn7ng8zbdrwkxhhizc30h15h1c9cdlzamc5jcagl915k"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tar")))
     (arguments
-     `(#:cabal-revision
-       ("4" "03a33nj9k62f318qgmp5pgk7i99c8cyqy5f7m7p0bwc5ni39ysfq")))
-    (inputs
+     `(#:tests? #f ; Failed! Exception: 'TruncatedArchive' (after 4 tests):
+       #:cabal-revision ("5"
+                         "15dqywn1lsyqb0nq1amj70mh1i079b7xwr02wbpcdzmdljg9c55w")))
+    (native-inputs
      (list ghc-bytestring-handle ghc-quickcheck ghc-tasty
            ghc-tasty-quickcheck))
     (home-page "https://hackage.haskell.org/package/tar")
@@ -12698,12 +11730,12 @@ an index.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "tar-conduit/tar-conduit-" version ".tar.gz"))
+       (uri (hackage-uri "tar-conduit" version))
        (sha256
         (base32
          "0bgn3hyf20g1gfnzy8f41s7nj54kfcyjk2izw99svrw8f3dphi80"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tar-conduit")))
     (inputs
      (list ghc-conduit ghc-conduit-combinators ghc-safe-exceptions))
     (native-inputs
@@ -12722,14 +11754,12 @@ interface for extracting and creating tar files.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/temporary/temporary-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "temporary" version))
        (sha256
         (base32
          "144qhwfwg37l3k313raf4ssiz16jbgwlm1nf4flgqpsbd69jji4c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "temporary")))
     (inputs
      (list ghc-exceptions ghc-random))
     (native-inputs
@@ -12750,14 +11780,12 @@ installed.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/temporary-rc/temporary-rc-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "temporary-rc" version))
        (sha256
         (base32
          "1nqih0qks439k3pr5kmbbc8rjdw730slrxlflqb27fbxbzb8skqs"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "temporary-rc")))
     (inputs (list ghc-exceptions))
     (home-page
      "https://www.github.com/feuerbach/temporary")
@@ -12775,17 +11803,16 @@ This is a better maintained fork of the \"temporary\" package.")
 (define-public ghc-terminal-size
   (package
     (name "ghc-terminal-size")
-    (version "0.3.2.1")
+    (version "0.3.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/terminal-size/"
-                    "terminal-size-" version ".tar.gz"))
+              (uri (hackage-uri "terminal-size" version))
               (sha256
                (base32
-                "0n4nvj3dbj9gxfnprgish45asn9z4dipv9j98s8i7g2n8yb3xhmm"))))
+                "1hv0r8gr1ms258rrz602gd5kziykkxw5zlnnzz5f42r0ly7lq5wc"))))
     (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/terminal-size")
+    (properties '((upstream-name . "terminal-size")))
+    (home-page "http://hackage.haskell.org/package/terminal-size")
     (synopsis "Get terminal window height and width")
     (description "Get terminal window height and width without ncurses
 dependency.")
@@ -12794,20 +11821,18 @@ dependency.")
 (define-public ghc-texmath
   (package
     (name "ghc-texmath")
-    (version "0.12.3.2")
+    (version "0.12.5.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "texmath/texmath-" version ".tar.gz"))
+              (uri (hackage-uri "texmath" version))
               (sha256
                (base32
-                "1d9r3na7hmkgr0j63fs50ssll506l1wyqhw0dpap7jk0rdz8pv6n"))))
+                "1dn88s352y641c1vlj5j5mqwhnz6r1algkd7mx83y3fr0wp3nhlq"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-syb ghc-network-uri ghc-split ghc-xml ghc-pandoc-types))
-    (native-inputs
-     (list ghc-temporary ghc-utf8-string))
-    (home-page "https://github.com/jgm/texmath")
+    (properties '((upstream-name . "texmath")))
+    (inputs (list ghc-syb ghc-xml ghc-pandoc-types ghc-split))
+    (native-inputs (list ghc-pretty-show ghc-tasty ghc-tasty-golden ghc-tagged))
+    (home-page "http://github.com/jgm/texmath")
     (synopsis "Conversion between formats used to represent mathematics")
     (description
      "The texmath library provides functions to read and write TeX math,
@@ -12816,7 +11841,7 @@ Office).  Support is also included for converting math formats to pandoc's
 native format (allowing conversion, via pandoc, to a variety of different
 markup formats).  The TeX reader supports basic LaTeX and AMS extensions, and
 it can parse and apply LaTeX macros.")
-    (license license:gpl2+)))
+    (license license:gpl2)))
 
 (define-public ghc-text-binary
   (package
@@ -12825,13 +11850,12 @@ it can parse and apply LaTeX macros.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "text-binary/text-binary-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "text-binary" version))
        (sha256
         (base32
          "18gl10pwg3qwsk0za3c70j4n6a9129wwf1b7d3a461h816yv55xn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "text-binary")))
     (home-page "https://github.com/kawu/text-binary")
     (synopsis "Binary instances for text types")
     (description
@@ -12843,23 +11867,17 @@ text package.")
 (define-public ghc-text-manipulate
   (package
     (name "ghc-text-manipulate")
-    (version "0.3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/text-manipulate"
-             "/text-manipulate-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0pmzp38m3r0k6ps97b1wqplxlgvvlaid09x53jl3gxng0fwq910a"))))
+    (version "0.3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "text-manipulate" version))
+              (sha256
+               (base32
+                "1g06ldl6cdnyr31xlks5qm1sj44ccrdvq4bf8dk032mzfkpyyrws"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit))
-    (home-page
-     "https://github.com/brendanhay/text-manipulate")
+    (properties '((upstream-name . "text-manipulate")))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "https://github.com/brendanhay/text-manipulate")
     (synopsis
      "Case conversion, word boundary manipulation, and textual subjugation")
     (description
@@ -12884,12 +11902,12 @@ upgraded.  Consider yourself warned!")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "text-metrics/text-metrics-" version ".tar.gz"))
+       (uri (hackage-uri "text-metrics" version))
        (sha256
         (base32
          "17bp1lnbkqr5ykrcd6v5sqv0fhljck7hky8zrrpw7rlkb1f3sdc2"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "text-metrics")))
     (inputs
      (list ghc-vector))
     (native-inputs
@@ -12907,17 +11925,15 @@ string metrics efficiently.")
   (package
     (name "ghc-tf-random")
     (version "0.5")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tf-random/tf-random-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tf-random" version))
        (sha256
         (base32 "0445r2nns6009fmq0xbfpyv7jpzwv0snccjdg7hwj4xk4z0cwc1f"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tf-random")))
     (inputs
      (list ghc-primitive ghc-random))
     (home-page "https://hackage.haskell.org/package/tf-random")
@@ -12932,17 +11948,15 @@ Hashing\" by Claessen, Pałka for details and the rationale of the design.")
 (define-public ghc-th-abstraction
   (package
     (name "ghc-th-abstraction")
-    (version "0.4.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "th-abstraction/th-abstraction-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "01nyscmjriga4fh4362b4zjad48hdv33asjkd28sj8hx3pii7fy8"))))
+    (version "0.4.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "th-abstraction" version))
+              (sha256
+               (base32
+                "09hm0famyqsq09lal2ylnhsb31hybj8zanldi7cqncky4i7y5m80"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "th-abstraction")))
     (home-page "https://github.com/glguy/th-abstraction")
     (synopsis "Nicer interface for reified information about data types")
     (description
@@ -12955,22 +11969,17 @@ Template Haskell.")
 (define-public ghc-th-expand-syns
   (package
     (name "ghc-th-expand-syns")
-    (version "0.4.8.0")
+    (version "0.4.10.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "th-expand-syns/th-expand-syns-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "th-expand-syns" version))
               (sha256
                (base32
-                "1mw0yxfbmicv0irfrcz4s6pn39za7yjd7zz09ialwym1b46624si"))))
+                "044h1hv4b0ihpwr9wndj55fa843cbzqp1difgj9wyy3mw925higm"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "0l30cmwm20lgjpvr3a5yxj6429s1hqahjsij8z2ap88754phd41l")))
-    (inputs
-     (list ghc-syb ghc-th-abstraction))
-    (home-page "https://hackage.haskell.org/package/th-expand-syns")
+    (properties '((upstream-name . "th-expand-syns")))
+    (inputs (list ghc-syb ghc-th-abstraction))
+    (home-page "https://github.com/DanielSchuessler/th-expand-syns")
     (synopsis "Expands type synonyms in Template Haskell ASTs")
     (description
      "This package enables users to expand type synonyms in Template Haskell
@@ -12983,14 +11992,17 @@ Template Haskell.")
     (version "0.8.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "th-lift/th-lift-" version ".tar.gz"))
+              (uri (hackage-uri "th-lift" version))
               (sha256
                (base32
                 "1r2wrnrn6qwy6ysyfnlqn6xbfckw0b22h8n00pk67bhhg81jfn9s"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "th-lift")))
     (inputs
      (list ghc-th-abstraction))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1s95i774zy3q8yzk18ygdzhzky6wfcr7g55hd2g8h8lc05xzcdgi")))
     (home-page "https://github.com/mboes/th-lift")
     (synopsis "Derive Template Haskell's Lift class for datatypes")
     (description
@@ -13001,22 +12013,21 @@ datatypes.")
 (define-public ghc-th-lift-instances
   (package
     (name "ghc-th-lift-instances")
-    (version "0.1.18")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "th-lift-instances/th-lift-instances-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "09nv1zsffvv6zfz1fjzcqrla3lc350qr4i4xf7wgvzp049sprrdy"))))
+    (version "0.1.20")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "th-lift-instances" version))
+              (sha256
+               (base32
+                "0w6qc7xzyjymhh8hv72rlszh3n2xyzzamlfcl1hs9k6xbbww6czm"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-th-lift ghc-vector ghc-quickcheck))
-    (home-page "https://github.com/bennofs/th-lift-instances/")
+    (properties '((upstream-name . "th-lift-instances")))
+    (inputs (list ghc-vector ghc-th-lift))
+    (native-inputs (list ghc-quickcheck))
+    (home-page "http://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
+    (description
+     "Most data types in the Haskell platform do not have Lift
 instances.  This package provides orphan instances for @code{containers},
 @code{text}, @code{bytestring} and @code{vector}.")
     (license license:bsd-3)))
@@ -13024,28 +12035,19 @@ instances.  This package provides orphan instances for @code{containers},
 (define-public ghc-th-orphans
   (package
     (name "ghc-th-orphans")
-    (version "0.13.12")
+    (version "0.13.14")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "th-orphans/th-orphans-" version ".tar.gz"))
+              (uri (hackage-uri "th-orphans" version))
               (sha256
                (base32
-                "03n6qxnpxhbzyzbyrjq77d1y62dwgx39mmxfwmnc04l8pawgrxxz"))))
+                "0z07qcbbsj2b3j9p1qr4jvlpa7qgjfjvymkjd6vbizka1wd2mnwx"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "0vfz9dl5g9xwp2zmwqc5gngyvjaqj3i0s97vbcslafcqhdqw3qaj")))
-    (inputs
-     (list ghc-th-lift
-           ghc-th-lift-instances
-           ghc-th-reify-many
-           ghc-th-compat
-           ghc-th-expand-syns
-           ghc-generic-deriving))
-    (native-inputs
-     (list ghc-hspec))
-    (home-page "https://hackage.haskell.org/package/th-orphans")
+    (properties '((upstream-name . "th-orphans")))
+    (inputs (list ghc-th-compat ghc-th-lift ghc-th-reify-many
+                  ghc-generic-deriving ghc-th-lift-instances))
+    (native-inputs (list ghc-hspec))
+    (home-page "http://hackage.haskell.org/package/th-orphans")
     (synopsis "Orphan instances for TH datatypes")
     (description
      "This package provides orphan instances for Template Haskell datatypes.  In particular,
@@ -13061,19 +12063,17 @@ package, and that's where the version number started.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/these/these-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "these" version))
        (sha256
         (base32
          "027m1gd7i6jf2ppfkld9qrv3xnxg276587pmx10z9phpdvswk66p"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "these")))
     (inputs
      (list ghc-hashable ghc-assoc))
     (arguments
-     `(#:cabal-revision
-       ("2" "16x3am622jn97j1d9879x7j5zbjn33bkfaa0dq0xyp1fbc0s7h5x")))
+     `(#:cabal-revision ("6"
+                         "12ll5l8m482qkb8zn79vx51bqlwc89fgixf8jv33a32b4qzc3499")))
     (home-page
      "https://github.com/isomorphism/these")
     (synopsis "Either-or-both data type")
@@ -13107,22 +12107,21 @@ variant of @code{These}.
 (define-public ghc-threads
   (package
     (name "ghc-threads")
-    (version "0.5.1.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "threads/threads-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0bjnjhnq3km6xqk0fn1fgyz5xdw4h6lylbwwbcmkkfzwcz0c76hk"))))
+    (version "0.5.1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "threads" version))
+              (sha256
+               (base32
+                "1l226792dqlp772aaxqr3qzz8yq72702g708k16gi8lrkfhgxxp0"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-concurrent-extra ghc-hunit ghc-test-framework
-           ghc-test-framework-hunit))
+    (properties '((upstream-name . "threads")))
+    (native-inputs (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
+    (description
+     "This package provides functions to fork threads and
 wait for their result, whether it's an exception or a normal value.
 Besides waiting for the termination of a single thread this package also
 provides functions to wait for a group of threads to terminate.  This
@@ -13145,13 +12144,12 @@ package is similar to the @code{threadmanager}, @code{async} and
     (version "0.1.10")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "th-reify-many/th-reify-many-"
-                                  version ".tar.gz"))
+              (uri (hackage-uri "th-reify-many" version))
               (sha256
                (base32
                 "19g4gc1q3zxbylmvrgk3dqjzychq2k02i7fwvs3vhbrg4ihhw9cx"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "th-reify-many")))
     (inputs
      (list ghc-safe ghc-th-expand-syns))
     (home-page "https://github.com/mgsloan/th-reify-many")
@@ -13166,30 +12164,27 @@ function which generates instances.")
 (define-public ghc-time-compat
   (package
     (name "ghc-time-compat")
-    (version "1.9.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "time-compat/time-compat-" version ".tar.gz"))
-       (sha256
-        (base32
-         "19p3056i6kh8lgcdsnwsh8pj80xyi23kmw9n7hmdacczs5kv49ii"))))
+    (version "1.9.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "time-compat" version))
+              (sha256
+               (base32
+                "103b3vpn277kkccv6jv54b2wpi5c00mpb01ndl9w4y4nxc0bn1xd"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-base-orphans))
-    (native-inputs
-     (list ghc-hunit
-           ghc-base-compat
-           ghc-quickcheck
-           ghc-tagged
-           ghc-tasty
-           ghc-tasty-hunit
-           ghc-tasty-quickcheck))
+    (properties '((upstream-name . "time-compat")))
+    (inputs (list ghc-base-orphans ghc-hashable))
+    (native-inputs (list ghc-hunit
+                         ghc-base-compat
+                         ghc-quickcheck
+                         ghc-tagged
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
     (arguments
-     `(#:cabal-revision
-       ("1" "1f6r8cyfgzpfg9nrsqbf99pi44fyds9wcmgwxb4s0zmlb5dbv1m5")))
-    (home-page "https://github.com/phadej/time-compat")
+     `(#:cabal-revision ("4"
+                         "1n39yfk21xz8y1xvkh01651yysk2zp5qac22l5pq2hi7scczmxaw")))
+    (home-page "https://github.com/haskellari/time-compat")
     (synopsis "Compatibility package for time")
     (description "This package tries to compat as many @code{time}
 features as possible.")
@@ -13202,13 +12197,12 @@ features as possible.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "time-locale-compat/time-locale-compat-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "time-locale-compat" version))
        (sha256
         (base32
          "0b2hmj8wwrfkndwzgm11qr496ca2ahwdxcj3m0ii91bxvrk1bzq7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "time-locale-compat")))
     (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")
@@ -13223,12 +12217,12 @@ features as possible.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "time-manager/time-manager-" version ".tar.gz"))
+       (uri (hackage-uri "time-manager" version))
        (sha256
         (base32
          "1nzwj0fxz370ks6vr1sylcidx33rnqq45y3q9yv9n4dj43nid9lh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "time-manager")))
     (inputs
      (list ghc-auto-update))
     (home-page "https://github.com/yesodweb/wai")
@@ -13245,13 +12239,12 @@ timer manager.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/timeit/timeit-"
-         version ".tar.gz"))
+        (hackage-uri "timeit" version))
        (sha256
         (base32
          "1sliqpvl501rlcj6s0lhmsf5ym24j4h881wzc1f1wdyvg3jz8kd1"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "timeit")))
     (home-page "https://github.com/merijn/timeit")
     (synopsis "Time monadic computations with an IO base")
     (description "This package provides a simple wrapper to show the
@@ -13260,54 +12253,50 @@ used CPU time of monadic computation with an IO base.")
 
 (define-public ghc-timezone-series
   (package
-   (name "ghc-timezone-series")
-   (version "0.1.9")
-   (source
-    (origin
-     (method url-fetch)
-     (uri
-      (string-append
-       "mirror://hackage/package/timezone-series/timezone-series-"
-       version ".tar.gz"))
-     (sha256
-      (base32
-       "1blwgnyzqn917rgqkl4dncv9whv3xmk0lav040qq0214vksmvlz5"))))
-   (build-system haskell-build-system)
-   (home-page "https://archives.haskell.org/projects.haskell.org/time-ng/")
-   (synopsis "Enhanced timezone handling for Time")
-   (description
-    "This package endows @code{Data.Time}, from the time package, with several
+    (name "ghc-timezone-series")
+    (version "0.1.13")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "timezone-series" version))
+              (sha256
+               (base32
+                "18n6w7jxwlysq5mvb1sp1z57nyrsgn2ans642fy5rhmpwcavgvr8"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "timezone-series")))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1ak05p8z1q2nispv1xw32j7lhfmf3sfj2ibjrxpm347s37fmxnwc")))
+    (home-page "http://projects.haskell.org/time-ng/")
+    (synopsis "Enhanced timezone handling for Time")
+    (description
+     "This package endows @code{Data.Time}, from the time package, with several
 data types and functions for enhanced processing of timezones.  For one way to
 create timezone series, see the ghc-timezone-olson package.")
-   (license license:bsd-3)))
+    (license license:bsd-3)))
 
 (define-public ghc-timezone-olson
   (package
-   (name "ghc-timezone-olson")
-   (version "0.2.0")
-   (source
-    (origin
-     (method url-fetch)
-     (uri
-      (string-append
-       "https://hackage.haskell.org/package/timezone-olson/timezone-olson-"
-       version ".tar.gz"))
-     (sha256
-      (base32
-       "0b9vh27b9nz803yhd93d5z63bs370lvn4vkdajxaak9clxlw6mwg"))))
-   (build-system haskell-build-system)
-   (inputs
-    (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
-    "A parser and renderer for binary Olson timezone files whose format
+    (name "ghc-timezone-olson")
+    (version "0.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "timezone-olson" version))
+              (sha256
+               (base32
+                "10f5843sza2ikj2sg9fjhf5dhnhcidad86cdjmrj1y6zclkiqmdc"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "timezone-olson")))
+    (inputs (list ghc-timezone-series ghc-extensible-exceptions))
+    (home-page "http://projects.haskell.org/time-ng/")
+    (synopsis "Parser and renderer for binary Olson timezone files")
+    (description
+     "A parser and renderer for binary Olson timezone files whose format
 is specified by the tzfile(5) man page on Unix-like systems.  For more
 information about this format, see
 @url{http://www.iana.org/time-zones/repository/tz-link.html}.  Functions
 are provided for converting the parsed data into @code{TimeZoneSeries}
 objects from the timezone-series package.")
-   (license license:bsd-3)))
+    (license license:bsd-3)))
 
 (define-public ghc-tldr
   (package
@@ -13316,14 +12305,12 @@ objects from the timezone-series package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tldr/tldr-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "tldr" version))
        (sha256
         (base32
          "1yypb9zhsj9ks7bbw2sayqv3rn9y8z3w5p1xmsnwb4w99dqmvcx5"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tldr")))
     (inputs
      (list ghc-ansi-terminal
            ghc-attoparsec
@@ -13349,12 +12336,11 @@ man pages with practical examples.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/torrent/torrent-"
-             version ".tar.gz"))
+       (uri (hackage-uri "torrent" version))
        (sha256
         (base32 "0m7s0q7f8c7glxzqhf2j86ch5xhk6jnzwwsa4mkywag22119c290"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "torrent")))
     (inputs
      (list ghc-bencode ghc-syb))
     (home-page "https://hackage.haskell.org/package/torrent")
@@ -13370,16 +12356,14 @@ BitTorrent files.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/transformers/transformers-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "transformers" version))
        (sha256
         (base32
          "0v66j5k0xqk51pmca55wq192qyw2p43s2mgxlz4f95q2c1fpjs5n"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "transformers")))
     (home-page
-     "http://hackage.haskell.org/package/transformers")
+     "https://hackage.haskell.org/package/transformers")
     (synopsis "Concrete functor and monad transformers")
     (description
      "Transformers provides functor and monad transformers, inspired by the
@@ -13409,14 +12393,12 @@ other transformers.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/transformers-base/transformers-base-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "transformers-base" version))
        (sha256
         (base32
          "146g69yxmlrmvqnzwcw4frxfl3z04lda9zqwcqib34dnkrlghfrj"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "transformers-base")))
     (inputs
      (list ghc-transformers-compat))
     (home-page
@@ -13432,20 +12414,20 @@ compatibility to run on old versions of the platform.")
 (define-public ghc-transformers-compat
   (package
     (name "ghc-transformers-compat")
-    (version "0.6.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/transformers-compat"
-             "/transformers-compat-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1yd936az31g9995frc84g05rrb5b7w59ajssc5183lp6wm8h4bky"))))
+    (version "0.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "transformers-compat" version))
+              (sha256
+               (base32
+                "0slxrkxi8xa1bmi9saq9x8bz52clrf2slf877m3ckjzkr4276b5n"))))
     (build-system haskell-build-system)
-    (home-page "https://github.com/ekmett/transformers-compat/")
+    (properties '((upstream-name . "transformers-compat")))
+    (inputs (list ghc-generic-deriving))
+    (home-page "http://github.com/ekmett/transformers-compat/")
     (synopsis "Small compatibility shim between transformers 0.3 and 0.4")
-    (description "This package includes backported versions of types that were
+    (description
+     "This package includes backported versions of types that were
 added to transformers in transformers 0.3 and 0.4 for users who need strict
 transformers 0.2 or 0.3 compatibility to run on old versions of the platform,
 but also need those types.")
@@ -13454,44 +12436,38 @@ but also need those types.")
 (define-public ghc-tree-diff
   (package
     (name "ghc-tree-diff")
-    (version "0.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/tree-diff/tree-diff-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0bybi4qp7nj9117yza5qqgw2f7s6rk3i7q642jqd7sdn3bx5cnap"))))
+    (version "0.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tree-diff" version))
+              (sha256
+               (base32
+                "0g3lsp067dq1ydvj2im4nlfxa65g9zjmjjkv91dhjhnrklir10q0"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:cabal-revision
-       ("1" "0brlnq5ddmambidll1dn4jnjac2i44a9hd5hwp2p0rbh1s8jfyhm")))
-    (inputs
-     (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))
+    (properties '((upstream-name . "tree-diff")))
+    (inputs (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-tasty ghc-tasty-golden ghc-tasty-quickcheck
+                         ghc-trifecta))
     (home-page "https://github.com/phadej/tree-diff")
     (synopsis "Compute difference between (expression) trees")
-    (description "This Haskell library provides a function for computing
+    (description
+     "This Haskell library provides a function for computing
 the difference between (expression) trees.  It also provides a way to
 compute the difference between arbitrary abstract datatypes (ADTs) using
 @code{Generics}-derivable helpers.")
@@ -13500,37 +12476,37 @@ compute the difference between arbitrary abstract datatypes (ADTs) using
 (define-public ghc-trifecta
   (package
     (name "ghc-trifecta")
-    (version "2.1.1")
+    (version "2.1.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/trifecta/"
-                    "trifecta-" version ".tar.gz"))
+              (uri (hackage-uri "trifecta" version))
               (sha256
                (base32
-                "1lhzi0xxvilvgjy3yf3f85wfmrks562hhsnl0kg1xwji36rgwp6y"))))
+                "1akx8m6mgskwsbhsf90cxlqjq23jk4pwaxagvm923dpncwrlwfla"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "trifecta")))
+    (inputs (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
+                  ghc-prettyprinter-ansi-terminal
+                  ghc-profunctors
+                  ghc-reducers
+                  ghc-unordered-containers
+                  ghc-utf8-string))
+    (native-inputs (list ghc-quickcheck))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0a7cfbd04w3zbm234mmpib9mxar46ra5xvb62gcnbmixr7b343j9")))
+    (home-page "http://github.com/ekmett/trifecta/")
     (synopsis "Parser combinator library with convenient diagnostics")
     (description "Trifecta is a modern parser combinator library for Haskell,
 with slicing and Clang-style colored diagnostics.")
@@ -13543,13 +12519,12 @@ with slicing and Clang-style colored diagnostics.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "tuple-th-" version "/"
-                           "tuple-th-" version ".tar.gz"))
+       (uri (hackage-uri "tuple-th" version))
        (sha256
         (base32
          "1mrl4vvxmby7sf1paf7hklzidnr6wq55822i73smqyz0xpf3gsjn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "tuple-th")))
     (home-page "https://github.com/DanielSchuessler/tuple-th")
     (synopsis "Generate utility functions for tuples of statically known size
 for Haskell")
@@ -13561,38 +12536,31 @@ statically known size.")
 (define-public ghc-turtle
   (package
     (name "ghc-turtle")
-    (version "1.5.22")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/turtle/turtle-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "14lf43b5rxci6p9sy1gkb715m4b1s4rl65swn2qpdqv3h2yvpi4s"))))
-    (build-system haskell-build-system)
-    (inputs
-     (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))
+    (version "1.5.25")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "turtle" version))
+              (sha256
+               (base32
+                "1hh2rbwk3m4iklk67f1l1a8shsng9qzs9132j6lpag7cgqkrmqdk"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "turtle")))
+    (inputs (list ghc-ansi-wl-pprint
+                  ghc-async
+                  ghc-clock
+                  ghc-foldl
+                  ghc-hostname
+                  ghc-managed
+                  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))
     (home-page
-     "http://hackage.haskell.org/package/turtle")
+     "https://hackage.haskell.org/package/turtle")
     (synopsis "Shell programming, Haskell-style")
     (description
      "Turtle is a reimplementation of the Unix command line environment in
@@ -13620,22 +12588,24 @@ similar functionality.")
 (define-public ghc-typed-process
   (package
     (name "ghc-typed-process")
-    (version "0.2.6.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "typed-process/typed-process-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "071mw4yv4xr5n82si33qbcqcxvcr7h56zlyd8gmsfrsdnacbq47k"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-async ghc-unliftio-core))
-    (native-inputs
-     (list ghc-base64-bytestring ghc-hspec hspec-discover ghc-temporary))
-    (home-page "https://haskell-lang.org/library/typed-process")
+    (version "0.2.10.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "typed-process" version))
+              (sha256
+               (base32
+                "17h9jl7gi26v3cxb4jdcksbp755sqqp8w7303q8x8r36rmf8fdp4"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "typed-process")))
+    (inputs (list ghc-async ghc-unliftio-core))
+    (native-inputs (list ghc-base64-bytestring
+                         ghc-hspec
+                         ghc-temporary
+                         ghc-base64-bytestring
+                         ghc-hspec
+                         ghc-temporary
+                         hspec-discover))
+    (home-page "https://github.com/fpco/typed-process")
     (synopsis "Run external processes with strong typing of streams")
     (description
      "This library provides the ability to launch and interact with external
@@ -13650,14 +12620,12 @@ upon it.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/uglymemo/uglymemo-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "uglymemo" version))
        (sha256
         (base32
          "0ixqg5d0ly1r18jbgaa89i6kjzgi6c5hanw1b1y8c5fbq14yz2gy"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "uglymemo")))
     (home-page "https://hackage.haskell.org/package/uglymemo")
     (synopsis "Simple memoization function for Haskell")
     (description
@@ -13668,21 +12636,18 @@ function.")
 (define-public ghc-unagi-chan
   (package
     (name "ghc-unagi-chan")
-    (version "0.4.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/unagi-chan"
-                           "/unagi-chan-" version ".tar.gz"))
-       (sha256
-        (base32
-         "15fnk9x4fd2ryp31fjfrwm8k61m3a0qyb95m4065zc0yi0jyacp2"))))
+    (version "0.4.1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unagi-chan" version))
+              (sha256
+               (base32
+                "1d98a6s7rydjlf2p3jv6j7wglq8ahf8kgcibji5fiy6y0ymz9mnr"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-atomic-primops ghc-primitive))
-    (arguments
-     `(#:tests? #f)) ; TODO: Fail.
-    (home-page "https://hackage.haskell.org/package/unagi-chan")
+    (properties '((upstream-name . "unagi-chan")))
+    (inputs (list ghc-atomic-primops ghc-primitive))
+    (arguments (list #:tests? #f)) ; counter is atomic... test: Counter broken: expecting 10000000 got 9999996
+    (home-page "http://hackage.haskell.org/package/unagi-chan")
     (synopsis "Fast concurrent queues with a Chan-like API, and more")
     (description
      "This library provides implementations of concurrent FIFO queues (for
@@ -13699,14 +12664,12 @@ instruction is not available.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/unbounded-delays/unbounded-delays-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "unbounded-delays" version))
        (sha256
         (base32
          "11b1vmlfv4pmmpl4kva58w7cf50xsj819cq3wzqgnbz3px9pxbar"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "unbounded-delays")))
     (home-page "https://github.com/basvandijk/unbounded-delays")
     (synopsis "Unbounded thread delays and timeouts")
     (description "The @code{threadDelay} and @code{timeout} functions from the
@@ -13722,11 +12685,10 @@ unbounded @code{Integer} type.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "unexceptionalio-" version "/" "unexceptionalio-"
-                           version ".tar.gz"))
+       (uri (hackage-uri "unexceptionalio" version))
        (sha256 (base32 "07py2nffdgxpz8sryvqcghzb2kiiagpdf5ja1dia4z0rpwi79smh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "unexceptionalio")))
     (native-inputs
      (list ghc-hunit ghc-test-framework ghc-test-framework-hunit))
     (home-page "https://github.com/singpolyma/unexceptionalio")
@@ -13735,25 +12697,49 @@ unbounded @code{Integer} type.")
 handled safely, this is what you're left with.")
     (license license:isc)))
 
+(define-public ghc-unicode-data
+  (package
+    (name "ghc-unicode-data")
+    (version "0.4.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unicode-data" version))
+              (sha256
+               (base32
+                "1030n3h11hk1rbq0fdbpry3aclz6yz8bki2abjvbwh0rh2kdx99p"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "unicode-data")))
+    (native-inputs (list ghc-hspec))
+    (home-page "http://github.com/composewell/unicode-data")
+    (synopsis "Access Unicode Character Database (UCD)")
+    (description
+     "This package provides Haskell APIs to efficiently access the
+<https://www.unicode.org/ucd/ Unicode character database> (UCD).  Performance is
+the primary goal in the design of this package.  The Haskell data structures
+are generated programmatically from the UCD files.")
+    (license license:asl2.0)))
+
 (define-public ghc-unicode-transforms
   (package
     (name "ghc-unicode-transforms")
-    (version "0.3.7.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "unicode-transforms/unicode-transforms-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "1010sahi4mjzqmxqlj3w73rlymbl2370x5vizjqbx7mb86kxzx4f"))))
+    (version "0.4.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unicode-transforms" version))
+              (sha256
+               (base32
+                "1z29jvli2rqkynfxni1gibl81458j7h8lrb8fg6lpnj8svhy2y1j"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-getopt-generics ghc-split ghc-hspec))
-    (home-page "https://github.com/composewell/unicode-transforms")
+    (properties '((upstream-name . "unicode-transforms")))
+    (inputs (list ghc-unicode-data))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck ghc-hspec ghc-split))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1imm3svpz2shilj2kmmmcyy5yd4c1mpmz5v1gvjrr98hrab2i9x7")))
+    (home-page "http://github.com/composewell/unicode-transforms")
     (synopsis "Unicode normalization")
-    (description "This library provides tools for fast Unicode 12.1.0
+    (description
+     "This library provides tools for fast Unicode 12.1.0
 normalization in Haskell (normalization forms C, KC, D, and KD).")
     (license license:bsd-3)))
 
@@ -13763,13 +12749,12 @@ normalization in Haskell (normalization forms C, KC, D, and KD).")
     (version "0.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/union-find/union-find-"
-                    version ".tar.gz"))
+              (uri (hackage-uri "union-find" version))
               (sha256
                (base32
                 "1v7hj42j9w6jlzi56jg8rh4p58gfs1c5dx30wd1qqvn0p0mnihp6"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "union-find")))
     (home-page "https://github.com/nominolo/union-find")
     (synopsis "Efficient union and equivalence testing of sets")
     (description
@@ -13789,14 +12774,12 @@ constant-time:
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/uniplate/uniplate-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "uniplate" version))
        (sha256
         (base32
          "1lis5qcb5j7yzd1cqjaqpb6bmkyjfb7l4nhk3ykmcma4513cjxz7"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "uniplate")))
     (inputs
      (list ghc-syb ghc-hashable ghc-unordered-containers))
     (home-page "https://github.com/ndmitchell/uniplate")
@@ -13809,20 +12792,19 @@ work, but is substantially simpler and faster.")
 (define-public ghc-unix-compat
   (package
     (name "ghc-unix-compat")
-    (version "0.5.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/unix-compat/unix-compat-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1j75i3dj489rz60ij3nfza774mb7mw33amhdkm10dd0dxabvb4q8"))))
+    (version "0.5.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unix-compat" version))
+              (sha256
+               (base32
+                "1cd4lh2c16h7y5hzrcn5l9vir8aq2wcizwksppnagklsdsfmf942"))))
     (build-system haskell-build-system)
-    (home-page
-     "https://github.com/jystic/unix-compat")
+    (properties '((upstream-name . "unix-compat")))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "0mik6xb1jdmb2jlxlmzf0517mxfj0c1j2i4r6h5212m4q6znqqcm")))
+    (home-page "http://github.com/jacobstanley/unix-compat")
     (synopsis "Portable POSIX-compatibility layer")
     (description
      "This package provides portable implementations of parts of the unix
@@ -13833,24 +12815,19 @@ isn't available, portable implementations are used.")
 (define-public ghc-unix-time
   (package
     (name "ghc-unix-time")
-    (version "0.4.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/unix-time/unix-time-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "02fyh298lm8jsg52i3z0ikazwz477ljqjmhnqr2d88grmn5ky8qr"))))
+    (version "0.4.8")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unix-time" version))
+              (sha256
+               (base32
+                "0hz8mi08kg84hiqnch5ycscgqmjyn1mnl5ih1bsrclyb3fhvdppy"))))
     (build-system haskell-build-system)
-    (arguments
-     `(#:tests? #f)) ; FIXME: Test fails with "System.Time not found".  This
-                     ; is weird, that should be provided by GHC 7.10.2.
-    (inputs
-     (list ghc-old-time ghc-old-locale))
-    (home-page "https://hackage.haskell.org/package/unix-time")
+    (properties '((upstream-name . "unix-time")))
+    (inputs (list ghc-old-time))
+    (native-inputs (list ghc-doctest ghc-old-locale ghc-quickcheck ghc-hspec
+                         hspec-discover))
+    (home-page "http://hackage.haskell.org/package/unix-time")
     (synopsis "Unix time parser/formatter and utilities")
     (description "This library provides fast parsing and formatting utilities
 for Unix time in Haskell.")
@@ -13859,27 +12836,22 @@ for Unix time in Haskell.")
 (define-public ghc-unliftio
   (package
     (name "ghc-unliftio")
-    (version "0.2.20")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/unliftio/unliftio-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "0mbm57h7r16qd7kpglbm50qrnfjmazd70avbrl647n4jwhlrp7my"))))
+    (version "0.2.23.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unliftio" version))
+              (sha256
+               (base32
+                "1zg4ddi4z85550abw9ijycbbjg8ddig7r0vcma8ik03dxzga71id"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; FIXME: hspec-discover not in PATH
-    (outputs '("out" "static" "doc"))
-    (inputs
-     (list ghc-async ghc-unliftio-core))
-    (native-inputs (list ghc-hspec))
-    (home-page "https://github.com/fpco/unliftio")
+    (properties '((upstream-name . "unliftio")))
+    (inputs (list ghc-async ghc-safe-exceptions ghc-unliftio-core ghc-nats))
+    (native-inputs (list ghc-quickcheck ghc-hspec hspec-discover))
+    (home-page "https://github.com/fpco/unliftio/tree/master/unliftio#readme")
     (synopsis "Provides MonadUnliftIO typecplass for unlifting monads to
 IO")
-    (description "This Haskell package provides the core @code{MonadUnliftIO}
+    (description
+     "This Haskell package provides the core @code{MonadUnliftIO}
 typeclass, a number of common instances, and a collection of common functions
 working with it.")
     (license license:expat)))
@@ -13891,13 +12863,12 @@ working with it.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "unliftio-core-" version "/"
-                           "unliftio-core-" version ".tar.gz"))
+       (uri (hackage-uri "unliftio-core" version))
        (sha256
         (base32
          "16i97jax8rys57l0g0qswfwxh1cl5bgw2lw525rm6bzajw90v7wi"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "unliftio-core")))
     (arguments
      `(#:cabal-revision
        ("2" "1xx9nmxxg87nhwxgbmmw0xbrppnjc23ppyryar04i3njyg9wvazr")))
@@ -13912,30 +12883,30 @@ functions.")
 (define-public ghc-unordered-containers
   (package
     (name "ghc-unordered-containers")
-    (version "0.2.14.0")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/unordered-containers"
-             "/unordered-containers-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0rw8kmg7xjlacmr1hcpin95abkd387awf154s9ran7zg9jllh3x1"))))
+    (version "0.2.19.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unordered-containers" version))
+              (sha256
+               (base32
+                "1li8s6qw8mgv6a7011y7hg0cn2nllv2g9sr9c1xb48nmw32vw9qv"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-chasingbottoms
-           ghc-hunit
-           ghc-quickcheck
-           ghc-test-framework
-           ghc-test-framework-hunit
-           ghc-test-framework-quickcheck2
-           ghc-hashable))
+    (properties '((upstream-name . "unordered-containers")))
+    (inputs (list ghc-hashable))
+    (native-inputs (list ghc-chasingbottoms
+                         ghc-hunit
+                         ghc-quickcheck
+                         ghc-random
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-nothunks-bootstrap))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0fcax3apnpxxy9maymclr6s2b4c28d3pkl3plbg0lv1mn0mh84fv")))
     (home-page
-     "https://github.com/tibbe/unordered-containers")
-    (synopsis
-     "Efficient hashing-based container types")
+     "https://github.com/haskell-unordered-containers/unordered-containers")
+    (synopsis "Efficient hashing-based container types")
     (description
      "Efficient hashing-based container types.  The containers have been
 optimized for performance critical use, both in terms of large data quantities
@@ -13949,6 +12920,7 @@ and high speed.")
     (arguments `(#:tests? #f))
     (inputs
      `(("ghc-hashable" ,ghc-hashable-bootstrap)))
+    (native-inputs '())
     (properties '((hidden? #t)))))
 
 (define-public ghc-unsafe
@@ -13959,13 +12931,12 @@ and high speed.")
      (origin
        (method url-fetch)
        (uri
-        (string-append
-         "https://hackage.haskell.org/package/unsafe/unsafe-"
-         version ".tar.gz"))
+        (hackage-uri "unsafe" version))
        (sha256
         (base32
          "0hc6xr1i3hkz25gdgfx1jqgpsc9mwa05bkfynp0mcfdlyz6782nz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "unsafe")))
     (home-page "https://hackage.haskell.org/package/unsafe")
     (synopsis "Unified interface to unsafe functions")
     (description "Safe Haskell introduced the notion of safe and unsafe
@@ -13985,13 +12956,12 @@ a style ready for qualification, that is, you should import them by
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "uri-bytestring-" version "/"
-                           "uri-bytestring-" version ".tar.gz"))
+       (uri (hackage-uri "uri-bytestring" version))
        (sha256
         (base32
          "0s0k26v5x6601rbpkjkl5vp3dkp9xwj1dlgy4xkl470i4sna1rzk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "uri-bytestring")))
     (inputs (list ghc-attoparsec ghc-blaze-builder ghc-th-lift-instances))
     (native-inputs (list ghc-hunit
                          ghc-tasty
@@ -14010,20 +12980,19 @@ parser that uses ByteStrings for parsing and representing the URI data.")
 (define-public ghc-utf8-light
   (package
     (name "ghc-utf8-light")
-    (version "0.4.2")
+    (version "0.4.4.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/utf8-light/utf8-light-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "utf8-light" version))
        (sha256
         (base32
-         "0rwyc5z331yfnm4hpx0sph6i1zvkd1z10vvglhnp0vc9wy644k0q"))))
+         "0415hapndlsnzvmm3bk2fl42h4vn1izky7jb3lbby3mzzzd8d1fx"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "utf8-light")))
+    (native-inputs (list ghc-hspec hspec-discover))
     (home-page
-     "http://hackage.haskell.org/package/utf8-light")
+     "https://hackage.haskell.org/package/utf8-light")
     (synopsis "Lightweight unicode support for Haskell")
     (description
      "This package profides a class for encoding and decoding UTF8 strings
@@ -14039,13 +13008,11 @@ including only one module.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/utf8-string/utf8-string-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "utf8-string" version))
        (sha256
         (base32 "16mh36ffva9rh6k37bi1046pgpj14h0cnmj1iir700v0lynxwj7f"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "utf8-string")))
     (native-inputs (list ghc-hunit))
     (home-page "https://github.com/glguy/utf8-string/")
     (synopsis "Support for reading and writing UTF8 Strings")
@@ -14063,10 +13030,11 @@ UTF8 without truncation.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append home-page "/utility-ht-" version ".tar.gz"))
+       (uri (hackage-uri "utility-ht" version))
        (sha256
         (base32 "10dvmfhhhj5w4wz5drhvs6i0yv35kbbcbzhy6ci34r3ppcik5rdw"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "utility-ht")))
     (native-inputs
      (list ghc-quickcheck ghc-doctest-exitcode-stdio ghc-doctest-lib))
     (synopsis "Haskell helper functions for Lists, Maybes, Tuples, Functions")
@@ -14081,13 +13049,12 @@ helper functions for Lists, Maybes, Tuples, Functions.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "uuid-" version "/"
-                           "uuid-" version ".tar.gz"))
+       (uri (hackage-uri "uuid" version))
        (sha256
         (base32
          "0r05h16gd7fgfpq9iz43jcn9jzrgfa0gk4cv1xy0p4rli66rb1gq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "uuid")))
     (inputs (list ghc-cryptohash-sha1
                   ghc-cryptohash-md5
                   ghc-entropy
@@ -14109,17 +13076,19 @@ parsing and printing @dfn{Universally Unique Identifiers} or UUIDs.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "uuid-types-" version "/"
-                           "uuid-types-" version ".tar.gz"))
+       (uri (hackage-uri "uuid-types" version))
        (sha256
         (base32
          "1pd7xd6inkmmwjscf7pmiwqjks9y0gi1p8ahqbapvh34gadvhs5d"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Wrong byteorder version?
+    (properties '((upstream-name . "uuid-types")))
     (inputs (list ghc-hashable ghc-random))
-    (native-inputs (list ghc-byteorder ghc-quickcheck ghc-tasty
+    (native-inputs (list ghc-quickcheck ghc-tasty
                          ghc-tasty-hunit ghc-tasty-quickcheck))
+    (arguments
+     `(#:tests? #f ; Missing GHC internal library ghc-byteorder.
+       #:cabal-revision ("3"
+                         "10hpjshw6z8xnjpga47cazfdd4i27qvy4ash13lza2lmwf36k9ww")))
     (home-page "https://github.com/hvr/uuid")
     (synopsis "Haskell type definitions for UUIDs")
     (description "This Haskell library contains type definitions for
@@ -14131,26 +13100,28 @@ functions.")
 (define-public ghc-validation
   (package
     (name "ghc-validation")
-    (version "1.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/validation/validation-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1dv7azpljdcf7irbnznnz31hq611bn1aj2m6ywghz3hgv835qqak"))))
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "validation" version))
+              (sha256
+               (base32
+                "15hhz2kj6h9zv568bvq79ymck3s3b89fpkasdavbwvyhfyjm5k8x"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-semigroups ghc-semigroupoids ghc-assoc ghc-bifunctors
-           ghc-lens))
-    (native-inputs
-     (list ghc-hedgehog ghc-hunit))
+    (properties '((upstream-name . "validation")))
+    (inputs (list ghc-assoc ghc-semigroups ghc-semigroupoids ghc-bifunctors
+                  ghc-lens))
+    (native-inputs (list ghc-hedgehog ghc-hunit))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "validation.cabal"
+               (("\\b(hedgehog|lens)\\s+[^,]+" all dep)
+                dep)))))))
     (home-page "https://github.com/qfpl/validation")
-    (synopsis
-     "Data-type like Either but with an accumulating Applicative")
+    (synopsis "Data-type like Either but with an accumulating Applicative")
     (description
      "A data-type like Either but with differing properties and type-class
 instances.
@@ -14172,21 +13143,17 @@ example of, \"An applicative functor that is not a monad.\"")
 (define-public ghc-validity
   (package
     (name "ghc-validity")
-    (version "0.11.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/validity/validity-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "086nj5ymp4mxxfw9qjgjhd4j3z7gl2y9d89p0b7bkap5ampgdw2x"))))
+    (version "0.12.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "validity" version))
+              (sha256
+               (base32
+                "1j9yswqas9dpb9mv132myfn1rky5vbh5gdvcxbb7p93k5c2y4g0w"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "validity")))
     (native-inputs (list ghc-hspec hspec-discover))
-    (home-page
-     "https://github.com/NorfairKing/validity")
+    (home-page "https://github.com/NorfairKing/validity#readme")
     (synopsis "Validity typeclass")
     (description
      "Values of custom types usually have invariants imposed upon them.  This
@@ -14201,16 +13168,17 @@ explicit by providing a function to check whether the invariants hold.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/vault/vault-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "vault" version))
        (sha256
         (base32
          "181ksk1yixjg0jiggw5jvm8am8m8c7lim4xaixf8qnaqvxm6namc"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "vault")))
     (inputs
      (list ghc-unordered-containers ghc-hashable ghc-semigroups))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1bjwv3nv8jfhrdxa5kn3gvgxmyalpq7592bvyl7bpvcc7bbkfkf3")))
     (home-page
      "https://github.com/HeinrichApfelmus/vault")
     (synopsis "Persistent store for arbitrary values")
@@ -14226,18 +13194,16 @@ representing a store for a single element.")
   (package
     (name "ghc-vector")
     (version "0.12.3.1")
-    (outputs '("out" "static" "doc"))
+    (outputs '("out" "doc"))
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/vector/vector-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "vector" version))
        (sha256
         (base32
          "0dczbcisxhhix859dng5zhxkn3xvlnllsq60apqzvmyl5g056jpv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "vector")))
     ;; FIXME: To simplify upgrading all Haskell packages, we leave the tests
     ;; disabled for now.
     (arguments
@@ -14263,13 +13229,12 @@ optimisation framework.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "vector-algorithms-" version "/"
-                           "vector-algorithms-" version ".tar.gz"))
+       (uri (hackage-uri "vector-algorithms" version))
        (sha256
         (base32
          "0fxg6w0vh5g2vzw4alajj9ywdijfn9nyx28hbckhmwwbfxb6l5vn"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "vector-algorithms")))
     (inputs
      (list ghc-vector))
     (native-inputs
@@ -14286,18 +13251,19 @@ optimisation framework.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/"
-             "vector-binary-instances/vector-binary-instances-"
-             version ".tar.gz"))
+       (uri (hackage-uri "vector-binary-instances" version))
        (sha256
         (base32
          "0kgmlb4rf89b18d348cf2k06xfhdpamhmvq7iz5pab5014hknbmp"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "vector-binary-instances")))
     (inputs
      (list ghc-vector))
     (native-inputs
      (list ghc-tasty ghc-tasty-quickcheck))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0av0k2gn90mf5ai74575bd368x73ljnr7xlkwsqmrs6zdzkw0i83")))
     (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
@@ -14310,28 +13276,27 @@ boxed and storable vectors.")
 (define-public ghc-vector-builder
   (package
     (name "ghc-vector-builder")
-    (version "0.3.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "vector-builder-" version "/"
-                           "vector-builder-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1g1zxp6xcwcq3372a5qqs44cl09a48p21m1jsys5bsampprlmcgs"))))
+    (version "0.3.8.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "vector-builder" version))
+              (sha256
+               (base32
+                "0gc2n5j1ca07hd50shy7l5xybs1y720zrarzs5dj74dsdcpvmjxw"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-vector ghc-semigroups ghc-base-prelude))
+    (properties '((upstream-name . "vector-builder")))
+    (inputs (list ghc-vector))
     (native-inputs (list ghc-attoparsec
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-rerebase
                          ghc-tasty
                          ghc-tasty-hunit
-                         ghc-tasty-quickcheck
-                         ghc-hunit
-                         ghc-quickcheck-instances
-                         ghc-rerebase))
+                         ghc-tasty-quickcheck))
     (home-page "https://github.com/nikita-volkov/vector-builder")
     (synopsis "Vector builder for Haskell")
-    (description "This Haskell package provides an API for constructing vectors.
+    (description
+     "This Haskell package provides an API for constructing vectors.
 It provides the composable @code{Builder} abstraction, which has instances of the
 @code{Monoid} and @code{Semigroup} classes.
 
@@ -14343,22 +13308,24 @@ vector.")
 (define-public ghc-vector-th-unbox
   (package
     (name "ghc-vector-th-unbox")
-    (version "0.2.1.9")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "vector-th-unbox-" version "/"
-                           "vector-th-unbox-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0jbzm31d91kxn8m0h6iplj54h756q6f4zzdrnb2w7rzz5zskgqyl"))))
+    (version "0.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "vector-th-unbox" version))
+              (sha256
+               (base32
+                "0j81m09xxv24zziv0nanfppckzmas5184jr3npjhc9w49r3cm94a"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-vector ghc-data-default))
-    (home-page "https://github.com/liyang/vector-th-unbox")
+    (properties '((upstream-name . "vector-th-unbox")))
+    (inputs (list ghc-vector))
+    (native-inputs (list ghc-data-default))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0ki133sixq8pkfys36nl25jzdvnw40qq2bnskdmk2zyjhckdjcna")))
+    (home-page "https://github.com/tsurucapital/vector-th-unbox")
     (synopsis "Deriver for Data.Vector.Unboxed using Template Haskell")
-    (description "This Haskell library provides a Template Haskell
+    (description
+     "This Haskell library provides a Template Haskell
 deriver for unboxed vectors, given a pair of coercion functions to
 and from some existing type with an Unbox instance.")
     (license license:bsd-3)))
@@ -14370,14 +13337,12 @@ and from some existing type with an Unbox instance.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/void/void-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "void" version))
        (sha256
         (base32
          "05vk3x1r9a2pqnzfji475m5gdih2im1h7rbi2sc67p1pvj6pbbsk"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "void")))
     (inputs
      (list ghc-semigroups ghc-hashable))
     (home-page "https://github.com/ekmett/void")
@@ -14394,22 +13359,15 @@ given term should not exist.")
     (version "0.2.0")
     (source (origin
       (method url-fetch)
-      (uri (string-append
-             "https://hackage.haskell.org/package/wave/wave-"
-             version
-             ".tar.gz"))
+      (uri (hackage-uri "wave" version))
       (sha256
         (base32
           "149kgwngq3qxc7gxpkqb16j669j0wpv2f3gnvfwp58yg6m4259ki"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wave")))
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "wave.cabal"
-               (("temporary.* < 1\\.3")
-                "temporary >= 1.1 && < 1.4")))))))
+     `(#:cabal-revision ("1"
+                         "19rxhnqhhv1qs35y723c15c8nifj8pakcrd09jlvg5271zg4qb0b")))
     (inputs
      (list ghc-cereal ghc-data-default-class ghc-quickcheck ghc-temporary))
     (native-inputs
@@ -14427,12 +13385,12 @@ files in Haskell.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/wcwidth/wcwidth-"
-             version ".tar.gz"))
+       (uri (hackage-uri "wcwidth" version))
        (sha256
         (base32
          "1n1fq7v64b59ajf5g50iqj9sa34wm7s2j3viay0kxpmvlcv8gipz"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wcwidth")))
     (inputs
      (list ghc-setlocale ghc-utf8-string ghc-attoparsec))
     (home-page "https://github.com/solidsnack/wcwidth/")
@@ -14443,14 +13401,6 @@ The command line tool can compile a width table to Haskell code that assigns
 widths to the Char type.")
     (license license:bsd-3)))
 
-(define-public ghc-wcwidth-bootstrap
-  (package
-    (inherit ghc-wcwidth)
-    (name "ghc-wcwidth-bootstrap")
-    (inputs
-     (list ghc-setlocale ghc-utf8-string ghc-attoparsec-bootstrap))
-    (properties '((hidden? #t)))))
-
 (define-public ghc-weigh
   (package
     (name "ghc-weigh")
@@ -14458,12 +13408,12 @@ widths to the Char type.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/weigh/"
-                           "weigh-" version ".tar.gz"))
+       (uri (hackage-uri "weigh" version))
        (sha256
         (base32
          "13pbjr7fzqy3s9c1nd2jhfwzbpccmpfwdn7y46z9k2bfkch1jam9"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "weigh")))
     (inputs
      (list ghc-split ghc-temporary))
     (home-page "https://github.com/fpco/weigh#readme")
@@ -14479,21 +13429,19 @@ Haskell value or function.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/wizards/wizards-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "wizards" version))
        (sha256
         (base32
          "1clvbd1ckhvy29qrbmpkn7bya7300fq6znnps23nn3nxyrxhsr85"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wizards")))
     (inputs
      (list ghc-control-monad-free))
     (arguments
      `(#:cabal-revision
        ("1"
         "095qd17zrdhqmcvmslbyzfa5sh9glvvsnsvnlz31gzsmi8nnsgim")))
-    (home-page "http://hackage.haskell.org/package/wizards")
+    (home-page "https://hackage.haskell.org/package/wizards")
     (synopsis "High level, generic library for interrogative user interfaces")
     (description
      "@code{wizards} is a package designed for the quick and painless
@@ -14520,13 +13468,12 @@ also be used for making GUI wizard interfaces.")
     (version "1.2.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://hackage.haskell.org/package/wl-pprint/wl-pprint-"
-                    version ".tar.gz"))
+              (uri (hackage-uri "wl-pprint" version))
               (sha256
                (base32
                 "0kn7y8pdrv8f87zhd5mifcl8fy3b2zvnzmzwhdqhxxlyzwiq6z0c"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wl-pprint")))
     (home-page "https://hackage.haskell.org/package/wl-pprint")
     (synopsis "Wadler/Leijen pretty printer")
     (description
@@ -14542,14 +13489,12 @@ instances of the @code{Pretty} class.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "mirror://hackage/package/wl-pprint-annotated/wl-pprint-annotated-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "wl-pprint-annotated" version))
        (sha256
         (base32
          "1br7qyf27iza213inwhf9bm2k6in0zbmfw6w4clqlc9f9cj2nrkb"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wl-pprint-annotated")))
     (native-inputs
      (list ghc-tasty ghc-tasty-hunit))
     (home-page
@@ -14567,41 +13512,34 @@ modernized interface.")
 (define-public ghc-wl-pprint-text
   (package
     (name "ghc-wl-pprint-text")
-    (version "1.2.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/wl-pprint-text/wl-pprint-text-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "030ckgzz14sv2c317g4j5g68hyq9xi40cmv0apwclw6sc6xgsvly"))))
+    (version "1.2.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "wl-pprint-text" version))
+              (sha256
+               (base32
+                "0axivwh7bxmljxpfnccs66knxzrqck07byxmp2j737xbb26pf5cj"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-base-compat))
-    (home-page "https://hackage.haskell.org/package/wl-pprint-text")
+    (properties '((upstream-name . "wl-pprint-text")))
+    (inputs (list ghc-base-compat))
+    (home-page "http://hackage.haskell.org/package/wl-pprint-text")
     (synopsis "Wadler/Leijen Pretty Printer for Text values")
-    (description
-     "A clone of wl-pprint for use with the text library.")
+    (description "A clone of wl-pprint for use with the text library.")
     (license license:bsd-3)))
 
 (define-public ghc-word-wrap
   (package
     (name "ghc-word-wrap")
-    (version "0.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "word-wrap/word-wrap-" version ".tar.gz"))
-       (sha256
-        (base32 "15rcqhg9vb7qisk9ryjnyhhfgigxksnkrczycaw2rin08wczjwpb"))))
+    (version "0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "word-wrap" version))
+              (sha256
+               (base32
+                "0i57233g4p9p8c0jf9mp3pvknwgv1lsrxm4mxjay38rw0372jpzq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "word-wrap")))
     (native-inputs (list ghc-hspec))
-    (arguments
-     `(#:cabal-revision
-       ("1" "1k4w4g053vhmpp08542hrqaw81p3p35i567xgdarqmpghfrk68pp")))
     (home-page "https://github.com/jtdaugherty/word-wrap/")
     (synopsis "Haskell library for word-wrapping text")
     (description
@@ -14615,14 +13553,12 @@ modernized interface.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/word8/word8-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "word8" version))
        (sha256
         (base32
          "12jx7f13d2h1djq4fh4dyrab61sm49mj1w61j3rzp2vjfm696c16"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "word8")))
     (native-inputs
      (list ghc-hspec hspec-discover))
     (home-page "https://hackage.haskell.org/package/word8")
@@ -14637,14 +13573,12 @@ modernized interface.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/wordexp/wordexp-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "wordexp" version))
        (sha256
         (base32
          "1mbcrq89jz0dcibw66w0jdy4f4bfpx4zwjfs98rm3jjgdikwdzb4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "wordexp")))
     (native-inputs (list ghc-c2hs))
     (inputs
      (list ghc-semigroups))
@@ -14657,22 +13591,21 @@ word expansion like a posix-shell.")
 (define-public ghc-x11
   (package
     (name "ghc-x11")
-    (version "1.10.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/X11/"
-                           "X11-" version ".tar.gz"))
-       (sha256
-        (base32 "1ip207l97s8nw4daxp9s254agk8f0wibpf0prx0n695klqyn8bz1"))))
+    (version "1.10.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "X11" version))
+              (sha256
+               (base32
+                "0hnj2q310a6s0h479hq8jsmywymvxdjxg13zw46mmdndynwd2jnq"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "X11")))
     (arguments
      `(#:extra-directories
        ("libx11" "libxrandr" "libxinerama" "libxscrnsaver")))
-    (inputs
-     (list libx11 libxrandr libxinerama libxscrnsaver
-           ghc-data-default-class))
-    (home-page "https://github.com/haskell-pkg-janitors/X11")
+    (inputs (list libx11 libxrandr libxinerama libxscrnsaver
+                  ghc-data-default-class))
+    (home-page "https://github.com/xmonad/X11")
     (synopsis "Bindings to the X11 graphics library")
     (description
      "This package provides Haskell bindings to the X11 graphics library.  The
@@ -14682,27 +13615,25 @@ bindings are a direct translation of the C bindings.")
 (define-public ghc-x11-xft
   (package
     (name "ghc-x11-xft")
-    (version "0.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/X11-xft/"
-                           "X11-xft-" version ".tar.gz"))
-       (sha256
-        (base32 "1lgqb0s2qfwwgbvwxhjbi23rbwamzdi0l0slfr20c3jpcbp3zfjf"))))
+    (version "0.3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "X11-xft" version))
+              (sha256
+               (base32
+                "05m988r45jiqpxqsw3vafz158whlwfcl7v8z9nnqnqz9mggd4032"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "X11-xft")))
     (arguments
      `(#:extra-directories ("libx11" "libxft" "xorgproto")))
-    (inputs
-     (list ghc-x11 ghc-utf8-string libx11 libxft xorgproto))
-    (native-inputs
-     (list pkg-config))
-    (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/X11-xft")
+    (inputs (list ghc-x11 ghc-utf8-string libx11 libxft xorgproto))
+    (native-inputs (list pkg-config))
+    (home-page "http://hackage.haskell.org/package/X11-xft")
     (synopsis "Bindings to Xft")
     (description
      "Bindings to the Xft, X Free Type interface library, and some Xrender
 parts.")
-    (license license:lgpl2.1)))
+    (license license:bsd-3)))
 
 (define-public ghc-xdg-basedir
   (package
@@ -14711,13 +13642,12 @@ parts.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/xdg-basedir/"
-             "xdg-basedir-" version ".tar.gz"))
+       (uri (hackage-uri "xdg-basedir" version))
        (sha256
         (base32
          "0azlzaxp2dn4l1nr7shsxah2magk1szf6fx0mv75az00qsjw6qg4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "xdg-basedir")))
     (home-page "https://github.com/willdonnelly/xdg-basedir")
     (synopsis "XDG Base Directory library for Haskell")
     (description "This package provides a library implementing the XDG Base Directory spec.")
@@ -14730,14 +13660,12 @@ parts.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/xml/xml-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "xml" version))
        (sha256
         (base32
          "0g814lj7vaxvib2g3r734221k80k7ap9czv9hinifn8syals3l9j"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "xml")))
     (home-page "https://github.com/GaloisInc/xml")
     (synopsis "Simple XML library for Haskell")
     (description "This package provides a simple XML library for Haskell.")
@@ -14750,12 +13678,12 @@ parts.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/xml-conduit/"
-                           "xml-conduit-" version ".tar.gz"))
+       (uri (hackage-uri "xml-conduit" version))
        (sha256
         (base32
          "1zzh7xnmbm68dab1vqsjkr6ghxqgnla5nik4amrwlmhbdih1gcdx"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "xml-conduit")))
     (inputs
      (list ghc-conduit
            ghc-conduit-extra
@@ -14765,8 +13693,20 @@ parts.")
            ghc-data-default-class
            ghc-blaze-markup
            ghc-blaze-html))
-    (native-inputs
-     (list ghc-doctest ghc-hspec ghc-cabal-doctest ghc-hunit))
+    (native-inputs (list ghc-hspec ghc-hunit ghc-doctest hspec-discover))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "0m6sknp9xxz8a3dhvyfpyjvxp8ph511w19j4vj1qsd6hl2pazjy6")
+       #:tests? #f ; Depend on non-existent doctest API.
+       #:phases
+       (modify-phases %standard-phases
+         ;; Tries to use non-existent doctest API.
+         (add-after 'unpack 'disable-doctest
+           (lambda _
+             (with-output-to-file "Setup.hs"
+               (lambda _
+                 (display
+                  "import Distribution.Simple\nmain = defaultMain\n"))))))))
     (home-page "https://github.com/snoyberg/xml")
     (synopsis "Utilities for dealing with XML with the conduit package")
     (description
@@ -14781,12 +13721,12 @@ the @code{conduit} package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/xml-types/"
-                           "xml-types-" version ".tar.gz"))
+       (uri (hackage-uri "xml-types" version))
        (sha256
         (base32
          "102cm0nvfmf9gn8hvn5z8qvmg931laczs33wwd5iyz9bc37f9mfs"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "xml-types")))
     (home-page "https://john-millikin.com/software/haskell-xml/")
     (synopsis "Basic types for representing XML")
     (description "This package provides basic types for representing XML
@@ -14796,56 +13736,56 @@ documents.")
 (define-public ghc-xml-hamlet
   (package
     (name "ghc-xml-hamlet")
-    (version "0.5.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/xml-hamlet/"
-                           "xml-hamlet-" version ".tar.gz"))
-       (sha256
-        (base32 "0jrhcjy7ww59dafg857f2g2df1fw2jmbwcs1q379ph0pc5rxj3lj"))))
+    (version "0.5.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "xml-hamlet" version))
+              (sha256
+               (base32
+                "109fck1626d74s00ssjffg837584wf7dxpswkil37wqqfy94mw2z"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-shakespeare ghc-xml-conduit))
-    (native-inputs
-     (list ghc-hspec ghc-hunit))
-    (home-page "https://www.yesodweb.com/")
+    (properties '((upstream-name . "xml-hamlet")))
+    (inputs (list ghc-shakespeare ghc-xml-conduit))
+    (native-inputs (list ghc-hspec ghc-hunit))
+    (home-page "http://www.yesodweb.com/")
     (synopsis "Hamlet-style quasiquoter for XML content")
-    (description "This package provides a type-safe tool for generating XML
+    (description
+     "This package provides a type-safe tool for generating XML
 code via quasi-quoting built on top of @code{ghc-shakespeare}.")
     (license license:bsd-3)))
 
 (define-public ghc-yaml
   (package
     (name "ghc-yaml")
-    (version "0.11.7.0")
+    (version "0.11.8.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/"
-                                  "yaml/yaml-" version ".tar.gz"))
+              (uri (hackage-uri "yaml" version))
               (sha256
                (base32
-                "0s08kw0hqxixxripwjmz7b4yh9130dws3jaj460x8ds8q4b6khbx"))))
+                "1s0arllihjjqp65jbc8c1w5106i2infppsirvbsifpmpkf14w6pn"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "yaml")))
+    (inputs (list ghc-aeson
+                  ghc-attoparsec
+                  ghc-conduit
+                  ghc-libyaml
+                  ghc-resourcet
+                  ghc-scientific
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-optparse-applicative))
+    (native-inputs (list ghc-hunit
+                         ghc-base-compat
+                         ghc-hspec
+                         ghc-mockery
+                         ghc-raw-strings-qq
+                         ghc-temporary
+                         hspec-discover))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1dix5jm3d380vjr9l6wqz54zk883kilk8rijlvjp6b13mjxwcj1l")))
+    (home-page "https://github.com/snoyberg/yaml#readme")
     (synopsis "Parsing and rendering YAML documents")
     (description
      "This package provides a library to parse and render YAML documents.")
@@ -14854,18 +13794,17 @@ code via quasi-quoting built on top of @code{ghc-shakespeare}.")
 (define-public ghc-zip-archive
   (package
     (name "ghc-zip-archive")
-    (version "0.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/zip-archive/zip-archive-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "1cdix5mnxrbs7b2kivhdydhfzgxidd9dqlw71mdw5p21cabwkmf5"))))
+    (version "0.4.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "zip-archive" version))
+              (sha256
+               (base32
+                "02b76hm76gqallij70z77xz1y981ig4biklzm0wgxran8d06n0d4"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "zip-archive")))
+    (inputs (list ghc-zlib ghc-digest))
+    (native-inputs (list ghc-hunit ghc-temporary which unzip))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -14876,48 +13815,31 @@ code via quasi-quoting built on top of @code{ghc-shakespeare}.")
                    (path (getenv "PATH")))
                (setenv "PATH" (string-append unzip "/bin:" which "/bin:" path))
                #t))))))
-    (inputs
-     (list ghc-digest ghc-temporary ghc-zlib))
-    (native-inputs
-     (list ghc-hunit unzip which))
-    (home-page "https://hackage.haskell.org/package/zip-archive")
+    (home-page "http://github.com/jgm/zip-archive")
     (synopsis "Zip archive library for Haskell")
-    (description "The zip-archive library provides functions for creating,
+    (description
+     "The zip-archive library provides functions for creating,
 modifying, and extracting files from zip archives in Haskell.")
     (license license:bsd-3)))
 
 (define-public ghc-zlib
   (package
     (name "ghc-zlib")
-    (version "0.6.2.3")
-    (outputs '("out" "static" "doc"))
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/zlib/zlib-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32
-         "125wbayk8ifp0gp8cb52afck2ziwvqfrjzbmwmy52g6bz7fnnzw0"))))
+    (version "0.6.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "zlib" version))
+              (sha256
+               (base32
+                "1nh4xsm3kgsg76jmkcphvy7hhslg9hx1s75mpsskhi2ksjd9ialy"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "zlib")))
     (arguments
-     `(#:extra-directories ("zlib")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'strip-test-framework-constraints
-           (lambda _
-             (substitute* "zlib.cabal"
-               (("tasty            >= 0\\.8 && < 0\\.12") "tasty")
-               (("tasty-hunit      >= 0\\.8 && < 0\\.10") "tasty-hunit")
-               (("tasty-quickcheck == 0\\.8\\.\\*") "tasty-quickcheck")))))))
+     `(#:extra-directories ("zlib")))
     (inputs (list zlib))
-    (native-inputs
-     (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")
+    (native-inputs (list ghc-quickcheck ghc-tasty ghc-tasty-quickcheck))
+    (home-page "http://hackage.haskell.org/package/zlib")
+    (synopsis "Compression and decompression in the gzip and zlib formats")
     (description
      "This package provides a pure interface for compressing and decompressing
 streams of data represented as lazy @code{ByteString}s.  It uses the zlib C
@@ -14934,12 +13856,12 @@ provides access to the full zlib feature set.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "zlib-bindings/zlib-bindings-" version ".tar.gz"))
+       (uri (hackage-uri "zlib-bindings" version))
        (sha256
         (base32
          "02ciywlz4wdlymgc3jsnicz9kzvymjw1www2163gxidnz4wb8fy8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "zlib-bindings")))
     (inputs
      (list ghc-zlib))
     (native-inputs
@@ -14960,12 +13882,12 @@ provides access to the full zlib feature set.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "zstd/zstd-" version ".tar.gz"))
+       (uri (hackage-uri "zstd" version))
        (sha256
         (base32
          "0vghl48cxcqy72sqk2gpi7rvy5ya36j13vndaxi6kck6bqivbhm0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "zstd")))
     (native-inputs
      (list ghc-quickcheck ghc-test-framework
            ghc-test-framework-quickcheck2))
@@ -14980,22 +13902,20 @@ compression ratios.")
 (define-public ghc-indexed-traversable
   (package
     (name "ghc-indexed-traversable")
-    (version "0.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/indexed-traversable/indexed-traversable-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0fc18vdm1894yjbjkj9wjm27bf37ac3gvkzak677mgiw2pinmhvs"))))
+    (version "0.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "indexed-traversable" version))
+              (sha256
+               (base32
+                "13b91rkhs6wcshaz3dwx6x3xjpw5z5bm2riwp78zxccqf7p5hs2i"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "indexed-traversable")))
     (inputs (list ghc-generic-deriving))
     (arguments
-     `(#:cabal-revision
-       ("1" "0krvp9v5dh4w2076kar48cpkk62ndqp769v2ai3b38rsa5bj6q74")))
-    (home-page "https://hackage.haskell.org/package/indexed-traversable")
+     `(#:cabal-revision ("2"
+                         "0l2k9jrmixkkf7qzzq0bqgvk6axaqi9sxxkpb4dgj8frmc4bg8aj")))
+    (home-page "http://hackage.haskell.org/package/indexed-traversable")
     (synopsis "Indexed Functor, Foldable, and Traversable typeclasses")
     (description
      "This Haskell package provides three useful generalizations:
@@ -15027,16 +13947,14 @@ associated @code{TypeFamilies} instead of @code{FunctionalDependencies}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/type-equality/type-equality-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "type-equality" version))
        (sha256
         (base32 "1s4cl11rvvv7n95i3pq9lmmx08kwh4z7l3d1hbv4wi8il81baa27"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "type-equality")))
     (arguments
-     `(#:cabal-revision
-       ("2" "1a3irpv5kyg3rywhmcp5fwg5irrdbdr0hrlw7asdk113nakrba7j")))
+     `(#:cabal-revision ("4"
+                         "0sajw67mmk5syhbrwx4bz82j5cjhm04n4kjl0pp3dnphxg1m5nbw")))
     (home-page "https://github.com/hesselink/type-equality")
     (synopsis "@code{Data.Type.Equality} compatibility package")
     (description
@@ -15055,20 +13973,16 @@ for compilers with @code{PolyKinds}.")
 (define-public ghc-selective
   (package
     (name "ghc-selective")
-    (version "0.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/selective/selective-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1mg5hnr3f4zjh3ajy16jkxj630rnfa9iqnnmpjqd9gkjdxpssd5l"))))
+    (version "0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "selective" version))
+              (sha256
+               (base32
+                "18wd5wn8xaw0ilx34j292l06cqn6r2rri1wvxng8ygd8141sizdh"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-tasty ghc-tasty-expected-failure
-           ghc-tasty-quickcheck))
+    (properties '((upstream-name . "selective")))
+    (native-inputs (list ghc-quickcheck))
     (home-page "https://github.com/snowleopard/selective")
     (synopsis "Selective applicative functors")
     (description
@@ -15086,13 +14000,11 @@ on selective functors} for more details.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/keys/keys-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "keys" version))
        (sha256
         (base32 "0ik6wsff306dnbz0v3gpiajlj5b558hrk9176fzcb2fclf4447nm"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "keys")))
     (inputs
      (list ghc-comonad
            ghc-free
@@ -15102,6 +14014,9 @@ on selective functors} for more details.")
            ghc-tagged
            ghc-transformers-compat
            ghc-unordered-containers))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "1sb7ii9mhx77rhviqbmdc5r6wlimkmadxi1pyk7k3imdqcdzgjlp")))
     (home-page "http://github.com/ekmett/keys/")
     (synopsis "Keyed functors and containers")
     (description
@@ -15114,28 +14029,25 @@ dependencies.")
 (define-public ghc-pointed
   (package
     (name "ghc-pointed")
-    (version "5.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/pointed/pointed-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "07p92y62dibys3xa59rvx52xyyr39nghl73z7hzwnksa3ry3vfmq"))))
+    (version "5.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "pointed" version))
+              (sha256
+               (base32
+                "1mv06x2hscs220w4acm5jwg96vi4faky6ir9hnljfry3n2r2xix3"))))
     (build-system haskell-build-system)
-    (inputs
-     (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/")
+    (properties '((upstream-name . "pointed")))
+    (inputs (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 "http://github.com/ekmett/pointed/")
     (synopsis "Pointed and copointed data types")
     (description
      "This Haskell library provides pointed and copointed data types.")
@@ -15148,13 +14060,11 @@ dependencies.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/vector-instances/vector-instances-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "vector-instances" version))
        (sha256
         (base32 "10akvpa5w9bp0d8hflab63r9laa9gy2hv167smhjsdzq1kplc0hv"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "vector-instances")))
     (inputs
      (list ghc-vector
            ghc-semigroupoids
@@ -15173,19 +14083,16 @@ the @code{ghc-vector} package.")
 (define-public ghc-th-compat
   (package
     (name "ghc-th-compat")
-    (version "0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/th-compat/th-compat-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1il1hs5yjfkb417c224pw1vrh4anyprasfwmjbd4fkviyv55jl3b"))))
+    (version "0.1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "th-compat" version))
+              (sha256
+               (base32
+                "1f5ssi24mnhmmi91dl5ddg2jwci6akwlznqggf56nyxl9b0pmyfq"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-base-compat ghc-hspec hspec-discover))
+    (properties '((upstream-name . "th-compat")))
+    (native-inputs (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")
@@ -15200,21 +14107,18 @@ range of @code{template-haskell} versions.  On recent versions of
 (define-public ghc-filepattern
   (package
     (name "ghc-filepattern")
-    (version "0.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/filepattern/filepattern-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0nznzji5haxl4ninm2a79dqf4c7fj6pc3z9gdc6wbf5h1pp14afr"))))
+    (version "0.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "filepattern" version))
+              (sha256
+               (base32
+                "0dlnwnwhsfdkwm69z66wj5d2x9n3la55glq4fsn5rxm2kr1msi6c"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-extra ghc-semigroups))
+    (properties '((upstream-name . "filepattern")))
+    (inputs (list ghc-extra))
     (native-inputs (list ghc-quickcheck))
-    (home-page "https://github.com/ndmitchell/filepattern")
+    (home-page "https://github.com/ndmitchell/filepattern#readme")
     (synopsis "File path glob-like matching")
     (description
      "This package provides Haskell library for matching files using patterns
@@ -15243,21 +14147,18 @@ traverals using patterns.
 (define-public ghc-lib-parser-ex
   (package
     (name "ghc-lib-parser-ex")
-    (version "8.10.0.23")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ghc-lib-parser-ex/ghc-lib-parser-ex-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0r5sl7hhn0cxp0b1dskx1lshplc0yka7hcvs2nh10nrj07fjd3vj"))))
+    (version "9.2.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ghc-lib-parser-ex" version))
+              (sha256
+               (base32
+                "138wkpy7qpdkp07028flab3lwq4b3mns0qcrkfrhclixlz8pi74v"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "ghc-lib-parser-ex")))
     (inputs (list ghc-uniplate))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit ghc-extra))
-    (home-page "https://github.com/shayne-fletcher/ghc-lib-parser-ex")
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-extra))
+    (home-page "https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme")
     (synopsis "Algorithms on GHC parse trees")
     (description
      "The @code{ghc-lib-parser-ex} package contains GHC API parse tree utilities.")
@@ -15266,18 +14167,16 @@ traverals using patterns.
 (define-public ghc-lift-type
   (package
     (name "ghc-lift-type")
-    (version "0.1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/lift-type/lift-type-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1195iyf0s8zmibjmvd10bszyccp1a2g4wdysn7yk10d3j0q9xdxf"))))
+    (version "0.1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lift-type" version))
+              (sha256
+               (base32
+                "039psym2ghkydk4qyycs3cxndrf85ab5hwzrqv0ajxcilqr11n0h"))))
     (build-system haskell-build-system)
-    (home-page "https://github.com/parsonsmatt/lift-type")
+    (properties '((upstream-name . "lift-type")))
+    (home-page "https://github.com/parsonsmatt/lift-type#readme")
     (synopsis
      "Lift a type from a Typeable constraint to a Template Haskell type")
     (description
@@ -15289,21 +14188,18 @@ it.")
 (define-public ghc-unicode-collation
   (package
     (name "ghc-unicode-collation")
-    (version "0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/unicode-collation/unicode-collation-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0nbxkpd29ivdi6vcikbaasffkcz9m2vd4nhv29p6gmvckzmhj7zi"))))
+    (version "0.1.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "unicode-collation" version))
+              (sha256
+               (base32
+                "0imcdsk0qqwj31zwgpick4s2nbxlyxwa64lq6r212jd0y0hrrvvl"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "unicode-collation")))
     (inputs (list ghc-th-lift-instances))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
-           ghc-unicode-transforms ghc-doctest))
+    (native-inputs (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
@@ -15317,34 +14213,31 @@ provided.")
 (define-public ghc-citeproc
   (package
     (name "ghc-citeproc")
-    (version "0.4.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/citeproc/citeproc-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "13hgbcbr7jbyfbxp8fsc43c2wq4fhlbxzqwh1plfkdi5n9bif1lv"))))
+    (version "0.8.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "citeproc" version))
+              (sha256
+               (base32
+                "1rja6vdggmh7d40gsg2xfs9md6m1zbfddpsd27a15qyqb3530jzw"))))
     (build-system haskell-build-system)
-    (inputs
-     (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))
+    (properties '((upstream-name . "citeproc")))
+    (inputs (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")
+    (home-page "http://hackage.haskell.org/package/citeproc")
     (synopsis "Generate citations and bibliography from CSL styles")
     (description
      "@code{ghc-citeproc} parses @acronym{Citation Style Language, CSL} style files
@@ -15355,20 +14248,17 @@ entries.  For more information about CSL, see @uref{https://citationstyles.org/}
 (define-public ghc-commonmark
   (package
     (name "ghc-commonmark")
-    (version "0.2.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/commonmark/commonmark-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "105szy7l4ji255fwv0kbfcy3i3a3a4197zgj6s9jb12kwbn6n0c7"))))
+    (version "0.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "commonmark" version))
+              (sha256
+               (base32
+                "0kmjc9xgzy33kxz842mw5rdywip3lmk7v3ambrs87nakawgl42xp"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-unicode-transforms))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
+    (properties '((upstream-name . "commonmark")))
+    (inputs (list ghc-unicode-transforms ghc-unicode-data))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Pure Haskell Commonmark parser")
     (description
@@ -15391,21 +14281,17 @@ varies linearly with input length.")
 (define-public ghc-commonmark-extensions
   (package
     (name "ghc-commonmark-extensions")
-    (version "0.2.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/commonmark-extensions/commonmark-extensions-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0jm6w84p2a2gyaljvnlvjjwrwnir1lss3ps53d0bd8mkvhixxrqr"))))
+    (version "0.2.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "commonmark-extensions" version))
+              (sha256
+               (base32
+                "009yrsb2xxna73q6nnijfx5ngffaz369mildvqvn91qbrkrzq7pl"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-network-uri ghc-commonmark ghc-emojis))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit))
+    (properties '((upstream-name . "commonmark-extensions")))
+    (inputs (list ghc-network-uri ghc-commonmark ghc-emojis))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
     (home-page "https://github.com/jgm/commonmark-hs")
     (synopsis "Extensions for @code{ghc-commonmark}")
     (description
@@ -15417,19 +14303,16 @@ footnotes, math, and more.")
 (define-public ghc-commonmark-pandoc
   (package
     (name "ghc-commonmark-pandoc")
-    (version "0.2.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/commonmark-pandoc/commonmark-pandoc-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "15rfaz49msswb7gh5wyxpm9vckbf3wzyd2m5m2f3hggb82ydk5cp"))))
+    (version "0.2.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "commonmark-pandoc" version))
+              (sha256
+               (base32
+                "1dpi8zvjshab96w56qfqcys9h09f46lld8sc9q4xzb0y1p6lwmap"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-commonmark ghc-commonmark-extensions ghc-pandoc-types))
+    (properties '((upstream-name . "commonmark-pandoc")))
+    (inputs (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
@@ -15440,21 +14323,18 @@ Pandoc types.")
 (define-public ghc-hslua-module-path
   (package
     (name "ghc-hslua-module-path")
-    (version "0.1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hslua-module-path/hslua-module-path-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1zxfljcn74rky26ijqmba6grpj0h9plgr47wxdaf7gcz1y8dhn68"))))
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-module-path" version))
+              (sha256
+               (base32
+                "1sy2k4mb263kg85vkf39ja84xz5kvm6z61xn62jy1swhrvvd96sr"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-hslua))
-    (native-inputs
-     (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
-    (home-page "https://github.com/hslua/hslua-module-path")
+    (properties '((upstream-name . "hslua-module-path")))
+    (inputs (list ghc-hslua-core ghc-hslua-marshalling ghc-hslua-packaging))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
+    (home-page "https://hslua.org/")
     (synopsis "Lua module to work with file paths")
     (description
      "This Haskell library provides a Lua module to work with file paths in a
@@ -15464,19 +14344,23 @@ platform independent way.")
 (define-public ghc-template-haskell
   (package
     (name "ghc-template-haskell")
-    (version "2.16.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/template-haskell/template-haskell-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1nk1cv35szp80qkhbyh5gn6vn194zzl0wz186qrqdrdx3a9r9w4g"))))
+    (version "2.18.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "template-haskell" version))
+              (sha256
+               (base32
+                "0mcb7psdkyx9ddwkny0ymvadrsy2dnj82d6jdm23c63zv99z3g1r"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-boot-th))
-    (home-page "http://hackage.haskell.org/package/template-haskell")
+    (properties '((upstream-name . "template-haskell")))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "template-haskell.cabal"
+               (("ghc-boot-th == 9.2.1") "ghc-boot-th")))))))
+    (home-page "https://hackage.haskell.org/package/template-haskell")
     (synopsis "Support library for Template Haskell")
     (description
      "This package provides modules containing facilities for manipulating
@@ -15488,80 +14372,50 @@ information.")
 (define-public ghc-genvalidity-hspec
   (package
     (name "ghc-genvalidity-hspec")
-    (version "0.7.0.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/genvalidity-hspec/genvalidity-hspec-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0aajx07n2rznyqxb0c4pn9j2cvkzw5brz9ki4grhhigbcri3jzmv"))))
-    (build-system haskell-build-system)
-    (inputs
-     (list ghc-quickcheck
-           ghc-genvalidity
-           ghc-genvalidity-property
-           ghc-hspec
-           hspec-discover
-           ghc-hspec-core
-           ghc-validity))
-    (home-page "https://github.com/NorfairKing/validity")
+    (version "1.0.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "genvalidity-hspec" version))
+              (sha256
+               (base32
+                "00sv0mzlvny5ch7c9fnd19szqd0pjrkvi080x1i62qa5fdzs5yc4"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "genvalidity-hspec")))
+    (inputs (list ghc-quickcheck
+                  ghc-genvalidity
+                  ghc-genvalidity-property
+                  ghc-hspec
+                  ghc-hspec-core
+                  ghc-validity))
+    (native-inputs (list hspec-discover))
+    (home-page "https://github.com/NorfairKing/validity#readme")
     (synopsis "Standard spec's for @code{GenValidity} instances")
     (description
      "This haskell library provides validity and validity-based testing for
 @code{ghc-hspec}.")
     (license license:expat)))
 
-(define-public ghc-boot-th
-  (package
-    (name "ghc-boot-th")
-    (version "8.10.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/ghc-boot-th/ghc-boot-th-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0vhhmsd32p7zn9vhpv4d0k0b55n2dyhzy42xblndrma617kz8gli"))))
-    (build-system haskell-build-system)
-    (home-page "http://hackage.haskell.org/package/ghc-boot-th")
-    (synopsis
-     "Shared functionality between GHC and Template Haskell")
-    (description
-     "This library contains various bits shared between GHC and Template
-Haskell.  This package exists to ensure that @code{template-haskell} has a
-minimal set of transitive dependencies, since it is intended to be depended
-upon by user code.")
-    (license license:bsd-3)))
-
 (define-public ghc-binary-orphans
   (package
     (name "ghc-binary-orphans")
-    (version "1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/binary-orphans/binary-orphans-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0gbmn5rpvyxhw5bxjmxwld6918lslv03b2f6hshssaw1il5x86j3"))))
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "binary-orphans" version))
+              (sha256
+               (base32
+                "0b302hhjaybwbnpzrd8qmdp24g2xj2svib34zfxqqxg67j159rg2"))))
     (build-system haskell-build-system)
-    (native-inputs
-     (list ghc-quickcheck ghc-quickcheck-instances ghc-tagged ghc-tasty
-           ghc-tasty-quickcheck))
-    (arguments
-     `(#:cabal-revision
-       ("5" "1h2d37szfrcwn9rphnijn4q9l947b0wwqjs1aqmm62xkhbad7jf6")))
-    (home-page "http://hackage.haskell.org/package/binary-orphans")
+    (properties '((upstream-name . "binary-orphans")))
+    (native-inputs (list ghc-onetuple
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-tagged
+                         ghc-tasty
+                         ghc-tasty-quickcheck))
+    (home-page "https://hackage.haskell.org/package/binary-orphans")
     (synopsis "Compatibility package for binary")
-    (description
-     "This package provides instances defined in later versions of
+    (description "This package provides instances defined in later versions of
 @code{ghc-binary} package.")
     (license license:bsd-3)))
 
@@ -15572,13 +14426,11 @@ upon by user code.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/netlink/netlink-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "netlink" version))
        (sha256
         (base32 "1q8sxycv93sap6dgbw70scklnpjj5vav6qlvsxm5500jlvb3jnf0"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "netlink")))
     (inputs
      (list ghc-cereal ghc-monad-loops ghc-pretty-hex ghc-language-c
            ghc-regex-pcre))
@@ -15593,20 +14445,18 @@ of Netlink families.")
 (define-public ghc-doctest-driver-gen
   (package
     (name "ghc-doctest-driver-gen")
-    (version "0.3.0.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/doctest-driver-gen/doctest-driver-gen-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1fbqi4s4ajxhyv4a7nbh3v98limla0z8rfqlh02pwc1a90qpwy1a"))))
+    (version "0.3.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "doctest-driver-gen" version))
+              (sha256
+               (base32
+                "0a4jdg4mzhdgfal7jp60yrlv63iv7d8f7nxc9aqvrl93mairny8l"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Fail to open shared library.
+    (properties '((upstream-name . "doctest-driver-gen")))
     (native-inputs (list ghc-doctest))
-    (home-page "https://github.com/Hexirp/doctest-driver-gen")
+    (arguments (list #:tests? #f)) ;; XXX: doctest-driver-gen: error while loading shared libraries: libHSdoctest-driver-gen-0.3.0.6-3WJHXaMfGwJFKjjgcmC868-ghc9.2.5.so: cannot open shared object file: No such file or directory
+    (home-page "https://github.com/Hexirp/doctest-driver-gen#readme")
     (synopsis "Generate driver file for Doctest's Cabal integration")
     (description
      "@code{ghc-doctest-driver-gen} is a Doctest's driver file generator.  It
@@ -15616,19 +14466,19 @@ lets you automatically generate driver file for Doctest's Cabal integration.")
 (define-public ghc-template-haskell-compat-v0208
   (package
     (name "ghc-template-haskell-compat-v0208")
-    (version "0.1.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/template-haskell-compat-v0208/template-haskell-compat-v0208-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1s2ba86y2r9n4r1dwfg734y3nfqxak560s8srd04kbn623hnrkw8"))))
+    (version "0.1.9.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "template-haskell-compat-v0208" version))
+              (sha256
+               (base32
+                "1z87rla4vcbghdrvjkay59b686f0by02102vwrcayn4vbwzn4am1"))))
     (build-system haskell-build-system)
-    (home-page "https://github.com/nikita-volkov/template-haskell-compat-v0208")
-    (synopsis "Backwards compatibility layer for Template Haskell newer than 2.8")
+    (properties '((upstream-name . "template-haskell-compat-v0208")))
+    (home-page
+     "https://github.com/nikita-volkov/template-haskell-compat-v0208")
+    (synopsis
+     "Backwards compatibility layer for Template Haskell newer than 2.8")
     (description
      "This package provides a backwards compatibility layer for Template
 Haskell newer than 2.8.")
@@ -15641,13 +14491,11 @@ Haskell newer than 2.8.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/mysql/mysql-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "mysql" version))
        (sha256
         (base32 "051w428arxbix06a52dacqjpnkfx42zbazxsd3l9d857dsd0kl3g"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "mysql")))
     (arguments `(#:tests? #f)) ; TODO: Fails to connect to server.
     (inputs
      (list mysql zlib openssl))
@@ -15672,13 +14520,11 @@ built.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/blaze-textual/blaze-textual-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "blaze-textual" version))
        (sha256
         (base32 "0zjnwnjpcpnnm0815h9ngr3a3iy0szsnb3nrcavkbx4905s9k4bs"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "blaze-textual")))
     (inputs
      (list ghc-blaze-builder ghc-old-locale ghc-vector))
     (native-inputs
@@ -15694,30 +14540,26 @@ Haskell datatypes in text form using the @code{ghc-blaze-builder} library.")
 (define-public ghc-mysql-simple
   (package
     (name "ghc-mysql-simple")
-    (version "0.4.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/mysql-simple/mysql-simple-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1mhmszpq64h8kxr20iaj1laq46wr2gaqc8xxq1k821i7jfxfld6j"))))
+    (version "0.4.9")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "mysql-simple" version))
+              (sha256
+               (base32
+                "0hwv1hlr65m5l2zrrj5zmvrjz9y2814jy05l17l5jb4j4j5xw3z2"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Fails to connect to server.
-    (inputs
-     (list ghc-attoparsec
-           ghc-base16-bytestring
-           ghc-blaze-builder
-           ghc-mysql
-           ghc-pcre-light
-           ghc-old-locale
-           ghc-blaze-textual
-           ghc-vector
-           openssl
-           zlib))
+    (properties '((upstream-name . "mysql-simple")))
+    (inputs (list ghc-attoparsec
+                  ghc-base16-bytestring
+                  ghc-blaze-builder
+                  ghc-mysql
+                  ghc-pcre-light
+                  ghc-old-locale
+                  ghc-vector
+                  openssl
+                  zlib))
     (native-inputs (list ghc-hspec))
+    (arguments (list #:tests? #f)) ; Fail to build.
     (home-page "https://github.com/paul-rouse/mysql-simple")
     (synopsis "Mid-level MySQL client library")
     (description
@@ -15728,29 +14570,25 @@ Haskell datatypes in text form using the @code{ghc-blaze-builder} library.")
 (define-public ghc-persistent-qq
   (package
     (name "ghc-persistent-qq")
-    (version "2.12.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent-qq/persistent-qq-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "1dvniapxjaw2vmdqd5cplwxdxiy2l6z6gns8gp3ci3rn3xp0pf6p"))))
+    (version "2.12.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "persistent-qq" version))
+              (sha256
+               (base32
+                "0pzlhwl4h9q358zc6d0m5zv0ii2yhf2lzw0a3v2spfc1ch4a014a"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-haskell-src-meta ghc-persistent))
-    (native-inputs
-     (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")
+    (properties '((upstream-name . "persistent-qq")))
+    (inputs (list ghc-haskell-src-meta ghc-persistent))
+    (native-inputs (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#readme")
     (synopsis "Quasi-quoter for raw SQL for @code{ghc-persistent}")
     (description
      "This package provides a quasi-quoter for raw @acronym{SQL, Structured Query
@@ -15760,41 +14598,36 @@ Language} for @code{ghc-persistent}.")
 (define-public ghc-persistent-mysql
   (package
     (name "ghc-persistent-mysql")
-    (version "2.13.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent-mysql/persistent-mysql-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "18ji7a7lb1mjgqvi2mv2cg4vlgjkyzg2hgp09s7c9v071p3ll732"))))
+    (version "2.13.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "persistent-mysql" version))
+              (sha256
+               (base32
+                "0fm6agqwawwraw6l6kxm8lq40pm5pnjg093f574a7sdf648q21yc"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Fails to import MaybeFieldDefsTest.
-    (inputs
-     (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))
+    (properties '((upstream-name . "persistent-mysql")))
+    (inputs (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))
+    (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))
+    (arguments (list #:tests? #f)) ; Fails to connect to server.
     (home-page "http://www.yesodweb.com/book/persistent")
     (synopsis
      "Backend for the @code{ghc-persistent} library using MySQL database server")
@@ -15813,13 +14646,11 @@ is officially supported.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/hspec-expectations-lifted/hspec-expectations-lifted-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "hspec-expectations-lifted" version))
        (sha256
         (base32 "0a1qwz0n80lph8m9cq6cb06m8bsmqgg8ifx0acpylvrrkd8g3k92"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "hspec-expectations-lifted")))
     (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}")
@@ -15835,13 +14666,11 @@ to @code{MonadIO}.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/string-conversions/string-conversions-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "string-conversions" version))
        (sha256
         (base32 "150rdank90h7v08x0wq4dffjbxv2daf5v9sqfs5mab76kinwxg26"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "string-conversions")))
     (inputs (list ghc-utf8-string))
     (native-inputs
      (list hspec-discover ghc-hspec ghc-quickcheck-instances
@@ -15860,16 +14689,14 @@ string types into values of other string types.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/postgresql-libpq/postgresql-libpq-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "postgresql-libpq" version))
        (sha256
         (base32 "1gfnhc5pibn7zmifdf2g0c112xrpzsk756ln2kjzqljkspf4dqp3"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "postgresql-libpq")))
     (arguments
-     `(#:cabal-revision
-       ("1" "1clivf13z15w954a0kcfkv8yc0d8kx61b68x2hk7a9236ck7l2m2")))
+     `(#:cabal-revision ("3"
+                         "02cj493a2qxl5hddiq0579079s398hdqqy164pig6d61nl7q66cs")))
     (inputs (list postgresql))
     (home-page "https://github.com/haskellari/postgresql-libpq")
     (synopsis "Low-level bindings to @code{libpq}")
@@ -15887,13 +14714,11 @@ server and to receive the results of these queries.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/postgresql-simple/postgresql-simple-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "postgresql-simple" version))
        (sha256
         (base32 "0rz2bklxp4pvbxb2w49h5p6pbwabn6d5d4j4mrya4fpa0d13k43d"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "postgresql-simple")))
     (inputs
      (list ghc-time-compat
            ghc-aeson
@@ -15917,9 +14742,9 @@ server and to receive the results of these queries.")
            ghc-tasty-golden
            ghc-tasty-hunit))
     (arguments
-     `(#:cabal-revision
-       ("2" "1kwjlj0bsc1yd4dgfc0ydawq9acfjlf0bymwc830dryp16wpj9zv")))
-    (home-page "http://hackage.haskell.org/package/postgresql-simple")
+     `(#:cabal-revision ("8"
+                         "1qavb3qs1g307pc19k9y3yvqp0c1srwsplijvayn9ldp0bxdy6q8")))
+    (home-page "https://hackage.haskell.org/package/postgresql-simple")
     (synopsis "Mid-Level PostgreSQL client library")
     (description
      "This package provides a mid-Level PostgreSQL client library, forked from
@@ -15929,46 +14754,43 @@ server and to receive the results of these queries.")
 (define-public ghc-persistent-postgresql
   (package
     (name "ghc-persistent-postgresql")
-    (version "2.13.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/persistent-postgresql/persistent-postgresql-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "07pnr8m0nk43jaz6l293lzx4ivyqgnw94fjypazzm008b4irh7ir"))))
+    (version "2.13.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "persistent-postgresql" version))
+              (sha256
+               (base32
+                "1q9hy49nfrb3azgz5rjz235d7scy27l5axkih7crskaa04hf4k8d"))))
     (build-system haskell-build-system)
-    (arguments `(#:tests? #f)) ; TODO: Cannot import MaybeFieldDefsTest.
-    (inputs
-     (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))
+    (properties '((upstream-name . "persistent-postgresql")))
+    (inputs (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-vault
+                  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))
+    (arguments (list #:tests? #f)) ; Fails to connect to server.
     (home-page "http://www.yesodweb.com/book/persistent")
     (synopsis "Backend for the @code{ghc-persistent library} using Postgresql")
     (description
@@ -15983,13 +14805,11 @@ using the @code{ghc-postgresql-simple} package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/filtrable/filtrable-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "filtrable" version))
        (sha256
         (base32 "058jl7wjaxzvcayc9qzpikxvi9x42civ4sb02jh66rcvpndbfh5y"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "filtrable")))
     (arguments `(#:tests? #f)) ; TODO: Needs tasty >=1.3.1 && <1.4
     (native-inputs
      (list ghc-smallcheck ghc-tasty ghc-tasty-smallcheck))
@@ -16005,13 +14825,11 @@ using the @code{ghc-postgresql-simple} package.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/filelock/filelock-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "filelock" version))
        (sha256
         (base32 "06a44i7a956d7xkk2na4090xj2a7b7a228pk4spmccs4x20ymssh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "filelock")))
     (native-inputs
      (list ghc-async ghc-async))
     (home-page "https://github.com/takano-akio/filelock")
@@ -16023,24 +14841,21 @@ using the @code{ghc-postgresql-simple} package.")
 (define-public ghc-hsyaml-aeson
   (package
     (name "ghc-hsyaml-aeson")
-    (version "0.2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/HsYAML-aeson/HsYAML-aeson-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "12sxww260pc0bbpiyirm7911haxhljdi2f08a9ddpbgw8d5n7ffg"))))
+    (version "0.2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "HsYAML-aeson" version))
+              (sha256
+               (base32
+                "139hqd07hkr8ykvrgmcshh9f3vp9dnrj6ks5nl8hgrpi990jsy5r"))))
     (build-system haskell-build-system)
-    (inputs
-     (list ghc-hsyaml ghc-aeson ghc-scientific ghc-unordered-containers
-           ghc-vector))
+    (properties '((upstream-name . "HsYAML-aeson")))
+    (inputs (list ghc-hsyaml ghc-aeson ghc-scientific ghc-unordered-containers
+                  ghc-vector))
     (arguments
-     `(#:cabal-revision
-       ("3" "0vhdndyj5f07vvvnssn5ybdja5wmaydq0n2lfpihvdg4dkhczrx2")))
-    (home-page "https://hackage.haskell.org/package/HsYAML-aeson")
+     `(#:cabal-revision ("5"
+                         "06v8vkn58d67yx4v59rhvxpc0sjrpi6k8krvjrvbyl0fn0v0jd14")))
+    (home-page "http://hackage.haskell.org/package/HsYAML-aeson")
     (synopsis "JSON to YAML adapter")
     (description
      "The @uref{https://yaml.org/spec/1.2/spec.html, YAML 1.2} format provides
@@ -16062,13 +14877,11 @@ data into native Haskell data types.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/lukko/lukko-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "lukko" version))
        (sha256
         (base32 "07xb926kixqv5scqdl8w34z42zjzdpbq06f0ha3f3nm3rxhgn3m8"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "lukko")))
     (native-inputs
      (list ghc-async
            ghc-singleton-bool
@@ -16077,8 +14890,8 @@ data into native Haskell data types.")
            ghc-tasty-hunit
            ghc-temporary))
     (arguments
-     `(#:cabal-revision
-       ("1" "0mmq1q82mrbayiij0p8wdnkf0j8drmq1iibg8kn4cak3nrn9pd1d")))
+     `(#:cabal-revision ("3"
+                         "1a6spmbiv3ias40sjrnsxfgr1d5mwg039a2q7113zb7i9n6c1m7g")))
     (home-page "https://hackage.haskell.org/package/lukko")
     (synopsis "File locking")
     (description
@@ -16099,17 +14912,16 @@ locking.
 (define-public ghc-dec
   (package
     (name "ghc-dec")
-    (version "0.0.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/dec/dec-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "0yslffafmqfkvhcw2arpc53hfmn1788z85ss9lxnbclr29lbvzgc"))))
+    (version "0.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "dec" version))
+              (sha256
+               (base32
+                "126z70ij9hhy8pajw0d5fl0hrppy5sh22j8nkx46i0g6qz3l7071"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "dec")))
+    (inputs (list ghc-boring))
     (home-page "https://github.com/phadej/vec")
     (synopsis "Decidable propositions")
     (description
@@ -16136,6 +14948,7 @@ data Dec a
                (base32
                 "1dqq1rnx1w0cn4w11knmxvn7qy4lg4m39dgw4rs6r2pjqzgrwarh"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "Ansi2Html")))
     (home-page "http://janzzstimmpfle.de/~jens/software/Ansi2Html/")
     (synopsis "Convert ANSI Terminal Sequences to nice HTML markup")
     (description
@@ -16154,6 +14967,7 @@ pages.")
                (base32
                 "0rna8ir2cfp8gk0rd2q60an51jxc08lx4gl0liw8wwqgh1ijxv8b"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "open-browser")))
     (arguments
       (list
        #:phases
@@ -16173,25 +14987,1263 @@ pages.")
 (define-public ghc-singleton-bool
   (package
     (name "ghc-singleton-bool")
-    (version "0.1.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/singleton-bool/singleton-bool-"
-             version
-             ".tar.gz"))
-       (sha256
-        (base32 "17w9vv6arn7vvc7kykqcx81q2364ji43khrryl27r1cjx9yxapa0"))))
+    (version "0.1.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "singleton-bool" version))
+              (sha256
+               (base32
+                "1pc34dbzx5g3vw5w03zifvqva3whyvxzfy3yh78qkpd05f0g98sw"))))
     (build-system haskell-build-system)
-    (inputs (list ghc-dec))
+    (properties '((upstream-name . "singleton-bool")))
+    (inputs (list ghc-boring ghc-dec ghc-some))
     (arguments
-     `(#:cabal-revision
-       ("3" "11rhzpy4xiry39bbxzwrqff75f0f4g7z0vkr3v9l8rv3w40jlf7x")))
-    (home-page "https://github.com/phadej/singleton-bool")
+     `(#:cabal-revision ("2"
+                         "1l4nx664awgwzk3ih5idsgnj220jqdr1c55241xjv7fz7lwyhh5r")))
+    (home-page "https://github.com/phadej/singleton-bool#readme")
     (synopsis "Type-level booleans")
+    (description "This package provides Type-level booleans.")
+    (license license:bsd-3)))
+
+(define-public ghc-breakpoint
+  (package
+    (name "ghc-breakpoint")
+    (version "0.1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "breakpoint" version))
+              (sha256
+               (base32
+                "1hk9mjijxvqjzcfqllzi53rmxiyggbxash05jbb742wrq832h2xw"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "breakpoint")))
+    (inputs (list ghc-pretty-simple ghc-ansi-terminal))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "http://hackage.haskell.org/package/breakpoint")
+    (synopsis "Set breakpoints using a GHC plugin")
+    (description
+     "This package provides a plugin that allows you to set breakpoints for debugging
+purposes.  See the
+[README](https://github.com/aaronallen8455/breakpoint#breakpoint) for details.")
+    (license license:expat)))
+
+(define-public ghc-githash
+  (package
+    (name "ghc-githash")
+    (version "0.1.6.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "githash" version))
+              (sha256
+               (base32
+                "06zg1rif1rcxni1vacmr2bh1nbm6i62rjbikfr4xsyzq1sv7kfpw"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "githash")))
+    (inputs (list ghc-th-compat git))
+    (native-inputs (list ghc-hspec ghc-temporary ghc-unliftio hspec-discover))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+         (add-after 'unpack 'patch-git-path
+           (lambda _
+             (substitute* "src/GitHash.hs"
+               (("\"git\"") (string-append "\"" #$git "/bin/git\""))))))))
+    (home-page "https://github.com/snoyberg/githash#readme")
+    (synopsis "Compile git revision info into Haskell projects")
+    (description "Please see the README and documentation at
+<https://www.stackage.org/package/githash>")
+    (license license:bsd-3)))
+
+(define-public ghc-nothunks
+  (package
+    (name "ghc-nothunks")
+    (version "0.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "nothunks" version))
+              (sha256
+               (base32
+                "0lqfhnyxhmhajvsgmz5h428pb5zrdy9zvbc5inzhd83cv31yk4f1"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "nothunks")))
+    (inputs (list ghc-vector))
+    ;(native-inputs (list ghc-hedgehog ghc-random ghc-tasty ghc-tasty-hedgehog))
+    (arguments (list #:tests? #f)) ; Fail to compile.
+    (home-page "http://hackage.haskell.org/package/nothunks")
+    (synopsis "Examine values for unexpected thunks")
+    (description
+     "Long lived application data typically should not contain any thunks.  This
+library can be used to examine values for unexpected thunks, which can then be
+used in assertions.  This can be invaluable in avoiding memory leaks, or
+tracking down existing ones.")
+    (license license:expat)))
+
+(define-public ghc-nothunks-bootstrap
+  (package
+    (inherit ghc-nothunks)
+    (name "ghc-nothunks-bootstrap")
+    (arguments `(#:tests? #f))
+    (native-inputs '())
+    (properties '((hidden? #t)))))
+
+(define-public ghc-barbies
+  (package
+    (name "ghc-barbies")
+    (version "2.0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "barbies" version))
+              (sha256
+               (base32
+                "0v8bckxi58fkqgf1i1xd3100wp792pzd319xlfvmmw8z0ii1g872"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "barbies")))
+    (inputs (list ghc-distributive))
+    (native-inputs (list ghc-quickcheck
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-quickcheck
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (home-page "https://github.com/jcpetruzza/barbies#readme")
+    (synopsis "Classes for working with types that can change clothes.")
+    (description
+     "Types that are parametric on a functor are like Barbies that have an outfit for
+each role.  This package provides the basic abstractions to work with them
+comfortably.")
+    (license license:bsd-3)))
+
+(define-public ghc-onetuple
+  (package
+    (name "ghc-onetuple")
+    (version "0.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "OneTuple" version))
+              (sha256
+               (base32
+                "1vry21z449ph9k61l5zm7mfmdwkwszxqdlawlhvwrd1gsn13d1cq"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "OneTuple")))
+    (native-inputs (list ghc-hashable))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0g4siv8s6dlrdsivap2qy6ig08y5bjbs93jk192zmgkp8iscncpw")))
+    (home-page "http://hackage.haskell.org/package/OneTuple")
+    (synopsis "Singleton Tuple")
+    (description
+     "This package is a compatibility package for a singleton data type . > data Solo
+a = Solo a .  Note: it's not a @@newtype@@ . @@Solo@@ is available in
+@@base-4.16@@ (GHC-9.2).")
+    (license license:bsd-3)))
+
+(define-public ghc-indexed-traversable-instances
+  (package
+    (name "ghc-indexed-traversable-instances")
+    (version "0.1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "indexed-traversable-instances" version))
+              (sha256
+               (base32
+                "1c60vhf47y8ln33scyvwiffg24dvhm4aavya624vbqjr7l3fapl9"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "indexed-traversable-instances")))
+    (inputs (list ghc-indexed-traversable ghc-onetuple ghc-tagged
+                  ghc-unordered-containers ghc-vector))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-instances ghc-tasty
+                         ghc-tasty-quickcheck))
+    (home-page
+     "http://hackage.haskell.org/package/indexed-traversable-instances")
+    (synopsis
+     "More instances of FunctorWithIndex, FoldableWithIndex, TraversableWithIndex")
+    (description
+     "This package provides extra instances for type-classes in the
+[indexed-traversable](https://hackage.haskell.org/package/indexed-traversable)
+package. .  The intention is to keep this package minimal; it provides instances
+that formely existed in @@lens@@ or @@optics-extra@@.  We recommend putting
+other instances directly into their defining packages.  The
+@@indexed-traversable@@ package is light, having only GHC boot libraries as its
+dependencies.")
+    (license license:bsd-2)))
+
+(define-public ghc-witherable
+  (package
+    (name "ghc-witherable")
+    (version "0.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "witherable" version))
+              (sha256
+               (base32
+                "0121ic4xkv3k568j23zp22a5lrv0k11h94fq7cbijd18fjr2n3br"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "witherable")))
+    (inputs (list ghc-base-orphans
+                  ghc-hashable
+                  ghc-unordered-containers
+                  ghc-vector
+                  ghc-indexed-traversable
+                  ghc-indexed-traversable-instances))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-instances ghc-tasty
+                         ghc-tasty-quickcheck))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "1f2bvl41by904lnr0dk6qgasqwadq2w48l7fj51bp2h8bqbkdjyc")))
+    (home-page "https://github.com/fumieval/witherable")
+    (synopsis "filterable traversable")
+    (description
+     "This package provides a stronger variant of `traverse` which can remove elements
+and generalised mapMaybe, catMaybes, filter")
+    (license license:bsd-3)))
+
+(define-public ghc-hspec-discover
+  (package
+    (name "ghc-hspec-discover")
+    (version "2.9.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec-discover" version))
+              (sha256
+               (base32
+                "0536kdxjw6p8b6gcwvmr22jbmb6cgzbddi0fkd01b2m847z37sb5"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hspec-discover")))
+    (native-inputs (list ghc-quickcheck ghc-hspec-meta ghc-mockery))
+    (home-page "http://hspec.github.io/")
+    (synopsis "Automatically discover and run Hspec tests")
+    (description "Automatically discover and run Hspec tests .
+<http://hspec.github.io/hspec-discover.html>")
+    (license license:expat)))
+
+(define-public ghc-doctest-parallel
+  (package
+    (name "ghc-doctest-parallel")
+    (version "0.2.6")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "doctest-parallel" version))
+              (sha256
+               (base32
+                "13hjwhdjw8jrj07zxkrrfbzr0mrk8gwyis1rbdi4ld4jbq3rr1z7"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "doctest-parallel")))
+    (inputs (list ghc-glob
+                  ghc-base-compat
+                  ghc-code-page
+                  ghc-extra
+                  ghc-paths
+                  ghc-random
+                  ghc-syb
+                  ghc-unordered-containers))
+    (native-inputs (list ghc-hunit
+                         ghc-quickcheck
+                         ghc-hspec
+                         ghc-hspec-core
+                         ghc-hspec-discover
+                         ghc-mockery
+                         ghc-setenv
+                         ghc-silently
+                         ghc-stringbuilder))
+    (arguments
+     `(#:haddock? #f)) ; Setup.lhs: internal error when calculating transitive package dependencies.
+    (home-page "https://github.com/martijnbastiaan/doctest-parallel#readme")
+    (synopsis "Test interactive Haskell examples")
+    (description
+     "The doctest program checks examples in source code comments.  It is modeled
+after doctest for Python (<https://docs.python.org/3/library/doctest.html>). .
+Documentation is at
+<https://github.com/martijnbastiaan/doctest-parallel#readme>.")
+    (license license:expat)))
+
+(define-public ghc-pcg-random
+  (package
+    (name "ghc-pcg-random")
+    (version "0.1.3.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "pcg-random" version))
+              (sha256
+               (base32
+                "1l6jq5nvmg1ygk7i7g50s47p6qkh74p9avl1wbcxdl5m85lc5j76"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "pcg-random")))
+    (inputs (list ghc-primitive ghc-random ghc-entropy))
+    (native-inputs (list ghc-doctest))
+    (arguments
+     `(#:tests? #f ; Could not find module ‘Build_doctests’
+       #:phases
+       (modify-phases %standard-phases
+         ;; Tries to use non-existent doctest API.
+         (add-after 'unpack 'disable-doctest
+           (lambda _
+             (with-output-to-file "Setup.hs"
+               (lambda _
+                 (display
+                  "import Distribution.Simple\nmain = defaultMain\n"))))))))
+    (home-page "http://github.com/cchalmers/pcg-random")
+    (synopsis "Haskell bindings to the PCG random number generator.")
+    (description
+     "PCG is a family of simple fast space-efficient statistically good algorithms for
+random number generation.  Unlike many general-purpose RNGs, they are also hard
+to predict. .  This library implements bindings to the standard C
+implementation.  This includes the standard, unique, fast and single variants in
+the pcg family.  There is a pure implementation that can be used as a generator
+with the random package as well as a faster primitive api that includes
+functions for generating common types. .  The generators in this module are
+suitable for use in parallel but make sure threads don't share the same
+generator or things will go horribly wrong.")
+    (license license:bsd-3)))
+
+(define-public ghc-random-bytestring
+  (package
+    (name "ghc-random-bytestring")
+    (version "0.1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "random-bytestring" version))
+              (sha256
+               (base32
+                "0f4n41gqxxggadysvx3vg2iq89z7i7692ccrfmiajq73lbp6y34j"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "random-bytestring")))
+    (inputs (list ghc-mwc-random ghc-nats ghc-pcg-random))
+    (home-page "https://www.github.com/larskuhtz/random-bytestring")
+    (synopsis "Efficient generation of random bytestrings")
+    (description
+     "__This package is deprecated__.  Please, use genByteString from the [random
+package (version >=1.2)](https://hackage.haskell.org/package/random) instead. .
+Efficient generation of random bytestrings.  The implementation populates
+uninitialized memory with uniformily distributed random 64 bit words (and 8 bit
+words for remaining bytes at the end of the bytestring). .  Random words are
+generated using the PRNG from the
+[mwc-random](https://hackage.haskell.org/package/mwc-random) package or the
+[pcg-random](https://hackage.haskell.org/package/pcg-random) package.  It is
+also possible to use a custom PRNG by providing an instance for the RandomWords
+type class and using the function generate from the module
+\"Data.ByteString.Random.Internal\". .  The generated byte strings are suitable
+for statistical applications.  They are /not/ suitable for cryptographic
+applications. .
+![benchmarks](https://hackage.haskell.org/package/random-bytestring-0.1.3.2/src/benchmarks.png)
+. ![detailed
+benchmarks](https://hackage.haskell.org/package/random-bytestring-0.1.3.2/src/benchmarks-details.png)")
+    (license license:expat)))
+
+(define-public ghc-base64
+  (package
+    (name "ghc-base64")
+    (version "0.4.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "base64" version))
+              (sha256
+               (base32
+                "119mpqcv1rwkhwm69ga2b4f7hr825fa5wfm1w3i1szmhzh52s2k4"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "base64")))
+    (inputs (list ghc-text-short))
+    (native-inputs (list ghc-base64-bytestring
+                         ghc-quickcheck
+                         ghc-random-bytestring
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "0cz3zzz9k490w9nfn4hpgdw4zx4w70fwqrwsfx8svcwqssqibqw3")))
+    (home-page "https://github.com/emilypi/base64")
+    (synopsis "A modern RFC 4648-compliant Base64 library")
+    (description
+     "RFC 4648-compliant Base64 with an eye towards performance and modernity
+(additional support for RFC 7049 standards)")
+    (license license:bsd-3)))
+
+(define-public ghc-ordered-containers
+  (package
+    (name "ghc-ordered-containers")
+    (version "0.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "ordered-containers" version))
+              (sha256
+               (base32
+                "18w1dasny6xffbjlvmz9861l2xbkqlg2w5qxz9kw6frgfl2rg11n"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "ordered-containers")))
+    (home-page "http://hackage.haskell.org/package/ordered-containers")
+    (synopsis
+     "Set- and Map-like types that remember the order elements were inserted")
+    (description "")
+    (license license:bsd-3)))
+
+(define-public ghc-cabal-syntax
+  (package
+    (name "ghc-cabal-syntax")
+    (version "3.6.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "Cabal-syntax" version))
+              (sha256
+               (base32
+                "0lcj4g55sj5iv727g7k57pscgyj0fx3smwapm1gmd5qkc3yfa9fa"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "Cabal-syntax")))
+    (home-page "http://www.haskell.org/cabal/")
+    (synopsis "A library for working with .cabal files")
+    (description
+     "This library provides tools for reading and manipulating the .cabal file format.
+.  Version 3.6 (unlike the following versions) is a dummy package that prevents
+module name clases between Cabal and Cabal-syntax if used together with a Cabal
+flag as described below. .  In Cabal-3.7 this package was split off.  To avoid
+module name clashes, you can add this to your .cabal file: . > flag Cabal-syntax
+> description: Use the new Cabal-syntax package > default: False > manual: False
+> > library > -- ... > if flag(Cabal-syntax) > build-depends: Cabal-syntax >=
+3.7 > else > build-depends: Cabal < 3.7, Cabal-syntax < 3.7 .  This will default
+to the older build, but will allow consumers to opt-in to the newer libraries by
+requiring Cabal or Cabal-syntax >= 3.7")
+    (license license:bsd-3)))
+
+(define-public ghc-tasty-hslua
+  (package
+    (name "ghc-tasty-hslua")
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tasty-hslua" version))
+              (sha256
+               (base32
+                "0ibdxwaclghcgcyf9zx4b1dnp4b708ydwli4clmb0a0mp1lwdp98"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "tasty-hslua")))
+    (inputs (list ghc-hslua-core ghc-tasty ghc-tasty-hunit))
+    (home-page "https://hslua.org/")
+    (synopsis "Tasty helpers to test HsLua.")
+    (description
+     "Various tasty helpers and utilities to test HsLua oparations.  Built on top of
+tasty-hunit.")
+    (license license:expat)))
+
+(define-public ghc-hslua-marshalling
+  (package
+    (name "ghc-hslua-marshalling")
+    (version "2.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-marshalling" version))
+              (sha256
+               (base32
+                "1xmix1frfcyv4p51rnshrg02gba7di7nrrc6chsq71d3mbwhyask"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-marshalling")))
+    (inputs (list ghc-hslua-core))
+    (native-inputs (list ghc-lua-arbitrary
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-tasty-hslua
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (home-page "https://hslua.org/")
+    (synopsis "Marshalling of values between Haskell and Lua.")
+    (description
+     "This package provides functions to marshal values from Haskell to Lua, and /vice
+versa/. .  This package is part of HsLua, a Haskell framework built around the
+embeddable scripting language <https://lua.org Lua>.")
+    (license license:expat)))
+
+(define-public ghc-lua-arbitrary
+  (package
+    (name "ghc-lua-arbitrary")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lua-arbitrary" version))
+              (sha256
+               (base32
+                "01g2pkvy7yhcrk8p1d9xzmqv279ldgy9z5aa6xj5msbxrpxvbpma"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "lua-arbitrary")))
+    (inputs (list ghc-lua ghc-quickcheck))
+    (home-page "https://hslua.org/")
+    (synopsis "Arbitrary instances for Lua types.")
+    (description
+     "This package provides instances for QuickCheck's \\\"Arbitrary\\\" typeclass.")
+    (license license:expat)))
+
+(define-public ghc-lua
+  (package
+    (name "ghc-lua")
+    (version "2.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lua" version))
+              (sha256
+               (base32
+                "07wni3ji46ndqabwffgwzij2jk34dq2d66z15hcd6jg33sqnym45"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "lua")))
+    (arguments
+     ;; Allow creating fully static binaries. Avoids issues with linking pandoc statically.
+     `(#:configure-flags (list "-f-export-dynamic")))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "https://hslua.org/")
+    (synopsis "Lua, an embeddable scripting language")
+    (description
+     "This package provides bindings and types to bridge Haskell and
+<https://www.lua.org/ Lua>. .  The full Lua interpreter version 5.4.4 is
+included.  Alternatively, a system-wide Lua installation can be linked instead.")
+    (license license:expat)))
+
+(define-public ghc-hslua-core
+  (package
+    (name "ghc-hslua-core")
+    (version "2.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-core" version))
+              (sha256
+               (base32
+                "0hy3a7rn940bcj0shxyk75dndwl23wwmmvbnwnay36py60hy3rbq"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-core")))
+    (inputs (list ghc-lua))
+    (native-inputs (list ghc-lua-arbitrary
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (home-page "https://hslua.org/")
+    (synopsis "Bindings to Lua, an embeddable scripting language")
+    (description
+     "Wrappers and helpers to bridge Haskell and <https://www.lua.org/ Lua>. .  It
+builds upon the /lua/ package, which allows to bundle a Lua interpreter with a
+Haskell program.")
+    (license license:expat)))
+
+(define-public ghc-hslua-aeson
+  (package
+    (name "ghc-hslua-aeson")
+    (version "2.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-aeson" version))
+              (sha256
+               (base32
+                "0igmkay5bf3wg1n6rqm20kjv1xq36x552lgdvr1vlpwikgsiq8mb"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-aeson")))
+    (inputs (list ghc-aeson
+                  ghc-hashable
+                  ghc-hslua-core
+                  ghc-hslua-marshalling
+                  ghc-scientific
+                  ghc-unordered-containers
+                  ghc-vector))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-instances ghc-tasty
+                         ghc-tasty-quickcheck))
+    (home-page "https://hslua.org/")
+    (synopsis "Allow aeson data types to be used with Lua.")
     (description
-     "This package provides Type-level booleans.")
+     "This package provides instances to push and receive any datatype encodable as
+JSON to and from the Lua stack.")
+    (license license:expat)))
+
+(define-public ghc-gridtables
+  (package
+    (name "ghc-gridtables")
+    (version "0.0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "gridtables" version))
+              (sha256
+               (base32
+                "1akix9flnax6dx3s9c7yyzb19nw13y8rmh0kz7y3hpjlkaz659xy"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "gridtables")))
+    (inputs (list ghc-doclayout))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0m2651z81n8s6hb8id7y6k2kprsgwnj7pcd6p8lmdpkzzz3wwd0c")))
+    (home-page "https://github.com/tarleb/gridtables")
+    (synopsis "Parser for reStructuredText-style grid tables.")
+    (description
+     "This package provides a parser for plain-text representations of tables.  This
+package supports table headers, cells spanning multiple columns or rows, as well
+as a way to specfiy column alignments.")
+    (license license:expat)))
+
+(define-public ghc-lpeg
+  (package
+    (name "ghc-lpeg")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "lpeg" version))
+              (sha256
+               (base32
+                "19vvsvdw8l2zjwdcypnzw12vc9ycix92mkd6g3f6kx1i364z9hg1"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "lpeg")))
+    (inputs (list ghc-lua))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "https://hslua.org/")
+    (synopsis "LPeg – Parsing Expression Grammars For Lua")
+    (description
+     "This package contains the C sources of LPeg, as well as some tiny Haskell helper
+to load the package. . <http://www.inf.puc-rio.br/~roberto/lpeg/>")
+    (license license:expat)))
+
+(define-public ghc-pandoc-lua-marshal
+  (package
+    (name "ghc-pandoc-lua-marshal")
+    (version "0.1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "pandoc-lua-marshal" version))
+              (sha256
+               (base32
+                "0pn9b7f8dln049k76zb4znscl01qms751y1ln4j8irs50rc1b55j"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "pandoc-lua-marshal")))
+    (inputs (list ghc-lua ghc-hslua ghc-hslua-marshalling ghc-pandoc-types
+                  ghc-safe))
+    (native-inputs (list ghc-quickcheck ghc-tasty ghc-tasty-hunit
+                         ghc-tasty-lua ghc-tasty-quickcheck))
+    (home-page "https://github.com/pandoc/pandoc-lua-marshal")
+    (synopsis "Use pandoc types in Lua")
+    (description
+     "This package provides functions to marshal and unmarshal pandoc document types
+to and from Lua. .  The values of most types are pushed to pandoc as \"userdata\"
+objects that wrap a stable pointer to the Haskell value; these objects come with
+methods to access and modify their properties. .  Sequences are pushed as normal
+Lua tables, but are augmented with convenience functions.")
+    (license license:expat)))
+
+(define-public ghc-should-not-typecheck
+  (package
+    (name "ghc-should-not-typecheck")
+    (version "2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "should-not-typecheck" version))
+              (sha256
+               (base32
+                "14fmv0mv2v4fqzynamlrmdj6d1l65aw1srf1wv19nrq7rrqaqf7m"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "should-not-typecheck")))
+    (inputs (list ghc-hunit))
+    (native-inputs (list ghc-hspec ghc-hspec-expectations))
+    (home-page "http://github.com/CRogers/should-not-typecheck")
+    (synopsis
+     "A HUnit/hspec assertion library to verify that an expression does not typecheck")
+    (description
+     "For examples and an introduction to the library please take a look at the
+<https://github.com/CRogers/should-not-typecheck#should-not-typecheck- README>
+on github.")
+    (license license:bsd-3)))
+
+(define-public ghc-hspec-wai
+  (package
+    (name "ghc-hspec-wai")
+    (version "0.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec-wai" version))
+              (sha256
+               (base32
+                "03wiksic5y9a2g6a86nsxrnajdgdvpv17w02h5qla0zp9zs6pa1j"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hspec-wai")))
+    (inputs (list ghc-quickcheck
+                  ghc-base-compat
+                  ghc-case-insensitive
+                  ghc-hspec-core
+                  ghc-hspec-expectations
+                  ghc-http-types
+                  ghc-wai
+                  ghc-wai-extra))
+    (native-inputs (list ghc-hspec hspec-discover))
+    (home-page "https://github.com/hspec/hspec-wai#readme")
+    (synopsis "Experimental Hspec support for testing WAI applications")
+    (description "Experimental Hspec support for testing WAI applications")
+    (license license:expat)))
+
+(define-public ghc-http-media
+  (package
+    (name "ghc-http-media")
+    (version "0.8.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "http-media" version))
+              (sha256
+               (base32
+                "0lww5cxrc9jlvzsysjv99lca33i4rb7cll66p3c0rdpmvz8pk0ir"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "http-media")))
+    (inputs (list ghc-case-insensitive ghc-utf8-string))
+    (native-inputs (list ghc-quickcheck ghc-test-framework
+                         ghc-test-framework-quickcheck2))
+    (arguments
+     `(#:cabal-revision ("7"
+                         "1sm8bnrqvwkj7f60x4s8vfsj6lfi0knq38im35x88wk8s9whg6jd")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-constraints
+           (lambda _
+             (substitute* "http-media.cabal"
+               (("QuickCheck                 >= 2.8  && < 2.14") "QuickCheck")
+               (("base                       >= 4.7  && < 4.13") "base")))))))
+    (home-page "https://github.com/zmthy/http-media")
+    (synopsis "Processing HTTP Content-Type and Accept headers")
+    (description
+     "This library is intended to be a comprehensive solution to parsing and selecting
+quality-indexed values in HTTP headers.  It is capable of parsing both media
+types and language parameters from the Accept and Content header families, and
+can be extended to match against other accept headers as well.  Selecting the
+appropriate header value is achieved by comparing a list of server options
+against the quality-indexed values supplied by the client. .  In the following
+example, the Accept header is parsed and then matched against a list of server
+options to serve the appropriate media using mapAcceptMedia': . > getHeader >>=
+maybe send406Error sendResourceWith .  mapAcceptMedia > [ (\"text/html\", asHtml)
+> , (\"application/json\", asJson) > ] .  Similarly, the Content-Type header can
+be used to produce a parser for request bodies based on the given content type
+with mapContentMedia': . > getContentType >>= maybe send415Error
+readRequestBodyWith .  mapContentMedia > [ (\"application/json\", parseJson) > ,
+(\"text/plain\", parseText) > ] .  The API is agnostic to your choice of server.")
+    (license license:expat)))
+
+(define-public ghc-servant
+  (package
+    (name "ghc-servant")
+    (version "0.19.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "servant" version))
+              (sha256
+               (base32
+                "1gk6j39rcjpjacs351lknhrwj86yr4ifyp3qwlmiig27dxqlig3q"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "servant")))
+    (inputs (list ghc-constraints
+                  ghc-sop-core
+                  ghc-http-api-data
+                  ghc-singleton-bool
+                  ghc-base-compat
+                  ghc-aeson
+                  ghc-attoparsec
+                  ghc-bifunctors
+                  ghc-case-insensitive
+                  ghc-http-media
+                  ghc-http-types
+                  ghc-mmorph
+                  ghc-network-uri
+                  ghc-quickcheck
+                  ghc-string-conversions
+                  ghc-tagged
+                  ghc-vault))
+    (native-inputs (list ghc-hspec ghc-quickcheck-instances hspec-discover))
+    (home-page "http://docs.servant.dev/")
+    (synopsis "A family of combinators for defining webservices APIs")
+    (description
+     "This package provides a family of combinators for defining webservices APIs and
+serving them .  You can learn about the basics in the
+<http://docs.servant.dev/en/stable/tutorial/index.html tutorial>. .
+<https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md
+CHANGELOG>")
+    (license license:bsd-3)))
+
+(define-public ghc-servant-server
+  (package
+    (name "ghc-servant-server")
+    (version "0.19.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "servant-server" version))
+              (sha256
+               (base32
+                "1a7msh8p59v5mgsnj5li9s3jg0jwq2zjsznr0cg7g0fncn7r1axy"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "servant-server")))
+    (inputs (list ghc-constraints
+                  ghc-servant
+                  ghc-http-api-data
+                  ghc-base-compat
+                  ghc-base64-bytestring
+                  ghc-http-media
+                  ghc-http-types
+                  ghc-network-uri
+                  ghc-monad-control
+                  ghc-network
+                  ghc-sop-core
+                  ghc-string-conversions
+                  ghc-resourcet
+                  ghc-tagged
+                  ghc-transformers-base
+                  ghc-wai
+                  ghc-wai-app-static
+                  ghc-word8
+                  ghc-aeson
+                  ghc-warp))
+    (native-inputs (list ghc-safe
+                         ghc-transformers-compat
+                         ghc-hspec
+                         ghc-hspec-wai
+                         ghc-quickcheck
+                         ghc-should-not-typecheck
+                         ghc-temporary
+                         ghc-wai-extra
+                         hspec-discover))
+    (home-page "http://docs.servant.dev/")
+    (synopsis
+     "A family of combinators for defining webservices APIs and serving them")
+    (description
+     "This package provides a family of combinators for defining webservices APIs and
+serving them .  You can learn about the basics in the
+<http://docs.servant.dev/en/stable/tutorial/index.html tutorial>. .
+<https://github.com/haskell-servant/servant/blob/master/servant-server/example/greet.hs
+Here> is a runnable example, with comments, that defines a dummy API and
+implements a webserver that serves this API, using this package. .
+<https://github.com/haskell-servant/servant/blob/master/servant-server/CHANGELOG.md
+CHANGELOG>")
+    (license license:bsd-3)))
+
+(define-public ghc-boring
+  (package
+    (name "ghc-boring")
+    (version "0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "boring" version))
+              (sha256
+               (base32
+                "0d2cm9ra69cvaxs5x3lr2rfv7xx6xrbpb3dbcpyd8m77cqxm7b0b"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "boring")))
+    (inputs (list ghc-tagged))
+    (arguments
+     `(#:cabal-revision ("2"
+                         "04pn94i3mysi7px93k86sf29vw99sf38sl4n0gy2nma0iqsik828")))
+    (home-page "https://github.com/phadej/boring")
+    (synopsis "Boring and Absurd types")
+    (description
+     "* @@Boring@@ types are isomorphic to @@()@@. . * @@Absurd@@ types are isomorphic
+to @@Void@@. .  See [What does () mean in Haskell -answer by Conor
+McBride](https://stackoverflow.com/questions/33112439/what-does-mean-in-haskell/33115522#33115522)")
+    (license license:bsd-3)))
+
+(define-public ghc-some
+  (package
+    (name "ghc-some")
+    (version "1.0.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "some" version))
+              (sha256
+               (base32
+                "1qy840b2f58f0jxmw4q9sfgbx64kypzdlqnwc72md5wwv84b9b1d"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "some")))
+    (home-page "https://github.com/haskellari/some")
+    (synopsis "Existential type: Some")
+    (description
+     "This library defines an existential type Some'. . @@ data Some f where \\ Some ::
+f a -> Some f @@ .  in few variants, and utilities to work with it. .  If you
+are unsure which variant to use, use the one in \"Data.Some\" module.")
+    (license license:bsd-3)))
+
+(define-public ghc-hslua-classes
+  (package
+    (name "ghc-hslua-classes")
+    (version "2.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-classes" version))
+              (sha256
+               (base32
+                "1z7ym3whcq16k2cm9jf7sf0vwmp52iv1f0iicvv4jk6xks9d6ia1"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-classes")))
+    (inputs (list ghc-hslua-core ghc-hslua-marshalling))
+    (native-inputs (list ghc-lua-arbitrary
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-tasty
+                         ghc-tasty-hslua
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (home-page "https://hslua.org/")
+    (synopsis "Type classes for HsLua")
+    (description
+     "Type classes for convenient marshalling and calling of Lua functions.")
+    (license license:expat)))
+
+(define-public ghc-hslua-objectorientation
+  (package
+    (name "ghc-hslua-objectorientation")
+    (version "2.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-objectorientation" version))
+              (sha256
+               (base32
+                "13011yzz6lrgl2gasn9w5ggdqgrdz49hhqk1h259qd9gq29jnq3y"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-objectorientation")))
+    (inputs (list ghc-hslua-core ghc-hslua-marshalling))
+    (native-inputs (list ghc-lua-arbitrary
+                         ghc-quickcheck
+                         ghc-quickcheck-instances
+                         ghc-tasty
+                         ghc-tasty-hslua
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck))
+    (home-page "https://hslua.org/")
+    (synopsis "Object orientation tools for HsLua")
+    (description
+     "Expose Haskell objects to Lua with an object oriented interface.")
+    (license license:expat)))
+
+(define-public ghc-hslua-packaging
+  (package
+    (name "ghc-hslua-packaging")
+    (version "2.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-packaging" version))
+              (sha256
+               (base32
+                "1yxfrsxmmsb96lyfihlk9ks53l2z2aln3whfqaha7grs3gx1yaib"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-packaging")))
+    (inputs (list ghc-hslua-core ghc-hslua-marshalling
+                  ghc-hslua-objectorientation))
+    (native-inputs (list ghc-tasty-hslua ghc-tasty ghc-tasty-hunit))
+    (home-page "https://hslua.org/")
+    (synopsis "Utilities to build Lua modules.")
+    (description
+     "Utilities to package up Haskell functions and values into a Lua module. .  This
+package is part of HsLua, a Haskell framework built around the embeddable
+scripting language <https://lua.org Lua>.")
+    (license license:expat)))
+
+(define-public ghc-hslua-module-version
+  (package
+    (name "ghc-hslua-module-version")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-module-version" version))
+              (sha256
+               (base32
+                "1v24lbbagvaz0hacq4525snp6smz8yc5ifrxg89z1y5bbn7v46f5"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-module-version")))
+    (inputs (list ghc-hslua-core ghc-hslua-marshalling ghc-hslua-packaging))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
+    (home-page "https://hslua.org/")
+    (synopsis "Lua module to work with version specifiers.")
+    (description "Wrapper for the Data.Version.Version Haskell type.")
+    (license license:expat)))
+
+(define-public ghc-recv
+  (package
+    (name "ghc-recv")
+    (version "0.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "recv" version))
+              (sha256
+               (base32
+                "1yz9b95m9yxcwbbwdvp288y47ycn4yq9g7ixlw0sf98h5rjp4s2w"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "recv")))
+    (inputs (list ghc-network))
+    (native-inputs (list ghc-hspec hspec-discover))
+    (home-page "http://github.com/yesodweb/wai")
+    (synopsis "Efficient netowrk recv")
+    (description "Network recv based on buffer pools")
+    (license license:bsd-3)))
+
+(define-public ghc-glib
+  (package
+    (name "ghc-glib")
+    (version "0.13.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "glib" version))
+              (sha256
+               (base32
+                "09qamkxkpx2paazbh8x225wvwgzgpp0g0a3s708n96q76b4bvd46"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "glib")))
+    (inputs (list ghc-utf8-string glib))
+    (native-inputs (list ghc-gtk2hs-buildtools pkg-config))
+    (home-page "https://github.com/gtk2hs/gtk2hs")
+    (synopsis "GLib bindings for for Gtk2Hs")
+    (description
+     "GLib is a collection of C data structures and utility functions for the GObject
+system, main loop implementation, for strings and common data structures dealing
+with Unicode.  This package only binds as much functionality as required to
+support the packages that wrap libraries that are themselves based on GLib.")
+    (license license:lgpl2.1)))
+
+(define-public ghc-pango
+  (package
+    (name "ghc-pango")
+    (version "0.13.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "pango" version))
+              (sha256
+               (base32
+                "1mndcb904vlkqpbmj5np9lxqw2qw3pzawvrgbsbxa9xjayh0ylw5"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "pango")))
+    (inputs (list ghc-glib ghc-cairo pango))
+    (native-inputs (list ghc-gtk2hs-buildtools pkg-config))
+    (home-page "https://hackage.haskell.org/package/pango")
+    (synopsis "Haskell bindings to the Pango text rendering engine")
+    (description
+     "This package provides a wrapper around the Pango C library that allows
+high-quality rendering of Unicode text.  It can be used either with Cairo to
+output text in PDF, PS or other documents or with Gtk+ to display text
+on-screen.")
+    (license license:lgpl2.1)))
+
+(define-public ghc-monoidal-containers
+  (package
+    (name "ghc-monoidal-containers")
+    (version "0.6.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "monoidal-containers" version))
+              (sha256
+               (base32
+                "0m41z50r3jvr8vvfry99kamb2h3knm0g7bqfwspchmhwsgqqczh4"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "monoidal-containers")))
+    (inputs (list ghc-aeson
+                  ghc-hashable
+                  ghc-lens
+                  ghc-newtype
+                  ghc-unordered-containers
+                  ghc-witherable
+                  ghc-semialign
+                  ghc-these))
+    (home-page "http://github.com/bgamari/monoidal-containers")
+    (synopsis "Containers with monoidal accumulation")
+    (description
+     "Containers with merging via monoidal accumulation.  The Monoid instances
+provided by the @code{containers} and @code{unordered-containers} packages merge
+structures in a left-biased manner instead of using the underlying monoidal
+structure of the value.  This package wraps the types provided by these
+packages, but provides @code{Monoid} instances implemented in terms of the value
+type's mappend'.")
+    (license license:bsd-3)))
+
+(define-public ghc-newtype
+  (package
+    (name "ghc-newtype")
+    (version "0.2.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "newtype" version))
+              (sha256
+               (base32
+                "1b7bamnd0p8vmxvlg39g5d4a2av49kx10rdyz04ixa28pg8zy01s"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "newtype")))
+    (arguments
+     `(#:cabal-revision ("3"
+                         "0yll88ydchd2gqcvdk28fchf2vygpd42ky2bigg4ga08jan2nacx")))
+    (home-page "http://hackage.haskell.org/package/newtype")
+    (synopsis "Typeclass and set of functions for working with newtypes")
+    (description
+     "Per Conor McBride, the Newtype typeclass represents the packing and unpacking of
+a @code{newtype}, and allows you to operate under that @code{newtype} with functions
+such as ala'.")
+    (license license:bsd-3)))
+
+(define-public ghc-hspec-hedgehog
+  (package
+    (name "ghc-hspec-hedgehog")
+    (version "0.0.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hspec-hedgehog" version))
+              (sha256
+               (base32
+                "17gbr4ssnzjk7nvpsnh47av6vd9wz27ax92xvr4jwyw0z7h2wn13"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hspec-hedgehog")))
+    (inputs (list ghc-hspec
+                  ghc-hspec-core
+                  ghc-hedgehog
+                  ghc-hunit
+                  ghc-quickcheck
+                  ghc-splitmix))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "1qv2gap0775d2zg8wbd3kq4ypziz05qlz5jfisvl3jfd6jzcf2ad")))
+    (home-page "https://github.com/parsonsmatt/hspec-hedgehog#readme")
+    (synopsis "Integrate Hedgehog and Hspec")
+    (description "An integration library for hspec and hedgehog.")
+    (license license:bsd-3)))
+
+(define-public ghc-validation-selective
+  (package
+    (name "ghc-validation-selective")
+    (version "0.1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "validation-selective" version))
+              (sha256
+               (base32
+                "1gsvcm8gjp8kdfprd1i4h9si8f2ym1gj3hqfwz7x1ylsa8qxwvq1"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "validation-selective")))
+    (inputs (list ghc-selective))
+    (native-inputs (list ghc-hedgehog ghc-hspec ghc-hspec-hedgehog ghc-doctest))
+    (home-page "https://github.com/kowainik/validation-selective")
+    (synopsis
+     "Data validation based on Applicative and Selective functors")
+    (description
+     "Lighweight pure data validation based on Applicative and Selective functors.")
+    (license license:mpl2.0)))
+
+(define-public ghc-tomland
+  (package
+    (name "ghc-tomland")
+    (version "1.3.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "tomland" version))
+              (sha256
+               (base32
+                "152jqjv6n7n2hdysn903wfhpwh6vp8wmjiymzasazprasdcxpywm"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "tomland")))
+    (inputs (list ghc-hashable ghc-megaparsec ghc-parser-combinators
+                  ghc-unordered-containers ghc-validation-selective))
+    (native-inputs (list ghc-hedgehog ghc-hspec ghc-hspec-hedgehog
+                         ghc-hspec-megaparsec))
+    (home-page "https://github.com/kowainik/tomland")
+    (synopsis "Bidirectional TOML serialization")
+    (description
+     "Implementation of bidirectional TOML serialization.")
+    (license license:mpl2.0)))
+
+(define-public ghc-hslua-module-doclayout
+  (package
+    (name "ghc-hslua-module-doclayout")
+    (version "1.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "hslua-module-doclayout" version))
+              (sha256
+               (base32
+                "14sqffgcrhhrv7k4j8b1l41mn5gqlp8yzggd727746kjl0n56hqq"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "hslua-module-doclayout")))
+    (inputs (list ghc-doclayout ghc-hslua))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-tasty-lua))
+    (home-page "https://github.com/hslua/hslua-module-doclayout")
+    (synopsis "Lua module wrapping Text.DocLayout")
+    (description "Lua module wrapping @code{Text.DocLayout}.")
+    (license license:expat)))
+
+(define-public ghc-random-shuffle
+  (package
+    (name "ghc-random-shuffle")
+    (version "0.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "random-shuffle" version))
+              (sha256
+               (base32
+                "0586bnlh0g2isc44jbjvafkcl4yw6lp1db8x6vr0pza0y08l8w2j"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "random-shuffle")))
+    (inputs (list ghc-random ghc-monadrandom))
+    (home-page "http://hackage.haskell.org/package/random-shuffle")
+    (synopsis "Random shuffle implementation")
+    (description
+     "Random shuffle implementation, on immutable lists.  Based on
+@url{http://okmij.org/ftp/Haskell/perfect-shuffle.txt, perfect shuffle
+implementation by Oleg Kiselyov}.")
+    (license license:bsd-3)))
+
+(define-public ghc-deriving-aeson
+  (package
+    (name "ghc-deriving-aeson")
+    (version "0.2.8")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "deriving-aeson" version))
+              (sha256
+               (base32
+                "0f59ar4cax7g0h6wrk8ckni7i4gw5wls5ybzbrji2a0qpd7q5lrd"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "deriving-aeson")))
+    (inputs (list ghc-aeson))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0pwx7lmdhpipg9ksqkz6xpjzh1aw2hip8y3jsk20ndl4wdzvxak5")))
+    (home-page "http://hackage.haskell.org/package/deriving-aeson")
+    (synopsis "Type driven generic aeson instance customisation")
+    (description
+     "This package provides a newtype wrapper with FromJSON/ToJSON instances
+customisable via a phantom type parameter.  The instances can be rendered to the
+original type using DerivingVia.")
+    (license license:bsd-3)))
+
+(define-public ghc-leancheck
+  (package
+    (name "ghc-leancheck")
+    (version "0.9.12")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "leancheck" version))
+              (sha256
+               (base32
+                "15wpklkbr03dciai4mk8bm1yk9svxxmbsl22wsvwk3ns7aiamrkj"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "leancheck")))
+    (home-page "https://github.com/rudymatela/leancheck#readme")
+    (synopsis "Enumerative property-based testing")
+    (description
+     "LeanCheck is a simple enumerative property-based testing library.  Properties
+are defined as Haskell functions returning a boolean value which should be true
+for all possible choices of argument values.  LeanCheck applies enumerated
+argument values to these properties in search for a counterexample.  Properties
+can be viewed as parameterized unit tests.  LeanCheck works by producing tiers
+of test values: a possibly infinite list of finite sublists of
+same-and-increasingly-sized values.")
+    (license license:bsd-3)))
+
+(define-public ghc-test-framework-leancheck
+  (package
+    (name "ghc-test-framework-leancheck")
+    (version "0.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "test-framework-leancheck" version))
+              (sha256
+               (base32
+                "0aa21r999jj59plzkn1px02k3a87znwhagdjmdsik2xvy5wrzgzv"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "test-framework-leancheck")))
+    (inputs (list ghc-test-framework ghc-leancheck))
+    (home-page "https://github.com/rudymatela/test-framework-leancheck#readme")
+    (synopsis "LeanCheck support for test-framework")
+    (description
+     "LeanCheck support for @code{test-framework}.  This package can be used
+to incorporate LeanCheck tests into test-framework test suites.")
     (license license:bsd-3)))
 
 ;;;
@@ -16199,3 +16251,4 @@ pages.")
 ;;; of a merge conflict, place them above by existing packages with similar
 ;;; functionality or similar names.
 ;;;
+
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 3ae2f5045c..6676a3b98b 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -1169,7 +1169,7 @@ interactive environment for the functional language Haskell.")
             '(substitute* "testsuite/driver/testlib.py"
                (("collections\\.Iterable")
                 "collections.abc.Iterable")))))
-       ("git" ,git-minimal/fixed)                 ; invoked during tests
+       ("git" ,git-minimal/pinned)                 ; invoked during tests
        ,@(filter (match-lambda
                    (("ghc-bootstrap" . _) #f)
                    (("ghc-testsuite" . _) #f)
@@ -1228,7 +1228,7 @@ interactive environment for the functional language Haskell.")
             '(substitute* "testsuite/driver/testlib.py"
                (("collections\\.Iterable")
                 "collections.abc.Iterable")))))
-       ("git" ,git-minimal/fixed)                 ; invoked during tests
+       ("git" ,git-minimal/pinned)                 ; invoked during tests
        ,@(filter (match-lambda
                    (("ghc-bootstrap" . _) #f)
                    (("ghc-testsuite" . _) #f)
@@ -1268,19 +1268,12 @@ interactive environment for the functional language Haskell.")
                                 (file-pattern ".*\\.conf\\.d$")
                                 (file-type 'directory))))))
 
-;; Versions newer than ghc defined below (i.e. the compiler
-;; haskell-build-system uses) should use ghc-next as their name to
-;; ensure ghc (without version specification) and ghc-* packages are
-;; always compatible. See https://issues.guix.gnu.org/issue/47335.
-
 (define-public ghc-8 ghc-8.10)
 
-(define-public ghc ghc-8)
-
 (define-public ghc-9.0
   (package
     (inherit ghc-8.10)
-    (name "ghc-next")
+    (name "ghc")
     (version "9.0.2")
     (source (origin
               (method url-fetch)
@@ -1318,7 +1311,7 @@ interactive environment for the functional language Haskell.")
   (let ((base ghc-8.10))
     (package
       (inherit base)
-      (name "ghc-next")
+      (name "ghc")
       (version "9.2.5")
       (source (origin
                 (method url-fetch)
@@ -1326,7 +1319,8 @@ interactive environment for the functional language Haskell.")
                                     "/ghc-" version "-src.tar.xz"))
                 (sha256
                  (base32
-                  "07028i0hm74svvq9b3jpkczaj6lsdgn3hgr4wa7diqiq3dypj1h6"))))
+                  "07028i0hm74svvq9b3jpkczaj6lsdgn3hgr4wa7diqiq3dypj1h6"))
+                (patches (search-patches "ghc-9.2-glibc-2.33-link-order.patch"))))
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:phases phases '%standard-phases)
@@ -1335,7 +1329,20 @@ interactive environment for the functional language Haskell.")
              (replace 'fix-cc-reference
                (lambda _
                  (substitute* "utils/hsc2hs/src/Common.hs"
-                   (("\"cc\"") "\"gcc\""))))))))
+                   (("\"cc\"") "\"gcc\""))))
+             ;; FIXME: Remove i686-specific match on the next rebuild cycle.
+             #$@(match (%current-system)
+                  ("i686-linux"
+                    #~((add-after 'skip-more-tests 'skip-T21694-i686
+                        (lambda _
+                          (substitute* '("testsuite/tests/simplCore/should_compile/all.T")
+                            (("^test\\('T21694', \\[ " all)
+                             (string-append all "when(arch('i386'), skip), ")))))))
+                  (_ #~()))))
+         ;; Increase verbosity, so running the test suite does not time out on CI.
+         ((#:make-flags make-flags ''())
+          #~(cons "VERBOSE=4" #$make-flags))))
+      (properties '((max-silent-time . 36000))) ; 10 hours, for i686.
       (native-inputs
        `(;; GHC 9.2 must be built with GHC >= 8.6.
          ("ghc-bootstrap" ,base)
@@ -1360,6 +1367,12 @@ interactive environment for the functional language Haskell.")
               (file-pattern ".*\\.conf\\.d$")
               (file-type 'directory)))))))
 
+;; Versions newer than ghc defined below (i.e. the compiler
+;; haskell-build-system uses) should use ghc-next as their name to
+;; ensure ghc (without version specification) and ghc-* packages are
+;; always compatible. See https://issues.guix.gnu.org/issue/47335.
+(define-public ghc ghc-9.2)
+
 ;; 9.4 is the last version to support the make-based build system,
 ;; but it boot with 9.2, only 9.0 is supported.
 (define ghc-bootstrap-for-9.4 ghc-9.0)
diff --git a/gnu/packages/hexedit.scm b/gnu/packages/hexedit.scm
index 3f3c364272..79c14a2996 100644
--- a/gnu/packages/hexedit.scm
+++ b/gnu/packages/hexedit.scm
@@ -90,7 +90,7 @@ the file and search through it.")
 with a special focus on executable binaries.  Its goal is to combine the
 low-level functionality of a debugger with the usability of an @dfn{Integrated
 Development Environment} (IDE).")
-    (home-page "http://hte.sourceforge.net/")
+    (home-page "https://hte.sourceforge.net/")
     (license license:gpl2)))
 
 (define-public bvi
@@ -112,5 +112,5 @@ Development Environment} (IDE).")
     (synopsis "Binary file editor")
     (description "@command{bvi} is a display-oriented editor for binary files,
 based on the @command{vi} text editor.")
-    (home-page "http://bvi.sourceforge.net/")
+    (home-page "https://bvi.sourceforge.net/")
     (license license:gpl3+)))
diff --git a/gnu/packages/hunspell.scm b/gnu/packages/hunspell.scm
index 8bc8c38176..e49caecc62 100644
--- a/gnu/packages/hunspell.scm
+++ b/gnu/packages/hunspell.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -262,7 +263,7 @@ spell-checking library.")
       (synopsis "Hunspell dictionary for Hungarian (hu_HU)")
       (description "This package provides a dictionary for the Hunspell
 spell-checking library.")
-      (home-page "http://magyarispell.sourceforge.net/")
+      (home-page "https://magyarispell.sourceforge.net/")
       (license (list license:gpl2 license:gpl3)))))
 
 (define* (hunspell-dictionary dict-name full-name #:key synopsis home-page license)
@@ -275,7 +276,7 @@ spell-checking library.")
                          (#\_ #\-)
                          (chr chr))
                        (string-downcase dict-name))))
-    (version "7.4.3.2")
+    (version "7.5.0.3")
     (source
      (origin
        (method git-fetch)
@@ -286,7 +287,7 @@ spell-checking library.")
               (string-append "libreoffice-" version))))
        (file-name (git-file-name "libreoffice-dictionaries" version))
        (sha256
-        (base32 "115p29ywyn7ncq664gxmcrrz55v23s34asd2hmrg4ahjp7ycrnmy"))))
+        (base32 "1yzhyx8zwlfdqw4swxyr1lq68im2bfi1chimyc15jmli72n32szs"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("source" ,source)))
@@ -313,6 +314,13 @@ spell-checking library.")
     (license license)
     (home-page home-page)))
 
+(define-public hunspell-dict-he-il
+  (let ((synopsis identity))
+    (hunspell-dictionary "he_IL" "Hebrew"
+                         #:synopsis (synopsis "Hunspell dictionary for Hebrew")
+                         #:home-page "http://hspell.ivrix.org.il/"
+                         #:license license:agpl3+)))
+
 (define-public hunspell-dict-it-it
   (let ((synopsis identity))
     (hunspell-dictionary "it_IT" "Italian"
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index 2143624b92..de15587cb0 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2021 Songlin Jiang <hollowman@hollowman.ml>
 ;;; Copyright © 2021 Taiju HIGASHI <higashi@taiju.info>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2023 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -875,6 +876,13 @@ hanja dictionary and small hangul character classification.")
              (substitute* "meson.build"
                (("update_desktop_database: true")
                 "update_desktop_database: false"))))
+         (add-after 'set-paths 'add-install-to-pythonpath
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (ibus-stt-dir (string-append out "/share/ibus-stt")))
+               (setenv "GUIX_PYTHONPATH"
+                       (string-append ibus-stt-dir ":"
+                                      (getenv "GUIX_PYTHONPATH"))))))
          (add-after 'install 'wrap-with-additional-paths
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Make sure 'ibus-{setup,engine}-stt' find the gst-vosk plugin
@@ -886,23 +894,14 @@ hanja dictionary and small hangul character classification.")
                                (,(string-append (assoc-ref inputs "gst-vosk")
                                                 "/lib/gstreamer-1.0")
                                 ,(getenv "GST_PLUGIN_SYSTEM_PATH")))
-                             `("GUIX_PYTHONPATH" ":" prefix
-                               (,(getenv "GUIX_PYTHONPATH")
-                                ,(string-append (assoc-ref inputs "ibus")
-                                                "/lib/girepository-1.0")
-                                ,(string-append (assoc-ref outputs "out")
-                                                "/share/ibus-stt")))
-                             `("GI_TYPELIB_PATH" ":" prefix
-                               (,(string-append (assoc-ref inputs "ibus")
-                                                "/lib/girepository-1.0")
-                                ,(string-append (assoc-ref outputs "out")
-                                                "/share/ibus-stt")))))
+                             `("GUIX_PYTHONPATH" =
+                               (,(getenv "GUIX_PYTHONPATH")))
+                             `("GI_TYPELIB_PATH" =
+                               (,(getenv "GI_TYPELIB_PATH")))))
                          (list (string-append out "/libexec/ibus-engine-stt")
                                (string-append out "/libexec/ibus-setup-stt")))))))))
     (inputs
-     (list desktop-file-utils
-           (list glib "bin")
-           gobject-introspection
+     (list bash-minimal
            gst-vosk
            gstreamer
            gtk
@@ -912,7 +911,11 @@ hanja dictionary and small hangul character classification.")
            python-babel
            python-pygobject))
     (native-inputs
-     (list gettext-minimal libxml2 pkg-config))
+     (list desktop-file-utils
+           gettext-minimal
+           (list glib "bin")
+           gobject-introspection
+           libxml2 pkg-config))
     (home-page "https://github.com/PhilippeRo/IBus-Speech-To-Text")
     (synopsis "Speech to text IBus engine using VOSK")
     (description "This Input Method uses VOSK for voice recognition and allows
diff --git a/gnu/packages/idris.scm b/gnu/packages/idris.scm
index 8f08ed3a3e..85fb6cc2d2 100644
--- a/gnu/packages/idris.scm
+++ b/gnu/packages/idris.scm
@@ -99,7 +99,7 @@
          (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "idris.cabal"
-               (("(aeson|ansi-terminal|haskeline|megaparsec|optparse-applicative)\\s+[^,]+" all dep)
+               (("(aeson|ansi-terminal|bytestring|haskeline|libffi|megaparsec|network|optparse-applicative)\\s+[<>=0-9. &|]+" all dep)
                 dep))))
          (add-before 'configure 'set-cc-command
            (lambda _
@@ -122,17 +122,7 @@
                (setenv "TASTY_NUM_THREADS" (number->string (parallel-job-count)))
                (setenv "IDRIS_CC" ,(cc-for-target)) ;Needed for creating executables
                (setenv "PATH" (string-append out "/bin:" (getenv "PATH")))
-               (apply (assoc-ref %standard-phases 'check) args))))
-         (add-before 'check 'restore-libidris_rts
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; The Haskell build system moves this library to the
-             ;; "static" output.  Idris only knows how to find it in the
-             ;; "out" output, so we restore it here.
-             (let ((out (assoc-ref outputs "out"))
-                   (static (assoc-ref outputs "static"))
-                   (filename "/lib/idris/rts/libidris_rts.a"))
-               (rename-file (string-append static filename)
-                            (string-append out filename))))))))
+               (apply (assoc-ref %standard-phases 'check) args)))))))
     (native-search-paths
      (list (search-path-specification
             (variable "IDRIS_LIBRARY_PATH")
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index 70c820e76b..6f51499142 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -242,7 +242,7 @@ licences similar to the Modified BSD licence."))))
     (native-inputs
      (list pkg-config
            python-wrapper))
-    (home-page "http://mia.sourceforge.net")
+    (home-page "https://mia.sourceforge.net")
     (synopsis "Toolkit for gray scale medical image analysis")
     (description "MIA provides a combination of command line tools, plug-ins,
 and libraries that make it possible run image processing tasks interactively
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 200b8c1cc3..0758cf5b27 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -276,7 +276,7 @@ actions.")
            `(,glib "bin") ; glib-gettextize
            intltool
            pkg-config))
-    (home-page "http://www.geeqie.org/")
+    (home-page "https://www.geeqie.org/")
     (synopsis "Lightweight GTK+ based image viewer")
     (description
      "Geeqie is a lightweight GTK+ based image viewer for Unix like operating
@@ -306,7 +306,7 @@ collection.  Geeqie was initially based on GQview.")
     (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.")
-    (home-page "http://lxde.sourceforge.net/gpicview/")
+    (home-page "https://lxde.sourceforge.net/gpicview/")
     (license license:gpl2+)))
 
 (define-public sxiv
@@ -592,7 +592,7 @@ and WebP.")
                       (dirname
                        (search-input-file inputs "include/OpenEXR/ImathInt64.h"))
                       ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
-    (home-page "http://qtpfsgui.sourceforge.net")
+    (home-page "https://qtpfsgui.sourceforge.net")
     (synopsis "High dynamic range (HDR) imaging application")
     (description
      "Luminance HDR (formerly QtPFSGui) is a graphical user interface
@@ -750,7 +750,7 @@ displayed in a terminal.")
 (define-public imv
   (package
     (name "imv")
-    (version "4.3.1")
+    (version "4.4.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -758,21 +758,21 @@ displayed in a terminal.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "01x6qg7nhikqh68gnzrdvq0rxma5v9z19il89y8bvdrcr7r1vh40"))
+                "1zlds43z17jrnsrfz3rf3sb3pa5gkmxaibq87509ikc7p1p09c9c"))
               (file-name (git-file-name name version))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'record-absolute-file-names
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; 'imv' is a script that execs 'imv-x11' or 'imv-wayland'.
-             ;; Record their absolute file name.
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin")))
-               (substitute* (string-append bin "/imv")
-                 (("imv-")
-                  (string-append bin "/imv-")))))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'install 'record-absolute-file-names
+                 (lambda _
+                   ;; 'imv' is a script that execs 'imv-x11' or 'imv-wayland'.
+                   ;; 'imv-dir' execs 'imv'. Record their absolute file names.
+                   (let ((bin (string-append #$output "/bin")))
+                     (substitute* (string-append bin "/imv")
+                       (("imv-") (string-append bin "/imv-")))
+                     (substitute* (string-append bin "/imv-dir")
+                       (("imv") (string-append bin "/imv")))))))))
     (native-inputs
      (list asciidoc
            pkg-config))
@@ -863,7 +863,7 @@ with tiling window managers.  Features include:
        #:make-flags
        (list
         (string-append "PREFIX=" (assoc-ref %outputs "out")))))
-    (home-page "http://spiegl.de/qiv/")
+    (home-page "https://spiegl.de/qiv/")
     (synopsis "Graphical image viewer for X")
     (description
      "Quick Image Viewer is a small and fast GDK/Imlib2 image viewer.
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 36c2ba69df..9f14a06e89 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -34,7 +34,7 @@
 ;;; Copyright © 2021 Alexandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
 ;;; Copyright © 2022 ( <paren@disroot.org>
-;;; Copyright © 2022 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2022-2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -178,12 +178,11 @@ library.  It supports almost all PNG features and is extensible.")
    (license license:zlib)
    (home-page "http://www.libpng.org/pub/png/libpng.html")))
 
-;; libpng-apng should be updated when the APNG patch is released:
-;; <https://bugs.gnu.org/27556>
 (define-public libpng-apng
+  ;; The APNG patch is maintained separately and may lag behind upstream libpng.
   (package
     (name "libpng-apng")
-    (version "1.6.37")
+    (version "1.6.39")
     (source
      (origin
        (method url-fetch)
@@ -196,8 +195,7 @@ library.  It supports almost all PNG features and is extensible.")
                    "ftp://ftp.simplesystems.org/pub/libpng/png/src/history"
                    "/libpng16/libpng-" version ".tar.xz")))
        (sha256
-        (base32
-         "1jl8in381z0128vgxnvn33nln6hzckl7l7j9nqvkaf1m9n1p0pjh"))))
+        (base32 "0dv90dxvmqpk7mbywyjbz8lh08cv4b0ksqp1y62mzvmlf379cihz"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -215,14 +213,12 @@ library.  It supports almost all PNG features and is extensible.")
                        apng.gz)
                (invoke "sh" "-c"
                        (string-append "gunzip < " apng.gz " > the-patch"))
-               (apply-patch "the-patch")
-               #t)))
+               (apply-patch "the-patch"))))
          (add-before 'configure 'no-checks
            (lambda _
              (substitute* "Makefile.in"
                (("^scripts/symbols.chk") "")
-               (("check: scripts/symbols.chk") ""))
-             #t)))))
+               (("check: scripts/symbols.chk") "")))))))
     (inputs
      `(("apng" ,(origin
                   (method url-fetch)
@@ -231,7 +227,7 @@ library.  It supports almost all PNG features and is extensible.")
                                   version "/libpng-" version "-apng.patch.gz"))
                   (sha256
                    (base32
-                    "1dh0250mw9b2hx7cdmnb2blk7ddl49n6vx8zz7jdmiwxy38v4fw2"))))))
+                    "1z8cx011a2c7vagwgi92rbmky1wi8awmrdldqh9f5k80pbmbdi2a"))))))
     (native-inputs
      (list libtool))
     ;; libpng.la says "-lz", so propagate it.
@@ -606,7 +602,7 @@ collection of tools for doing simple manipulations of TIFF images.")
 (define-public leptonica
   (package
     (name "leptonica")
-    (version "1.80.0")
+    (version "1.83.1")
     (source
      (origin
        (method git-fetch)
@@ -615,7 +611,7 @@ collection of tools for doing simple manipulations of TIFF images.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12ddln72z5l3icz0i9rpsfkg5xik8fcwcn8lb0cp3jigjxi8gvkg"))))
+        (base32 "1j7qf9flb48q0aymf0yx9rypy3bs6hfjcln08zmy8qn2qcjzrmvi"))))
     (build-system gnu-build-system)
     (native-inputs
      (list gnuplot ;needed for test suite
@@ -624,33 +620,31 @@ collection of tools for doing simple manipulations of TIFF images.")
            libtool
            pkg-config))
     (inputs
-     `(("giflib" ,giflib)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("openjpeg" ,openjpeg)
-       ("zlib" ,zlib)))
+     (list giflib
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           openjpeg
+           zlib))
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-reg-wrapper
-           (lambda _
-             (substitute* "prog/reg_wrapper.sh"
-               ((" /bin/sh ")
-                (string-append " " (which "sh") " "))
-               (("which gnuplot")
-                "true"))
-             #t))
-         (add-after 'install 'provide-absolute-giflib-reference
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (giflib (assoc-ref inputs "giflib")))
-               ;; Add an absolute reference to giflib to avoid propagation.
-               (with-directory-excursion (string-append out "/lib")
-                 (substitute* '("liblept.la" "pkgconfig/lept.pc")
-                   (("-lgif") (string-append "-L" giflib "/lib -lgif"))))
-               #t))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-reg-wrapper
+            (lambda _
+              (substitute* "prog/reg_wrapper.sh"
+                ((" /bin/sh ")
+                 (string-append " " (which "sh") " "))
+                (("which gnuplot")
+                 "true"))))
+          (add-after 'install 'provide-absolute-giflib-reference
+            (lambda _
+              (let ((giflib #$(this-package-input "giflib")))
+                ;; Add an absolute reference to giflib to avoid propagation.
+                (with-directory-excursion (string-append #$output "/lib")
+                  (substitute* '("libleptonica.la" "pkgconfig/lept.pc")
+                    (("-lgif") (string-append "-L" giflib "/lib -lgif"))))))))))
     (home-page "http://www.leptonica.com/")
     (synopsis "Library and tools for image processing and analysis")
     (description
@@ -937,7 +931,7 @@ compose, and analyze GIF images.")
                     (format #f "EXECINPUT=~a~%" execinput)))
                  (invoke "sh" "testit.sh"))))))))
     (native-inputs (list drm-tools)) ;for tests
-    (home-page "http://libuemf.sourceforge.net/")
+    (home-page "https://libuemf.sourceforge.net/")
     (synopsis "Library for working with WFM, EMF and EMF+ images")
     (description "The libUEMF library is a portable C99 implementation for
 reading and writing @acronym{WFM, Windows Metafile}, @acronym{EMF, Enhanced
@@ -1411,7 +1405,7 @@ and XMP metadata of images in various formats.")
     (description "Developer's Image Library (DevIL) is a library to develop
 applications with support for many types of images.  DevIL can load, save,
 convert, manipulate, filter and display a wide variety of image formats.")
-    (home-page "http://openil.sourceforge.net")
+    (home-page "https://openil.sourceforge.net")
     (license license:lgpl2.1+)))
 
 (define-public jasper
@@ -1523,7 +1517,7 @@ differences in file encoding, image quality, and other small variations.")
      (list gettext-minimal libtool perl))
     (inputs
      (list libjpeg-turbo libmhash libmcrypt zlib))
-    (home-page "http://steghide.sourceforge.net")
+    (home-page "https://steghide.sourceforge.net")
     (synopsis "`Hide' (nonconfidential) data in image or audio files")
     (description
      "Steghide is a program to `hide' data in various kinds of image and audio
@@ -1572,7 +1566,7 @@ specifically at this tool.")
 files to a smaller size, without losing any information.  This program
 also converts external formats (BMP, GIF, PNM and TIFF) to optimized
 PNG, and performs PNG integrity checks and corrections.")
-    (home-page "http://optipng.sourceforge.net/")
+    (home-page "https://optipng.sourceforge.net/")
     (license license:zlib)))
 
 (define-public imgp
@@ -1743,7 +1737,7 @@ and decompress to 32-bit and big-endian pixel buffers (RGBX, XBGR, etc.).")
 files in the nifti-1 data format - a binary file format for storing
 medical image data, e.g. magnetic resonance image (MRI) and functional MRI
 (fMRI) brain images.")
-    (home-page "http://niftilib.sourceforge.net")
+    (home-page "https://niftilib.sourceforge.net")
     (license license:public-domain)))
 
 (define-public gpick
@@ -2016,7 +2010,7 @@ to the standard output.  It works well together with grim.")
                             "/share/X11/rgb.txt"))))
     (inputs (list xorg-rgb libpng))
     (native-inputs (list pngsuite))
-    (home-page "http://sng.sourceforge.net")
+    (home-page "https://sng.sourceforge.net")
     (synopsis "Markup language for representing PNG contents")
     (description "SNG (Scriptable Network Graphics) is a minilanguage designed
 specifically to represent the entire contents of a PNG (Portable Network
@@ -2140,7 +2134,7 @@ This package can be used to create @code{favicon.ico} files for web sites.")
 (define-public libavif
   (package
     (name "libavif")
-    (version "0.9.2")
+    (version "0.11.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2149,22 +2143,27 @@ This package can be used to create @code{favicon.ico} files for web sites.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1yxmgjlxm1srm98zyj79bj8r8vmg67daqnq0ggcvxknq54plkznk"))))
+                "02zmb62g0yx6rfz4w1isyzfrckv5i7dzyz26rp2mspbx9w6v8j4r"))))
     (build-system cmake-build-system)
     (arguments
      (list
+      #:modules '((guix build cmake-build-system)
+                  (guix build utils)
+                  (srfi srfi-26))
       #:configure-flags
       #~(list "-DAVIF_CODEC_AOM=ON" "-DAVIF_CODEC_DAV1D=ON"
               #$@(if (this-package-input "rav1e")
                    '("-DAVIF_CODEC_RAV1E=ON")
                    '())
-              "-DAVIF_BUILD_TESTS=ON" "-DAVIF_BUILD_APPS=ON")
+              "-DAVIF_BUILD_TESTS=ON" "-DAVIF_ENABLE_GTEST=ON"
+              "-DAVIF_BUILD_APPS=ON" "-DAVIF_BUILD_GDK_PIXBUF=ON")
       #:phases
       #~(modify-phases %standard-phases
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "./aviftest" "../source/tests/data"))))
+          (add-before 'configure 'patch-thumbnailer
+            (lambda _
+              (substitute* "contrib/gdk-pixbuf/avif.thumbnailer.in"
+                (("@CMAKE_INSTALL_FULL_BINDIR@/gdk-pixbuf-thumbnailer")
+                 (string-append #$gdk-pixbuf "/bin/gdk-pixbuf-thumbnailer")))))
           (add-after 'install 'install-readme
             (lambda _
               (let ((doc (string-append #$output "/share/doc/libavif-" #$version)))
@@ -2174,29 +2173,52 @@ This package can be used to create @code{favicon.ico} files for web sites.")
               (let* ((avifenc  (string-append #$output       "/bin/avifenc"))
                      (avifenc* (string-append #$output:tools "/bin/avifenc"))
                      (avifdec  (string-append #$output       "/bin/avifdec"))
-                     (avifdec* (string-append #$output:tools "/bin/avifdec")))
+                     (avifdec* (string-append #$output:tools "/bin/avifdec"))
+
+                     (thumbnailer    (string-append
+                                      #$output
+                                      "/share/thumbnailers/avif.thumbnailer"))
+                     (thumbnailer*   (string-append
+                                      #$output:pixbuf-loader
+                                      "/share/thumbnailers/avif.thumbnailer"))
+                     (pixbuf-loader  (string-append
+                                      #$output
+                                      "/lib/gdk-pixbuf-2.0/2.10.0/loaders/"
+                                      "libpixbufloader-avif.so"))
+                     (pixbuf-loader* (string-append
+                                      #$output:pixbuf-loader
+                                      "/lib/gdk-pixbuf-2.0/2.10.0/loaders/"
+                                      "libpixbufloader-avif.so")))
                 (mkdir-p (string-append #$output:tools "/bin"))
+                (for-each (compose mkdir-p
+                                   (cut string-append
+                                        #$output:pixbuf-loader <>))
+                          '("/share/thumbnailers"
+                            "/lib/gdk-pixbuf-2.0/2.10.0/loaders/"))
 
                 (for-each (lambda (old new)
                             (copy-file old new)
                             (delete-file old)
                             (chmod new #o555))
-                          (list avifenc avifdec)
-                          (list avifenc* avifdec*))))))))
+                          (list avifenc avifdec
+                                thumbnailer pixbuf-loader)
+                          (list avifenc* avifdec*
+                                thumbnailer* pixbuf-loader*))))))))
+    (native-inputs (list googletest pkg-config))
     (inputs
      (append
       (if (member (%current-system) (package-transitive-supported-systems rav1e))
         (list rav1e) '())
-      (list dav1d libaom zlib libpng libjpeg-turbo)))
+      (list dav1d libaom zlib libpng libjpeg-turbo gdk-pixbuf)))
     (outputs (list "out"
-                   "tools"))  ; avifenc & avifdec
+                   "tools"  ; avifenc & avifdec
+                   "pixbuf-loader"))
     (synopsis "Encode and decode AVIF files")
     (description "Libavif is a C implementation of @acronym{AVIF, the AV1 Image
 File Format}.  It can encode and decode all YUV formats and bit depths supported
 by AOM, including with alpha.")
     (home-page "https://github.com/AOMediaCodec/libavif")
-    (license (list license:bsd-2    ; libavif itself
-                   license:expat)))) ; cJSON in the test suite
+    (license (list license:bsd-2))))
 
 (define-public libheif
   (package
@@ -2320,7 +2342,7 @@ Format) file format decoder and encoder.")
        (list "intl"                     ; build internationalized version
              "man")                     ; build the man page
        #:tests? #f))                    ; no test suite
-    (home-page "http://mtpaint.sourceforge.net/")
+    (home-page "https://mtpaint.sourceforge.net/")
     (synopsis "Create pixel art and manipulate digital images")
     (description
      "Mtpaint is a graphic editing program which uses the GTK+ toolkit.
@@ -2392,7 +2414,7 @@ Wacom-style graphics tablets.")
 (define-public phockup
   (package
     (name "phockup")
-    (version "1.9.0")
+    (version "1.9.2")
     (source
      (origin
        (method git-fetch)
@@ -2401,8 +2423,7 @@ Wacom-style graphics tablets.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1xs2h3nj19wsfffl87akinx14drk5nn2svjwyj0csv10apk0q4pp"))))
+        (base32 "0j4mnsy12bhsmd80vgqknv004xbqd165y8gpalw87gp8i8xv172r"))))
     (build-system copy-build-system)
     (arguments
      `(#:install-plan '(("src" "share/phockup/")
@@ -2411,12 +2432,18 @@ Wacom-style graphics tablets.")
        (modify-phases %standard-phases
          (add-after 'unpack 'configure
            (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* (list "src/dependency.py" "src/exif.py")
-               (("'exiftool'")
-                (string-append "'" (search-input-file inputs "/bin/exiftool") "'")))))
+             (substitute* (list "src/dependency.py"
+                                "src/exif.py")
+               (("'exiftool")
+                (string-append "'" (search-input-file inputs "bin/exiftool"))))))
          (add-before 'install 'check
            (lambda _
-             (invoke "pytest")))
+             ;; Test without PATH to make sure ‘exiftool’ is properly found.
+             (let ((path (getenv "PATH"))
+                   (pytest (which "pytest")))
+               (setenv "PATH" "")
+               (invoke pytest)
+               (setenv "PATH" path))))
          (add-after 'install 'install-bin
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
diff --git a/gnu/packages/instrumentation.scm b/gnu/packages/instrumentation.scm
index 133d684567..c25086127a 100644
--- a/gnu/packages/instrumentation.scm
+++ b/gnu/packages/instrumentation.scm
@@ -43,6 +43,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
@@ -53,6 +54,7 @@
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system linux-module)
+  #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
@@ -120,6 +122,32 @@ LTTng and barectf.  This package provides a library with a C API, Python 3
 bindings, and the command-line tool @command{babeltrace2}.")
     (license license:expat)))
 
+(define-public barectf
+  (package
+    (name "barectf")
+    (version "3.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "barectf" version))
+              (sha256
+               (base32
+                "0zhc9d4qnnl4fjj6354qb4bng4ykywn8x3l3acpv6sx439q6ylwd"))))
+    (build-system python-build-system)
+    (native-inputs (list gcc-toolchain
+                         gnu-make
+                         python-jinja2
+                         python-jsonschema
+                         python-pyyaml-5
+                         python-termcolor
+                         python-tox))
+    (home-page "https://barectf.org")
+    (synopsis "CTF tracer generator")
+    (description
+     "@command{barectf} is a generator of tracer which produces CTF data
+streams.  The generated C source code has no other dependencies than a few C
+standard library headers.")
+    (license license:expat)))
+
 (define-public dyninst
   (package
     (name "dyninst")
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index b102619b2d..4bce2d2d47 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -39,6 +39,7 @@
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
@@ -62,10 +63,12 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages lxqt)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages kde)
@@ -584,6 +587,79 @@ interface for those who are accustomed to the ircII way of doing things.")
                    ;; distribute binaries.
                    (license:non-copyleft "http://epicsol.org/copyright")))))
 
+(define-public go-gopkg-in-irc-v3
+  (package
+    (name "go-gopkg-in-irc-v3")
+    (version "3.1.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gopkg.in/irc.v3")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0f2vv947yf9ygy8ylwqkd9yshybfdsbsp9pffjyvm7l7rnq5da60"))))
+    (build-system go-build-system)
+    (arguments
+     '(;; TODO 3 tests fail because of missing files
+       ;; https://paste.sr.ht/~whereiseveryone/784d068887a65c1b869caa7d7c2077d28a2b2187
+       #:tests? #f
+       #:import-path "gopkg.in/irc.v3" #:unpack-path "gopkg.in/irc.v3"))
+    (propagated-inputs
+     `(("go-gopkg-in-yaml-v2" ,go-gopkg-in-yaml-v2)
+       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)))
+    (home-page "https://gopkg.in/irc.v3")
+    (synopsis "Low-level IRC library for Go")
+    (description "Package irc provides a simple IRC library meant as a
+building block for other projects.")
+    (license license:expat)))
+
+(define-public chathistorysync
+  (package
+    (name "chathistorysync")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~emersion/chathistorysync")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "03dxr178wnicggx0k95wvyzgyk4s4g0adbi2z0md517a5qd1lh23"))))
+    (build-system go-build-system)
+    (arguments
+     (list #:import-path "git.sr.ht/~emersion/chathistorysync"
+           #:install-source? #f ; chathistorysync is an end-user application.
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'build 'doc
+                 (lambda _
+                   (with-directory-excursion
+                       "src/git.sr.ht/~emersion/chathistorysync"
+                     (invoke "sh" "-c"
+                             "scdoc <chathistorysync.1.scd >chathistorysync.1"))))
+               (add-after 'install 'install-doc
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out")))
+                     (with-directory-excursion
+                         "src/git.sr.ht/~emersion/chathistorysync"
+                       (install-file
+                        "chathistorysync.1"
+                        (string-append out "/share/man/man1")))))))))
+    (inputs
+     (list go-golang-org-x-sys
+           go-golang-org-x-term
+           go-golang-org-x-crypto
+           go-gopkg-in-irc-v3))
+    (native-inputs (list scdoc))
+    (home-page "https://git.sr.ht/~emersion/chathistorysync")
+    (synopsis "Synchronization tool for IRC chat history")
+    (description
+     "This package provides a synchronization tool for IRC chat history.")
+    (license license:agpl3)))
+
 (define-public litterbox
   (package
     (name "litterbox")
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index b74cdff0c7..acf57c2772 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -59,7 +59,6 @@
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages)
-  #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system qt)
@@ -69,31 +68,24 @@
   #:use-module (guix packages)
   #:use-module (guix utils))
 
-(define %jami-version "20221220.0956.79e1207")
+(define %jami-version "20230206.0")
 
 (define %jami-sources
   ;; Return an origin object of the tarball release sources archive of the
   ;; Jami project.
   (origin
     (method url-fetch)
-    (uri (string-append "https://dl.jami.net/release/tarballs/jami_"
-                        %jami-version
-                        ".tar.gz"))
+    (uri (string-append "https://dl.jami.net/release/tarballs/jami-"
+                        %jami-version ".tar.gz"))
     (modules '((guix build utils)))
     (snippet
-     `(begin
-        ;; Delete multiple MiBs of bundled tarballs.  The contrib directory
-        ;; contains the custom patches for pjproject and other libraries used
-        ;; by Jami.
-        (delete-file-recursively "daemon/contrib/tarballs")
-        ;; Remove the git submodule directories of unused Jami clients.
-        (for-each delete-file-recursively '("client-android"
-                                            "client-ios"
-                                            "client-macosx"
-                                            "plugins"))))
+     ;; Delete multiple MiBs of bundled tarballs.  The daemon/contrib
+     ;; directory contains the custom patches for pjproject and other
+     ;; libraries used by Jami.
+     '(delete-file-recursively "daemon/contrib/tarballs"))
     (sha256
      (base32
-      "0g5709rmb9944s0ij9g4pm1b871f5z0s5nawvm10z14wx3y1np8m"))
+      "1fx7c6q8j0x3q8cgzzd4kpsw3npqggsi1n493cv1jg7v5d01d3jz"))
     (patches (search-patches "jami-disable-integration-tests.patch"
                              "jami-libjami-headers-search.patch"))))
 
@@ -107,18 +99,16 @@
         (invoke "tar" "-xvf" #$%jami-sources
                 "-C" patches-directory
                 "--strip-components=5"
-                (string-append "jami-project/daemon/contrib/src/"
-                               dep-name))
-        (for-each
-         (lambda (file)
-           (invoke "patch" "--force" "--ignore-whitespace" "-p1" "-i"
-                   (string-append patches-directory "/"
-                                  file ".patch")))
-         patches))))
+                "--wildcards"
+                (string-append "jami-*/daemon/contrib/src/" dep-name))
+        (for-each (lambda (f)
+                    (invoke "patch" "--force" "--ignore-whitespace" "-p1" "-i"
+                            (string-append patches-directory "/" f ".patch")))
+                  patches))))
 
 (define-public pjproject-jami
-  (let ((commit "513a3f14c44b2c2652f9219ec20dea64b236b713")
-        (revision "1"))
+  (let ((commit "20e00fcdd16459444bae2bae9c0611b63cf87297")
+        (revision "2"))
     (package
       (inherit pjproject)
       (name "pjproject-jami")
@@ -137,7 +127,7 @@
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1vzfpiwhd96a9ibk398z922a60j18xd7mblsmi6355r7ccj2aw7p"))))
+                  "1g8nkb5ln5y208k2hhmlcddv2dzf6plfrsvi4x8sa7iwgb4prgb8"))))
       (arguments
        (substitute-keyword-arguments (package-arguments pjproject)
          ((#:phases phases '%standard-phases)
@@ -153,10 +143,12 @@
                    '("0009-add-config-site")))))))))))
 
 ;; The following variables are configure flags used by ffmpeg-jami.  They're
-;; from the jami-project/daemon/contrib/src/ffmpeg/rules.mak file.  We try to
-;; keep it as close to the official Jami package as possible, to provide all
-;; the codecs and extra features that are expected (see:
-;; https://review.jami.net/plugins/gitiles/ring-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak)
+;; from the jami/daemon/contrib/src/ffmpeg/rules.mak file.  We try to keep it
+;; as close to the official Jami package as possible, to provide all the
+;; codecs and extra features that are expected (see:
+;; https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/rules.mak).
+;; An exception are the ffnvcodec-related switches, which is not packaged in
+;; Guix and would not work with Mesa.
 (define %ffmpeg-default-configure-flags
   '("--disable-everything"
     "--enable-zlib"
@@ -348,34 +340,12 @@
     "--enable-encoder=mjpeg_vaapi"
     "--enable-encoder=hevc_vaapi"))
 
-;; ffnvcodec is not supported on ARM; enable it only for the i386 and x86_64
-;; architectures.
-(define %ffmpeg-linux-x86-configure-flags
-  '("--arch=x86"
-    "--enable-cuvid"
-    "--enable-ffnvcodec"
-    "--enable-nvdec"
-    "--enable-nvenc"
-    "--enable-hwaccel=h264_nvdec"
-    "--enable-hwaccel=hevc_nvdec"
-    "--enable-hwaccel=vp8_nvdec"
-    "--enable-hwaccel=mjpeg_nvdec"
-    "--enable-encoder=h264_nvenc"
-    "--enable-encoder=hevc_nvenc"))
-
-;; This procedure composes the configure flags list for ffmpeg-jami.
 (define (ffmpeg-compose-configure-flags)
-  (define (system=? s)
-    (string-prefix? s (%current-system)))
-
-  `(,@%ffmpeg-default-configure-flags
-    ,@(if (string-contains (%current-system) "linux")
-          (if (or (system=? "i686")
-                  (system=? "x86_64"))
-              (append %ffmpeg-linux-configure-flags
-                      %ffmpeg-linux-x86-configure-flags)
-              %ffmpeg-linux-configure-flags)
-          '())))
+  "Compose the configure flag lists of ffmpeg-jami."
+  #~(append '#$%ffmpeg-default-configure-flags
+            (if (string-contains #$(%current-system) "linux")
+                '#$%ffmpeg-linux-configure-flags
+                '())))
 
 (define-public ffmpeg-jami
   (package
@@ -391,10 +361,14 @@
               (sha256
                (base32
                 "0yq0jcdc4qm5znrzylj3dsicrkk2n3n8bv28vr0a506fb7iglbpg"))))
+    (outputs '("out" "debug"))
     (arguments
      (substitute-keyword-arguments (package-arguments ffmpeg-5)
-       ((#:configure-flags '())
-        (ffmpeg-compose-configure-flags))
+       ((#:configure-flags _ '())
+        #~(cons* "--disable-static"
+                 "--enable-shared"
+                 "--disable-stripping"
+                 #$(ffmpeg-compose-configure-flags)))
        ((#:phases phases)
         #~(modify-phases #$phases
             (add-after 'unpack 'apply-patches
@@ -427,7 +401,7 @@
     (name "libjami")
     (version %jami-version)
     (source %jami-sources)
-    (outputs '("out" "debug"))
+    (outputs '("out" "bin" "debug"))    ;"bin' contains jamid
     (build-system gnu-build-system)
     (arguments
      (list
@@ -450,7 +424,20 @@
             (lambda _
               (for-each delete-file
                         (find-files (string-append #$output "/lib")
-                                    "\\.a$")))))))
+                                    "\\.a$"))))
+          (add-after 'install 'move-jamid
+            ;; This nearly halves the size of the main output (from 1566.2 MiB
+            ;; to 833.6 MiB), due to not depending on dbus-c++ and its large
+            ;; dependencies.
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((libexec (string-append #$output:bin "/libexec"))
+                    (share (string-append #$output:bin "/share")))
+                (mkdir-p libexec)
+                (rename-file (search-input-file outputs "libexec/jamid")
+                             (string-append libexec "/jamid"))
+                (mkdir-p share)
+                (rename-file (search-input-directory outputs "share/dbus-1")
+                             (string-append share "/dbus-1"))))))))
     (inputs
      (list alsa-lib
            asio
@@ -486,7 +473,9 @@
 Jami core functionality.  Jami is a secure and distributed voice, video and
 chat communication platform that requires no centralized server and leaves the
 power of privacy in the hands of the user.  It supports the SIP and IAX
-protocols, as well as decentralized calling using P2P-DHT.")
+protocols, as well as decentralized calling using P2P-DHT.  The @samp{\"bin\"}
+output contains the D-Bus daemon (@command{jamid}) as well as the Jami D-Bus
+service definitions.")
     (home-page "https://jami.net/")
     (license license:gpl3+)))
 
@@ -553,9 +542,6 @@ protocols, as well as decentralized calling using P2P-DHT.")
            pkg-config
            python
            qttools
-           doxygen
-           graphviz
-           gsettings-desktop-schemas    ;for tests
            vulkan-headers))
     (inputs
      (list ffmpeg-jami
diff --git a/gnu/packages/java-bootstrap.scm b/gnu/packages/java-bootstrap.scm
index 3a3df2bcb0..481d8cd075 100644
--- a/gnu/packages/java-bootstrap.scm
+++ b/gnu/packages/java-bootstrap.scm
@@ -86,7 +86,7 @@
                (base32
                 "1qqldrp74pzpy5ly421srqn30qppmm9cvjiqdngk8hf47dv2rc0c"))))
     (build-system gnu-build-system)
-    (home-page "http://jikes.sourceforge.net/")
+    (home-page "https://jikes.sourceforge.net/")
     (synopsis "Compiler for the Java language")
     (description "Jikes is a compiler that translates Java source files as
 defined in The Java Language Specification into the bytecoded instruction set
@@ -181,7 +181,7 @@ language.")
            ("automake" ,automake)
            ("libtool" ,libtool))
          '()))
-    (home-page "http://jamvm.sourceforge.net/")
+    (home-page "https://jamvm.sourceforge.net/")
     (synopsis "Small Java Virtual Machine")
     (description "JamVM is a Java Virtual Machine conforming to the JVM
 specification edition 2 (blue book).  It is extremely small.  However, unlike
diff --git a/gnu/packages/java-maths.scm b/gnu/packages/java-maths.scm
index 45c42297ad..55b8a35e75 100644
--- a/gnu/packages/java-maths.scm
+++ b/gnu/packages/java-maths.scm
@@ -22,7 +22,6 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
-  #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages gcc)
diff --git a/gnu/packages/java-xml.scm b/gnu/packages/java-xml.scm
index 5b16806e27..3cf9f91803 100644
--- a/gnu/packages/java-xml.scm
+++ b/gnu/packages/java-xml.scm
@@ -63,7 +63,7 @@
               "test/src/org/simpleframework/xml/core/NoAnnotationsRequiredTest.java"))))))
     (native-inputs
      (list unzip))
-    (home-page "http://simple.sourceforge.net/")
+    (home-page "https://simple.sourceforge.net/")
     (synopsis "XML serialization framework for Java")
     (description "Simple is a high performance XML serialization and
 configuration framework for Java.  Its goal is to provide an XML framework
@@ -92,7 +92,7 @@ maintaining each reference encountered.")
        #:jdk ,icedtea-8
        #:source-dir ".."
        #:tests? #f)); no tests
-    (home-page "http://xerces.apache.org/xml-commons/")
+    (home-page "https://xerces.apache.org/xml-commons/")
     (synopsis "Java XML parser and transformer APIs (DOM, SAX, JAXP, TrAX)")
     (description "Jaxp from the Apache XML Commons project is used by
 the Xerces-J XML parser and Xalan-J XSLT processor and specifies these APIs:
@@ -131,7 +131,7 @@ the Xerces-J XML parser and Xalan-J XSLT processor and specifies these APIs:
        #:tests? #f)); no tests
     (inputs
      (list java-junit))
-    (home-page "http://xerces.apache.org/xml-commons/")
+    (home-page "https://xerces.apache.org/xml-commons/")
     (synopsis "Catalog-based entity and URI resolution")
     (description "The resolver class implements the full semantics of OASIS Technical
 Resolution 9401:1997 (Amendment 2 to TR 9401) catalogs and the 06 Aug
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 37b3f05954..aa80fa8cf9 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -669,7 +669,7 @@
              nss
              pcsc-lite
              zlib))
-      (home-page "http://icedtea.classpath.org")
+      (home-page "https://icedtea.classpath.org")
       (synopsis "Java development kit")
       (description
        "This package provides the Java development kit OpenJDK built with the
@@ -2426,7 +2426,7 @@ debugging, etc.")
              (sha256
               (base32
                "0b6335gkm4x895rac6kfg9d3rpq0sy19ph4zpg2gyw6asfsisjhk"))))))
-      (home-page "http://svnsis.ethz.ch")
+      (home-page "https://svnsis.ethz.ch")
       (synopsis "Utility classes for libraries from ETH Zurich")
       (description "This library supplies some utility classes needed for
 libraries from the SIS division at ETH Zurich like jHDF5.")
@@ -2536,7 +2536,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
              ;; Delete bundled pre-built jars.
              (snippet
               '(begin (delete-file-recursively "lib/") #t))))))
-      (home-page "http://svnsis.ethz.ch")
+      (home-page "https://svnsis.ethz.ch")
       (synopsis "Command line parser library")
       (description "This package provides a parser for command line arguments.")
       (license license:asl2.0))))
@@ -3144,7 +3144,7 @@ private Method[] allMethods = getSortedMethods();")))
        ("java-jarjar" ,java-jarjar)))
     (propagated-inputs
      (list java-hamcrest-parent-pom))
-    (home-page "http://hamcrest.org/")
+    (home-page "https://hamcrest.org/")
     (synopsis "Library of matchers for building test expressions")
     (description
      "This package provides a library of matcher objects (also known as
@@ -5877,7 +5877,7 @@ namespaces.")
            (generate-pom.xml "pom.xml" "com.google.code.findbugs" "jsr305" ,version))
          (replace 'install
            (install-from-pom "pom.xml")))))
-    (home-page "http://findbugs.sourceforge.net/")
+    (home-page "https://findbugs.sourceforge.net/")
     (synopsis "Annotations for the static analyzer called findbugs")
     (description "This package provides annotations for the findbugs package.
 It provides packages in the @code{javax.annotations} namespace.")
@@ -6416,7 +6416,7 @@ the OSGi @code{org.osgi.service.event} module.")
        #:jar-name "eclipse-equinox-osgi.jar"))
     (inputs
      (list java-osgi-annotation))
-    (home-page "http://www.eclipse.org/equinox/")
+    (home-page "https://www.eclipse.org/equinox/")
     (synopsis "Eclipse Equinox OSGi framework")
     (description "This package provides an implementation of the OSGi Core
 specification.")
@@ -6441,7 +6441,7 @@ specification.")
        #:jar-name "eclipse-equinox-common.jar"))
     (inputs
      (list java-eclipse-osgi))
-    (home-page "http://www.eclipse.org/equinox/")
+    (home-page "https://www.eclipse.org/equinox/")
     (synopsis "Common Eclipse runtime")
     (description "This package provides the common Eclipse runtime.")
     (license license:epl1.0)))
@@ -6465,7 +6465,7 @@ specification.")
        #:jar-name "eclipse-core-jobs.jar"))
     (inputs
      (list java-eclipse-equinox-common java-eclipse-osgi))
-    (home-page "http://www.eclipse.org/equinox/")
+    (home-page "https://www.eclipse.org/equinox/")
     (synopsis "Eclipse jobs mechanism")
     (description "This package provides the Eclipse jobs mechanism.")
     (license license:epl1.0)))
@@ -6490,7 +6490,7 @@ specification.")
     (inputs
      (list java-eclipse-core-jobs java-eclipse-equinox-common
            java-eclipse-osgi))
-    (home-page "http://www.eclipse.org/equinox/")
+    (home-page "https://www.eclipse.org/equinox/")
     (synopsis "Eclipse extension registry support")
     (description "This package provides support for the Eclipse extension
 registry.")
@@ -6516,7 +6516,7 @@ registry.")
     (inputs
      (list java-eclipse-equinox-common java-eclipse-equinox-registry
            java-eclipse-osgi java-osgi-service-event))
-    (home-page "http://www.eclipse.org/equinox/")
+    (home-page "https://www.eclipse.org/equinox/")
     (synopsis "Equinox application container")
     (description "This package provides the Equinox application container for
 Eclipse.")
@@ -6542,7 +6542,7 @@ Eclipse.")
     (inputs
      (list java-eclipse-equinox-common java-eclipse-equinox-registry
            java-eclipse-osgi))
-    (home-page "http://www.eclipse.org/equinox/")
+    (home-page "https://www.eclipse.org/equinox/")
     (synopsis "Eclipse preferences mechanism")
     (description "This package provides the Eclipse preferences mechanism with
 the module @code{org.eclipse.equinox.preferences}.")
@@ -6568,7 +6568,7 @@ the module @code{org.eclipse.equinox.preferences}.")
     (inputs
      (list java-eclipse-equinox-common java-eclipse-equinox-preferences
            java-eclipse-equinox-registry java-eclipse-osgi))
-    (home-page "http://www.eclipse.org/")
+    (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse content mechanism")
     (description "This package provides the Eclipse content mechanism in the
 @code{org.eclipse.core.contenttype} module.")
@@ -6883,7 +6883,7 @@ module @code{org.eclipse.compare.core}.")
     (inputs
      (list java-eclipse-equinox-common java-eclipse-core-commands
            java-icu4j))
-    (home-page "http://www.eclipse.org/platform")
+    (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse text library")
     (description "Platform Text is part of the Platform UI project and
 provides the basic building blocks for text and text editors within Eclipse
@@ -8047,7 +8047,7 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
      (list java-junit))
     (native-inputs
      (list java-hamcrest-core))
-    (home-page "http://treelayout.sourceforge.net")
+    (home-page "https://treelayout.sourceforge.net")
     (synopsis "Tree Layout Algorithm in Java")
     (description "TreeLayout creates tree layouts for arbitrary trees.  It is
 not restricted to a specific output or format, but can be used for any kind of
@@ -9997,7 +9997,7 @@ this is not a static analysis tool.)")
            (generate-pom.xml "pom.xml" "aopalliance" "aopalliance" ,version))
          (replace 'install
            (install-from-pom "pom.xml")))))
-    (home-page "http://aopalliance.sourceforge.net")
+    (home-page "https://aopalliance.sourceforge.net")
     (synopsis "Aspect-Oriented Programming")
     (description "The AOP Alliance project is a joint project between several
 software engineering people who are interested in Aspect-Oriented Programming
@@ -11139,7 +11139,7 @@ protocol-independent framework to build mail and messaging applications.")
     (native-inputs
      `(("java-hamcrest-core" ,java-hamcrest-core)
        ("junit" ,java-junit)))
-    (home-page "http://zeromq.org/bindings:java")
+    (home-page "https://zeromq.org/bindings:java")
     (synopsis "Java binding for 0MQ")
     (description "Jeromq provides the java bindings for 0MQ.")
     (license license:mpl2.0)))
@@ -11788,7 +11788,7 @@ specific events.")
            java-jboss-interceptors-api-spec java-weld-parent-pom))
     (native-inputs
      (list java-testng java-hamcrest-core))
-    (home-page "http://cdi-spec.org/")
+    (home-page "https://cdi-spec.org/")
     (synopsis "Contexts and Dependency Injection APIs")
     (description "Java-cdi-api contains the required APIs for Contexts and
 Dependency Injection (CDI).")
@@ -13619,7 +13619,7 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
      (list java-guava java-jboss-javassist java-jsonp-api))
     (native-inputs
      (list javacc))
-    (home-page "http://javaparser.org/")
+    (home-page "https://javaparser.org/")
     (synopsis "Parser for Java")
     (description
      "This project contains a set of libraries implementing a Java 1.0 - Java
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index f0580eff8b..fa37549625 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017, 2019, 2020, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017, 2018, 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017-2020, 2022, 2023 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>
@@ -762,7 +762,7 @@ animating a series of images.")
 (define-public mujs
   (package
     (name "mujs")
-    (version "1.2.0")
+    (version "1.3.2")
     (source
      (origin
        (method git-fetch)
@@ -771,7 +771,7 @@ animating a series of images.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0kqw3xhjk4l2jar14a1f9b3m0xq0h2g3nc9m6hsdv7kf8jhfm83l"))
+        (base32 "1kfp2246pzmrb65c0gfcy130zd7sbniclpjx2jv6jbkmpkjs8kb1"))
        (snippet
         #~(begin
             (use-modules (guix build utils))
diff --git a/gnu/packages/jemalloc.scm b/gnu/packages/jemalloc.scm
index c8e355ccb3..5e7facfd5e 100644
--- a/gnu/packages/jemalloc.scm
+++ b/gnu/packages/jemalloc.scm
@@ -70,7 +70,7 @@
     ;; 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"))
-    (home-page "http://jemalloc.net/")
+    (home-page "https://jemalloc.net/")
     (synopsis "General-purpose scalable concurrent malloc implementation")
     (description
      "This library providing a malloc(3) implementation that emphasizes
diff --git a/gnu/packages/julia-jll.scm b/gnu/packages/julia-jll.scm
index 2b0f644736..2320b03595 100644
--- a/gnu/packages/julia-jll.scm
+++ b/gnu/packages/julia-jll.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Jean-Baptiste Volatier <jbv@pm.me>
+;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
   #:use-module (guix utils)
   #:use-module (guix build-system julia)
   #:use-module (gnu packages)
+  #:use-module (gnu packages astronomy)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
@@ -146,6 +148,48 @@ compression program.")
     (description "This package provides a wrapper for the cairo library.")
     (license license:expat)))
 
+(define-public julia-cfitsio-jll
+  (package
+    (name "julia-cfitsio-jll")
+    (version "4.0.0+0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaBinaryWrappers/CFITSIO_jll.jl")
+             (commit (string-append "CFITSIO-v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1k0mqmpyfjr3ibcmda08llw8m166zw0n3lh5y5aj81q37lrxw990"))))
+    (build-system julia-build-system)
+    (arguments
+     '(#:tests? #f  ; no runtests
+      #:phases
+      (modify-phases %standard-phases
+          (add-after 'link-depot 'override-binary-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (map
+               (lambda (wrapper)
+                 (substitute* wrapper
+                   ;; We're not downloading and unpacking cfitsio.
+                   (("using LibCURL_jll") "")
+                   (("using Zlib_jll") "")
+                   (("generate_init_header.*") "generate_init_header()\n" )
+                   (("generate_wrapper_header.*")
+                    (string-append
+                     "generate_wrapper_header(\"CFITSIO\", \""
+                     (assoc-ref inputs "cfitsio") "\")\n"))))
+               ;; There's a Julia file for each platform, override them all
+               (find-files "src/wrappers/" "\\.jl$")))))))
+    (inputs
+     (list cfitsio))
+    (propagated-inputs
+     (list julia-jllwrappers))
+    (home-page "https://github.com/JuliaBinaryWrappers/CFITSIO_jll.jl")
+    (synopsis "CFITSIO library wrappers")
+    (description "This package provides a wrapper for the cfitsio library.")
+    (license license:expat)))
+
 (define-public julia-compilersupportlibraries-jll
   (package
     (name "julia-compilersupportlibraries-jll")
@@ -188,6 +232,42 @@ originating @code{build_tarballs.jl} script can be found on the community
 build tree Yggdrasil.")
     (license license:expat)))
 
+(define-public julia-erfa-jll
+  (package
+    (name "julia-erfa-jll")
+    (version "2.0.0+0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaBinaryWrappers/ERFA_jll.jl")
+             (commit (string-append "ERFA-v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0knlck3vqr19g9z8zgjr7lj0qf1lisji5s2lm00y3ymv9bkj59sl"))))
+    (build-system julia-build-system)
+    (arguments
+     '(#:tests? #f ;no runtests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'override-binary-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (map (lambda (wrapper)
+                    (substitute* wrapper
+                      (("generate_wrapper_header.*")
+                       (string-append
+                        "generate_wrapper_header(\"ERFA\", \""
+                        (assoc-ref inputs "erfa") "\")\n"))))
+                  ;; There's a Julia file for each platform, override them all
+                  (find-files "src/wrappers/" "\\.jl$")))))))
+    (inputs (list erfa))
+    (propagated-inputs (list julia-jllwrappers))
+    (home-page "https://github.com/JuliaBinaryWrappers/ERFA_jll.jl")
+    (synopsis "ERFA library wrappers")
+    (description "This package provides a wrapper for the erfa library.")
+    (license license:expat)))
+
 (define-public julia-expat-jll
   (package
     (name "julia-expat-jll")
@@ -1683,6 +1763,44 @@ build tree Yggdrasil.")
     (description "This package provides a wrapper for the wayland-protocols library.")
     (license license:expat)))
 
+(define-public julia-wcs-jll
+  (package
+    (name "julia-wcs-jll")
+    (version "7.7.0+0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaBinaryWrappers/WCS_jll.jl")
+             (commit (string-append "WCS-v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "16i9899jwcp5i9mh88rn4b83v3i5v8g1jygixrr0grjnvf5qfvpk"))))
+    (build-system julia-build-system)
+    (arguments
+     '(#:tests? #f  ; no runtests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'link-depot 'override-binary-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (map
+              (lambda (wrapper)
+                (substitute* wrapper
+                  (("generate_wrapper_header.*")
+                   (string-append
+                    "generate_wrapper_header(\"WCS\", \""
+                    (assoc-ref inputs "wcslib") "\")\n"))))
+              ;; There's a Julia file for each platform, override them all
+              (find-files "src/wrappers/" "\\.jl$")))))))
+    (inputs
+     (list wcslib))
+    (propagated-inputs
+     (list julia-jllwrappers))
+    (home-page "https://github.com/JuliaBinaryWrappers/WCS_jll.jl")
+    (synopsis "WCS library wrappers")
+    (description "This package provides a wrapper for the wcs library.")
+    (license license:expat)))
+
 (define-public julia-x264-jll
   (package
     (name "julia-x264-jll")
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 414aba03f0..f6de56e858 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,9 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2021, 2022 Simon Tournier <zimon.toutoune@gmail.com>
-;;; Copyright © 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -746,6 +747,36 @@ variables, both with unordered (nominal variables) and ordered categories
     (description "This package provides a C-compatible enum for Julia.")
     (license license:expat)))
 
+(define-public julia-cfitsio
+  (package
+    (name "julia-cfitsio")
+    (version "1.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaAstro/CFITSIO.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "05bxzzjcc021p3hi092h06r2q7qnvql0xz1alggi83i0pp1mxp6d"))))
+    (build-system julia-build-system)
+    (native-inputs (list julia-aqua))
+    (propagated-inputs (list julia-cfitsio-jll))
+    (home-page "https://github.com/JuliaAstro/CFITSIO.jl")
+    (synopsis "C-style interface to the libcfitsio library")
+    (description "This package provides Julia implementation of C-style
+interface to CFITSIO functions with following features:
+@itemize
+@item Function names closely mirror the C interface (e.g.,
+@code{fits_open_file()}).
+@item Functions operate on @code{FITSFile}, a thin wrapper for fitsfile C
+struct (@code{FITSFile} has concept of \"current HDU\", as in CFITSIO).
+@item Wrapper functions do check the return status from CFITSIO and throw an
+error with the appropriate message.
+@end itemize")
+    (license license:expat)))
+
 (define-public julia-chainrules
   (package
     (name "julia-chainrules")
@@ -1202,7 +1233,7 @@ as SLAM (simultaneous localization and mapping).")
 (define-public julia-crayons
   (package
     (name "julia-crayons")
-    (version "4.0.4")
+    (version "4.1.1")
     (source
       (origin
         (method git-fetch)
@@ -1211,7 +1242,7 @@ as SLAM (simultaneous localization and mapping).")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0v3zhjlnb2914bxcj4myl8pgb7m31p77aj2k1bckmqs96jdph10z"))))
+         (base32 "0vfbb02pclwlbpcl7rhr98a495kga5wydf5wz1gp1xn1wxgpgxpd"))))
     (build-system julia-build-system)
     (home-page "https://github.com/KristofferC/Crayons.jl")
     (synopsis "Colored and styled strings for terminals")
@@ -1614,7 +1645,7 @@ valuable enough at this time.")
     (inputs
      (list python-wrapper))
     (native-inputs
-     (list git-minimal/fixed                  ;needed for the "Utilities" test
+     (list git-minimal/pinned                  ;needed for the "Utilities" test
            julia-documentermarkdown
            julia-documentertools))
     (home-page "https://juliadocs.github.io/Documenter.jl")
@@ -1821,6 +1852,27 @@ It's similar to the Python @code{...} in that it means \"all of the columns
 before (or after)\".")
     (license license:expat)))
 
+(define-public julia-erfa
+  (package
+    (name "julia-erfa")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaAstro/ERFA.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1f63kyqpsx9n4dh54hzy1bvm3fpl4vf8wi1279vfiza3vhh2ggx5"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-erfa-jll julia-staticarrays))
+    (home-page "https://github.com/JuliaAstro/ERFA.jl")
+    (synopsis "Julia wrapper for liberfa")
+    (description "This package provides a Julia wrapper for astronomical library ERFA.")
+    (license license:expat)))
+
 (define-public julia-example
   (let ((commit "f968c69dea24f851d0c7e686db23fa55826b5388"))
     (package
@@ -2097,6 +2149,31 @@ types and sparsity.")
 using finite difference.")
     (license license:expat)))
 
+(define-public julia-fitsio
+  (package
+    (name "julia-fitsio")
+    (version "0.17.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaAstro/FITSIO.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "10w7cdb2cvcwpkcfdz2fwl4ji5rfdv8w9msc9gfd8d34k58bk8c5"))))
+    (build-system julia-build-system)
+    (native-inputs
+     (list julia-aqua julia-orderedcollections))
+    (propagated-inputs
+     (list julia-cfitsio julia-reexport julia-tables))
+    (home-page "https://github.com/JuliaAstro/CFITSIO.jl")
+    (synopsis "Astronomical FITS file support for Julia")
+    (description "This package provides Julia implementation for reading and
+writing @acronym{FITS, Flexible Image Transport System} files, based on the
+@code{cfitsio} library.")
+    (license license:expat)))
+
 (define-public julia-fixedpointnumbers
   (let ((commit "59ee94b93f2f1ee75544ef44187fc0e440cd8015")
         (revision "1"))
@@ -3439,7 +3516,7 @@ fixes.  The Julia IDE effort is pointed to extension for VSCode.")
 (define-public julia-latexstrings
   (package
     (name "julia-latexstrings")
-    (version "1.2.1")
+    (version "1.3.0")
     (source
       (origin
         (method git-fetch)
@@ -3448,7 +3525,7 @@ fixes.  The Julia IDE effort is pointed to extension for VSCode.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "117z27krcf8fydgp6mb0pgn75r4gng9qs7v90qb4bqzsry3faadp"))))
+         (base32 "0iijp96ca9mqg5skr6ps7q0lvqaa374lr2zkbbia5q6qgpq0j5ww"))))
     (build-system julia-build-system)
     (native-inputs
      (list julia-documenter))
@@ -3716,7 +3793,7 @@ TLS} and cryptography C library for Julia.")
 (define-public julia-measurements
   (package
     (name "julia-measurements")
-    (version "2.6.0")
+    (version "2.8.0")
     (source
       (origin
         (method git-fetch)
@@ -3725,14 +3802,15 @@ TLS} and cryptography C library for Julia.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "05p3f0gr4sv4maq8cix5fi8ldq0zagswqsd43xn6fhy046f936mz"))))
+         (base32 "1rn7qaf2s3l7awm8q5fjxlp1503g9mjgmsnvrbhjjvwyyn1k705r"))))
     (build-system julia-build-system)
     (propagated-inputs
      (list julia-calculus
            julia-recipesbase
            julia-requires))
     (native-inputs
-     (list julia-quadgk
+     (list julia-aqua
+           julia-quadgk
            julia-specialfunctions
            julia-unitful))
     (home-page "https://juliaphysics.github.io/Measurements.jl/stable/")
@@ -4077,7 +4155,7 @@ doesn't provide any other \"high-level\" functionality like layers or AD.")
 (define-public julia-optim
   (package
     (name "julia-optim")
-    (version "1.6.0")
+    (version "1.7.4")
     (source
       (origin
         (method git-fetch)
@@ -4086,7 +4164,7 @@ doesn't provide any other \"high-level\" functionality like layers or AD.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0nvl3xp9c6r80y9n7fic4zyq2443apfmbcpnx0wvgkv4vsy08x5j"))))
+         (base32 "0pdwa2xm08c3g979qgsmcr343j4kkh4l6x5rdj1blhqh5gw8172b"))))
     (build-system julia-build-system)
     (arguments
      (list
@@ -4094,9 +4172,14 @@ doesn't provide any other \"high-level\" functionality like layers or AD.")
        #~(modify-phases %standard-phases
            (add-after 'unpack 'adjust-tests
              (lambda _
-               ;; TODO: Figure out why this test fails.
                (substitute* "test/runtests.jl"
-                 ((".*l_bfgs.*") "")))))))
+                 ;; Distributions.jl isn't packaged yet.
+                 ((".*newton_trust_region.*") ""))
+               (substitute*
+                 "test/multivariate/solvers/constrained/ipnewton/constraints.jl"
+                 ;; TODO: Figure out why this test fails.
+                 (("@test Optim\\.converged") "@test_skip Optim.converged")
+                 (("@test Optim\\.minimum") "@test_skip Optim.minimum")))))))
     (propagated-inputs
      (list julia-compat
            julia-fillarrays
@@ -4591,7 +4674,7 @@ Julia with little or no overhead (arrays are passed without making a copy).")
 (define-public julia-quadgk
   (package
     (name "julia-quadgk")
-    (version "2.4.1")
+    (version "2.5.0")
     (source
       (origin
         (method git-fetch)
@@ -4600,7 +4683,7 @@ Julia with little or no overhead (arrays are passed without making a copy).")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1hy0629yai6xflgxaflk9764lzr1lzhlghimxk1aqi212q9c6n33"))))
+         (base32 "0f14dhn0f7ln2j96qvmnsyy9ffzqsngd16ikc136snlxv4k4whiv"))))
     (build-system julia-build-system)
     (propagated-inputs
      (list julia-datastructures))
@@ -4805,7 +4888,7 @@ more complex visualizations.")
      (list julia-nanmath
            julia-plotutils
            julia-recipesbase))
-    (home-page "http://juliaplots.org/RecipesPipeline.jl/dev/")
+    (home-page "https://juliaplots.org/RecipesPipeline.jl/dev/")
     (synopsis "Utilities for processing recipes")
     (description "This package was factored out of @code{Plots.jl} to allow any
 other plotting package to use the recipe pipeline.  In short, the extremely
@@ -6058,6 +6141,29 @@ useful in order to support @code{VersionNumber} comparisons applied to
 \"foreign\" version numbers from external packages.")
     (license license:expat)))
 
+(define-public julia-wcs
+  (package
+    (name "julia-wcs")
+    (version "0.6.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaAstro/WCS.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ala8j4mh51gh14k3npcxmnlj2f00l0pij74qz453iqadb2283mi"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-constructionbase julia-wcs-jll))
+    (home-page "https://github.com/JuliaAstro/WCS.jl")
+    (synopsis "Astronomical WCS library for Julia")
+    (description "Astronomical @url{World Coordinate System,
+https://www.atnf.csiro.au/people/mcalabre/WCS/} library for Julia.  This package
+wraps the WCSLIB C library.")
+    (license license:expat)))
+
 (define-public julia-weakrefstrings
   (package
     (name "julia-weakrefstrings")
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index d35901eadb..906cb4b94c 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -31,6 +31,7 @@
   #:use-module (guix utils)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module ((guix search-paths) #:select ($SSL_CERT_FILE))
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
@@ -292,6 +293,15 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (substitute* (jlpath "libblastrampoline")
                  (("libblastrampoline\\.so")
                   (search-input-file inputs "/lib/libblastrampoline.so"))))))
+         (add-before 'build 'use-ssl-cert-file
+           (lambda _
+             ;; We must adapt MozillaCACerts to use SSL_CERT_FILE.
+             (substitute* "stdlib/MozillaCACerts_jll/src/MozillaCACerts_jll.jl"
+               (("global cacert = .*")
+                (string-append
+                  "global cacert = get(ENV, \"SSL_CERT_FILE\","
+                  ;; our fallback location.
+                  "\"/etc/ssl/certs/ca-certificates.crt\")\n")))))
          (add-after 'unpack 'enable-parallel-tests
            (lambda* (#:key parallel-tests? #:allow-other-keys)
              (when parallel-tests?
@@ -309,6 +319,8 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
                (("4.1.0") ,(package-version (this-package-input "mpfr"))))
              (substitute* "stdlib/GMP_jll/test/runtests.jl"
                (("6.2.1") ,(package-version (this-package-input "gmp"))))
+             (substitute* "stdlib/LibGit2_jll/test/runtests.jl"
+               (("1.3.0") ,(package-version (this-package-input "libgit2"))))
              (substitute* "stdlib/nghttp2_jll/test/runtests.jl"
                (("1.48.0") ,(package-version (this-package-input "libnghttp2"))))
              (substitute* "stdlib/Zlib_jll/test/runtests.jl"
@@ -525,7 +537,8 @@ using Dates: @dateformat_str, Date, DateTime, DateFormat, Time"))
               (files (list "share/julia/loadpath/")))
             (search-path-specification
               (variable "JULIA_DEPOT_PATH")
-              (files (list "share/julia/")))))
+              (files (list "share/julia/")))
+            $SSL_CERT_FILE))
     ;; Julia only officially supports some of our platforms:
     ;; https://julialang.org/downloads/#supported_platforms
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index fb578ee7e1..10b8ac0134 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -31,7 +31,6 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
-  #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -2435,38 +2434,6 @@ ini-style description files.")
 with su and ssh respectively.")
     (license license:lgpl2.1+)))
 
-(define-public kdewebkit
-  (package
-    (name "kdewebkit")
-    (version "5.98.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://kde/stable/frameworks/"
-                    (version-major+minor version) "/portingAids/"
-                    name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "03bwwgzh1xfj4w7q2cvr7712yrjgf9qhqkqgzypcdb49gpvaq164"))))
-    (build-system cmake-build-system)
-    (native-inputs
-     (list extra-cmake-modules qttools-5))
-    (inputs
-     (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
-engine WebKit via QtWebKit.")
-    (license license:lgpl2.1+)))
-
 (define-public kemoticons
   (package
     (name "kemoticons")
@@ -2703,51 +2670,56 @@ consumption.")
                   qtscript
                   qtx11extras
                   sonnet
-                  `(,util-linux "lib") ; libmount
+                  `(,util-linux "lib")  ; libmount
                   zlib))
     (arguments
-     (list #:phases
-       #~(modify-phases %standard-phases
-         (add-after 'unpack 'patch
-           (lambda _
-             ;; Better error message (taken from NixOS)
-             (substitute* "src/kiod/kiod_main.cpp"
-               (("(^\\s*qCWarning(KIOD_CATEGORY) << \"Error loading plugin:\")( << loader.errorString();)" _ a b)
-                (string-append a "<< name" b)))))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (setenv "HOME" (getcwd))
-               (setenv "XDG_RUNTIME_DIR" (getcwd))
-               (setenv "QT_QPA_PLATFORM" "offscreen")
-               (setenv "DBUS_FATAL_WARNINGS" "0")
-               (invoke "dbus-launch" "ctest"
-                       "-E" ; FIXME: 17/69 tests fail.
-                       (string-append "(kiocore-jobtest"
-                                      "|kiocore-kmountpointtest"
-                                      "|kiocore-kfileitemtest"
-                                      "|kiocore-ktcpsockettest"
-                                      "|kiocore-mimetypefinderjobtest"
-                                      "|kiocore-krecentdocumenttest"
-                                      "|kiocore-http_jobtest"
-                                      "|kiogui-openurljobtest"
-                                      "|applicationlauncherjob_forkingtest"
-                                      "|applicationlauncherjob_scopetest"
-                                      "|applicationlauncherjob_servicetest"
-                                      "|commandlauncherjob_forkingtest"
-                                      "|commandlauncherjob_scopetest"
-                                      "|commandlauncherjob_servicetest"
-                                      "|kiowidgets-kdirmodeltest"
-                                      "|kiowidgets-kurifiltertest-colon-separator"
-                                      "|kiowidgets-kurifiltertest-space-separator)")))))
-         (add-after 'install 'add-symlinks
-           ;; Some package(s) (e.g. bluedevil) refer to these service types by
-           ;; the wrong name.  I would prefer to patch those packages, but I
-           ;; cannot find the files!
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((kst5 (string-append #$output "/share/kservicetypes5/")))
-               (symlink (string-append kst5 "kfileitemactionplugin.desktop")
-                        (string-append kst5 "kfileitemaction-plugin.desktop"))))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              ;; Better error message (taken from NixOS)
+              (substitute* "src/kiod/kiod_main.cpp"
+                (("(^\\s*qCWarning(KIOD_CATEGORY) << \
+\"Error loading plugin:\")( << loader.errorString();)" _ a b)
+                 (string-append a "<< name" b)))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (setenv "HOME" (getcwd))
+                (setenv "XDG_RUNTIME_DIR" (getcwd))
+                (setenv "QT_QPA_PLATFORM" "offscreen")
+                (setenv "DBUS_FATAL_WARNINGS" "0")
+                (invoke "dbus-launch" "ctest"
+                        "-E"
+                        ;; The following tests fail or are flaky (see:
+                        ;; https://bugs.kde.org/show_bug.cgi?id=440721).
+                        (string-append "(kiocore-jobtest"
+                                       "|kiocore-kmountpointtest"
+                                       "|kiowidgets-kdirlistertest"
+                                       "|kiocore-kfileitemtest"
+                                       "|kiocore-ktcpsockettest"
+                                       "|kiocore-mimetypefinderjobtest"
+                                       "|kiocore-krecentdocumenttest"
+                                       "|kiocore-http_jobtest"
+                                       "|kiogui-openurljobtest"
+                                       "|applicationlauncherjob_forkingtest"
+                                       "|applicationlauncherjob_scopetest"
+                                       "|applicationlauncherjob_servicetest"
+                                       "|commandlauncherjob_forkingtest"
+                                       "|commandlauncherjob_scopetest"
+                                       "|commandlauncherjob_servicetest"
+                                       "|kiowidgets-kdirmodeltest"
+                                       "|kiowidgets-kurifiltertest-colon-separator"
+                                       "|kiowidgets-kurifiltertest-space-separator)")))))
+          (add-after 'install 'add-symlinks
+            ;; Some package(s) (e.g. bluedevil) refer to these service types by
+            ;; the wrong name.  I would prefer to patch those packages, but I
+            ;; cannot find the files!
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((kst5 (string-append #$output "/share/kservicetypes5/")))
+                (symlink (string-append kst5 "kfileitemactionplugin.desktop")
+                         (string-append kst5 "kfileitemaction-plugin.desktop"))))))))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Network transparent access to files and data")
     (description "This framework implements a lot of file management functions.
diff --git a/gnu/packages/kde-games.scm b/gnu/packages/kde-games.scm
index b0df2cf3d2..9be889f6aa 100644
--- a/gnu/packages/kde-games.scm
+++ b/gnu/packages/kde-games.scm
@@ -322,7 +322,7 @@ This package is part of the KDE games module.")
            ki18n
            libkmahjongg
            python
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-twisted
            python-qtpy
            python-zope-interface
diff --git a/gnu/packages/kde-internet.scm b/gnu/packages/kde-internet.scm
index cf074452e7..43af023831 100644
--- a/gnu/packages/kde-internet.scm
+++ b/gnu/packages/kde-internet.scm
@@ -169,7 +169,7 @@ Other notable features include:
              (when tests? ;; FIXME: two tests fails.
                (invoke "ctest" "-E" "(schedulertest|filedeletertest)"))
              #t)))))
-    (home-page "http://www.kde.org/")
+    (home-page "https://www.kde.org/")
     (synopsis "Versatile and user-friendly download manager")
     (description "KGet is an advanced download manager with support for
 Metalink and Bittorrent.  Downloads are added to the list, where they can be
diff --git a/gnu/packages/kde-plasma.scm b/gnu/packages/kde-plasma.scm
index b9e2db882f..3a2865a50d 100644
--- a/gnu/packages/kde-plasma.scm
+++ b/gnu/packages/kde-plasma.scm
@@ -30,7 +30,6 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix gexp)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system copy)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system qt)
   #:use-module (gnu packages)
diff --git a/gnu/packages/kde-systemtools.scm b/gnu/packages/kde-systemtools.scm
index 455798ab8c..498dcbf0ed 100644
--- a/gnu/packages/kde-systemtools.scm
+++ b/gnu/packages/kde-systemtools.scm
@@ -119,7 +119,7 @@ The main features of Dolphin are:
            kxmlgui
            breeze-icons ;; default icon set
            qtbase-5))
-    (home-page "http://www.kde.org/")
+    (home-page "https://www.kde.org/")
     (synopsis "VCS-Plugins for Dolphin")
     (description "This package contains plugins that offer integration in
 Dolphin with the version control systems: Bzr, Git, Mercurial, Subversion.")
@@ -227,7 +227,7 @@ document meta data file.")
            qtscript))
     (arguments
      `(#:tests? #f)) ;; TODO: 2/15 tests fail even with HOME, offscreen, SHELL, debus
-    (home-page "http://www.kde.org/")
+    (home-page "https://www.kde.org/")
     (synopsis "Terminal emulator similar for KDE")
     (description "Konsole is a terminal emulator, similar to xterm, built on
 the KDE Platform.  It can contain multiple terminal sessions inside one window
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 7009919a06..728051b9e4 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -1323,6 +1323,7 @@ creating routes by drag and drop and more.")
            qca
            qtdeclarative-5
            qtsvg-5
+           qtwayland-5
            threadweaver
            kcrash
            kjs))
diff --git a/gnu/packages/key-mon.scm b/gnu/packages/key-mon.scm
deleted file mode 100644
index d70dd0cd48..0000000000
--- a/gnu/packages/key-mon.scm
+++ /dev/null
@@ -1,28 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu packages key-mon)
-  #:use-module (guix licenses)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (gnu packages)
-  #:use-module (gnu packages python)
-  #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages gtk)
-  #:use-module (gnu packages gnome)
-  #:use-module (guix build-system python))
diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index ed80d0662f..739d293a57 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -257,7 +257,7 @@ generator library for C++.")
          (base32
           "0xilghiy3mz78bjmfldi39qyy7jvw5b6wafsx370lw401y2qw0g4"))))
     (build-system gnu-build-system)
-    (home-page "http://fstrcmp.sourceforge.net/")
+    (home-page "https://fstrcmp.sourceforge.net/")
     (arguments
      '(#:configure-flags '("SH=sh")))
     (native-inputs
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index b29ed9c013..f7e3ea6cd6 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -61,7 +61,6 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
-  #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
@@ -265,7 +264,7 @@ focuses especially on Korean input (Hangul, Hanja, ...).")
 is lightweight, stable, powerful and supports many commonly used input methods,
 including Cangjie, Zhuyin, Dayi, Ranked, Shrimp, Greek, Anthy, Korean, Latin,
 Random Cage Fighting Birds, Cool Music etc.")
-    (home-page "http://hime-ime.github.io/")
+    (home-page "https://hime-ime.github.io/")
     (license (list license:gpl2+ license:lgpl2.1+
                    license:fdl1.2+)))) ; documentation
 
@@ -326,7 +325,7 @@ Random Cage Fighting Birds, Cool Music etc.")
     (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.")
-    (home-page "http://chewing.im/")
+    (home-page "https://chewing.im/")
     (license license:lgpl2.1+)))
 
 (define-public liblouis
diff --git a/gnu/packages/lego.scm b/gnu/packages/lego.scm
index 39823dfee8..966716f5ad 100644
--- a/gnu/packages/lego.scm
+++ b/gnu/packages/lego.scm
@@ -89,7 +89,7 @@
                                  (assoc-ref inputs patch)))
                        (list "add-usb-tcp-support.patch"
                              "debian-writable-swap-inst-len.patch")))))))
-    (home-page "http://bricxcc.sourceforge.net/nqc/")
+    (home-page "https://bricxcc.sourceforge.net/nqc/")
     (synopsis "C-like language for Lego's MINDSTORMS")
     (description
      "Not Quite C (NQC) is a simple language for programming several Lego
diff --git a/gnu/packages/lesstif.scm b/gnu/packages/lesstif.scm
index 8f017f41be..bcda6b9867 100644
--- a/gnu/packages/lesstif.scm
+++ b/gnu/packages/lesstif.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2022 Andy Tai <atai@atai.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,12 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix git-download)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages c)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xorg))
 
 
@@ -42,7 +49,40 @@
      (list printproto))
     (inputs
       (list libxext libxt))
-    (home-page "http://lesstif.sourceforge.net/")
+    (home-page "https://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.")
     (license license:gpl2+))) ; some files are lgpl2.1+ or x11
+
+(define-public motif
+  ;; This commit is from September 2021 and v2.3.8 from 2017.
+  (let ((commit "59858b0811e8d9dfaeb142f2b5a96f55482be1ed")
+        (revision "0"))
+    (package
+      (name "motif")
+      (version (git-version "2.3.8" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.code.sf.net/p/motif/code")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0yycq0vzga9qmgbfzn2d02ilpwxixwdv2j1d8sddl4dripcrg21m"))))
+      (build-system gnu-build-system)
+      (inputs
+       (list libx11 xorgproto))
+      (propagated-inputs
+       (list fontconfig freetype libxext libxft libxpm libxt xbitmaps))
+      (native-inputs
+       (list autoconf automake byacc flex libtool pkg-config))
+      (home-page "https://motif.ics.com/motif")
+      (synopsis "Motif toolkit for the X window system")
+      (description "Motif is a standard graphical user interface, (as defined
+by the IEEE 1295 specification), used on more than 200 hardware and software
+platforms.  It provides application developers, end users, and system vendors
+with a widely used environment for standardizing application presentation on a
+wide range of platforms.")
+      (license license:lgpl2.1+))))
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index 337aa6840a..86e77b0f22 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -94,7 +94,7 @@
                  (assoc-ref inputs "sound-theme-freedesktop")
                  "/share")))
              #t)))))
-    (home-page "http://0pointer.de/lennart/projects/libcanberra/")
+    (home-page "https://0pointer.de/lennart/projects/libcanberra/")
     (synopsis
      "Implementation of the XDG Sound Theme and Name Specifications")
     (description
diff --git a/gnu/packages/libdaemon.scm b/gnu/packages/libdaemon.scm
index 12e4e2dc9c..c42dfb6380 100644
--- a/gnu/packages/libdaemon.scm
+++ b/gnu/packages/libdaemon.scm
@@ -80,7 +80,7 @@
                      (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/")
+    (home-page "https://0pointer.de/lennart/projects/libdaemon/")
 
     (synopsis "Lightweight C library that eases the writing of UNIX daemons")
     (description
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 23ed821e82..ba3fc6bc79 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -74,7 +74,7 @@ to call code written in another language.  The libffi library really only
 provides the lowest, machine dependent layer of a fully featured foreign
 function interface.  A layer must exist above libffi that handles type
 conversions for values passed between the two languages.")
-    (home-page "http://www.sourceware.org/libffi/")
+    (home-page "https://www.sourceware.org/libffi/")
     (properties `((release-monitoring-url . ,home-page)))
 
     ;; See <https://github.com/atgreen/libffi/blob/master/LICENSE>.
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index cb1b199e93..a80fa4292e 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018-2021, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -34,7 +34,6 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system trivial)
   #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -255,7 +254,7 @@ spreadsheets and presentations.")
      (list librevenge)) ; in Requires field of .pkg
     (inputs
      (list zlib))
-    (home-page "http://libwpd.sourceforge.net/")
+    (home-page "https://libwpd.sourceforge.net/")
     (synopsis "Library for importing WordPerfect documents")
     (description "Libwpd is a C++ library designed to help process
 WordPerfect documents.  It is most commonly used to import such documents
@@ -346,7 +345,7 @@ way--presentation and vector drawing interfaces.")
      (list libwpd)) ; in Requires field of .pkg
     (inputs
      (list perl zlib))
-    (home-page "http://libwpg.sourceforge.net/")
+    (home-page "https://libwpg.sourceforge.net/")
     (synopsis "Library and tools for the WordPerfect Graphics format")
     (description "The libwpg project provides a library and tools for
 working with graphics in the WPG (WordPerfect Graphics) format.")
@@ -762,7 +761,7 @@ from the old StarOffice (.sdc, .sdw, ...).")
      (list librevenge))
     (inputs
      (list boost zlib))
-    (home-page "http://libwps.sourceforge.net/")
+    (home-page "https://libwps.sourceforge.net/")
     (synopsis "Import library for Microsoft Works text documents")
     (description "Libwps is a library for importing files in the Microsoft
 Works word processor file format.")
@@ -916,7 +915,7 @@ commonly called @code{ftoa} or @code{dtoa}.")
 (define-public libreoffice
   (package
     (name "libreoffice")
-    (version "7.4.3.2")
+    (version "7.5.0.3")
     (source
      (origin
        (method url-fetch)
@@ -925,7 +924,7 @@ commonly called @code{ftoa} or @code{dtoa}.")
          "https://download.documentfoundation.org/libreoffice/src/"
          (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
        (sha256
-        (base32 "0fyvd4ydh72lmn005h190xa563d4h376pi1fx9lfr5i25qcbpg7z"))))
+        (base32 "0fq0fxwhbhikqzfl2z5xg2swlnrkg1p8l0shh6qdx9w0msihy4pm"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      (list
@@ -936,6 +935,18 @@ commonly called @code{ftoa} or @code{dtoa}.")
             (lambda _
               (mkdir-p "external/tarballs")
               (copy-file #$dtoa "external/tarballs/dtoa-20180411.tgz")))
+          (add-after 'unpack 'augment-LD_LIBRARY_PATH
+            ;; Without this, the nsscrypto_initialize procedure in
+            ;; nssinitializer.cxx silently fails to load libnssckbi.so, which
+            ;; causes password encryption to also silently fail (see:
+            ;; https://bugs.documentfoundation.org/show_bug.cgi?id=153714).
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "desktop/scripts/soffice.sh"
+                (("^exec .*oosplash.*" anchor)
+                 (string-append "export LD_LIBRARY_PATH="
+                                (search-input-directory inputs "lib/nss")
+                                "${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\n"
+                                anchor)))))
           (add-before 'configure 'prepare-src
             (lambda* (#:key inputs #:allow-other-keys)
               (substitute*
@@ -1025,6 +1036,10 @@ commonly called @code{ftoa} or @code{dtoa}.")
       #~(list
          "--enable-release-build"
          "--with-vendor=GNU Guix"
+         ;; Without the SAL logging system enabled, LibreOffice is utterly
+         ;; silent.  Setting the environment variable 'SAL_INFO=+INFO' can be
+         ;; useful to debug problems.
+         "--enable-sal-log"
          ;; Avoid using all cpu cores by default
          (format #f "--with-parallelism=~d" (parallel-job-count))
          "--disable-fetch-external"     ; disable downloads
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 4e8eb67d0e..612af8b30e 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2020 Christopher Howard <christopher@librehacker.com>
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2022 Jacob Hrbek <kreyren@rixotstudio.cz>
+;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,6 +41,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
@@ -51,6 +53,7 @@
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages tls)
@@ -310,18 +313,28 @@ wrapper for accessing libusb-1.0.")
 (define-public python-capablerobot-usbhub
   (package
     (name "python-capablerobot-usbhub")
-    (version "0.2.7")
+    (version "0.5.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "capablerobot_usbhub" version))
+       ;; PyPI tarball fails to build.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/CapableRobot/CapableRobot_USBHub_Driver")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1priic4iq2vn1rc711kzxwhxrwa508rkxrr193qdz2lw26kdhvix"))))
-    (build-system python-build-system)
+        (base32 "1nfd12612z9a9hby5dxg7lfqw5jcv3wcyqqagbg5izragni646mc"))))
+    (build-system pyproject-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f ; No tests provided.
+       #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'use-poetry-core
+           (lambda _
+             ;; Patch to use the core poetry API.
+             (substitute* "pyproject.toml"
+               (("poetry.masonry.api")
+                "poetry.core.masonry.api"))))
          (add-after 'install 'install-udev-rules
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -329,10 +342,11 @@ wrapper for accessing libusb-1.0.")
                (copy-file "50-capablerobot-usbhub.rules"
                           (string-append out
                                          "/lib/udev/rules.d/"
-                                         "50-capablerobot-usbhub.rules"))
-               #t))))))
+                                         "50-capablerobot-usbhub.rules"))))))))
+    (native-inputs
+     (list python-poetry-core))
     (propagated-inputs
-     (list python-click python-construct python-pyusb python-pyyaml))
+     (list python-click-7 python-construct python-pyusb python-pyyaml-5))
     (home-page
      "https://github.com/CapableRobot/CapableRobot_USBHub_Driver")
     (synopsis
@@ -564,7 +578,7 @@ over USB.")
      (list #:configure-flags
            #~(list "--disable-static"
                    (string-append "--with-udev=" #$output "/lib/udev"))))
-    (home-page "http://libmtp.sourceforge.net/")
+    (home-page "https://libmtp.sourceforge.net/")
     (synopsis "Library implementing the Media Transfer Protocol")
     (description "Libmtp implements an MTP (Media Transfer Protocol)
 initiator, which means that it initiates MTP sessions with devices.  The
@@ -601,7 +615,7 @@ proposed for standardization.")
      (list gtk+ flac libvorbis libid3tag libmtp))
     (native-inputs
      (list pkg-config))
-    (home-page "http://gmtp.sourceforge.net/")
+    (home-page "https://gmtp.sourceforge.net/")
     (synopsis "Simple graphical MTP client")
     (description "gMTP is a simple graphical client for the Media Transfer Protocol
   (MTP), which allows media files to be transferred to and from many portable
diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 130097ef40..84bc16805c 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -59,9 +59,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system qt)
-  #:use-module (guix build-system glib-or-gtk)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system qt))
 
 (define-public bcunit
   (let ((commit "74021cc7cb20a4e177748dd2948173e1f9c270ae")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index a1fa8bcaab..9da2e62c07 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2021, 2021-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2021, 2021-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
@@ -481,17 +481,17 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The current "stable" kernels. That is, the most recently released major
 ;; versions that are still supported upstream.
 
-(define-public linux-libre-6.1-version "6.1.8")
+(define-public linux-libre-6.1-version "6.1.14")
 (define-public linux-libre-6.1-gnu-revision "gnu")
 (define deblob-scripts-6.1
   (linux-libre-deblob-scripts
    linux-libre-6.1-version
    linux-libre-6.1-gnu-revision
    (base32 "0p1cg5khpp8xkfaqy0cnp1m273z3xiz0m97rkrkggz9gr2klrjym")
-   (base32 "0va28vs359r0rfmzh8pw58055kgd8sb62gi78vrg9p8wmj4s87v6")))
+   (base32 "1g9xqc8ajs0g2yq9xizlgr7k47x75rk3y99yicky01fm13rvfvv3")))
 (define-public linux-libre-6.1-pristine-source
   (let ((version linux-libre-6.1-version)
-        (hash (base32 "0vc1ggjy4wvna7g6xgbjzhk93whssj9ixcal0hkhldxsp0xba2xn")))
+        (hash (base32 "03c1pszgm0qwwz7l5fnmbr6ank632bsl81pdx48svizy3q0pcw52")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-6.1)))
@@ -499,52 +499,52 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The "longterm" kernels — the older releases with long-term upstream support.
 ;; Here are the support timelines:
 ;; <https://www.kernel.org/category/releases.html>
-(define-public linux-libre-5.15-version "5.15.90")
+(define-public linux-libre-5.15-version "5.15.96")
 (define-public linux-libre-5.15-gnu-revision "gnu")
 (define deblob-scripts-5.15
   (linux-libre-deblob-scripts
    linux-libre-5.15-version
    linux-libre-5.15-gnu-revision
    (base32 "0vj60bra81fmbx3lz924czbhxs4dmvd4d584g9mcs80b7c4q52kg")
-   (base32 "1m73pgx8v047xb2gck2g7j7khniis8c9akn9vhzgsdfglrf8p6fj")))
+   (base32 "1lwmax7078w5p6li1gf66m494xijy4bwa7nm5dlx0k09cfif9q2f")))
 (define-public linux-libre-5.15-pristine-source
   (let ((version linux-libre-5.15-version)
-        (hash (base32 "0hiv74mxkp3v04lphnyw16akgavaz527bzhnfnpm6rv848047zg6")))
+        (hash (base32 "167g34xjbqxr5klqp127j2j15pms4jmgs0y7gr8zipiz2i69g39l")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.15)))
 
-(define-public linux-libre-5.10-version "5.10.165")
+(define-public linux-libre-5.10-version "5.10.170")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
    linux-libre-5.10-version
    linux-libre-5.10-gnu-revision
    (base32 "0mw7qn77y9c6wrnw4rjvf75cpm1w6n1aqqhf8cnghcb97p2yxxrf")
-   (base32 "0a96g4pjdgwvxn2wpz6rfc8nwdlkw138r9pp66kvfrrn08i313ii")))
+   (base32 "0fk954nniva8a7s423fnfn2wz9j9jdhscc4pqyvwn0wlxxbjgyap")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "03dg8yx0gdzm8zbwd1f9jn4c5jhr8qilhjzxgwm0mv8riz2fy7cp")))
+        (hash (base32 "0pw2jnsnq2yxxvl4dkx6f7a8gczj8l484qpd4ibw737vprv1idd2")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.230")
+(define-public linux-libre-5.4-version "5.4.233")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
    linux-libre-5.4-version
    linux-libre-5.4-gnu-revision
    (base32 "1nlgk8ajb5wl3aa96h9a0pb9j5a5wmrbpk63varn557x1d00r7wj")
-   (base32 "1bgblfkcnrabnr9hpdl07qgps57h6bq4v5pjrxs798vq43db66va")))
+   (base32 "19yydaws3vfiz9qilg665q3lysf1hy9pzx0414dis01ikyd27qr2")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "0bz6hfhsahymys2g9s4nzf862z0zfq4346577cpvf98hrhnd6kx7")))
+        (hash (base32 "09vnp4qcv7kwahbbvjznnv7pxq1cvbn11n0rn5rzx97jnia5f7js")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.271")
+(define-public linux-libre-4.19-version "4.19.274")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
@@ -554,12 +554,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0g1yhzxm3ixfll6n630v7lddcyvf888sg114nimh0lkvzd180s99")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "06lxh9skp9213n29ynx7a9cinz7wggaxjsz52kghdbwfnjf3yvb3")))
+        (hash (base32 "1a2w6knszfqg7ilnvxrs0kbgcviq90iqw9wp2d6y3qy9jfhnb8k4")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.304")
+(define-public linux-libre-4.14-version "4.14.307")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
@@ -569,7 +569,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "1ma9qpsx0nvi0szlivf8v5l3pjykqwrv4x6y5g0nn6bcwhsb5jv4")))
+        (hash (base32 "00dp0vj9572ig4zsnmhl2a2v5vx40hnjibyifw24x1q6qdaia72f")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
@@ -1354,7 +1354,7 @@ and should be used with caution, especially on untested models.")
 (define-public corefreq
   (package
     (name "corefreq")
-    (version "1.90.1")
+    (version "1.95.2")
     (source
      (origin
        (method git-fetch)
@@ -1363,7 +1363,7 @@ and should be used with caution, especially on untested models.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1fpmrqjwxvjbs23r73agjs322fbi4v1013cncbfyk6lcjghxab76"))))
+        (base32 "108fr056zmbipiv1nsrjccn3ky0jbcwan43big34nyq1c9dqjq1x"))))
     (build-system linux-module-build-system)
     (outputs (list "out" "linux-module"))
     (arguments
@@ -1676,7 +1676,7 @@ application by hooking GStreamer into the loopback device.")
 (define-public xpadneo
   (package
     (name "xpadneo")
-    (version "0.9.1")
+    (version "0.9.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1685,7 +1685,7 @@ application by hooking GStreamer into the loopback device.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0xr0zx134s56h4ij6c3fh8ki0h58h61minbfxcl3sgpgxkh14ism"))))
+                "1pq7p9sxlw1v9rnny9070b39rpwfq6rip0z92mwlw4qzinmqqgdd"))))
     (build-system linux-module-build-system)
     (arguments
      (list #:tests? #f                  ; no `check' target
@@ -2284,14 +2284,14 @@ slabtop, tload, top, vmstat, w, watch and sysctl.")
 (define-public usbutils
   (package
     (name "usbutils")
-    (version "014")
+    (version "015")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://kernel.org/linux/utils/usb/usbutils/"
                           "usbutils-" version ".tar.xz"))
       (sha256
-       (base32 "0sgwfvr1b5w3ai1c0rmvzhk67y9vh7bq490rcxxj4q05svx9q1rs"))))
+       (base32 "0vnsdzx997v8ksi5dbsi2vc8b3mcm5b6jnmcdhszdyag3yxm3d63"))))
     (build-system gnu-build-system)
     (outputs (list "out" "python"))
     (arguments
@@ -2424,7 +2424,7 @@ module.")
                    (for-each (lambda (file)
                                (chmod file #o666))
                              archives))))))))
-    (home-page "http://e2fsprogs.sourceforge.net/")
+    (home-page "https://e2fsprogs.sourceforge.net/")
     (synopsis "Creating and checking ext2/ext3/ext4 file systems")
     (description
      "This package provides tools for manipulating ext2/ext3/ext4 file systems.")
@@ -2489,7 +2489,7 @@ from the e2fsprogs package.  It is meant to be used in initrds.")
        (patches (search-patches "extundelete-e2fsprogs-1.44.patch"))))
     (build-system gnu-build-system)
     (inputs (list e2fsprogs))
-    (home-page "http://extundelete.sourceforge.net/")
+    (home-page "https://extundelete.sourceforge.net/")
     (synopsis "Recover deleted files from ext2/3/4 partitions")
     (description
      "Extundelete is a set of tools that can recover deleted files from an
@@ -2833,7 +2833,7 @@ external rate conversion.")
     (native-inputs
      (list pkg-config flex bison))
     (inputs
-     (list libmnl libnftnl/fixed))
+     (list libmnl libnftnl/pinned))
     (arguments
      (list #:tests? #f             ; no test suite
            #:configure-flags       ; add $libdir to the RUNPATH of executables
@@ -2968,7 +2968,7 @@ early boot when entropy may be low, especially in virtualised environments.")
                "0jp458m2b3wckr18qkln69i01152qlwz33zm49103lq8fgx0n6d4"))))
     (build-system gnu-build-system)
     (synopsis "Lists information about SCSI or NVMe devices in Linux")
-    (home-page "http://sg.danny.cz/scsi/lsscsi.html")
+    (home-page "https://sg.danny.cz/scsi/lsscsi.html")
     (description
      "@command{lsscsi} lists SCSI logical units or SCSI targets.  It can
 also list NVMe namespaces or controllers and show the relationship between a
@@ -3083,7 +3083,7 @@ inadequately in modern network environments, and both should be deprecated.")
                (sha256
                 (base32
                  "0hz9fda9d78spp774b6rr5xaxav7cm4h0qcpxf70rvdbrf6qx7vy"))))
-      (home-page "http://net-tools.sourceforge.net/")
+      (home-page "https://net-tools.sourceforge.net/")
       (build-system gnu-build-system)
       (arguments
        `(#:modules ((guix build gnu-build-system)
@@ -3878,7 +3878,7 @@ NUMA performance on your system.")
             ;; run (for example) ‘loadkeys en-latin9’ instead of having to find
             ;; and type ‘i386/colemak/en-latin9’ on a mislabelled keyboard.
             (files (list "share/keymaps/**")))))
-    (home-page "http://kbd-project.org/")
+    (home-page "https://kbd-project.org/")
     (synopsis "Linux keyboard utilities and keyboard maps")
     (description
      "This package contains keytable files and keyboard utilities compatible
@@ -5022,10 +5022,39 @@ IDE driver subsystem.  Many external USB drive enclosures with SCSI-ATA Command
 Translation (@dfn{SAT}) are also supported.")
     (license (license:non-copyleft "file://LICENSE.TXT"))))
 
+(define-public libnvme
+  (package
+    (name "libnvme")
+    (version "1.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/linux-nvme/libnvme.git")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32 "1fngj5acp2sl4162xalq5simfasnika6gy0xrbi41x09wikvhn7y"))
+              (file-name (git-file-name name version))))
+    (build-system meson-build-system)
+    (arguments
+     (list
+      #:configure-flags #~(list (format #f "-Dhtmldir=~a/share/doc/~a/html"
+                                        #$output #$name)
+                                "-Ddocs-build=true" "-Ddocs=all")))
+    (native-inputs (list pkg-config perl python python-sphinx))
+    ;; libnvme.pc, libnvme-mi.pc lists these in Requires.private.
+    (propagated-inputs (list dbus json-c openssl))
+    (home-page "https://github.com/linux-nvme/libnvme")
+    (synopsis "C Library for NVM Express on Linux")
+    (description "libnvme provides type definitions for NVMe specification
+structures, enumerations, and bit fields, helper functions to construct,
+dispatch, and decode commands and payloads, and utilities to connect, scan,
+and manage nvme devices on a Linux system.")
+    (license license:lgpl2.1+)))
+
 (define-public nvme-cli
   (package
     (name "nvme-cli")
-    (version "1.16")
+    (version "2.3")
     (home-page "https://github.com/linux-nvme/nvme-cli")
     (source (origin
               (method git-fetch)
@@ -5033,22 +5062,16 @@ Translation (@dfn{SAT}) are also supported.")
                     (url home-page)
                     (commit (string-append "v" version))))
               (sha256
-               (base32 "130x5cf6kkcnyg5qd35igii249ysfjnbxp1pxfwkickmqg3d007z"))
+               (base32 "1f3bhxh2kr94s6glzibrmgxxgs66qyabn8plnw5y0v9cpi78b3qs"))
               (file-name (git-file-name name version))))
-    (build-system gnu-build-system)
+    (build-system meson-build-system)
     (arguments
-     (list #:make-flags
-           #~(list (string-append "CC=" #$(cc-for-target)))
-           #:phases
-           #~(modify-phases %standard-phases
-               (delete 'configure)      ; no ./configure script
-               (replace 'install
-                 (lambda _
-                   (invoke "make" "install-spec" "PREFIX="
-                           (string-append "DESTDIR=" #$output)))))
-           ;; The tests require sysfs, which is not accessible from from the
-           ;; build environment.
-           #:tests? #f))
+     (list
+      #:configure-flags #~(list (format #f "-Dhtmldir=~a/share/doc/~a/html"
+                                        #$output #$name)
+                                "-Ddocs=all")))
+    (native-inputs (list pkg-config))
+    (inputs (list libnvme json-c zlib))
     (synopsis "NVM-Express user space tooling for Linux")
     (description "Nvme-cli is a utility to provide standards compliant tooling
 for NVM-Express drives.  It was made specifically for Linux as it relies on the
@@ -5140,7 +5163,7 @@ specified in /etc/acpi/events and execute the rules that match the event.")
        (sha256
         (base32 "12i0ip11xbfcjzxz4r10cvz7mbzgq1hfcdn97w6zz7sm3wndwrg8"))))
     (build-system gnu-build-system)
-    (home-page "http://linux-diag.sourceforge.net/Sysfsutils.html")
+    (home-page "https://linux-diag.sourceforge.net/Sysfsutils.html")
     (synopsis "System utilities based on Linux sysfs")
     (description
      "These are a set of utilities built upon sysfs, a virtual file system in
@@ -7620,9 +7643,13 @@ libnftnl has been previously known as libnftables.  This library is currently
 used by nftables.")
     (license license:gpl2+)))
 
+;;; The symbol libnftl/fixed should be used when libnftnl needs fixes
+;;; (security or else) and this deprecation could be removed.
+(define-deprecated/public-alias libnftnl/fixed libnftnl/pinned)
+
 ;; This is used in iptables, which contributes to rust.  We're pinning this
 ;; variant to avoid accidental rebuilds of rust.
-(define-public libnftnl/fixed
+(define-public libnftnl/pinned
   (package (inherit libnftnl)
     (version "1.2.3")
     (source
@@ -8172,7 +8199,7 @@ available in the kernel Linux.")
                       (assoc-ref outputs "out"))))))))
     (inputs (list perl))
     (supported-systems '("i686-linux" "x86_64-linux"))
-    (home-page "http://www.etallen.com/cpuid.html")
+    (home-page "https://www.etallen.com/cpuid.html")
     (synopsis "Dump x86 CPUID processor information")
     (description "cpuid dumps detailed information about the CPU(s) gathered
 from the CPUID instruction, and also determines the exact model of CPU(s).  It
@@ -8539,25 +8566,23 @@ privileges.")
                 "062hg4r6gz7pla9df70nqs5i2a3mp1wszmp4l0g771fykhhrxsjg"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags
-       `(,(string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
-       #:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)
-                  (add-after 'unpack 'patch-Makefiles
-                    (lambda _
-                      (substitute* "Makefile"
-                        (("/lib64") "/lib")
-                        (("/usr") ""))
-                      (substitute* "compat/Makefile"
-                        (("/lib64") "/lib")
-                        (("/usr") ""))
-                      #t))
-                  (replace 'install
-                    (lambda _
-                      (setenv "DESTDIR" %output)
-                      (invoke "make" "install")
-                      #t)))))
+     (list #:make-flags
+           #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
+           #:tests? #f
+           #:phases #~(modify-phases %standard-phases
+                        (delete 'configure)
+                        (add-after 'unpack 'patch-Makefiles
+                          (lambda _
+                            (substitute* "Makefile"
+                              (("/lib64") "/lib")
+                              (("/usr") ""))
+                            (substitute* "compat/Makefile"
+                              (("/lib64") "/lib")
+                              (("/usr") ""))))
+                        (replace 'install
+                          (lambda _
+                            (setenv "DESTDIR" #$output)
+                            (invoke "make" "install"))))))
     (inputs
      (list rdma-core numactl))
     (synopsis "Intel Performance Scaled Messaging 2 (PSM2) library")
@@ -8616,7 +8641,7 @@ the OS-specific data structures needed by the kernel to setup the event.
 
 libpfm4 provides support for the @code{perf_events} interface, which was
 introduced in Linux 2.6.31.")
-    (home-page "http://perfmon2.sourceforge.net/")
+    (home-page "https://perfmon2.sourceforge.net/")
     (license license:expat)))
 
 (define-public libnfnetlink
@@ -9113,7 +9138,7 @@ tools for managing PipeWire.")
 (define-public ell
   (package
     (name "ell")
-    (version "0.54")
+    (version "0.56")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -9122,7 +9147,7 @@ tools for managing PipeWire.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1vsv5ibiyli1cvk32l5avms6ngv6i0jxxqd5vw5kbfcp6ph94brs"))))
+                "084mc9377k2a61wyqnfnsgfrdvv1rinn9wzw8l8crip0hlikn938"))))
     (build-system gnu-build-system)
     (arguments
      ;; Tests launch dbus-daemon instances that all try to bind to
@@ -9494,7 +9519,7 @@ provides user-space tools for creating EROFS file systems.")
 (define-public rasdaemon
   (package
     (name "rasdaemon")
-    (version "0.6.8")
+    (version "0.7.0")
     (source
      (origin
        (method git-fetch)
@@ -9503,7 +9528,7 @@ provides user-space tools for creating EROFS file systems.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0r0339mg4rc12p63iiq2kwdqn1zjakyiv014i2a2l9s8v5rjik41"))))
+        (base32 "1a3ycx1g2zyshlna9fg8c9329m8wia42vkmlh2awfab0ngwi3g50"))))
     (native-inputs (list autoconf automake libtool))
     (inputs (list perl perl-dbd-sqlite sqlite dmidecode kmod))
     (arguments
@@ -9804,7 +9829,7 @@ directly by @code{make localmodconfig} as described above.")
 (define-public kconfig-hardened-check
   (package
     (name "kconfig-hardened-check")
-    (version "0.5.17")
+    (version "0.6.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -9813,7 +9838,7 @@ directly by @code{make localmodconfig} as described above.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0p9pywfxwyk4yfgaf7bhqrf72ywc6w6k77dbi7lldynha886ih4a"))))
+                "0bpdy2a7l75y5cqzzc92nh4gapzgza8ml5i8ximr6brf6pr3681z"))))
     (build-system python-build-system)
     (home-page "https://github.com/a13xp0p0v/kconfig-hardened-check")
     (synopsis
diff --git a/gnu/packages/lisp-check.scm b/gnu/packages/lisp-check.scm
index 038ca1f18b..fb65a27e62 100644
--- a/gnu/packages/lisp-check.scm
+++ b/gnu/packages/lisp-check.scm
@@ -815,7 +815,7 @@ advantages of @command{prove} are:
              (delete-file-recursively "debian")
              #t))))
       (build-system asdf-build-system/sbcl)
-      (home-page "http://quickdocs.org/ptester/")
+      (home-page "https://quickdocs.org/ptester/")
       (synopsis "Portable test harness package")
       (description
        "@command{ptester} is a portable testing framework based on Franz's
@@ -1098,7 +1098,7 @@ parameterization.")
       (description
        "The XLUnit package is a toolkit for building test suites.  It is based
 on the XPTest package by Craig Brozensky and the JUnit package by Kent Beck.")
-      (home-page "http://quickdocs.org/xlunit/")
+      (home-page "https://quickdocs.org/xlunit/")
       (license license:bsd-3))))
 
 (define-public cl-xlunit
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 2ac2b8a465..dcc0778975 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -28,7 +28,7 @@
 ;;; Copyright © 2021 Cameron Chaparro <cameron@cameronchaparro.com>
 ;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
 ;;; Copyright © 2021, 2022 Foo Chuan Wei <chuanwei.foo@hotmail.com>
-;;; Copyright © 2021, 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2021, 2022, 2023 jgart <jgart@dismail.de>
 ;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2021 Jacob MacDonald <jaccarmac@gmail.com>
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
@@ -1706,7 +1706,7 @@ ANSI-compliant Common Lisp implementations.")
 (define-public sbcl-zpb-ttf
   (package
     (name "sbcl-zpb-ttf")
-    (version "1.0.4")
+    (version "1.0.6")
     (source
      (origin
        (method git-fetch)
@@ -1715,7 +1715,7 @@ ANSI-compliant Common Lisp implementations.")
              (commit (string-append "release-" version))))
        (file-name (git-file-name "cl-zpb-ttf" version))
        (sha256
-        (base32 "1ziwlfys15m95hh5c54g3xv78vjxadd6qi9zf9kvd2bv70qsixqk"))))
+        (base32 "043xga76jms7dipcwnyh8lkj3gx66cvrkwhc728hjaf7axarvcmv"))))
     (build-system asdf-build-system/sbcl)
     (home-page "https://github.com/xach/zpb-ttf")
     (synopsis "TrueType font file access for Common Lisp")
@@ -1872,8 +1872,8 @@ a sequence (or chain) of such elements.")
   (sbcl-package->cl-source-package sbcl-flexichain))
 
 (define-public sbcl-cl-pdf
-  (let ((commit "f57905e0b5adb365d611a912613cee70d78d20d8")
-        (revision "2"))
+  (let ((commit "ee904a118a0f060279ad9d253a3e8e3997609213")
+        (revision "3"))
     (package
       (name "sbcl-cl-pdf")
       (version (git-version "2.0.0" revision commit))
@@ -1885,7 +1885,7 @@ a sequence (or chain) of such elements.")
                (commit commit)))
          (file-name (git-file-name "cl-pdf" version))
          (sha256
-          (base32 "0ir9xyj10lyp8mwb3n2pbhnwv0jx0ph1xlhh32sfgalk3bz0ms58"))))
+          (base32 "0j7hbqv6yzrgx0inqinpw8h22728l53ccciw6iymzz4g92j9fzlq"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        (list sbcl-iterate sbcl-zpb-ttf))
@@ -1905,30 +1905,38 @@ files.")
   (sbcl-package->cl-source-package sbcl-cl-pdf))
 
 (define-public sbcl-clx
-  (package
-    (name "sbcl-clx")
-    (version "0.7.5")
-    (source
-     (origin
-       (method git-fetch)
-       (uri
-        (git-reference
-         (url "https://github.com/sharplispers/clx")
-         (commit version)))
-       (sha256
-        (base32
-         "1vi67z9hpj5rr4xcmfbfwzmlcc0ah7hzhrmfid6lqdkva238v2wf"))
-       (file-name (string-append "clx-" version))))
-    (build-system asdf-build-system/sbcl)
-    (native-inputs
-     (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
+  (let ((commit "38400456d66823e417d1d27d339b09885e25eb59")
+        (revision "1"))
+    (package
+      (name "sbcl-clx")
+      (version (git-version "0.7.5" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/sharplispers/clx")
+           (commit commit)))
+         (sha256
+          (base32 "1c05gjqh5lil2sgma0yap4mxd9y1cjkp933hyx1iaj14950nhfnl"))
+         (file-name (git-file-name "cl-clx" version))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-fiasco xorg-server-for-tests))
+      (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 (add-before 'check 'prepare-test-environment
+                   (lambda _
+                     (system "Xvfb :1 &")
+                     (setenv "DISPLAY" ":1"))))))
+      (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
 originally taken from a CMUCL distribution, was modified somewhat in order to
 make it compile and run under SBCL, then a selection of patches were added
 from other CLXes around the net.")
-    (license license:x11)))
+      (license license:x11))))
 
 (define-public cl-clx
   (sbcl-package->cl-source-package sbcl-clx))
@@ -2438,8 +2446,8 @@ and running graph algorithms.")
 
 (define-public sbcl-babel
   ;; No release since 2014.
-  (let ((commit "f892d0587c7f3a1e6c0899425921b48008c29ee3")
-        (revision "2"))
+  (let ((commit "627d6a60d0ffc82a3687b39ba8a99128031504d9")
+        (revision "3"))
     (package
       (name "sbcl-babel")
       (version (git-version "0.5.0" revision commit))
@@ -2451,7 +2459,7 @@ and running graph algorithms.")
                (commit commit)))
          (file-name (git-file-name "cl-babel" version))
          (sha256
-          (base32 "04frn19mngvsh8bh7fb1rfjm8mqk8bgzx5c43dg7z02nfsxkqqak"))))
+          (base32 "1sndap9ykyyvrzlqm9smgqy49r3n67l926yg0hb7pm00plj0y380"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-hu.dwim.stefil))
@@ -2793,6 +2801,40 @@ libraries such as Bordeaux-Threads and Eager Future.")
 (define-public ecl-calispel
   (sbcl-package->ecl-package sbcl-calispel))
 
+(define-public sbcl-calm
+  (package
+    (name "sbcl-calm")
+    (version "0.0.35")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/VitoVan/calm")
+             (commit version)))
+       (file-name (git-file-name "cl-calm" version))
+       (sha256
+        (base32 "1k1kwpiq7ikk1mgfi26sd968d623jl6xffngd9vwswnaiwihk4dp"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     (list sbcl-cl-cairo2
+           sbcl-cl-str
+           sbcl-sdl2
+           sbcl-sdl2-image
+           sbcl-sdl2-mixer
+           sbcl-slime-swank))
+    (home-page "https://github.com/VitoVan/calm")
+    (synopsis "Vector graphic library for Common Lisp")
+    (description
+     "This package provides a SDL2 based vector graphic library for Common
+Lisp.")
+    (license license:gpl2)))
+
+(define-public cl-calm
+  (sbcl-package->cl-source-package sbcl-calm))
+
+(define-public ecl-calm
+  (sbcl-package->ecl-package sbcl-calm))
+
 (define-public sbcl-esrap
   (let ((commit "4c82a863871e117f0041b9ef37e61c0b62318aa7")
         (revision "3"))
@@ -2883,7 +2925,7 @@ satisfying the test.")
     (synopsis "Common Lisp library for encoding text in various web-savvy encodings")
     (description
      "A library for encoding text in various web-savvy encodings.")
-    (home-page "http://quickdocs.org/html-encode/")
+    (home-page "https://quickdocs.org/html-encode/")
     (license license:expat)))
 
 (define-public cl-html-encode
@@ -3128,8 +3170,8 @@ streams, support is included for convenient stream wrappers.")
   (sbcl-package->ecl-package sbcl-ironclad))
 
 (define-public sbcl-named-readtables
-  (let ((commit "585a28eee8b1b1999279b48cb7e9731187e14b66")
-        (revision "3"))
+  (let ((commit "d5ff162ce02035ec7de1acc9721385f325e928c0")
+        (revision "4"))
     (package
       (name "sbcl-named-readtables")
       (version (git-version "0.9" revision commit))
@@ -3140,9 +3182,14 @@ streams, support is included for convenient stream wrappers.")
                (url "https://github.com/melisgl/named-readtables")
                (commit commit)))
          (sha256
-          (base32 "072p5djqq9pliw9r20rmpz5r5q5yn6rhbp98vkkp7gfcnp5ppj51"))
-         (file-name (git-file-name "named-readtables" version))))
+          (base32 "0gfgxywzbmavy0kpnxav11vz10qfzxwwrpgqaak9sgzg17g8x5yv"))
+         (file-name (git-file-name "cl-named-readtables" version))))
       (build-system asdf-build-system/sbcl)
+      ;; (native-inputs (list sbcl-try))
+      ;; Tests disabled because of a circular dependency issue:
+      ;;   try -> named-readtables -> mgl-pax -> try
+      (arguments
+       (list #:tests? #f))
       (home-page "https://github.com/melisgl/named-readtables/")
       (synopsis "Library that creates a namespace for named readtables")
       (description
@@ -3174,7 +3221,7 @@ readtables, which is akin to package namespacing in Common Lisp.")
     (build-system asdf-build-system/sbcl)
     (inputs
      (list sbcl-parse-number))
-    (home-page "http://common-lisp.net/project/py-configparser/")
+    (home-page "https://common-lisp.net/project/py-configparser/")
     (synopsis "ConfigParser Python module functionality for Common Lisp")
     (description "The py-configparser package implements the ConfigParser
 Python module functionality in Common Lisp.  In short, it implements reading
@@ -3224,16 +3271,16 @@ writing code that contains string literals that contain code themselves.")
 (define-public sbcl-slime-swank
   (package
     (name "sbcl-slime-swank")
-    (version "2.27")
+    (version "2.28")
     (source
      (origin
-       (file-name (git-file-name "slime-swank" version))
+       (file-name (git-file-name "cl-slime-swank" version))
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/slime/slime/")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "1s5mbljlz22pb90gwbd380nighkz6gdxl77hc08gri7wwr5gy5n2"))
+        (base32 "1acmm4w1mv1qzpnkgc4wyiilbx8l0dk16sx8wv815ri5ks289rll"))
        (modules '((guix build utils)))
          (snippet
           ;; The doc folder drags `gawk' into the closure.  Doc is already
@@ -3486,7 +3533,7 @@ project.")
 (define-public sbcl-anaphora
   (package
     (name "sbcl-anaphora")
-    (version "0.9.6")
+    (version "0.9.8")
     (source
      (origin
        (method git-fetch)
@@ -3494,9 +3541,8 @@ project.")
              (url "https://github.com/tokenrove/anaphora")
              (commit version)))
        (sha256
-        (base32
-         "19wfrk3asimznkli0x2rfy637hwpdgqyvwj3vhq9x7vjvyf5vv6x"))
-       (file-name (git-file-name "anaphora" version))))
+        (base32 "1ds5ab0rzkrhfl29xpvmvyxmkdyj9mi19p330pz603lx95njjc0b"))
+       (file-name (git-file-name "cl-anaphora" version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
      (list sbcl-rt))
@@ -3515,10 +3561,11 @@ new fiends in addition to old friends like @command{aif} and
   (sbcl-package->ecl-package sbcl-anaphora))
 
 (define-public sbcl-let-plus
-  (let ((commit "5f14af61d501ecead02ec6b5a5c810efc0c9fdbb"))
+  (let ((commit "455e657e077235829b197f7ccafd596fcda69e30")
+        (revision "2"))
     (package
       (name "sbcl-let-plus")
-      (version (git-version "0.0.0" "1" commit))
+      (version (git-version "0.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -3526,9 +3573,8 @@ new fiends in addition to old friends like @command{aif} and
                (url "https://github.com/sharplispers/let-plus")
                (commit commit)))
          (sha256
-          (base32
-           "0i050ca2iys9f5mb7dgqgqdxfnc3b0rnjdwv95sqd490vkiwrsaj"))
-         (file-name (git-file-name "let-plus" version))))
+          (base32 "00c0nq6l4zb692rzsc9aliqzj3avrssfyz4bhxzl7f1jsz3m29jb"))
+         (file-name (git-file-name "cl-let-plus" version))))
       (build-system asdf-build-system/sbcl)
       (inputs
        (list sbcl-alexandria sbcl-anaphora))
@@ -3555,6 +3601,57 @@ not counting tests)
 (define-public ecl-let-plus
   (sbcl-package->ecl-package sbcl-let-plus))
 
+(define-public sbcl-cl-cairo2
+  (let ((commit "41ae45aac86553c46f4bb460f80e1fb620930f5b")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-cairo2")
+      (version (git-version "0.6" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/rpav/cl-cairo2")
+               (commit commit)))
+         (file-name (git-file-name "cl-cairo2" version))
+         (sha256
+          (base32 "0cpfgyxw6pz7y033dlya8c4vjmkpw127zdq3a9xclp9q8jbdlb7q"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-systems '(;; "cl-cairo2-gtk2" ; cl-gtk2 is not packed and quite old.
+                         ;; "cl-cairo2-quartz" ; Failing when enabled.
+                         ;; "cl-cairo2-xlib" ; cl-xcb-xlib is not packed yet and quite old.
+                         ;; "cl-cairo2-xcb"
+                         "cl-cairo2")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "src/load-libraries.lisp"
+                 (("libcairo.so.2")
+                  (search-input-file inputs "/lib/libcairo.so.2"))))))))
+      (inputs
+       (list cairo
+             sbcl-cffi
+             sbcl-cl-colors
+             sbcl-cl-freetype2
+             sbcl-cl-utilities
+             sbcl-metabang-bind
+             sbcl-trivial-features
+             sbcl-trivial-garbage))
+      (home-page "https://github.com/rpav/cl-cairo2")
+      (synopsis "Cairo bindings for Common Lisp")
+      (description
+       "This package provides CFFI bindings for Common Lisp to the Cairo
+C library.")
+      (license license:boost1.0))))
+
+(define-public ecl-cl-cairo2
+  (sbcl-package->ecl-package sbcl-cl-cairo2))
+
+(define-public cl-cairo2
+  (sbcl-package->cl-source-package sbcl-cl-cairo2))
+
 (define-public sbcl-cl-colors
   (let ((commit "827410584553f5c717eec6182343b7605f707f75"))
     (package
@@ -4018,19 +4115,19 @@ is statically typed so there are differences.")
        (uri (git-reference
              (url "https://github.com/cffi/cffi")
              (commit (string-append "v" version))))
-       (file-name (git-file-name "cffi-bootstrap" version))
+       (file-name (git-file-name "cl-cffi" version))
        (sha256
         (base32 "17ryim4xilb1rzxydfr7595dnhqkk02lmrbkqrkvi9091shi4cj3"))))
     (build-system asdf-build-system/sbcl)
     (inputs
-     `(("alexandria" ,sbcl-alexandria)
-       ("babel" ,sbcl-babel)
-       ("libffi" ,libffi)
-       ("trivial-features" ,sbcl-trivial-features)))
+     (list libffi
+           sbcl-alexandria
+           sbcl-babel
+           sbcl-trivial-features))
     (native-inputs
-     `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-       ("pkg-config" ,pkg-config)
-       ("rt" ,sbcl-rt)))
+     (list pkg-config
+           sbcl-bordeaux-threads
+           sbcl-rt))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -4425,10 +4522,11 @@ avoid consing) is too computationally expensive.")
   (sbcl-package->ecl-package sbcl-ucons))
 
 (define-public sbcl-closer-mop
-  (let ((commit "19c9d33f576e10715fd79cc1d4f688dab0f241d6"))
+  (let ((commit "7b86f2add029208ebc74ec6a41c2ccfd3c382dbc")
+        (revision "3"))
     (package
       (name "sbcl-closer-mop")
-      (version (git-version  "1.0.0" "2" commit))
+      (version (git-version  "1.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -4436,8 +4534,8 @@ avoid consing) is too computationally expensive.")
                (url "https://github.com/pcostanza/closer-mop")
                (commit commit)))
          (sha256
-          (base32 "1w3x087wvlwkd6swfdgbvjfs6kazf0la8ax4pjfzikwjch4snn2c"))
-         (file-name (git-file-name "closer-mop" version ))))
+          (base32 "1fzxdpq873rpagmj3h9bgv7n95h4p03pnxrklbxp06sxb26xyi16"))
+         (file-name (git-file-name "cl-closer-mop" version ))))
       (build-system asdf-build-system/sbcl)
       (home-page "https://github.com/pcostanza/closer-mop")
       (synopsis "Rectifies absent or incorrect CLOS MOP features")
@@ -4530,7 +4628,7 @@ is a library for creating graphical user interfaces.")
 (define-public sbcl-cl-webkit
   (package
     (name "sbcl-cl-webkit")
-    (version "3.5.6")
+    (version "3.5.7")
     (source
      (origin
        (method git-fetch)
@@ -4540,7 +4638,7 @@ is a library for creating graphical user interfaces.")
        (file-name (git-file-name "cl-webkit" version))
        (sha256
         (base32
-         "13f6s7zwnx0nvllizij4vziph8pz28xkqzfyyis1dzz7cxksf6fy"))))
+         "0aqkqcs0n5wkgjx3lb513fvm7f2jw3d5daisc9mw1bmbbcqh2sba"))))
     (build-system asdf-build-system/sbcl)
     (inputs
      `(("cffi" ,sbcl-cffi)
@@ -4846,7 +4944,7 @@ Lisp (from GBBopen project).")
 (define-public sbcl-usocket
   (package
     (name "sbcl-usocket")
-    (version "0.8.4")
+    (version "0.8.5")
     (source
      (origin
        (method git-fetch)
@@ -4855,8 +4953,7 @@ Lisp (from GBBopen project).")
              (commit (string-append "v" version))))
        (file-name (git-file-name "cl-usocket" version))
        (sha256
-        (base32
-         "0l5alk6nph6kxgd84pxq8d56pz3ywnpp0kpnlg4cadaics3hycg7"))))
+        (base32 "1pn5mf4d9g3b7h0vfx0mh7rlrydfbk8q35pg4ip6prf4zyg70wba"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
      (list sbcl-rt))
@@ -5159,8 +5256,8 @@ RFC 1321 by R. Rivest, published April 1992.")
      (list ecl-flexi-streams))))
 
 (define-public sbcl-cl+ssl
-  (let ((commit "8c13317509136e6722a25be51b74b813bbb32f9e")
-        (revision "4"))
+  (let ((commit "1e2ffc9511df4b1c25c23e0313a642a610dae352")
+        (revision "5"))
     (package
       (name "sbcl-cl+ssl")
       (version (git-version "0.0.0" revision commit))
@@ -5172,7 +5269,7 @@ RFC 1321 by R. Rivest, published April 1992.")
                (commit commit)))
          (file-name (git-file-name "cl+ssl" version))
          (sha256
-          (base32 "1cdq9dzk804y8bm874q8755yk4iz2z735ksm8waxl52kpfw8ai99"))))
+          (base32 "0iwdh416ggzs2ig6i0ivrwfy21w7m39w464pc7j3p9pvq09837fy"))))
       (build-system asdf-build-system/sbcl)
       (arguments
        '(#:phases
@@ -5200,13 +5297,13 @@ RFC 1321 by R. Rivest, published April 1992.")
              sbcl-trivial-sockets))
       (inputs
        (list openssl
+             sbcl-alexandria
+             sbcl-bordeaux-threads
              sbcl-cffi
-             sbcl-trivial-gray-streams
              sbcl-flexi-streams
-             sbcl-bordeaux-threads
-             sbcl-trivial-garbage
-             sbcl-alexandria
              sbcl-trivial-features
+             sbcl-trivial-garbage
+             sbcl-trivial-gray-streams
              sbcl-usocket))
       (home-page "https://common-lisp.net/project/cl-plus-ssl/")
       (synopsis "Common Lisp bindings to OpenSSL")
@@ -5616,7 +5713,7 @@ PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.")
                (substitute* "rotate-byte.lisp"
                  (("in-package :cl-utilities)" all)
                   "in-package :cl-utilities)\n\n#+sbcl\n(require :sb-rotate-byte)")))))))
-      (home-page "http://common-lisp.net/project/cl-utilities")
+      (home-page "https://common-lisp.net/project/cl-utilities")
       (synopsis "Collection of semi-standard utilities")
       (description
        "On Cliki.net <http://www.cliki.net/Common%20Lisp%20Utilities>, there
@@ -5895,8 +5992,8 @@ Only minimal changes required to make your CLOS objects serializable.")
   (sbcl-package->ecl-package sbcl-marshal))
 
 (define-public sbcl-fast-io
-  (let ((commit "603f4903dd74fb221859da7058ae6ca3853fe64b")
-        (revision "2"))
+  (let ((commit "a4c5ad600425842e8b6233b1fa22610ffcd874c3")
+        (revision "3"))
     (package
      (name "sbcl-fast-io")
      (version (git-version "1.0.0" revision commit))
@@ -5906,15 +6003,10 @@ Only minimal changes required to make your CLOS objects serializable.")
        (uri (git-reference
              (url "https://github.com/rpav/fast-io")
              (commit commit)))
-       (file-name (git-file-name name version))
+       (file-name (git-file-name "cl-fast-io" version))
        (sha256
-        (base32 "00agvc0xx4w715i6ach05p995zpcpghn04xc06zyci06q677vw3n"))))
+        (base32 "0wh02yagbqahy9z6787jz5ggpagvr18qd0z13wvwq1vjf8xd2530"))))
      (build-system asdf-build-system/sbcl)
-     (arguments
-      ;; Error while trying to load definition for system fast-io-test from
-      ;; pathname [...]/fast-io-test.asd: The function CHECKL:DEFINE-TEST-OP
-      ;; is undefined.
-      '(#:tests? #f))
      (native-inputs
       (list sbcl-fiveam sbcl-checkl))
      (inputs
@@ -6136,8 +6228,8 @@ performance and simplicity in mind.")
   (sbcl-package->ecl-package sbcl-lack))
 
 (define-public sbcl-local-time
-  (let ((commit "a177eb911c0e8116e2bfceb79049265a884b701b")
-        (revision "2"))
+  (let ((commit "40169fe26d9639f3d9560ec0255789bf00b30036")
+        (revision "3"))
     (package
      (name "sbcl-local-time")
      (version (git-version "1.0.6" revision commit))
@@ -6147,9 +6239,9 @@ performance and simplicity in mind.")
        (uri (git-reference
              (url "https://github.com/dlowe-net/local-time")
              (commit commit)))
-       (file-name (git-file-name name version))
+       (file-name (git-file-name "cl-local-time" version))
        (sha256
-        (base32 "0wld28xx20k0ysgg6akic5lg4vkjd0iyhv86m388xfrv8xh87wii"))))
+        (base32 "1dbp33zmkqzzshmf5k76pxqgli285wvy0p0dhcz816fdikpwn2jg"))))
      (build-system asdf-build-system/sbcl)
      (native-inputs
       (list sbcl-hu.dwim.stefil))
@@ -6389,20 +6481,20 @@ theory accurate to internal-time-units-per-second.")
   (sbcl-package->ecl-package sbcl-cl-log))
 
 (define-public sbcl-log4cl
-  (let ((commit "8c48d6f41d3a1475d0a91eed0638b9eecc398e35")
+  (let ((commit "75c4184fe3dbd7dec2ca590e5f0176de8ead7911")
         (revision "1"))
     (package
       (name "sbcl-log4cl")
-      (version (git-version "1.1.3" revision commit))
+      (version (git-version "1.1.4" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://github.com/sharplispers/log4cl")
                (commit commit)))
-         (file-name (git-file-name "log4cl" version))
+         (file-name (git-file-name "cl-log4cl" version))
          (sha256
-          (base32 "0166d9aip366pbpdk5gsi2f6xad6q61lssxgbrypa8zslwjn8736"))))
+          (base32 "0mjkw4w3ksxvn87jqdnailqy2h6sziwmp4gf73jym45x9l5zahi5"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-stefil))
@@ -7008,8 +7100,8 @@ common of which is probably Active Directory.")
   (sbcl-package->cl-source-package sbcl-cl-gss))
 
 (define-public sbcl-trivial-utf-8
-  (let ((commit "4d427cfbb1c452436a0efb71c3205c9da67f718f")
-        (revision "1"))
+  (let ((commit "6ca9943588cbc61ad22a3c1ff81beb371e122394")
+        (revision "2"))
     (package
       (name "sbcl-trivial-utf-8")
       (version (git-version "0.0.0" revision commit))
@@ -7021,10 +7113,9 @@ common of which is probably Active Directory.")
            (url (string-append "https://gitlab.common-lisp.net/"
                                "trivial-utf-8/trivial-utf-8.git"))
            (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-trivial-utf-8" version))
          (sha256
-          (base32
-           "1jz27gz8gvqdmvp3k9bxschs6d5b3qgk94qp2bj6nv1d0jc3m1l1"))))
+          (base32 "0gzgbyzbbhny5y1lq2x82vfy4b4p1snq1sy9lj82hdq7lkyj03ss"))))
       (arguments
        ;; Guix incorrectly assumes the "8" is part of the version
        ;; number and lobs it off.
@@ -7437,8 +7528,8 @@ neat APIs and connection-pooling.  It is meant to supersede Drakma.")
   (sbcl-package->ecl-package sbcl-dexador))
 
 (define-public sbcl-lisp-namespace
-  (let ((commit "28107cafe34e4c1c67490fde60c7f92dc610b2e0")
-        (revision "1"))
+  (let ((commit "699fccb6727027343bb5fca69162a3113996edfc")
+        (revision "2"))
     (package
       (name "sbcl-lisp-namespace")
       (build-system asdf-build-system/sbcl)
@@ -7450,12 +7541,11 @@ neat APIs and connection-pooling.  It is meant to supersede Drakma.")
          (uri (git-reference
                (url home-page)
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-lisp-namespace" version))
          (sha256
-          (base32
-           "1jw2wykp06z2afb9nm1lgfzll5cjlj36pnknjx614057zkkxq4iy"))))
+          (base32 "1p5db9mab4whapy1pl38ajw5fkrrdw266n05mnhf4xx2fb9sbx6p"))))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)))
+       (list sbcl-alexandria))
       (native-inputs
        (list sbcl-fiveam))
       (synopsis "LISP-N, or extensible namespaces in Common Lisp")
@@ -7503,8 +7593,8 @@ and it exports symbols from implementation-specific packages.")
   (sbcl-package->ecl-package sbcl-trivial-cltl2))
 
 (define-public sbcl-introspect-environment
-  (let ((commit "fff42f8f8fd0d99db5ad6c5812e53de7d660020b")
-        (revision "1"))
+  (let ((commit "8fb20a1a33d29637a22943243d1482a20c32d6ae")
+        (revision "2"))
     (package
       (name "sbcl-introspect-environment")
       (build-system asdf-build-system/sbcl)
@@ -7516,10 +7606,9 @@ and it exports symbols from implementation-specific packages.")
          (uri (git-reference
                (url home-page)
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-introspect-environment" version))
          (sha256
-          (base32
-           "1i305n0wfmpac63ni4i3vixnnkl8daw5ncxy0k3dv92krgx6qzhp"))))
+          (base32 "1p48jnr1im47529w0ciyar4hfwbivqi57zgllkmfrav09ffigk9s"))))
       (native-inputs
        (list sbcl-fiveam))
       (synopsis "Common Lisp environment introspection portability layer")
@@ -8234,7 +8323,7 @@ situations, operations on series may be composed functionally and yet execute
 iteratively, without the need to construct intermediate series values
 explicitly.  In this manner, series provide both the clarity of a functional
 programming style and the efficiency of an iterative programming style.")
-      (home-page "http://series.sourceforge.net/")
+      (home-page "https://series.sourceforge.net/")
       (license license:expat))))
 
 (define-public cl-series
@@ -9242,8 +9331,8 @@ path, maximum flow, minimum spanning tree, etc.).")
   (sbcl-package->ecl-package sbcl-graph))
 
 (define-public sbcl-trivial-indent
-  (let ((commit "2d016941751647c6cc5bd471751c2cf68861c94a")
-        (revision "0"))
+  (let ((commit "f25275094b80df8aa158af46db980bbc3ce2f88b")
+        (revision "1"))
     (package
       (name "sbcl-trivial-indent")
       (version (git-version "1.0.0" revision commit))
@@ -9254,12 +9343,12 @@ path, maximum flow, minimum spanning tree, etc.).")
           (git-reference
            (url "https://github.com/Shinmera/trivial-indent")
            (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-trivial-indent" version))
          (sha256
-          (base32
-           "1sj90nqz17w4jq0ixz00gb9g5g6d2s7l8r17zdby27gxxh51w266"))))
+          (base32 "1zg8cyy1xqpcjrxxqz5zb5xixhwcszkv4p2vq305lb2rka6f3dyx"))))
       (build-system asdf-build-system/sbcl)
-      (synopsis "Simple Common Lisp library to allow indentation hints for SWANK")
+      (synopsis
+       "Simple Common Lisp library to allow indentation hints for SWANK")
       (description
        "This library allows you to define custom indentation hints for your
 macros if the one recognised by SLIME automatically produces unwanted
@@ -12085,7 +12174,7 @@ interface for MySQL, PostgreSQL and SQLite.")
     (description
      "UFFI provides a universal foreign function interface (FFI)
  for Common Lisp.")
-    (home-page "http://quickdocs.org/uffi/")
+    (home-page "https://quickdocs.org/uffi/")
     (license license:llgpl)))
 
 (define-public cl-uffi
@@ -12220,7 +12309,7 @@ interface for MySQL, PostgreSQL and SQLite.")
      "@code{clsql} is a Common Lisp interface to SQL RDBMS based on the
 Xanalys CommonSQL interface for Lispworks.  It provides low-level database
 interfaces as well as a functional and an object oriented interface.")
-    (home-page "http://clsql.kpe.io/")
+    (home-page "https://clsql.kpe.io/")
     (license license:llgpl)))
 
 (define-public cl-clsql
@@ -12286,7 +12375,7 @@ If features:
 @item Purely functional pairing heaps.
 @item Purely functional amortized queue.
 @end itemize\n")
-      (home-page "http://ndantam.github.io/sycamore/")
+      (home-page "https://ndantam.github.io/sycamore/")
       (license license:bsd-3))))
 
 (define-public cl-sycamore
@@ -12593,7 +12682,7 @@ MOP easier to use.")
     (package
       (name "sbcl-osicat")
       (version (git-version "0.7.0" revision commit))
-      (home-page "http://www.common-lisp.net/project/osicat/")
+      (home-page "https://www.common-lisp.net/project/osicat/")
       (source
        (origin
          (method git-fetch)
@@ -13552,8 +13641,8 @@ wrappers of deflate streams.  It currently does not handle compression.")
   (sbcl-package->ecl-package sbcl-skippy))
 
 (define-public sbcl-cl-freetype2
-  (let ((commit "96058da730b4812df916c1f4ee18c99b3b15a3de")
-        (revision "0"))
+  (let ((commit "8bcb232b319a66fb700eaea88d0b308a837bce04")
+        (revision "1"))
     (package
       (name "sbcl-cl-freetype2")
       (version (git-version "1.1" revision commit))
@@ -13563,17 +13652,17 @@ wrappers of deflate streams.  It currently does not handle compression.")
          (uri (git-reference
                (url "https://github.com/rpav/cl-freetype2")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-freetype2" version))
          (sha256
-          (base32 "0f8darhairgxnb5bzqcny7nh7ss3471bdzix5rzcyiwdbr5kymjl"))))
+          (base32 "1nhq3qslja0bcgpbmzfycqhd4vw1l58zh4ia15m1h6535qxliy0q"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-fiveam))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cffi" ,sbcl-cffi)
-         ("freetype" ,freetype)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list freetype
+             sbcl-alexandria
+             sbcl-cffi
+             sbcl-trivial-garbage))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -13926,8 +14015,8 @@ functions.")
   (sbcl-package->ecl-package sbcl-cl-dejavu))
 
 (define-public sbcl-mcclim
-  (let ((commit "292343f9e30c7ef54a3d9b4b045495387c51585e")
-        (revision "2"))
+  (let ((commit "ece91cf035e2ccb1c6eb0bb867ae2bc45f627982")
+        (revision "3"))
     (package
       (name "sbcl-mcclim")
       (version (git-version "0.9.7" revision commit))
@@ -13939,7 +14028,7 @@ functions.")
                (commit commit)))
          (file-name (git-file-name "cl-mcclim" version))
          (sha256
-          (base32 "10sq34rk11p2lrpqg5hr4721y2yqpmz9yk88mgdmwn7iyga5f2fp"))))
+          (base32 "0prn4f0nz604ykcg8004f1vndgjm7181wrlblq6mhasphca28c2k"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-fiveam pkg-config))
@@ -13950,20 +14039,22 @@ functions.")
              sbcl-alexandria
              sbcl-babel
              sbcl-bordeaux-threads
+             sbcl-cffi
+             sbcl-cl-base64
              sbcl-cl-dejavu
              sbcl-cl-freetype2
              sbcl-cl-pdf
-             sbcl-cffi
              sbcl-cl-unicode
              sbcl-cl-vectors
+             sbcl-cl-who
              sbcl-closer-mop
              sbcl-clx
              sbcl-flexi-streams
              sbcl-flexichain
              sbcl-log4cl
              sbcl-opticl
-             sbcl-spatial-trees
              sbcl-slime-swank
+             sbcl-spatial-trees
              sbcl-trivial-features
              sbcl-trivial-garbage
              sbcl-trivial-gray-streams
@@ -13982,17 +14073,7 @@ functions.")
                   (search-input-file inputs "/lib/libfontconfig.so")))
                (substitute* "Extensions/harfbuzz/src/functions.lisp"
                  (("libharfbuzz\\.so")
-                  (search-input-file inputs "/lib/libharfbuzz.so")))))
-           (add-after 'unpack 'fix-build
-             (lambda _
-               ;; The cffi-grovel system does not get loaded automatically,
-               ;; so we load it explicitly.
-               (substitute* "Extensions/fontconfig/mcclim-fontconfig.asd"
-                 (("\\(asdf:defsystem #:mcclim-fontconfig" all)
-                  (string-append "(asdf:load-system :cffi-grovel)\n" all)))
-               (substitute* "Extensions/harfbuzz/mcclim-harfbuzz.asd"
-                 (("\\(asdf:defsystem #:mcclim-harfbuzz" all)
-                  (string-append "(asdf:load-system :cffi-grovel)\n" all))))))))
+                  (search-input-file inputs "/lib/libharfbuzz.so"))))))))
       (home-page "https://common-lisp.net/project/mcclim/")
       (synopsis "Common Lisp GUI toolkit")
       (description
@@ -14231,7 +14312,7 @@ package that includes a number of renames and shadows.")
            sbcl-hu.dwim.common-lisp
            sbcl-iterate
            sbcl-metabang-bind))
-    (home-page "http://dwim.hu/")
+    (home-page "https://dwim.hu/")
     (synopsis "Common Lisp library shared by other hu.dwim systems")
     (description "This package contains a support library for other
 hu.dwim systems.")
@@ -14629,7 +14710,7 @@ can begin writing unit tests as soon as the project is generated.")
     (package
       (name "sbcl-caveman")
       (version (git-version "2.4.0" revision commit))
-      (home-page "http://8arrow.org/caveman/")
+      (home-page "https://8arrow.org/caveman/")
       (source
        (origin
          (method git-fetch)
@@ -14952,19 +15033,20 @@ table.")
   (sbcl-package->ecl-package sbcl-concurrent-hash-tables))
 
 (define-public sbcl-collectors
-  (let ((commit "13acef25d8422d1d82e067b1861e513587c166ee"))
+  (let ((commit "748f0a1613ce161edccad4cc815eccd7fc55aaf3")
+        (revision "1"))
     (package
       (name "sbcl-collectors")
-      (version (git-version "0.1" "1" commit))
+      (version (git-version "1.0" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://github.com/AccelerationNet/collectors")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-collectors" version))
          (sha256
-          (base32 "1si68n1j6rpns8jw6ksqjpb937pdl30v7xza8rld7j5vh0jhy2yi"))))
+          (base32 "1mxcq7wq2jwbjd39afihpd46qkaidq76prgjbzpkv5749wf2spib"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        (list sbcl-alexandria sbcl-closer-mop sbcl-symbol-munger))
@@ -15731,7 +15813,7 @@ not so easy to copy (ssyntax, argument destructuring, etc.).")
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-lift))
-      (home-page "http://common-lisp.net/project/trivial-shell/")
+      (home-page "https://common-lisp.net/project/trivial-shell/")
       (synopsis "Common Lisp access to the shell")
       (description
        "A simple Common-Lisp interface to the underlying operating system.
@@ -16006,7 +16088,7 @@ the @command{flamegraph.pl} script, which is available in the Guix package
       (build-system asdf-build-system/sbcl)
       (inputs
        (list sbcl-alexandria))
-      (home-page "http://shinmera.github.io/trivial-benchmark/")
+      (home-page "https://shinmera.github.io/trivial-benchmark/")
       (synopsis "Easy to use benchmarking system for Common Lisp")
       (description
        "Trivial-Benchmark runs a block of code many times and outputs some
@@ -16429,10 +16511,10 @@ standard library.")
   (sbcl-package->cl-source-package sbcl-shlex))
 
 (define-public sbcl-cmd
-  (let ((commit "fda9e6bd9137ea806313151716fd87578cdbc882"))
+  (let ((commit "dda16c251992d2711dd98a073c436e73355cdb15"))
     (package
       (name "sbcl-cmd")
-      (version (git-version "0.0.1" "6" commit))
+      (version (git-version "0.0.1" "7" commit))
       (source
        (origin
          (method git-fetch)
@@ -16441,7 +16523,7 @@ standard library.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0j2yns565mp2rsiz8lc75psk7wws9qz8rh74n4vf9zdyrw16ckpf"))))
+          (base32 "1m72vir64h21y3z1dmdywr0r3dl9lwawgd5p9g0cl3bgmz2wjgqr"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("alexandria" ,sbcl-alexandria)
@@ -17213,8 +17295,8 @@ protocol for Mastodon.")
   (sbcl-package->cl-source-package sbcl-tooter))
 
 (define-public sbcl-croatoan
-  (let ((commit "35c92fcc6c4458339c7e27bdf16f7fa908d95eb8")
-        (revision "6"))
+  (let ((commit "42e474f4dffe2f4e429905a612be5736c2c3e374")
+        (revision "7"))
     (package
       (name "sbcl-croatoan")
       (version (git-version "0.0.1" revision commit))
@@ -17226,7 +17308,7 @@ protocol for Mastodon.")
                (commit commit)))
          (file-name (git-file-name "cl-croatoan" version))
          (sha256
-          (base32 "0v1lrdjd29krjb6pr0mql9hjj5c2lv760xwpr17dbsw263vx29xz"))))
+          (base32 "12hnj8gwk2600j3kn778xvvpx3y6z0428v5dq2qbf4vbzj66vcxj"))))
       (build-system asdf-build-system/sbcl)
       (arguments
        '(#:phases
@@ -17234,10 +17316,8 @@ protocol for Mastodon.")
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "ncurses/ncurses.lisp"
-                 (("libncursesw" all)
-                  (string-append (assoc-ref inputs "ncurses")
-                                 "/lib/"
-                                 all))))))))
+                 (("libncursesw.so")
+                  (search-input-file inputs "/lib/libncursesw.so"))))))))
       (inputs
        (list ncurses
              sbcl-cffi
@@ -19255,8 +19335,8 @@ CL-I18N and CL-L10N.")
   (sbcl-package->cl-source-package sbcl-cl-slice))
 
 (define-public sbcl-djula
-  (let ((commit "5df7af35a21503d468a878fc6029caa527a7d204")
-        (revision "1"))
+  (let ((commit "6f142594e0372437e64f610b796350ad89ba0be1")
+        (revision "2"))
     (package
       (name "sbcl-djula")
       (version (git-version "0.2.0" revision commit))
@@ -19266,9 +19346,9 @@ CL-I18N and CL-L10N.")
          (uri (git-reference
                (url "https://github.com/mmontone/djula")
                (commit commit)))
-         (file-name (git-file-name "djula" version))
+         (file-name (git-file-name "cl-djula" version))
          (sha256
-          (base32 "1lk2ypm3sacf60h96a7hv9jwjlxkl4k40yzdalmqdg548vrd1jjm"))))
+          (base32 "0yyg61hrql1vrwllyd23vidiff28ridh0avxyvnqb89v060d1j83"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-fiveam))
@@ -19287,7 +19367,7 @@ CL-I18N and CL-L10N.")
              sbcl-parser-combinators
              sbcl-split-sequence
              sbcl-trivial-backtrace))
-      (home-page "https://mmontone.github.io/djula/")
+      (home-page "https://mmontone.github.io/djula/djula/")
       (synopsis "Common Lisp port of the Django templating language")
       (description
        "This package provides a Common Lisp templating system based on Python
@@ -20127,8 +20207,8 @@ except system libraries.")
   (sbcl-package->cl-source-package sbcl-glop))
 
 (define-public sbcl-sdl2
-  (let ((commit "bb2aa2a41cf799e3bb1ddf50de41fe389c6db668")
-        (revision "1"))
+  (let ((commit "80410b514570ca06894675d4a2a5fc93287ea7b6")
+        (revision "2"))
     (package
       (name "sbcl-sdl2")
       (version (git-version "0.0.0" revision commit))
@@ -20140,24 +20220,25 @@ except system libraries.")
                (commit commit)))
          (file-name (git-file-name "cl-sdl2" version))
          (sha256
-          (base32 "1a4904310z2wwq80grnlixmyz30452vgd4lh74y105j2yrr43z97"))))
+          (base32 "0sjy4k04k0hdhwpr57ns16ag3za0kz4laclbk17i91ql7qdjw9z2"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:phases
+       `(#:asd-systems '("sdl2" "sdl2/examples")
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/library.lisp"
-                 (("libSDL2-2.0.so.0" all)
-                  (string-append (assoc-ref inputs "libsdl2") "/lib/" all)))
-               #t)))))
+                 (("libSDL2-2.0.so.0")
+                  (search-input-file inputs "/lib/libSDL2-2.0.so.0"))))))))
       (inputs
-       `(("alexandria" ,sbcl-alexandria)
-         ("cl-autowrap" ,sbcl-cl-autowrap)
-         ("cl-ppcre" ,sbcl-cl-ppcre)
-         ("libsdl2" ,sdl2)
-         ("trivial-channels" ,sbcl-trivial-channels)
-         ("trivial-features" ,sbcl-trivial-features)))
+       (list sbcl-alexandria
+             sbcl-cl-autowrap
+             sbcl-cl-opengl
+             sbcl-cl-ppcre
+             sbcl-trivial-channels
+             sbcl-trivial-features
+             sdl2))
       (home-page "https://github.com/lispgames/cl-sdl2")
       (synopsis "Common Lisp bindings for SDL2 using C2FFI")
       (description
@@ -20213,6 +20294,49 @@ C Library.")
 (define-public cl-sdl2-image
   (sbcl-package->cl-source-package sbcl-sdl2-image))
 
+(define-public sbcl-sdl2-mixer
+  (let ((commit "fdcc7ee7935dd01fd338e22690451db2cf126156")
+        (revision "1"))
+    (package
+      (name "sbcl-sdl2-mixer")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lispgames/cl-sdl2-mixer")
+               (commit commit)))
+         (file-name (git-file-name "cl-sdl2-mixer" version))
+         (sha256
+          (base32 "0g6ywb3gqr0rif4z6kkz6m8vyv8nrr5wr1w9sc6d3zypbbnqgbp6"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'fix-paths
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (substitute* "src/library.lisp"
+                       (("libSDL2_mixer-2.0.so.0")
+                        (search-input-file inputs "/lib/libSDL2_mixer-2.0.so.0"))))))))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-cl-autowrap
+             sbcl-sdl2
+             sbcl-trivial-garbage
+             sdl2-mixer))
+      (home-page "https://github.com/lispgames/cl-sdl2-mixer")
+      (synopsis "Bindings for sdl2_mixer using autowrap for Common Lisp")
+      (description
+       "This package provides a Common Lisp wrapper system for the SDL 2.0 Mixer C
+Library.")
+      (license license:expat))))
+
+(define-public ecl-sdl2-mixer
+  (sbcl-package->ecl-package sbcl-sdl2-mixer))
+
+(define-public cl-sdl2-mixer
+  (sbcl-package->cl-source-package sbcl-sdl2-mixer))
+
 (define-public sbcl-sdl2-ttf
   (let ((commit "6dd2df2fb3a79ec4f835e3bc882e60e8da039878")
         (revision "1"))
@@ -23674,7 +23798,7 @@ JavaScript code.")
 (define-public sbcl-nhooks
   (package
     (name "sbcl-nhooks")
-    (version "1.1.1")
+    (version "1.2.0")
     (source
      (origin
        (method git-fetch)
@@ -23684,7 +23808,7 @@ JavaScript code.")
        (file-name (git-file-name "nhooks" version))
        (sha256
         (base32
-         "1379q1wbh38xlkwlpf0xy9wgbbc869zznak3l4yzwfgiw6l2hxa1"))))
+         "1cpd9ydxkrl4vxn2clfwljl4q5hdybxkc96qshq7dczq2jvg1nfs"))))
     (build-system asdf-build-system/sbcl)
     (inputs
      (list sbcl-serapeum))
@@ -23760,7 +23884,7 @@ access lexicographic data from WordNet.")
 (define-public sbcl-nfiles
   (package
    (name "sbcl-nfiles")
-   (version "1.0.0")
+   (version "1.1.2")
    (source
     (origin
      (method git-fetch)
@@ -23770,19 +23894,25 @@ access lexicographic data from WordNet.")
      (file-name (git-file-name "cl-nfiles" version))
      (sha256
       (base32
-       "1215h4xzc7vxidr7lhxyr5a7giyd08678ibz5qp4d4nvg14q94y2"))))
+       "1z6xxkr5q325zhpiyy3z03mv663jz85k844cczym4869b845rib2"))
+     (modules '((guix build utils)))
+     (snippet
+      `(begin
+         (delete-file-recursively "nasdf")
+         #t))))
    (build-system asdf-build-system/sbcl)
    (inputs
     (list gnupg
           sbcl-alexandria
-          sbcl-hu.dwim.defclass-star
+          sbcl-nclasses
           sbcl-quri
           sbcl-serapeum
           sbcl-trivial-garbage
           sbcl-trivial-package-local-nicknames
           sbcl-trivial-types))
    (native-inputs
-    (list sbcl-lisp-unit2))
+    (list sbcl-lisp-unit2
+          sbcl-nasdf))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -23832,6 +23962,93 @@ change since last write.
      (cons (list "iolib" cl-iolib)
            (package-inputs sbcl-nfiles)))))
 
+(define-public sbcl-nasdf
+  (let ((commit "c63a6ff12239f132844cc0703e79ea3b33dae630"))
+    (package
+      (name "sbcl-nasdf")
+      (version "0.1.2")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/atlas-engineer/ntemplate")
+               (commit commit)))
+         (file-name (git-file-name "cl-ntemplate" version))
+         (sha256
+          (base32
+           "1b57jkyrvr3n0c66lih4m34fqzw3s5yqlk91v7hg2gchcn3v9glg"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'cd-sdl
+             (lambda _
+               (chdir "nasdf")
+               #t)))))
+      (home-page "https://github.com/atlas-engineer/ntemplate")
+      (synopsis "ASDF helpers for system setup, testing and installation")
+      (description
+       "NASDF is an ASDF extension providing utilities to ease system setup, testing and installation.
+
+@itemize
+@item Simple way to fetch Git submodules and “do the right thing” for
+setup. This may effectively supersede Quicklisp. A benefit of using Git
+submodules over the default Quicklisp distribution is improved
+reproducibility.
+@item Test helpers, like distinction between offline and online tests, or
+continuous integration options, and warning reports.
+@item Installation helpers, for instance to install libraries, icons and
+desktop files to the right directories.
+@end itemize\n")
+      (license license:bsd-3))))
+
+(define-public ecl-nasdf
+  (sbcl-package->ecl-package sbcl-nasdf))
+
+(define-public cl-nasdf
+  (sbcl-package->cl-source-package sbcl-nasdf))
+
+(define-public sbcl-nclasses
+  (package
+    (name "sbcl-nclasses")
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/atlas-engineer/nclasses")
+             (commit version)))
+       (file-name (git-file-name "cl-nclasses" version))
+       (sha256
+        (base32
+         "1y1za2vm7m1bhkj6ssc29jvs9p82swjvclnhm9xyp2b275ykzz7l"))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           (delete-file-recursively "nasdf")
+           #t))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     (list sbcl-moptilities))
+    (native-inputs
+     (list sbcl-lisp-unit2
+           sbcl-nasdf))
+    (home-page "https://github.com/atlas-engineer/nclasses")
+    (synopsis "Simplify class and condition definitions.")
+    (description
+     "NClasses provides helper macros to help write classes and conditions
+with less boilerplate.
+
+It's a fork of @code{hu.dwim.defclass-star}.  It inclues some bug fixes and
+extra features like type inference.")
+    (license license:public-domain)))
+
+(define-public ecl-nclasses
+  (sbcl-package->ecl-package sbcl-nclasses))
+
+(define-public cl-nclasses
+  (sbcl-package->cl-source-package sbcl-nclasses))
+
 (define-public sbcl-cl-template
   (let ((commit "46193a9a389bb950530e579eae7e6e5a18184832")
         (revision "0"))
@@ -24005,48 +24222,46 @@ implementation for Common Lisp.")
   (sbcl-package->ecl-package sbcl-websocket-driver))
 
 (define-public sbcl-jzon
-  (let ((commit "5364590f5d2e6d6f1932d1ea3acba1ee2a82f31e")
-        (revision "0"))
-    (package
-      (name "sbcl-jzon")
-      (version (git-version "0.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/Zulu-Inuoe/jzon")
-               (commit commit)))
-         (file-name (git-file-name "cl-jzon" version))
-         (sha256
-          (base32 "1048f6prz2lp859nxwcgghn6n38pc2pb580azzxpdhfcdi0034mj"))))
-      (build-system asdf-build-system/sbcl)
-      (arguments
-       '(#:asd-systems '("com.inuoe.jzon")
-         #:asd-test-systems '("com.inuoe.jzon-tests")
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'fix-test-asd
-             (lambda _
-               (substitute* "test/com.inuoe.jzon-tests.asd"
-                 ((":depends-on")
-                  (string-append
-                   ":perform (test-op (op c) (symbol-call :fiveam :run!"
-                   " (find-symbol \"JZON\" :com.inuoe.jzon-tests)))"
-                   "\n"
-                   "  :depends-on"))))))))
-      (native-inputs
-        (list sbcl-alexandria
-              sbcl-fiveam
-              sbcl-flexi-streams))
-      (inputs
-        (list sbcl-closer-mop
-              sbcl-flexi-streams))
-      (home-page "https://github.com/Zulu-Inuoe/jzon/")
-      (synopsis "Correct and safe JSON parser")
-      (description
-       "@code{jzon} is a correct and safe JSON RFC 8259 parser for Common
-Lisp.")
-      (license license:expat))))
+  (package
+    (name "sbcl-jzon")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Zulu-Inuoe/jzon")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-jzon" version))
+       (sha256
+        (base32 "03k0czc58wlnxavkmr7gbrza6zq40ih4da8yjbxg9ba8m0bzzdw4"))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     '(#:asd-systems '("com.inuoe.jzon")
+       #:asd-test-systems '("com.inuoe.jzon-tests")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-test-asd
+           (lambda _
+             (substitute* "test/com.inuoe.jzon-tests.asd"
+               ((":depends-on")
+                (string-append
+                 ":perform (test-op (op c) (symbol-call :fiveam :run!"
+                 " (find-symbol \"JZON\" :com.inuoe.jzon-tests)))"
+                 "\n"
+                 "  :depends-on"))))))))
+    (native-inputs
+     (list sbcl-alexandria
+           sbcl-fiveam))
+    (inputs
+     (list sbcl-closer-mop
+           sbcl-flexi-streams
+           sbcl-float-features
+           sbcl-trivial-gray-streams))
+    (home-page "https://github.com/Zulu-Inuoe/jzon/")
+    (synopsis "Correct and safe JSON parser")
+    (description
+     "@code{jzon} is a correct and safe JSON RFC 8259 parser for Common Lisp.")
+    (license license:expat)))
 
 (define-public cl-jzon
   (sbcl-package->cl-source-package sbcl-jzon))
@@ -24728,7 +24943,7 @@ operating on them.")
       (native-inputs
        (list sbcl-iterate
              sbcl-hu.dwim.stefil))
-      (home-page "http://nikodemus.github.io/screamer/")
+      (home-page "https://nikodemus.github.io/screamer/")
       (synopsis "Nondeterministic programming and constraint propagation")
       (description
        "Screamer is an extension of Common Lisp that adds support for
@@ -26784,7 +26999,7 @@ Closure Templates.")
 combinators.  Using a simple technique from the functional programming
 camp, @code{cl-smug} makes it simple to create quick extensible recursive
 descent parsers without funky syntax or impenetrable macrology.")
-     (home-page "http://smug.drewc.ca/")
+     (home-page "https://smug.drewc.ca/")
      (license license:expat))))
 
 (define-public cl-smug
@@ -26793,6 +27008,327 @@ descent parsers without funky syntax or impenetrable macrology.")
 (define-public ecl-smug
   (sbcl-package->ecl-package sbcl-smug))
 
+(define-public sbcl-cl-variates
+  (let ((commit "4e7548754d8a8731a42487fae31174db4bf36d47")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-variates")
+      (version "0.9.0")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.common-lisp.net/cl-variates/cl-variates")
+               (commit commit)))
+         (file-name (git-file-name "cl-variates" version))
+         (sha256
+          (base32 "03wnvfi3yfflpvi0mr732r834msij4vrwdbgf6csh0b8kqxl47zn"))))
+      (build-system asdf-build-system/sbcl)
+      ;; USE-PACKAGE #<PACKAGE "CL-VARIATES"> causes name-conflicts in
+      ;; #<PACKAGE "CL-VARIATES-TEST"> between the following symbols:
+      ;; CL-VARIATES:RANDOM-ELEMENT, LIFT:RANDOM-ELEMENT
+      (arguments (list #:tests? #f))
+      (native-inputs (list sbcl-lift))
+      (home-page "https://gitlab.common-lisp.net/cl-variates/cl-variates")
+      (synopsis "Portable Common Lisp Random Number Generation")
+      (description "The variates package provides portable random number
+generation as well as numerous distributions.")
+      (license license:expat))))
+
+(define-public cl-variates
+  (sbcl-package->cl-source-package sbcl-cl-variates))
+
+(define-public ecl-cl-variates
+  (sbcl-package->ecl-package sbcl-cl-variates))
+
+(define-public sbcl-cephes
+  (let ((commit "d87146fa38c8425ffb5fe425eee5eb3e818bacd4")
+        (revision "0"))
+    (package
+      (name "sbcl-cephes")
+      (version (git-version "1.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/cephes.cl")
+               (commit commit)))
+         (file-name (git-file-name "cl-cephes" version))
+         (sha256
+          (base32 "09adls1lwwzwm1jmvhf11arwlsy5w0bi2rmniahas824mysv77lr"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cffi))
+      (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 ;; ECL has issues making the shared library automatically,
+                 ;; so we make it explicitly.
+                 (add-before 'build 'build-shared-library
+                   (lambda _
+                     (with-directory-excursion
+                         (string-append #$output "/share/common-lisp/"
+                                        (%lisp-type) "/cephes/scipy-cephes")
+                       (invoke "make")
+                       ;; Remove temporary object files.
+                       (for-each delete-file (find-files "." "\\.o$"))))))))
+      (home-page "https://lisp-stat.github.io/cephes.cl/")
+      (synopsis "Common Lisp wrapper for the Cephes Mathematical Library")
+      (description
+       "This package provides a common lisp CFFI wrapper for the SciPy version
+of Cephes special functions.")
+      (license license:ms-pl))))
+
+(define-public cl-cephes
+  (sbcl-package->cl-source-package sbcl-cephes))
+
+(define-public ecl-cephes
+  (sbcl-package->ecl-package sbcl-cephes))
+
+(define-public sbcl-special-functions
+  (let ((commit "f3ca2792ff3f8351839c366413da6b1bb2965a58")
+        (revision "0"))
+    (package
+      (name "sbcl-special-functions")
+      (version (git-version "1.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/special-functions")
+               (commit commit)))
+         (file-name (git-file-name "cl-special-functions" version))
+         (sha256
+          (base32 "092szffy7zfxgrvfck11wnj8l0mgcym13yiafj01ad02lbj1fnnv"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-fiveam
+             sbcl-select
+             sbcl-cl-variates))
+      (inputs
+        (list sbcl-alexandria-plus
+              sbcl-float-features
+              sbcl-let-plus
+              sbcl-numerical-utilities))
+      (home-page "https://lisp-stat.dev/docs/resources/special-functions/")
+      (synopsis "Special functions in Common Lisp")
+      (description "This library implements
+@url{http://specialfunctionswiki.org/index.php/Main_Page, special
+functions} and has a focus on high accuracy double-float calculations
+using the latest algorithms.")
+      (license license:ms-pl))))
+
+(define-public cl-special-functions
+  (sbcl-package->cl-source-package sbcl-special-functions))
+
+(define-public ecl-special-functions
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-special-functions))
+    ;; https://github.com/Lisp-Stat/special-functions/issues/4
+    (arguments (list #:tests? #f))))
+
+(define-public sbcl-distributions
+  (let ((commit "ea72622073ee7e005dfdc621ce1e5a83b22bb39e")
+        (revision "0"))
+    (package
+      (name "sbcl-distributions")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/distributions")
+               (commit commit)))
+         (file-name (git-file-name "cl-distributions" version))
+         (sha256
+          (base32 "1fkzigd0s0s0mvszgmv04yc8jp9gm4812445hfh6kpz6cjy5zpsk"))))
+      (build-system asdf-build-system/sbcl)
+      ;; https://github.com/Lisp-Stat/distributions/issues/1
+      (arguments (list #:tests? #f))
+      (native-inputs (list sbcl-fiveam))
+      (inputs
+        (list sbcl-alexandria
+              sbcl-anaphora
+              sbcl-array-operations
+              sbcl-cephes
+              sbcl-float-features
+              sbcl-let-plus
+              sbcl-numerical-utilities
+              sbcl-special-functions))
+      (home-page "https://lisp-stat.dev/docs/manuals/distributions/")
+      (synopsis "Statistical distributions for Common Lisp")
+      (description "The Distributions package provides a collection of
+probabilistic distributions and related functions")
+      (license license:ms-pl))))
+
+(define-public cl-distributions
+  (sbcl-package->cl-source-package sbcl-distributions))
+
+(define-public ecl-distributions
+  (sbcl-package->ecl-package sbcl-distributions))
+
+(define-public sbcl-statistics
+  (let ((commit "94fc87a2bf81355a40ce3730b4ed77710ecfabaf")
+        (revision "0"))
+    (package
+      (name "sbcl-statistics")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/statistics")
+               (commit commit)))
+         (file-name (git-file-name "cl-statistics" version))
+         (sha256
+          (base32 "0is69w6iwh4hyzc5ndgb3i2331f677sa7kw5wy8pmx6hawbkgyir"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs (list sbcl-clunit2))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-anaphora
+             sbcl-conduit-packages
+             sbcl-distributions
+             sbcl-let-plus
+             sbcl-numerical-utilities))
+      (home-page "https://lisp-stat.dev/docs/")
+      (synopsis "Statistical functions in Common Lisp")
+      (description "This package provides a consolidation of Common Lisp
+statistics libraries.")
+      (license (list license:expat license:ms-pl)))))
+
+(define-public cl-statistics
+  (sbcl-package->cl-source-package sbcl-statistics))
+
+(define-public ecl-statistics
+  (sbcl-package->ecl-package sbcl-statistics))
+
+(define-public sbcl-data-frame
+  (let ((commit "6f02e58312654ddf19d686f234dcf699fc4cd0f5")
+        (revision "0"))
+    (package
+      (name "sbcl-data-frame")
+      (version (git-version "1.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/data-frame")
+               (commit commit)))
+         (file-name (git-file-name "cl-data-frame" version))
+         (sha256
+          (base32 "0bs1jh66bml25bj1lxdzz8cjhj3g060yyd5ggqsnsr4l2j0zyszv"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs (list sbcl-clunit2))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-alexandria-plus
+             sbcl-anaphora
+             sbcl-array-operations
+             sbcl-duologue
+             sbcl-let-plus
+             sbcl-numerical-utilities
+             sbcl-select
+             sbcl-serapeum
+             sbcl-statistics))
+      (home-page "https://lisp-stat.dev/docs/manuals/data-frame/")
+      (synopsis "Data frames for Common Lisp")
+      (description "This package provides data frames for Common Lisp, a
+two-dimensional array-like structure in which each column contains values
+of one variable and each row contains one set of values from each column.")
+      (license license:ms-pl))))
+
+(define-public cl-data-frame
+  (sbcl-package->cl-source-package sbcl-data-frame))
+
+;; The data-frame system depends on the sb-cltl2 system, which is only
+;; available with SBCL.
+;; (define-public ecl-data-frame
+;;   (sbcl-package->ecl-package sbcl-data-frame))
+
+(define-public sbcl-dfio
+  (let ((commit "5caf473acb9bc464839e87395724cbd941167915")
+        (revision "0"))
+    (package
+      (name "sbcl-dfio")
+      (version (git-version "1.0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/dfio")
+               (commit commit)))
+         (file-name (git-file-name "cl-dfio" version))
+         (sha256
+          (base32 "1p53r7773939jnap518xp4b4wfvc1kbrz9jp6yd40xq0jpf9pbqg"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-anaphora
+             sbcl-data-frame
+             sbcl-dexador
+             sbcl-fare-csv
+             sbcl-let-plus
+             sbcl-yason))
+      (native-inputs
+       (list sbcl-clunit2))
+      (home-page "https://lisp-stat.dev/docs/manuals/data-frame/")
+      (synopsis "Read data to and from data frames")
+      (description "This package provides tools for manipulating data
+in files using data frames.")
+      (license license:ms-pl))))
+
+(define-public cl-dfio
+  (sbcl-package->cl-source-package sbcl-dfio))
+
+;; This depends on ecl-data-frame, which doesn't work yet.
+;; (define-public ecl-dfio
+;;   (sbcl-package->ecl-package sbcl-dfio))
+
+(define-public sbcl-lisp-stat
+  (let ((commit "357a0d2b5f68a5ff925776235c2b7455e12b78ba")
+        (revision "0"))
+    (package
+      (name "sbcl-lisp-stat")
+      (version (git-version "1.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Lisp-Stat/lisp-stat")
+               (commit commit)))
+         (file-name (git-file-name "cl-lisp-stat" version))
+         (sha256
+          (base32 "0qwlxrbwj884mr67sf6aj0zwrndv33aiiid4bqrkji41kjhqfcz5"))))
+      (build-system asdf-build-system/sbcl)
+      ;; https://github.com/Lisp-Stat/lisp-stat/issues/22
+      (arguments (list #:tests? #f))
+      (native-inputs (list sbcl-parachute))
+      (inputs
+        (list sbcl-alexandria
+              sbcl-alexandria-plus
+              sbcl-array-operations
+              sbcl-conduit-packages
+              sbcl-data-frame
+              sbcl-dexador
+              sbcl-dfio
+              sbcl-distributions
+              sbcl-numerical-utilities
+              sbcl-select
+              sbcl-statistics))
+      (home-page "https://lisp-stat.github.io/lisp-stat/")
+      (synopsis "Statistical Computing in Common Lisp")
+      (description "This package provides a statistical computing
+environment for Common Lisp.")
+      (license license:ms-pl))))
+
+(define-public cl-lisp-stat
+  (sbcl-package->cl-source-package sbcl-lisp-stat))
+
+;; This depends on ecl-data-frame and ecl-dfio, which don't work yet.
+;; (define-public ecl-lisp-stat
+;;   (sbcl-package->ecl-package sbcl-lisp-stat))
+
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 2afeb30a55..c802a401b9 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -54,8 +54,6 @@
   #:use-module (guix utils)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system ant)
-  #:use-module (guix build-system asdf)
   #:use-module (guix build-system haskell)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages admin)
@@ -656,7 +654,7 @@ an interpreter, a compiler, a debugger, and much more.")
            (search-path-specification
             (variable "XDG_CONFIG_DIRS")
             (files '("etc")))))
-    (home-page "http://www.sbcl.org/")
+    (home-page "https://www.sbcl.org/")
     (synopsis "Common Lisp implementation")
     (description "Steel Bank Common Lisp (SBCL) is a high performance Common
 Lisp compiler.  In addition to the compiler and runtime system for ANSI Common
@@ -879,7 +877,7 @@ libraries such as OpenGL, SDL, Video4Linux, and ALSA (video/audio
 grabbing), and others.  Lush is an ideal frontend script language for
 programming projects written in C or other languages.  Lush also has
 libraries for Machine Learning, Neural Nets and statistical estimation.")
-    (home-page "http://lush.sourceforge.net/")
+    (home-page "https://lush.sourceforge.net/")
     (license license:lgpl2.1+)))
 
 (define-public confusion-mdl
@@ -973,7 +971,7 @@ enough to play the original mainframe Zork all the way through.")
                (invoke "./configure" "+lang" "en" "+fhs"
                        (string-append "-prefix=" (assoc-ref outputs "out")))
                #t)))))
-      (home-page "http://www.kylheku.com/cgit/man/")
+      (home-page "https://www.kylheku.com/cgit/man/")
       (synopsis "Modifications to the man utilities, specifically man2html")
       (description
        "This is a fork of the man utilities intended specifically for building
@@ -1231,7 +1229,7 @@ including a built-in database engine and a GUI system.")
 (define-public janet
   (package
     (name "janet")
-    (version "1.25.1")
+    (version "1.26.0")
     (source
      (origin
        (method git-fetch)
@@ -1240,7 +1238,7 @@ including a built-in database engine and a GUI system.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0d601imsndkmjyanja6pqp234fwmn9jxzpcbigwpra969x4a4qjd"))))
+        (base32 "1ghxchyxhcjs0vfzisafc27v05im4kya1jg827l4q2h92ras17x3"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
@@ -1264,71 +1262,74 @@ assembler, PEG) is less than 1MB.")
     (license license:expat)))
 
 (define-public carp
-  (package
-    (name "carp")
-    (version "0.5.5")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/carp-lang/Carp")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "14jdnv0ljqvpr9ych1plfw7hp5q57a8j1bv8h3v345x06z783d07"))))
-    (build-system haskell-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               ;; Carp looks inside the sources checkout to know where to
-               ;; find its core libraries and other files.
-               ;; Carp emits C code and tries to compile it with an external
-               ;; C compiler. On Linux it defaults to Clang.
-               (add-after 'install 'wrap-programs
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (define (wrap-carp-program program)
-                     (wrap-program (string-append
-                                    #$output "/bin/" program)
-                       `("CARP_DIR" prefix
-                         (#$(package-source this-package)))
-                       `("PATH" prefix
-                         ,(list (dirname
-                                 (search-input-file inputs "bin/clang"))
-                                (dirname
-                                 (search-input-file inputs "bin/ld"))))
-                       `("C_INCLUDE_PATH" prefix
-                         ,(list (dirname
-                                 (search-input-directory
-                                  inputs "include/linux"))
-                                (dirname
-                                 (search-input-file
-                                  inputs "include/stdlib.h"))))))
-
-                   (for-each wrap-carp-program
-                             (list "carp"
-                                   "carp-header-parse")))))))
-    (inputs
-     (list bash-minimal
-           clang
-           ghc-blaze-markup
-           ghc-blaze-html
-           ghc-split
-           ghc-ansi-terminal
-           ghc-cmark
-           ghc-edit-distance
-           ghc-hashable
-           ghc-open-browser
-           ghc-optparse-applicative))
-    (native-inputs
-     (list ghc-hunit))
-    (home-page "https://carp-lang.org/")
-    (synopsis "Statically typed Lisp without a garbage collector")
-    (description
-     "@code{carp} is a Lisp-like programming language that compiles to
+  ;; Release 0.5.5 does not support GHC 9.2.
+  (let ((commit "339722325ec607091f6035866ebedea2b69080fe")
+        (revision "1"))
+    (package
+      (name "carp")
+      (version (git-version "0.5.5" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/carp-lang/Carp")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0w0j3imi4270dsmrh96spsc9xllsk5rrh817l80q1nyay9p53xwd"))))
+      (build-system haskell-build-system)
+      (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 ;; Carp looks inside the sources checkout to know where to
+                 ;; find its core libraries and other files.
+                 ;; Carp emits C code and tries to compile it with an external
+                 ;; C compiler. On Linux it defaults to Clang.
+                 (add-after 'install 'wrap-programs
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (define (wrap-carp-program program)
+                       (wrap-program (string-append
+                                      #$output "/bin/" program)
+                         `("CARP_DIR" prefix
+                           (#$(package-source this-package)))
+                         `("PATH" prefix
+                           ,(list (dirname
+                                   (search-input-file inputs "bin/clang"))
+                                  (dirname
+                                   (search-input-file inputs "bin/ld"))))
+                         `("C_INCLUDE_PATH" prefix
+                           ,(list (dirname
+                                   (search-input-directory
+                                    inputs "include/linux"))
+                                  (dirname
+                                   (search-input-file
+                                    inputs "include/stdlib.h"))))))
+  
+                     (for-each wrap-carp-program
+                               (list "carp"
+                                     "carp-header-parse")))))))
+      (inputs
+       (list bash-minimal
+             clang
+             ghc-blaze-markup
+             ghc-blaze-html
+             ghc-split
+             ghc-ansi-terminal
+             ghc-cmark
+             ghc-edit-distance
+             ghc-hashable
+             ghc-open-browser
+             ghc-optparse-applicative))
+      (native-inputs
+       (list ghc-hunit))
+      (home-page "https://carp-lang.org/")
+      (synopsis "Statically typed Lisp without a garbage collector")
+      (description
+       "@code{carp} is a Lisp-like programming language that compiles to
 C.  It features inferred static typing, macros, automatic memory
 management without a garbage collector, a REPL, and straightforward
 integration with code written in C.")
-    (license license:asl2.0)))
+      (license license:asl2.0))))
 (define-public lisp-repl-core-dumper
   (package
     (name "lisp-repl-core-dumper")
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index b30a82aa07..4c19f1e3ed 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -50,7 +50,6 @@
   #:use-module (guix git-download)
   #:use-module (guix memoization)
   #:use-module (guix utils)
-  #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system emacs)
   #:use-module (guix build-system python)
@@ -562,11 +561,11 @@ output), and Binutils.")
 
 (define %llvm-monorepo-hashes
   '(("14.0.6" . "14f8nlvnmdkp9a9a79wv67jbmafvabczhah8rwnqrgd5g3hfxxxx")
-    ("15.0.6" . "13vj0q6if5095a3awq8d97l17qdsc7fks6avkai9k80kl0kzxpv6")))
+    ("15.0.7" . "12sggw15sxq1krh1mfk3c1f07h895jlxbcifpwk3pznh4m1rjfy2")))
 
 (define %llvm-patches
   '(("14.0.6" . ("clang-14.0-libc-search-path.patch"))
-    ("15.0.6" . ("clang-15.0-libc-search-path.patch"))))
+    ("15.0.7" . ("clang-15.0-libc-search-path.patch"))))
 
 (define (llvm-monorepo version)
   (origin
@@ -582,7 +581,7 @@ output), and Binutils.")
 (define-public llvm-15
   (package
     (name "llvm")
-    (version "15.0.6")
+    (version "15.0.7")
     (source (llvm-monorepo version))
     (build-system cmake-build-system)
     (outputs '("out" "opt-viewer"))
@@ -735,7 +734,7 @@ of programming tools as well as libraries with equivalent functionality.")
                     (package-version llvm-15)))
      (sha256
       (base32
-       "099v2yqg11h0h8qqddzkny6b77pafcr7vy5ksc33kqggji173ccj")))))
+       "1lagnspm5limxh1cp5jlixnzlhf09905d4rqra1kpgj6dps2x6l0")))))
 
 (define-public clang-14
   (clang-from-llvm
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index 76b8f6a6b7..550caf7be1 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -88,7 +88,7 @@
      "Log4cpp is library of C++ classes for flexible logging to files, syslog,
 IDSA and other destinations.  It is modeled after the Log4j Java library,
 staying as close to their API as is reasonable.")
-    (home-page "http://log4cpp.sourceforge.net/")
+    (home-page "https://log4cpp.sourceforge.net/")
     (license license:lgpl2.1+)))
 
 (define-public glog
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 5fd1d66927..d50890bf1e 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -655,7 +655,7 @@ standard libraries.")
            (lambda* (#:key outputs #:allow-other-keys)
              (mkdir-p (string-append (assoc-ref outputs "out") "/bin"))
              #t)))))
-    (home-page "http://stevedonovan.github.io/ldoc/")
+    (home-page "https://stevedonovan.github.io/ldoc/")
     (synopsis "Lua documentation generator")
     (description
      "LDoc is a LuaDoc-compatible documentation generation system for
@@ -779,7 +779,7 @@ Notable examples are GTK+, GStreamer and Webkit.")
     (description
      "LPeg is a pattern-matching library for Lua, based on Parsing Expression
 Grammars (PEGs).")
-    (home-page "http://www.inf.puc-rio.br/~roberto/lpeg")
+    (home-page "https://www.inf.puc-rio.br/~roberto/lpeg")
     (license license:expat)))
 
 (define-public lua-lpeg
diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm
index dde87382e8..4ebe8071f7 100644
--- a/gnu/packages/lxqt.scm
+++ b/gnu/packages/lxqt.scm
@@ -39,6 +39,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages compton)
@@ -320,7 +321,8 @@ LXQt and the system it's running on.")
            libqtxdg
            polkit-qt
            qtsvg-5
-           qtx11extras))
+           qtx11extras
+           tzdata))
     (native-inputs
      (list lxqt-build-tools qttools-5))
     (arguments
@@ -328,12 +330,14 @@ LXQt and the system it's running on.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-source
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (substitute* '("lxqt-admin-user/CMakeLists.txt"
                             "lxqt-admin-time/CMakeLists.txt")
                (("DESTINATION \"\\$\\{POLKITQT-1_POLICY_FILES_INSTALL_DIR\\}")
                 "DESTINATION \"share/polkit-1/actions"))
-             #t)))))
+             (substitute* '("lxqt-admin-time/timeadmindialog.cpp")
+               (("/usr/share/zoneinfo/zone.tab")
+                (search-input-file inputs "share/zoneinfo/zone.tab"))))))))
     (home-page "https://lxqt-project.org")
     (synopsis "LXQt system administration tool")
     (description "lxqt-admin is providing two GUI tools to adjust settings of
@@ -479,14 +483,14 @@ of other programs.")
 (define-public lxqt-panel
   (package
     (name "lxqt-panel")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/lxqt/" name "/releases/download/"
                            version "/" name "-" version ".tar.xz"))
        (sha256
-        (base32 "1m0mm07ydmdlyyi6s4q1cwpxp609kcyc3gcmwbmyf0smadan3yd8"))))
+        (base32 "1604rb4yg1lgivvd76gaqb6dvq8bv8xy5f2vzj46prh0rbvhnf2b"))))
     (build-system cmake-build-system)
     (inputs
      (list alsa-lib
@@ -782,14 +786,14 @@ for LXQt.")
 (define-public libfm-qt
   (package
     (name "libfm-qt")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/lxqt/" name "/releases/download/"
                            version "/" name "-" version ".tar.xz"))
        (sha256
-        (base32 "0b423s6bkwijjrh14wca49ypz79sxci9lalxc5s29vwbhync09x0"))))
+        (base32 "00r35gb4x6fnsv6z6digr3661cwykxn32xq23an1n044v38lry6x"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no tests
@@ -813,14 +817,14 @@ components to build desktop file managers which belongs to LXDE.")
 (define-public pcmanfm-qt
   (package
     (name "pcmanfm-qt")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/lxqt/" name "/releases/download/"
                            version "/" name "-" version ".tar.xz"))
        (sha256
-        (base32 "1k44a659mval4513p4yv63hqrbg9jqc8vrinl4mx5aja33pww5yg"))))
+        (base32 "0nz66b9mv6hqaxf5k3ijaf1694za5nv121y6jfq39db3a1qx7rm5"))))
     (build-system cmake-build-system)
     (arguments
      (list
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index bcee6a6fc3..8bd1d8b8bb 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015-2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -15,7 +15,7 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
-;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -45,7 +45,6 @@
   #:use-module (guix build-system ocaml)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system r)
   #:use-module (guix build-system trivial)
   #:use-module (guix git-download)
   #:use-module (gnu packages)
@@ -438,7 +437,7 @@ Performance is achieved by using the LLVM JIT compiler.")
                                "CFLAGS=-fcommon")))
     (inputs
      (list perl))
-    (home-page "http://micans.org/mcl/")
+    (home-page "https://micans.org/mcl/")
     (synopsis "Clustering algorithm for graphs")
     (description
      "The MCL algorithm is short for the @dfn{Markov Cluster Algorithm}, a
@@ -565,7 +564,7 @@ sample proximities between pairs of cases.")
                 "0hlbdmjjf1jgsvi3d2hwni5lz3l9a5bzj6ijpbawa8a7cbrpp66y"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--enable-ngram-fsts")))
-    (home-page "http://www.openfst.org")
+    (home-page "https://www.openfst.org")
     (synopsis "Library for weighted finite-state transducers")
     (description "OpenFst is a library for constructing, combining,
 optimizing, and searching weighted finite-state transducers (FSTs).")
@@ -906,7 +905,7 @@ with a single function call.")
              (invoke "ctest"))))))
     (native-inputs
      (list catch-framework))
-    (home-page "http://reactivex.io/")
+    (home-page "https://reactivex.io/")
     (synopsis "Reactive Extensions for C++")
     (description
      "The Reactive Extensions for C++ (RxCpp) is a library of algorithms for
@@ -1400,6 +1399,31 @@ data by providing clean labels during training.")
     (native-inputs
      (list python-pytest))))
 
+(define-public python-cma
+  (package
+    (name "python-cma")
+    (version "3.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "cma" version))
+              (sha256
+               (base32
+                "1v31b2vnnr4v6ack7zfmw7zb47vbzjr9nyvx2lbfhyjf7zhbhj5p"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (invoke "python" "-m" "cma.test")))))))
+    (propagated-inputs (list python-numpy))
+    (home-page "https://github.com/CMA-ES/pycma")
+    (synopsis "Python implementation of CMA-ES")
+    (description "This package provides a Python implementation of the
+@acronym{CMA-ES, Covariance Matrix Adaptation Evolution Strategy} algorithm
+and a few related numerical optimization tools.")
+    (license license:bsd-3)))
+
 (define-public python-cmaes
   (package
     (name "python-cmaes")
@@ -3346,27 +3370,26 @@ Python.")
 (define-public python-hmmlearn
   (package
     (name "python-hmmlearn")
-    (version "0.2.7")
+    (version "0.2.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "hmmlearn" version))
        (sha256
         (base32
-         "1qgnf1kdxicygy8nvpv866iqvwq0rc6xkd3s6slmvxvsy8h2fjvb"))))
+         "1yd5l9ra37mks41mn5bigav7xpb161a9yqlcnz4ir076vkik2sb9"))))
     (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)
-               (with-directory-excursion (string-append (assoc-ref outputs "out") "/lib")
-                 (invoke "python" "-m" "pytest"))))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (with-directory-excursion (string-append #$output "/lib")
+                  (invoke "python" "-m" "pytest"))))))))
     (propagated-inputs
      (list pybind11
-           python-cython
            python-numpy
            python-scikit-learn
            python-scipy
@@ -3384,7 +3407,7 @@ of Hidden Markov Models.")
 (define-public liblantern
   (package
     (name "liblantern")
-    (version "0.9.0")
+    (version "0.9.1")
     (source
      (origin
        (method git-fetch)
@@ -3393,7 +3416,7 @@ of Hidden Markov Models.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0bjd0ym547k46ci8xnwsry7x8w5k65cl86snlcrfn4vs3fald2y9"))))
+        (base32 "1rycs7fgm03fxp8lxj8ljrdwy5whxd4554xzklbcmn4mcwbxgg57"))))
     (build-system cmake-build-system)
     (arguments
      (list
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 80e2ce2a9b..6ef4c6fdab 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -51,6 +51,7 @@
 ;;; Copyright © 2022 muradm <mail@muradm.net>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2022 ( <paren@disroot.org>
+;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1111,55 +1112,58 @@ repository and Maildir/IMAP as LOCAL repository.")
   (deprecated-package "offlineimap" offlineimap3))
 
 (define-public emacs-mew
-  (package
-    (name "emacs-mew")
-    (version "6.8")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://mew.org/Release/mew-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "0ixzyq33l6j34410kqav3lwn2wx171zvqd3irvns2jvhrbww8i6g"))))
-    (native-inputs
-     (list emacs))
-    (propagated-inputs
-     (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")
-           (icon-dir  "/share/mew"))
-       `(#:modules ((guix build gnu-build-system)
-                    (guix build utils)
-                    (guix build emacs-utils))
-         #:imported-modules (,@%gnu-build-system-modules
-                             (guix build emacs-utils))
-         #:configure-flags
-         (list (string-append "--with-elispdir=" %output ,elisp-dir)
-               (string-append "--with-etcdir=" %output ,icon-dir))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'configure 'patch-mew-icon-directory
-             (lambda* (#:key outputs #:allow-other-keys)
-               (emacs-substitute-sexps "mew-key.el"
-                 ("(def.* mew-icon-directory"
-                  `(progn
-                    (add-to-list 'image-load-path 'mew-icon-directory)
-                    ,(string-append (assoc-ref outputs "out") ,icon-dir))))
-               #t))
-           (add-after 'install 'generate-autoloads
-             (lambda* (#:key outputs #:allow-other-keys)
-               (emacs-generate-autoloads
-                "mew" (string-append (assoc-ref outputs "out") ,elisp-dir))
-               #t)))
-         #:tests? #f)))
-    (home-page "https://mew.org")
-    (synopsis "Emacs e-mail client")
-    (description "Mew (Messaging in the Emacs World) is a user interface
+  (let ((commit "35772ee0b44dd7e56b0f3899b27fa545b2bc6f03")
+        (revision "1"))
+    (package
+      (name "emacs-mew")
+      (version (git-version "6.9" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kazu-yamamoto/Mew")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0xazygwdc328m5l31rxjazq9giv2xrygp2p2q455lf3jhdxwq1km"))))
+      (build-system gnu-build-system)
+      (arguments
+       (let ((elisp-dir #~(string-append #$output "/share/emacs/site-lisp"))
+             (icon-dir  #~(string-append #$output "/share/mew")))
+         (list
+          #:modules '((guix build gnu-build-system)
+                      (guix build utils)
+                      (guix build emacs-utils))
+          #:imported-modules `(,@%gnu-build-system-modules
+                               (guix build emacs-utils))
+          #:tests? #f
+          #:configure-flags
+          #~(list (string-append "--with-elispdir=" #$elisp-dir)
+                  (string-append "--with-etcdir=" #$icon-dir))
+          #:phases
+          #~(modify-phases %standard-phases
+              (add-after 'configure 'patch-mew-icon-directory
+                (lambda _
+                  (emacs-substitute-sexps "elisp/mew-key.el"
+                    ("(def.* mew-icon-directory"
+                     `(progn
+                       (add-to-list 'image-load-path 'mew-icon-directory)
+                       ,#$icon-dir)))))
+              (add-after 'install 'generate-autoloads
+                (lambda _
+                  (emacs-generate-autoloads "mew" #$elisp-dir)))))))
+      (native-inputs
+       (list emacs))
+      (propagated-inputs
+       (list ruby        ; to set GEM_PATH so ruby-sqlite3 is found at runtime
+             ruby-sqlite3))            ; optional for the database of messages
+      (home-page "https://mew.org")
+      (synopsis "Emacs e-mail client")
+      (description "Mew (Messaging in the Emacs World) is a user interface
 for text messages, multimedia messages (MIME), news articles and
 security functionality including PGP, S/MIME, SSH, and SSL.")
-    (license license:bsd-3)))
+      (license license:bsd-3))))
 
 (define-public mu
   (package
@@ -1598,7 +1602,7 @@ system, written in the Mercury language.")
      (list pandoc pkg-config))
     (inputs
      (list openssl notmuch sqlite xapian))
-    (home-page "http://www.muchsync.org/")
+    (home-page "https://www.muchsync.org/")
     (synopsis "Synchronize notmuch mail across machines")
     (description
      "Muchsync brings Notmuch to all of your computers by synchronizing your
@@ -1795,14 +1799,14 @@ addons which can add many functionalities to the base client.")
 (define-public msmtp
   (package
     (name "msmtp")
-    (version "1.8.22")
+    (version "1.8.23")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/msmtp/releases"
                            "/msmtp-" version ".tar.xz"))
        (sha256
-        (base32 "1rx3ksvwdfrwahsd2lwf52vnhhq72ygb0kjy6ci2df55hri2010v"))))
+        (base32 "1f2nqdj3k8q7l4m3a6n8ckaslilxxp2kzfdmni6l2gcv15mw216g"))))
     (build-system gnu-build-system)
     (inputs
      (list libsecret gnutls zlib gsasl))
@@ -2551,7 +2555,7 @@ separation to safely deliver mail in multi-user setups.")
     ;; are performed before the actual build process.
     (build-system gnu-build-system)
     (inputs (list exim))
-    (home-page "http://www.procmail.org/")
+    (home-page "https://www.procmail.org/")
     (synopsis "Versatile mail delivery agent (MDA)")
     (description "Procmail is a mail delivery agent (MDA) featuring support
 for a variety of mailbox formats such as mbox, mh and maildir.  Incoming mail
@@ -2891,20 +2895,22 @@ easily (one at a time).")
 (define-public mpop
   (package
     (name "mpop")
-    (version "1.4.17")
+    (version "1.4.18")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/mpop/releases/"
                            "mpop-" version ".tar.xz"))
        (sha256
-        (base32 "1mcbvzdbdr86zsq8zr1zryjrmfiqikckx3648zvdjh99mm5lkbj2"))))
+        (base32 "1dw5kwflga26kfjl999lilq14vvk6fcapryihakr9l7phh0rb6b0"))))
     (build-system gnu-build-system)
     (inputs
      (list gnutls))
     (native-inputs
      (list pkg-config))
     (home-page "https://marlam.de/mpop/")
+    (properties
+     '((release-monitoring-url . "https://marlam.de/mpop/download/")))
     (synopsis "POP3 mail client")
     (description "mpop is a small and fast POP3 client suitable as a
 fetchmail replacement.
@@ -3035,7 +3041,7 @@ define(`confINST_DEP', `')
        #:tests? #f))
     (inputs
      (list m4 perl))
-    (home-page "http://sendmail.org")
+    (home-page "https://sendmail.org")
     (synopsis
      "Highly configurable Mail Transfer Agent (MTA)")
     (description
@@ -3325,7 +3331,7 @@ writing OpenSMTPd filters.")
            ;; Our OpenSMTPd package uses libressl, but this package currently
            ;; supports HAVE_ED25519 only with openssl.
            openssl))
-    (home-page "http://imperialat.at/dev/filter-dkimsign/")
+    (home-page "https://imperialat.at/dev/filter-dkimsign/")
     (synopsis "OpenSMTPd filter for signing mail with DKIM")
     (description
      "The @command{filter-dkimsign} OpenSMTPd filter signs outgoing e-mail
@@ -4670,7 +4676,7 @@ ex-like commands on it.")
      (list tre))
     (native-inputs
      `(("emacs" ,emacs-minimal)))
-    (home-page "http://crm114.sourceforge.net/")
+    (home-page "https://crm114.sourceforge.net/")
     (synopsis "Controllable regex mutilator")
     (description "CRM114 is a system to examine incoming e-mail, system log
 streams, data files or other data streams, and to sort, filter, or alter the
@@ -4786,7 +4792,7 @@ remote SMTP server.")
 (define-public aerc
   (package
     (name "aerc")
-    (version "0.13.0")
+    (version "0.14.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4795,7 +4801,7 @@ remote SMTP server.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "18rykklc0ppl53sm9lzhrw6kv4rcc7x45nv7qii7m4qads2pyjm5"))))
+                "067j7kja78hv7dafw8gy3m2g5cslq6xlnzja8lm3b5p0m0vfabm8"))))
     (build-system go-build-system)
     (arguments
      (list #:import-path "git.sr.ht/~rjarry/aerc"
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 1aa0b7ef8f..7f0af61554 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -117,7 +117,7 @@ textfiles to roff for terminal display, and also to HTML for the web.")
                (base32
                 "1c5dl017xil2ssb6a5vg927bnsbc9vymfgi9ahvqbb8gypx0igsx"))))
     (build-system gnu-build-system)
-    (home-page "http://libpipeline.nongnu.org/")
+    (home-page "https://libpipeline.nongnu.org/")
     (synopsis "C library for manipulating pipelines of subprocesses")
     (description
      "libpipeline is a C library for manipulating pipelines of subprocesses in
@@ -211,7 +211,7 @@ a flexible and convenient way.")
      (list (search-path-specification
             (variable "MANPATH")
             (files '("share/man")))))
-    (home-page "http://man-db.nongnu.org/")
+    (home-page "https://man-db.nongnu.org/")
     (synopsis "Standard Unix documentation system")
     (description
      "Man-db is an implementation of the standard Unix documentation system
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 38040015a5..47b1aeb501 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -930,7 +930,7 @@ large scale eigenvalue problems.")
        (base32
         "1155qixp26c12yrxc76z9mlfw2h3xxymxxv5znpgzh5gaykpndgj"))))
     (build-system cmake-build-system)
-    (home-page "http://www.netlib.org/lapack/")
+    (home-page "https://www.netlib.org/lapack/")
     (inputs `(("fortran" ,gfortran)
               ("python" ,python-wrapper)))
     (arguments
@@ -1033,7 +1033,7 @@ provide LAPACK for someone who does not have access to a Fortran compiler.")
                       (substitute* "TESTING/CMakeLists.txt"
                         (("^add_test\\(x[sd]hseqr.*" all)
                          (string-append "# " all "\n"))))))))
-    (home-page "http://www.netlib.org/scalapack/")
+    (home-page "https://www.netlib.org/scalapack/")
     (synopsis "Library for scalable numerical linear algebra")
     (description
      "ScaLAPACK is a Fortran 90 library of high-performance linear algebra
@@ -1655,7 +1655,7 @@ System (Grid, Point and Swath).")
      "HDF-EOS5 is a software library built on HDF5 to support the construction
 of data structures used in NASA's Earth Observing System (Grid, Point and
 Swath).")
-    (home-page "http://www.hdfeos.org/software/library.php#HDF-EOS5")
+    (home-page "https://www.hdfeos.org/software/library.php#HDF-EOS5")
 
     ;; Source files carry a permissive license header.
     (license (license:non-copyleft home-page))))
@@ -1840,7 +1840,7 @@ the resulting text.")
      `(("texlive" ,texlive-tiny)
        ("ghostscript" ,ghostscript)
        ("doxygen" ,doxygen)))
-    (home-page "http://itpp.sourceforge.net")
+    (home-page "https://itpp.sourceforge.net")
     (synopsis "C++ library of maths, signal processing and communication classes")
     (description "IT++ is a C++ library of mathematical, signal processing and
 communication classes and functions.  Its main use is in simulation of
@@ -2703,12 +2703,20 @@ satisfiability checking (SAT).")
   (package
     (inherit clingo)
     (name "python-clingo")
+    (version (package-version clingo)) ; for #$version in arguments
     (arguments
      (substitute-keyword-arguments (package-arguments clingo)
        ((#:configure-flags flags #~'())
         #~(cons* "-DCLINGO_BUILD_WITH_PYTHON=pip"
                  "-DCLINGO_USE_LIB=yes"
                  #$flags))
+       ((#:imported-modules _ '())
+        `(,@%cmake-build-system-modules
+          (guix build python-build-system)))
+       ((#:modules _ '())
+        '((guix build cmake-build-system)
+          ((guix build python-build-system) #:prefix python:)
+          (guix build utils)))
        ((#:phases phases #~%standard-phases)
         #~(modify-phases #$phases
             (add-after 'unpack 'fix-failing-tests
@@ -2717,7 +2725,17 @@ satisfiability checking (SAT).")
                   (("ctl\\.solve\\(on_statistics=on_statistics\\)" all)
                    (string-append
                     all
-                    "; self.skipTest(\"You shall not fail.\")")))))))))
+                    "; self.skipTest(\"You shall not fail.\")")))))
+            (add-after 'install 'install-distinfo
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (with-directory-excursion (python:site-packages inputs outputs)
+                   (let ((dir (string-append "clingo-" #$version ".dist-info")))
+                     (mkdir-p dir)
+                     (call-with-output-file (string-append dir "/METADATA")
+                       (lambda (port)
+                         (format port "Metadata-Version: 1.1~%")
+                         (format port "Name: clingo~%")
+                         (format port "Version: ~a~%" #$version)))))))))))
     (inputs (list clingo python-wrapper))
     (propagated-inputs (list python-cffi))
     (native-inputs (modify-inputs (package-native-inputs clingo)
@@ -2727,6 +2745,41 @@ satisfiability checking (SAT).")
 making it so that you can write @acronym{ASPs, Answer Set Programs} through
 Python code.")))
 
+(define-public python-clorm
+  (package
+   (name "python-clorm")
+   (version "1.4.1")
+   (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "https://github.com/potassco/clorm")
+                  (commit (string-append "v" version))))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32
+              "0jx99y71mrgdicn1da5dwz5nzgvvpabrikff783sg4shbv2cf0b5"))))
+   (build-system pyproject-build-system)
+   (arguments
+    (list #:phases
+          #~(modify-phases %standard-phases
+              (add-before 'check 'fix-breaking-tests
+                (lambda _
+                  ;; noclingo tests rely on this being set
+                  (setenv "CLORM_NOCLINGO" "1")
+                  (delete-file "tests/test_mypy_query.py")
+                  (substitute* "tests/test_clingo.py"
+                    (("self\\.assertTrue\\(os_called\\)" all)
+                     (string-append "# " all))))))))
+   (propagated-inputs (list python-clingo))
+   (native-inputs (list python-typing-extensions))
+   (home-page "https://potassco.org")
+   (synopsis "Object relational mapping to clingo")
+   (description "@acronym{Clorm, Clingo ORM} provides an @acronym{ORM,
+Object Relational Mapping} interface to the @acronym{ASP, answer set
+programming} solver clingo.  Its goal is to make integration of clingo
+into Python programs easier.")
+   (license license:expat)))
+
 (define-public python-telingo
   (package
     (name "python-telingo")
@@ -2968,61 +3021,6 @@ script files.")
                #t))))))
     (synopsis "High-level language for numerical computation (with GUI)")))
 
-(define-public opencascade-oce
-  (package
-    (name "opencascade-oce")
-    (version "0.17.2")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-              (url "https://github.com/tpaviot/oce")
-              (commit (string-append "OCE-" version))))
-        (file-name (git-file-name name version))
-        (patches (search-patches "opencascade-oce-glibc-2.26.patch"))
-        (sha256
-          (base32 "0rg5wzkvfmzfl6v2amyryb8dnjad0nn9kyr607wy2gch6rciah69"))))
-    (build-system cmake-build-system)
-    (arguments
-     '(#:configure-flags
-        (list "-DOCE_TESTING:BOOL=ON"
-              "-DOCE_USE_TCL_TEST_FRAMEWORK:BOOL=ON"
-              "-DOCE_DRAW:BOOL=ON"
-              (string-append "-DOCE_INSTALL_PREFIX:PATH="
-                        (assoc-ref %outputs "out"))
-              "-UCMAKE_INSTALL_RPATH")))
-    (inputs
-      (list freetype
-            glu
-            libxmu
-            mesa
-            tcl
-            tk))
-    (native-inputs
-      `(("python" ,python-wrapper)))
-    (home-page "https://github.com/tpaviot/oce")
-    (synopsis "Libraries for 3D modeling and numerical simulation")
-    (description
-     "Open CASCADE is a set of libraries for the development of applications
-dealing with 3D CAD data or requiring industrial 3D capabilities.  It includes
-C++ class libraries providing services for 3D surface and solid modeling, CAD
-data exchange, and visualization.  It is used for development of specialized
-software dealing with 3D models in design (CAD), manufacturing (CAM),
-numerical simulation (CAE), measurement equipment (CMM), and quality
-control (CAQ) domains.
-
-This is the ``Community Edition'' (OCE) of Open CASCADE, which gathers
-patches, improvements, and experiments contributed by users over the official
-Open CASCADE library.")
-    (license (list license:lgpl2.1; OCE libraries, with an exception for the
-                                  ; use of header files; see
-                                  ; OCCT_LGPL_EXCEPTION.txt
-                   license:public-domain; files
-                                  ; src/Standard/Standard_StdAllocator.hxx and
-                                  ; src/NCollection/NCollection_StdAllocator.hxx
-                   license:expat; file src/OpenGl/OpenGl_glext.h
-                   license:bsd-3)))); test framework gtest
-
 (define-public opencascade-occt
   (package
     (name "opencascade-occt")
@@ -3179,7 +3177,7 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
                (substitute* "api/gmsh.py"
                  (("find_library\\(\"gmsh\"\\)")
                   (simple-format #f "\"~a\"" libgmsh)))))))))
-    (home-page "http://gmsh.info/")
+    (home-page "https://gmsh.info/")
     (synopsis "3D finite element grid generator")
     (description "Gmsh is a 3D finite element grid generator with a built-in
 CAD engine and post-processor.  Its design goal is to provide a fast, light
@@ -3239,7 +3237,7 @@ ASCII text files using Gmsh's own scripting language.")
      (list ghostscript ;optional, for EPS/PS output
            python-dbus
            python-h5py ;optional, for HDF5 data
-           python-pyqt-without-qtwebkit
+           python-pyqt
            qtbase-5
            qtsvg-5))
     (propagated-inputs
@@ -3703,7 +3701,7 @@ bindings to almost all functions of SLEPc.")
     (build-system gnu-build-system)
     (native-inputs
      (list autoconf automake))
-    (home-page "http://us.metamath.org/")
+    (home-page "https://us.metamath.org/")
     (synopsis "Proof verifier based on a minimalistic formalism")
     (description
      "Metamath is a tiny formal language and that can express theorems in
@@ -4382,7 +4380,7 @@ schemes.")
        #:phases (modify-phases %standard-phases
                   (add-before 'check 'mpi-setup
 		    ,%openmpi-setup))))
-    (home-page "http://www.p4est.org")
+    (home-page "https://www.p4est.org")
     (synopsis "Adaptive mesh refinement on forests of octrees")
     (description
      "The p4est software library enables the dynamic management of a
@@ -4551,28 +4549,27 @@ point numbers.")
 (define-public wxmaxima
   (package
     (name "wxmaxima")
-    (version "22.05.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/wxMaxima-developers/wxmaxima")
-             (commit (string-append "Version-" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1va56v9dys97yln4m1z3fz3k90lpy8i3kvcq0v1cbg36689aghm5"))))
+    (version "22.12.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/wxMaxima-developers/wxmaxima")
+                    (commit (string-append "Version-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "12bjadmy2mf7d8v4iszmzckahfcwjzaba8wpbigksh4brvhb4gj5"))))
     (build-system cmake-build-system)
-    (native-inputs
-     `(("gettext" ,gettext-minimal)))
-    (inputs
-     (list wxwidgets
-           maxima
-           ;; Runtime support.
-           adwaita-icon-theme
-           gtk+
-           shared-mime-info))
+    (native-inputs (list gettext-minimal))
+    (inputs (list bash-minimal
+                  wxwidgets
+                  maxima
+                  ;; Runtime support.
+                  adwaita-icon-theme
+                  gtk+
+                  shared-mime-info))
     (arguments
-     `(#:tests? #f                      ; tests fail non-deterministically
+     `(#:tests? #f ; tests fail non-deterministically
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-doc-path
@@ -4581,8 +4578,8 @@ point numbers.")
              ;; documentation.  Only licensing information is placed there by
              ;; Guix.
              (substitute* "src/Dirstructure.cpp"
-               (("/doc/wxmaxima-\\%s") "/doc/wxmaxima"))
-             #t))
+               (("/doc/wxmaxima-\\%s")
+                "/doc/wxmaxima"))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
@@ -4595,15 +4592,15 @@ point numbers.")
                  (,(string-append (assoc-ref inputs "gtk+")
                                   "/share/glib-2.0/schemas")))
                `("XDG_DATA_DIRS" ":" prefix
-                 (;; Needed by gdk-pixbuf to know supported icon formats.
-                  ,(string-append
-                    (assoc-ref inputs "shared-mime-info") "/share")
+                 ( ;; Needed by gdk-pixbuf to know supported icon formats.
+                  ,(string-append (assoc-ref inputs "shared-mime-info")
+                                  "/share")
                   ;; The default icon theme of GTK+.
-                  ,(string-append
-                    (assoc-ref inputs "adwaita-icon-theme") "/share"))))
-             #t)))))
+                  ,(string-append (assoc-ref inputs "adwaita-icon-theme")
+                                  "/share")))))))))
     (home-page "https://wxmaxima-developers.github.io/wxmaxima/")
-    (synopsis "Graphical user interface for the Maxima computer algebra system")
+    (synopsis
+     "Graphical user interface for the Maxima computer algebra system")
     (description
      "wxMaxima is a graphical user interface for the Maxima computer algebra
 system.  It eases the use of Maxima by making most of its commands available
@@ -4635,7 +4632,7 @@ full text searching.")
      `(("openblas" ,openblas)
        ("lapack" ,lapack)
        ("arpack" ,arpack-ng)))
-    (home-page "http://arma.sourceforge.net/")
+    (home-page "https://arma.sourceforge.net/")
     (synopsis "C++ linear algebra library")
     (description
      "Armadillo is a C++ linear algebra library, aiming towards a good balance
@@ -5054,7 +5051,7 @@ Fresnel integrals, and similar related functions as well.")
     (native-inputs
      `(("cmake" ,cmake-minimal)
        ("m4" ,m4)))
-    (home-page "http://faculty.cse.tamu.edu/davis/suitesparse.html")
+    (home-page "https://faculty.cse.tamu.edu/davis/suitesparse.html")
     (synopsis "Suite of sparse matrix software")
     (description
      "SuiteSparse is a suite of sparse matrix algorithms, including: UMFPACK,
@@ -5082,7 +5079,7 @@ packages.")
                (base32
                 "1dyjlq3fiparvm8ypwk6rsmjzmnwk81l88gkishphpvc79ryp216"))))
     (build-system gnu-build-system)
-    (home-page "http://math-atlas.sourceforge.net/")
+    (home-page "https://math-atlas.sourceforge.net/")
     (inputs `(("gfortran" ,gfortran)
               ("lapack-tar" ,(package-source lapack))))
     (outputs '("out" "doc"))
@@ -5345,7 +5342,7 @@ specifications.")
                              (install-file name include))
                            (find-files "." "\\.h$")))
                #t))))))
-    (home-page "http://lpsolve.sourceforge.net/")
+    (home-page "https://lpsolve.sourceforge.net/")
     (synopsis "Mixed integer linear programming (MILP) solver")
     (description
      "lp_solve is a mixed integer linear programming solver based on the
@@ -5692,7 +5689,7 @@ FLANN is written in C++ and contains bindings for C, Octave and Python.")
      (list mpfr readline))
     (native-inputs
      (list bison flex))
-    (home-page "http://w-calc.sourceforge.net/index.php")
+    (home-page "https://w-calc.sourceforge.net/index.php")
     (synopsis "Flexible command-line scientific calculator")
     (description "Wcalc is a very capable calculator.  It has standard functions
 (sin, asin, and sinh for example, in either radians or degrees), many
@@ -7901,7 +7898,7 @@ numeric differences and differences in numeric formats.")
             (invoke "make" "byte")
             (invoke "make" "install-lib")
             #t)))))
-    (home-page "http://why3.lri.fr")
+    (home-page "https://why3.lri.fr")
     (synopsis "Deductive program verification")
     (description "Why3 provides a language for specification and programming,
 called WhyML, and relies on external theorem provers, both automated and
@@ -7954,7 +7951,7 @@ of C, Java, or Ada programs.")
             (variable "FRAMAC_LIB")
             (files '("lib/frama-c"))
             (separator #f))))
-    (home-page "http://frama-c.com")
+    (home-page "https://frama-c.com")
     (synopsis "C source code analysis platform")
     (description "Frama-C is an extensible and collaborative platform dedicated
 to source-code analysis of C software.  The Frama-C analyzers assist you in
diff --git a/gnu/packages/matrix.scm b/gnu/packages/matrix.scm
index 2642de2438..7086482ef8 100644
--- a/gnu/packages/matrix.scm
+++ b/gnu/packages/matrix.scm
@@ -36,6 +36,7 @@
   #:use-module (gnu packages xml)
   #:use-module (guix build-system python)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages))
 
@@ -248,20 +249,28 @@ fledged batteries-included asyncio layer using aiohttp.")
          "16ask8v00654q307c55q5gnm8hrj40gibpab5zl52v4i0bgl9j68"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'downgrade-appdirs-requirement
-           (lambda _
-             (substitute* "setup.py"
-               ;; FIXME: Remove this once appdirs is updated.
-               ;; Upgrading python-appdirs requires rebuilting 3000+ packages,
-               ;; when 1.4.4 is a simple maintenance fix from 1.4.3.
-               (("appdirs >= 1.4.4") "appdirs >= 1.4.3"))))
-         (replace 'check
-           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
-             (when tests?
-               (add-installed-pythonpath inputs outputs)
-               (invoke "pytest" "-vv" "tests")))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'downgrade-appdirs-requirement
+            (lambda _
+              (substitute* "setup.py"
+                ;; FIXME: Remove this once appdirs is updated.
+                ;; Upgrading python-appdirs requires rebuilting 3000+ packages,
+                ;; when 1.4.4 is a simple maintenance fix from 1.4.3.
+                (("appdirs >= 1.4.4") "appdirs >= 1.4.3"))))
+          (add-after 'install 'install-doc
+            (lambda _
+              (with-directory-excursion "docs/man"
+                (let ((man (string-append #$output "/share/man")))
+                  (install-file "panctl.1" (string-append man "/man1"))
+                  (install-file "pantalaimon.5" (string-append man "/man5"))
+                  (install-file "pantalaimon.8" (string-append man "/man8"))))))
+          (replace 'check
+            (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+              (when tests?
+                (add-installed-pythonpath inputs outputs)
+                (invoke "pytest" "-vv" "tests")))))))
     (native-inputs
      (list python-aioresponses
            python-faker
diff --git a/gnu/packages/mcrypt.scm b/gnu/packages/mcrypt.scm
index c0b9c815a5..e5e6338475 100644
--- a/gnu/packages/mcrypt.scm
+++ b/gnu/packages/mcrypt.scm
@@ -45,7 +45,7 @@
     (build-system gnu-build-system)
     (inputs
      (list zlib libmcrypt libmhash))
-    (home-page "http://mcrypt.sourceforge.net/")
+    (home-page "https://mcrypt.sourceforge.net/")
     (synopsis "Replacement for the popular Unix crypt command")
     (description
      "MCrypt is a replacement for the old crypt() package and crypt(1)
@@ -70,7 +70,7 @@ them.")
        (base32
         "0gipgb939vy9m66d3k8il98rvvwczyaw2ixr8yn6icds9c3nrsz4"))))
     (build-system gnu-build-system)
-    (home-page "http://mcrypt.sourceforge.net/")
+    (home-page "https://mcrypt.sourceforge.net/")
     (synopsis "Encryption algorithm library")
     (description
      "Libmcrypt is a data encryption library.  The library is thread safe and
@@ -97,7 +97,7 @@ XTEA, 3WAY, TWOFISH, BLOWFISH, ARCFOUR, WAKE and more.")
     (build-system gnu-build-system)
     (native-inputs
      (list perl))                 ;for tests
-    (home-page "http://mhash.sourceforge.net/")
+    (home-page "https://mhash.sourceforge.net/")
     (synopsis "Thread-safe hash library")
     (description
      "Mhash is a thread-safe hash library, implemented in C, and provides a
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index 9ec506a1ed..4176977375 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018, 2019, 2020, 2021, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021, 2022, 2023 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
@@ -158,14 +158,14 @@ parsers to allow execution with Guile as extension languages.")))
 (define-public mes
   (package
     (name "mes")
-    (version "0.24.1")
+    (version "0.24.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/mes/"
                                   "mes-" version ".tar.gz"))
               (sha256
                (base32
-                "0d855agwawjjzwbjmvb5xlbwg77zdpwbjm9kjxc2wqvn0vmhq4im"))))
+                "0vp8v88zszh1imm3dvdfi3m8cywshdj7xcrsq4cgmss69s2y1nkx"))))
     (supported-systems '("armhf-linux" "i686-linux" "x86_64-linux"))
     (propagated-inputs (list mescc-tools nyacc-1.00.2))
     (native-inputs
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 382db4972b..a07c7f7e9e 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; 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 © 2015, 2018-2021, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <clement@lassieur.org>
@@ -37,6 +37,7 @@
 ;;; Copyright © 2022 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 Giovanni Biscuolo <g@xelera.eu>
+;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -123,6 +124,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
@@ -192,62 +194,6 @@ by @acronym{OMEMO, OMEMO Multi-End Message and Object Encryption}, during
 XMPP-based sessions.")
     (license license:lgpl3+)))
 
-(define-public psi
-  (package
-    (name "psi")
-    (version "1.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "mirror://sourceforge/psi/Psi/"
-                       version "/psi-" version ".tar.xz"))
-       (modules '((guix build utils)))
-       (snippet
-        `(begin
-           (delete-file-recursively "3rdparty")))
-       (sha256
-        (base32 "1dxmm1d1zr0pfs51lba732ipm6hm2357jlfb934lvarzsh7karri"))))
-    (build-system qt-build-system)
-    (arguments
-     `(#:tests? #f                      ; No target
-       #:configure-flags
-       (list
-        "-DUSE_ENCHANT=ON"
-        "-DUSE_CCACHE=OFF")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-cmake
-           (lambda _
-             (substitute* "cmake/modules/FindHunspell.cmake"
-               (("hunspell-1.6")
-                "hunspell-1.7"))
-             #t)))))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("ruby" ,ruby)))
-    (inputs
-     `(("aspell" ,aspell)
-       ("enchant" ,enchant-1.6)
-       ("hunspell" ,hunspell)
-       ("libidn" ,libidn)
-       ("qca" ,qca)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia-5" ,qtmultimedia-5)
-       ("qtsvg-5" ,qtsvg-5)
-       ("qtwebkit" ,qtwebkit)
-       ("qtx11extras" ,qtx11extras)
-       ("x11" ,libx11)
-       ("xext" ,libxext)
-       ("xcb" ,libxcb)
-       ("zlib" ,zlib)))
-    (synopsis "Qt-based XMPP Client")
-    (description "Psi is a capable XMPP client aimed at experienced users.
-Its design goals are simplicity and stability.")
-    (home-page "https://psi-im.org")
-    (license license:gpl2+)))
-
 (define-public libgnt
   (package
     (name "libgnt")
@@ -1177,7 +1123,7 @@ of xmpppy.")
 (define-public gajim
   (package
     (name "gajim")
-    (version "1.4.6")
+    (version "1.4.7")
     (source
      (origin
        (method url-fetch)
@@ -1186,7 +1132,7 @@ of xmpppy.")
                        (version-major+minor version)
                        "/gajim-" version ".tar.gz"))
        (sha256
-        (base32 "0ks25hh7ksx0nfydixpixcli556w7qcylxp2z2xsx8mgzqv7c9la"))
+        (base32 "1ww46qlxr14nq0ka8wsf8qpn5qfi5dvgyksfh9411crl7azhfj0s"))
        (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
     (build-system python-build-system)
     (arguments
@@ -1375,7 +1321,7 @@ Encryption to Gajim.")
 (define-public dino
   (package
     (name "dino")
-    (version "0.3.1")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
@@ -1383,7 +1329,7 @@ Encryption to Gajim.")
         (string-append "https://github.com/dino/dino/releases/download/v"
                        version "/dino-" version ".tar.gz"))
        (sha256
-        (base32 "1rs6qpkidiww805cd91q059r2lm5lzblrkyn01zz4g1mls8ghk5a"))))
+        (base32 "115p7mjk0q68nvv8asrm6hsv0dzsz7hy2bnvhwhxmcfbilr8fq68"))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -1422,12 +1368,13 @@ Encryption to Gajim.")
      (list gettext-minimal
            `(,glib "bin")
            gobject-introspection
-           `(,gtk+ "bin")
+           `(,gtk "bin")
            pkg-config
            vala))
     (inputs
      (list adwaita-icon-theme
            atk
+           bash-minimal
            cairo
            librsvg
            glib
@@ -1438,8 +1385,9 @@ Encryption to Gajim.")
            gstreamer                    ;for A/V support
            gst-plugins-base
            gst-plugins-good
-           gtk+
+           gtk
            icu4c                        ;for emoji support
+           libadwaita
            libcanberra                  ;for sound-notification support
            libgcrypt
            libgee
@@ -1447,7 +1395,7 @@ Encryption to Gajim.")
            libsignal-protocol-c
            libsoup
            libsrtp                      ;for calls support
-           pango
+           pango-next                   ;gtk4 wants pango 1.50+
            qrencode
            sqlite
            webrtc-audio-processing))    ;for A/V support
@@ -1513,14 +1461,14 @@ Qt-based XMPP library QXmpp.")
 (define-public prosody
   (package
     (name "prosody")
-    (version "0.12.1")
+    (version "0.12.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://prosody.im/downloads/source/"
                                   "prosody-" version ".tar.gz"))
               (sha256
                (base32
-                "1rch9gzp9ksnniv6r1vskifvfv5wbp8wcfjr0lc2b9013zjbpv57"))))
+                "05ma72wr6iypr62vq748jhzx8i3lmgnsjshrx6w0z7sg24jfhqmn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;tests require "busted"
@@ -2357,7 +2305,7 @@ QMatrixClient project.")
 (define-public mtxclient
   (package
     (name "mtxclient")
-    (version "0.8.2")
+    (version "0.9.1")
     (source
      (origin
        (method git-fetch)
@@ -2366,7 +2314,7 @@ QMatrixClient project.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "041ckjvfxapv1q6x9xd8q70x43cz10x7p11aql58lnc0jp0kwry7"))))
+        (base32 "0m8agc3c4n03r92nz3gxkpxmj2c3ncf125nmfdv0jf24gxib126z"))))
     (arguments
      `(#:configure-flags
        (list
@@ -2386,9 +2334,10 @@ QMatrixClient project.")
            curl
            json-modern-cxx
            libevent
-           olm
            libsodium
+           olm
            openssl
+           re2
            spdlog
            zlib))
     (native-inputs
@@ -2402,7 +2351,7 @@ for the Matrix protocol.  It is built on to of @code{Boost.Asio}.")
 (define-public nheko
   (package
     (name "nheko")
-    (version "0.10.2")
+    (version "0.11.1")
     (source
      (origin
        (method git-fetch)
@@ -2411,7 +2360,7 @@ for the Matrix protocol.  It is built on to of @code{Boost.Asio}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "114hbv58209bwar6qjdjg2l1vh3xk20ppv6n301i7zkmwrf7q9w2"))
+        (base32 "0j5y5jfimmflynrg7003wr7i75b102cpv3afyp3j7z69b2apkhys"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -2481,6 +2430,7 @@ for the Matrix protocol.  It is built on to of @code{Boost.Asio}.")
            qtmultimedia-5
            qtquickcontrols2-5
            qtsvg-5
+           re2
            spdlog
            single-application-qt5
            xcb-util-wm
@@ -3139,6 +3089,9 @@ social and chat platform.")
 designed for experienced users.")
     (license license:gpl2+)))
 
+(define-public psi
+  (deprecated-package "psi" psi-plus))
+
 (define-public python-zulip
   (package
     (name "python-zulip")
@@ -3508,6 +3461,23 @@ Discord.")
     (home-page "https://github.com/taylordotfish/harmony")
     (license license:gpl3+)))
 
+(define-public python-pypresence
+  (package
+    (name "python-pypresence")
+    (version "4.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pypresence" version))
+              (sha256
+               (base32
+                "0rp09lfxbc3syd1rhbai2516c3wyfxkzrsw8v4bd57qqr2cay7b9"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/qwertyquerty/pypresence")
+    (synopsis "Discord RPC client")
+    (description "This package provides @code{python-pypresence}, a Discord
+RPC client written in Python.")
+    (license license:expat)))
+
 (define-public pn
   (package
     (name "pn")
diff --git a/gnu/packages/minetest.scm b/gnu/packages/minetest.scm
index a30bce57de..4c14d9412c 100644
--- a/gnu/packages/minetest.scm
+++ b/gnu/packages/minetest.scm
@@ -46,7 +46,6 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
-  #:use-module (guix build-system trivial)
   #:use-module (guix build-system minetest)
   #:use-module ((guix licenses) #:prefix license:))
 
@@ -719,7 +718,7 @@ track of important locations.")
         (base32 "1q2jj8181pjgsakl28xadv0z4sszq1lb5rpgj070wr0px6mp447p"))
        (file-name (git-file-name name version))))
     (build-system minetest-mod-build-system)
-    (home-page "http://advtrains.de/")
+    (home-page "https://advtrains.de/")
     (synopsis "Adds good-looking, realistic trains with realistic rails")
     (description
      "This mod features realistic trains and various equipment for railways,
diff --git a/gnu/packages/moe.scm b/gnu/packages/moe.scm
index 82db1621db..a1926f738b 100644
--- a/gnu/packages/moe.scm
+++ b/gnu/packages/moe.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2017 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2016, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2019, 2021, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,14 +28,14 @@
 (define-public moe
   (package
     (name "moe")
-    (version "1.12")
+    (version "1.13")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/moe/moe-"
                           version ".tar.lz"))
       (sha256
-       (base32 "1s51swk8h5k32r2z4i1pla2l15b0v0mh35lwsd5f1y16whmmz24a"))))
+       (base32 "0sql4r5g60k3rsz8vsr04rl5b873rwli1x75333xd29ga6y5g9a3"))))
     (build-system gnu-build-system)
     (native-inputs (list lzip))
     (inputs (list ncurses))
diff --git a/gnu/packages/mold.scm b/gnu/packages/mold.scm
new file mode 100644
index 0000000000..1e67f80081
--- /dev/null
+++ b/gnu/packages/mold.scm
@@ -0,0 +1,123 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Zhu Zihao <all_but_last@163.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages mold)
+  #:use-module (guix gexp)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages c)
+  #:use-module (gnu packages digest)
+  #:use-module (gnu packages tbb)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages compression)
+  #:use-module ((guix licenses) #:prefix license:))
+
+(define-public mold
+  (package
+    (name "mold")
+    (version "1.10.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rui314/mold")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1bqv1a93n3nks38k8fdc5i7v7ca2sav8n4xxaph0ikaqw1mkjcg7"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            (for-each
+             (lambda (x)
+               (delete-file-recursively (string-append "third-party/" x)))
+             '("mimalloc" "tbb" "xxhash" "zlib" "zstd"))))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags #~(list "-DMOLD_USE_SYSTEM_MIMALLOC=ON"
+                                "-DMOLD_USE_SYSTEM_TBB=ON")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'configure 'force-system-xxhash
+            (lambda _
+              (substitute* "common/common.h"
+                (("#include \"../third-party/xxhash/xxhash.h\"")
+                 "#include <xxhash.h>"))))
+          (add-before 'configure 'fix-compiler-name-in-test
+            (lambda _
+              (substitute* "test/elf/common.inc"
+                (("CC=\"\\$\\{TEST_CC:-cc\\}\"") "CC=gcc")
+                (("CXX=\"\\$\\{TEST_CXX:-c\\+\\+\\}\"")
+                 "CXX=g++"))))
+          (add-before 'configure 'disable-rpath-test
+            (lambda _
+              ;; This test fails because mold expect the RUNPATH as-is,
+              ;; but compiler in Guix will insert the path of gcc-lib and
+              ;; glibc into the output binary.
+              (delete-file "test/elf/rpath.sh"))))))
+    (inputs (list mimalloc openssl tbb xxhash zlib `(,zstd "lib")))
+    (home-page "https://github.com/rui314/mold")
+    (synopsis "Fast linker")
+    (description
+     "Mold is a faster drop-in replacement for existing linkers.
+It is designed to increase developer productivity by reducing build time,
+especially in rapid debug-edit-rebuild cycles.")
+    (license license:agpl3)))
+
+(define* (make-mold-wrapper mold #:key mold-as-ld?)
+  "Return a MOLD wrapper.  When MOLD-AS-LD? is true, create a 'ld' symlink that
+points to 'mold'."
+  (package
+    (inherit mold)
+    (name (if mold-as-ld? "mold-as-ld-wrapper" "mold-wrapper"))
+    (source #f)
+    (native-inputs '())
+    (inputs (list (make-ld-wrapper "ld.mold-wrapper" #:binutils mold
+                                   #:linker "ld.mold")
+                  (make-ld-wrapper "mold-wrapper" #:binutils mold #:linker
+                                   "mold")))
+    (propagated-inputs '())
+    (build-system trivial-build-system)
+    (arguments
+     (list #:builder
+           #~(let ((ld.mold (string-append #$(this-package-input
+                                              "ld.mold-wrapper")
+                                           "/bin/ld.mold"))
+                   (mold (string-append #$(this-package-input "mold-wrapper")
+                                        "/bin/mold")))
+               (mkdir #$output)
+               (mkdir (string-append #$output "/bin"))
+               (symlink ld.mold (string-append #$output "/bin/ld.mold"))
+               (symlink mold (string-append #$output "/bin/mold"))
+               (when #$mold-as-ld?
+                 (symlink ld.mold (string-append #$output "/bin/ld"))))))
+    (synopsis "Mold linker wrapper")
+    (description "This is a linker wrapper for Mold; 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.")))
+
+(define-public mold-wrapper
+  (make-mold-wrapper mold))
+
+(define-public mold-as-ld-wrapper
+  (make-mold-wrapper mold #:mold-as-ld? #t))
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 74ec7b6cdf..c0df1e501c 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -36,7 +36,6 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix build-system perl)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system gnu)
@@ -414,7 +413,7 @@ HTTP.  Features:
          "1bk29w09zcpsv8hp0g0al7nwrxa07z0ycls3mbh83wfavk83aprl"))))
     (build-system python-build-system)
     (native-inputs (list python-six))
-    (home-page "http://graphiteapp.org/")
+    (home-page "https://graphiteapp.org/")
     (synopsis "Fixed size round-robin style database for Graphite")
     (description "Whisper is one of three components within the Graphite
 project.  Whisper is a fixed-size database, similar in design and purpose to
@@ -444,7 +443,7 @@ historical data.")
            (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
     (propagated-inputs
      (list python-cachetools python-txamqp python-urllib3 python-whisper))
-    (home-page "http://graphiteapp.org/")
+    (home-page "https://graphiteapp.org/")
     (synopsis "Backend data caching and persistence daemon for Graphite")
     (description "Carbon is a backend data caching and persistence daemon for
 Graphite.  Carbon is responsible for receiving metrics over the network,
@@ -666,7 +665,7 @@ future system load (i.e., capacity planning).")
     (build-system gnu-build-system)
     (inputs (list ncurses))
     (arguments '(#:tests? #f)) ;; No included tests.
-    (home-page "http://www.maier-komor.de/hostscope.html")
+    (home-page "https://www.maier-komor.de/hostscope.html")
     (properties `((release-monitoring-url . ,home-page)))
     (synopsis
      "System monitoring tool for multiple hosts")
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 03e4485618..80e3b35469 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -212,7 +212,7 @@ whose primary goals are full compliance with the ID3v2 standard, portability
 across several platforms, and providing a powerful and feature-rich API with
 a highly stable and efficient implementation.")
    (license license:lgpl2.0+)
-   (home-page "http://id3lib.sourceforge.net/")))
+   (home-page "https://id3lib.sourceforge.net/")))
 
 (define-public taglib
   (package
@@ -377,7 +377,7 @@ automatic silence split, that can be used also to adjust cddb/cue splitpoints.
 
 This package contains the library.")
    (license license:gpl2+)
-   (home-page "http://mp3splt.sourceforge.net/mp3splt_page/home.php")))
+   (home-page "https://mp3splt.sourceforge.net/mp3splt_page/home.php")))
 
 (define-public mp3splt
   (package
@@ -404,12 +404,12 @@ automatic silence split, that can be used also to adjust cddb/cue splitpoints.
 
 This package contains the binary.")
    (license license:gpl2+)
-   (home-page "http://mp3splt.sourceforge.net/mp3splt_page/home.php")))
+   (home-page "https://mp3splt.sourceforge.net/mp3splt_page/home.php")))
 
 (define-public mpg123
   (package
     (name "mpg123")
-    (version "1.28.2")
+    (version "1.31.2")
     (source
      (origin
        (method url-fetch)
@@ -419,7 +419,7 @@ This package contains the binary.")
                    "https://www.mpg123.org/download/mpg123-"
                    version ".tar.bz2")))
        (sha256
-        (base32 "006v44nz4nkpgvxz1k2vbbrfpa2m47hyydscs0wf3iysiyvd9vvy"))))
+        (base32 "1pn777l9m7qbsx4v93gnav8bf6yi3skzdz8x81mkpx1ibs824zxi"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--with-default-audio=pulse")))
     (native-inputs
@@ -456,7 +456,7 @@ command-line tool as well as a C library, libmpg123.")
        ("libmad" ,libmad)
        ("libid3tag" ,libid3tag)
        ("libao" ,ao)))
-    (home-page "http://mpg321.sourceforge.net/")
+    (home-page "https://mpg321.sourceforge.net/")
     (synopsis "Command-line MP3 player")
     (description "Mpg321 is a command-line mp3 player.  mpg321 is used for
 frontends, as an mp3 player and as an mp3 to wave file decoder (primarily for
@@ -497,7 +497,7 @@ use with CD-recording software).")
                            Libs: -L${libdir} -lmp3lame~@
                            Cflags: -I${includedir}~%"
                            out ,version)))))))))
-    (home-page "http://lame.sourceforge.net/")
+    (home-page "https://lame.sourceforge.net/")
     (synopsis "MPEG Audio Layer III (MP3) encoder")
     (description "LAME is a high quality MPEG Audio Layer III (MP3) encoder.")
     (license license:lgpl2.0)))
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index e432edf0ae..6b7c78c71b 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
-;;; Copyright © 2020–2022 Simon Streit <simon@netpanic.org>
+;;; Copyright © 2020–2023 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Noah Evans <noah@nevans.me>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -49,6 +49,7 @@
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages cmake) ;for MPD
   #:use-module (gnu packages cpp)
+  #:use-module (gnu packages file-systems)
   #:use-module (gnu packages freedesktop) ;elogind
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
@@ -81,7 +82,8 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
-  #:use-module (gnu packages xiph))
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xml))
 
 (define-public libmpdclient
   (package
@@ -116,7 +118,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.23.11")
+    (version "0.23.12")
     (source (origin
               (method url-fetch)
               (uri
@@ -125,7 +127,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1afwvw2670yz3kxzlqjlg9r8ra8fjihj97hgc6skiwnzz6lfgd7d"))))
+                "1rq2hyfvwwri3sivab747csza2i096y7m8563rl5mhpchhiadz5p"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -144,41 +146,50 @@ interfacing MPD in the C, C++ & Objective C languages.")
                  (string-append "_" all)))
               (substitute* "meson.build"
                 (("systemd_dep,") "systemd_dep, _systemd_dep,")))))))
-    (inputs (list ao
-                  alsa-lib
-                  avahi
-                  boost
-                  curl
-                  elogind
-                  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
-                  pipewire
-                  pulseaudio
-                  sqlite
-                  zlib))
+    (inputs (append
+             (if (target-linux?) (list liburing) '())
+             (list ao
+                   alsa-lib
+                   avahi
+                   boost
+                   chromaprint
+                   curl
+                   elogind
+                   expat
+                   ffmpeg
+                   flac
+                   fmt
+                   glib
+                   icu4c
+                   ;; The LAME decoder comes from FFmpeg, but is added here so that
+                   ;; configure picks up the LAME encoder.
+                   lame
+                   libgme
+                   libid3tag
+                   libmpdclient
+                   libnfs
+                   libopenmpt
+                   libsamplerate
+                   libshout
+                   libsndfile
+                   libvorbis
+                   opus
+                   pcre2
+                   pipewire
+                   pulseaudio
+                   soxr
+                   sqlite
+                   yajl
+                   zlib
+                   zziplib)))
     (native-inputs (list cmake pkg-config python-sphinx))
     ;; Missing optional inputs:
-    ;;   yajl
     ;;   libcdio_paranoia
     ;;   libmms
     ;;   libadplug
     ;;   libaudiofile
     ;;   faad2
     ;;   fluidsynth
-    ;;   libgme
-    ;;   libshout
     ;;   libmpg123
     ;;   libmodplug
     ;;   libmpcdec
@@ -433,27 +444,30 @@ other MPD frontends.")
     (build-system gnu-build-system)
     ;; Manually wrap the binary, because we’re not using python-build-system.
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out         (assoc-ref outputs "out"))
-                   (python-path (getenv "GUIX_PYTHONPATH")))
-               (wrap-program (string-append out "/bin/mpDris2")
-                 `("GUIX_PYTHONPATH" ":" prefix (,python-path)))
-               #t))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'wrap-program
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((python-path (getenv "GUIX_PYTHONPATH")))
+                (wrap-program (string-append #$output "/bin/mpDris2")
+                  `("GUIX_PYTHONPATH" ":" prefix (,python-path)))))))))
     (inputs
-     (list python-mpd2 python-dbus python-pygobject python))             ; Sets GUIX_PYTHONPATH.
-    ;; For bootstrapping.
+     (list bash-minimal
+           python
+           python-dbus
+           python-mpd2
+           python-mutagen
+           python-pygobject))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("which" ,which)
-       ("intltool" ,intltool)))
+     (list autoconf
+           automake
+           gettext-minimal
+           intltool
+           which))
     (synopsis "MPRIS V2.1 support for MPD")
-    (description "Client for the Music Player Daemon providing MPRIS 2
-support")
+    (description "mpDris2 is a client for the Music Player Daemon providing
+MPRIS 2 support.")
     (home-page "https://github.com/eonpatapon/mpDris2")
     (license license:gpl3+)))
 
@@ -586,7 +600,7 @@ mpdevil loads all tags and covers on demand.")
 (define-public mympd
   (package
     (name "mympd")
-    (version "10.2.0")
+    (version "10.2.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -595,7 +609,7 @@ mpdevil loads all tags and covers on demand.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "16f4yyjjgl6d6pqnnal5d00s5cgrg1m6b6i2bmg5n86gns8n9chv"))))
+                "0544vx9x103394mz2x92ycfj5lh59xrzcvagi4q0jb9b1hh44s6p"))))
     (build-system cmake-build-system)
     (arguments
      (list #:tests? #f)) ; no test target
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 70b14c30b3..baef62616f 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -25,6 +25,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages mpi)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
@@ -53,8 +54,6 @@
   #:use-module (ice-9 match))
 
 (define-public hwloc-1
-  ;; Note: For now we keep 1.x as the default because many packages have yet
-  ;; to migrate to 2.0.
   (package
     (name "hwloc")
     (version "1.11.13")
@@ -140,7 +139,6 @@ bind processes, and much more.")
     (license license:bsd-3)))
 
 (define-public hwloc-2
-  ;; Note: 2.x isn't the default yet, see above.
   (package
     (inherit hwloc-1)
     (version "2.9.0")
@@ -167,10 +165,19 @@ bind processes, and much more.")
                (substitute* "tests/hwloc/linux-libnuma.c"
                  (("numa_available\\(\\)")
                   "-1"))))
-           (add-before 'check 'skip-test-that-requires-/sys
+           (add-before 'check 'skip-tests-that-require-/sys
              (lambda _
                ;; 'test-gather-topology.sh' requires /sys as of 2.9.0; skip it.
-               (setenv "HWLOC_TEST_GATHER_TOPOLOGY" "0")))
+               (setenv "HWLOC_TEST_GATHER_TOPOLOGY" "0")
+
+               ;; 'hwloc_backends' also requires /sys on non-x86 systems, for
+               ;; which hwloc lacks a topology backend not reliant on the
+               ;; operating system; skip it also on these machines.
+               (substitute* "tests/hwloc/hwloc_backends.c"
+                 ,@(if (not (target-x86?))
+                       '((("putenv\\(\\(char \\*\\) \"HWLOC_L" all)
+                          (string-append "exit (77);\n" all)))
+                       '()))))
            (add-before 'check 'skip-test-that-fails-on-qemu
              (lambda _
                ;; Skip test that fails on emulated hardware due to QEMU bug:
@@ -191,13 +198,13 @@ bind processes, and much more.")
     (version "4.1.4")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "https://www.open-mpi.org/software/ompi/v"
-                          (version-major+minor version)
-                          "/downloads/openmpi-" version ".tar.bz2"))
-      (sha256
-       (base32 "03ckngrff1cl0l81vfvrfhp99rbgk7s0633kr1l468yibwbjx4cj"))
-      (patches (search-patches "openmpi-mtl-priorities.patch"))))
+       (method url-fetch)
+       (uri (string-append "https://www.open-mpi.org/software/ompi/v"
+                           (version-major+minor version)
+                           "/downloads/openmpi-" version ".tar.bz2"))
+       (sha256
+        (base32 "03ckngrff1cl0l81vfvrfhp99rbgk7s0633kr1l468yibwbjx4cj"))
+       (patches (search-patches "openmpi-mtl-priorities.patch"))))
 
     (properties
      ;; Tell the 'generic-html' updater to monitor this URL for updates.
@@ -228,68 +235,69 @@ bind processes, and much more.")
      (list pkg-config perl))
     (outputs '("out" "debug"))
     (arguments
-     `(#:configure-flags `("--enable-mpi-ext=affinity" ;cr doesn't work
-                           "--with-sge"
-
-                           ,@(if ,(package? (this-package-input "valgrind"))
-                               `("--enable-memchecker"
-                                 "--with-valgrind")
-                               `("--without-valgrind"))
-
-                           "--with-hwloc=external"
-                           "--with-libevent"
-
-                           ;; Help 'orterun' and 'mpirun' find their tools
-                           ;; under $prefix by default.
-                           "--enable-mpirun-prefix-by-default"
-
-                           ;; InfiniBand support
-                           "--enable-openib-control-hdr-padding"
-                           "--enable-openib-dynamic-sl"
-                           "--enable-openib-udcm"
-                           "--enable-openib-rdmacm"
-                           "--enable-openib-rdmacm-ibaddr"
-
-                           ;; Enable support for SLURM's Process Manager
-                           ;; Interface (PMI).
-                           ,(string-append "--with-pmi="
-                                           (assoc-ref %build-inputs "slurm")))
-       #:phases (modify-phases %standard-phases
-                  ;; opensm is needed for InfiniBand support.
-                  (add-after 'unpack 'find-opensm-headers
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (setenv "C_INCLUDE_PATH"
-                              (search-input-directory inputs
-                                                      "/include/infiniband"))
-                      (setenv "CPLUS_INCLUDE_PATH"
-                              (search-input-directory inputs
-                                                      "/include/infiniband"))))
-                  (add-before 'build 'remove-absolute
-                    (lambda _
-                      ;; Remove compiler absolute file names (OPAL_FC_ABSOLUTE
-                      ;; etc.) to reduce the closure size.  See
-                      ;; <https://lists.gnu.org/archive/html/guix-devel/2017-07/msg00388.html>
-                      ;; and
-                      ;; <https://www.mail-archive.com/users@lists.open-mpi.org//msg31397.html>.
-                      (substitute* '("orte/tools/orte-info/param.c"
-                                     "oshmem/tools/oshmem_info/param.c"
-                                     "ompi/tools/ompi_info/param.c")
-                        (("_ABSOLUTE") ""))
-                      ;; Avoid valgrind (which pulls in gdb etc.).
-                      (substitute*
-                          '("./ompi/mca/io/romio321/src/io_romio321_component.c")
-                        (("MCA_io_romio321_COMPLETE_CONFIGURE_FLAGS")
-                         "\"[elided to reduce closure]\""))))
-                  (add-before 'build 'scrub-timestamps ;reproducibility
-                    (lambda _
-                      (substitute* '("ompi/tools/ompi_info/param.c"
-                                     "orte/tools/orte-info/param.c"
-                                     "oshmem/tools/oshmem_info/param.c")
-                        ((".*(Built|Configured) on.*") ""))))
-                  (add-after 'install 'remove-logs ;reproducibility
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((out (assoc-ref outputs "out")))
-                        (for-each delete-file (find-files out "config.log"))))))))
+     (list
+      #:configure-flags #~`("--enable-mpi-ext=affinity" ;cr doesn't work
+                            "--with-sge"
+
+                            #$@(if (package? (this-package-input "valgrind"))
+                                   #~("--enable-memchecker"
+                                      "--with-valgrind")
+                                   #~("--without-valgrind"))
+
+                            "--with-hwloc=external"
+                            "--with-libevent"
+
+                            ;; Help 'orterun' and 'mpirun' find their tools
+                            ;; under $prefix by default.
+                            "--enable-mpirun-prefix-by-default"
+
+                            ;; InfiniBand support
+                            "--enable-openib-control-hdr-padding"
+                            "--enable-openib-dynamic-sl"
+                            "--enable-openib-udcm"
+                            "--enable-openib-rdmacm"
+                            "--enable-openib-rdmacm-ibaddr"
+
+                            ;; Enable support for SLURM's Process Manager
+                            ;; Interface (PMI).
+                            ,(string-append "--with-pmi="
+                                            #$(this-package-input "slurm")))
+      #:phases #~(modify-phases %standard-phases
+                   ;; opensm is needed for InfiniBand support.
+                   (add-after 'unpack 'find-opensm-headers
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (setenv "C_INCLUDE_PATH"
+                               (search-input-directory inputs
+                                                       "/include/infiniband"))
+                       (setenv "CPLUS_INCLUDE_PATH"
+                               (search-input-directory inputs
+                                                       "/include/infiniband"))))
+                   (add-before 'build 'remove-absolute
+                     (lambda _
+                       ;; Remove compiler absolute file names (OPAL_FC_ABSOLUTE
+                       ;; etc.) to reduce the closure size.  See
+                       ;; <https://lists.gnu.org/archive/html/guix-devel/2017-07/msg00388.html>
+                       ;; and
+                       ;; <https://www.mail-archive.com/users@lists.open-mpi.org//msg31397.html>.
+                       (substitute* '("orte/tools/orte-info/param.c"
+                                      "oshmem/tools/oshmem_info/param.c"
+                                      "ompi/tools/ompi_info/param.c")
+                         (("_ABSOLUTE") ""))
+                       ;; Avoid valgrind (which pulls in gdb etc.).
+                       (substitute*
+                           '("./ompi/mca/io/romio321/src/io_romio321_component.c")
+                         (("MCA_io_romio321_COMPLETE_CONFIGURE_FLAGS")
+                          "\"[elided to reduce closure]\""))))
+                   (add-before 'build 'scrub-timestamps ;reproducibility
+                     (lambda _
+                       (substitute* '("ompi/tools/ompi_info/param.c"
+                                      "orte/tools/orte-info/param.c"
+                                      "oshmem/tools/oshmem_info/param.c")
+                         ((".*(Built|Configured) on.*") ""))))
+                   (add-after 'install 'remove-logs ;reproducibility
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (let ((out (assoc-ref outputs "out")))
+                         (for-each delete-file (find-files out "config.log"))))))))
     (home-page "https://www.open-mpi.org")
     (synopsis "MPI-3 implementation")
     (description
@@ -309,7 +317,7 @@ software vendors, application developers and computer science researchers.")
     (arguments
      (substitute-keyword-arguments (package-arguments openmpi)
        ((#:configure-flags flags)
-        `(cons "--enable-mpi-cxx" ,flags))))
+        #~(cons "--enable-mpi-cxx" #$flags))))
     (synopsis "C++ bindings for MPI")))
 
 ;; TODO: javadoc files contain timestamps.
@@ -325,34 +333,35 @@ software vendors, application developers and computer science researchers.")
        ,@(package-native-inputs openmpi)))
     (outputs '("out"))
     (arguments
-     `(#:modules ((guix build gnu-build-system)
+     (cons*
+      #:modules '((guix build gnu-build-system)
                   ((guix build ant-build-system) #:prefix ant:)
                   (guix build utils))
-       #:imported-modules ((guix build ant-build-system)
+      #:imported-modules `((guix build ant-build-system)
                            ,@%gnu-build-system-modules)
-       ,@(substitute-keyword-arguments (package-arguments openmpi)
-           ((#:configure-flags flags)
-            `(cons "--enable-mpi-java" ,flags))
-           ((#:make-flags flags ''())
-            `(append '("-C" "ompi/mpi/java")
-                     ,flags))
-           ((#:phases phases)
-            `(modify-phases ,phases
-               ;; We could provide the location of the JDK in the configure
-               ;; flags, but since the configure flags are embedded in the
-               ;; info binaries that would leave a reference to the JDK in
-               ;; the "out" output.  To avoid this we set JAVA_HOME.
-               (add-after 'unpack 'set-JAVA_HOME
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
-                   #t))
-               (add-after 'unpack 'link-with-existing-mpi-libraries
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (substitute* "ompi/mpi/java/c/Makefile.in"
-                     (("\\$\\(top_builddir\\)/ompi/lib@OMPI_LIBMPI_NAME@.la")
-                      (search-input-file inputs "/lib/libmpi.la")))))
-               (add-after 'install 'strip-jar-timestamps
-                 (assoc-ref ant:%standard-phases 'strip-jar-timestamps)))))))
+      (substitute-keyword-arguments (package-arguments openmpi)
+        ((#:configure-flags flags)
+         #~(cons "--enable-mpi-java" #$flags))
+        ((#:make-flags flags ''())
+         #~(append '("-C" "ompi/mpi/java")
+                   #$flags))
+        ((#:phases phases)
+         #~(modify-phases #$phases
+             ;; We could provide the location of the JDK in the configure
+             ;; flags, but since the configure flags are embedded in the
+             ;; info binaries that would leave a reference to the JDK in
+             ;; the "out" output.  To avoid this we set JAVA_HOME.
+             (add-after 'unpack 'set-JAVA_HOME
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+                 #t))
+             (add-after 'unpack 'link-with-existing-mpi-libraries
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (substitute* "ompi/mpi/java/c/Makefile.in"
+                   (("\\$\\(top_builddir\\)/ompi/lib@OMPI_LIBMPI_NAME@.la")
+                    (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")))
 
 (define-public openmpi-thread-multiple
@@ -361,7 +370,7 @@ software vendors, application developers and computer science researchers.")
     (arguments
      (substitute-keyword-arguments (package-arguments openmpi)
        ((#:configure-flags flags)
-        `(cons "--enable-mpi-thread-multiple" ,flags))))
+        #~(cons "--enable-mpi-thread-multiple" #$flags))))
     (description "This version of Open@tie{}MPI has an implementation of
 @code{MPI_Init_thread} that provides @code{MPI_THREAD_MULTIPLE}.  This won't
 work correctly with all transports (such as @code{openib}), and the
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index dab6c0d01e..6ba08be3a3 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -158,7 +158,7 @@ correct rounding.")
 for performing arithmetic on complex numbers.  It supports arbitrarily high
 precision and correctly rounds the results.")
    (license lgpl3+)
-   (home-page "http://www.multiprecision.org/mpc/")))
+   (home-page "https://www.multiprecision.org/mpc/")))
 
 (define-public mpfi
   ;; The last release, 1.5.4, lacks source files such as div_ext.c and others
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 4b0cea5198..433e3c3e0b 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2019 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015-2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016, 2017, 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
@@ -46,9 +46,11 @@
 ;;; Copyright © 2021 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;; Copyright © 2022, 2023 Sughosha <sughosha@disroot.org>
 ;;; Copyright © 2022 Remco van 't Veer <remco@remworks.net>
-;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 Wamm K. D. <jaft.r@outlook.com>
 ;;; Copyright © 2022 Jose G Perez Taveras <josegpt27@gmail.com>
+;;; Copyright © 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -362,7 +364,7 @@ more.")
      (list wxwidgets glib alsa-lib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://ariamaestosa.sourceforge.net/")
+    (home-page "https://ariamaestosa.sourceforge.net/")
     (synopsis "MIDI sequencer and editor")
     (description
      "Aria Maestosa is a MIDI sequencer and editor.  It lets you compose, edit
@@ -764,17 +766,15 @@ settings (aliasing, linear interpolation and cubic interpolation).")
              (substitute* "CMakeLists.txt"
                (("/usr/share/pixmaps")
                 (string-append (assoc-ref outputs "out")
-                               "/share/pixmaps")))
-             #t)))))
+                               "/share/pixmaps"))))))))
     (native-inputs
-     `(("cppunit" ,cppunit)
-       ("pkg-config" ,pkg-config)
-       ("qtlinguist" ,qttools-5)))
+     (list cppunit
+           pkg-config
+           qttools-5))
     (inputs
      (list alsa-lib
            jack-1
            ;; ("ladspa" ,ladspa) ; require LADSPA_PATH to be set
-           lash
            libarchive
            liblo
            libsndfile
@@ -783,7 +783,7 @@ settings (aliasing, linear interpolation and cubic interpolation).")
            qtbase-5
            qtxmlpatterns
            zlib))
-    (home-page "http://www.hydrogen-music.org")
+    (home-page "http://hydrogen-music.org/")
     (synopsis "Drum machine")
     (description
      "Hydrogen is an advanced drum machine for GNU/Linux.  Its main goal is to
@@ -1308,7 +1308,7 @@ biographies, reviews and more.")
            jack-2
            json-c
            pulseaudio))
-    (home-page "http://lingot.nongnu.org/")
+    (home-page "https://lingot.nongnu.org/")
     (synopsis "Accurate & configurable musical instrument tuner")
     (description
      "LINGOT is a musical instrument tuner.  It's accurate, easy to use, and
@@ -1386,7 +1386,7 @@ and auto-mapping slices to MIDI note numbers.")
 (define-public lilypond
   (package
     (name "lilypond")
-    (version "2.20.0")
+    (version "2.24.0")
     (source
      (origin
        (method url-fetch)
@@ -1394,79 +1394,54 @@ and auto-mapping slices to MIDI note numbers.")
                            "v" (version-major+minor version) "/"
                            "lilypond-" version ".tar.gz"))
        (sha256
-        (base32 "0qd6pd4siss016ffmcyw5qc6pr2wihnvrgd4kh1x725w7wr02nar"))))
+        (base32 "0scbyzbxqnzgibls62npg2i3sywnb146gw7jlvinj9dhj8xvxv9w"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ;out-test/collated-files.html fails
-       #:out-of-source? #t
-       #:make-flags '("conf=www")       ;to generate images for info manuals
-       #:configure-flags
-       (list "CONFIGURATION=www"
-             (string-append "--with-texgyre-dir="
-                            (assoc-ref %build-inputs "font-tex-gyre")
-                            "/share/fonts/opentype/"))
-       #:phases
-       (modify-phases %standard-phases
-         (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") "\"")))))
-         (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"
-               (("SHELL=/bin/sh") "SHELL=sh")
-               ;; When checking the fontforge version do not consider the
-               ;; version string that's part of the directory.
-               (("head -n") "tail -n")
-               ;; Also allow for SOURCE_DATE_EPOCH = 0 in fontforge.
-               (("20110222") "19700101"))
-             (setenv "out" "www")
-             (setenv "conf" "www")))
-         (add-after 'install 'install-info
-           (lambda _
-             (invoke "make"
-                     "-j" (number->string (parallel-job-count))
-                     "conf=www" "install-info"))))))
+      (list #:tests? #f                      ;out-test/collated-files.html fails
+            #:out-of-source? #t
+            #:configure-flags
+            #~(list "--disable-documentation" "GUILE_FLAVOR=guile-3.0")
+            #:phases
+            #~(modify-phases %standard-phases
+                (add-after 'unpack 'fix-path-references
+                  (lambda* (#:key inputs #:allow-other-keys)
+                    (substitute* "scm/backend-library.scm"
+                      (("\\(search-executable '\\(\"gs\"\\)\\)")
+                       (string-append "\"" (search-input-file inputs "bin/gs") "\""))
+                      (("\"/bin/sh\"")
+                       (string-append "\"" (search-input-file inputs "bin/sh") "\""))))))))
     (inputs
-     `(("guile" ,guile-1.8)
-       ("font-dejavu" ,font-dejavu)
-       ("font-tex-gyre" ,font-tex-gyre)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("ghostscript" ,ghostscript)
-       ("pango" ,pango)
-       ("python" ,python-2)))
+     (list extractpdfmark
+           font-dejavu
+           font-tex-gyre
+           fontconfig
+           freetype
+           ghostscript
+           guile-3.0
+           pango
+           python))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)
-       ("flex" ,flex)
-       ("fontforge" ,fontforge)
-       ("dblatex" ,dblatex)
-       ("gettext" ,gettext-minimal)
-       ("imagemagick" ,imagemagick)
-       ("netpbm" ,netpbm)               ;for pngtopnm
-       ("texlive" ,(texlive-updmap.cfg (list texlive-metapost
-                                        texlive-epsf
-                                        texlive-lh
-                                        texlive-latex-cyrillic)))
-       ("texinfo" ,texinfo)
-       ("texi2html" ,texi2html-1.82)
-       ("rsync" ,rsync)
-       ("pkg-config" ,pkg-config)
-       ("zip" ,zip)))
-    (home-page "http://www.lilypond.org/")
+     (list bison
+           dblatex
+           flex
+           fontforge
+           gettext-minimal
+           imagemagick
+           netpbm
+           perl
+           pkg-config
+           rsync
+           texinfo
+           texi2html-1.82
+           (texlive-updmap.cfg
+            (list texlive-epsf
+                  texlive-fontinst
+                  texlive-latex-cyrillic
+                  texlive-lh
+                  texlive-lm
+                  texlive-metapost))
+           zip))
+    (home-page "https://lilypond.org")
     (synopsis "Music typesetting")
     (description
      "GNU LilyPond is a music typesetter, which produces high-quality sheet
@@ -2607,7 +2582,7 @@ Paul), and specifically the PaulXStretch version from Xenakios.")
            font-bitstream-vera))
     (native-inputs
      (list help2man pkg-config))
-    (home-page "http://setbfree.org")
+    (home-page "https://setbfree.org")
     (synopsis "Tonewheel organ")
     (description
      "setBfree is a MIDI-controlled, software synthesizer designed to imitate
@@ -2637,27 +2612,28 @@ Laurens Hammond and Don Leslie.")
              (when (not (or (string-prefix? "x86_64" system)
                             (string-prefix? "i686" system)))
                (substitute* "bristol/Makefile.in"
-                 (("-msse -mfpmath=sse") "")))
-             #t))
+                 (("-msse -mfpmath=sse") "")))))
+         ;; This is needed to build brighton
+         (add-after 'unpack 'add-fcommon
+           (lambda _
+             (setenv "CFLAGS" "-fcommon")))
          ;; alsa-lib 1.1.x no longer provides iatomic.h.  That's okay because
          ;; bristol actually doesn't use it.
          (add-after 'unpack 'do-not-use-alsa-iatomic
            (lambda _
              (substitute* "libbristolaudio/audioEngineJack.c"
-               (("#include <alsa/iatomic.h>") ""))
-             #t))
+               (("#include <alsa/iatomic.h>") ""))))
          ;; We know that Bristol has been linked with JACK and we don't have
          ;; ldd, so we can just skip this check.
          (add-after 'unpack 'do-not-grep-for-jack
            (lambda _
              (substitute* "bin/startBristol.in"
-               (("ldd `which bristol` | grep jack") "echo guix"))
-             #t)))))
+               (("ldd `which bristol` | grep jack") "echo guix")))))))
     (inputs
-     (list alsa-lib jack-1 liblo libx11))
+     (list alsa-lib jack-2 liblo libx11))
     (native-inputs
      (list pkg-config))
-    (home-page "http://bristol.sourceforge.net/")
+    (home-page "https://bristol.sourceforge.net/")
     (synopsis "Synthesizer emulator")
     (description
      "Bristol is an emulation package for a number of different @code{classic}
@@ -2930,7 +2906,7 @@ main purpose is to liberate raw audio rendering from audio and MIDI drivers.")
      (list alsa-lib))
     (native-inputs
      (list unzip))
-    (home-page "http://portmedia.sourceforge.net/portmidi/")
+    (home-page "https://portmedia.sourceforge.net/portmidi/")
     (synopsis "Library for MIDI I/O")
     (description
      "PortMidi is a library supporting real-time input and output of MIDI data
@@ -2963,7 +2939,7 @@ using a system-independent interface.")
      (list portmidi alsa-lib))
     (native-inputs
      (list python-cython unzip))
-    (home-page "http://portmedia.sourceforge.net/portmidi/")
+    (home-page "https://portmedia.sourceforge.net/portmidi/")
     (synopsis "Python bindings to PortMidi")
     (description
      "This package provides Python bindings to the PortMidi library.")
@@ -2991,7 +2967,7 @@ using a system-independent interface.")
            python-ly
            python-poppler-qt5
            python-pyportmidi
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-sip))
     (home-page "https://www.frescobaldi.org/")
     (synopsis "LilyPond sheet music text editor")
@@ -3127,7 +3103,7 @@ instrument or MIDI file player.")
     (native-inputs
      (list pkg-config
            ruby))
-    (home-page "http://zynaddsubfx.sf.net/")
+    (home-page "https://zynaddsubfx.sf.net/")
     (synopsis "Software synthesizer")
     (description
      "ZynAddSubFX is a feature heavy realtime software synthesizer.  It offers
@@ -3149,48 +3125,47 @@ capabilities, custom envelopes, effects, etc.")
         (base32 "1axrbk1qwsiq77g5957db744481zb2v158psnk2w530wxhls2442"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f                      ; there are no tests
-       #:configure-flags
-       (list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
-                            (assoc-ref %outputs "out") "/share"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'enter-dir
-           (lambda _ (chdir "src") #t))
-         ;; Move SSE compiler optimization flags from generic target to
-         ;; athlon64 and core2 targets, because otherwise the build would fail
-         ;; on non-Intel machines.
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* (list "src/Interface/InterChange.cpp"
-                                "src/Misc/Bank.cpp"
-                                "src/Misc/Config.cpp")
-               (("/usr/share") (string-append (assoc-ref outputs "out")
-                                              "/share")))))
-         (add-after 'unpack 'remove-sse-flags-from-generic-target
-           (lambda _
-             (substitute* "src/CMakeLists.txt"
-               (("-msse -msse2 -mfpmath=sse") "")
-               (("-march=(athlon64|core2)" flag)
-                (string-append flag " -msse -msse2 -mfpmath=sse")))
-             #t)))))
+     (list
+      #:tests? #f                       ; there are no tests
+      #:configure-flags
+      #~(list (string-append "-DCMAKE_INSTALL_DATAROOTDIR="
+                             #$output "/share"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'configure 'enter-dir
+            (lambda _ (chdir "src")))
+          (add-after 'unpack 'fix-paths
+            (lambda _
+              (substitute* (list "src/Interface/InterChange.cpp"
+                                 "src/Misc/Bank.cpp"
+                                 "src/Misc/Config.cpp")
+                (("/usr/share") (string-append #$output "/share")))))
+          ;; Move SSE compiler optimization flags from generic target to
+          ;; athlon64 and core2 targets, because otherwise the build would fail
+          ;; on non-Intel machines.
+          (add-after 'unpack 'remove-sse-flags-from-generic-target
+            (lambda _
+              (substitute* "src/CMakeLists.txt"
+                (("-msse -msse2 -mfpmath=sse") "")
+                (("-march=(athlon64|core2)" flag)
+                 (string-append flag " -msse -msse2 -mfpmath=sse"))))))))
     (inputs
-     `(("boost" ,boost)
-       ("fftwf" ,fftwf)
-       ("alsa-lib" ,alsa-lib)
-       ("jack" ,jack-1)
-       ("fontconfig" ,fontconfig)
-       ("minixml" ,minixml)
-       ("mesa" ,mesa)
-       ("fltk" ,fltk)
-       ("lv2" ,lv2)
-       ("readline" ,readline)
-       ("ncurses" ,ncurses)
-       ("cairo" ,cairo)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           boost
+           cairo
+           fftwf
+           fltk
+           fontconfig
+           jack-2
+           lv2
+           mesa
+           minixml
+           ncurses
+           readline
+           zlib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://yoshimi.sourceforge.net/")
+    (home-page "https://yoshimi.sourceforge.net/")
     (synopsis "Multi-paradigm software synthesizer")
     (description
      "Yoshimi is a fork of ZynAddSubFX, a feature-heavy real-time software
@@ -3230,7 +3205,7 @@ on the library.")
 (define-public jack-keyboard
   (package
     (name "jack-keyboard")
-    (version "2.5")
+    (version "2.7.2")
     (source
      (origin
        (method url-fetch)
@@ -3238,13 +3213,21 @@ on the library.")
                            version "/jack-keyboard-" version ".tar.gz"))
        (sha256
         (base32
-         "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
-    (build-system gnu-build-system)
-    (inputs
-     (list jack-1 lash gtk+-2))
-    (native-inputs
-     (list pkg-config))
-    (home-page "http://jack-keyboard.sourceforge.net/")
+         "1z34ga1z6ivgxbp0afsfghz7rn6s8vc9fxnb9ini8mx0dackr5ar"))))
+    (build-system cmake-build-system)
+    ;; Disable Lash support, as it is unmaintained and depends on Python 2.
+    (arguments
+     (list #:tests? #f                  ;no test suite
+           #:configure-flags
+           #~(list "-DLashEnable=OFF"
+                   ;; XXX: FindGTK2.cmake from CMake expects the
+                   ;; headers to be in FHS locations; give it some
+                   ;; clues.
+                   (string-append "-DGTK2_ADDITIONAL_SUFFIXES="
+                                  "lib/glib-2.0;" ;for glibconfig.h
+                                  "lib/gtk-2.0")))) ;for gdkconfig.h
+    (inputs (list jack-2 gtk+-2))
+    (home-page "https://jack-keyboard.sourceforge.net/")
     (synopsis "Virtual MIDI keyboard")
     (description "Jack-keyboard is a virtual MIDI keyboard, a program that
 allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
@@ -3275,7 +3258,7 @@ allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
      (list pkg-config which))
     (inputs
      (list gtk+-2
-           jack-1
+           jack-2
            libogg
            liblo
            lame
@@ -3325,12 +3308,12 @@ can connect to any JACK port and record the output into a stereo WAV file.")
     (native-inputs
      (list pkg-config))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("python" ,python-wrapper)
-       ("python-pyudev" ,python-pyudev)
-       ("python-pyxdg" ,python-pyxdg)
-       ("python-dbus" ,python-dbus)
-       ("python-pygobject" ,python-pygobject)))
+     (list alsa-lib
+           python-dbus
+           python-pygobject
+           python-pyudev
+           python-pyxdg
+           python-wrapper))
     (home-page "https://github.com/SpotlightKid/jack-select")
     (synopsis "Systray application to quickly change the JACK-DBus configuration")
     (description "This application displays an icon in the system tray (also
@@ -3383,7 +3366,7 @@ computer's keyboard.")
      (list minixml jack-1 alsa-lib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://aj-snapshot.sourceforge.net/")
+    (home-page "https://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
 snapshots of the connections made between JACK and/or ALSA clients.  Because
@@ -3695,7 +3678,7 @@ event-based scripts for scrobbling, notifications, etc.")
 (define-public picard
   (package
     (name "picard")
-    (version "2.8.3")
+    (version "2.8.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3703,7 +3686,7 @@ event-based scripts for scrobbling, notifications, etc.")
                     "picard/picard-" version ".tar.gz"))
               (sha256
                (base32
-                "0h4yk1y4k23hkfk7k2in27rd34ani857m0vvn7xa8vxizz951dka"))))
+                "1kjl7iqgvvrv7mygsb7491cz872gm334489nyj0v8b79bxnzghdi"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -3726,7 +3709,7 @@ event-based scripts for scrobbling, notifications, etc.")
     (inputs
      (list chromaprint
            python-discid
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-mutagen
            python-fasteners
            python-pyyaml
@@ -4030,28 +4013,27 @@ using the beets FetchArt plugin.")
                '(begin
                   (delete-file-recursively "resources/music")
                   (substitute* "CMakeLists.txt"
-                    (("add_subdirectory\\(resources/music\\)") ""))
-                  #t))))
+                    (("add_subdirectory\\(resources/music\\)") ""))))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no check target
        ;; This flag ensures that MilkyTracker links with the JACK library.
        #:configure-flags '("-DCMAKE_CXX_FLAGS=-ljack")))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("lhasa" ,lhasa)
-       ("jack" ,jack-1)
-       ("rtmidi" ,rtmidi-4.0)
-       ("sdl" ,sdl2)
-       ("zlib" ,zlib)
-       ("zziplib" ,zziplib)))
+     (list alsa-lib
+           lhasa
+           jack-2
+           rtmidi-4.0
+           sdl2
+           zlib
+           zziplib))
     (native-inputs
      (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
-    the popular DOS program Fasttracker II, with special playback modes available
-    for improved Amiga ProTracker 2/3 compatibility.")
+    (description "MilkyTracker is a music application for creating .MOD and
+.XM module files.  It attempts to recreate the module replay and user
+experience of the popular DOS program Fasttracker II, with special playback
+modes available for improved Amiga ProTracker 2/3 compatibility.")
     (home-page "https://milkytracker.titandemo.org/")
     ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
     (license (list license:bsd-3 license:gpl3+))))
@@ -4088,7 +4070,7 @@ using the beets FetchArt plugin.")
     (inputs
      (list alsa-lib ; for asound dependency
            libx11 libxext sdl))
-    (home-page "http://schismtracker.org")
+    (home-page "https://schismtracker.org")
     (synopsis "Oldschool sample-based music composition tool")
     (description
      "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
@@ -4218,7 +4200,7 @@ formats, including most audio formats recognized by FFMpeg.")
     (version "1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.fourmilab.ch/webtools/midicsv/"
+              (uri (string-append "https://www.fourmilab.ch/webtools/midicsv/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
@@ -4236,7 +4218,7 @@ processed by a program to transform the MIDI data (for example, to key
 transpose a composition or extract a track from a multi-track sequence).  A
 CSV file in the format created by midicsv may be converted back into a
 standard MIDI file with the csvmidi program.")
-    (home-page "http://www.fourmilab.ch/webtools/midicsv/")
+    (home-page "https://www.fourmilab.ch/webtools/midicsv/")
     (license license:public-domain)))
 
 (define-public gx-guvnor-lv2
@@ -4601,7 +4583,7 @@ plugins, a switch trigger, a toggle switch, and a peakmeter.")
      (list qtbase-5 alsa-lib jack-1 liblo lv2))
     (native-inputs
      (list pkg-config qttools-5))
-    (home-page "http://qmidiarp.sourceforge.net/")
+    (home-page "https://qmidiarp.sourceforge.net/")
     (synopsis "MIDI arpeggiator")
     (description "QMidiArp is an advanced MIDI arpeggiator, programmable step
 sequencer and LFO.  It can hold any number of arpeggiator, sequencer, or LFO
@@ -4627,7 +4609,7 @@ modules running in parallel.")
      (list qtbase-5 alsa-lib))
     (native-inputs
      (list pkg-config qttools-5))
-    (home-page "http://alsamodular.sourceforge.net/")
+    (home-page "https://alsamodular.sourceforge.net/")
     (synopsis "MIDI event router and filter")
     (description "QMidiRoute is a MIDI event router and filter.  MIDI note,
 control change, program change and pitch bend events are logged, and can be
@@ -4649,11 +4631,9 @@ defined as tabs in the main control surface.")
                 "12dphdhnvfk1k0vmagi1v2lhyxjyj1j3cz6ksjw0ydcvid1x8ap2"))
               (patches (search-patches "seq24-rename-mutex.patch"))))
     (build-system gnu-build-system)
-    (inputs
-     (list gtkmm-2 alsa-lib jack-1 lash))
-    (native-inputs
-     (list pkg-config))
-    (home-page "https://edge.launchpad.net/seq24/")
+    (inputs (list alsa-lib gtkmm-2 jack-2))
+    (native-inputs (list pkg-config))
+    (home-page "https://launchpad.net/seq24/")
     (synopsis "Real-time MIDI sequencer")
     (description "Seq24 is a real-time MIDI sequencer.  It was created to
 provide a very simple interface for editing and playing MIDI loops.")
@@ -4701,21 +4681,19 @@ inventory, and orders.")
     (outputs '("out"
                "static")) ; 88KiB of .a files
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (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")))
-               (mkdir-p slib)
-               (for-each (lambda (file)
-                           (install-file file slib)
-                           (delete-file file))
-                         (find-files lib "\\.a$"))
-               #t))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'move-static-libraries
+            (lambda _
+              ;; Move static libraries to the "static" output.
+              (let ((lib  (string-append #$output "/lib"))
+                    (slib (string-append #$output:static "/lib")))
+                (mkdir-p slib)
+                (for-each (lambda (file)
+                            (install-file file slib)
+                            (delete-file file))
+                          (find-files lib "\\.a$"))))))))
     (inputs
      (list readline glib))
     (native-inputs
@@ -4723,9 +4701,9 @@ inventory, and orders.")
     (home-page "http://libsmf.sourceforge.net/")
     (synopsis "Standard MIDI File format library")
     (description
-     "LibSMF is a C library for handling SMF (\"*.mid\") files.  It transparently handles
-conversions between time and pulses, tempo map handling and more.  The only dependencies
-are a C compiler and glib.  Full API documentation and examples are included.")
+     "LibSMF is a C library for handling SMF (\"*.mid\") files.  It
+transparently handles conversions between time and pulses, tempo map handling
+and more.  Full API documentation and examples are included.")
     (license license:bsd-2)))
 
 (define-public lmms
@@ -4744,29 +4722,25 @@ are a C compiler and glib.  Full API documentation and examples are included.")
          "11xgf461cnmq0jkgdgx5bddi87ammpik4whg1m4fcvd3i0d5i601"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f ; no tests
-       ;; Qt 5 support must be explicitly enabled in the 1.2 stable versions of
-       ;; LMMS, so try removing "-DWANT_QT5=ON" in later versions.
-       ;; Also, explicitly disabling VST support gets rid of the in-tree
-       ;; dependency on qt5-x11embed.
-       #:configure-flags '("-DWANT_QT5=ON"
-                           "-DWANT_VST=OFF")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-rpmalloc
-           (lambda* (#:key inputs #:allow-other-keys)
-             (copy-recursively (assoc-ref inputs "rpmalloc")
-                               "src/3rdparty/rpmalloc/rpmalloc")
-             #t))
-         (add-before 'configure 'set-ldflags
-           (lambda* (#:key outputs #:allow-other-keys)
-             (setenv "LDFLAGS"
-                     (string-append
-                      "-Wl,-rpath=\""
-                      (assoc-ref outputs "out") "/lib/lmms"
-                      ":"
-                      (assoc-ref outputs "out") "/lib/lmms/ladspa"
-                      "\"")))))))
+     (list
+      #:tests? #f                       ; no tests
+      ;; Qt 5 support must be explicitly enabled in the 1.2 stable versions of
+      ;; LMMS, so try removing "-DWANT_QT5=ON" in later versions.
+      ;; Also, explicitly disabling VST support gets rid of the in-tree
+      ;; dependency on qt5-x11embed.
+      #:configure-flags '(list "-DWANT_QT5=ON" "-DWANT_VST=OFF")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'unpack-rpmalloc
+            (lambda* (#:key inputs #:allow-other-keys)
+              (copy-recursively (assoc-ref inputs "rpmalloc")
+                                "src/3rdparty/rpmalloc/rpmalloc")))
+          (add-before 'configure 'set-ldflags
+            (lambda _
+              (setenv "LDFLAGS"
+                      (string-append
+                       "-Wl,-rpath=\"" #$output "/lib/lmms"
+                       ":" #$output "/lib/lmms/ladspa" "\"")))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qttools-5" ,qttools-5)
@@ -4785,51 +4759,60 @@ are a C compiler and glib.  Full API documentation and examples are included.")
             (base32
              "0g9pls46iggg7rdm65vzfj8nyr3v2n5xkp54c4qbh9hhalpsw4ay"))))))
     (inputs
-     `(("sdl" ,sdl)
-       ("qtbase" ,qtbase-5)
-       ("qtx11extras" ,qtx11extras)
-       ("fltk" ,fltk)
-       ("libogg" ,libogg)
-       ("libsamplerate" ,libsamplerate)
-       ("fluidsynth" ,fluidsynth)
-       ("libvorbis" ,libvorbis)
-       ("alsa-lib" ,alsa-lib)
-       ("portaudio" ,portaudio)
-       ("ladspa" ,ladspa)
-       ("libsndfile1" ,libsndfile)
-       ("libxft" ,libxft)
-       ("freetype2" ,freetype)
-       ("fftw3f" ,fftwf)
-       ("jack" ,jack-1)
-       ("carla" ,carla)))
+     (list alsa-lib
+           carla
+           fftwf
+           fltk
+           fluidsynth
+           freetype
+           jack-2
+           ladspa
+           libogg
+           libsamplerate
+           libsndfile
+           libvorbis
+           libxft
+           portaudio
+           qtbase-5
+           qtx11extras
+           sdl))
     (home-page "https://lmms.io/")
     (synopsis "Music composition tool")
-    (description "LMMS is a digital audio workstation.  It includes tools for sequencing
-melodies and beats and for mixing and arranging songs.  LMMS includes instruments based on
-audio samples and various soft sythesizers.  It can receive input from a MIDI keyboard.")
+    (description "LMMS is a digital audio workstation.  It includes tools for
+sequencing melodies and beats and for mixing and arranging songs.  LMMS
+includes instruments based on audio samples and various soft sythesizers.  It
+can receive input from a MIDI keyboard.")
     (license license:gpl2+)))
 
 (define-public liquidsfz
   (package
     (name "liquidsfz")
-    (version "0.2.3")
+    (version "0.3.1")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://space.twc.de/~stefan/liquidsfz/"
-                                  "liquidsfz-" version ".tar.bz2"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/swesterfeld/liquidsfz")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1hb4hc3gkvjfbx0ls6wxzavhv2hf9ix11cz8yvndyb6q9lwkimwl"))))
+                "0kijisxv8f8ihv8rk5cg1cmdh29zkr7i2ghds6wz0iq9mdkga12s"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '("--enable-shared")))
+     (list
+      #:configure-flags '(list "--enable-shared")
+      #:phases
+      '(modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _
+             ;; The default 'bootstrap' phase would run 'autogen.sh', which
+             ;; would try to run ./configure and fail due to unpatched
+             ;; shebangs.
+             (invoke "autoreconf" "-v" "--install"))))))
     (native-inputs
-     (list pkg-config))
+     (list autoconf automake libtool pkg-config))
     (inputs
-     `(("jack" ,jack-2)
-       ("lv2" ,lv2)
-       ("readline" ,readline)
-       ("libsndfile" ,libsndfile)))
+     (list jack-2 libsndfile lv2 readline))
     (home-page "https://github.com/swesterfeld/liquidsfz")
     (synopsis "Sampler library")
     (description "The main goal of liquidsfz is to provide an SFZ sampler
@@ -4853,7 +4836,9 @@ standalone JACK client and an LV2 plugin is also available.")
               (snippet
                '(for-each delete-file-recursively
                           '("external/abseil-cpp"
-                            "external/simde"
+                            ;; This package needs an unreleased version of
+                            ;; simde.
+                            ;; "external/simde"
                             "plugins/editor/external/vstgui4"
                             "plugins/vst"
                             "src/external/pugixml")))))
@@ -4889,7 +4874,7 @@ includes LV2 plugins and a JACK standalone client.")
 (define-public musescore
   (package
     (name "musescore")
-    (version "4.0")
+    (version "4.0.1")
     (source
      (origin
        (method git-fetch)
@@ -4898,7 +4883,7 @@ includes LV2 plugins and a JACK standalone client.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16rcwr6fzghv8100syzicabqg8jqvng3zzsi6h3ja4zkp9hcbkcr"))
+        (base32 "0x1aahpbvss3sjydcq6xdh198fmslgypixmd2gckfwjqzady662y"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -5002,7 +4987,6 @@ sample library.")
            glib
            jack-1
            ladspa
-           lash
            libinstpatch
            liblo
            libsamplerate
@@ -5019,10 +5003,10 @@ sample library.")
            rubberband
            sord))
     (native-inputs
-     `(("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("qttools-5" ,qttools-5)))
+     (list perl
+           pkg-config
+           python-wrapper
+           qttools-5))
     (home-page "https://muse-sequencer.github.io/")
     (synopsis "MIDI/Audio sequencer")
     (description "MusE is a MIDI/Audio sequencer with recording and editing
@@ -5121,7 +5105,7 @@ It is intended to be simple, GUI-toolkit-agnostic, and slightly biased
 towards familiarity with MIDI.  The DSSI distribution package contains
 a JACK/ALSA-sequencer reference host and some plugins as well as the
 specification and header.")
-    (home-page "http://dssi.sourceforge.net/")
+    (home-page "https://dssi.sourceforge.net/")
     ;; The DSSI interface is LGPL2.1+, some tests and examples are GPL2+.
     ;; The vast majority of examples are in the public domain.
     (license (list license:lgpl2.1+ license:gpl2+))))
@@ -5974,22 +5958,22 @@ and debugging of event signal flows inside plugin graphs.")
          "1drzfyr7mzb58pdv0gsqkg6ds6kbgp6g25rrv1yya1611cljgvjh"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
-       #:tests? #f  ; no automated test
-       #:phases
-       (modify-phases %standard-phases
+     (list
+      #:make-flags
+      #~(list (string-append "PREFIX=" #$output))
+      #:tests? #f  ; no automated test
+      #:phases
+      '(modify-phases %standard-phases
          (replace 'configure
            (lambda _
              (substitute* "Makefile"
                (("-mtune=native") "")
-               (("-march=native") ""))
-             #t)))))
+               (("-march=native") "")))))))
     (inputs
-     `(("jack" ,jack-1)
-       ("lv2" ,lv2)
-       ("cairo" ,cairo)
-       ("gtk" ,gtk+-2)))
+     (list cairo
+           gtk+-2
+           jack-1
+           lv2))
     (native-inputs
      (list faust pkg-config))
     (home-page "https://foo-yc20.codeforcode.com/")
@@ -6047,7 +6031,7 @@ short-time Fourier transform, available as LV2 audio plugin and JACK client.")
 (define-public x42-plugins
   (package
     (name "x42-plugins")
-    (version "20211016")
+    (version "20221119")
     (source
      (origin
        (method url-fetch)
@@ -6055,20 +6039,21 @@ short-time Fourier transform, available as LV2 audio plugin and JACK client.")
         (string-append "https://gareus.org/misc/x42-plugins/x42-plugins-"
                        version ".tar.xz"))
        (sha256
-        (base32 "11bf6q42ihyk4qxwf83y0847zzyl65kwpbk3hmyz0f0ykil5fsb7"))))
+        (base32 "128h9x7yzhy6q6l0fqk2zd6l48wgs2lhf2pzbiba6h3n6l9n555b"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; no "check" target
-       #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             "LIBZITACONVOLVER=-lzita-convolver"
-             (string-append "FONTFILE="
-                            (assoc-ref %build-inputs "font-dejavu")
-                            "/share/fonts/truetype/DejaVuSans-Bold.ttf")
-             (string-append "CC=" ,(cc-for-target)))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))))
+     (list
+      #:tests? #f                      ; no "check" target
+      #:make-flags
+      #~(list (string-append "PREFIX=" #$output)
+              "LIBZITACONVOLVER=-lzita-convolver"
+              (string-append "FONTFILE="
+                             #$(this-package-native-input "font-dejavu")
+                             "/share/fonts/truetype/DejaVuSans-Bold.ttf")
+              (string-append "CC=" #$(cc-for-target)))
+      #:phases
+      #~(modify-phases %standard-phases
+        (delete 'configure))))
     (inputs
      (list cairo
            fftwf
@@ -6093,7 +6078,7 @@ audio and MIDI plugins that can also run as standalone JACK applications.")
 (define-public zam-plugins
   (package
     (name "zam-plugins")
-    (version "3.13")
+    (version "4.1")
     (source
      (origin
        (method git-fetch)
@@ -6107,19 +6092,20 @@ audio and MIDI plugins that can also run as standalone JACK applications.")
          (recursive? #t)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "02blg0iqich4vx5z1ahj6avkh83yqszdiq83p9jd5qwm0i4llqjq"))))
+        (base32 "0p3y3r2nrhzr0xlcy5rz4c2jsvc10l1n8cwc642r0zppwfabm9il"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ;no "check" target
-       #:make-flags
-       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             "HAVE_ZITA_CONVOLVER=true")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'set-CC-variable
-           (lambda _
-             (setenv "CC" "gcc") #t))
-         (delete 'configure))))
+     (list
+      #:tests? #f                      ;no "check" target
+      #:make-flags
+      #~(list (string-append "PREFIX=" #$output)
+              "HAVE_ZITA_CONVOLVER=true")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'set-CC-variable
+            (lambda _
+              (setenv "CC" "gcc")))
+          (delete 'configure))))
     (inputs
      (list fftwf
            jack-1 ;for the standalone JACK application
@@ -6136,7 +6122,7 @@ LV2 and VST2 formats, as well as standalone JACK versions.  The collection
 includes ZaMaximX2, ZamAutoSat, ZamComp, ZamCompX2, ZamEQ2, ZamGEQ31,
 ZamHeadX2, ZamPhono, ZamGate, ZamGateX2, ZamTube, ZamDelay, ZamDynamicEQ,
 ZaMultiComp, ZaMultiCompX2 and ZamSynth.")
-    (home-page "http://www.zamaudio.com/?p=976")
+    (home-page "https://www.zamaudio.com/?p=976")
     (license license:gpl2+)))
 
 (define-public geonkick
@@ -6669,7 +6655,7 @@ plugin and a standalone JACK application.")
       (description "TAP (Tom's Audio Processing) plugins is a collection of
   audio effect plugins originally released as LADSPA plugins.  This package
   offers an LV2 version ported by moddevices.")
-      (home-page "http://tap-plugins.sourceforge.net/")
+      (home-page "https://tap-plugins.sourceforge.net/")
       (license license:gpl2))))
 
 (define-public wolf-shaper
@@ -6810,7 +6796,7 @@ It is provided as an LV2 plugin and as a standalone Jack application.")
       (description "Shiru plugins is a collection of audio plugins created
   by Shiru, ported to LV2 by the Linux MAO project using the DISTRHO plugin
   framework.")
-      (home-page "http://shiru.untergrund.net/software.shtml")
+      (home-page "https://shiru.untergrund.net/software.shtml")
       (license license:wtfpl2))))
 
 (define-public a2jmidid
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index e386c78118..0fd08f8031 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -31,13 +31,13 @@
 (define-public nano
   (package
     (name "nano")
-    (version "7.1")
+    (version "7.2")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/nano/nano-" version ".tar.xz"))
       (sha256
-       (base32 "0dk8820w631ip6hpl7qc8kg5viw7wc154l7fvpvg06bmkcg7bfjp"))))
+       (base32 "09j5gb44yiv18fvn0iy17jnl9d5lh3gkry4kqv776a5xd0kl9ww6"))))
     (build-system gnu-build-system)
     (inputs
      (list gettext-minimal ncurses))
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index feea8f8819..716eef43dd 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2022, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,14 +62,14 @@ ncurses installed.")
   (package
     (inherit ncdu-1)
     (name "ncdu")
-    (version "2.2.1")
+    (version "2.2.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dev.yorhel.nl/download/ncdu-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0hfimrr7z9zrfkiyj09i8nh4a1rjn7d00y9xzpc7mkyqpkvghjjy"))
+                "14zrmcxnrczamqjrib99jga05ixk0dzfav3pd6s1h8vm9q121nch"))
               (modules '((guix build utils)))
               (snippet
                #~(begin
@@ -97,7 +97,7 @@ ncurses installed.")
                (when tests?
                  (invoke "zig" "test" "build.zig")))))))
     (native-inputs
-     (list perl zig))))
+     (list perl zig-0.10))))
 
 (define-public ncdu-2
   (deprecated-package "ncdu2" ncdu))
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index a191c29854..c5f63e0b67 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -349,7 +349,7 @@ of your system.")
                (symlink "libstfl.so" (string-append lib "/libstfl.so.0"))))))))
     (inputs (list ncurses))
     (native-inputs (list swig))
-    (home-page "http://www.clifford.at/stfl/")
+    (home-page "https://www.clifford.at/stfl/")
     (synopsis "Structured terminal forms library")
     (description "Stfl is a library which implements a curses-based widget
 set for text terminals.")
diff --git a/gnu/packages/netpbm.scm b/gnu/packages/netpbm.scm
index 5f3dcdb8ea..489a3c7a43 100644
--- a/gnu/packages/netpbm.scm
+++ b/gnu/packages/netpbm.scm
@@ -191,4 +191,4 @@ the conversion of images between a variety of different formats.
 There are over 300 separate tools in the package including converters for
 about 100 graphics formats.")
    (license gpl2)
-   (home-page "http://netpbm.sourceforge.net/")))
+   (home-page "https://netpbm.sourceforge.net/")))
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index e1f79edf67..120deebd95 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
@@ -55,6 +55,7 @@
 ;;; Copyright © 2022 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2022 Reza Alizadeh Majd <r.majd@pantherx.org>
 ;;; Copyright © 2022 Nicolas Graves <ngraves@ngraves.fr>
+;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -111,6 +112,7 @@
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gd)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -673,7 +675,7 @@ the Stream Control Transmission Protocol} (@file{libsctp}) and C language header
 files (@file{netinet/sctp.h}) for accessing SCTP-specific @acronym{APIs,
 application programming interfaces} not provided by the standard sockets.
 It also includes some SCTP-related helper utilities.")
-    (home-page "http://lksctp.sourceforge.net/")
+    (home-page "https://lksctp.sourceforge.net/")
     (license
      (list
       ;; Library.
@@ -1237,7 +1239,7 @@ or server shell scripts with network connections.")
     (native-inputs
      (list which))
     (inputs (list openssl))
-    (home-page "http://www.maier-komor.de/mbuffer.html")
+    (home-page "https://www.maier-komor.de/mbuffer.html")
     (synopsis
      "Swiss army knife for data stream buffering (network aware)")
     (description
@@ -1515,14 +1517,14 @@ receiving NDP messages.")
 (define-public ethtool
   (package
     (name "ethtool")
-    (version "5.15")
+    (version "6.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/software/network/"
                                   "ethtool/ethtool-" version ".tar.xz"))
               (sha256
                (base32
-                "0v8i592vwjypf111w0lfvaxdwhzybp6w600g28m9rm490c8xcvv8"))))
+                "1qbhwp8d4nh0cnxd3hg0kr8lm5ikbkl07gvjpzv76kad0qa03pw6"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config))
@@ -1562,7 +1564,7 @@ Ethernet devices.")
                                  (string-append bin "/ifstatus")))
                     #t)))))
     (inputs (list ncurses))
-    (home-page "http://ifstatus.sourceforge.net/graphic/index.html")
+    (home-page "https://ifstatus.sourceforge.net/graphic/index.html")
     (synopsis "Text based network interface status monitor")
     (description
      "IFStatus is a simple, easy-to-use program for displaying commonly
@@ -1754,14 +1756,14 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "4.0.2")
+    (version "4.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "07a18jx88jaa2j1i949w9n1yb149xi02s80inbfji6rgkxliangk"))))
+        (base32 "04cmgvmkyvxdpfy08adxf3smklgzakrvyvb89rrr7yqaridy2lbc"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -2303,6 +2305,28 @@ private (reserved).")
   (description "Net::DNS is the Perl Interface to the Domain Name System.")
   (license license:x11)))
 
+(define-public perl-net-bonjour
+  (package
+    (name "perl-net-bonjour")
+    (version "0.96")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/C/CH/CHLIGE/Net-Bonjour-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "15qzkfk0isn6c4js3ih95k3dylq6scijp863s0485c00n8x1z2n3"))))
+    (build-system perl-build-system)
+    (propagated-inputs (list perl-net-dns))
+    (home-page "https://metacpan.org/release/Net-Bonjour")
+    (synopsis "Module for DNS service discovery (Apple's Bonjour)")
+    (description "Net::Bonjour is a set of modules that allow one to
+discover local services via multicast DNS (mDNS) or enterprise services
+via traditional DNS.  This method of service discovery has been branded
+as Bonjour by Apple Computer.")
+    (license license:perl-license)))
+
 (define-public perl-socket6
  (package
   (name "perl-socket6")
@@ -3708,7 +3732,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
 (define-public opendht
   (package
     (name "opendht")
-    (version "2.4.10")
+    (version "2.4.12")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3717,8 +3741,8 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1kcc9vmi4swvahq2gikflgba9xfmix80dr9wa3v6xcj1ba2fjd6s"))))
-    (outputs '("out" "tools" "debug"))
+                "0yji5pziqxfvyfizk3fn9j59bqlfdwfa1a0y9jjfknb2mmlwwb9w"))))
+    (outputs '("out" "python" "tools" "debug"))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -3728,7 +3752,8 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
                   (guix build gnu-build-system)
                   (guix build utils))
       #:configure-flags
-      #~(list "--enable-tests"
+      #~(list "--disable-static"        ;to reduce size
+              "--enable-tests"
               "--enable-proxy-server"
               "--enable-push-notifications"
               "--enable-proxy-server-identity"
@@ -3752,7 +3777,7 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
               (substitute* "python/Makefile.am"
                 (("--root=\\$\\(DESTDIR)/")
                  (string-append "--root=/ --single-version-externally-managed "
-                                "--prefix=" #$output)))))
+                                "--prefix=" #$output:python)))))
           (add-after 'unpack 'specify-runpath-for-python-module
             (lambda _
               (substitute* "python/setup.py.in"
@@ -3790,7 +3815,8 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
            gnutls
            jsoncpp
            nettle
-           openssl))                    ;required for the DHT proxy
+           openssl                      ;required for the DHT proxy
+           python))
     (native-inputs
      (list autoconf
            automake
@@ -3873,7 +3899,7 @@ protocol daemons for BGP, IS-IS, LDP, OSPF, PIM, and RIP.")
              (substitute* "Makefile.in"
                ((" \\$\\(DESTDIR)/\\$\\(runstatedir)") "")))))))
     (build-system gnu-build-system)
-    (home-page "http://bird.network.cz")
+    (home-page "https://bird.network.cz")
     (synopsis "Internet Routing Daemon")
     (description "BIRD is an Internet routing daemon with full support for all
 the major routing protocols.  It allows redistribution between protocols with a
@@ -3883,7 +3909,7 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
 (define-public iwd
   (package
     (name "iwd")
-    (version "2.0")
+    (version "2.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3892,7 +3918,7 @@ powerful route filtering syntax and an easy-to-use configuration interface.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0icrmd0361yy24sa7wdd388ykaknv1va4678h9ksysz1dmykdr7m"))))
+                "1hp38rh6vpfxkx2f036719b0v9g9yj169l8fd9l9lncqpjbz73y4"))))
     (build-system gnu-build-system)
     (inputs
      (list dbus ell (package-source ell) readline))
@@ -4110,7 +4136,7 @@ easy-to-understand binary values.")
                     (bin (string-append out "/bin")))
                (install-file "tunctl" bin))
              #t)))))
-    (home-page "http://tunctl.sourceforge.net")
+    (home-page "https://tunctl.sourceforge.net")
     (synopsis  "Utility to set up and maintain TUN/TAP network interfaces")
     (description "Tunctl is used to set up and maintain persistent TUN/TAP
 network interfaces, enabling user applications to simulate network traffic.
@@ -4167,7 +4193,7 @@ network.  This must be enabled on the target host, usually in the BIOS.")
                ((" \\$\\(LIBDEPS\\)") "$(filter-out -l%,$(LIBDEPS))"))))
          (delete 'bootstrap)            ;no configure.ac file
          (delete 'configure))))         ;no configure script
-    (home-page "http://traceroute.sourceforge.net/")
+    (home-page "https://traceroute.sourceforge.net/")
     (synopsis "Tracks the route taken by packets over an IP network")
     (description "This package provides a modern, but Linux-specific
 implementation of the @command{traceroute} command that can be used to follow
@@ -4478,6 +4504,45 @@ on hub/switched networks.  It is based on @acronym{ARP} packets, it will send
    (home-page "https://github.com/netdiscover-scanner/netdiscover")
    (license license:gpl3+)))
 
+(define-public phantomsocks
+  (package
+    (name "phantomsocks")
+    (version "0.0.0-20221222155609-14291e2c889e")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/macronut/phantomsocks")
+                    (commit (go-version->git-ref version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "13lllmh46xwns5ksqqdkl2p7vvnbzkzb6va005nk37bx6c4x2ixp"))))
+    (build-system go-build-system)
+    (arguments
+     (list #:install-source? #f
+           #:import-path "github.com/macronut/phantomsocks"
+           #:build-flags #~'("-tags" #$(if (target-linux?)
+                                           "rawsocket"
+                                           "pcap"))))
+    (propagated-inputs
+     (list go-github-com-google-gopacket
+           go-github-com-macronut-go-tproxy))
+    (inputs
+     (if (target-linux?)
+         '()
+         (list libpcap)))
+    (home-page "https://github.com/macronut/phantomsocks")
+    (synopsis "Internet censorship circumvention tool")
+    (description
+     "Phantomsocks is an Internet censorship circumvention tool based on the
+desync technique, which was introduced in the 2017 paper
+@url{https://doi.org/10.1145/3131365.3131374, @cite{Your State is Not Mine: A
+Closer Look at Evading Stateful Internet Censorship}}.
+
+Further information on the usage could be found on the Wikibooks page
+@url{https://zh.wikibooks.org/wiki/Phantomsocks, @cite{Phantomsocks}}.")
+    (license license:lgpl3+)))
+
 (define-public putty
   (package
     (name "putty")
@@ -4523,7 +4588,7 @@ implementations.")
 (define-public vnstat
   (package
    (name "vnstat")
-   (version "2.9")
+   (version "2.10")
    (source
     (origin
       (method url-fetch)
@@ -4531,20 +4596,21 @@ implementations.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "1iwxmnpabfljvyng7c8k3z83yw1687i66z5s1980c5x9vrsi98hi"))))
+        "09bx8mz9jdq94i0mpmjbc7dis0klvjx85lml5mp3d36dwm21gim9"))))
    (build-system gnu-build-system)
-   (inputs (list sqlite))
+   (inputs (list sqlite gd))
    (native-inputs (list pkg-config check))
    (arguments
-    `(#:phases
-      (modify-phases %standard-phases
-        (add-before 'check 'disable-id-tests
-          (lambda _
-            (substitute*
-                '("Makefile" "tests/vnstat_tests.c")
-              (("tests/id_tests.c \\$") "\\")
-              (("tests/id_tests.h h") "h")
-              (("^.*id_tests.*$") "")))))))
+    (list
+     #:phases
+     #~(modify-phases %standard-phases
+         (add-before 'check 'disable-id-tests
+           (lambda _
+             (substitute*
+                 '("Makefile" "tests/vnstat_tests.c")
+               (("tests/id_tests.c \\$") "\\")
+               (("tests/id_tests.h h") "h")
+               (("^.*id_tests.*$") "")))))))
    (home-page "https://humdi.net/vnstat/")
    (synopsis "Network traffic monitoring tool")
    (description "vnStat is a console-based network traffic monitor that keeps
diff --git a/gnu/packages/nfs.scm b/gnu/packages/nfs.scm
index d5ebe6a760..88d4069587 100644
--- a/gnu/packages/nfs.scm
+++ b/gnu/packages/nfs.scm
@@ -33,10 +33,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages sqlite)
-  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system python)
-  #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index a1e89f1759..991113c05b 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -236,7 +236,7 @@ user-land JavaScript.")
           "034iaiq2pdqn342p2404cpz364g282d2hkp9375hysnh9i968wbb"))))
     (build-system node-build-system)
     (arguments '(#:tests? #f)) ; No tests.
-    (home-page "http://www.enchantedage.com/node-mersenne")
+    (home-page "https://www.enchantedage.com/node-mersenne")
     (synopsis "Node.js module for generating Mersenne Twister random numbers")
     (description "This package provides a node.js port of the Mersenne Twister
 random number generator.")
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index a841ad4580..5dc4c1baee 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; 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, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -99,9 +99,23 @@ in the Mozilla clients.")
               (base32
                "0v3zds1id71j5a5si42a658fjz8nv2f6zp6w4gqrqmdr6ksz8sxv"))))))
 
+(define-public nspr-next
+  (package
+    (inherit nspr)
+    (version "4.35")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v"
+                    version "/src/nspr-" version ".tar.gz"))
+              (sha256
+               (base32
+                "13xwda56yhp1w7v02qvlxvlqiniw8kr4g3fxlljmv6wnlmz2k8vy"))))))
+
 (define-public nss
   (package
     (name "nss")
+    (replacement nss/fixed)
     ;; Also update and test the nss-certs package, which duplicates version and
     ;; source to avoid a top-level variable reference & module cycle.
     (version "3.82")
@@ -221,3 +235,25 @@ applications.  Applications built with NSS can support SSL v2 and v3, TLS,
 PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other
 security standards.")
     (license license:mpl2.0)))
+
+(define-public nss-next
+  (package
+    (inherit nss)
+    (version "3.88.1")
+    (source (origin
+              (inherit (package-source nss))
+              (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
+                "15il9fsmixa1r4446zq1wl627sg0hz9h67w6kjxz273xz3nl7li7"))))
+    (propagated-inputs (list nspr-next)))) ;required by nss.pc
+
+(define nss/fixed
+  (package
+    (inherit nss-next)
+    (version "3.88")))                  ; slight inaccuracy to allow grafting
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index a27c1c6a12..607799f348 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -216,7 +216,7 @@ computers over a network.")
              #t)))))
     (inputs
      (list libressl)) ; enable TLS time constraints. See ntpd.conf(5).
-    (home-page "http://www.openntpd.org/")
+    (home-page "https://www.openntpd.org/")
     (synopsis "NTP client and server by the OpenBSD Project")
     (description "OpenNTPD is the OpenBSD Project's implementation of a client
 and server for the Network Time Protocol.  Its design goals include being
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index ac31d71fcf..6d1787bbf7 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -27,6 +27,7 @@
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Garek Dyszel <garekdyszel@disroot.org>
+;;; Copyright © 2023 Csepp <raingloom@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -944,7 +945,7 @@ name = Guix Builder")
          ("ocaml-cppo" ,ocaml-cppo)
 
          ;; For tests.
-         ("git" ,git-minimal/fixed)
+         ("git" ,git-minimal/pinned)
          ("openssl" ,openssl)
          ("python" ,python-wrapper)
          ("rsync" ,rsync)
@@ -971,7 +972,7 @@ name = Guix Builder")
      ;; OPAM is used as a tool and not as a library, we can use the OCaml 4.14
      ;; compiled opam until opam is compatible with OCaml 5.0.
      `((ocaml5.0-variant . ,(delay opam))))
-    (home-page "http://opam.ocamlpro.com/")
+    (home-page "https://opam.ocamlpro.com/")
     (synopsis "Package manager for OCaml")
     (description
      "OPAM is a tool to manage OCaml packages.  It supports multiple
@@ -981,6 +982,39 @@ Git-friendly development workflow.")
     ;; The 'LICENSE' file waives some requirements compared to LGPLv3.
     (license license:lgpl3)))
 
+(define-public ocaml-opam-monorepo
+  (package
+    (name "ocaml-opam-monorepo")
+    (version "0.3.5")
+    (source (origin
+              (method git-fetch)
+              (uri
+               (git-reference
+                (url "https://github.com/tarides/opam-monorepo/")
+                (commit version)))
+              (file-name name)
+              (sha256
+               (base32
+                "09lq788b1sai4v1nxd16b00pw0m55plcwrx3f9v5a90gpxg0a6sc"))))
+    (build-system dune-build-system)
+    (arguments
+     ;; TODO
+     ;; Too many tests require a fully initialized opam, disabling them would
+     ;; be a huge pain.  "Mocking" opam init is difficult because it requires
+     ;; networking access.
+     '(#:tests? #f))
+    ;; TODO: not entirely clear if these should be native, test cross-building
+    (native-inputs (list ocaml-odoc
+                         pkg-config))
+    ;; (propagated-inputs lablgtk3) optional and is currently failing to build
+    (home-page "https://github.com/tarides/opam-monorepo")
+    (synopsis "Assemble and manage fully vendored Dune repositories")
+    (description
+     "The opam monorepo plugin provides a convenient interface to bridge the
+opam package manager with having a local copy of all the source code required
+to build a project using the dune build tool.")
+    (license license:isc)))
+
 (define-public ocaml-camlp-streams
   (package
     (name "ocaml-camlp-streams")
@@ -1106,7 +1140,7 @@ concrete syntax of the language (Quotations, Syntax Extensions).")
                       (substitute* "_tags"
                         (("/bin/sh") (which "sh")))
                       #t)))))
-    (home-page "http://hevea.inria.fr/")
+    (home-page "https://hevea.inria.fr/")
     (synopsis "LaTeX to HTML translator")
     (description
      "HeVeA is a LaTeX to HTML translator that generates modern HTML 5.  It is
@@ -1214,7 +1248,7 @@ Emacs.")
     (arguments
      `(#:tests? #f)) ; No check target
     (properties `((ocaml4.07-variant . ,(delay (strip-ocaml4.07-variant ocaml-menhir)))))
-    (home-page "http://gallium.inria.fr/~fpottier/menhir/")
+    (home-page "https://gallium.inria.fr/~fpottier/menhir/")
     (synopsis "Parser generator")
     (description "Menhir is a parser generator.  It turns high-level grammar
 specifications, decorated with semantic actions expressed in the OCaml
@@ -2608,6 +2642,34 @@ simple (yet expressive) query language to select the tests to run.")
        `(#:package "alcotest"))
       (properties '()))))
 
+(define-public ocaml-expect-test-helpers-core
+  (package
+    (name "ocaml-expect-test-helpers-core")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url
+                     "https://github.com/janestreet/expect_test_helpers_core")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0bxs3g0zzym8agfcbpg5lmrh6hcb86z861bq40xhhfwqf4pzdbfa"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-base
+                             ocaml-base-quickcheck
+                             ocaml-core
+                             ocaml-ppx-jane
+                             ocaml-sexp-pretty
+                             ocaml-stdio
+                             ocaml-re))
+    (properties `((upstream-name . "expect_test_helpers_core")))
+    (home-page "https://github.com/janestreet/expect_test_helpers_core")
+    (synopsis "Helpers for writing expectation tests")
+    (description "Helper functions for writing expect tests.")
+    (license license:expat)))
+
 (define-public ocaml-ppx-tools
   (package
     (name "ocaml-ppx-tools")
@@ -2935,6 +2997,11 @@ process.  Also, in many cases, Lwt threads can interact without the need for
 locks or other synchronization primitives.")
     (license license:lgpl2.1)))
 
+;; TODO this alias is not ideal but ocaml-lwt already explicitly specifies a
+;; package argument and at least this way the importer doesn't try to
+;; re-import it.
+(define ocaml-lwt-ppx ocaml-lwt)
+
 (define-public ocaml-lwt-dllist
   (package
     (name "ocaml-lwt-dllist")
@@ -2956,6 +3023,152 @@ locks or other synchronization primitives.")
 doubly-linked list with Lwt iterators.")
     (license license:expat)))
 
+
+(define-public ocaml-shared-memory-ring
+  (package
+    (name "ocaml-shared-memory-ring")
+    (version "3.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/shared-memory-ring")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "12cpbia39aifnd8rxpsra0lhssqj5qw0zygb5fd8kg58zy2clmrr"))))
+    (build-system dune-build-system)
+    (arguments
+     '(#:package "shared-memory-ring"))
+    (propagated-inputs (list ocaml-cstruct ocaml-ppx-cstruct ocaml-lwt-dllist
+                             ocaml-mirage-profile))
+    (native-inputs (list ocaml-ounit))
+    (home-page "https://github.com/mirage/shared-memory-ring")
+    (synopsis "Xen-style shared memory rings")
+    (description
+     "Libraries for creating shared memory producer/consumer rings.  The rings
+follow the Xen ABI and may be used to create or implement Xen virtual
+devices.")
+    (license license:isc)))
+
+(define-public ocaml-shared-memory-ring-lwt
+  (package
+    (inherit ocaml-shared-memory-ring)
+    (name "ocaml-shared-memory-ring-lwt")
+    (arguments
+     '(#:package "shared-memory-ring-lwt"))
+    (propagated-inputs (modify-inputs (package-propagated-inputs
+                                       ocaml-shared-memory-ring)
+                         (append ocaml-shared-memory-ring)))))
+
+(define-public ocaml-xenstore
+  (package
+    (name "ocaml-xenstore")
+    (version "2.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/ocaml-xenstore")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1acld5gxmvnhl5iyyy5ancpm7fv9d6ns1x32krcmb62p2czd00ky"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-cstruct ocaml-ppx-cstruct ocaml-lwt))
+    (native-inputs (list ocaml-ounit2))
+    (home-page "https://github.com/mirage/ocaml-xenstore")
+    (synopsis "Xenstore protocol in pure OCaml")
+    (description "Repository contents:
+@itemize
+@item client library, a merge of the Mirage and XCP ones
+@item server library
+@item server instance which runs under Unix with libxc
+@item server instance which runs on mirage.
+@end itemize
+The client and the server libraries have sets of unit-tests.")
+    ;; Has a linking exception, see LICENSE.md.
+    (license license:lgpl2.1)))
+
+(define-public ocaml-mirage-xen
+  (package
+    (name "ocaml-mirage-xen")
+    (version "8.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/mirage-xen")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1qydg92dbw8hj4b809apj0f51cjgmamq3zdf34a4wyn5jv85yzyx"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-cstruct
+                             ocaml-lwt
+                             ocaml-shared-memory-ring-lwt
+                             ocaml-xenstore
+                             ocaml-lwt-dllist
+                             ;; ocaml-mirage-profile  dependency cycle
+                             ocaml-io-page
+                             ocaml-mirage-runtime
+                             ocaml-logs
+                             ocaml-fmt
+                             ocaml-bheap
+                             ocaml-duration))
+    (home-page "https://github.com/mirage/mirage-xen")
+    (synopsis "Xen core platform libraries for MirageOS")
+    (description
+     "MirageOS OS library for Xen targets, which handles the main
+loop and timers.  It also provides the low level C startup code and C stubs
+required by the OCaml code.")
+    (license license:isc)))
+
+(define-public ocaml-io-page
+  (package
+    (name "ocaml-io-page")
+    (version "3.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/io-page")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0lmvm1whdw5s7rvi7jnjzicrp2j919dkjl856jwyjlq38f7qn0zm"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-cstruct))
+    (native-inputs (list pkg-config ocaml-ounit))
+    (home-page "https://github.com/mirage/io-page")
+    (synopsis "Support for efficient handling of I/O memory pages")
+    (description
+     "IO pages are page-aligned, and wrapped in the @code{Cstruct} library to
+avoid copying the data contained within the page.")
+    (license license:isc)))
+
+(define-public ocaml-bheap
+  (package
+    (name "ocaml-bheap")
+    (version "2.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/backtracking/bheap")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0b8md5zl4yz7j62jz0bf7lwyl0pyqkxqx36ghkgkbkxb4zzggfj1"))))
+    (build-system dune-build-system)
+    (native-inputs (list ocaml-stdlib-shims))
+    (home-page "https://github.com/backtracking/bheap")
+    (synopsis "Priority queues")
+    (description
+     "Traditional implementation of priority queues using a binary heap
+encoded in a resizable array.")
+    (license license:lgpl2.1)))
+
 (define-public ocaml-luv
   (package
     (name "ocaml-luv")
@@ -3535,6 +3748,459 @@ and command-line tool.")
     (license (list license:gpl3+
                    license:lgpl2.1+))))
 
+(define-public ocaml-domain-name
+  (package
+    (name "ocaml-domain-name")
+    (version "0.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/hannesm/domain-name/")
+                    (commit (string-append "v" version))))
+              (file-name name)
+              (sha256
+               (base32
+                "1a669zz1pc7sqbi1c13jsnp8algcph2b8gr5fjrjhyh3p232770k"))))
+    (build-system dune-build-system)
+    (native-inputs (list ocaml-alcotest))
+    (home-page "https://github.com/hannesm/domain-name")
+    (synopsis "RFC 1035 Internet domain name data structure and parser")
+    (description
+     "Parses and constructs RFC compliant domain names.  The invariants on the
+length of domain names are preserved throughout the module.")
+    (license license:isc)))
+
+(define-public ocaml-macaddr
+  (package
+    (name "ocaml-macaddr")
+    (version "5.3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/ocaml-ipaddr/")
+                    (commit (string-append "v" version))))
+              (file-name name)
+              (sha256
+               (base32
+                "1zgwx0ms3l4k4dzwnkrwq4zzqjrddjsvqn66mbd0rm6aq1ib019d"))))
+    (build-system dune-build-system)
+    (arguments '(#:package "macaddr"))
+    (propagated-inputs (list ocaml-cstruct ocaml-domain-name))
+    (native-inputs (list ocaml-ounit2 ocaml-ppx-sexp-conv))
+    (home-page "https://github.com/mirage/ocaml-ipaddr")
+    (synopsis "OCaml library for manipulation of MAC address representations")
+    (description
+     "Features:
+@itemize
+@item MAC-48 (Ethernet) address support
+@item @code{Macaddr} is a @code{Map.OrderedType}
+@item All types have sexplib serializers/deserializers optionally via the
+@code{Macaddr_sexp} library
+@end itemize")
+    (license license:isc)))
+
+(define-public ocaml-ipaddr
+  ;; same repo and versions as ocaml-macaddr
+  (package
+    (inherit ocaml-macaddr)
+    (name "ocaml-ipaddr")
+    (arguments '(#:package "ipaddr"))
+    (propagated-inputs (list ocaml-macaddr ocaml-domain-name))
+    (synopsis
+     "Library for manipulation of IP (and MAC) address representations")
+    (description
+     "IP address types with serialization, supporting a wide range of RFCs.")
+    (license license:isc)))
+
+(define-public ocaml-pecu
+  (package
+    (name "ocaml-pecu")
+    (version "0.6")
+    (source (origin
+              (method url-fetch)
+              (uri
+               "https://github.com/mirage/pecu/releases/download/v0.6/pecu-v0.6.tbz")
+              (sha256
+               (base32
+                "1iz5jj9lyl1pah8dfni4wv0qml0ir5zknv4zhw7v50sc8kdbglm9"))))
+    (build-system dune-build-system)
+    (native-inputs (list ocaml-fmt ocaml-alcotest ocaml-crowbar ocaml-astring))
+    (home-page "https://github.com/mirage/pecu")
+    (synopsis "Encoder/Decoder of Quoted-Printable (RFC2045 & RFC2047)")
+    (description
+     "This package provides a non-blocking encoder/decoder of Quoted-Printable
+according to RFC2045 and RFC2047 (about encoded-word).  Useful to translate
+contents of emails.")
+    (license license:expat)))
+
+(define-public ocaml-emile
+  (package
+    (name "ocaml-emile")
+    (version "1.1")
+    (source (origin
+              (method url-fetch)
+              (uri
+               "https://github.com/mirage/emile/releases/download/v1.1/emile-v1.1.tbz")
+              (sha256
+               (base32
+                "0r1141makr0b900aby1gn0fccjv1qcqgyxib3bzq8fxmjqwjan8p"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-angstrom
+                             ocaml-ipaddr
+                             ocaml-base64
+                             ocaml-pecu
+                             ocaml-bigstringaf
+                             ocaml-uutf))
+    (native-inputs (list ocaml-alcotest))
+    (home-page "https://github.com/mirage/emile")
+    (synopsis "Parser of email address according RFC822")
+    (description
+     "This package provides a parser of email address according RFC822, RFC2822,
+RFC5321 and RFC6532.  It handles UTF-8 email addresses and encoded-word
+according RFC2047.")
+    (license license:expat)))
+
+(define-public ocaml-parse-argv
+  (package
+    (name "ocaml-parse-argv")
+    (version "0.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/parse-argv")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "16n18zik6vkfnhv8jaigr90fwp1ykg23p61aqchym0jil4i4yq01"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-astring))
+    (native-inputs (list ocaml-ounit))
+    (home-page "https://github.com/mirage/parse-argv")
+    (synopsis "Process strings into sets of command-line arguments")
+    (description "Small implementation of a simple argv parser.")
+    (license license:isc)))
+
+(define-public ocaml-functoria-runtime
+  (package
+    (name "ocaml-functoria-runtime")
+    (version "4.3.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/mirage/mirage/")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name "mirage" version))
+       (sha256
+        (base32
+         "09mqbffrhnklbc50gaflkwb3h1xysqqiwb84a9q1phjl038pic6r"))))
+    (build-system dune-build-system)
+    (arguments
+     '(#:package "functoria-runtime"
+       ;; TODO
+       ;; again, requires opam for tests, which needs network access.
+       ;; most other tests seem to pass.
+       #:tests? #f))
+    (propagated-inputs
+     (list ocaml-cmdliner ocaml-fmt ocaml-logs ocaml-bos ocaml-ipaddr
+           ocaml-emile ocaml-uri))
+    (native-inputs
+     (list ocaml-alcotest))
+    (home-page "https://github.com/mirage/mirage")
+    (synopsis "Runtime support library for functoria-generated code")
+    (description
+     "This is the runtime support library for code generated by functoria.")
+    (license license:isc)))
+
+(define-public ocaml-mirage-runtime
+  (package
+    (inherit ocaml-functoria-runtime)
+    (name "ocaml-mirage-runtime")
+    (build-system dune-build-system)
+    (arguments
+     '(#:package "mirage-runtime"
+       ;; TODO again, wants opam, other tests seem to pass
+       ;; look for a way to disable tests that want network access
+       #:tests? #f))
+    (propagated-inputs (list ocaml-ipaddr ocaml-functoria-runtime ocaml-fmt
+                             ocaml-logs ocaml-lwt))
+    (native-inputs (list ocaml-alcotest))
+    (home-page "https://github.com/mirage/mirage")
+    (synopsis
+     "The base MirageOS runtime library, part of every MirageOS unikernel")
+    (description
+     "This package provides a bundle of useful runtime functions for
+applications built with MirageOS")
+    (license license:isc)))
+
+(define-public ocaml-functoria
+  (package
+    (inherit ocaml-functoria-runtime)
+    (name "ocaml-functoria")
+    (build-system dune-build-system)
+    (arguments
+     '(#:package "functoria"
+       ;; TODO again, wants opam, other tests seem to pass
+       ;; look for a way to disable tests that want network access
+       #:tests? #f))
+    (propagated-inputs (list ocaml-cmdliner ocaml-rresult ocaml-result
+                             ocaml-astring ocaml-fmt ocaml-logs ocaml-bos
+                             ocaml-fpath ocaml-emile ocaml-uri))
+    (native-inputs (list ocaml-alcotest ocaml-functoria-runtime))
+    (home-page "https://github.com/mirage/mirage")
+    (synopsis
+     "DSL to organize functor applications")
+    (description
+     "DSL to describe a set of modules and functors, their types and
+how to apply them in order to produce a complete application.  The main use
+case is mirage.")
+    (license license:isc)))
+
+(define-public ocaml-mirage
+  (package
+    (inherit ocaml-functoria-runtime)
+    (name "ocaml-mirage")
+    (build-system dune-build-system)
+    (arguments
+     '(#:package "mirage"
+       ;; TODO again, wants opam, other tests seem to pass
+       ;; look for a way to disable tests that want network access
+       #:tests? #f))
+    (propagated-inputs
+     (list ocaml-astring ocaml-bos ocaml-functoria ocaml-ipaddr ocaml-logs
+           ocaml-mirage-runtime ocaml-opam-monorepo))
+    (native-inputs (list ocaml-alcotest ocaml-fmt))
+    (home-page "https://github.com/mirage/mirage")
+    (synopsis
+     "The MirageOS library operating system")
+    (description
+     "Library operating system that constructs unikernels for secure,
+high-performance network applications across a variety of cloud computing and
+mobile platforms.  Code can be developed on a normal OS and then compiled into
+a fully-standalone, specialised unikernel.")
+    (license license:isc)))
+
+(define-public ocaml-mirage-bootvar-unix
+  (package
+    (name "ocaml-mirage-bootvar-unix")
+    (version "0.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/mirage-bootvar-unix")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1vi13q0z5ffv5hf4q5lfvkia6j2s5520px0s2x4dbjgd52icizrz"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-lwt ocaml-parse-argv))
+    (home-page "https://github.com/mirage/mirage-bootvar-unix")
+    (synopsis "Unix implementation of MirageOS Bootvar interface")
+    (description "Library for passing boot parameters from Solo5 to MirageOS.")
+    (license license:isc)))
+
+(define-public ocaml-duration
+  (package
+    (name "ocaml-duration")
+    (version "0.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri
+               (git-reference
+                (url "https://github.com/hannesm/duration/")
+                (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0vvxi0ipxmdz1k4h501brvccniwf3wpc32djbccyyrzraiz7qkff"))))
+    (build-system dune-build-system)
+    (native-inputs (list ocaml-alcotest))
+    (home-page "https://github.com/hannesm/duration")
+    (synopsis "Conversions to various time units")
+    (description
+     "This package provides a duration is represented in nanoseconds as an
+unsigned 64 bit integer.  This has a range of up to 584 years.  Functions
+provided check the input and raise on negative or out of bound input.")
+    (license license:isc)))
+
+(define-public ocaml-mirage-time
+  (package
+    (name "ocaml-mirage-time")
+    (version "3.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/mirage/mirage-time/releases/download/v"
+                    version "/mirage-time-v3.0.0.tbz"))
+              (sha256
+               (base32
+                "0z5xkhlgyhm22wyhwpf9r0rn4125cc3cxj6ccavyiiz2b2dr8h0d"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-lwt ocaml-duration))
+    (home-page "https://github.com/mirage/mirage-time")
+    (synopsis "Time operations for MirageOS")
+    (description
+     "Defines the signature for time-related operations for MirageOS.")
+    (license license:isc)))
+
+(define-public ocaml-mirage-clock
+  (package
+    (name "ocaml-mirage-clock")
+    (version "4.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/mirage-clock")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rkara9i3dvnzrb8jl2vkx8hgamvxnksin67wmhbv9d4i758amjy"))))
+    (build-system dune-build-system)
+    (home-page "https://github.com/mirage/mirage-clock")
+    (synopsis "Libraries and module types for portable clocks")
+    (description
+     "This library implements portable support for an operating system
+timesource that is compatible with the MirageOS library interfaces.  It
+implements an @code{MCLOCK} module that represents a monotonic timesource
+since an arbitrary point, and @code{PCLOCK} which counts time since the Unix
+epoch.")
+    (license license:isc)))
+
+(define-public ocaml-ptime
+  (package
+    (name "ocaml-ptime")
+    ;; TODO 1.1.0 has some issues, so for now we are stuck with 0.8.5
+    (version "0.8.5")
+    (source (origin
+              (method url-fetch)
+              (uri
+               "https://erratique.ch/software/ptime/releases/ptime-0.8.5.tbz")
+              (sha256
+               (base32
+                "1fxq57xy1ajzfdnvv5zfm7ap2nf49znw5f9gbi4kb9vds942ij27"))))
+    (build-system ocaml-build-system)
+    (arguments
+     `(#:build-flags (list "build" "--with-js_of_ocaml" "true" "--tests"
+                           "true")
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (propagated-inputs (list ocaml-result js-of-ocaml))
+    (native-inputs (list ocaml-findlib ocamlbuild ocaml-topkg opam))
+    (home-page "https://erratique.ch/software/ptime")
+    (synopsis "POSIX time for OCaml")
+    (description
+     "Ptime offers platform independent POSIX time support in pure OCaml.  It
+provides a type to represent a well-defined range of POSIX timestamps with
+picosecond precision, conversion with date-time values, conversion with RFC
+3339 timestamps and pretty printing to a human-readable, locale-independent
+representation.")
+    (license license:isc)))
+
+(define-public ocaml-mirage-unix
+  (package
+    (name "ocaml-mirage-unix")
+    (version "5.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/mirage/mirage-unix/releases/download/v"
+                    version "/mirage-unix-5.0.1.tbz"))
+              (sha256
+               (base32
+                "1y44hvsd5lxqbazwkv9n6cn936lpn8l7v82wf55w4183fp70nnjk"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-lwt ocaml-duration ocaml-mirage-runtime))
+    (home-page "https://github.com/mirage/mirage-unix")
+    (synopsis "Unix core platform libraries for MirageOS")
+    (description
+     "This package provides the MirageOS `OS` library for Unix targets, which
+handles the main loop and timers.")
+    (license license:isc)))
+
+(define-public ocaml-mirage-profile-unix
+  (package
+    (name "ocaml-mirage-profile-unix")
+    (version "0.9.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/mirage-profile/")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "11p3ai8g993algds9mbg4xf3is0agqah127r69fb7rm35dryzq95"))))
+    (build-system dune-build-system)
+    (arguments
+     '(#:package "mirage-profile-unix"
+       #:tests? #f ;depends on ocaml-mirage-profile which would form a loop
+       #:phases (modify-phases %standard-phases
+                  ;; TODO is there a way to do this with dune build flags?
+                  (add-after 'unpack 'disable-xen
+                    (lambda _
+                      ;; this way it is not detected as a build target
+                      (rename-file "xen" "_xen"))))))
+    (propagated-inputs (list ocaml-cstruct ocaml-ocplib-endian ocaml-lwt
+                             ocaml-mtime ocaml-ppx-cstruct))
+    (native-inputs (list ocaml-ppx-cstruct))
+    (home-page "https://github.com/mirage/mirage-profile")
+    (synopsis "Collects Ocaml/Lwt profiling information in CTF format")
+    (description
+     "Used to trace execution of OCaml/Lwt programs (such as Mirage
+unikernels) at the level of Lwt threads.  The traces can be viewed using
+JavaScript or GTK viewers provided by mirage-trace-viewer or processed by
+tools supporting the Common Trace Format.
+When compiled against a normal version of Lwt, OCaml's cross-module inlining
+will optimise these calls away, meaning there should be no overhead in the
+non-profiling case.")
+    (license license:bsd-2)))
+
+(define-public ocaml-mirage-profile
+  (package
+    (inherit ocaml-mirage-profile-unix)
+    (name "ocaml-mirage-profile")
+    (arguments
+     '(#:package "mirage-profile"
+       ;; TODO cyclic dependency with mirage-profile
+       ;; It could be broken using package variants, if not for
+       ;; propagated inputs leading to version conflicts.
+       #:tests? #f))
+    (propagated-inputs (modify-inputs (package-propagated-inputs
+                                       ocaml-mirage-profile-unix)
+                         (append ocaml-mirage-profile-unix)))))
+
+(define-public ocaml-mirage-logs
+  (package
+    (name "ocaml-mirage-logs")
+    (version "1.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mirage/mirage-logs/")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1wv2hz1dj38jzc8nabin9p8im43ghy8f3crv7rf9szyyzyrdanp2"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-logs ocaml-ptime ocaml-mirage-clock
+                             ocaml-mirage-profile ocaml-lwt))
+    (native-inputs (list ocaml-alcotest))
+    (home-page "https://github.com/mirage/mirage-logs")
+    (synopsis
+     "Reporter for the Logs library that writes to stderr with timestamps")
+    (description
+     "Uses a Mirage @code{CLOCK} to write timestamped log messages.  It can
+also log only important messages to the console, while writing all received
+messages to a ring buffer which is displayed if an exception occurs.  If
+tracing is enabled (via mirage-profile), it also writes each log message to
+the trace buffer.")
+    (license license:isc)))
+
 (define-public ocaml-ocurl
   (package
     (name "ocaml-ocurl")
@@ -4145,6 +4811,28 @@ writing to these structures, and they are accessed via the Bigarray module.")
                   "0jj3whs8r3jc524i9bb67rffh7y7r157hjgvws0bkxijxpjzwkbk"))))
       (properties '()))))
 
+;; TODO again, the "parent" package already has an explicit package argument,
+;; so a variant package doesn't make sense, at least these aliases help the
+;; importer out so it doesn't re-import things.  At least hopefully.
+(define ocaml-cstruct-unix ocaml-cstruct)
+(define ocaml-cstruct-sexp ocaml-cstruct)
+
+(define-public ocaml-ppx-cstruct
+  (package
+    (inherit ocaml-cstruct)
+    (name "ocaml-ppx-cstruct")
+    (properties `((upstream-name . "ppx_cstruct")))
+    (arguments
+     '(#:package "ppx_cstruct"
+       ;; TODO doesn't find test deps for some reason?
+       ;; I have no clue why.
+       #:tests? #f))
+    (propagated-inputs (modify-inputs (package-propagated-inputs ocaml-cstruct)
+                         (append ocaml-cstruct ocaml-ppxlib ocaml-sexplib)))
+    (native-inputs (modify-inputs (package-propagated-inputs ocaml-cstruct)
+                     (append ocaml-cstruct-sexp ocaml-findlib
+                             ocaml-ppx-sexp-conv)))))
+
 (define-public ocaml-hex
   (package
     (name "ocaml-hex")
@@ -4337,7 +5025,7 @@ Format module of the OCaml standard library.")
        ("ocaml-sedlex" ,ocaml-sedlex)
        ("ocaml-easy-format" ,ocaml-easy-format)
        ("ocaml-base64" ,ocaml-base64)))
-    (home-page "http://piqi.org")
+    (home-page "https://piqi.org")
     (synopsis "Data serialization and conversion library")
     (description "Piqilib is the common library used by the piqi command-line
 tool and piqi-ocaml.")
@@ -4411,7 +5099,7 @@ and 4 (random based) according to RFC 4122.")
                      (search-input-file inputs "/bin/sh")))))))
     (inputs (list lablgtk))
     (properties `((upstream-name . "ocamlgraph")))
-    (home-page "http://ocamlgraph.lri.fr/")
+    (home-page "https://ocamlgraph.lri.fr/")
     (synopsis "Graph library for OCaml")
     (description "OCamlgraph is a generic graph library for OCaml.")
     (license license:lgpl2.1)))
@@ -5544,7 +6232,7 @@ the OCaml language.")
                                "/lib/ocaml/site-lib/num"
                                " $(FUNCTORYLIB)")))
              #t)))))
-    (home-page "http://cubicle.lri.fr/")
+    (home-page "https://cubicle.lri.fr/")
     (synopsis "Model checker for array-based systems")
     (description "Cubicle is a model checker for verifying safety properties
 of array-based systems.  This is a syntactically restricted class of
@@ -5681,6 +6369,29 @@ functionality for parsing and pretty-printing s-expressions.")
                          "0ksx62zsxhz8xmdrsn41n2hbc2qbyh3bxxc6946xisvgwh42h3q3"))
      (properties '()))))
 
+(define-public ocaml-sexp-pretty
+  (package
+    (name "ocaml-sexp-pretty")
+    (version "0.15.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/sexp_pretty")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "08z9jpvgag5f029ns0a06lcdymg00vwi232xsy1rdv82zvc0x4ah"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-base ocaml-ppx-base ocaml-sexplib ocaml-re))
+    (properties `((upstream-name . "sexp_pretty")))
+    (home-page "https://github.com/janestreet/sexp_pretty")
+    (synopsis "S-expression pretty-printer")
+    (description
+     "Library for pretty-printing s-expressions, using better indentation
+rules than the default pretty printer in Sexplib.")
+    (license license:expat)))
+
 (define-public ocaml-base
   (package
     (name "ocaml-base")
@@ -6347,6 +7058,32 @@ storage of large amounts of data.")
                  license:asl2.0
                  license:bsd-3)))))
 
+(define-public ocaml-protocol-version-header
+  (package
+    (name "ocaml-protocol-version-header")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url
+                     "https://github.com/janestreet/protocol_version_header")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0s638cwf1357gg754rc4306654hhrhzqaqm2lp3yv5vj3ml8p4qy"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-core ocaml-ppx-jane))
+    (properties `((upstream-name . "protocol_version_header")))
+    (home-page "https://github.com/janestreet/protocol_version_header")
+    (synopsis "Protocol versioning")
+    (description
+     "This library offers a lightweight way for applications protocols to
+version themselves.  The more protocols that add themselves to
+@code{Known_protocol}, the nicer error messages we will get when connecting to
+a service while using the wrong protocol.")
+    (license license:expat)))
+
 (define-public ocaml-octavius
   (package
     (name "ocaml-octavius")
@@ -7839,6 +8576,197 @@ the full Core is not available, such as in Javascript.")
                  ;; MLton and sjs
                  license:expat)))))
 
+(define-public ocaml-core-unix
+  (package
+    (name "ocaml-core-unix")
+    (version "0.15.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/core_unix")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0h6lqaxpp4r06a63k8yr0g9y7wc8r35v2xzqgvkiiq1ypa48zzgm"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-core
+                             ocaml-core-kernel
+                             ocaml-expect-test-helpers-core
+                             ocaml-jane-street-headers
+                             ocaml-jst-config
+                             ocaml-intrinsics
+                             ocaml-ppx-jane
+                             ocaml-sexplib
+                             ocaml-timezone
+                             ocaml-spawn))
+    (properties `((upstream-name . "core_unix")))
+    (home-page "https://github.com/janestreet/core_unix")
+    (synopsis "Unix-specific portions of Core")
+    (description
+     "Unix-specific extensions to some of the modules defined in core and
+core_kernel.")
+    (license license:expat)))
+
+(define-public ocaml-async-kernel
+  (package
+    (name "ocaml-async-kernel")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/async_kernel")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "01if6c8l2h64v7sk56xr8acnmj6g9whxcjrzzzvczspq88hq2bfh"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-core ocaml-core-kernel ocaml-ppx-jane))
+    (properties `((upstream-name . "async_kernel")))
+    (home-page "https://github.com/janestreet/async_kernel")
+    (synopsis "Monadic concurrency library")
+    (description
+     "Contains @code{Async}'s core data structures, like
+@code{Deferred}.  @code{Async_kernel} is portable, and so can be used in
+JavaScript using @code{Async_js}.")
+    (license license:expat)))
+
+(define-public ocaml-async-unix
+  (package
+    (name "ocaml-async-unix")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/async_unix")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0z4fgpn93iw0abd7l9kac28qgzgc5qr2x0s1n2zh49lsdn02n6ys"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-async-kernel ocaml-core ocaml-core-kernel
+                             ocaml-core-unix ocaml-ppx-jane))
+    (properties `((upstream-name . "async_unix")))
+    (home-page "https://github.com/janestreet/async_unix")
+    (synopsis "Monadic concurrency library")
+    (description
+     "Unix-related dependencies for things like system calls and
+threads.  Using these, it hooks the Async_kernel scheduler up to either epoll
+or select, depending on availability, and manages a thread pool that blocking
+system calls run in.")
+    (license license:expat)))
+
+(define-public ocaml-async-rpc-kernel
+  (package
+    (name "ocaml-async-rpc-kernel")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/async_rpc_kernel")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1b5rp5yam03ir4f1sixpzjg1zdqmkb7lvnaa82kac4fzk80gfrfr"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-async-kernel ocaml-core ocaml-ppx-jane
+                             ocaml-protocol-version-header))
+    (properties `((upstream-name . "async_rpc_kernel")))
+    (home-page "https://github.com/janestreet/async_rpc_kernel")
+    (synopsis "Platform-independent core of Async RPC library")
+    (description
+     "Library for building RPC-style protocols.  This library is the portable
+part of the Unix-oriented Async_rpc library, and is actively used in
+JavaScript.")
+    (license license:expat)))
+
+(define-public ocaml-async
+  (package
+    (name "ocaml-async")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/async")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0pykmnsil754jsnr8gss91ykyjvivngx4ii0ih3nsg1x2jl9xmy2"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-async-kernel
+                             ocaml-async-rpc-kernel
+                             ocaml-async-unix
+                             ocaml-core
+                             ocaml-core-kernel
+                             ocaml-core-unix
+                             ocaml-ppx-jane
+                             ocaml-ppx-log
+                             ocaml-textutils))
+    ;; TODO one test dependency is deprecated, the other is nowhere to be found
+    (arguments
+     '(#:tests? #f))
+    ;; (native-inputs (list ocaml-netkit-sockets ocaml-qtest-deprecated))
+    (home-page "https://github.com/janestreet/async")
+    (synopsis "Asynchronous execution library")
+    (description
+     "Library for asynchronous programming, i.e., programming where some part
+of the program must wait for things that happen at times determined by some
+external entity (like a human or another program).")
+    (license license:expat)))
+
+(define-public ocaml-textutils-kernel
+  (package
+    (name "ocaml-textutils-kernel")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/textutils_kernel")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "068g11d98wsb5a6ds0p5xybdmx5nx9bxa0k11dmh3l57kn4c169x"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-core ocaml-ppx-jane ocaml-uutf))
+    (properties `((upstream-name . "textutils_kernel")))
+    (home-page "https://github.com/janestreet/textutils_kernel")
+    (synopsis "Text output utilities")
+    (description
+     "The subset of textutils using only core_kernel and working in
+javascript.")
+    (license license:expat)))
+
+(define-public ocaml-textutils
+  (package
+    (name "ocaml-textutils")
+    (version "0.15.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/textutils")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1wass49h645wql9b7nck2iqlkf4648dkxvlvxixr7z80zcnb5rxr"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-core
+                             ocaml-core-kernel
+                             ocaml-core-unix
+                             ocaml-ppx-jane
+                             ocaml-textutils-kernel
+                             ocaml-uutf))
+    (home-page "https://github.com/janestreet/textutils")
+    (synopsis "Text output utilities")
+    (description
+     "Utilities for working with terminal output, such as color printing.")
+    (license license:expat)))
+
 (define-public ocaml-timezone
   (package
     (name "ocaml-timezone")
@@ -8662,7 +9590,7 @@ defined in OCaml 4.12.0.")
             ocaml-uuseg
             ocaml-uutf))
     (native-inputs
-      (list git-minimal/fixed                     ;for tests
+      (list git-minimal/pinned                     ;for tests
             ocaml-alcotest ocaml-ocp-indent ocaml-bisect-ppx))
     (home-page "https://github.com/ocaml-ppx/ocamlformat")
     (synopsis "Auto-formatter for OCaml code")
@@ -8701,6 +9629,35 @@ between Bigstrings and other string-like types.  @code{bigstringaf} provides
 these missing pieces.")
     (license license:bsd-3)))
 
+(define-public ocaml-intrinsics
+  (package
+    (name "ocaml-intrinsics")
+    (version "0.15.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/janestreet/ocaml_intrinsics")
+                    (commit (string-append "v" version))))
+              (file-name name)
+              (sha256
+               (base32
+                "1mazr1ka2zlm2s8bw5i555cnhi1bmr9yxvpn29d3v4m8lsnfm73z"))))
+    (build-system dune-build-system)
+    ;; TODO figure out how to get around this error:
+    ;; No rule found for alias test/runtime-deps-of-tests
+    (arguments
+     '(#:tests? #f))
+    (propagated-inputs (list dune-configurator))
+    (native-inputs (list ocaml-expect-test-helpers-core ocaml-core))
+    (properties `((upstream-name . "ocaml_intrinsics")))
+    (home-page "https://github.com/janestreet/ocaml_intrinsics")
+    (synopsis "AMD64 intrinsics with emulated fallbacks")
+    (description
+     "Provides an OCaml interface to operations that have dedicated hardware
+instructions on some micro-architectures, with default implementations using C
+stubs for all targets.")
+    (license license:expat)))
+
 (define-public ocaml-trie
   (package
     (name "ocaml-trie")
diff --git a/gnu/packages/ocr.scm b/gnu/packages/ocr.scm
index 0382e0d869..c1cd4f061e 100644
--- a/gnu/packages/ocr.scm
+++ b/gnu/packages/ocr.scm
@@ -31,7 +31,6 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm
index 847284c427..2e506156b2 100644
--- a/gnu/packages/opencl.scm
+++ b/gnu/packages/opencl.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2023 Andy Tai <atai@atai.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,6 @@
 (define-module (gnu packages opencl)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system copy)
   #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module (guix utils)
@@ -55,7 +55,7 @@
 (define-public opencl-headers
   (package
     (name "opencl-headers")
-    (version "2021.06.30")
+    (version "2023.02.06")
     (source
       (origin
         (method git-fetch)
@@ -64,7 +64,7 @@
               (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "1nrvx0x9r1nz1qpmzbgffnn9h9pn2fwcxsksf101bkpmqziq5lii"))))
+         (base32 "1jxpx15gwxc6i7vp64xlzcxf57nl0qnaiip6jyr0j7iji47dm404"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Not enabled during build.
     (synopsis "The Khronos OpenCL headers")
@@ -96,7 +96,7 @@
 (define-public opencl-clhpp
   (package
     (name "opencl-clhpp")
-    (version "2.0.15")
+    (version "2023.02.06")
     (source
      (origin
        (method git-fetch)
@@ -104,14 +104,15 @@
              (url "https://github.com/KhronosGroup/OpenCL-CLHPP")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "1wycdbvwbdn7lqdd3sby8471qg2zdisr70218ava6cfvxdsqcp83"))
+        (base32 "1m3v5apjv3qagym32xqg38pq6i8j5d8svz11clsx408nrlyngrj0"))
        (file-name (git-file-name name version))))
     (native-inputs
      `(("python" ,python-wrapper)))
     (propagated-inputs
      (list opencl-headers))
     (arguments
-     `(#:configure-flags (list "-DBUILD_EXAMPLES=OFF" "-DBUILD_TESTS=OFF")
+     `(#:configure-flags (list "-DBUILD_EXAMPLES=OFF" "-DBUILD_TESTS=OFF"
+                               "-DBUILD_TESTING=OFF") ;; CTest needs this to be turned off
        ;; The regression tests require a lot more dependencies.
        #:tests? #f))
     (build-system cmake-build-system)
@@ -124,7 +125,7 @@
 (define-public opencl-icd-loader
   (package
     (name "opencl-icd-loader")
-    (version "2021.06.30")
+    (version "2023.02.06")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -133,7 +134,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "007ws357n1ijrxal1bf9lwy68p0dz1sm9cfcfnnz5f88iwc9xd6m"))))
+                "1cmbcm6bz6kfvr0dy9hzf2vgfwcz8gbm8rxspqqpva6z74dz0qxr"))))
     (build-system cmake-build-system)
     (arguments `(#:tests? #f)) ; Tests need stub loader setup.
     (native-search-paths
@@ -382,7 +383,7 @@ A lexer, @code{pytools.lex}.
      (list opencl-headers pybind11 opencl-icd-loader))                     ;libOpenCL
     (propagated-inputs
      (list python-appdirs python-numpy python-pytools python-mako))
-    (home-page "http://mathema.tician.de/software/pyopencl")
+    (home-page "https://mathema.tician.de/software/pyopencl")
     (synopsis "Python wrapper for OpenCL")
     (description
      "PyOpenCL lets you access parallel computing devices such as GPUs from
diff --git a/gnu/packages/orange.scm b/gnu/packages/orange.scm
index 0b8a642014..2a66fe429e 100644
--- a/gnu/packages/orange.scm
+++ b/gnu/packages/orange.scm
@@ -160,7 +160,7 @@ GUI based workflow.  It is primarily used in the Orange framework.")
            python-orange-widget-base
            python-pandas
            python-pygments
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-pyqtgraph
            python-pyqtwebengine
            python-pyyaml
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 13674a0cc3..c946508330 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -165,8 +165,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "1.4.0")
-        (commit "d5fece6bfe6b2eaf93f936a4a6dea8fbfe118140")
-        (revision 3))
+        (commit "01fd830f2fdd388f56e6e00df747f052bbde3906")
+        (revision 4))
     (package
       (name "guix")
 
@@ -182,7 +182,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "1q7qfxhfayhcia30w60klnv3q29a2n72vvf1wkdvwx55q3p8prsc"))
+                  "1kc4p6sakj57mdcd6avvbbw72q8irddn0cz7l17k0dp1463vjfl1"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -627,6 +627,11 @@ overridden by setting the 'current-guix-package' parameter."
     (arguments
      `(#:modules ((guix build utils)
                   (gnu build svg))
+
+       ;; There's no point in cross-compiling: a native build gives the same
+       ;; result, independently of the system type.
+       #:target #f
+
        #:builder
        ,(with-extensions (list guile-rsvg guile-cairo)
           #~(begin
@@ -824,7 +829,7 @@ symlinks to the files in a common directory such as /usr/local.")
     (description
      "XStow is a replacement of GNU Stow written in C++.  It supports all
 features of Stow with some extensions.")
-    (home-page "http://xstow.sourceforge.net/")
+    (home-page "https://xstow.sourceforge.net/")
     (license license:gpl2)))
 
 (define-public rpm
@@ -839,15 +844,25 @@ features of Stow with some extensions.")
               (sha256
                (base32
                 "0m250plyananjn0790xmwy6kixmxcdj5iyy2ybnk1aw7f4nia5ra"))))
+    (outputs '("out" "debug"))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--enable-python")
+     '(#:configure-flags '("--enable-python"
+                           ;; The RPM database must be writable.
+                           "--localstatedir=/var")
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-lua-check
                     (lambda _
                       (substitute* "configure"
                         (("lua >= ?.?")
-                         "lua-5.3 >= 5.3")))))))
+                         "lua-5.3 >= 5.3"))))
+                  (add-after 'unpack 'patch-build-system
+                    (lambda _
+                      ;; The build system attempts to create /var in the build
+                      ;; chroot, and fails.
+                      (substitute* "Makefile.in"
+                        ((".*MKDIR_P) \\$\\(DESTDIR)\\$\\(localstatedir.*")
+                         "")))))))
     (native-inputs
      (list pkg-config
            python))
@@ -859,7 +874,8 @@ features of Stow with some extensions.")
            lua
            sqlite
            xz
-           zlib))
+           zlib
+           zstd))
     (propagated-inputs
      ;; popt is listed in the 'Requires' of rpm.pc.
      (list popt))
@@ -1347,8 +1363,8 @@ environments.")
                   "0k9zkdyyzir3fvlbcfcqy17k28b51i20rpbjwlx2i1mwd2pw9cxc")))))))
 
 (define-public guix-build-coordinator
-  (let ((commit "3768aec91daebb8db58e28cffe481e8878b59700")
-        (revision "68"))
+  (let ((commit "c29a46e8d298d3a1f16b2d4f75fa96759741afb8")
+        (revision "71"))
     (package
       (name "guix-build-coordinator")
       (version (git-version "0" revision commit))
@@ -1359,7 +1375,7 @@ environments.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "0vh4hndqgpz8rwrlfc6vhypy1hxayb8lvxw1jc41ags3lhw75dcz"))
+                  "1wzgl2naymps9k51ggsw8099da81b0skqjamj9r7jkcvg7i46avm"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -1424,14 +1440,7 @@ environments.")
                                          (assoc-ref inputs input)
                                          version))
                                       guile-inputs)
-                                 ":"))))
-                      (when target
-                        ;; XXX work around wrap-program picking bash for the
-                        ;; host rather than target
-                        (let ((bash (assoc-ref inputs "bash")))
-                          (substitute* file
-                            (("^#!.*/bash")
-                             (string-append "#! " bash "/bin/bash")))))))
+                                 ":"))))))
                   (find-files bin)))
                #t))
            (delete 'strip))))             ; As the .go files aren't compatible
@@ -1663,8 +1672,8 @@ in an isolated environment, in separate namespaces.")
     (license license:gpl3+)))
 
 (define-public nar-herder
-  (let ((commit "8d219e49c8f1623bdd3622f8c024c40acb0004c2")
-        (revision "10"))
+  (let ((commit "8b888de4cff44b42b8215afac5dcdadba9b7394d")
+        (revision "17"))
     (package
       (name "nar-herder")
       (version (git-version "0" revision commit))
@@ -1675,7 +1684,7 @@ in an isolated environment, in separate namespaces.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "0bxhwmfywy03iqmy7a039xr4cb9vfjsqpj7w5ybhmiqhf0yv9hpa"))
+                  "19j8dbn9c25x8lj3sa7b0b9v8lxxlkhvb4qpmwc4kkizpkwrqp2a"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -2139,7 +2148,7 @@ from R7RS, which allows most R7RS code to run on R6RS implementations.")
       (list dejagnu autoconf which))
     (inputs
       (list tcl less procps coreutils python-3))
-    (home-page "http://modules.sourceforge.net/")
+    (home-page "https://modules.sourceforge.net/")
     (synopsis "Shell environment variables and aliases management")
     (description "Modules simplify shell initialization and let users
 modify their environment during the session with modulefiles.  Modules are
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 853fdaaa5f..58b78f27f6 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2018, 2020-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
@@ -64,14 +64,14 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20221222")
+    (version "20230222")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/parallel/parallel-"
                           version ".tar.bz2"))
       (sha256
-       (base32 "0zsrz25yyhkvrkvlblmgrqhcyr9zavflknz3nhql9a8qxixhraad"))
+       (base32 "03lqkhh9pa9kyrpfkcd4jlwidnjj0bq2ykp7h2vxss3n17maadkd"))
       (snippet
        '(begin
           (use-modules (guix build utils))
@@ -172,7 +172,7 @@ execution is also possible.")
     (arguments `(#:tests? #f)) ;; No tests
     (native-inputs
      (list flex which))
-    (home-page "http://www.maier-komor.de/xjobs.html")
+    (home-page "https://www.maier-komor.de/xjobs.html")
     (properties `((release-monitoring-url . ,home-page)))
     (synopsis
      "Parallel execution of jobs with several useful options")
diff --git a/gnu/packages/patches/azr3-remove-lash.patch b/gnu/packages/patches/azr3-remove-lash.patch
new file mode 100644
index 0000000000..d5d481c5dd
--- /dev/null
+++ b/gnu/packages/patches/azr3-remove-lash.patch
@@ -0,0 +1,191 @@
+Remove any reference to LASH, which has been abandoned and still requires the
+use of Python 2.
+
+diff --git a/Makefile b/Makefile
+index 7c9f4f0..f82ba75 100644
+--- a/Makefile
++++ b/Makefile
+@@ -10,7 +10,7 @@ PACKAGE_WEBPAGE = "http://ll-plugins.nongnu.org/azr3/"
+ PACKAGE_BUGTRACKER = "https://savannah.nongnu.org/bugs/?group=ll-plugins"
+ PACKAGE_VC = "http://git.savannah.gnu.org/cgit/ll-plugins/azr3-jack.git/"
+ 
+-PKG_DEPS = gtkmm-2.4>=2.8.8 jack>=0.103.0 lash-1.0>=0.5.3
++PKG_DEPS = gtkmm-2.4>=2.8.8 jack>=0.103.0
+ 
+ 
+ PROGRAMS = azr3
+@@ -32,8 +32,8 @@ azr3_SOURCES = \
+ 	drawbar.hpp drawbar.cpp \
+ 	textbox.hpp textbox.cpp
+ azr3_SOURCEDIR = azr3
+-azr3_CFLAGS = `pkg-config --cflags gtkmm-2.4 jack lash-1.0` -DDATADIR=\"$(pkgdatadir)\"
+-azr3_LDFLAGS = `pkg-config --libs gtkmm-2.4 jack lash-1.0` -lpthread
++azr3_CFLAGS = `pkg-config --cflags gtkmm-2.4 jack` -DDATADIR=\"$(pkgdatadir)\"
++azr3_LDFLAGS = `pkg-config --libs gtkmm-2.4 jack` -lpthread
+ azr3_cpp_CFLAGS = $(shell if pkg-config --atleast-version=0.107 jack ; then echo -include azr3/newjack.hpp; fi)
+ main_cpp_CFLAGS = -DPACKAGE_VERSION=\"$(PACKAGE_VERSION)\"
+ 
+diff --git a/azr3/main.cpp b/azr3/main.cpp
+index 344fd03..fbe5671 100644
+--- a/azr3/main.cpp
++++ b/azr3/main.cpp
+@@ -32,13 +32,6 @@ using namespace std;
+ 
+ 
+ Main::Main(int& argc, char**& argv) : m_ok(false) {
+-  
+-  /* this is a bit dumb, but the only way I know of to check whether we were
+-     started by lashd is to see if lash_extract_args() removes any arguments */
+-  int old_argc = argc;  
+-  lash_args_t* lash_args = lash_extract_args(&argc, &argv);
+-  m_started_by_lashd = (argc != old_argc);
+-  
+   // parse all non-LASH arguments
+   OptionParser op;
+   bool help(false);
+@@ -166,10 +159,6 @@ Main::Main(int& argc, char**& argv) : m_ok(false) {
+     }
+   }
+     
+-  // initialise LASH
+-  if (!init_lash(lash_args, jack_get_client_name(m_jack_client)))
+-    return;
+-  
+   m_win->set_title("AZR-3");
+   m_win->set_resizable(false);
+   m_win->add(*m_gui);
+@@ -184,14 +173,11 @@ void Main::run() {
+   jack_activate(m_jack_client);
+ 
+   // auto-connect JACK ports if desired
+-  if (!m_started_by_lashd)
+-    auto_connect();
++  auto_connect();
+ 
+   Glib::signal_timeout().
+     connect(sigc::bind_return(sigc::mem_fun(*this, &Main::check_changes), 
+ 			      true), 10);
+-  Glib::signal_timeout().
+-    connect(sigc::mem_fun(*this, &Main::check_lash_events), 500);
+   m_kit->run(*m_win);
+   jack_deactivate(m_jack_client);
+   m_engine->deactivate();
+@@ -343,83 +329,7 @@ int Main::process(jack_nframes_t nframes) {
+     
+   return 0;
+ }
+-
+-
+-bool Main::check_lash_events() {
+-  lash_event_t* event;
+-  bool go_on = true;
+-  while ((event = lash_get_event(m_lash_client))) {
+-      
+-    // save
+-    if (lash_event_get_type(event) == LASH_Save_File) {
+-      cerr<<"Received LASH Save command"<<endl;
+-      string dir(lash_event_get_string(event));
+-      ofstream fout((dir + "/state").c_str());
+-      fout<<int(m_program);
+-      for (uint32_t i = 0; i < 63; ++i)
+-	fout<<" "<<m_gui_controls[i];
+-      fout<<endl;
+-      write_presets((dir + "/presets").c_str());
+-      lash_send_event(m_lash_client, 
+-		      lash_event_new_with_type(LASH_Save_File));
+-    }
+-      
+-    // restore
+-    else if (lash_event_get_type(event) == LASH_Restore_File) {
+-      cerr<<"Received LASH Restore command"<<endl;
+-      string dir(lash_event_get_string(event));
+-      for (unsigned char i = 0; i < 128; ++i)
+-	m_presets[i].empty = true;
+-      load_presets((dir + "/presets").c_str());
+-      m_gui->clear_programs();
+-      for (unsigned char i = 0; i < 128; ++i) {
+-	if (!m_presets[i].empty)
+-	  m_gui->add_program(i, m_presets[i].name.c_str());
+-      }
+-      ifstream fin((dir + "/state").c_str());
+-      int prog;
+-      fin>>prog;
+-      m_gui->set_program(prog);
+-      for (uint32_t p = 0; p < 63; ++p) {
+-	float tmp;
+-	fin>>tmp;
+-	m_gui->set_control(p, tmp);
+-      }
+-      lash_send_event(m_lash_client, 
+-		      lash_event_new_with_type(LASH_Restore_File));
+-    }
+-      
+-    // quit
+-    else if (lash_event_get_type(event) == LASH_Quit) {
+-      cerr<<"Received LASH Quit command"<<endl;
+-      Gtk::Main::instance()->quit();
+-      go_on = false;
+-    }
+-    
+-    lash_event_destroy(event);
+-  }
+-  return go_on;
+-}
+-
+-
+-bool Main::init_lash(lash_args_t* lash_args, const std::string& jack_name) {
+-  
+-  m_lash_client = lash_init(lash_args, "AZR-3", 
+-			    LASH_Config_File, LASH_PROTOCOL(2, 0));
+-  if (m_lash_client) {
+-    lash_event_t* event = lash_event_new_with_type(LASH_Client_Name);
+-    lash_event_set_string(event, "AZR-3");
+-    lash_send_event(m_lash_client, event);      
+-    lash_jack_client_name(m_lash_client, jack_name.c_str());
+-    Glib::signal_timeout().
+-      connect(sigc::mem_fun(*this, &Main::check_lash_events), 500);
+-  }
+-  else
+-    cerr<<"Could not initialise LASH!"<<endl;
+-  return (m_lash_client != 0);
+-}
+-  
+-  
++ 
+ int Main::static_process(jack_nframes_t frames, void* arg) {
+   return static_cast<Main*>(arg)->process(frames);
+ }
+diff --git a/azr3/main.hpp b/azr3/main.hpp
+index 48a425c..0406295 100644
+--- a/azr3/main.hpp
++++ b/azr3/main.hpp
+@@ -25,7 +25,6 @@
+ #include <gtkmm.h>
+ #include <pthread.h>
+ #include <semaphore.h>
+-#include <lash/lash.h>
+ 
+ #include "azr3.hpp"
+ #include "azr3gui.hpp"
+@@ -65,10 +64,6 @@ protected:
+ 
+   int process(jack_nframes_t nframes);
+ 
+-  bool check_lash_events();
+-
+-  bool init_lash(lash_args_t* lash_args, const std::string& jack_name);
+-
+   void auto_connect();
+ 
+   static int static_process(jack_nframes_t frames, void* arg);
+@@ -89,10 +84,8 @@ protected:
+   sem_t m_gui_changed;
+   float m_gui_controls[63];
+   Preset m_presets[128];
+-  lash_client_t* m_lash_client;
+ 
+   bool m_ok;
+-  bool m_started_by_lashd;
+   std::string m_auto_midi;
+   std::string m_auto_audio;
+   
diff --git a/gnu/packages/patches/azr3.patch b/gnu/packages/patches/azr3.patch
index 5849383c5b..93e9b5b11a 100644
--- a/gnu/packages/patches/azr3.patch
+++ b/gnu/packages/patches/azr3.patch
@@ -68,9 +68,9 @@ The patch has been sent to the developer on 2016-09-26.
    Widget* eb = add_clickbox(m_fbox, 14, 319, 14, 44);
    eb->signal_button_press_event().
 -    connect(sigc::hide(bind(bind(mem_fun(*this, &AZR3GUI::change_mode), 
--				 ref(m_fbox)), false)));
+-				 sigc::ref(m_fbox)), false)));
 +    connect(sigc::hide(sigc::bind(sigc::mem_fun(*this, &AZR3GUI::change_mode), 
-+                                  false, std::ref(m_fbox))));
++                                  false, sigc::ref(m_fbox))));
    m_fx_widgets.push_back(eb);
    
    // Mr Valve controls
@@ -79,15 +79,15 @@ The patch has been sent to the developer on 2016-09-26.
    Widget* eb2 = add_clickbox(m_vbox, 14, 53, 14, 44);
    eb2->signal_button_press_event().
 -    connect(sigc::hide(bind(bind(mem_fun(*this, &AZR3GUI::change_mode), 
--				 ref(m_fbox)), true)));
+-				 sigc::ref(m_fbox)), true)));
 +    connect(sigc::hide(sigc::bind(sigc::mem_fun(*this, &AZR3GUI::change_mode), 
-+                                  true, std::ref(m_fbox))));
++                                  true, sigc::ref(m_fbox))));
  
    // vibrato controls
    add_switch(m_vbox, n_1_vibrato, 39, 17, Switch::Green);
 @@ -352,9 +352,9 @@
    knob->set_style(s);
-   if (port >= 0 && port < m_adj.size()) {
+   if (port < m_adj.size()) {
      knob->get_adjustment().signal_value_changed().
 -      connect(compose(bind<0>(mem_fun(*this, &AZR3GUI::control_changed), port),
 -		      mem_fun(knob->get_adjustment(), 
@@ -100,7 +100,7 @@ The patch has been sent to the developer on 2016-09-26.
    }
 @@ -382,8 +382,8 @@
    db->set_style(s);
-   if (port >= 0 && port < m_adj.size()) {
+   if (port < m_adj.size()) {
      db->get_adjustment().signal_value_changed().
 -      connect(compose(bind<0>(mem_fun(*this, &AZR3GUI::control_changed), port),
 -		      mem_fun(db->get_adjustment(), &Adjustment::get_value)));
diff --git a/gnu/packages/patches/bees-beesd-honor-destdir-on-installation.patch b/gnu/packages/patches/bees-beesd-honor-destdir-on-installation.patch
deleted file mode 100644
index 93817f42cf..0000000000
--- a/gnu/packages/patches/bees-beesd-honor-destdir-on-installation.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 66b00f8a972ebb4da68f7aa0d0656f43ce2a2c3a Mon Sep 17 00:00:00 2001
-From: Hilton Chain <hako@ultrarare.space>
-Date: Fri, 23 Dec 2022 11:04:46 +0800
-Subject: [PATCH] beesd: Honor DESTDIR on installation.
-
-Co-authored-by: Adam Faiz <adam.faiz@disroot.org>
-Signed-off-by: Hilton Chain <hako@ultrarare.space>
----
- Defines.mk       | 1 +
- scripts/beesd.in | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/Defines.mk b/Defines.mk
-index 9e8df40..e5394ba 100644
---- a/Defines.mk
-+++ b/Defines.mk
-@@ -2,6 +2,7 @@ MAKE += PREFIX=$(PREFIX) LIBEXEC_PREFIX=$(LIBEXEC_PREFIX) ETC_PREFIX=$(ETC_PREFI
-
- define TEMPLATE_COMPILER =
- sed $< >$@ \
-+		-e's#@DESTDIR@#$(DESTDIR)#' \
- 		-e's#@PREFIX@#$(PREFIX)#' \
- 		-e's#@ETC_PREFIX@#$(ETC_PREFIX)#' \
- 		-e's#@LIBEXEC_PREFIX@#$(LIBEXEC_PREFIX)#'
-diff --git a/scripts/beesd.in b/scripts/beesd.in
-index 174bb6c..35d04aa 100755
---- a/scripts/beesd.in
-+++ b/scripts/beesd.in
-@@ -15,7 +15,7 @@ readonly AL128K="$((128*1024))"
- readonly AL16M="$((16*1024*1024))"
- readonly CONFIG_DIR=@ETC_PREFIX@/bees/
-
--readonly bees_bin=$(realpath @LIBEXEC_PREFIX@/bees)
-+readonly bees_bin=$(realpath @DESTDIR@/@LIBEXEC_PREFIX@/bees)
-
- command -v "$bees_bin" &> /dev/null || ERRO "Missing 'bees' agent"
-
---
-2.38.1
-
diff --git a/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch b/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch
deleted file mode 100644
index 998bf08718..0000000000
--- a/gnu/packages/patches/cabal-install-base16-bytestring1.0.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Restore compatibility with newer version of base16-bytestring.
-
-Taken from https://raw.githubusercontent.com/archlinux/svntogit-community/packages/trunk/cabal-install-base16-bytestring1.0.patch
-
-diff --git a/Distribution/Client/HashValue.hs b/Distribution/Client/HashValue.hs
-index 54b8aee9e..11e647c1c 100644
---- a/Distribution/Client/HashValue.hs
-+++ b/Distribution/Client/HashValue.hs
-@@ -1,3 +1,4 @@
-+{-# LANGUAGE CPP          #-}
- {-# LANGUAGE DeriveDataTypeable #-}
- {-# LANGUAGE DeriveGeneric      #-}
- module Distribution.Client.HashValue (
-@@ -72,10 +73,14 @@ hashFromTUF (Sec.Hash hashstr) =
-     --TODO: [code cleanup] either we should get TUF to use raw bytestrings or
-     -- perhaps we should also just use a base16 string as the internal rep.
-     case Base16.decode (BS.pack hashstr) of
-+#if MIN_VERSION_base16_bytestring(1,0,0)
-+      Right hash -> HashValue hash
-+      Left _ -> error "hashFromTUF: cannot decode base16"
-+#else
-       (hash, trailing) | not (BS.null hash) && BS.null trailing
-         -> HashValue hash
-       _ -> error "hashFromTUF: cannot decode base16 hash"
--
-+#endif
- 
- -- | Truncate a 32 byte SHA256 hash to
- --
diff --git a/gnu/packages/patches/cabal-install-ghc8.10.patch b/gnu/packages/patches/cabal-install-ghc8.10.patch
deleted file mode 100644
index 67c0953058..0000000000
--- a/gnu/packages/patches/cabal-install-ghc8.10.patch
+++ /dev/null
@@ -1,393 +0,0 @@
-From ac9b41eef3c781ce188ded2551f98fe75152e30c Mon Sep 17 00:00:00 2001
-From: Oleg Grenrus <oleg.grenrus@iki.fi>
-Date: Tue, 14 Apr 2020 11:31:34 +0300
-Subject: [PATCH] GHC-8.10 support for 3.2
-
-Includes cherry-picked commits:
-
-- Test cabal-install with GHC-8.10 #6709
-- Add GHC-8.10.1 job. Only tests Cabal-the-lib part atm. #6617
-
-Also add topHandler' signature.
----
- .docker/validate-8.10.1.dockerfile            |  60 ++++++
- .github/workflows/artifacts.yml               |   6 +-
- .github/workflows/bootstrap.yml               |   4 +-
- .github/workflows/linux.yml                   | 179 ++++++++++++------
- .github/workflows/macos.yml                   |  40 ++--
- .github/workflows/quick-jobs.yml              |   4 +-
- .github/workflows/windows.yml                 | 117 +++++++++++-
- .../Distribution/PackageDescription/Quirks.hs |  19 +-
- Makefile                                      |   4 +
- boot/ci-artifacts.template.yml                |   6 +-
- boot/ci-bootstrap.template.yml                |   4 +-
- boot/ci-linux.template.yml                    |   8 +-
- boot/ci-macos.template.yml                    |   7 +-
- boot/ci-quick-jobs.template.yml               |   4 +-
- boot/ci-windows.template.yml                  |   8 +-
- cabal-dev-scripts/src/GenValidate.hs          |  33 ++--
- Distribution/Client/CmdSdist.hs |   3 +
- .../Distribution/Client/FetchUtils.hs         |   4 +-
- .../Distribution/Client/IndexUtils.hs         |   2 +-
- Distribution/Client/Sandbox.hs  |   5 +-
- .../Distribution/Client/TargetSelector.hs     |   2 +-
- Distribution/Client/Update.hs   |   4 +-
- .../Distribution/Client/Utils/Json.hs         |  13 +-
- .../Distribution/Solver/Modular/Assignment.hs |  11 +-
- .../Distribution/Solver/Modular/Builder.hs    |  10 +-
- .../Distribution/Solver/Modular/Index.hs      |   6 +-
- .../Solver/Modular/IndexConversion.hs         |   8 +-
- .../Distribution/Solver/Modular/Solver.hs     |  12 +-
- .../Distribution/Solver/Modular/Validate.hs   |   5 +-
- bootstrap.sh                    |   6 +-
- cabal-install.cabal             |   4 +-
- cabal-install.cabal.pp          |   4 +-
- .../targets/complex/q/q.cabal                 |   3 +-
- cabal-testsuite/cabal-testsuite.cabal         |   4 +-
- validate.sh                                   |  21 +-
- 35 files changed, 461 insertions(+), 169 deletions(-)
- create mode 100644 .docker/validate-8.10.1.dockerfile
-diff --git a/Distribution/Client/CmdSdist.hs b/Distribution/Client/CmdSdist.hs
-index 9ce0c80100e..a22317004c4 100644
---- a/Distribution/Client/CmdSdist.hs
-+++ b/Distribution/Client/CmdSdist.hs
-@@ -237,7 +237,10 @@ packageToSdist verbosity projectRootDir format outputFile pkg = do
-         (norm NoExec -> nonexec, norm Exec -> exec) <-
-            listPackageSources verbosity (flattenPackageDescription $ packageDescription pkg) knownSuffixHandlers
- 
-+        print $ map snd exec
-+        print $ map snd nonexec
-         let files =  nub . sortOn snd $ nonexec ++ exec
-+        print files
- 
-         case format of
-             SourceList nulSep -> do
-diff --git a/Distribution/Client/FetchUtils.hs b/Distribution/Client/FetchUtils.hs
-index e9a31a91f84..4e5e581f9ec 100644
---- a/Distribution/Client/FetchUtils.hs
-+++ b/Distribution/Client/FetchUtils.hs
-@@ -176,8 +176,8 @@ fetchRepoTarball verbosity' repoCtxt repo pkgid = do
-     verbosity = verboseUnmarkOutput verbosity'
- 
-     downloadRepoPackage = case repo of
--      RepoLocal{..} -> return (packageFile repo pkgid)
--      RepoLocalNoIndex{..} -> return (packageFile repo pkgid)
-+      RepoLocal{} -> return (packageFile repo pkgid)
-+      RepoLocalNoIndex{} -> return (packageFile repo pkgid)
- 
-       RepoRemote{..} -> do
-         transport <- repoContextGetTransport repoCtxt
-diff --git a/Distribution/Client/IndexUtils.hs b/Distribution/Client/IndexUtils.hs
-index a76becc05ba..bf0ff7cf5ba 100644
---- a/Distribution/Client/IndexUtils.hs
-+++ b/Distribution/Client/IndexUtils.hs
-@@ -634,7 +634,7 @@ withIndexEntries
-     -> ([IndexCacheEntry] -> IO a)
-     -> ([NoIndexCacheEntry] -> IO a)
-     -> IO a
--withIndexEntries _ (RepoIndex repoCtxt repo@RepoSecure{..}) callback _ =
-+withIndexEntries _ (RepoIndex repoCtxt repo@RepoSecure{}) callback _ =
-     repoContextWithSecureRepo repoCtxt repo $ \repoSecure ->
-       Sec.withIndex repoSecure $ \Sec.IndexCallbacks{..} -> do
-         -- Incrementally (lazily) read all the entries in the tar file in order,
-diff --git a/Distribution/Client/Sandbox.hs b/Distribution/Client/Sandbox.hs
-index 66b415d7239..14bad3f2135 100644
---- a/Distribution/Client/Sandbox.hs
-+++ b/Distribution/Client/Sandbox.hs
-@@ -666,7 +666,7 @@ reinstallAddSourceDeps :: Verbosity
-                           -> FilePath
-                           -> IO WereDepsReinstalled
- reinstallAddSourceDeps verbosity configFlags' configExFlags
--                       installFlags globalFlags sandboxDir = topHandler' $ do
-+                       installFlags globalFlags sandboxDir = topHandlerWith errorMsg $ do
-   let sandboxDistPref     = sandboxBuildDir sandboxDir
-       configFlags         = configFlags'
-                             { configDistPref  = Flag sandboxDistPref }
-@@ -710,7 +710,8 @@ reinstallAddSourceDeps verbosity configFlags' configExFlags
-         ++ "offending packages or recreating the sandbox."
-       logMsg message rest = debugNoWrap verbosity message >> rest
- 
--      topHandler' = topHandlerWith $ \_ -> do
-+      errorMsg :: a -> IO WereDepsReinstalled
-+      errorMsg _ = do
-         warn verbosity "Couldn't reinstall some add-source dependencies."
-         -- Here we can't know whether any deps have been reinstalled, so we have
-         -- to be conservative.
-diff --git a/Distribution/Client/TargetSelector.hs b/Distribution/Client/TargetSelector.hs
-index 23d92f580fd..f8f683d9875 100644
---- a/Distribution/Client/TargetSelector.hs
-+++ b/Distribution/Client/TargetSelector.hs
-@@ -222,7 +222,7 @@ readTargetSelectorsWith :: (Applicative m, Monad m) => DirActions m
-                         -> Maybe ComponentKindFilter
-                         -> [String]
-                         -> m (Either [TargetSelectorProblem] [TargetSelector])
--readTargetSelectorsWith dirActions@DirActions{..} pkgs mfilter targetStrs =
-+readTargetSelectorsWith dirActions@DirActions{} pkgs mfilter targetStrs =
-     case parseTargetStrings targetStrs of
-       ([], usertargets) -> do
-         usertargets' <- mapM (getTargetStringFileStatus dirActions) usertargets
-diff --git a/Distribution/Client/Update.hs b/Distribution/Client/Update.hs
-index 52bb1f76c96..8ded78b9d2e 100644
---- a/Distribution/Client/Update.hs
-+++ b/Distribution/Client/Update.hs
-@@ -73,8 +73,8 @@ updateRepo :: Verbosity -> UpdateFlags -> RepoContext -> Repo -> IO ()
- updateRepo verbosity updateFlags repoCtxt repo = do
-   transport <- repoContextGetTransport repoCtxt
-   case repo of
--    RepoLocal{..} -> return ()
--    RepoLocalNoIndex{..} -> return ()
-+    RepoLocal{} -> return ()
-+    RepoLocalNoIndex{} -> return ()
-     RepoRemote{..} -> do
-       downloadResult <- downloadIndex transport verbosity repoRemote repoLocalDir
-       case downloadResult of
-diff --git a/Distribution/Client/Utils/Json.hs b/Distribution/Client/Utils/Json.hs
-index 89a13af87a4..01d5753136b 100644
---- a/Distribution/Client/Utils/Json.hs
-+++ b/Distribution/Client/Utils/Json.hs
-@@ -15,12 +15,9 @@ module Distribution.Client.Utils.Json
-     )
-     where
- 
--import Data.Char
--import Data.Int
--import Data.String
--import Data.Word
--import Data.List
--import Data.Monoid
-+import Distribution.Client.Compat.Prelude
-+
-+import Data.Char (intToDigit)
- 
- import Data.ByteString.Builder (Builder)
- import qualified Data.ByteString.Builder as BB
-@@ -135,13 +132,13 @@ encodeArrayBB :: [Value] -> Builder
- encodeArrayBB [] = "[]"
- encodeArrayBB jvs = BB.char8 '[' <> go jvs <> BB.char8 ']'
-   where
--    go = Data.Monoid.mconcat . intersperse (BB.char8 ',') . map encodeValueBB
-+    go = mconcat . intersperse (BB.char8 ',') . map encodeValueBB
- 
- encodeObjectBB :: Object -> Builder
- encodeObjectBB [] = "{}"
- encodeObjectBB jvs = BB.char8 '{' <> go jvs <> BB.char8 '}'
-   where
--    go = Data.Monoid.mconcat . intersperse (BB.char8 ',') . map encPair
-+    go = mconcat . intersperse (BB.char8 ',') . map encPair
-     encPair (l,x) = encodeStringBB l <> BB.char8 ':' <> encodeValueBB x
- 
- encodeStringBB :: String -> Builder
-diff --git a/Distribution/Solver/Modular/Assignment.hs b/Distribution/Solver/Modular/Assignment.hs
-index be5e63bfbc1..b05a099ec5a 100644
---- a/Distribution/Solver/Modular/Assignment.hs
-+++ b/Distribution/Solver/Modular/Assignment.hs
-@@ -9,10 +9,11 @@ module Distribution.Solver.Modular.Assignment
- import Prelude ()
- import Distribution.Solver.Compat.Prelude hiding (pi)
- 
--import Data.Array as A
--import Data.List as L
--import Data.Map as M
--import Data.Maybe
-+import qualified Data.Array as A
-+import qualified Data.List as L
-+import qualified Data.Map as M
-+
-+import Data.Maybe (fromJust)
- 
- import Distribution.PackageDescription (FlagAssignment, mkFlagAssignment) -- from Cabal
- 
-@@ -79,7 +80,7 @@ toCPs (A pa fa sa) rdm =
-     -- Dependencies per package.
-     depp :: QPN -> [(Component, PI QPN)]
-     depp qpn = let v :: Vertex
--                   v   = fromJust (cvm qpn)
-+                   v   = fromJust (cvm qpn) -- TODO: why this is safe?
-                    dvs :: [(Component, Vertex)]
-                    dvs = tg A.! v
-                in L.map (\ (comp, dv) -> case vm dv of (_, x, _) -> (comp, PI x (pa M.! x))) dvs
-diff --git a/Distribution/Solver/Modular/Builder.hs b/Distribution/Solver/Modular/Builder.hs
-index eb11a36aa16..5d196f4fd9f 100644
---- a/Distribution/Solver/Modular/Builder.hs
-+++ b/Distribution/Solver/Modular/Builder.hs
-@@ -19,10 +19,10 @@ module Distribution.Solver.Modular.Builder (
- -- flag-guarded dependencies, we cannot introduce them immediately. Instead, we
- -- store the entire dependency.
- 
--import Data.List as L
--import Data.Map as M
--import Data.Set as S
--import Prelude hiding (sequence, mapM)
-+import qualified Data.List as L
-+import qualified Data.Map as M
-+import qualified Data.Set as S
-+import Prelude
- 
- import qualified Distribution.Solver.Modular.ConflictSet as CS
- import Distribution.Solver.Modular.Dependency
-@@ -55,7 +55,7 @@ data BuildState = BS {
- }
- 
- -- | Map of available linking targets.
--type LinkingState = Map (PN, I) [PackagePath]
-+type LinkingState = M.Map (PN, I) [PackagePath]
- 
- -- | Extend the set of open goals with the new goals listed.
- --
-diff --git a/Distribution/Solver/Modular/Index.hs b/Distribution/Solver/Modular/Index.hs
-index fdddfc8237a..ac60fec7d65 100644
---- a/Distribution/Solver/Modular/Index.hs
-+++ b/Distribution/Solver/Modular/Index.hs
-@@ -6,10 +6,12 @@ module Distribution.Solver.Modular.Index
-     , mkIndex
-     ) where
- 
--import Data.List as L
--import Data.Map as M
- import Prelude hiding (pi)
- 
-+import Data.Map (Map)
-+import qualified Data.List as L
-+import qualified Data.Map as M
-+
- import Distribution.Solver.Modular.Dependency
- import Distribution.Solver.Modular.Flag
- import Distribution.Solver.Modular.Package
-diff --git a/Distribution/Solver/Modular/IndexConversion.hs b/Distribution/Solver/Modular/IndexConversion.hs
-index c9565c80dba..8e9ef614184 100644
---- a/Distribution/Solver/Modular/IndexConversion.hs
-+++ b/Distribution/Solver/Modular/IndexConversion.hs
-@@ -2,12 +2,12 @@ module Distribution.Solver.Modular.IndexConversion
-     ( convPIs
-     ) where
- 
--import Data.List as L
-+import qualified Data.List as L
- import Data.Map.Strict (Map)
- import qualified Data.Map.Strict as M
--import Data.Maybe
-+import Data.Maybe (mapMaybe, fromMaybe, maybeToList)
- import Data.Monoid as Mon
--import Data.Set as S
-+import qualified Data.Set as S
- 
- import Distribution.Compiler
- import Distribution.InstalledPackageInfo as IPI
-@@ -330,7 +330,7 @@ flagInfo (StrongFlags strfl) =
- 
- -- | Internal package names, which should not be interpreted as true
- -- dependencies.
--type IPNs = Set PN
-+type IPNs = S.Set PN
- 
- -- | Convenience function to delete a 'Dependency' if it's
- -- for a 'PN' that isn't actually real.
-diff --git a/Distribution/Solver/Modular/Solver.hs b/Distribution/Solver/Modular/Solver.hs
-index 32452550556..e6aa1fb4374 100644
---- a/Distribution/Solver/Modular/Solver.hs
-+++ b/Distribution/Solver/Modular/Solver.hs
-@@ -9,9 +9,9 @@ module Distribution.Solver.Modular.Solver
-     , PruneAfterFirstSuccess(..)
-     ) where
- 
--import Data.Map as M
--import Data.List as L
--import Data.Set as S
-+import qualified Data.Map as M
-+import qualified Data.List as L
-+import qualified Data.Set as S
- import Distribution.Verbosity
- 
- import Distribution.Compiler (CompilerInfo)
-@@ -91,8 +91,8 @@ solve :: SolverConfig                         -- ^ solver parameters
-       -> Index                                -- ^ all available packages as an index
-       -> PkgConfigDb                          -- ^ available pkg-config pkgs
-       -> (PN -> PackagePreferences)           -- ^ preferences
--      -> Map PN [LabeledPackageConstraint]    -- ^ global constraints
--      -> Set PN                               -- ^ global goals
-+      -> M.Map PN [LabeledPackageConstraint]  -- ^ global constraints
-+      -> S.Set PN                             -- ^ global goals
-       -> RetryLog Message SolverFailure (Assignment, RevDepMap)
- solve sc cinfo idx pkgConfigDB userPrefs userConstraints userGoals =
-   explorePhase     $
-@@ -232,7 +232,7 @@ instance GSimpleTree (Tree d c) where
- 
-       -- Show conflict set
-       goCS :: ConflictSet -> String
--      goCS cs = "{" ++ (intercalate "," . L.map showVar . CS.toList $ cs) ++ "}"
-+      goCS cs = "{" ++ (L.intercalate "," . L.map showVar . CS.toList $ cs) ++ "}"
- #endif
- 
- -- | Replace all goal reasons with a dummy goal reason in the tree
-diff --git a/Distribution/Solver/Modular/Validate.hs b/Distribution/Solver/Modular/Validate.hs
-index 6195d101b02..a3dec6e1f67 100644
---- a/Distribution/Solver/Modular/Validate.hs
-+++ b/Distribution/Solver/Modular/Validate.hs
-@@ -15,11 +15,12 @@ module Distribution.Solver.Modular.Validate (validateTree) where
- import Control.Applicative
- import Control.Monad.Reader hiding (sequence)
- import Data.Function (on)
--import Data.List as L
--import Data.Set as S
- import Data.Traversable
- import Prelude hiding (sequence)
- 
-+import qualified Data.List as L
-+import qualified Data.Set as S
-+
- import Language.Haskell.Extension (Extension, Language)
- 
- import Data.Map.Strict as M
-diff --git a/bootstrap.sh b/bootstrap.sh
-index 077d7f4efd2..d5141660474 100755
---- a/bootstrap.sh
-+++ b/bootstrap.sh
-@@ -260,9 +260,9 @@ EDIT_DISTANCE_VER="0.2.2.1"; EDIT_DISTANCE_VER_REGEXP="0\.2\.2\.?"
-                        # 0.2.2.*
- ED25519_VER="0.0.5.0"; ED25519_VER_REGEXP="0\.0\.?"
-                        # 0.0.*
--HACKAGE_SECURITY_VER="0.6.0.0"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
--                       # >= 0.7.0.0 && < 0.7
--TAR_VER="0.5.1.0";     TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
-+HACKAGE_SECURITY_VER="0.6.0.1"; HACKAGE_SECURITY_VER_REGEXP="0\.6\."
-+                       # >= 0.6.0.0 && < 0.7
-+TAR_VER="0.5.1.1";     TAR_VER_REGEXP="0\.5\.([1-9]|1[0-9]|0\.[3-9]|0\.1[0-9])\.?"
-                        # >= 0.5.0.3  && < 0.6
- DIGEST_VER="0.0.1.2"; DIGEST_REGEXP="0\.0\.(1\.[2-9]|[2-9]\.?)"
-                        # >= 0.0.1.2 && < 0.1
-diff --git a/cabal-install.cabal b/cabal-install.cabal
-index 985ea9a5a69..c9d713c29fe 100644
---- a/cabal-install.cabal
-+++ b/cabal-install.cabal
-@@ -316,7 +316,7 @@ executable cabal
-     build-depends:
-         async      >= 2.0      && < 2.3,
-         array      >= 0.4      && < 0.6,
--        base       >= 4.8      && < 4.14,
-+        base       >= 4.8      && < 4.15,
-         base16-bytestring >= 0.1.1 && < 0.2,
-         binary     >= 0.7.3    && < 0.9,
-         bytestring >= 0.10.6.0 && < 0.11,
-@@ -341,7 +341,7 @@ executable cabal
-         time       >= 1.5.0.1  && < 1.10,
-         transformers >= 0.4.2.0 && < 0.6,
-         zlib       >= 0.5.3    && < 0.7,
--        hackage-security >= 0.6.0.0 && < 0.7,
-+        hackage-security >= 0.6.0.1 && < 0.7,
-         text       >= 1.2.3    && < 1.3,
-         parsec     >= 3.1.13.0 && < 3.2
- 
-diff --git a/tests/IntegrationTests2/targets/complex/q/q.cabal b/tests/IntegrationTests2/targets/complex/q/q.cabal
-index 556fa4a4202..7ee22fcb28d 100644
---- a/tests/IntegrationTests2/targets/complex/q/q.cabal
-+++ b/tests/IntegrationTests2/targets/complex/q/q.cabal
-@@ -5,7 +5,8 @@ cabal-version: >= 1.2
- 
- library
-   exposed-modules: Q
--  build-depends: base, filepath
-+  -- we rely that filepath has filepath-tests component
-+  build-depends: base, filepath >=1.4.0.0
- 
- executable buildable-false
-   main-is: Main.hs
diff --git a/gnu/packages/patches/ddclient-skip-test.patch b/gnu/packages/patches/ddclient-skip-test.patch
new file mode 100644
index 0000000000..28d748997b
--- /dev/null
+++ b/gnu/packages/patches/ddclient-skip-test.patch
@@ -0,0 +1,43 @@
+From e5657802025f238b39581534f3b4d408565c8943 Mon Sep 17 00:00:00 2001
+From: Bruno Victal <mirai@makinata.eu>
+Date: Sun, 5 Feb 2023 21:05:00 +0000
+Subject: [PATCH] Disable sandbox incompatible tests.
+
+See: https://github.com/ddclient/ddclient/issues/465
+---
+ t/get_ip_from_if.pl | 21 ---------------------
+ 1 file changed, 21 deletions(-)
+
+diff --git a/t/get_ip_from_if.pl b/t/get_ip_from_if.pl
+index 6f08e5d..d78c3d0 100644
+--- a/t/get_ip_from_if.pl
++++ b/t/get_ip_from_if.pl
+@@ -39,25 +39,4 @@ subtest "get_ip_from_interface tests" => sub {
+     }
+ };
+ 
+-subtest "Get default interface and IP for test system" => sub {
+-    my $interface = ddclient::get_default_interface(4);
+-    if ($interface) {
+-        isnt($interface, "lo", "Check for loopback 'lo'");
+-        isnt($interface, "lo0", "Check for loopback 'lo0'");
+-        my $ip1 = ddclient::get_ip_from_interface("default", 4);
+-        my $ip2 = ddclient::get_ip_from_interface($interface, 4);
+-        is($ip1, $ip2, "Check IPv4 from default interface");
+-        ok(ddclient::is_ipv4($ip1), "Valid IPv4 from get_ip_from_interface($interface)");
+-    }
+-    $interface = ddclient::get_default_interface(6);
+-    if ($interface) {
+-        isnt($interface, "lo", "Check for loopback 'lo'");
+-        isnt($interface, "lo0", "Check for loopback 'lo0'");
+-        my $ip1 = ddclient::get_ip_from_interface("default", 6);
+-        my $ip2 = ddclient::get_ip_from_interface($interface, 6);
+-        is($ip1, $ip2, "Check IPv6 from default interface");
+-        ok(ddclient::is_ipv6($ip1), "Valid IPv6 from get_ip_from_interface($interface)");
+-    }
+-};
+-
+ done_testing();
+-- 
+2.38.1
+
diff --git a/gnu/packages/patches/elm-ghc9.2.patch b/gnu/packages/patches/elm-ghc9.2.patch
new file mode 100644
index 0000000000..7b1e653e80
--- /dev/null
+++ b/gnu/packages/patches/elm-ghc9.2.patch
@@ -0,0 +1,187 @@
+From f88043586337ba33cf3e852908003a71dfe493ec Mon Sep 17 00:00:00 2001
+From: vlkrs <codeberg@schlecht.dev>
+Date: Sat, 7 May 2022 17:51:15 +0200
+Subject: [PATCH] Quick hack to build on ghc-9.2.2
+
+Taken from
+https://codeberg.org/vlkrs/elm-compiler/commit/f88043586337ba33cf3e852908003a71dfe493ec.patch
+
+diff --git a/compiler/src/Data/Name.hs b/compiler/src/Data/Name.hs
+index beecf114..39b64029 100644
+--- a/compiler/src/Data/Name.hs
++++ b/compiler/src/Data/Name.hs
+@@ -47,6 +47,7 @@ import qualified Data.Utf8 as Utf8
+ import GHC.Exts
+   ( Int(I#), Ptr
+   , MutableByteArray#
++  , int8ToInt#
+   , isTrue#
+   , newByteArray#
+   , sizeofByteArray#
+@@ -241,7 +242,7 @@ fromTypeVariable name@(Utf8.Utf8 ba#) index =
+   else
+     let
+       len# = sizeofByteArray# ba#
+-      end# = indexWord8Array# ba# (len# -# 1#)
++      end# = word8ToWord# (indexWord8Array# ba# (len# -# 1#))
+     in
+     if isTrue# (leWord# 0x30## end#) && isTrue# (leWord# end# 0x39##) then
+       runST
+@@ -316,11 +317,11 @@ fromManyNames names =
+         ST $ \s ->
+           case newByteArray# (len# +# 3#) s of
+             (# s, mba# #) ->
+-              case writeWord8Array# mba# 0# 0x5F## {-_-} s of
++              case writeWord8Array# mba# 0# (wordToWord8# 0x5F##) {-_-} s of
+                 s ->
+-                  case writeWord8Array# mba# 1# 0x4D## {-M-} s of
++                  case writeWord8Array# mba# 1# (wordToWord8# 0x4D##) {-M-} s of
+                     s ->
+-                      case writeWord8Array# mba# 2# 0x24## {-$-} s of
++                      case writeWord8Array# mba# 2# (wordToWord8# 0x24##) {-$-} s of
+                         s ->
+                           case copyByteArray# ba# 0# mba# 3# len# s of
+                             s ->
+diff --git a/compiler/src/Data/Utf8.hs b/compiler/src/Data/Utf8.hs
+index e985aa64..472777df 100644
+--- a/compiler/src/Data/Utf8.hs
++++ b/compiler/src/Data/Utf8.hs
+@@ -109,10 +109,10 @@ contains (W8# word#) (Utf8 ba#) =
+   containsHelp word# ba# 0# (sizeofByteArray# ba#)
+ 
+ 
+-containsHelp :: Word# -> ByteArray# -> Int# -> Int# -> Bool
++containsHelp :: Word8# -> ByteArray# -> Int# -> Int# -> Bool
+ containsHelp word# ba# !offset# len# =
+   if isTrue# (offset# <# len#) then
+-    if isTrue# (eqWord# word# (indexWord8Array# ba# offset#))
++    if isTrue# (eqWord8# word# (indexWord8Array# ba# offset#))
+       then True
+       else containsHelp word# ba# (offset# +# 1#) len#
+   else
+@@ -147,10 +147,10 @@ startsWithChar isGood bytes@(Utf8 ba#) =
+     let
+       !w# = indexWord8Array# ba# 0#
+       !char
+-        | isTrue# (ltWord# w# 0xC0##) = C# (chr# (word2Int# w#))
+-        | isTrue# (ltWord# w# 0xE0##) = chr2 ba# 0# w#
+-        | isTrue# (ltWord# w# 0xF0##) = chr3 ba# 0# w#
+-        | True                        = chr4 ba# 0# w#
++        | isTrue# (ltWord8# w# (wordToWord8# 0xC0##)) = C# (chr# (int8ToInt# (word8ToInt8# w#)))
++        | isTrue# (ltWord8# w# (wordToWord8# 0xE0##)) = chr2 ba# 0# (word8ToWord# w#)
++        | isTrue# (ltWord8# w# (wordToWord8# 0xF0##)) = chr3 ba# 0# (word8ToWord# w#)
++        | True                        = chr4 ba# 0# (word8ToWord# w#)
+     in
+     isGood char
+ 
+@@ -164,7 +164,7 @@ endsWithWord8 (W8# w#) (Utf8 ba#) =
+   let len# = sizeofByteArray# ba# in
+   isTrue# (len# ># 0#)
+   &&
+-  isTrue# (eqWord# w# (indexWord8Array# ba# (len# -# 1#)))
++  isTrue# (eqWord8# w# (indexWord8Array# ba# (len# -# 1#)))
+ 
+ 
+ 
+@@ -186,11 +186,11 @@ splitHelp str start offsets =
+       unsafeSlice str start offset : splitHelp str (offset + 1) offsets
+ 
+ 
+-findDividers :: Word# -> ByteArray# -> Int# -> Int# -> [Int] -> [Int]
++findDividers :: Word8# -> ByteArray# -> Int# -> Int# -> [Int] -> [Int]
+ findDividers divider# ba# !offset# len# revOffsets =
+   if isTrue# (offset# <# len#) then
+     findDividers divider# ba# (offset# +# 1#) len# $
+-      if isTrue# (eqWord# divider# (indexWord8Array# ba# offset#))
++      if isTrue# (eqWord8# divider# (indexWord8Array# ba# offset#))
+       then I# offset# : revOffsets
+       else revOffsets
+   else
+@@ -353,10 +353,10 @@ toCharsHelp ba# offset# len# =
+     let
+       !w# = indexWord8Array# ba# offset#
+       !(# char, width# #)
+-        | isTrue# (ltWord# w# 0xC0##) = (# C# (chr# (word2Int# w#)), 1# #)
+-        | isTrue# (ltWord# w# 0xE0##) = (# chr2 ba# offset# w#, 2# #)
+-        | isTrue# (ltWord# w# 0xF0##) = (# chr3 ba# offset# w#, 3# #)
+-        | True                        = (# chr4 ba# offset# w#, 4# #)
++        | isTrue# (ltWord8# w# (wordToWord8# 0xC0##)) = (# C# (chr# (int8ToInt# (word8ToInt8# w#))), 1# #)
++        | isTrue# (ltWord8# w# (wordToWord8# 0xE0##)) = (# chr2 ba# offset# (word8ToWord# w#), 2# #)
++        | isTrue# (ltWord8# w# (wordToWord8# 0xF0##)) = (# chr3 ba# offset# (word8ToWord# w#), 3# #)
++        | True                        = (# chr4 ba# offset# (word8ToWord# w#), 4# #)
+ 
+       !newOffset# = offset# +# width#
+     in
+@@ -368,7 +368,7 @@ chr2 :: ByteArray# -> Int# -> Word# -> Char
+ chr2 ba# offset# firstWord# =
+   let
+     !i1# = word2Int# firstWord#
+-    !i2# = word2Int# (indexWord8Array# ba# (offset# +# 1#))
++    !i2# = int8ToInt# (word8ToInt8# (indexWord8Array# ba# (offset# +# 1#)))
+     !c1# = uncheckedIShiftL# (i1# -# 0xC0#) 6#
+     !c2# = i2# -# 0x80#
+   in
+@@ -380,8 +380,8 @@ chr3 :: ByteArray# -> Int# -> Word# -> Char
+ chr3 ba# offset# firstWord# =
+   let
+     !i1# = word2Int# firstWord#
+-    !i2# = word2Int# (indexWord8Array# ba# (offset# +# 1#))
+-    !i3# = word2Int# (indexWord8Array# ba# (offset# +# 2#))
++    !i2# = int8ToInt# (word8ToInt8# (indexWord8Array# ba# (offset# +# 1#)))
++    !i3# = int8ToInt# (word8ToInt8# (indexWord8Array# ba# (offset# +# 2#)))
+     !c1# = uncheckedIShiftL# (i1# -# 0xE0#) 12#
+     !c2# = uncheckedIShiftL# (i2# -# 0x80#) 6#
+     !c3# = i3# -# 0x80#
+@@ -394,9 +394,9 @@ chr4 :: ByteArray# -> Int# -> Word# -> Char
+ chr4 ba# offset# firstWord# =
+   let
+     !i1# = word2Int# firstWord#
+-    !i2# = word2Int# (indexWord8Array# ba# (offset# +# 1#))
+-    !i3# = word2Int# (indexWord8Array# ba# (offset# +# 2#))
+-    !i4# = word2Int# (indexWord8Array# ba# (offset# +# 3#))
++    !i2# = int8ToInt# (word8ToInt8# (indexWord8Array# ba# (offset# +# 1#)))
++    !i3# = int8ToInt# (word8ToInt8# (indexWord8Array# ba# (offset# +# 2#)))
++    !i4# = int8ToInt# (word8ToInt8# (indexWord8Array# ba# (offset# +# 3#)))
+     !c1# = uncheckedIShiftL# (i1# -# 0xF0#) 18#
+     !c2# = uncheckedIShiftL# (i2# -# 0x80#) 12#
+     !c3# = uncheckedIShiftL# (i3# -# 0x80#) 6#
+@@ -471,7 +471,7 @@ toEscapedBuilderHelp before after !name@(Utf8 ba#) k =
+ escape :: Word8 -> Word8 -> Ptr a -> Utf8 t -> Int -> Int -> Int -> IO ()
+ escape before@(W8# before#) after ptr name@(Utf8 ba#) offset@(I# offset#) len@(I# len#) i@(I# i#) =
+   if isTrue# (i# <# len#) then
+-    if isTrue# (eqWord# before# (indexWord8Array# ba# (offset# +# i#)))
++    if isTrue# (eqWord8# before# (indexWord8Array# ba# (offset# +# i#)))
+     then
+       do  writeWordToPtr ptr i after
+           escape before after ptr name offset len (i + 1)
+diff --git a/compiler/src/Parse/Primitives.hs b/compiler/src/Parse/Primitives.hs
+index bb973193..3747cfac 100644
+--- a/compiler/src/Parse/Primitives.hs
++++ b/compiler/src/Parse/Primitives.hs
+@@ -82,7 +82,7 @@ instance Functor (Parser x) where
+ 
+ instance Applicative.Applicative (Parser x) where
+   {-# INLINE pure #-}
+-  pure = return
++  pure = pure
+ 
+   {-# INLINE (<*>) #-}
+   (<*>) (Parser parserFunc) (Parser parserArg) =
+diff --git a/compiler/src/Parse/Variable.hs b/compiler/src/Parse/Variable.hs
+index f3d86145..5e0ea802 100644
+--- a/compiler/src/Parse/Variable.hs
++++ b/compiler/src/Parse/Variable.hs
+@@ -22,6 +22,7 @@ import qualified Data.Set as Set
+ import Data.Word (Word8)
+ import Foreign.Ptr (Ptr, plusPtr)
+ import GHC.Exts (Char(C#), Int#, (+#), (-#), chr#, uncheckedIShiftL#, word2Int#)
++import GHC.Prim
+ import GHC.Word (Word8(W8#))
+ 
+ import qualified AST.Source as Src
+@@ -384,4 +385,4 @@ chr4 pos firstWord =
+ 
+ unpack :: Word8 -> Int#
+ unpack (W8# word#) =
+-  word2Int# word#
++  int8ToInt# (word8ToInt8# word#)
diff --git a/gnu/packages/patches/emacs-pasp-mode-quote-file-names.patch b/gnu/packages/patches/emacs-pasp-mode-quote-file-names.patch
new file mode 100644
index 0000000000..39dc5d0253
--- /dev/null
+++ b/gnu/packages/patches/emacs-pasp-mode-quote-file-names.patch
@@ -0,0 +1,20 @@
+diff --git a/pasp-mode.el b/pasp-mode.el
+index 7f83645..5daf08e 100644
+--- a/pasp-mode.el
++++ b/pasp-mode.el
+@@ -199,9 +199,12 @@
+ Argument ENCODING The current buffer which holds the problem encoding.
+ Optional argument INSTANCE The problem instance which is solved by the encoding.
+   If no instance it is assumed to be also in the encoding file."
+-  (if 'instance
+-      (concat pasp-clingo-path " " pasp-clingo-options " " encoding " " instance)
+-    (concat pasp-clingo-path " " pasp-clingo-options " " encoding)))
++  (if instance
++      (concat pasp-clingo-path " " pasp-clingo-options " "
++              (shell-quote-argument encoding) " "
++              (shell-quote-argument instance))
++    (concat pasp-clingo-path " " pasp-clingo-options " "
++            (shell-quote-argument encoding))))
+ 
+ (defun pasp-run-clingo (encoding &optional instance)
+   "Run Clingo with some ASP input files.
diff --git a/gnu/packages/patches/esmini-no-clutter-log.patch b/gnu/packages/patches/esmini-no-clutter-log.patch
new file mode 100644
index 0000000000..0920244f78
--- /dev/null
+++ b/gnu/packages/patches/esmini-no-clutter-log.patch
@@ -0,0 +1,30 @@
+Don't clutter /tmp with logs.
+
+---
+ EnvironmentSimulator/Modules/CommonMini/CommonMini.cpp | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/EnvironmentSimulator/Modules/CommonMini/CommonMini.cpp b/EnvironmentSimulator/Modules/CommonMini/CommonMini.cpp
+index 56c655dc..2750f5a6 100644
+--- a/EnvironmentSimulator/Modules/CommonMini/CommonMini.cpp
++++ b/EnvironmentSimulator/Modules/CommonMini/CommonMini.cpp
+@@ -1013,14 +1013,8 @@ void Logger::OpenLogfile(std::string filename)
+ 		file_.open(filename.c_str());
+ 		if (file_.fail())
+ 		{
+-			const char* filename_tmp = std::tmpnam(NULL);
+-			printf("Cannot open log file: %s in working directory. Trying system tmp-file: %s\n",
+-				SE_Env::Inst().GetLogFilePath().c_str(), filename_tmp);
+-			file_.open(filename_tmp);
+-			if (file_.fail())
+-			{
+-				printf("Also failed to open log file: %s. Continue without logfile, still logging to console.\n", filename_tmp);
+-			}
++			printf("Cannot open log file: %s in working directory. Continuing without logfile, still logging to console.\n",
++				filename.c_str());
+ 		}
+ 	}
+ #endif
+-- 
+2.38.1
+
diff --git a/gnu/packages/patches/esmini-use-pkgconfig.patch b/gnu/packages/patches/esmini-use-pkgconfig.patch
new file mode 100644
index 0000000000..73e1b50015
--- /dev/null
+++ b/gnu/packages/patches/esmini-use-pkgconfig.patch
@@ -0,0 +1,541 @@
+Find dependencies via pkg-config.
+
+---
+ CMakeLists.txt                                |  16 +-
+ .../Applications/esmini-dyn/CMakeLists.txt    |   5 +-
+ .../Applications/esmini/CMakeLists.txt        |   1 +
+ EnvironmentSimulator/CMakeLists.txt           | 296 +-----------------
+ .../Modules/Controllers/ControllerSumo.cpp    |   1 -
+ .../Modules/RoadManager/CMakeLists.txt        |   8 +-
+ .../Modules/ScenarioEngine/CMakeLists.txt     |  15 +-
+ 7 files changed, 23 insertions(+), 319 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 156d9448..10ec48f9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -8,6 +8,7 @@ else()
+   cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR)
+ endif()
+ 
++include(FindPkgConfig)
+ 
+ project (EnvironmentSimulator)
+ 
+@@ -33,15 +34,10 @@ else ()
+   set (LINUX false)
+ endif ()
+ 
+-if (LINUX OR APPLE OR MINGW OR MSVC)
+-  set(INSTALL_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin")
+-else ()
+-  message(FATAL_ERROR "Unrecognized platform therefore there isn't an installation directory. Stopping the cmake process.")
+-endif ()
+-
+ set(INSTALL_DIRECTORY_CODE_EXAMPLES "${CMAKE_HOME_DIRECTORY}/code-examples-bin")
+ 
+-set(PUGIXML_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals/pugixml")
++find_package(pugixml)
++
+ set(EXPR_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals/expr")
+ if(MSVC)
+     set(DIRENT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals/dirent/win")
+@@ -61,10 +57,14 @@ set(ENABLE_SANITIZERS False CACHE BOOL "Enable sanitizers (Only valid for Linux
+ 
+ 
+ if (USE_OSG)
++  pkg_check_modules(OSG REQUIRED openscenegraph osgdb_jpeg osgdb_osg
++                                 osgdb_serializers_osg
++                                 osgdb_serializers_osgsim)
+   add_definitions(-D_USE_OSG)
+ endif (USE_OSG)
+ 
+ if (USE_OSI)
++  find_package(open_simulation_interface REQUIRED)
+   add_definitions(-D_USE_OSI)
+ endif (USE_OSI)
+ 
+@@ -73,6 +73,7 @@ if (USE_SUMO)
+ endif (USE_SUMO)
+ 
+ if (USE_GTEST)
++  find_package(GTest REQUIRED)
+   add_definitions(-D_USE_GTEST)
+ endif (USE_GTEST)
+ 
+@@ -90,5 +91,4 @@ if( NOT EXISTS "test/OSC-ALKS-scenarios/.git" )
+ endif()
+ 
+ # Add variables to global scope, e.g. when esmini is used as submodule
+-set(PUGIXML_INCLUDE_DIR ${PUGIXML_INCLUDE_DIR} CACHE INTERNAL "")
+ set(EXPR_INCLUDE_DIR ${EXPR_INCLUDE_DIR} CACHE INTERNAL "")
+diff --git a/EnvironmentSimulator/Applications/esmini-dyn/CMakeLists.txt b/EnvironmentSimulator/Applications/esmini-dyn/CMakeLists.txt
+index 83d89420..e15062d3 100644
+--- a/EnvironmentSimulator/Applications/esmini-dyn/CMakeLists.txt
++++ b/EnvironmentSimulator/Applications/esmini-dyn/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ 
+ include_directories (
+   ${SCENARIOENGINE_DLL_INCLUDE_DIR}
+-  ${COMMON_MINI_INCLUDE_DIR}  
++  ${COMMON_MINI_INCLUDE_DIR}
+   ${OSI_INCLUDE_DIR}
+ )
+ 
+@@ -19,11 +19,12 @@ link_directories( ${OSI_DIR}/lib )
+ add_executable ( ${TARGET} ${SOURCES} ${INCLUDES} )
+ 
+ 
+-target_link_libraries ( 
++target_link_libraries (
+ 	${TARGET}
+ 	esminiLib
+ 	CommonMini
+ 	${TIME_LIB}
++        pugixml::pugixml
+   project_options
+ )
+ 
+diff --git a/EnvironmentSimulator/Applications/esmini/CMakeLists.txt b/EnvironmentSimulator/Applications/esmini/CMakeLists.txt
+index 6890c26a..a088ebdc 100644
+--- a/EnvironmentSimulator/Applications/esmini/CMakeLists.txt
++++ b/EnvironmentSimulator/Applications/esmini/CMakeLists.txt
+@@ -44,6 +44,7 @@ target_link_libraries (
+ 	${sumo_libs}
+ 	${TIME_LIB}
+     ${SOCK_LIB}
++    pugixml::pugixml
+     project_options
+ )
+ 
+diff --git a/EnvironmentSimulator/CMakeLists.txt b/EnvironmentSimulator/CMakeLists.txt
+index 157e8fe0..e771231a 100644
+--- a/EnvironmentSimulator/CMakeLists.txt
++++ b/EnvironmentSimulator/CMakeLists.txt
+@@ -1,7 +1,3 @@
+-
+-set ( FILE_STORAGE "esmini" ) # "dropbox", "google", "esmini"  (limited GB/Day)
+-set ( MODEL_STORAGE "esmini" ) # "dropbox", "google", "esmini"  (limited GB/Day)
+-
+ set ( VIEWER_BASE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/ViewerBase" )
+ set ( PLAYER_BASE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/PlayerBase" )
+ set ( ROADMANAGER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/RoadManager" )
+@@ -17,88 +13,12 @@ set ( CONTROLLERS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/Controllers")
+ 
+ # OpenSceneGraph package adapted for this project
+ set ( OSG_VERSION "osg161" )
+-set ( OSG_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/OpenSceneGraph" )
+-set ( OSI_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/OSI" )
+-set ( SUMO_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/SUMO" )
+ 
+ # GoogleTest package
+ set ( GTEST_VERSION "1.10.1" )
+-set ( GTEST_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/googletest" )
+ 
+ set( CMAKE_VERBOSE_MAKEFILE true )
+ 
+-if ( ${FILE_STORAGE} STREQUAL "dropbox" )
+-    if (APPLE)
+-        set ( OSG_PACKAGE_URL https://www.dropbox.com/s/d0czj6b89p9jyvv/OpenSceneGraph_mac.7z?dl=1 )
+-        set ( OSI_PACKAGE_URL https://www.dropbox.com/s/m62v19gp0m73dte/osi_mac.7z?dl=1 )
+-        set ( SUMO_PACKAGE_URL https://www.dropbox.com/s/0x8kwztk7nmacs1/sumo_mac.7z?dl=1 )
+-    elseif (LINUX)
+-        set ( OSG_PACKAGE_URL https://www.dropbox.com/s/4ug0gmkgdavzyb4/osg_linux_glibc_2_31_gcc_7_5_0.7z?dl=1 )
+-        set ( OSI_PACKAGE_URL https://dl.dropboxusercontent.com/s/kwtdg0c1c8pawa1/osi_linux.7z?dl=1 )
+-        set ( SUMO_PACKAGE_URL https://dl.dropboxusercontent.com/s/gfwtqd3gf76f86a/sumo_linux.7z?dl=1 )
+-        set ( GTEST_PACKAGE_URL https://dl.dropboxusercontent.com/s/si7jsjjsy5bpoym/googletest_linux.7z?dl=1 )
+-    elseif (MSVC)
+-        set ( OSG_PACKAGE_URL https://dl.dropboxusercontent.com/s/e95hnoo782p40uc/OpenSceneGraph_v10.7z?dl=1 )
+-        set ( OSI_PACKAGE_URL https://dl.dropboxusercontent.com/s/an58ckp2qfx5069/osi_v10.7z?dl=1 )
+-        set ( SUMO_PACKAGE_URL https://dl.dropboxusercontent.com/s/5jtpnnd61wonxuh/sumo_v10.7z?dl=1 )
+-        set ( GTEST_PACKAGE_URL https://dl.dropboxusercontent.com/s/aaiehwzc6woqbc6/googletest_v10.7z?dl=1 )
+-    elseif (MINGW)
+-        message("MinGW, enforcing slimmed esmini")
+-    else ()
+-        message ("Unsupported configuration")
+-    endif ()
+-elseif ( ${FILE_STORAGE} STREQUAL "google" )
+-    if (APPLE)
+-        set ( OSG_PACKAGE_URL https://drive.google.com/u/1/uc?id=1mfn_vrcXBoFBekR_t8RXTWB4sD59JD7p&export=download )
+-        set ( OSI_PACKAGE_URL https://drive.google.com/u/1/uc?id=1UVzO8cPQaDU9KVn9v2v8Suj0uUw1dzYI&export=download )
+-        set ( SUMO_PACKAGE_URL https://drive.google.com/u/1/uc?id=1FAve0-MlJPv6lUZy0HvriZI7xstLAzvX&export=download )
+-    elseif (LINUX)
+-        set ( OSG_PACKAGE_URL https://drive.google.com/u/1/uc?id=1Ya1bLp_0-qqlhs67WAwbGW7l37wqP3o2&export=download )
+-        set ( OSI_PACKAGE_URL https://drive.google.com/u/1/uc?id=1Q8O9YciIC0BPEszIKtQ2UW9KcVRZS4iB&export=download )
+-        set ( SUMO_PACKAGE_URL https://drive.google.com/u/1/uc?id=1m4znxNIXapP0D-l21oIm2l7L5ti-JbZH&export=download )
+-        set ( GTEST_PACKAGE_URL https://drive.google.com/u/1/uc?id=1Hyr9eJX2GmgpYwZhx14xOoXlZ2j-FY_p&export=download )
+-    elseif (MSVC)
+-        set ( OSG_PACKAGE_URL https://drive.google.com/u/1/uc?id=1RTag0aUn_pJPK697j0-E72ABW10wZvOm&export=download )
+-        set ( OSI_PACKAGE_URL https://drive.google.com/u/1/uc?id=1pcQcVHUESOk2Wmi-zUA7uzdxxE6iwRJx&export=download )
+-        set ( SUMO_PACKAGE_URL https://drive.google.com/u/1/uc?id=18PhbSLyvs0IGWTAY3YBoYzpVnMFPbOuR&export=download )
+-        set ( GTEST_PACKAGE_URL https://drive.google.com/u/1/uc?id=1So-3gtrmEdW9RhEvVQisj1QFksHM_otU&export=download )
+-    elseif (MINGW)
+-        message("MinGW, enforcing slimmed esmini")
+-    else ()
+-        message ("Unsupported configuration")
+-    endif ()
+-elseif ( ${FILE_STORAGE} STREQUAL "esmini" )
+-    if (APPLE)
+-        set ( OSG_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/OpenSceneGraph_mac.7z )
+-        set ( OSI_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/osi_mac.7z )
+-        set ( SUMO_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/sumo_mac.7z )
+-    elseif (LINUX)
+-        set ( OSG_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/osg_linux_glibc_2_31_gcc_7_5_0.7z )
+-        set ( OSI_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/osi_linux.7z )
+-        set ( SUMO_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/sumo_linux.7z )
+-        set ( GTEST_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/googletest_linux.7z )
+-    elseif (MSVC)
+-        set ( OSG_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/OpenSceneGraph_v10.7z )
+-        set ( OSI_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/osi_v10.7z )
+-        set ( SUMO_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/sumo_v10.7z )
+-        set ( GTEST_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD766065121/libs/googletest_v10.7z )
+-    elseif (MINGW)
+-        message("MinGW, enforcing slimmed esmini")
+-    else ()
+-        message ("Unsupported configuration")
+-    endif ()
+-else ()
+-    Message("Unknown storage type: " ${FILE_STORAGE})
+-endif()
+-
+-if ( ${MODEL_STORAGE} STREQUAL "dropbox" )
+-    set ( MODELS_PACKAGE_URL https://dl.dropboxusercontent.com/s/5gk8bvgzqiaaoco/models.7z?dl=0 )
+-elseif ( ${MODEL_STORAGE} STREQUAL "google" )
+-    set ( MODELS_PACKAGE_URL https://drive.google.com/u/1/uc?id=1c3cqRzwY41gWXbg0rmugQkL5I_5L6DH_&export=download )
+-elseif ( ${MODEL_STORAGE} STREQUAL "esmini" )
+-    set ( MODELS_PACKAGE_URL https://esmini.asuscomm.com/AICLOUD779364751/models/models.7z )
+-endif()
+-
+ if (APPLE)
+   set ( EXT_DIR_NAME "mac" )
+   set ( TIME_LIB "" )
+@@ -127,21 +47,8 @@ set ( OSI_DIR "${OSI_BASE_DIR}/${EXT_DIR_NAME}" )
+ set ( SUMO_DIR "${SUMO_BASE_DIR}/${EXT_DIR_NAME}" )
+ set ( GTEST_DIR "${GTEST_BASE_DIR}/${EXT_DIR_NAME}" )
+ 
+-set ( OSG_INCLUDE_DIR
+-    "${OSG_DIR}/build/include"
+-    "${OSG_DIR}/include"
+-)
+-set ( OSG_LIBRARIES_PATH
+-    "${OSG_DIR}/lib"
+-    "${OSG_DIR}/lib/osgPlugins-3.6.5"
+-)
+-
+ set ( OSI_INCLUDE_DIR "${OSI_DIR}/include" )
+-if (DYN_PROTOBUF)
+-  set ( OSI_LIBRARIES_PATH "${OSI_DIR}/lib-dyn" )
+-else ()
+-  set ( OSI_LIBRARIES_PATH "${OSI_DIR}/lib" )
+-endif (DYN_PROTOBUF)
++set ( OSI_LIBRARIES_PATH "${OSI_DIR}/lib" )
+ 
+ set ( SUMO_INCLUDE_DIR "${SUMO_DIR}/include" )
+ set ( SUMO_LIBRARIES_PATH "${SUMO_DIR}/lib" )
+@@ -153,74 +60,6 @@ link_directories(${OSG_LIBRARIES_PATH} ${OSI_LIBRARIES_PATH} ${SUMO_LIBRARIES_PA
+ 
+ if(APPLE)
+   SET(CMAKE_CXX_FLAGS "${CXX_STD_FLAG} -std=c++14 -pthread -fPIC -flto -DGL_SILENCE_DEPRECATION -Wl,-dead_strip")
+-  
+-  set ( OSG_LIBRARIES
+-    osg
+-    osgViewer
+-    osgDB
+-    osgdb_serializers_osgsim
+-    osgdb_serializers_osg
+-    osgGA
+-    osgText
+-    osgSim
+-    osgdb_osg
+-    osgdb_jpeg
+-    osgUtil
+-    osgAnimation
+-    osg
+-    OpenThreads
+-    jpeg
+-    "-framework OpenGL"
+-    "-framework Cocoa"
+-    dl
+-    z
+-  )
+-
+-  if (DYN_PROTOBUF)
+-    set ( OSI_LIBRARIES
+-      open_simulation_interface
+-      protobuf
+-    )
+-  else ()
+-    set ( OSI_LIBRARIES
+-      open_simulation_interface_pic
+-      protobuf
+-    )
+-  endif (DYN_PROTOBUF)
+-
+-
+-  set ( SUMO_LIBRARIES
+-    optimized libsumostatic debug libsumostaticd
+-    optimized netload debug netloadd
+-    optimized traciserver debug traciserverd
+-    optimized libsumostatic debug libsumostaticd
+-    optimized utils_vehicle debug utils_vehicled
+-    optimized utils_distribution debug utils_distributiond
+-    optimized utils_shapes debug utils_shapesd
+-    optimized utils_options debug utils_optionsd
+-    optimized utils_xml debug utils_xmld
+-    optimized utils_geom debug utils_geomd
+-    optimized utils_common debug utils_commond
+-    optimized utils_iodevices debug utils_iodevicesd
+-    optimized utils_traction_wire debug utils_traction_wired
+-    optimized utils_emissions debug utils_emissionsd
+-    optimized microsim_engine debug microsim_engined
+-    optimized microsim_lcmodels debug microsim_lcmodelsd
+-    optimized microsim_devices debug microsim_devicesd
+-    optimized microsim_trigger debug microsim_triggerd
+-    optimized microsim_output debug microsim_outputd
+-    optimized microsim_transportables debug microsim_transportablesd
+-    optimized microsim_actions debug microsim_actionsd
+-    optimized microsim_traffic_lights debug microsim_traffic_lightsd
+-    optimized microsim debug microsimd
+-    optimized mesosim debug mesosimd
+-    optimized foreign_phemlight debug foreign_phemlightd
+-    optimized foreign_tcpip debug foreign_tcpipd
+-    optimized microsim_cfmodels debug microsim_cfmodelsd
+-    optimized zlibstatic debug zlibstaticd
+-    optimized xerces-c_3 debug xerces-c_3D
+-    "-framework CoreServices"
+-  )
+ 
+ elseif(LINUX)
+ 
+@@ -251,82 +90,8 @@ elseif(LINUX)
+     SET(CMAKE_CXX_FLAGS "${CXX_STD_FLAG} -pthread -fPIC -Wl,-strip-all")
+   endif()
+ 
+-  set ( OSG_LIBRARIES
+-    optimized osg debug osgd
+-    optimized osgViewer debug osgViewerd
+-    optimized osgDB debug osgDBd
+-    optimized osgdb_serializers_osgsim debug osgdb_serializers_osgsimd
+-    optimized osgdb_serializers_osg debug osgdb_serializers_osgd
+-    optimized osgGA debug osgGAd
+-    optimized osgText debug osgTextd
+-    optimized osgSim debug osgSimd
+-    optimized osgdb_osg debug osgdb_osgd
+-    optimized osgdb_jpeg debug osgdb_jpegd
+-    optimized osgUtil debug osgUtild
+-    optimized osgAnimation debug osgAnimationd
+-    optimized osg debug osgd
+-    optimized OpenThreads debug OpenThreadsd
+-    optimized jpeg debug jpegd
+-
+-    GL
+-    X11
+-    Xrandr
+-    dl
+-    z
+-    Xinerama
+-    fontconfig
+-  )
+-
+-  if (DYN_PROTOBUF)
+-    set ( OSI_LIBRARIES
+-      optimized open_simulation_interface debug open_simulation_interfaced
+-      optimized protobuf debug protobufd
+-    )
+-  else ()
+-    set ( OSI_LIBRARIES
+-      optimized open_simulation_interface_pic debug open_simulation_interface_picd
+-      optimized protobuf debug protobufd
+-    )
+-  endif (DYN_PROTOBUF)
+-
+-  set ( SUMO_LIBRARIES
+-    optimized libsumostatic debug libsumostaticd
+-    optimized netload debug netloadd
+-    optimized traciserver debug traciserverd
+-    optimized libsumostatic debug libsumostaticd
+-    optimized utils_vehicle debug utils_vehicled
+-    optimized utils_distribution debug utils_distributiond
+-    optimized utils_shapes debug utils_shapesd
+-    optimized utils_options debug utils_optionsd
+-    optimized utils_xml debug utils_xmld
+-    optimized utils_geom debug utils_geomd
+-    optimized utils_common debug utils_commond
+-    optimized utils_iodevices debug utils_iodevicesd
+-    optimized utils_traction_wire debug utils_traction_wired
+-    optimized utils_emissions debug utils_emissionsd
+-    optimized microsim_engine debug microsim_engined
+-    optimized microsim_lcmodels debug microsim_lcmodelsd
+-    optimized microsim_devices debug microsim_devicesd
+-    optimized microsim_trigger debug microsim_triggerd
+-    optimized microsim_output debug microsim_outputd
+-    optimized microsim_transportables debug microsim_transportablesd
+-    optimized microsim_actions debug microsim_actionsd
+-    optimized microsim_traffic_lights debug microsim_traffic_lightsd
+-    optimized microsim debug microsimd
+-    optimized mesosim debug mesosimd
+-    optimized foreign_phemlight debug foreign_phemlightd
+-    optimized foreign_tcpip debug foreign_tcpipd
+-    optimized microsim_cfmodels debug microsim_cfmodelsd
+-    optimized zlibstatic debug zlibstaticd
+-    optimized xerces-c_3 debug xerces-c_3D
+-  )
+-
+-  set (GTEST_LIBRARIES
+-    optimized gmock debug gmockd
+-    optimized gmock_main debug gmock_maind
+-    optimized gtest debug gtestd
+-    optimized gtest_main debug gtest_maind
+-  )
++  set ( OSI_LIBRARIES open_simulation_interface::open_simulation_interface )
++  set ( SUMO_LIBRARIES sumocpp tracicpp )
+ 
+ elseif(MSVC)
+ 
+@@ -510,61 +275,6 @@ FOREACH(subdir ${SUBDIRS})
+     endif ()
+ ENDFOREACH()
+ 
+-
+-#
+-# Download library and content binary packets
+-#
+-
+-function (download_and_extract url target_folder target_filename)
+-    message (STATUS "downloading ${target_filename} ...")
+-    file (DOWNLOAD ${url} ${target_folder}/${target_filename} STATUS DOWNLOAD_STATUS)
+-
+-    if(DOWNLOAD_STATUS AND NOT DOWNLOAD_STATUS EQUAL 0)
+-        message(FATAL_ERROR "FAILED to download ${target_filename} (Status: ${DOWNLOAD_STATUS})")
+-    endif()
+-
+-    execute_process (COMMAND sleep 1)  # allow for file to be completely flushed
+-
+-    message (STATUS "extracting ${target_filename} ... ")
+-    execute_process (COMMAND ${CMAKE_COMMAND} -E tar xfz ${target_filename} WORKING_DIRECTORY ${target_folder} RESULT_VARIABLE STATUS)
+-
+-    if(STATUS AND NOT STATUS EQUAL 0)
+-        message(FATAL_ERROR "FAILED to unpack ${target_filename}")
+-    endif()
+-
+-    file (REMOVE ${target_folder}/${target_filename})
+-endfunction (download_and_extract)
+-
+-# download OpenSceneGraph
+-set ( OSG_PACKAGE_FILENAME "osg.7z" )
+-if (DEFINED OSG_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${OSG_DIR} ))
+-    download_and_extract( ${OSG_PACKAGE_URL} ${OSG_BASE_DIR} ${OSG_PACKAGE_FILENAME} )
+-endif()
+-
+-# download OSI
+-set ( OSI_PACKAGE_FILENAME "osi.7z" )
+-if (DEFINED OSI_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${OSI_DIR} ))
+-    download_and_extract( ${OSI_PACKAGE_URL} ${OSI_BASE_DIR} ${OSI_PACKAGE_FILENAME} )
+-endif()
+-
+-# download SUMO
+-set ( SUMO_PACKAGE_FILENAME "sumo.7z" )
+-if (DEFINED SUMO_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${SUMO_DIR} ))
+-  download_and_extract( ${SUMO_PACKAGE_URL} ${SUMO_BASE_DIR} ${SUMO_PACKAGE_FILENAME} )
+-endif()
+-
+-# download googletest
+-if(NOT (APPLE OR MINGW))  # not available for Mac yet
+-  set ( GTEST_PACKAGE_FILENAME "googletest.7z" )
+-  if (DEFINED GTEST_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${GTEST_DIR} ))
+-      download_and_extract( ${GTEST_PACKAGE_URL} ${GTEST_BASE_DIR} ${GTEST_PACKAGE_FILENAME} )
+-  endif()
+-endif()
+-
+-if (DEFINED MODELS_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${MODELS_DIR} ))
+-    download_and_extract(${MODELS_PACKAGE_URL} ${MODELS_BASE_DIR} ${MODELS_PACKAGE_FILENAME})
+-endif()
+-
+ add_subdirectory(Applications/odrplot)
+ add_subdirectory(Applications/replayer)
+ 
+diff --git a/EnvironmentSimulator/Modules/Controllers/ControllerSumo.cpp b/EnvironmentSimulator/Modules/Controllers/ControllerSumo.cpp
+index 4c701d94..cb5de5bb 100644
+--- a/EnvironmentSimulator/Modules/Controllers/ControllerSumo.cpp
++++ b/EnvironmentSimulator/Modules/Controllers/ControllerSumo.cpp
+@@ -16,7 +16,6 @@
+ #include "ScenarioGateway.hpp"
+ #include "pugixml.hpp"
+ 
+-#include <utils/geom/PositionVector.h>
+ #include <libsumo/Simulation.h>
+ #include <libsumo/Vehicle.h>
+ #include <libsumo/TraCIDefs.h>
+diff --git a/EnvironmentSimulator/Modules/RoadManager/CMakeLists.txt b/EnvironmentSimulator/Modules/RoadManager/CMakeLists.txt
+index e4fad5f1..32d7a79c 100644
+--- a/EnvironmentSimulator/Modules/RoadManager/CMakeLists.txt
++++ b/EnvironmentSimulator/Modules/RoadManager/CMakeLists.txt
+@@ -2,7 +2,7 @@
+ include_directories (
+   ${PUGIXML_INCLUDE_DIR}
+   ${COMMON_MINI_INCLUDE_DIR}
+-  ${ROADMANAGER_INCLUDE_DIR}  
++  ${ROADMANAGER_INCLUDE_DIR}
+ )
+ 
+ set ( SOURCES
+@@ -11,8 +11,6 @@ set ( SOURCES
+   LaneIndependentRouter.cpp
+ )
+ 
+-set ( SRC_ADDITIONAL ../../../externals/pugixml/pugixml.cpp)
+-
+ SOURCE_GROUP("External Libraries" FILES ${SRC_ADDITIONAL})
+ 
+ set ( INCLUDES
+@@ -25,6 +23,6 @@ if(MSVC)
+ 	add_definitions("/wd4482")
+ endif()
+ 
+-add_library ( RoadManager STATIC ${SOURCES} ${SRC_ADDITIONAL} ${INCLUDES} )
++add_library ( RoadManager STATIC ${SOURCES} ${INCLUDES} )
+ 
+-target_link_libraries ( RoadManager CommonMini project_options)
+\ No newline at end of file
++target_link_libraries ( RoadManager CommonMini pugixml::pugixml project_options)
+diff --git a/EnvironmentSimulator/Modules/ScenarioEngine/CMakeLists.txt b/EnvironmentSimulator/Modules/ScenarioEngine/CMakeLists.txt
+index aec86ad6..86da77c1 100644
+--- a/EnvironmentSimulator/Modules/ScenarioEngine/CMakeLists.txt
++++ b/EnvironmentSimulator/Modules/ScenarioEngine/CMakeLists.txt
+@@ -5,7 +5,7 @@ include_directories (
+   ${ROADMANAGER_INCLUDE_DIR}
+   ${COMMON_MINI_INCLUDE_DIR}
+   ${CONTROLLERS_INCLUDE_DIR}
+-  ${REPLAY_INCLUDE_DIR}  
++  ${REPLAY_INCLUDE_DIR}
+   ${RDB_INCLUDE_DIR}
+   ${OSI_INCLUDE_DIR}
+   ${SUMO_INCLUDE_DIR}
+@@ -20,20 +20,15 @@ if (NOT USE_OSI)
+     list(REMOVE_ITEM SRC_SOURCEFILES "${CMAKE_CURRENT_LIST_DIR}/SourceFiles/OSIReporter.cpp")
+ endif (NOT USE_OSI)
+ 
+-set ( SRC_ADDITIONAL ../../../externals/pugixml/pugixml.cpp )
+-
+ SOURCE_GROUP(OSCTypeDefs FILES ${SRC_OSCTYPEDEFS})
+ SOURCE_GROUP("Source Files" FILES ${SRC_SOURCEFILES})
+ SOURCE_GROUP("External Libraries" FILES ${SRC_ADDITIONAL})
+ 
+-add_library ( ScenarioEngine STATIC 
+-  ${SRC_OSCTYPEDEFS} 
+-  ${SRC_SOURCEFILES} 
+-  ${SRC_ADDITIONAL} 
++add_library ( ScenarioEngine STATIC
++  ${SRC_OSCTYPEDEFS}
++  ${SRC_SOURCEFILES}
+ )
+ 
+ add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+ 
+-target_link_libraries(ScenarioEngine PRIVATE project_options)
+-
+-	
++target_link_libraries(ScenarioEngine PRIVATE pugixml::pugixml project_options)
+-- 
+2.38.1
+
diff --git a/gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch b/gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch
new file mode 100644
index 0000000000..5d4afa28c1
--- /dev/null
+++ b/gnu/packages/patches/ghc-9.2-glibc-2.33-link-order.patch
@@ -0,0 +1,35 @@
+Slightly modified version of
+https://gitlab.haskell.org/ghc/ghc/-/issues/19029#note_447989, required
+for older, buggy glibc versions < 2.34.
+
+diff -Naur ghc-9.2.5/compiler/GHC/Linker/Unit.hs ghc-9.2.5.patched/compiler/GHC/Linker/Unit.hs
+--- ghc-9.2.5/compiler/GHC/Linker/Unit.hs	2022-11-06 20:40:29.000000000 +0100
++++ ghc-9.2.5.patched/compiler/GHC/Linker/Unit.hs	2023-01-15 14:52:57.511275338 +0100
+@@ -31,11 +31,26 @@
+     ps <- mayThrowUnitErr $ preloadUnitsInfo' unit_env pkgs
+     return (collectLinkOpts dflags ps)
+ 
++fixOrderLinkOpts :: [String] -> [String]
++fixOrderLinkOpts opts
++  | have_bad_glibc_version -- glibc version strictly less than 2.34
++  , let (before, rest) = break (== libc) opts
++  , not (pthread `elem` before)
++  , pthread `elem` rest -- optional if we know pthread is definitely present
++  = before ++ pthread_and_deps ++ rest
++  | otherwise
++  = opts
++  where
++    pthread = "-lpthread"
++    libc = "-lc"
++    pthread_and_deps = [ "-lrt", pthread ] -- should depend on the environment
++    have_bad_glibc_version = True
++
+ collectLinkOpts :: DynFlags -> [UnitInfo] -> ([String], [String], [String])
+ collectLinkOpts dflags ps =
+     (
+         concatMap (map ("-l" ++) . unitHsLibs (ghcNameVersion dflags) (ways dflags)) ps,
+-        concatMap (map ("-l" ++) . map ST.unpack . unitExtDepLibsSys) ps,
++        fixOrderLinkOpts $ concatMap (map ("-l" ++) . map ST.unpack . unitExtDepLibsSys) ps,
+         concatMap (map ST.unpack . unitLinkerOptions) ps
+     )
+ 
diff --git a/gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch b/gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch
new file mode 100644
index 0000000000..97caf2cc9b
--- /dev/null
+++ b/gnu/packages/patches/ghc-bloomfilter-ghc9.2.patch
@@ -0,0 +1,303 @@
+Taken from https://github.com/bos/bloomfilter/pull/20
+
+From fb79b39c44404fd791a3bed973e9d844fb084f1e Mon Sep 17 00:00:00 2001
+From: Simon Jakobi <simon.jakobi@gmail.com>
+Date: Fri, 12 Nov 2021 01:37:36 +0100
+Subject: [PATCH] Fix build with GHC 9.2
+
+The `FastShift.shift{L,R}` methods are replaced with `unsafeShift{L,R}`
+introduced in base-4.5.
+
+Fixes #19.
+---
+ Data/BloomFilter.hs         | 16 +++++------
+ Data/BloomFilter/Hash.hs    | 15 +++++-----
+ Data/BloomFilter/Mutable.hs | 20 +++++++-------
+ Data/BloomFilter/Util.hs    | 55 ++++++-------------------------------
+ bloomfilter.cabal           |  2 +-
+ 5 files changed, 34 insertions(+), 74 deletions(-)
+
+diff --git a/Data/BloomFilter.hs b/Data/BloomFilter.hs
+index 2210cef..6b47c21 100644
+--- a/Data/BloomFilter.hs
++++ b/Data/BloomFilter.hs
+@@ -78,8 +78,8 @@ import Control.DeepSeq (NFData(..))
+ import Data.Array.Base (unsafeAt)
+ import qualified Data.Array.Base as ST
+ import Data.Array.Unboxed (UArray)
+-import Data.Bits ((.&.))
+-import Data.BloomFilter.Util (FastShift(..), (:*)(..))
++import Data.Bits ((.&.), unsafeShiftL, unsafeShiftR)
++import Data.BloomFilter.Util ((:*)(..))
+ import qualified Data.BloomFilter.Mutable as MB
+ import qualified Data.BloomFilter.Mutable.Internal as MB
+ import Data.BloomFilter.Mutable.Internal (Hash, MBloom)
+@@ -98,7 +98,7 @@ data Bloom a = B {
+     }
+ 
+ instance Show (Bloom a) where
+-    show ub = "Bloom { " ++ show ((1::Int) `shiftL` shift ub) ++ " bits } "
++    show ub = "Bloom { " ++ show ((1::Int) `unsafeShiftL` shift ub) ++ " bits } "
+ 
+ instance NFData (Bloom a) where
+     rnf !_ = ()
+@@ -172,7 +172,7 @@ singleton hash numBits elt = create hash numBits (\mb -> MB.insert mb elt)
+ -- | Given a filter's mask and a hash value, compute an offset into
+ -- a word array and a bit offset within that word.
+ hashIdx :: Int -> Word32 -> (Int :* Int)
+-hashIdx mask x = (y `shiftR` logBitsInHash) :* (y .&. hashMask)
++hashIdx mask x = (y `unsafeShiftR` logBitsInHash) :* (y .&. hashMask)
+   where hashMask = 31 -- bitsInHash - 1
+         y = fromIntegral x .&. mask
+ 
+@@ -191,7 +191,7 @@ hashesU ub elt = hashIdx (mask ub) `map` hashes ub elt
+ -- /still/ some possibility that @True@ will be returned.
+ elem :: a -> Bloom a -> Bool
+ elem elt ub = all test (hashesU ub elt)
+-  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `shiftL` bit) /= 0
++  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `unsafeShiftL` bit) /= 0
+           
+ modify :: (forall s. (MBloom s a -> ST s z))  -- ^ mutation function (result is discarded)
+         -> Bloom a
+@@ -255,11 +255,11 @@ insertList elts = modify $ \mb -> mapM_ (MB.insert mb) elts
+ -- is /still/ some possibility that @True@ will be returned.
+ notElem :: a -> Bloom a -> Bool
+ notElem elt ub = any test (hashesU ub elt)
+-  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `shiftL` bit) == 0
++  where test (off :* bit) = (bitArray ub `unsafeAt` off) .&. (1 `unsafeShiftL` bit) == 0
+ 
+ -- | Return the size of an immutable Bloom filter, in bits.
+ length :: Bloom a -> Int
+-length = shiftL 1 . shift
++length = unsafeShiftL 1 . shift
+ 
+ -- | Build an immutable Bloom filter from a seed value.  The seeding
+ -- function populates the filter as follows.
+@@ -318,7 +318,7 @@ fromList hashes numBits = unfold hashes numBits convert
+ logPower2 :: Int -> Int
+ logPower2 k = go 0 k
+     where go j 1 = j
+-          go j n = go (j+1) (n `shiftR` 1)
++          go j n = go (j+1) (n `unsafeShiftR` 1)
+ 
+ -- $overview
+ --
+diff --git a/Data/BloomFilter/Hash.hs b/Data/BloomFilter/Hash.hs
+index 132a3a4..d071fd4 100644
+--- a/Data/BloomFilter/Hash.hs
++++ b/Data/BloomFilter/Hash.hs
+@@ -38,8 +38,7 @@ module Data.BloomFilter.Hash
+     ) where
+ 
+ import Control.Monad (foldM)
+-import Data.Bits ((.&.), (.|.), xor)
+-import Data.BloomFilter.Util (FastShift(..))
++import Data.Bits ((.&.), (.|.), unsafeShiftL, unsafeShiftR, xor)
+ import Data.List (unfoldr)
+ import Data.Int (Int8, Int16, Int32, Int64)
+ import Data.Word (Word8, Word16, Word32, Word64)
+@@ -91,11 +90,11 @@ class Hashable a where
+              -> Word64           -- ^ salt
+              -> IO Word64
+     hashIO64 v salt = do
+-                   let s1 = fromIntegral (salt `shiftR` 32) .&. maxBound
++                   let s1 = fromIntegral (salt `unsafeShiftR` 32) .&. maxBound
+                        s2 = fromIntegral salt
+                    h1 <- hashIO32 v s1
+                    h2 <- hashIO32 v s2
+-                   return $ (fromIntegral h1 `shiftL` 32) .|. fromIntegral h2
++                   return $ (fromIntegral h1 `unsafeShiftL` 32) .|. fromIntegral h2
+ 
+ -- | Compute a 32-bit hash.
+ hash32 :: Hashable a => a -> Word32
+@@ -149,8 +148,8 @@ cheapHashes :: Hashable a => Int -- ^ number of hashes to compute
+ cheapHashes k v = go 0
+     where go i | i == j = []
+                | otherwise = hash : go (i + 1)
+-               where !hash = h1 + (h2 `shiftR` i)
+-          h1 = fromIntegral (h `shiftR` 32)
++               where !hash = h1 + (h2 `unsafeShiftR` i)
++          h1 = fromIntegral (h `unsafeShiftR` 32)
+           h2 = fromIntegral h
+           h = hashSalt64 0x9150a946c4a8966e v
+           j = fromIntegral k
+@@ -163,7 +162,7 @@ instance Hashable Integer where
+                                    (salt `xor` 0x3ece731e)
+                   | otherwise = hashIO32 (unfoldr go k) salt
+         where go 0 = Nothing
+-              go i = Just (fromIntegral i :: Word32, i `shiftR` 32)
++              go i = Just (fromIntegral i :: Word32, i `unsafeShiftR` 32)
+ 
+ instance Hashable Bool where
+     hashIO32 = hashOne32
+@@ -224,7 +223,7 @@ instance Hashable Word64 where
+ -- | A fast unchecked shift.  Nasty, but otherwise GHC 6.8.2 does a
+ -- test and branch on every shift.
+ div4 :: CSize -> CSize
+-div4 k = fromIntegral ((fromIntegral k :: HTYPE_SIZE_T) `shiftR` 2)
++div4 k = fromIntegral ((fromIntegral k :: HTYPE_SIZE_T) `unsafeShiftR` 2)
+ 
+ alignedHash :: Ptr a -> CSize -> Word32 -> IO Word32
+ alignedHash ptr bytes salt
+diff --git a/Data/BloomFilter/Mutable.hs b/Data/BloomFilter/Mutable.hs
+index edff1fc..0bb5cc9 100644
+--- a/Data/BloomFilter/Mutable.hs
++++ b/Data/BloomFilter/Mutable.hs
+@@ -65,9 +65,9 @@ module Data.BloomFilter.Mutable
+ import Control.Monad (liftM, forM_)
+ import Control.Monad.ST (ST)
+ import Data.Array.Base (unsafeRead, unsafeWrite)
+-import Data.Bits ((.&.), (.|.))
++import Data.Bits ((.&.), (.|.), unsafeShiftL, unsafeShiftR)
+ import Data.BloomFilter.Array (newArray)
+-import Data.BloomFilter.Util (FastShift(..), (:*)(..), nextPowerOfTwo)
++import Data.BloomFilter.Util ((:*)(..), nextPowerOfTwo)
+ import Data.Word (Word32)
+ import Data.BloomFilter.Mutable.Internal
+ 
+@@ -86,9 +86,9 @@ new hash numBits = MB hash shft msk `liftM` newArray numElems numBytes
+                 | numBits > maxHash = maxHash
+                 | isPowerOfTwo numBits = numBits
+                 | otherwise = nextPowerOfTwo numBits
+-        numElems = max 2 (twoBits `shiftR` logBitsInHash)
+-        numBytes = numElems `shiftL` logBytesInHash
+-        trueBits = numElems `shiftL` logBitsInHash
++        numElems = max 2 (twoBits `unsafeShiftR` logBitsInHash)
++        numBytes = numElems `unsafeShiftL` logBytesInHash
++        trueBits = numElems `unsafeShiftL` logBitsInHash
+         shft     = logPower2 trueBits
+         msk      = trueBits - 1
+         isPowerOfTwo n = n .&. (n - 1) == 0
+@@ -109,7 +109,7 @@ logBytesInHash = 2 -- logPower2 (sizeOf (undefined :: Hash))
+ -- | Given a filter's mask and a hash value, compute an offset into
+ -- a word array and a bit offset within that word.
+ hashIdx :: Int -> Word32 -> (Int :* Int)
+-hashIdx msk x = (y `shiftR` logBitsInHash) :* (y .&. hashMask)
++hashIdx msk x = (y `unsafeShiftR` logBitsInHash) :* (y .&. hashMask)
+   where hashMask = 31 -- bitsInHash - 1
+         y = fromIntegral x .&. msk
+ 
+@@ -125,7 +125,7 @@ insert mb elt = do
+   let mu = bitArray mb
+   forM_ (hashesM mb elt) $ \(word :* bit) -> do
+       old <- unsafeRead mu word
+-      unsafeWrite mu word (old .|. (1 `shiftL` bit))
++      unsafeWrite mu word (old .|. (1 `unsafeShiftL` bit))
+ 
+ -- | Query a mutable Bloom filter for membership.  If the value is
+ -- present, return @True@.  If the value is not present, there is
+@@ -135,7 +135,7 @@ elem elt mb = loop (hashesM mb elt)
+   where mu = bitArray mb
+         loop ((word :* bit):wbs) = do
+           i <- unsafeRead mu word
+-          if i .&. (1 `shiftL` bit) == 0
++          if i .&. (1 `unsafeShiftL` bit) == 0
+             then return False
+             else loop wbs
+         loop _ = return True
+@@ -145,7 +145,7 @@ elem elt mb = loop (hashesM mb elt)
+ 
+ -- | Return the size of a mutable Bloom filter, in bits.
+ length :: MBloom s a -> Int
+-length = shiftL 1 . shift
++length = unsafeShiftL 1 . shift
+ 
+ 
+ -- | Slow, crummy way of computing the integer log of an integer known
+@@ -153,7 +153,7 @@ length = shiftL 1 . shift
+ logPower2 :: Int -> Int
+ logPower2 k = go 0 k
+     where go j 1 = j
+-          go j n = go (j+1) (n `shiftR` 1)
++          go j n = go (j+1) (n `unsafeShiftR` 1)
+ 
+ -- $overview
+ --
+diff --git a/Data/BloomFilter/Util.hs b/Data/BloomFilter/Util.hs
+index 7f695dc..6ade6e5 100644
+--- a/Data/BloomFilter/Util.hs
++++ b/Data/BloomFilter/Util.hs
+@@ -2,15 +2,11 @@
+ 
+ module Data.BloomFilter.Util
+     (
+-      FastShift(..)
+-    , nextPowerOfTwo
++      nextPowerOfTwo
+     , (:*)(..)
+     ) where
+ 
+-import Data.Bits ((.|.))
+-import qualified Data.Bits as Bits
+-import GHC.Base
+-import GHC.Word
++import Data.Bits ((.|.), unsafeShiftR)
+ 
+ -- | A strict pair type.
+ data a :* b = !a :* !b
+@@ -22,46 +18,11 @@ nextPowerOfTwo :: Int -> Int
+ {-# INLINE nextPowerOfTwo #-}
+ nextPowerOfTwo n =
+     let a = n - 1
+-        b = a .|. (a `shiftR` 1)
+-        c = b .|. (b `shiftR` 2)
+-        d = c .|. (c `shiftR` 4)
+-        e = d .|. (d `shiftR` 8)
+-        f = e .|. (e `shiftR` 16)
+-        g = f .|. (f `shiftR` 32)  -- in case we're on a 64-bit host
++        b = a .|. (a `unsafeShiftR` 1)
++        c = b .|. (b `unsafeShiftR` 2)
++        d = c .|. (c `unsafeShiftR` 4)
++        e = d .|. (d `unsafeShiftR` 8)
++        f = e .|. (e `unsafeShiftR` 16)
++        g = f .|. (f `unsafeShiftR` 32)  -- in case we're on a 64-bit host
+         !h = g + 1
+     in h
+-
+--- | This is a workaround for poor optimisation in GHC 6.8.2.  It
+--- fails to notice constant-width shifts, and adds a test and branch
+--- to every shift.  This imposes about a 10% performance hit.
+-class FastShift a where
+-    shiftL :: a -> Int -> a
+-    shiftR :: a -> Int -> a
+-
+-instance FastShift Word32 where
+-    {-# INLINE shiftL #-}
+-    shiftL (W32# x#) (I# i#) = W32# (x# `uncheckedShiftL#` i#)
+-
+-    {-# INLINE shiftR #-}
+-    shiftR (W32# x#) (I# i#) = W32# (x# `uncheckedShiftRL#` i#)
+-
+-instance FastShift Word64 where
+-    {-# INLINE shiftL #-}
+-    shiftL (W64# x#) (I# i#) = W64# (x# `uncheckedShiftL64#` i#)
+-
+-    {-# INLINE shiftR #-}
+-    shiftR (W64# x#) (I# i#) = W64# (x# `uncheckedShiftRL64#` i#)
+-
+-instance FastShift Int where
+-    {-# INLINE shiftL #-}
+-    shiftL (I# x#) (I# i#) = I# (x# `iShiftL#` i#)
+-
+-    {-# INLINE shiftR #-}
+-    shiftR (I# x#) (I# i#) = I# (x# `iShiftRA#` i#)
+-
+-instance FastShift Integer where
+-    {-# INLINE shiftL #-}
+-    shiftL = Bits.shiftL
+-
+-    {-# INLINE shiftR #-}
+-    shiftR = Bits.shiftR
+diff --git a/bloomfilter.cabal b/bloomfilter.cabal
+index 821a5d7..c621f7f 100644
+--- a/bloomfilter.cabal
++++ b/bloomfilter.cabal
+@@ -18,7 +18,7 @@ extra-source-files: README.markdown cbits/lookup3.c cbits/lookup3.h
+ library
+   build-depends:
+     array,
+-    base       >= 4.4 && < 5,
++    base       >= 4.5 && < 5,
+     bytestring >= 0.9,
+     deepseq
+   exposed-modules:  Data.BloomFilter
diff --git a/gnu/packages/patches/ghc-bytestring-handle-ghc9.patch b/gnu/packages/patches/ghc-bytestring-handle-ghc9.patch
new file mode 100644
index 0000000000..43dd472bf6
--- /dev/null
+++ b/gnu/packages/patches/ghc-bytestring-handle-ghc9.patch
@@ -0,0 +1,67 @@
+Taken from https://raw.githubusercontent.com/archlinux/svntogit-community/packages/haskell-bytestring-handle/trunk/ghc9.patch
+
+--- bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Write.hs.orig	2021-06-21 14:54:12.217134401 +0800
++++ bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Write.hs	2021-06-21 15:24:01.794796505 +0800
+@@ -17,7 +17,7 @@
+ 
+ import GHC.IO.Buffer ( BufferState(..), emptyBuffer, Buffer(..) )
+ import GHC.IO.BufferedIO ( BufferedIO(..) )
+-import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..) )
++import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..), RawIO(..) )
+ #if MIN_VERSION_base(4,5,0)
+ import GHC.IO.Encoding ( getLocaleEncoding )
+ #else
+@@ -138,6 +138,7 @@
+                                 seek_base = error "seek_base needs to be updated"
+                    })
+         modifyIORef (write_size ws) (`max` newSeekPos)
++        pure newSeekPos
+ 
+     tell ws = do
+         ss <- readIORef (write_seek_state ws)
+@@ -152,6 +153,12 @@
+ 
+     devType _ = return RegularFile -- TODO: is this correct?
+ 
++instance RawIO WriteState where
++    read _ _ _ _ = return 0
++    readNonBlocking _ _ _ _ = return Nothing
++    write _ _ _ _ = return ()
++    writeNonBlocking _ _ _ _ = return 0
++
+ ioe_seekOutOfRange :: IO a
+ ioe_seekOutOfRange =
+     ioException $ IOError Nothing InvalidArgument ""
+--- bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Read.hs.orig	2021-06-21 14:53:55.433129276 +0800
++++ bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Read.hs	2021-06-21 15:24:25.998784996 +0800
+@@ -24,7 +24,7 @@
+     , emptyBuffer, isEmptyBuffer, newBuffer, newByteBuffer
+     , bufferElems, withBuffer, withRawBuffer )
+ import GHC.IO.BufferedIO ( BufferedIO(..) )
+-import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..) )
++import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..), RawIO(..) )
+ #if MIN_VERSION_base(4,5,0)
+ import GHC.IO.Encoding ( getLocaleEncoding )
+ #else
+@@ -155,7 +155,7 @@
+                                                       (seek_before_length curSeekState)
+                                                       (fromIntegral (seek_pos curSeekState) + seekPos)
+                   SeekFromEnd -> normalisedSeekState (read_chunks_backwards rs) [] (read_length rs) seekPos
+-        maybe ioe_seekOutOfRange (writeIORef (read_seek_state rs)) newSeekState
++        maybe ioe_seekOutOfRange (\nss -> writeIORef (read_seek_state rs) nss >> pure (fromIntegral(seek_pos nss))) newSeekState
+ 
+     tell rs = do
+         ss <- readIORef (read_seek_state rs)
+@@ -166,6 +166,12 @@
+ 
+     devType _ = return RegularFile -- TODO: is this correct?
+ 
++instance RawIO ReadState where
++    read _ _ _ _ = return 0
++    readNonBlocking _ _ _ _ = return Nothing
++    write _ _ _ _ = return ()
++    writeNonBlocking _ _ _ _ = return 0
++
+ ioe_seekOutOfRange :: IO a
+ ioe_seekOutOfRange =
+     ioException $ IOError Nothing InvalidArgument ""
diff --git a/gnu/packages/patches/icecat-makeicecat.patch b/gnu/packages/patches/icecat-makeicecat.patch
index c46cb27ff6..940ca36b6c 100644
--- a/gnu/packages/patches/icecat-makeicecat.patch
+++ b/gnu/packages/patches/icecat-makeicecat.patch
@@ -6,7 +6,7 @@ diff --git a/makeicecat b/makeicecat
 index bf2b7a6..bc3b19b 100755
 --- a/makeicecat
 +++ b/makeicecat
-@@ -58,7 +58,7 @@ readonly SOURCEDIR=icecat-${FFVERSION}
+@@ -56,7 +56,7 @@ readonly SOURCEDIR=icecat-${FFVERSION}
  # debug/shell options
  readonly DEVEL=0
  set -euo pipefail
@@ -15,8 +15,8 @@ index bf2b7a6..bc3b19b 100755
  
  
  ###############################################################################
-@@ -459,7 +459,7 @@ configure_search()
-     sed 's|ddg@|ddg-html@|' -i browser/components/search/extensions/ddg-html/manifest.json
+@@ -455,7 +455,7 @@ configure_search()
+ 
  
      # Process various JSON pre-configuration dumps.
 -    python3 ../../tools/process-json-files.py . browser/components/extensions/schemas/
@@ -24,7 +24,7 @@ index bf2b7a6..bc3b19b 100755
  }
  
  configure_mobile()
-@@ -855,12 +855,12 @@ finalize_sourceball()
+@@ -837,12 +837,12 @@ finalize_sourceball()
  # entry point
  ###############################################################################
  
@@ -43,7 +43,7 @@ index bf2b7a6..bc3b19b 100755
  apply_patches
  configure
  configure_search
-@@ -872,4 +872,4 @@ prepare_macos_packaging
+@@ -854,4 +854,4 @@ prepare_macos_packaging
  configure_extensions
  configure_onboarding
  apply_bugfixes
diff --git a/gnu/packages/patches/jami-libjami-headers-search.patch b/gnu/packages/patches/jami-libjami-headers-search.patch
index 44e099a610..b3384ba563 100644
--- a/gnu/packages/patches/jami-libjami-headers-search.patch
+++ b/gnu/packages/patches/jami-libjami-headers-search.patch
@@ -20,9 +20,9 @@ Upstream status: https://review.jami.net/c/jami-client-qt/+/22973
  src/libclient/qtwrapper/CMakeLists.txt       |  2 +-
  4 files changed, 9 insertions(+), 18 deletions(-)
 
-diff --git a/client-qt/CMakeLists.txt b/CMakeLists.txt
+diff --git a/CMakeLists.txt b/CMakeLists.txt
 index d0a8fd70..94ac6074 100644
---- a/client-qt/CMakeLists.txt
+--- a/CMakeLists.txt
 +++ b/CMakeLists.txt
 @@ -118,7 +118,7 @@ set(CMAKE_MODULE_PATH
    ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
@@ -33,9 +33,9 @@ index d0a8fd70..94ac6074 100644
  endif()
  
  include(FindPython3)
-diff --git a/client-qt/extras/build/cmake/modules/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake
+diff --git a/extras/build/cmake/modules/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake
 index ddb05319..9ad20d2b 100644
---- a/client-qt/extras/build/cmake/modules/FindLibJami.cmake
+--- a/extras/build/cmake/modules/FindLibJami.cmake
 +++ b/extras/build/cmake/modules/FindLibJami.cmake
 @@ -20,28 +20,19 @@
  
@@ -78,9 +78,9 @@ index ddb05319..9ad20d2b 100644
 -message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIRS})
 +message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIR})
  message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB})
-diff --git a/client-qt/src/libclient/CMakeLists.txt b/src/libclient/CMakeLists.txt
+diff --git a/src/libclient/CMakeLists.txt b/src/libclient/CMakeLists.txt
 index 2676c9c4..ac58ea2b 100644
---- a/client-qt/src/libclient/CMakeLists.txt
+--- a/src/libclient/CMakeLists.txt
 +++ b/src/libclient/CMakeLists.txt
 @@ -62,7 +62,7 @@ set(CMAKE_MODULE_PATH
    ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
@@ -91,10 +91,10 @@ index 2676c9c4..ac58ea2b 100644
  endif()
  
  string(SUBSTRING ${CMAKE_GENERATOR} 0 14 CMAKE_GENERATOR_SHORT)
-diff --git a/client-qt/src/libclient/qtwrapper/CMakeLists.txt b/src/libclient/qtwrapper/CMakeLists.txt
+diff --git a/src/libclient/qtwrapper/CMakeLists.txt b/src/libclient/qtwrapper/CMakeLists.txt
 index acee0d0c..ba68aac4 100644
---- a/client-qt/src/libclient/qtwrapper/CMakeLists.txt
-+++ b/client-qt/src/libclient/qtwrapper/CMakeLists.txt
+--- a/src/libclient/qtwrapper/CMakeLists.txt
++++ b/src/libclient/qtwrapper/CMakeLists.txt
 @@ -46,7 +46,7 @@ else()
  endif()
  
diff --git a/gnu/packages/patches/ngless-unliftio.patch b/gnu/packages/patches/ngless-unliftio.patch
deleted file mode 100644
index 87f5e79fcf..0000000000
--- a/gnu/packages/patches/ngless-unliftio.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 919565adc1216b9d3108b3043e8d307292b37393 Mon Sep 17 00:00:00 2001
-From: Luis Pedro Coelho <luis@luispedro.org>
-Date: Fri, 7 May 2021 11:42:56 +0800
-Subject: [PATCH] BLD Update to LTS-17.10
-
-- Updates the GHC version
-- Requires `extra-deps` for `diagrams` package
-- Simplifies code for NGLessIO monad as UnliftIO can now be auto-derived
----
- NGLess/NGLess/NGError.hs |  8 ++------
- stack.yaml               | 11 ++++++++---
- 2 files changed, 10 insertions(+), 9 deletions(-)
-
-diff --git a/NGLess/NGLess/NGError.hs b/NGLess/NGLess/NGError.hs
-index a22e557f..c7eddf5b 100644
---- a/NGLess/NGLess/NGError.hs
-+++ b/NGLess/NGLess/NGError.hs
-@@ -50,7 +50,8 @@ type NGLess = Either NGError
- 
- newtype NGLessIO a = NGLessIO { unwrapNGLessIO :: ResourceT IO a }
-                         deriving (Functor, Applicative, Monad, MonadIO,
--                        MonadResource, MonadThrow, MonadCatch, MonadMask)
-+                        MonadResource, MonadThrow, MonadCatch, MonadMask,
-+                        MonadUnliftIO)
- 
- 
- instance MonadError NGError NGLessIO where
-@@ -62,11 +63,6 @@ instance PrimMonad NGLessIO where
-     primitive act = NGLessIO (primitive act)
-     {-# INLINE primitive #-}
- 
--instance MonadUnliftIO NGLessIO where
--    askUnliftIO = NGLessIO $ do
--        u <- askUnliftIO
--        return $ UnliftIO (\(NGLessIO act) -> unliftIO u act)
--
- instance MonadFail NGLessIO where
-     fail err = throwShouldNotOccur err
- 
-diff --git a/stack.yaml b/stack.yaml
-index 051d973d..11b65887 100644
---- a/stack.yaml
-+++ b/stack.yaml
-@@ -1,14 +1,19 @@
- # For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md
- 
--resolver: lts-14.20
-+resolver: lts-17.10
- compiler-check: newer-minor
- 
- # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
- extra-deps:
-   - git: "https://github.com/ngless-toolkit/interval-to-int"
-     commit: "78289f6b48d41f7cc48169520ec9b77b050a0029"
--
--
-+  - diagrams-core-1.4.2@sha256:47de45658e8a805b7cb7f535e7b093daf7e861604fa3c70e25bd4ef481bf1571,2997
-+  - diagrams-lib-1.4.3@sha256:04f77778d4b550d3c8e54440800685f88467bef91075e82e009a8a6f45c51033,8232
-+  - diagrams-svg-1.4.3@sha256:36708b0b4cf35507ccf689f1a25f6f81b8f41c2c4c2900793de820f66d4e241c,3181
-+  - active-0.2.0.14@sha256:e618aba4a7881eb85dc1585e0a01230af6b4fbab6693931e4a5d0d3a5b184406,1823
-+  - dual-tree-0.2.2.1@sha256:9ff31e461d873ae74ba51d93b454c0c4094726d7cb78a0c454394c965e83539d,2830
-+  - monoid-extras-0.5.1@sha256:438dbfd7b4dce47d8f0ca577f56caf94bd1e21391afa545cad09fe7cf2e5793d,2333
-+  - svg-builder-0.1.1@sha256:22de54d326a6b6912e461e1302edb9108b02aac0b6a6368fcdc3c4a224d487fd,1440
- allow-newer: true
- 
- # Override default flag values for local packages and extra-deps
diff --git a/gnu/packages/patches/onionshare-cli-async-mode.patch b/gnu/packages/patches/onionshare-cli-async-mode.patch
new file mode 100644
index 0000000000..b71b56046d
--- /dev/null
+++ b/gnu/packages/patches/onionshare-cli-async-mode.patch
@@ -0,0 +1,25 @@
+Specifying the `async_mode` parameter seems to have been a workaround for
+packaging on Windows and macOS.  If not given, flask_socketio.SocketIO will
+probe for an available asynchronous model, e.g. `eventlet`, and otherwise gets
+stuck if `gevent-socketio` is not available.
+
+c.f. https://github.com/onionshare/onionshare/commit/ec7fa4ef16c9e1ba6028ee927c23f76c399a17a6
+and  https://github.com/onionshare/onionshare/issues/1510
+
+diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py
+index 64844b5..7e1b095 100644
+--- a/cli/onionshare_cli/web/web.py
++++ b/cli/onionshare_cli/web/web.py
+@@ -164,10 +164,10 @@ class Web:
+         elif self.mode == "chat":
+             if self.common.verbose:
+                 self.socketio = SocketIO(
+-                    async_mode="gevent", logger=True, engineio_logger=True
++                    logger=True, engineio_logger=True
+                 )
+             else:
+-                self.socketio = SocketIO(async_mode="gevent")
++                self.socketio = SocketIO()
+             self.socketio.init_app(self.app)
+             self.chat_mode = ChatModeWeb(self.common, self)
+ 
diff --git a/gnu/packages/patches/opencascade-oce-glibc-2.26.patch b/gnu/packages/patches/opencascade-oce-glibc-2.26.patch
deleted file mode 100644
index ee5ed572c8..0000000000
--- a/gnu/packages/patches/opencascade-oce-glibc-2.26.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-Fix build with glibc 2.26:
-
-https://github.com/tpaviot/oce/issues/675
-
-Patch copied from upstream source repository:
-
-https://github.com/tpaviot/oce/commit/aa1321e68cc004e3debe38d79ae74581a617c767
-
-From aa1321e68cc004e3debe38d79ae74581a617c767 Mon Sep 17 00:00:00 2001
-From: Janus Weil <janus@gcc.gnu.org>
-Date: Mon, 18 Dec 2017 11:27:55 +0100
-Subject: [PATCH] fix build errors with glibc 2.26+ due to missing xlocale.h
- (issue #675)
-
-* check for the presence of xlocale.h via cmake
-* remove related logic from Standard_CLocaleSentry.hxx
----
- CMakeLists.txt                          |  1 +
- src/Standard/Standard_CLocaleSentry.hxx | 15 ---------------
- 2 files changed, 1 insertion(+), 15 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index b782b4101..50e9500b2 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -616,6 +616,7 @@ if (NOT WIN32)
- 	# compilation anywhere in OCE
- 	include(CheckIncludeFile)
- 	check_include_file(strings.h HAVE_STRINGS_H)
-+	check_include_file(xlocale.h HAVE_XLOCALE_H)
- 	include(CheckIncludeFileCXX)
- 	check_include_file_cxx(mm_malloc.h HAVE_MM_MALLOC_H)
- 	check_include_file_cxx(atomic.h OCE_HAVE_ATOMIC_H)
-diff --git a/src/Standard/Standard_CLocaleSentry.hxx b/src/Standard/Standard_CLocaleSentry.hxx
-index 2b226e7f3..1a4c1dadc 100644
---- a/src/Standard/Standard_CLocaleSentry.hxx
-+++ b/src/Standard/Standard_CLocaleSentry.hxx
-@@ -20,21 +20,6 @@
- 
- #include <locale.h>
- 
--#ifndef HAVE_XLOCALE_H
--  //! "xlocale.h" available in Mac OS X and glibc (Linux) for a long time as an extension
--  //! and become part of POSIX since '2008.
--  //! Notice that this is impossible to test (_POSIX_C_SOURCE >= 200809L)
--  //! since POSIX didn't declared such identifier.
--  #if defined(__APPLE__)
--    #define HAVE_XLOCALE_H
--  #endif
--
--  //! We check _GNU_SOURCE for glibc extensions here and it is always defined by g++ compiler.
--  #if defined(_GNU_SOURCE) && !defined(__ANDROID__)
--    #define HAVE_XLOCALE_H
--  #endif
--#endif // ifndef HAVE_LOCALE_H
--
- #ifdef HAVE_XLOCALE_H
-   #include <xlocale.h>
- #endif
--- 
-2.15.1
-
diff --git a/gnu/packages/patches/opentaxsolver-file-browser-fix.patch b/gnu/packages/patches/opentaxsolver-file-browser-fix.patch
new file mode 100644
index 0000000000..0e6be74f85
--- /dev/null
+++ b/gnu/packages/patches/opentaxsolver-file-browser-fix.patch
@@ -0,0 +1,58 @@
+From 96fda11a53a89c6647031f2c05ef12f1a9df6a08 Mon Sep 17 00:00:00 2001
+From: Skylar Hill <stellarskylark@posteo.net>
+Date: Tue, 31 Jan 2023 21:02:18 -0600
+Subject: [PATCH] Change default directory in file browser
+
+---
+ src/Gui_gtk/ots_gui2.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/Gui_gtk/ots_gui2.c b/src/Gui_gtk/ots_gui2.c
+index ff3366b..1247933 100644
+--- a/src/Gui_gtk/ots_gui2.c
++++ b/src/Gui_gtk/ots_gui2.c
+@@ -82,6 +82,7 @@ char ots_release_package[]="20.00";
+ #include <string.h>
+ #include <stdlib.h>
+ #include <ctype.h>
++#include <unistd.h>
+ #include <sys/stat.h>
+ // #include "backcompat.c"
+ #include "gtk_utils.c"		/* Include the graphics library. */
+@@ -109,6 +110,7 @@ char toolpath[MaxFname]="", *start_cmd;
+ int pending_compute=0, supported_pdf_form=1;
+ int filingstatus_mfj=1;
+ int round_to_whole_nums=0;
++char *working_dir[MaxFname+512];
+ 
+ void pick_file( GtkWidget *wdg, void *data );	/* Prototype */
+ void consume_leading_trailing_whitespace( char *line );
+@@ -2364,7 +2366,7 @@ void save_taxfile( GtkWidget *wdg, void *data )
+  if (cpt != 0)
+   strcpy( cpt, "_xxxx.txt" );
+  // printf("OTS_save_taxfile: dir='%s', wc='%s', fname='%s'\n", directory_dat, wildcards_fb, filename_fb );
+- Browse_Files( "File to Save As:", 2048, directory_dat, wildcards_fb, filename_fb, Save_Tax_File );
++ Browse_Files( "File to Save As:", 2048, working_dir, wildcards_fb, filename_fb, Save_Tax_File );
+ }
+ 
+ 
+@@ -3878,7 +3880,7 @@ void pick_file( GtkWidget *wdg, void *data )
+   strcpy( wildcards_fb, ".txt" );
+   strcpy( filename_fb, "" );
+   // printf("OTS_pick_file: dir='%s', wc='%s', fname='%s'\n", directory_dat, wildcards_fb, filename_fb );
+-  Browse_Files( "Select File", 2048, directory_dat, wildcards_fb, filename_fb, receive_filename );
++  Browse_Files( "Select File", 2048, working_dir, wildcards_fb, filename_fb, receive_filename );
+ }
+ 
+ 
+@@ -4019,6 +4021,7 @@ int main(int argc, char *argv[] )
+  invocation_path[k] = '\0';
+  // printf("Invocation path = '%s'\n", invocation_path);
+  set_ots_path();
++ getcwd(working_dir, MaxFname+512);
+ 
+  /* Decode any command-line arguments. */
+  argn = 1;  k=1;
+-- 
+2.38.1
+
diff --git a/gnu/packages/patches/php-bug-74093-test.patch b/gnu/packages/patches/php-bug-74093-test.patch
deleted file mode 100644
index 07b1949cef..0000000000
--- a/gnu/packages/patches/php-bug-74093-test.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From c641825c64e42627a2c9cac969b371ed532e0b57 Mon Sep 17 00:00:00 2001
-From: Ryan Sundberg <ryan@arctype.co>
-Date: Mon, 4 Oct 2021 20:12:25 -0700
-Subject: [PATCH] Zend/tests/bug74093.phpt: Fix failing test case
-
-This test case fails (on non-Windows hosts, where it is enabled) due
-to mismatching output in the error log language. This fixes the
-expectation, and also rewrites the test procedure in a more stable
-fashion.
-
-The objective of the test case is to run a program that exceeds
-the max_execution_time and verify that the process was aborted. The
-previous implementation tested this using a loop on array_intersect with
-large enough inputs to "probably" take enough time to trigger
-max_execution_time to abort it. With faster CPUs, over time this test
-can become flaky. Instead we simply spin a loop until enough
-wall clock time has passed to check our assertion.
----
- Zend/tests/bug74093.phpt | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/Zend/tests/bug74093.phpt b/Zend/tests/bug74093.phpt
-index 7f20285805..32eb445ddc 100644
---- a/Zend/tests/bug74093.phpt
-+++ b/Zend/tests/bug74093.phpt
-@@ -1,5 +1,5 @@
- --TEST--
--Bug #74093 (Maximum execution time of n+2 seconds exceed not written in error_log)
-+Bug #74093 (Maximum execution time exceeded not written in error_log)
- --SKIPIF--
- <?php
- if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
-@@ -12,9 +12,9 @@ max_execution_time=1
- hard_timeout=1
- --FILE--
- <?php
--$a1 = range(1, 1000000);
--$a2 = range(100000, 1999999);
--array_intersect($a1, $a2);
-+$start = time();
-+while (time() - $start < 5);
-+die("Failed to interrupt execution");
- ?>
- --EXPECTF--
--Fatal error: Maximum execution time of 1+1 seconds exceeded %s
-+Fatal error: Maximum execution time of 1 second exceeded in %s
---
-2.31.1
diff --git a/gnu/packages/patches/php-curl-compat.patch b/gnu/packages/patches/php-curl-compat.patch
deleted file mode 100644
index 0617251194..0000000000
--- a/gnu/packages/patches/php-curl-compat.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Fix test result with cURL 7.83 and later.
-
-Taken from upstream:
-
-  https://github.com/php/php-src/commit/a4179e4c92b6365d39e09cb9cd63c476848013af
-
-diff --git a/ext/curl/tests/curl_basic_007.phpt b/ext/curl/tests/curl_basic_007.phpt
-index 3b53658d6a7e..3834e4674f82 100644
---- a/ext/curl/tests/curl_basic_007.phpt
-+++ b/ext/curl/tests/curl_basic_007.phpt
-@@ -20,5 +20,5 @@ curl_close($ch);
- 
- ?>
- --EXPECTF--
--string(%d) "No URL set!%w"
-+string(%d) "No URL set%A"
- int(3)
diff --git a/gnu/packages/patches/php-fix-streams-copy-length.patch b/gnu/packages/patches/php-fix-streams-copy-length.patch
new file mode 100644
index 0000000000..d68f658071
--- /dev/null
+++ b/gnu/packages/patches/php-fix-streams-copy-length.patch
@@ -0,0 +1,52 @@
+From cddcc10becb013ae498ea9c2836792f407b61678 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Tue, 7 Feb 2023 22:55:59 +0100
+Subject: [PATCH] Fix file corruption when using copy_file_range.
+
+This patch is adapted from https://github.com/php/php-src/pull/10440.
+---
+ main/streams/streams.c | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+diff --git a/main/streams/streams.c b/main/streams/streams.c
+index 20029fc7..68dc76c5 100644
+--- a/main/streams/streams.c
++++ b/main/streams/streams.c
+@@ -1634,8 +1634,21 @@ PHPAPI zend_result _php_stream_copy_to_stream_ex(php_stream *src, php_stream *de
+ 		char *p;
+ 
+ 		do {
+-			size_t chunk_size = (maxlen == 0 || maxlen > PHP_STREAM_MMAP_MAX) ? PHP_STREAM_MMAP_MAX : maxlen;
+-			size_t mapped;
++            /* We must not modify maxlen here, because otherwise the file copy fallback below can fail */
++            size_t chunk_size, must_read, mapped;
++            if (maxlen == 0) {
++				/* Unlimited read */
++				must_read = chunk_size = PHP_STREAM_MMAP_MAX;
++			} else {
++				must_read = maxlen - haveread;
++				if (must_read >= PHP_STREAM_MMAP_MAX) {
++					chunk_size = PHP_STREAM_MMAP_MAX;
++				} else {
++					/* In case the length we still have to read from the file could be smaller than the file size,
++					 * chunk_size must not get bigger the size we're trying to read. */
++					chunk_size = must_read;
++				}
++			}
+ 
+ 			p = php_stream_mmap_range(src, php_stream_tell(src), chunk_size, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
+ 
+@@ -1667,8 +1680,8 @@ PHPAPI zend_result _php_stream_copy_to_stream_ex(php_stream *src, php_stream *de
+ 					return SUCCESS;
+ 				}
+ 				if (maxlen != 0) {
+-					maxlen -= mapped;
+-					if (maxlen == 0) {
++					must_read -= mapped;
++					if (must_read == 0) {
+ 						return SUCCESS;
+ 					}
+ 				}
+-- 
+2.38.1
+
diff --git a/gnu/packages/patches/qpdfview-qt515-compat.patch b/gnu/packages/patches/qpdfview-qt515-compat.patch
deleted file mode 100644
index 1fbf5ec3f1..0000000000
--- a/gnu/packages/patches/qpdfview-qt515-compat.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Fix compatibility with Qt 5.15.
-
-Patch copied from upstream source repository:
-
-https://bazaar.launchpad.net/~adamreichold/qpdfview/trunk/revision/2104
-
---- a/sources/model.h	2017-04-19 21:01:25 +0000
-+++ b/sources/model.h	2020-06-09 06:24:11 +0000
-@@ -24,6 +24,7 @@
- #define DOCUMENTMODEL_H
- 
- #include <QList>
-+#include <QPainterPath>
- #include <QtPlugin>
- #include <QWidget>
- #include <QVector>
-
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
deleted file mode 100644
index ddaf8e2849..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-bison-3.7.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-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
deleted file mode 100644
index 63840f4bbc..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-glib-2.68.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-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
deleted file mode 100644
index acbfc4c4c8..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-icu-68.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-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
deleted file mode 100644
index 9f9674de33..0000000000
--- a/gnu/packages/patches/qtwebkit-fix-building-with-python-3.9.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-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/qtwebkit-pbutils-include.patch b/gnu/packages/patches/qtwebkit-pbutils-include.patch
deleted file mode 100644
index 57961e7a51..0000000000
--- a/gnu/packages/patches/qtwebkit-pbutils-include.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Patch taken from Nix:
-   https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/qt-5/5.11/qtwebkit.patch
-
-diff --git a/Source/WebKit2/PlatformQt.cmake b/Source/WebKit2/PlatformQt.cmake
---- a/Source/WebKit2/PlatformQt.cmake
-+++ b/Source/WebKit2/PlatformQt.cmake
-@@ -261,6 +261,7 @@
- list(APPEND WebKit2_SYSTEM_INCLUDE_DIRECTORIES
-     ${GLIB_INCLUDE_DIRS}
-     ${GSTREAMER_INCLUDE_DIRS}
-+    ${GSTREAMER_PBUTILS_INCLUDE_DIRS}
-     ${Qt5Quick_INCLUDE_DIRS}
-     ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
-     ${SQLITE_INCLUDE_DIR}
-
diff --git a/gnu/packages/patches/racket-backport-8.7-pkg-strip.patch b/gnu/packages/patches/racket-backport-8.7-pkg-strip.patch
deleted file mode 100644
index 703b6e8e82..0000000000
--- a/gnu/packages/patches/racket-backport-8.7-pkg-strip.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 1b7e15c23baf1fda44b1d0752902ddea11419fc5 Mon Sep 17 00:00:00 2001
-From: Philip McGrath <philip@philipmcgrath.com>
-Date: Fri, 7 Oct 2022 02:15:13 -0400
-Subject: [PATCH] pkg/strip: handle read-only input
-
-A package directory supplied to the functions from `pkg/strip` might
-have had all of its write permission bits unset. Since `copy-file`
-preserves the permissions of the source file, we may end up with a
-read-only file that we want to overwrite (e.g. an `info.rkt` file).
-Explicitly setting `user-write-bit` before writing avoids this problem.
-Conservatively, we only set the permissions when actually needed,
-and we restore the original permissions when we are done.
-
-(cherry picked from commit 8c647c8cc9b66112198fcf9bea27fc0e3737162f)
----
- racket/collects/pkg/strip.rkt | 35 +++++++++++++++++++++++++++++------
- 1 file changed, 29 insertions(+), 6 deletions(-)
-
-diff --git a/racket/collects/pkg/strip.rkt b/racket/collects/pkg/strip.rkt
-index 0ff58cea02..5899dbc6e6 100644
---- a/racket/collects/pkg/strip.rkt
-+++ b/racket/collects/pkg/strip.rkt
-@@ -306,9 +306,8 @@
-            #t
-            new-mod*-subs))))
-   (unless (eq? mod new-mod)
--    (call-with-output-file*
-+    (call-with-output-file/writable
-      new-p
--     #:exists 'truncate/replace
-      (lambda (out) (write new-mod out)))))
- 
- (define (fixup-local-redirect-reference p js-path #:user [user-js-path js-path])
-@@ -340,9 +339,8 @@
-                                       (string->bytes/utf-8 user-js-path)
-                                       (subbytes s (+ delta end2)))]
-                        [else s]))))
--    (call-with-output-file*
-+    (call-with-output-file/writable
-      p
--     #:exists 'truncate/replace
-      (lambda (out) (write-bytes new-bstr out)))))
- 
- ;; Used in binary[-lib] mode:
-@@ -383,9 +381,8 @@
-          (convert-mod info-lib defns)]))
-     (unless (equal? new-content content)
-       ;; write updated:
--      (call-with-output-file* 
-+      (call-with-output-file/writable
-        new-p
--       #:exists 'truncate
-        (lambda (out)
-          (write new-content out)
-          (newline out)))
-@@ -503,3 +500,29 @@
-                     which
-                     dir)
-             (current-continuation-marks)))))
-+
-+(define (call-with-output-file/writable pth proc)
-+  ;; In case `pth` was copied from a file without the user-write-bit set,
-+  ;; explicitly make it writable while we overwrite it.
-+  (define (run)
-+    (call-with-output-file* pth
-+      #:exists 'truncate/replace
-+      proc))
-+  (cond
-+    [(file-exists? pth)
-+     (define old-mode
-+       (file-or-directory-permissions pth 'bits))
-+     (define new-mode
-+       (if (eq? (system-type) 'windows)
-+           (bitwise-ior old-mode user-write-bit group-write-bit other-write-bit)
-+           (bitwise-ior old-mode user-write-bit)))
-+     (if (= old-mode new-mode)
-+         (run)
-+         (dynamic-wind
-+          (λ ()
-+            (file-or-directory-permissions pth new-mode))
-+          run
-+          (λ ()
-+            (file-or-directory-permissions pth old-mode))))]
-+    [else
-+     (run)]))
-
-base-commit: 7e4f6e2362d4a08affbbae3c7ee4b98e325274c6
--- 
-2.38.0
-
diff --git a/gnu/packages/patches/scsh-nonstring-search-path.patch b/gnu/packages/patches/scsh-nonstring-search-path.patch
new file mode 100644
index 0000000000..3934d49fa3
--- /dev/null
+++ b/gnu/packages/patches/scsh-nonstring-search-path.patch
@@ -0,0 +1,15 @@
+This patch was submitted upstream:
+https://github.com/scheme/scsh/pull/46
+
+diff --git a/scheme/lib-dirs.scm b/scheme/lib-dirs.scm
+index a1fc009..c630fb4 100644
+--- a/scheme/lib-dirs.scm
++++ b/scheme/lib-dirs.scm
+@@ -75,6 +75,7 @@
+               (let ((val (read)))
+                 (cond ((eof-object? val) '())
+                       ((string? val) (cons val (recur)))
++                      ((symbol? val) (cons (symbol->string val) (recur)))
+                       ((not val) (append default-lib-dirs (recur)))
+                       (else 
+                        (error 
diff --git a/gnu/packages/patches/spice-vdagent-glib-2.68.patch b/gnu/packages/patches/spice-vdagent-glib-2.68.patch
deleted file mode 100644
index cd5f13a909..0000000000
--- a/gnu/packages/patches/spice-vdagent-glib-2.68.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 8348ef3c6121247e2b8be0641bbf3df3d55d9bff Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
-Date: Tue, 4 May 2021 13:20:47 +0400
-Subject: [PATCH] Fix g_memdup deprecation warning with glib >= 2.68
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Related to:
-https://bugzilla.redhat.com/show_bug.cgi?id=1943059
-
-Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
----
- configure.ac            | 4 ++++
- src/vdagent/vdagent.c   | 4 ++--
- src/vdagent/x11-randr.c | 2 +-
- src/vdagentd/vdagentd.c | 8 ++++----
- 4 files changed, 11 insertions(+), 7 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 7b2a99c..3de9b9b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -124,6 +124,10 @@ PKG_CHECK_MODULES(ALSA, [alsa >= 1.0.22])
- PKG_CHECK_MODULES([DBUS], [dbus-1])
- PKG_CHECK_MODULES([DRM], [libdrm])
- 
-+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.68], [], [
-+    AC_DEFINE(g_memdup2, g_memdup, [GLib2 < 2.68 compatibility])
-+])
-+
- if test "$with_session_info" = "auto" || test "$with_session_info" = "systemd"; then
-     PKG_CHECK_MODULES([LIBSYSTEMD_LOGIN],
-                       [libsystemd >= 209],
-diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c
-index 0c69907..fd08522 100644
---- a/src/vdagent/vdagent.c
-+++ b/src/vdagent/vdagent.c
-@@ -228,7 +228,7 @@ static void daemon_read_complete(UdscsConnection *conn,
-         break;
-     case VDAGENTD_AUDIO_VOLUME_SYNC: {
-         VDAgentAudioVolumeSync *avs = (VDAgentAudioVolumeSync *)data;
--        uint16_t *volume = g_memdup(avs->volume, sizeof(uint16_t) * avs->nchannels);
-+        uint16_t *volume = g_memdup2(avs->volume, sizeof(uint16_t) * avs->nchannels);
- 
-         if (avs->is_playback) {
-             vdagent_audio_playback_sync(avs->mute, avs->nchannels, volume);
-@@ -414,7 +414,7 @@ int main(int argc, char *argv[])
-     GOptionContext *context;
-     GError *error = NULL;
-     VDAgent *agent;
--    char **orig_argv = g_memdup(argv, sizeof(char*) * (argc+1));
-+    char **orig_argv = g_memdup2(argv, sizeof(char*) * (argc+1));
-     orig_argv[argc] = NULL; /* To avoid clang analyzer false-positive */
- 
-     context = g_option_context_new(NULL);
-diff --git a/src/vdagent/x11-randr.c b/src/vdagent/x11-randr.c
-index 27404a1..037aded 100644
---- a/src/vdagent/x11-randr.c
-+++ b/src/vdagent/x11-randr.c
-@@ -982,7 +982,7 @@ void vdagent_x11_set_monitor_config(struct vdagent_x11 *x11,
-                    fullscreen it will keep sending the failing config. */
-                 g_free(x11->randr.failed_conf);
-                 x11->randr.failed_conf =
--                    g_memdup(mon_config, config_size(mon_config->num_of_monitors));
-+                    g_memdup2(mon_config, config_size(mon_config->num_of_monitors));
-                 return;
-             }
-         }
-diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
-index 78378aa..3e59331 100644
---- a/src/vdagentd/vdagentd.c
-+++ b/src/vdagentd/vdagentd.c
-@@ -216,7 +216,7 @@ static void do_client_monitors(VirtioPort *vport, int port_nr,
-     vdagentd_write_xorg_conf(new_monitors);
- 
-     g_free(mon_config);
--    mon_config = g_memdup(new_monitors, size);
-+    mon_config = g_memdup2(new_monitors, size);
- 
-     /* Send monitor config to currently active agent */
-     if (active_session_conn)
-@@ -249,7 +249,7 @@ static void do_client_capabilities(VirtioPort *vport,
- {
-     capabilities_size = VD_AGENT_CAPS_SIZE_FROM_MSG_SIZE(message_header->size);
-     g_free(capabilities);
--    capabilities = g_memdup(caps->caps, capabilities_size * sizeof(uint32_t));
-+    capabilities = g_memdup2(caps->caps, capabilities_size * sizeof(uint32_t));
- 
-     if (caps->request) {
-         /* Report the previous client has disconnected. */
-@@ -647,7 +647,7 @@ static void virtio_port_read_complete(
-     case VD_AGENT_GRAPHICS_DEVICE_INFO: {
-         // store device info for re-sending when a session agent reconnects
-         g_free(device_info);
--        device_info = g_memdup(data, message_header->size);
-+        device_info = g_memdup2(data, message_header->size);
-         device_info_size = message_header->size;
-         forward_data_to_session_agent(VDAGENTD_GRAPHICS_DEVICE_INFO, data, message_header->size);
-         break;
-@@ -1090,7 +1090,7 @@ static void do_agent_xorg_resolution(UdscsConnection             *conn,
-     }
- 
-     g_free(agent_data->screen_info);
--    agent_data->screen_info = g_memdup(data, header->size);
-+    agent_data->screen_info = g_memdup2(data, header->size);
-     agent_data->width  = header->arg1;
-     agent_data->height = header->arg2;
-     agent_data->screen_count = n;
--- 
-GitLab
-
diff --git a/gnu/packages/patches/virglrenderer-CVE-2017-6386.patch b/gnu/packages/patches/virglrenderer-CVE-2017-6386.patch
deleted file mode 100644
index bd3bf106bf..0000000000
--- a/gnu/packages/patches/virglrenderer-CVE-2017-6386.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-Fix CVE-2017-6386 (memory leak introduced by fix for CVE-2017-5994).
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5994
-
-Patch copied from upstream source repository:
-
-https://cgit.freedesktop.org/virglrenderer/commit/?id=737c3350850ca4dbc5633b3bdb4118176ce59920
-
-From 737c3350850ca4dbc5633b3bdb4118176ce59920 Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Tue, 28 Feb 2017 14:52:09 +1000
-Subject: renderer: fix memory leak in vertex elements state create
-
-Reported-by: Li Qiang
-Free the vertex array in error path.
-This was introduced by this commit:
-renderer: fix heap overflow in vertex elements state create.
-
-I rewrote the code to not require the allocation in the first
-place if we have an error, seems nicer.
-
-Signed-off-by: Dave Airlie <airlied@redhat.com>
-
-diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
-index 1bca7ad..e5d9f5c 100644
---- a/src/vrend_renderer.c
-+++ b/src/vrend_renderer.c
-@@ -1648,18 +1648,19 @@ int vrend_create_vertex_elements_state(struct vrend_context *ctx,
-                                        unsigned num_elements,
-                                        const struct pipe_vertex_element *elements)
- {
--   struct vrend_vertex_element_array *v = CALLOC_STRUCT(vrend_vertex_element_array);
-+   struct vrend_vertex_element_array *v;
-    const struct util_format_description *desc;
-    GLenum type;
-    int i;
-    uint32_t ret_handle;
- 
--   if (!v)
--      return ENOMEM;
--
-    if (num_elements > PIPE_MAX_ATTRIBS)
-       return EINVAL;
- 
-+   v = CALLOC_STRUCT(vrend_vertex_element_array);
-+   if (!v)
-+      return ENOMEM;
-+
-    v->count = num_elements;
-    for (i = 0; i < num_elements; i++) {
-       memcpy(&v->elements[i].base, &elements[i], sizeof(struct pipe_vertex_element));
--- 
-cgit v0.10.2
-
diff --git a/gnu/packages/patches/wpa-supplicant-dbus-group-policy.patch b/gnu/packages/patches/wpa-supplicant-dbus-group-policy.patch
new file mode 100644
index 0000000000..95c18dac18
--- /dev/null
+++ b/gnu/packages/patches/wpa-supplicant-dbus-group-policy.patch
@@ -0,0 +1,23 @@
+Borrowed from debian, allows users in netdev group to control wpa-supplicant
+via D-Bus.
+
+Description: Debian does not use pam_console but uses group membership
+ to control access to D-Bus. Activating both options in the conf file
+ makes it work on Debian and Ubuntu.
+Author: Michael Biebl <biebl@debian.org>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=15;bug=412179
+---
+--- a/wpa_supplicant/dbus/dbus-wpa_supplicant.conf
++++ b/wpa_supplicant/dbus/dbus-wpa_supplicant.conf
+@@ -14,6 +14,11 @@
+                 <allow send_interface="fi.w1.wpa_supplicant1"/>
+                 <allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/>
+         </policy>
++        <policy group="netdev">
++                <allow send_destination="fi.w1.wpa_supplicant1"/>
++                <allow send_interface="fi.w1.wpa_supplicant1"/>
++                <allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/>
++        </policy>
+         <policy context="default">
+                 <deny own="fi.epitest.hostap.WPASupplicant"/>
+                 <deny send_destination="fi.epitest.hostap.WPASupplicant"/>
diff --git a/gnu/packages/patches/xf86-video-qxl-fix-build.patch b/gnu/packages/patches/xf86-video-qxl-fix-build.patch
deleted file mode 100644
index 9ea50e4c91..0000000000
--- a/gnu/packages/patches/xf86-video-qxl-fix-build.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 4b083ede3c4a827a84295ff223e34ee3c2e581b2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
- <zboszor@gmail.com>
-Date: Sat, 28 Aug 2021 15:38:40 +0200
-Subject: [PATCH] Fix a build  error with Xorg master
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use xf86ReturnOptValBool() in get_bool_option() instead of
-options[option_index].value.bool to fix a compiler error with
-current Xorg xserver master branch.
-
-Also use xf86GetOptValInteger() in get_int_option() and
-xf86GetOptValString() in get_str_option() for consistency.
-
-The change causes a slight performance drop during option parsing
-because the passed-in index_value is no longer used as an index
-into the options array.
-
-Instead, it's used as a token now for the standard option getter
-functions which works since the index_value to the get_*_option()
-functions are identical to the value of options[n].token in the
-passed-in OptionInfoRec array.
-
-Also rename "int option_index" to "int token" for clarity in all
-three functions.
-
-Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
----
- src/qxl_option_helpers.c | 13 +++++++------
- src/qxl_option_helpers.h |  6 +++---
- 2 files changed, 10 insertions(+), 9 deletions(-)
-
-diff --git a/src/qxl_option_helpers.c b/src/qxl_option_helpers.c
-index 2aba677..7707b7c 100644
---- a/src/qxl_option_helpers.c
-+++ b/src/qxl_option_helpers.c
-@@ -10,31 +10,32 @@
- 
- #include "qxl_option_helpers.h"
- 
--int get_int_option(OptionInfoPtr options, int option_index,
-+int get_int_option(OptionInfoPtr options, int token,
-                    const char *env_name)
- {
-+    int value;
-     if (env_name && getenv(env_name)) {
-         return atoi(getenv(env_name));
-     }
--    return options[option_index].value.num;
-+    return xf86GetOptValInteger(options, token, &value) ? value : 0;
- }
- 
--const char *get_str_option(OptionInfoPtr options, int option_index,
-+const char *get_str_option(OptionInfoPtr options, int token,
-                            const char *env_name)
- {
-     if (getenv(env_name)) {
-         return getenv(env_name);
-     }
--    return options[option_index].value.str;
-+    return xf86GetOptValString(options, token);
- }
- 
--int get_bool_option(OptionInfoPtr options, int option_index,
-+int get_bool_option(OptionInfoPtr options, int token,
-                      const char *env_name)
- {
-     const char* value = getenv(env_name);
- 
-     if (!value) {
--        return options[option_index].value.bool;
-+        return xf86ReturnOptValBool(options, token, FALSE);
-     }
-     if (strcmp(value, "0") == 0 ||
-         strcasecmp(value, "off") == 0 ||
-diff --git a/src/qxl_option_helpers.h b/src/qxl_option_helpers.h
-index 7c54c72..66d0a17 100644
---- a/src/qxl_option_helpers.h
-+++ b/src/qxl_option_helpers.h
-@@ -4,13 +4,13 @@
- #include <xf86Crtc.h>
- #include <xf86Opt.h>
- 
--int get_int_option(OptionInfoPtr options, int option_index,
-+int get_int_option(OptionInfoPtr options, int token,
-                    const char *env_name);
- 
--const char *get_str_option(OptionInfoPtr options, int option_index,
-+const char *get_str_option(OptionInfoPtr options, int token,
-                            const char *env_name);
- 
--int get_bool_option(OptionInfoPtr options, int option_index,
-+int get_bool_option(OptionInfoPtr options, int token,
-                      const char *env_name);
- 
- #endif // OPTION_HELPERS_H
--- 
-GitLab
-
diff --git a/gnu/packages/patches/xf86-video-tga-remove-mibstore.patch b/gnu/packages/patches/xf86-video-tga-remove-mibstore.patch
deleted file mode 100644
index b1a96c3f10..0000000000
--- a/gnu/packages/patches/xf86-video-tga-remove-mibstore.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Removes references to mibstore.h and miInitializeBackingStore, which
-have been removed from xorg-server.  Zack Rusin <zackr@vmware.com>
-wrote: "It was a noop for at least 5 years and it has been removed."
-See: http://patches.openembedded.org/patch/46133/
-
---- xf86-video-tga-1.2.2/src/tga_accel.c.~1~	2012-07-15 23:54:04.000000000 -0400
-+++ xf86-video-tga-1.2.2/src/tga_accel.c	2014-12-19 01:40:27.535913013 -0500
-@@ -37,7 +37,6 @@
- #include "xf86cmap.h"
- #include "mipointer.h"
- 
--#include "mibstore.h"
- #include "miline.h"
- 
- #include "tga_regs.h"
---- xf86-video-tga-1.2.2/src/tga_driver.c.~1~	2012-07-15 23:54:28.000000000 -0400
-+++ xf86-video-tga-1.2.2/src/tga_driver.c	2014-12-19 01:40:48.756018238 -0500
-@@ -46,8 +46,6 @@
- 
- /* software cursor */
- #include "mipointer.h"
--/* backing store */
--#include "mibstore.h"
- 
- /*  #include "mibank.h" */
- /* colormap manipulation */
-@@ -1451,7 +1449,6 @@
-     
-     fbPictureInit (pScreen, 0, 0);
-     
--    miInitializeBackingStore(pScreen);
-     xf86SetBackingStore(pScreen);
-     xf86SetSilkenMouse(pScreen);
- 
diff --git a/gnu/packages/patches/xf86-video-voodoo-pcitag.patch b/gnu/packages/patches/xf86-video-voodoo-pcitag.patch
deleted file mode 100644
index 5cadef3928..0000000000
--- a/gnu/packages/patches/xf86-video-voodoo-pcitag.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Mon, 20 May 2019 04:52:33 +0200
-Subject: [PATCH] gnu: xf86-video-voodoo: Don't use PCITAG.
-
-Copied verbatim from upstream repository[0].
-
-[0]: https://cgit.freedesktop.org/xorg/driver/-xf86-video-voodoo/patch/?id=9172ae566a0e85313fc80ab62b4455393eefe593
-
-From 9172ae566a0e85313fc80ab62b4455393eefe593 Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Mon, 22 Sep 2014 10:56:02 +1000
-Subject: don't use PCITAG in struct anymore
-
----
- src/voodoo.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/voodoo.h b/src/voodoo.h
-index bfed497..c3eb64e 100644
---- a/src/voodoo.h
-+++ b/src/voodoo.h
-@@ -23,7 +23,9 @@ typedef struct {
-   
-   Bool		      Voodoo2;		/* Set if Voodoo2 */
-   pciVideoPtr	      PciInfo;		/* PCI data */
-+#ifndef XSERVER_LIBPCIACCESS
-   PCITAG	      PciTag;
-+#endif
-   CARD32	      PhysBase;
-   
-   CARD32	      Width;		/* Current width */
--- 
-cgit v1.0
-
diff --git a/gnu/packages/patches/xmonad-dynamic-linking.patch b/gnu/packages/patches/xmonad-dynamic-linking.patch
index 4f3386e53a..a1d71825b6 100644
--- a/gnu/packages/patches/xmonad-dynamic-linking.patch
+++ b/gnu/packages/patches/xmonad-dynamic-linking.patch
@@ -2,15 +2,15 @@ This patch is required for xmonad to make use of shared libraries.
 Without it, xmonad will not work since we do not (by default) use
 statically linked Haskell libraries.
 
-diff -ruN xmonad-0.15-a/src/XMonad/Core.hs xmonad-0.15-b/src/XMonad/Core.hs
---- xmonad-0.15-a/src/XMonad/Core.hs	1969-12-31 19:00:00.000000000 -0500
-+++ xmonad-0.15-b/src/XMonad/Core.hs	1969-12-31 19:00:00.000000000 -0500
-@@ -681,6 +681,8 @@
-        compileGHC bin dir errHandle =
-          runProcess "ghc" ["--make"
-                           , "xmonad.hs"
-+                          , "-dynamic"
-+                          , "-fPIC"
-                           , "-i"
-                           , "-ilib"
-                           , "-fforce-recomp"
+index 46a0939..5ad4f8f 100644
+--- a/src/XMonad/Core.hs
++++ b/src/XMonad/Core.hs
+@@ -664,6 +664,8 @@ compile dirs method =
+   where
+     ghcArgs = [ "--make"
+               , "xmonad.hs"
++              , "-dynamic"
++              , "-fPIC"
+               , "-i" -- only look in @lib@
+               , "-ilib"
+               , "-fforce-recomp"
diff --git a/gnu/packages/patches/xmonad-next-dynamic-linking.patch b/gnu/packages/patches/xmonad-next-dynamic-linking.patch
deleted file mode 100644
index a1d71825b6..0000000000
--- a/gnu/packages/patches/xmonad-next-dynamic-linking.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-This patch is required for xmonad to make use of shared libraries.
-Without it, xmonad will not work since we do not (by default) use
-statically linked Haskell libraries.
-
-index 46a0939..5ad4f8f 100644
---- a/src/XMonad/Core.hs
-+++ b/src/XMonad/Core.hs
-@@ -664,6 +664,8 @@ compile dirs method =
-   where
-     ghcArgs = [ "--make"
-               , "xmonad.hs"
-+              , "-dynamic"
-+              , "-fPIC"
-               , "-i" -- only look in @lib@
-               , "-ilib"
-               , "-fforce-recomp"
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 33b76f058f..a592d11bce 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016-2020, 2022, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
@@ -53,7 +53,6 @@
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
-  #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
@@ -187,7 +186,7 @@ information.")
     (inputs
      (list python-poppler-qt5
            python-pypdf2
-           python-pyqt-without-qtwebkit
+           python-pyqt
            qtbase-5))
     (home-page "http://crazy-compilers.com/flyer-composer")
     (synopsis "Rearrange PDF pages to print as flyers on one sheet")
@@ -447,7 +446,7 @@ reading and editing of existing PDF files.")
 (define-public zathura-cb
   (package
     (name "zathura-cb")
-    (version "0.1.8")
+    (version "0.1.10")
     (source (origin
               (method url-fetch)
               (uri
@@ -455,7 +454,7 @@ reading and editing of existing PDF files.")
                               version ".tar.xz"))
               (sha256
                (base32
-                "1i6cf0vks501cggwvfsl6qb7mdaf3sszdymphimfvnspw810faj5"))))
+                "1j5v32f9ki35v1jc7a067anhlgqplzrp4fqvznlixfhcm0bwmc49"))))
     (native-inputs (list pkg-config))
     (inputs (list libarchive zathura))
     (build-system meson-build-system)
@@ -464,7 +463,7 @@ reading and editing of existing PDF files.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-plugin-directory
-           ;; Something of a regression in 0.1.8: the new Meson build system
+           ;; Something of a regression in 0.1.10: the new Meson build system
            ;; now hard-codes an incorrect plugin directory.  Fix it.
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "meson.build"
@@ -481,7 +480,7 @@ using libarchive.")
 (define-public zathura-ps
   (package
     (name "zathura-ps")
-    (version "0.2.6")
+    (version "0.2.7")
     (source (origin
               (method url-fetch)
               (uri
@@ -489,7 +488,7 @@ using libarchive.")
                               version ".tar.xz"))
               (sha256
                (base32
-                "0wygq89nyjrjnsq7vbpidqdsirjm6iq4w2rijzwpk2f83ys8bc3y"))))
+                "0ilf63wxn1yzis9m3qs8mxbk316yxdzwxrrv86wpiygm9hhgk5sq"))))
     (native-inputs (list pkg-config))
     (inputs (list libspectre zathura))
     (build-system meson-build-system)
@@ -498,7 +497,7 @@ using libarchive.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-plugin-directory
-           ;; Something of a regression in 0.2.6: the new Meson build system
+           ;; Something of a regression in 0.2.7: the new Meson build system
            ;; now hard-codes an incorrect plugin directory.  Fix it.
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "meson.build"
@@ -550,7 +549,7 @@ using the DjVuLibre library.")
 (define-public zathura-pdf-mupdf
   (package
     (name "zathura-pdf-mupdf")
-    (version "0.3.9")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
               (uri
@@ -558,7 +557,7 @@ using the DjVuLibre library.")
                               "/download/zathura-pdf-mupdf-" version ".tar.xz"))
               (sha256
                (base32
-                "01vw0lrcj9g7d5h2xvm4xb08mvfld4syfr381fjrbdj52zm9bxvp"))))
+                "0pcjxvlh4hls8mjhjghhhihyy2kza8l27wdx0yq4bkd1g1b5f74c"))))
     (native-inputs (list pkg-config))
     (inputs
      (list gumbo-parser
@@ -600,7 +599,7 @@ by using the @code{mupdf} rendering library.")
 (define-public zathura-pdf-poppler
   (package
     (name "zathura-pdf-poppler")
-    (version "0.3.0")
+    (version "0.3.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -608,7 +607,7 @@ by using the @code{mupdf} rendering library.")
                               version ".tar.xz"))
               (sha256
                (base32
-                "1vfl4vkyy3rf39r1sqaa7y8113bgkh2bkfq3nn2inis9mrykmk6m"))))
+                "12qhkshpp1wjfpjmjccsyi6wscqyqvaa19j85prjpyf65i9jg0gf"))))
     (native-inputs (list pkg-config))
     (inputs
      (list poppler zathura))
@@ -635,7 +634,7 @@ by using the poppler rendering engine.")
 (define-public zathura
   (package
     (name "zathura")
-    (version "0.5.1")
+    (version "0.5.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -643,7 +642,7 @@ by using the poppler rendering engine.")
                               version ".tar.xz"))
               (sha256
                (base32
-                "1c8vmfpghqlq5kdnq92bzzp2grym3x3kxxxqgs51178s4z7639lq"))))
+                "15314m9chmh5jkrd9vk2h2gwcwkcffv2kjcxkd4v3wmckz5sfjy6"))))
     (native-inputs
      (list pkg-config
            gettext-minimal
@@ -724,7 +723,7 @@ interaction.")
                ;; Look for freetype include files in the correct place.
                (substitute* "cmake/modules/FindFREETYPE.cmake"
                  (("/usr/local") freetype))))))))
-    (home-page "http://podofo.sourceforge.net")
+    (home-page "https://podofo.sourceforge.net")
     (synopsis "Tools to work with the PDF file format")
     (description
      "PoDoFo is a C++ library and set of command-line tools to work with the
@@ -762,15 +761,14 @@ and based on PDF specification 1.7.")
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.20.3")
+    (version "1.21.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://mupdf.com/downloads/archive/"
                            "mupdf-" version "-source.tar.lz"))
        (sha256
-        (base32
-         "0s0qclxxdjis04mczgz0fhfpv0j8llk48g82zlfrk0daz0zgcwvg"))
+        (base32 "0876sn5nd8vyw9d3d3bmripm119jy6734rs0ywppqzvccy839936"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
@@ -818,14 +816,13 @@ and based on PDF specification 1.7.")
               "USE_SYSTEM_JPEGXR=no # not available"
               "USE_SYSTEM_LCMS2=no # lcms2mt is strongly preferred"
               "USE_SYSTEM_LIBJPEG=yes"
-              "USE_SYSTEM_MUJS=no # not available"
+              "USE_SYSTEM_MUJS=yes"
               "USE_SYSTEM_OPENJPEG=yes"
               "USE_SYSTEM_ZLIB=yes"
               "USE_SYSTEM_GLUT=no"
               "USE_SYSTEM_CURL=yes"
               "USE_SYSTEM_LEPTONICA=yes"
               "USE_SYSTEM_TESSERACT=yes"
-              "USE_SYSTEM_MUJS=yes"
               "shared=yes"
               (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
               (string-append "prefix=" #$output))
@@ -878,21 +875,20 @@ program capable of converting PDF into other formats.")
     ;; Prior to the 7.0 release, QPDF was licensed under Artistic 2.0.
     ;; Users can still choose to use the old license at their option.
     (license (list license:asl2.0 license:clarified-artistic))
-    (home-page "http://qpdf.sourceforge.net/")))
+    (home-page "https://qpdf.sourceforge.net/")))
 
 (define-public qpdfview
   (package
     (name "qpdfview")
-    (version "0.4.18")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://launchpad.net/qpdfview/"
                            "trunk/" version "/+download/"
-                           "qpdfview-" version ".tar.gz"))
+                           "qpdfview-" (version-major+minor version) ".tar.gz"))
        (sha256
-        (base32 "0v1rl126hvblajnph2hkansgi0s8vjdc5yxrm4y3faa0lxzjwr6c"))
-       (patches (search-patches "qpdfview-qt515-compat.patch"))))
+        (base32 "16dy341927r2s1dza7g8ci1jyypfc4a6yfcvg9sxvjv1li0c9vs4"))))
     (build-system qt-build-system)
     (native-inputs
      (list pkg-config))
@@ -904,14 +900,14 @@ program capable of converting PDF into other formats.")
            qtbase-5
            qtsvg-5))
     (arguments
-     `(#:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "qpdfview.pri"
-               (("/usr") (assoc-ref outputs "out")))
-             (invoke "qmake" "qpdfview.pro"))))))
+     (list #:tests? #f ; no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'configure
+                 (lambda _
+                   (substitute* "qpdfview.pri"
+                     (("/usr") #$output))
+                   (invoke "qmake" "qpdfview.pro"))))))
     (home-page "https://launchpad.net/qpdfview")
     (synopsis "Tabbed document viewer")
     (description "@command{qpdfview} is a document viewer for PDF, PS and DJVU
@@ -937,7 +933,7 @@ SyncTeX support, and rudimentary support for annotations and forms.")
      (list gtk+-2 pango poppler glib libgnomecanvas))
     (native-inputs
      (list pkg-config))
-    (home-page "http://xournal.sourceforge.net/")
+    (home-page "https://xournal.sourceforge.net/")
     (synopsis "Notetaking using a stylus")
     (description
      "Xournal is an application for notetaking, sketching, keeping a journal
@@ -1116,7 +1112,7 @@ vector formats.")
                 (install-file "impressive.1" man1)))))))
     ;; TODO: Add dependency on pdftk.
     (inputs (list python-pygame python-pillow sdl xpdf))
-    (home-page "http://impressive.sourceforge.net")
+    (home-page "https://impressive.sourceforge.net")
     (synopsis "PDF presentation tool with visual effects")
     (description
      "Impressive is a tool to display PDF files that provides visual effects
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 6999946fe9..5ba7fe9e20 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -35,6 +35,7 @@
 ;;; Copyright © 2022 Evgeny Pisemsky <evgeny@pisemsky.com>
 ;;; Copyright © 2022 gemmaro <gemmaro.dev@gmail.com>
 ;;; Copyright © 2023 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
+;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -4142,17 +4143,15 @@ the programmer to be mindfulof the space of platform variations.")
 (define-public perl-encode
   (package
     (name "perl-encode")
-    (version "3.10")
+    (version "3.19")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/D/DA/DANKOGAI/"
                            "Encode-" version ".tar.gz"))
        (sha256
-        (base32 "1a8rwcrxxhq81jcdvdwns05c65jwr5r6bxvby6vdcr3ny5m91my2"))))
+        (base32 "1x9f0naqskv9v7dif480vrzfmn8zhvq9g0w3r164v7pnxr4ghqwi"))))
     (build-system perl-build-system)
-    (propagated-inputs
-     (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
@@ -6562,7 +6561,7 @@ both positive and negative, in various ways.")
                (base32
                 "03bdcl9pn2bc9b50c50nhnr7m9wafylnb3v21zlch98h9c78x6j0"))))
     (build-system perl-build-system)
-    (home-page "http://search.cpan.org/dist/Math-VecStat")
+    (home-page "https://search.cpan.org/dist/Math-VecStat")
     (synopsis "Basic numeric stats on vectors")
     (description "This package provides some basic statistics on numerical
 vectors.  All the subroutines can take a reference to the vector to be
@@ -10916,7 +10915,7 @@ as exceptions to standard program flow.")
                (base32
                 "0w1k5ffcrpx0fm9jgprrwy0290k6cmy7dyk83s61063migi3r5z9"))))
     (build-system perl-build-system)
-    (home-page "http://perltidy.sourceforge.net/")
+    (home-page "https://perltidy.sourceforge.net/")
     (synopsis "Perl script tidier")
     (description "This package contains a Perl script which indents and
 reformats Perl scripts to make them easier to read.   The formatting can be
@@ -12377,6 +12376,27 @@ regexp patterns in modules.")
 structures.")
     (license license:perl-license)))
 
+(define-public perl-growl-gntp
+  (package
+    (name "perl-growl-gntp")
+    (version "0.21")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/M/MA/MATTN/Growl-GNTP-" version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "0gq8ypam6ifp8f3s2mf5d6sw53m7h3ki1zfahh2p41kl8a77yy98"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build-tiny))
+    (propagated-inputs (list perl-crypt-cbc perl-data-uuid))
+    (home-page "https://metacpan.org/release/Growl-GNTP")
+    (synopsis "Perl implementation of the GNTP Protocol (client part)")
+    (description "Growl::GNTP is a Perl implementation of the client part
+of the  Growl Notification Transport Protocol (GNTP).")
+    (license license:perl-license)))
+
 (define-public perl-socket-msghdr
   (package
     (name "perl-socket-msghdr")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index d658b3d3e7..358247f32e 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -351,7 +351,7 @@ and a wide variety of other metadata.")
      (list perl))                       ; for pod2man
     (inputs
      (list libjpeg-turbo libpng libtiff zlib))
-    (home-page "http://panotools.sourceforge.net/")
+    (home-page "https://panotools.sourceforge.net/")
     (synopsis "Library for panoramic images")
     (description
      "The libpano13 package contains the backend library written by the
@@ -406,7 +406,7 @@ overlapping images, as well as some command line tools.")
                      ;; Fix error: ‘numeric_limits’ is not a member of ‘std’.
                      (("#include <vector>" line)
                       (string-append line "\n#include <limits>"))))))))
-    (home-page "http://enblend.sourceforge.net/")
+    (home-page "https://enblend.sourceforge.net/")
     (synopsis "Tools for combining and blending images")
     (description
      "Enblend blends away the seams in a panoramic image mosaic using a
@@ -746,7 +746,7 @@ off' shooting directly from the controlling computer.")
                 (string-append "wxT(\"" (which "enblend") "\")"))
                (("wxT\\(\"enfuse\"\\)")
                 (string-append "wxT(\"" (which "enfuse") "\")"))))))))
-    (home-page "http://hugin.sourceforge.net/")
+    (home-page "https://hugin.sourceforge.net/")
     (synopsis "Panorama photo stitcher")
     (description
      "Hugin is an easy to use panoramic imaging toolchain with a graphical
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index 645a8edee1..c2539ef7fc 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -61,17 +61,17 @@
 (define-public php
   (package
     (name "php")
-    (version "7.4.30")
-    (home-page "https://secure.php.net/")
+    (version "8.2.2")
+    (home-page "https://www.php.net/")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "distributions/"
                                   "php-" version ".tar.xz"))
               (sha256
                (base32
-                "03d7icwys4ikl45q3rgsxv1m3i7kfxhykpx75nn7jzn6697s6wpa"))
-              (patches (search-patches "php-bug-74093-test.patch"
-                                       "php-curl-compat.patch"))
+                "0czflx9ikxymjfgnzaifjx9kc30ww2x4063075hcifjjwqwami5x"))
+              (patches
+               (search-patches "php-fix-streams-copy-length.patch"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "ext"
@@ -83,8 +83,7 @@
                             ;;"bcmath/libbcmath"
                             ;;"fileinfo/libmagic" ; a patched version of libmagic
                             '("gd/libgd"
-                              "pcre/pcre2lib"
-                              "xmlrpc/libxmlrpc"))))))
+                              "pcre/pcre2lib"))))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -176,12 +175,13 @@
              (substitute* "ext/standard/tests/streams/bug60602.phpt"
                (("'ls'") (string-append "'" (which "ls") "'")))
 
-             ,@(if (string-prefix? "arm" (or (%current-system)
-                                             (%current-target-system)))
+             ,@(if (target-arm32?)
                    ;; Drop tests known to fail on armhf.
                    '((for-each delete-file
-                              (list
+                               (list
                                 "ext/calendar/tests/unixtojd_error1.phpt"
+                                "ext/opcache/tests/preload_006.phpt"
+                                "ext/opcache/tests/preload_011.phpt"
                                 ;; arm can be a lot slower, so a time-related test fails
                                 "ext/fileinfo/tests/cve-2014-3538-nojit.phpt"
                                 "ext/pcntl/tests/pcntl_unshare_01.phpt"
@@ -199,6 +199,13 @@
                                 "Zend/tests/concat_003.phpt")))
                    '())
 
+             ,@(if (target-x86-32?)
+                   ;; Drop tests known to fail on i686.
+                   '((for-each delete-file
+                               (list
+                                "ext/dba/tests/dba_gdbm.phpt")))
+                   '())
+
              ,@(if (target-ppc64le?)
                    ;; Drop tests known to fail on powerpc64le.
                    '((for-each delete-file
@@ -213,6 +220,12 @@
                                 "sapi/phpdbg/tests/watch_006.phpt")))
                    '())
 
+             ,@(if (target-riscv64?)
+                   ;; Drop tests known to fail on riscv64.
+                   '((for-each delete-file
+                               (list "sapi/cli/tests/upload_2G.phpt")))
+                   '())
+
              ;; Drop tests that are known to fail.
              (for-each delete-file
                        '("ext/posix/tests/posix_getgrgid.phpt"    ; Requires /etc/group.
@@ -272,8 +285,6 @@
                          ;; Some WebP related tests fail.
                          "ext/gd/tests/webp_basic.phpt"
                          "ext/gd/tests/imagecreatefromstring_webp.phpt"
-                         ;; Expected error message, but from the wrong function
-                         "ext/gd/tests/bug77269.phpt"
                          ;; TODO: Enable these when libgd is built with xpm support.
                          "ext/gd/tests/xpm2gd.phpt"
                          "ext/gd/tests/xpm2jpg.phpt"
@@ -291,6 +302,14 @@
                          ;; The following test fails with "The image size
                          ;; differs: expected 114x115, got 117x117".
                          "ext/gd/tests/bug79068.phpt"
+                         ;; AVIF support disabled
+                         "ext/gd/tests/avif_decode_encode.phpt"
+                         ;; Typo in expected outputs
+                         "ext/gd/tests/bug72339.phpt"
+                         "ext/gd/tests/bug77272.phpt"
+                         "ext/gd/tests/bug66356.phpt"
+                         ;; AVIF support disabled
+                         "ext/gd/tests/imagecreatefromstring_avif.phpt"
 
                          ;; XXX: These iconv tests have the expected outcome,
                          ;; but with different error messages.
@@ -310,6 +329,17 @@
                          ;; XXX: These test failures appear legitimate, needs investigation.
                          ;; open_basedir() restriction failure.
                          "ext/curl/tests/bug61948-unix.phpt"
+                         ;; Same error reason but error code slightly different
+                         "ext/curl/tests/curl_setopt_ssl.phpt"
+
+                         ;; Fail because there is no "root" in the build container's
+                         ;; /etc/passwd
+                         "sapi/fpm/tests/bug68591-conf-test-group.phpt"
+                         "sapi/fpm/tests/bug68591-conf-test-listen-group.phpt"
+                         "sapi/fpm/tests/bug68591-conf-test-listen-owner.phpt"
+
+                         ;; Wrong error name
+                         "ext/dba/tests/dba_gdbm_creation_matrix.phpt"
                          ;; Expects a false boolean, gets empty array from glob().
                          "ext/standard/tests/file/bug41655_1.phpt"
                          "ext/standard/tests/file/glob_variation5.phpt"
@@ -395,7 +425,7 @@
        ("procps" ,procps)))             ; for tests
     (synopsis "PHP programming language")
     (description
-      "PHP (PHP Hypertext Processor) is a server-side (CGI) scripting
+     "PHP (PHP Hypertext Processor) is a server-side (CGI) scripting
 language designed primarily for web development but is also used as
 a general-purpose programming language.  PHP code may be embedded into
 HTML code, or it can be used in combination with various web template
diff --git a/gnu/packages/plan9.scm b/gnu/packages/plan9.scm
index 73694c4ed3..318344f2ec 100644
--- a/gnu/packages/plan9.scm
+++ b/gnu/packages/plan9.scm
@@ -57,7 +57,7 @@
       (inputs
        (list libx11 libxt))
       (synopsis "Connect to Plan 9 systems")
-      (home-page "http://drawterm.9front.org")
+      (home-page "https://drawterm.9front.org")
       (description
        "@command{drawterm} is a client for connecting venerable systems to
 Plan 9 systems.  It behaves like a Plan 9 kernel and will attempt to
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index a791000149..c1e579eb58 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -194,7 +194,7 @@ went to university in the 1990s, this is the library for you.")
        (list autoconf automake texinfo pkg-config))
       (inputs (list guile-3.0))
       (propagated-inputs (list guile-cairo))
-      (home-page "http://wingolog.org/projects/guile-charting/")
+      (home-page "https://wingolog.org/projects/guile-charting/")
       (synopsis "Create charts and graphs in Guile")
       (description
        "Guile-Charting is a Guile Scheme library to create bar charts and graphs
@@ -259,7 +259,7 @@ using the Cairo drawing library.")
                           `("PLOTICUS_PREFABS" ":" = (,dir)))))))))
     (inputs
      (list libpng libx11 zlib))
-    (home-page "http://ploticus.sourceforge.net/")
+    (home-page "https://ploticus.sourceforge.net/")
     (synopsis "Command-line tool for producing plots and charts")
     (description
      "Ploticus is a non-interactive software package for producing plots,
@@ -272,14 +272,14 @@ colors, styles, options and details.")
 (define-public asymptote
   (package
     (name "asymptote")
-    (version "2.84")
+    (version "2.85")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asymptote/"
                            version "/asymptote-" version ".src.tgz"))
        (sha256
-        (base32 "1nycdmlhs3r1qj5miww19683qqjf4hihsjwzwjj1q4mq0hnp0rb7"))
+        (base32 "11zcfnc80sbh10w53j4rwnmz0g5xj78b8i7hzfslgya15jv5j1ac"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled RapidJSON.
diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm
index 16ff2c3448..4e3baee408 100644
--- a/gnu/packages/popt.scm
+++ b/gnu/packages/popt.scm
@@ -42,7 +42,7 @@
               (base32
                "1gyxf4bh9jp5gb3l6g5qy90zzcf3vcpk0irgwbv1lc6mrskyhxwg"))))
     (build-system gnu-build-system)
-    (home-page "http://argtable.sourceforge.net/")
+    (home-page "https://argtable.sourceforge.net/")
     (synopsis "Command line option parsing library")
     (description
      "Argtable is an ANSI C library for parsing GNU style command line
@@ -78,7 +78,7 @@ line syntax.")
              (substitute* "tests/testit.sh"   ;don't expect old libtool names
                (("lt-test1") "test1"))
              #t)))))
-    (home-page "http://rpm5.org/files/popt/")
+    (home-page "https://rpm5.org/files/popt/")
     (synopsis "Command line option parsing library")
     (description
      "This is the popt(3) command line option parsing library.  While it is
diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm
index d4993060b2..8a1c609669 100644
--- a/gnu/packages/profiling.scm
+++ b/gnu/packages/profiling.scm
@@ -167,7 +167,7 @@ performance measurement opportunites across the hardware and software stack.")
                            (install-file "COPYING" doc)))
                        '("lib" "doc"))
              #t)))))
-    (home-page "http://www.vi-hps.org/projects/score-p/")
+    (home-page "https://www.vi-hps.org/projects/score-p/")
     (synopsis "Open Trace Format 2 library")
     (description "The Open Trace Format 2 (@dfn{OTF2}) is a scalable,
 memory-efficient event trace data format plus support library.")
@@ -379,7 +379,7 @@ different kinds of performance behavior.")
                                        "/share/doc/scorep")))
                (install-file "COPYING" doc)
                #t))))))
-    (home-page "http://www.vi-hps.org/projects/score-p/")
+    (home-page "https://www.vi-hps.org/projects/score-p/")
     (synopsis "Performance measurement infrastructure for parallel code")
     (description
      "The Score-P (Scalable Performance Measurement Infrastructure for
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index bb5ebeb920..c40b90b3db 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -254,7 +254,7 @@ rates.")
     (propagated-inputs
      ;; 'libpulse*.la' contain `-ltdb' and `-lcap', so propagate them.
      (list libcap tdb))
-    (home-page "http://www.pulseaudio.org/")
+    (home-page "https://www.pulseaudio.org/")
     (synopsis "Sound server")
     (description
      "PulseAudio is a sound server.  It is basically a proxy for your sound
diff --git a/gnu/packages/purescript.scm b/gnu/packages/purescript.scm
index 0fca9bd171..0a5eccc459 100644
--- a/gnu/packages/purescript.scm
+++ b/gnu/packages/purescript.scm
@@ -34,92 +34,82 @@
 (define-public purescript
   (package
     (name "purescript")
-    (version "0.14.5")
+    (version "0.15.7")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/purescript/purescript-"
-             version
-             ".tar.gz"))
+       (uri (hackage-uri "purescript" version))
        (sha256
-        (base32 "06f318hdah076vkviw1ryyg2p0gpbabsp8lbm5x03f2qv92n9j1n"))))
+        (base32 "1krjkgmxpfqf5a1jqs7qbg6r7ball1464zw6vgrdfzl9057c6l4f"))))
     (build-system haskell-build-system)
-    (inputs
-     (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
-     (list ghc-happy
-           ghc-hunit
-           ghc-hspec
-           hspec-discover
-           ghc-tasty
-           ghc-tasty-golden
-           ghc-tasty-hspec))
+    (properties '((upstream-name . "purescript")))
+    (inputs (list ghc-aeson
+                  ghc-aeson-better-errors
+                  ghc-ansi-terminal
+                  ghc-blaze-html
+                  ghc-bower-json
+                  ghc-boxes
+                  ghc-cborg
+                  ghc-serialise
+                  ghc-cheapskate
+                  ghc-clock
+                  ghc-cryptonite
+                  ghc-data-ordlist
+                  ghc-dlist
+                  ghc-edit-distance
+                  ghc-file-embed
+                  ghc-glob
+                  ghc-language-javascript
+                  ghc-lens
+                  ghc-lifted-async
+                  ghc-lifted-base
+                  ghc-memory
+                  ghc-monad-control
+                  ghc-monad-logger
+                  ghc-monoidal-containers
+                  ghc-parallel
+                  ghc-pattern-arrows
+                  ghc-protolude
+                  ghc-regex-tdfa
+                  ghc-safe
+                  ghc-scientific
+                  ghc-semigroups
+                  ghc-semialign
+                  ghc-sourcemap
+                  ghc-stringsearch
+                  ghc-these
+                  ghc-transformers-base
+                  ghc-utf8-string
+                  ghc-vector
+                  ghc-witherable
+                  ghc-ansi-wl-pprint
+                  ghc-network
+                  ghc-optparse-applicative
+                  ghc-gitrev))
+    (native-inputs (list ghc-generic-random
+                         ghc-hspec
+                         ghc-hunit
+                         ghc-newtype
+                         ghc-quickcheck
+                         ghc-regex-base
+                         ghc-split
+                         ghc-typed-process
+                         ghc-happy))
     (arguments
      `(;; Tests require npm
        #:tests? #f
        #:configure-flags '("--flags=release")
+       #:haddock? #f
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'update-constraints
            (lambda _
              (substitute* "purescript.cabal"
-               (("\\b(ansi-terminal|cryptonite|dlist|language-javascript)\\s+[^,]+" all dep)
-                dep)))))))
+               (("\\b(language-javascript|process)\\s+[^,]+" all dep)
+                dep))))
+         (add-after 'register 'remove-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib")))))))
     (home-page "https://www.purescript.org/")
     (synopsis "Haskell inspired programming language compiling to JavaScript")
     (description
@@ -127,41 +117,3 @@
 expressive types, inspired by Haskell and compiling to JavaScript.")
     (license license:bsd-3)))
 
-(define-public ghc-purescript-cst
-  (package
-    (name "ghc-purescript-cst")
-    (version "0.4.0.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "https://hackage.haskell.org/package/purescript-cst/purescript-cst-"
-               version
-               ".tar.gz"))
-        (sha256
-          (base32 "0r3f5lr9lrv9wpgkwj6nyl42lvxryj2lvr1w7ld4gki8ylq24n8g"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'update-constraints
-           (lambda _
-             (substitute* "purescript-cst.cabal"
-               (("\\b(dlist)\\s+[^,]+" all dep)
-                dep)))))))
-    (inputs
-      (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
-     "This package implements parser for the PureScript programming language.")
-    (license license:bsd-3)))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 577f783a6e..9332dc3d09 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
-;;; Copyright © 2021-2022 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021-2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
@@ -39,8 +39,8 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages docker)
   #:use-module (gnu packages django)
+  #:use-module (gnu packages docker)
   #:use-module (gnu packages openstack)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python-build)
@@ -50,13 +50,14 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
-  #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix packages)
+  #:use-module (guix build-system pyproject)
+  #:use-module (guix build-system python)
+  #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
-  #:use-module (guix download)
-  #:use-module (guix build-system python))
+  #:use-module (guix packages)
+  #:use-module (guix utils))
 
 (define-public python-tappy
   (package
@@ -1677,7 +1678,7 @@ libraries.")
              (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (propagated-inputs
-     (list python-pyqt-without-qtwebkit))
+     (list python-pyqt))
     (native-inputs
      (list python-pytest python-pytest-runner python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-qt")
@@ -1863,7 +1864,7 @@ supported by the MyPy typechecker.")
            python-virtualenv))
     (propagated-inputs
      (list python-mypy-extensions python-tomli python-typing-extensions))
-    (home-page "http://www.mypy-lang.org/")
+    (home-page "https://www.mypy-lang.org/")
     (synopsis "Static type checker for Python")
     (description "Mypy is an optional static type checker for Python that aims
 to combine the benefits of dynamic typing and static typing.  Mypy combines
@@ -2339,6 +2340,56 @@ Python objects.  It tries to use the objects available in the standard
 which make writing and running functional and integration tests easier.")
     (license license:asl2.0)))
 
+(define-public python-nox
+  (package
+    (name "python-nox")
+    (version "2022.11.21")
+    (source
+     (origin
+       ;; No tests in the PyPI tarball.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wntrblm/nox")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1xfd63h75wiiyri4f7qyvy50f2ny0v4r4wx2h4px9ddbkh2k5g9p"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               ;; NOTE: This manipulation looks not clear as upstream package
+               ;; contains "nox/tox_to_nox.jinja2" file which is not copied
+               ;; during install phase and causes check and sanity-check
+               ;; phases fail due to missing file. Try to find more simple
+               ;; solution.
+               (add-after 'unpack 'rename-tox-to-nox-jinja2
+                 (lambda _
+                   (rename-file "nox/tox_to_nox.jinja2" "nox/tox_to_nox.jinja2.py")))
+               (add-after 'install 'rename-tox-to-nox-jinja2-back
+                 (lambda _
+                   (let* ((src-file (car (find-files (string-append #$output "/lib")
+                                                     "tox_to_nox\\.jinja2\\.py$")))
+                          (dst-file (string-drop-right src-file 3)))
+                     (rename-file src-file dst-file)))))))
+    (propagated-inputs
+     (list python-argcomplete
+           python-colorlog
+           python-packaging
+           python-py
+           python-virtualenv))
+    (native-inputs
+     (list python-jinja2
+           python-pytest
+           python-tox))
+    (home-page "https://nox.thea.codes/")
+    (synopsis "Flexible test automation")
+    (description
+     "@code{nox} is a command-line tool that automates testing in multiple
+Python environments, similar to @code{tox}.  Unlike tox, Nox uses a standard
+Python file for configuration.")
+    (license license:asl2.0)))
+
 (define-public python-tox
   (package
     (name "python-tox")
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index e5358ec5b2..4088bd3398 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -37,7 +37,7 @@
 ;;; Copyright © 2020 Holger Peters <holger.peters@posteo.de>
 ;;; Copyright © 2020 Noisytoot <noisytoot@gmail.com>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
-;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020, 2022 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
@@ -1855,7 +1855,7 @@ for clients and servers.")
      (list unzip))               ; for unpacking the source
     (arguments
      `(#:tests? #f))                    ; tests require python-pbr < 1.7.0
-    (home-page "http://cthedot.de/cssutils/")
+    (home-page "https://cthedot.de/cssutils/")
     (synopsis
       "CSS Cascading Style Sheets library for Python")
     (description
@@ -2059,22 +2059,17 @@ RFC6455, regardless of your programming paradigm.")
 (define-public hypercorn
   (package
     (name "hypercorn")
-    (version "0.11.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "Hypercorn" version))
-       (sha256
-        (base32 "16kai5d12f05jr89mj611zslxqri4cd7ixcgd6yhl211qlcyg8av"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
-             (when tests?
-               (add-installed-pythonpath inputs outputs)
-               (invoke "python" "-m" "pytest")))))))
+    (version "0.14.3")
+    (source (origin
+              (method git-fetch) ;PyPI does not have tests
+              (uri (git-reference
+                    (url "https://github.com/pgjones/hypercorn")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hkph0sdr94hxmrq1grnh842snm561sw4az5q6a3ba9hqnrl890h"))))
+    (build-system pyproject-build-system)
     ;; Propagate because Hypercorn also exposes functionality over a module.
     (propagated-inputs
      (list python-h11
@@ -2086,6 +2081,7 @@ RFC6455, regardless of your programming paradigm.")
     (native-inputs
      (list python-hypothesis
            python-mock
+           python-poetry-core
            python-pytest
            python-pytest-asyncio
            python-pytest-cov
@@ -2096,8 +2092,8 @@ RFC6455, regardless of your programming paradigm.")
     (description
      "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
 wsproto libraries and inspired by Gunicorn.  It supports HTTP/1, HTTP/2,
-WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications.  It can
-utilise asyncio, uvloop, or trio worker types.")
+WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications.  It
+can utilise asyncio, uvloop, or trio worker types.")
     (license license:expat)))
 
 (define-public python-hypercorn
@@ -4603,23 +4599,23 @@ available in Django, but is a standalone package.")
 (define-public python-paste
   (package
     (name "python-paste")
-    (version "3.0.6")
+    (version "3.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Paste" version))
        (sha256
         (base32
-         "14lbi9asn5agsdf7r97prkjpz7amgmp529lbvfhf0nv881xczah6"))
+         "1xjakxrdvy4kgfy170gb9bl8zp9hqjjwh1h1vlik1pxw606399ym"))
        (patches (search-patches "python-paste-remove-timing-test.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; This test calls out to the internet.
            (delete-file "tests/test_proxy.py") #t))))
-    (build-system python-build-system)
+    (build-system pyproject-build-system)
     (native-inputs
-     (list python-pytest python-pytest-runner python-nose))
+     (list python-pytest python-nose))
     (propagated-inputs
      (list python-six))
     (home-page "https://pythonpaste.readthedocs.io/")
@@ -4832,14 +4828,14 @@ Google search engine.  Its module is called @code{googlesearch}.")
 (define-public whoogle-search
   (package
     (name "whoogle-search")
-    (version "0.8.0")
+    (version "0.8.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "whoogle-search" version))
               (sha256
                (base32
-                "0h8cl9bkd3vx17kbvcnmc8cy6pc29lxr0drxm84kj37ka788cj2g"))))
-    (build-system python-build-system)
+                "1kqkb23wb9a4a8zdky2066887vgv7ywhivhxi5nipkx07mf8v01k"))))
+    (build-system pyproject-build-system)
     (arguments
      (list
       ;; The tests need network access
@@ -6111,7 +6107,7 @@ displaying warnings when usaged in application code.")
                (base32
                 "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
     (build-system python-build-system)
-    (home-page "http://docs.pylonsproject.org/projects/translationstring")
+    (home-page "https://docs.pylonsproject.org/projects/translationstring")
     (synopsis "Internationalization tooling for the Pylons project")
     (description "This package provides a library used by various Pylons
 project packages for internationalization (i18n) duties related to
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 8c5d069fd5..941a74cc75 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
-;;; Copyright © 2018-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018, 2019, 2021 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018, 2019, 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -80,7 +80,7 @@
 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
 ;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
 ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
@@ -94,7 +94,7 @@
 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
 ;;; Copyright © 2021, 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
-;;; Copyright © 2021, 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021-2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
@@ -257,7 +257,6 @@
   #:use-module (gnu packages serialization)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
   #:use-module (guix gexp)
@@ -266,7 +265,6 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26))
 
@@ -291,24 +289,17 @@ similar XML files, in the same way the @command{diff} utility does it.")
 (define-public python-janus
   (package
     (name "python-janus")
-    (version "0.6.1")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "janus" version))
        (sha256
-        (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
-             (when tests?
-               (add-installed-pythonpath inputs outputs)
-               (invoke "pytest" "--cov=janus" "--cov=tests")))))))
+        (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
+    (build-system pyproject-build-system)
     (native-inputs
      (list python-pytest python-pytest-cov python-pytest-asyncio))
+    (propagated-inputs (list python-typing-extensions))
     (home-page "https://github.com/aio-libs/janus/")
     (synopsis
      "Sync-async queue to interoperate between asyncio tasks and classic threads")
@@ -328,7 +319,7 @@ design}.")
 (define-public python-jupytext
   (package
     (name "python-jupytext")
-    (version "1.14.1")
+    (version "1.14.4")
     (source
      (origin
        (method git-fetch)
@@ -337,7 +328,7 @@ design}.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0gqpvphrp2ja9ggadx0rrk0sqbpz6kqqg62qqmw4k17469lphc8c"))))
+        (base32 "19d443vx597zzxna09qpync9iic3mris80bwm3kd8xaxaq0zq9w4"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -2095,13 +2086,13 @@ conventions and aliases in the same expression.")
 (define-public python-wand
   (package
     (name "python-wand")
-    (version "0.6.10")
+    (version "0.6.11")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Wand" version))
        (sha256
-        (base32 "0mywzs235skwq670c80achrd34kangwy24793k1nij3651zllgrp"))))
+        (base32 "15d9kxyc7qvknx0kv27m2jamnmisckyf89i7wlqykwgqm46p0qdn"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2109,7 +2100,11 @@ conventions and aliases in the same expression.")
          (add-after 'unpack 'find-magickwand
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
-             (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
+             (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16")))
+         (replace 'check
+           (lambda _
+             (when tests?
+               (invoke "pytest" "-vv")))))))
     (native-inputs
      (list python-pytest))
     (inputs
@@ -2535,7 +2530,7 @@ a library.")
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                   ;test suite not included in the release
-    (home-page "http://www.grantjenks.com/docs/diskcache/")
+    (home-page "https://www.grantjenks.com/docs/diskcache/")
     (synopsis "Disk and file backed cache library")
     (description "DiskCache is a disk and file backed persistent cache.")
     (license license:asl2.0)))
@@ -3190,7 +3185,7 @@ other Python program.")
                (base32
                 "1f0jjqvamly4hn7f1palvq27z6yr694rfzyxrb6g0ysbbawxkvq9"))))
     (build-system python-build-system)
-    (home-page "http://agateau.com/projects/doxyqml")
+    (home-page "https://agateau.com/projects/doxyqml")
     (synopsis "Doxygen input filter for QML files")
     (description
      "This package provides a Doxygen input filter for QML files.")
@@ -4300,6 +4295,40 @@ modules.  It creates a special virtual environment such that @command{pip} or
 work on your part.")
     (license license:expat)))
 
+(define-public python-virtualenv-clone
+  (package
+    (name "python-virtualenv-clone")
+    (version "0.5.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/edwardgeorge/virtualenv-clone")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0p0d1y3axvjfnxlgwjx2374gikc8bmc82g0m7yashihbikh7pcxa"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (delete-file "tox.ini")
+                              (invoke "pytest" "-vvv" "tests")))))))
+    (native-inputs (list python-pytest
+                         python-tox
+                         python-virtualenv
+                         python-coverage
+                         python-wheel
+                         python-tomli
+                         python-hypothesis))
+    (home-page "https://github.com/edwardgeorge/virtualenv-clone")
+    (synopsis "Clone a non-relocatable virtualenv cleanly")
+    (description
+     "Clone non-relocatable virtualenvs without breaking site-packages.")
+    (license license:expat)))
+
 (define-public python-uc-micro-py
   (package
     (name "python-uc-micro-py")
@@ -4851,7 +4880,7 @@ leaf preserving the overall structure.")
                           (invoke "python" "test/alltests.py")
                           (format #t "test suite not run~%"))
                       #t)))))
-    (home-page "http://docutils.sourceforge.net/")
+    (home-page "https://docutils.sourceforge.net/")
     (synopsis "Python Documentation Utilities")
     (description
      "Docutils is a modular system for processing documentation into useful
@@ -6481,24 +6510,16 @@ readable format.")
 (define-public python-pygit2
   (package
     (name "python-pygit2")
-    (version "1.9.2")
+    (version "1.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pygit2" version))
        (sha256
-        (base32 "068bwhirigbh2435abyv4shdxgxvyfqf4dxfmhd4hihivwrl9290"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda* (#:key tests? #:allow-other-keys)
-                      (when tests?
-                        (invoke "pytest" "-v")))))))
-    (propagated-inputs
-     (list python-cached-property python-cffi libgit2))
-    (native-inputs
-     (list python-pytest))
+        (base32 "1v34xdvh6i5cn5srwicvp0i2kvv8fzsv0v9p72ng081nsczmhgvr"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-cffi libgit2))
+    (native-inputs (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 library.")
@@ -7707,6 +7728,26 @@ a general image processing tool.")
     (description "This package is a fork of Pillow which adds support for SIMD
 parallelism.")))
 
+(define-public python-pixelmatch
+  (package
+    (name "python-pixelmatch")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pixelmatch" version))
+       (sha256
+        (base32 "16b0cz136dcmj4dbr505igpql8dmqmr9vni5nbaa5kygjfjkdynh"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pillow))
+    (home-page "https://github.com/whtsky/pixelmatch-py")
+    (synopsis "A pixel-level image comparison library")
+    (description "This package provides a pixel-level image comparison library
+for Python, originally created to compare screenshots in tests.  Its features
+include accurate anti-aliased pixels detection and perceptual color difference
+metrics.")
+    (license license:isc)))
+
 (define-public python-imagecodecs
   (package
     (name "python-imagecodecs")
@@ -8619,7 +8660,7 @@ wraps Python's standard library threading and multiprocessing objects.")
        ("bash-full" ,bash)))                 ;full Bash for 'test_replwrap.py'
     (propagated-inputs
      (list python-ptyprocess))
-    (home-page "http://pexpect.readthedocs.org/")
+    (home-page "https://pexpect.readthedocs.org/")
     (synopsis "Controlling interactive console applications")
     (description
      "Pexpect is a pure Python module for spawning child applications;
@@ -8681,7 +8722,7 @@ older Python versions.")
                 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
     (build-system python-build-system)
     (native-inputs (list python-setuptools-scm python-toml))
-    (home-page "http://importlib-resources.readthedocs.io/")
+    (home-page "https://importlib-resources.readthedocs.io/")
     (synopsis "Read resources from Python packages")
     (description
      "@code{importlib_resources} is a backport of Python 3's standard library
@@ -8970,7 +9011,7 @@ releases.")
     (build-system python-build-system)
     (native-inputs
      (list unzip))
-    (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
+    (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
     (synopsis "Python module for simple generic functions")
     (description
      "The simplegeneric module lets you define simple single-dispatch generic
@@ -9703,7 +9744,7 @@ computing.")
               ;; 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")
+    (home-page "https://urwid.org")
     (synopsis "Console user interface library for Python")
     (description
      "Urwid is a curses-based UI/widget library for Python.  It includes many
@@ -12391,7 +12432,7 @@ native modules.")
     (build-system python-build-system)
     (native-inputs
      (list python-pytest))
-    (home-page "http://www.python-excel.org/")
+    (home-page "https://www.python-excel.org/")
     (synopsis "Library for extracting data from Excel files")
     (description "This package provides a library to extract data from
 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
@@ -12423,7 +12464,7 @@ Unicode-aware.  It is not intended as an end-user tool.")
                (invoke "nosetests" "-v")))))))
     (native-inputs
      `(("nose" ,python-nose)))
-    (home-page "http://www.python-excel.org/")
+    (home-page "https://www.python-excel.org/")
     (synopsis "Library for creating spreadsheet Excel files")
     (description "@code{xlwt} is a library for writing data and formatting
 information to older Excel files (i.e. .xls).  The package itself is pure
@@ -12888,7 +12929,7 @@ primary use case is APIs defined before keyword-only parameters existed.")
         (base32
          "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
     (build-system python-build-system)
-    (home-page "http://pyasn1.sourceforge.net/")
+    (home-page "https://pyasn1.sourceforge.net/")
     (synopsis "ASN.1 types and codecs")
     (description
      "This is an implementation of ASN.1 types and codecs in Python.  It is
@@ -14216,7 +14257,7 @@ Jupyter kernels such as IJulia and IRKernel.")
                (("def test_other_output") "def _test_other_output")))))))
     (propagated-inputs
      (list python-ipykernel python-ipython-genutils python-jupyter-client
-           python-jupyter-core python-pygments python-pyqt-without-qtwebkit
+           python-jupyter-core python-pygments python-pyqt
            python-pyzmq python-qtpy python-traitlets))
     (native-inputs
      (list python-flaky python-pytest python-pytest-qt))
@@ -14487,7 +14528,7 @@ tasks.  It includes single-command deployment for the Django Girls tutorial.")
                         #t))))
        #:tests? #f))
     (propagated-inputs (list dialog))
-    (home-page "http://pythondialog.sourceforge.net/")
+    (home-page "https://pythondialog.sourceforge.net/")
     (synopsis "Python interface to the UNIX dialog utility")
     (description
      "A Python wrapper for the dialog utility.  Its purpose is to
@@ -16164,48 +16205,31 @@ ISO 8859, etc.).")
 (define-public python-pyqtgraph
   (package
     (name "python-pyqtgraph")
-    (version "0.12.1")
+    (version "0.13.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyqtgraph" version))
        (sha256
-        (base32 "0kc7ncv0lr3spni29i9g8nszyr4xinswqi2zzs6v8kqqi593pvyj"))))
-    (build-system python-build-system)
+        (base32 "026wq2p7h1dmg2ldwhxiv28i5qld0llhnak06dxp4rdrkpsqg3v9"))))
+    (build-system pyproject-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-home-and-qpa
-           (lambda _
-             (setenv "HOME" "/tmp")
-             (setenv "QT_QPA_PLATFORM" "offscreen")
-             #t))
-         (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv" "-k"
-                     (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))
+     ;; This test fails.  It suggests to disable assert rewriting in Pytest,
+     ;; but it still doesn't pass.
+     (list #:test-flags #~'("-k" "not test_reload")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'check 'set-qpa
+                 (lambda _
+                   (setenv "QT_QPA_PLATFORM" "offscreen"))))))
+    (native-inputs
+     (list python-pytest-7.1 python-pytest-cov python-pytest-xdist))
     (inputs
      (list qtbase-5))
     (propagated-inputs
      (list python-h5py python-numpy python-pyopengl python-scipy
-           python-pyqt-without-qtwebkit))
-    (home-page "http://www.pyqtgraph.org")
+           python-pyqt))
+    (home-page "https://www.pyqtgraph.org")
     (synopsis "Scientific graphics and GUI library for Python")
     (description
      "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
@@ -16992,7 +17016,7 @@ multiple processes (imagine multiprocessing, billiard, futures, celery etc).
                           (("logging\\.DEBUG")
                            "logging.INFO"))
                         (invoke "python" "-m" "unittest" "t/test.py")))))))
-    (home-page "http://tftpy.sourceforge.net/")
+    (home-page "https://tftpy.sourceforge.net/")
     (synopsis "Python trivial file transfer protocol (TFTP) library")
     (description "TFTPy is a trivial file transfer protocol (TFTP) Python
 library.  It can be used to act both as a TFTP client or TFTP server.")
@@ -18697,7 +18721,7 @@ without requiring an event loop, useful for creative responsive GUIs.")
 (define-public binwalk
   (package
     (name "binwalk")
-    (version "2.3.3")
+    (version "2.3.4")
     (source
      (origin
        (method git-fetch)
@@ -18706,7 +18730,7 @@ without requiring an event loop, useful for creative responsive GUIs.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0phqyqv34vhh80dgipiggs4n3iq2vfjk9ywx2c5d8g61vzgbd2g8"))
+        (base32 "0cfm1khckq986l0q68kmfyfagc6zmb94hgjjm847fjcil77dnlw6"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
@@ -19080,7 +19104,7 @@ numbers, real numbers, mixed types and more, and comes with a shell command
                (search-patches "python-random2-getrandbits-test.patch"))))
     (build-system python-build-system)
     (native-inputs (list unzip))
-    (home-page "http://pypi.python.org/pypi/random2")
+    (home-page "https://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
@@ -20304,16 +20328,23 @@ point is the point of maximum curvature.")
 (define-public python-diff-match-patch
   (package
     (name "python-diff-match-patch")
-    (version "20121119")
+    (version "20200713")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "diff-match-patch" version))
         (sha256
          (base32
-          "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
+          "063s8zcxz787xfg7d1wxpqh59fxg3iz85ww9zhyz4vaqm80mlvys"))))
     (build-system python-build-system)
-    (home-page "https://code.google.com/p/google-diff-match-patch")
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "python" "-m" "unittest"
+                                "diff_match_patch.tests")))))))
+    (home-page "https://github.com/diff-match-patch-python/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.")
@@ -20817,7 +20848,7 @@ while only declaring the test-specific fields.")
     (build-system python-build-system)
     (native-inputs
      (list python-pytest))
-    (home-page "http://arcp.readthedocs.io/")
+    (home-page "https://arcp.readthedocs.io/")
     (synopsis
      "Archive and Package URI parser and generator")
     (description
@@ -21258,7 +21289,7 @@ functionality like full case-folding for case-insensitive matches in Unicode.")
                 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
                ;; Not providing libgle. It seems to be very old.
              #t)))))
-    (home-page "http://pyopengl.sourceforge.net")
+    (home-page "https://pyopengl.sourceforge.net")
     (synopsis "Standard OpenGL bindings for Python")
     (description
      "PyOpenGL is the most common cross platform Python binding to OpenGL and
@@ -23864,7 +23895,7 @@ that is accessible to other projects developed in Cython.")
     (propagated-inputs
      (list python-sortedcontainers))
     (arguments '(#:tests? #f))  ; Tests not included in release tarball.
-    (home-page "http://www.grantjenks.com/docs/sortedcollections/")
+    (home-page "https://www.grantjenks.com/docs/sortedcollections/")
     (synopsis "Python Sorted Collections")
     (description "Sorted Collections is a Python sorted collections library.")
     (license license:asl2.0)))
@@ -24400,19 +24431,33 @@ class in a @acronym{DRY, Don't Repeat Yourself} way.")
 (define-public python-construct
   (package
     (name "python-construct")
-    (version "2.10.56")
+    (version "2.10.68")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "construct" version))
+       ;; There are no tests in the PyPI tarball.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/construct/construct")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
+        (base32 "1b59kq8scxhn9afqgmksk45n53gawylqm8gw3k0vmljg274xi7vf"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; No tests exist.
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "pytest" "-v" "tests/")))))))
+    (native-inputs
+     (list python-pytest python-pytest-benchmark))
     (propagated-inputs
-     (list python-extras python-arrow python-numpy python-ruamel.yaml))
+     (list python-arrow
+           python-cloudpickle
+           python-lz4
+           python-numpy
+           python-ruamel.yaml))
     (home-page "https://construct.readthedocs.io")
     (synopsis "Declarative and symmetrical parser and builder for binary data")
     (description
@@ -25888,7 +25933,7 @@ also be usable with other GSSAPI mechanisms.")
              (invoke "git" "config" "--global"
                      "protocol.file.allow" "always"))))))
     (native-inputs
-     (list git-minimal/fixed python-pytest))
+     (list git-minimal/pinned python-pytest))
     (propagated-inputs
      (list python-pypa-build python-setuptools python-tomli))
     (home-page "https://github.com/mgedmin/check-manifest")
@@ -26979,7 +27024,7 @@ accessor layer.")
 (define-public pyzo
   (package
     (name "pyzo")
-    (version "4.12.4")
+    (version "4.12.7")
     (source
      (origin
        (method git-fetch)
@@ -26989,7 +27034,7 @@ accessor layer.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "10qqilbh7n4z2656qbr9gllvgi7xq11xcm2bv64h02jmkb7m4m6n"))))
+         "15c92l0g3fziyn6cmjrbr57bz70cz8w282yjb370r36x2bpykbii"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -28533,7 +28578,7 @@ and frame grabber interface.")
     (native-inputs
      (list cmake-minimal
            gfortran
-           git-minimal/fixed                      ;for tests
+           git-minimal/pinned                      ;for tests
            ninja
            python-coverage
            python-cython
@@ -30024,7 +30069,7 @@ PyRSS2Gen builds the feed up by using a XML generator.")
         (sha256
           (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
     (build-system python-build-system)
-    (home-page "http://yapsy.sourceforge.net")
+    (home-page "https://yapsy.sourceforge.net")
     (synopsis "Simple plugin system for Python applications")
     (description "Yapsy, or Yet Another Plugin SYstem, is a small library
 implementing the core mechanisms needed to build a plugin system into a wider
@@ -30677,7 +30722,7 @@ running and analyzing benchmarks.  It features a simple API that can:
               (when tests?
                 (invoke "pytest")))))))
     (native-inputs (list python-pytest))
-    (home-page "http://pydispatcher.sourceforge.net")
+    (home-page "https://pydispatcher.sourceforge.net")
     (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
     (description "PyDispatcher is an enhanced version of Patrick K. O’Brien’s
 original @code{dispatcher.py} module.  It provides the Python programmer with
@@ -30688,6 +30733,27 @@ provide the ability to selectively apply arguments to callable objects
 and to reference instance methods using weak-references.")
     (license license:bsd-3)))
 
+(define-public python-pyee
+  (package
+    (name "python-pyee")
+    (version "9.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyee" version))
+       (sha256
+        (base32 "0cjbxbqr9f8bn2h3ra69d550qj2r1hmsgrh5nx31ywmwia9c8w17"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-typing-extensions))
+    (native-inputs (list python-twisted python-trio))
+    (home-page "https://github.com/jfhbrook/pyee")
+    (synopsis "Emit events with Python")
+    (description
+     "This package provides a port of node.js's EventEmitter to python.
+Additionally, it includes a number of subclasses useful for implementing async
+and threaded programming in python, such as async/await.")
+    (license license:expat)))
+
 (define-public python-queuelib
   (package
     (name "python-queuelib")
@@ -30735,7 +30801,7 @@ fashion.")
                    (substitute* "prober.py"
                      (("cmd = .cc")
                       (string-append "cmd = \"" #$(cc-for-target)))))))))
-    (home-page "http://semanchuk.com/philip/posix_ipc/")
+    (home-page "https://semanchuk.com/philip/posix_ipc/")
     (synopsis "POSIX IPC primitives for Python")
     (description
      "This package provides POSIX IPC primitives - semaphores, shared memory and
@@ -31699,6 +31765,52 @@ shared objects, and lift them up to the executable referenced by absolute
 path.")
     (license license:expat)))
 
+(define-public staticsite
+  (package
+    (name "staticsite")
+    (version "2.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/spanezz/staticsite")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1rhr25xydvnlrrcz389j3f6nknmczm5x11cagrji1qww70piwy08"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'use-themes-in-output
+            (lambda _
+              (substitute* "staticsite/global_settings.py"
+                (("/usr/share/staticsite") #$output))))
+          (add-after 'install 'install-themes
+            (lambda _
+              (let ((themedir (string-append #$output "/themes")))
+                (copy-recursively "themes" themedir)))))))
+    (native-inputs
+     (list perl-image-exiftool
+           python-dateutil
+           python-docutils
+           python-jinja2
+           python-markdown
+           python-pillow
+           python-pyinotify
+           python-pytz
+           python-pyyaml
+           python-ruamel.yaml
+           python-slugify
+           python-tornado
+           tzdata-for-tests))
+    (home-page "https://github.com/spanezz/staticsite")
+    (synopsis "Static site generator")
+    (description "Statistic is a static site generator based on Markdown and
+Jinja2.")
+    (license (list license:gpl3+ license:expat))))
+
 (define-public python-pymonad
   (package
     (name "python-pymonad")
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 8ba4c76a3d..6abc5cdd88 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, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2021, 2023 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>
@@ -561,13 +561,13 @@ data types.")
      (modify-inputs (package-inputs python-2.7)
        (replace "openssl" openssl)))
     (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)))
+     (let ((inputs (modify-inputs (package-native-inputs python-2)
+                     (prepend tzdata-for-tests
+                              unzip
+                              (@ (gnu packages compression) zip)))))
+       (if (%current-target-system)
+           (modify-inputs inputs (prepend this-package))
+           inputs)))
     (native-search-paths
      (list (guix-pythonpath-search-path version)
            ;; Used to locate tzdata by the zoneinfo module introduced in
@@ -594,9 +594,7 @@ data types.")
     ;; is invoked upon 'make install'.  'pip' also expects 'ctypes' and thus
     ;; libffi.  Expat is needed for XML support which is expected by a lot
     ;; of libraries out there.
-    (inputs `(("expat" ,expat)
-              ("libffi" ,libffi)
-              ("zlib" ,zlib)))))
+    (inputs (list expat libffi zlib))))
 
 (define-public python-minimal
   (package/inherit python
@@ -607,10 +605,7 @@ data types.")
     ;; OpenSSL is a mandatory dependency of Python 3.x, for urllib;
     ;; zlib is required by 'zipimport', used by pip.  Expat is needed
     ;; for XML support, which is generally expected to be available.
-    (inputs `(("expat" ,expat)
-              ("libffi" ,libffi)
-              ("openssl" ,openssl)
-              ("zlib" ,zlib)))))
+    (inputs (list expat libffi openssl zlib))))
 
 (define-public python-debug
   (package/inherit python
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 3a80b36da0..e03f57cf69 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -27,6 +27,7 @@
 ;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
 ;;; Copyright © 2022 Yash Tiwari <yasht@mailbox.org>
+;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -682,7 +683,11 @@ developers using C++ or QML, a CSS & JavaScript like language.")
               (lambda* (#:key inputs #:allow-other-keys)
                 (substitute* (find-files "bin" "\\.in$")
                   (("/bin/pwd")
-                   (search-input-file inputs "bin/pwd")))
+                   (search-input-file inputs "bin/pwd"))
+                  ;; Do not keep a reference to cmake-minimal; it is looked
+                  ;; from PATH anyway.
+                  (("original_cmake_path=\"@CMAKE_COMMAND@\"")
+                   "original_cmake_path=\"\""))
                 (substitute* "src/gui/platform/unix/qgenericunixservices.cpp"
                   (("\"xdg-open\"")
                    (format #f "~s" (search-input-file inputs "bin/xdg-open"))))
@@ -693,6 +698,12 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                 (substitute* "src/corelib/CMakeLists.txt"
                   (("/bin/ls")
                    (search-input-file inputs "bin/ls")))))
+            (add-after 'patch-source-shebangs 'do-not-capture-python
+              (lambda _
+                (substitute* '("mkspecs/features/uikit/devices.py"
+                               "util/testrunner/qt-testrunner.py")
+                  (((which "python3"))
+                   "/usr/bin/env python3"))))
             (replace 'configure
               (assoc-ref %standard-phases 'configure))
             (replace 'build
@@ -1109,6 +1120,44 @@ support for MNG, TGA, TIFF and WBMP image formats.")))
     (description "The QtX11Extras module includes the library to access X11
 from within Qt 5.")))
 
+(define-public qxlsx
+  (package
+    (name "qxlsx")
+    (version "1.4.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/QtExcel/QXlsx")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1h95h96vz47cnfp62j7bx6ih725gbv005hm0cfqanfvqd5xd9qsg"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags
+      #~(list "../source/QXlsx"
+              "-DCMAKE_BUILD_TYPE=Release"
+              (string-append "-DCMAKE_INSTALL_PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (with-directory-excursion "../source/TestExcel"
+                  (invoke "qmake")
+                  (invoke "make" "-j" (number->string (parallel-job-count)))
+                  (invoke "./TestExcel"))))))))
+     (inputs
+      (list qtbase-5))
+     (home-page "https://qtexcel.github.io/QXlsx/")
+     (synopsis "C++ library to read/write Excel XLSX files using Qt")
+     (description
+      "QXlsx is a successor of QtXlsx and providies a functionality to work with Excel
+XLSX document format.")
+     (license license:expat)))
+
 (define-public qtxmlpatterns
   (package (inherit qtsvg-5)
     (name "qtxmlpatterns")
@@ -1279,6 +1328,13 @@ with JavaScript and C++.")))
                     ;; qrc). Import paths used:
                     ;; /gnu/store/...-qtbase-6.3.1/lib/qt6/qml"
                     "tst_qmltc_qprocess"
+                    ;; This test is non-deterministic; may fail under high
+                    ;; load (see:
+                    ;; https://bugreports.qt.io/browse/QTBUG-111008).
+                    "tst_qqmlprofilerservice"
+                    ;; This one also causes non-determinstic failures (see:
+                    ;; https://bugreports.qt.io/browse/QTBUG-101488).
+                    "tst_qquickfolderdialogimpl"
                     ;; These test fail when running qmlimportscanner; perhaps
                     ;; an extra CMAKE_PREFIX_PATH location is missing to
                     ;; correctly locate the imports.
@@ -2654,7 +2710,8 @@ using the Enchant spell-checking library.")
                   "src/buildtools/config/linux.pri"
                   (lambda (in out)
                     (display (get-string-all in) out)
-                    (display "\ngn_args += use_system_openh264=true\n" out)))
+                    (display "\ngn_args += use_system_openh264=true\n" out)
+                    (display "\ngn_args += link_pulseaudio = true\n" out)))
                  ;; Qtwebengine is not installed into the same prefix as
                  ;; qtbase.  Some qtbase QTLibraryInfo constants will not
                  ;; work.  Replace with the full path to the qtwebengine-5
@@ -3255,7 +3312,6 @@ module provides support functions to the automatically generated code.")
        ("qtsvg-5" ,qtsvg-5)
        ("qttools-5" ,qttools-5)
        ("qtwebchannel-5" ,qtwebchannel-5)
-       ("qtwebkit" ,qtwebkit)
        ("qtwebsockets-5" ,qtwebsockets-5)
        ("qtx11extras" ,qtx11extras)
        ("qtxmlpatterns" ,qtxmlpatterns)))
@@ -3352,7 +3408,7 @@ contain over 620 classes.")
     (inputs
      `(("python" ,python-wrapper)
        ("python-sip" ,python-sip)
-       ("python-pyqt" ,python-pyqt-without-qtwebkit)
+       ("python-pyqt" ,python-pyqt)
        ("qtbase" ,qtbase-5)
        ("qtsvg-5" ,qtsvg-5)
        ("qtdeclarative-5" ,qtdeclarative-5)
@@ -3410,17 +3466,6 @@ set of three modules.  Prior to v5.12 these bindings were part of PyQt
 itself.")
     (license license:gpl3)))
 
-;; XXX: This is useful for removing qtwebkit from other packages' dependency
-;; graphs, as well as for preventing python-pyqtwebengine from transitively
-;; depending on qtwebkit.
-;; Ultimately, it would be nicer to have a more modular set of python-pyqt-*
-;; packages that could be used together.
-(define-public python-pyqt-without-qtwebkit
-  (package/inherit python-pyqt
-    (name "python-pyqt-without-qtwebkit")
-    (inputs
-     (alist-delete "qtwebkit" (package-inputs python-pyqt)))))
-
 (define-public python-pyqt-builder
   (package
    (name "python-pyqt-builder")
@@ -3786,7 +3831,7 @@ that can be only started once per user.
              (for-each delete-file (find-files "doc/man/man3" "^_tmp.*"))
              (mkdir-p man)
              (copy-recursively "doc/man" man)))))))
-  (home-page "http://qwt.sourceforge.net")
+  (home-page "https://qwt.sourceforge.net")
   (synopsis "Qt widgets for plots, scales, dials and other technical software
 GUI components")
   (description
@@ -3800,89 +3845,6 @@ different kinds of sliders, and much more.")
     ;; textengines/mathml/qwt_mml_document.{cpp,h} is dual LGPL2.1/GPL3 (either).
     license:lgpl2.1 license:gpl3))))
 
-(define-public qtwebkit
-  (package
-    (name "qtwebkit")
-    (version "5.212.0-alpha4")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://github.com/annulen/webkit/releases/download/"
-                            "qtwebkit-" version "/qtwebkit-" version ".tar.xz"))
-        (sha256
-         (base32
-          "1rm9sjkabxna67dl7myx9d9vpdyfxfdhrk9w7b94srkkjbd2d8cw"))
-        (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
-     (list perl
-           python
-           ruby
-           bison
-           flex
-           gperf
-           pkg-config))
-    (inputs
-     `(("icu" ,icu4c)
-       ("glib" ,glib)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libwebp" ,libwebp)
-       ("sqlite" ,sqlite)
-       ("fontconfig" ,fontconfig)
-       ("libxrender" ,libxrender)
-       ("qtbase" ,qtbase-5)
-       ("qtdeclarative-5" ,qtdeclarative-5)
-       ("qtlocation" ,qtlocation)
-       ("qtmultimedia-5" ,qtmultimedia-5)
-       ("qtsensors" ,qtsensors)
-       ("qtwebchannel-5" ,qtwebchannel-5)
-       ("libxml2" ,libxml2)
-       ("libxslt" ,libxslt)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)))
-    (arguments
-     `(#:tests? #f ; no apparent tests; it might be necessary to set
-                   ; ENABLE_API_TESTS, see CMakeLists.txt
-
-       ;; Parallel builds fail due to a race condition:
-       ;; <https://bugs.gnu.org/34062>.
-       #:parallel-build? #f
-
-       #:configure-flags (list ;"-DENABLE_API_TESTS=TRUE"
-                               "-DPORT=Qt"
-                               "-DUSE_LIBHYPHEN=OFF"
-                               "-DUSE_SYSTEM_MALLOC=ON"
-                               ;; XXX: relative dir installs to build dir?
-                               (string-append "-DECM_MKSPECS_INSTALL_DIR="
-                                              %output "/lib/qt5/mkspecs/modules")
-                               ;; Sacrifice a little speed in order to link
-                               ;; libraries and test executables in a
-                               ;; reasonable amount of memory.
-                               "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,--no-keep-memory"
-                               "-DCMAKE_EXE_LINKER_FLAGS=-Wl,--no-keep-memory")))
-    (home-page "https://www.webkit.org")
-    (synopsis "Web browser engine and classes to render and interact with web
-content")
-    (description "QtWebKit provides a Web browser engine that makes it easy to
-embed content from the World Wide Web into your Qt application.  At the same
-time Web content can be enhanced with native controls.")
-    ;; Building QtWebKit takes around 13 hours on an AArch64 machine.  Give some
-    ;; room for slower or busy hardware.
-    (properties '((timeout . 64800)))   ;18 hours
-
-    ;; XXX: This consumes too much RAM to successfully build on AArch64 (e.g.,
-    ;; SoftIron OverDrive with 8 GiB of RAM), so instead of wasting resources,
-    ;; disable it on non-Intel platforms.
-    (supported-systems '("x86_64-linux" "i686-linux"))
-
-    (license license:lgpl2.1+)))
-
 (define-public dotherside
   (package
     (name "dotherside")
@@ -4324,7 +4286,7 @@ generate Python bindings for your C or C++ code.")))
      (list qtbase-5 qttools-5))
     (inputs
      (list glu))
-    (home-page "http://libqglviewer.com")
+    (home-page "https://libqglviewer.com")
     (synopsis "Qt-based C++ library for the creation of OpenGL 3D viewers")
     (description
      "@code{libQGLViewer} is a C++ library based on Qt that eases the creation
@@ -4625,7 +4587,7 @@ a secure way.")
                    (invoke "qmake"
                            (string-append "PREFIX=" #$output)
                            (string-append "LIBDIR=" #$output "/lib")))))))
-    (home-page "http://accounts-sso.gitlab.io/signond/index.html")
+    (home-page "https://accounts-sso.gitlab.io/signond/index.html")
     (synopsis "Perform user authentication over D-Bus")
     (description "This package provides a D-Bus service which performs user
 authentication on behalf of its clients.")
diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm
index 2cda2b6b9c..92060da283 100644
--- a/gnu/packages/racket.scm
+++ b/gnu/packages/racket.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013-2016, 2018, 2020-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2021, 2022 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2021, 2022, 2023 Philip McGrath <philip@philipmcgrath.com>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -26,7 +26,6 @@
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix gexp)
-  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix diagnostics)
   #:use-module (guix i18n)
@@ -191,8 +190,8 @@
 ;;
 ;; CODE:
 
-(define %racket-version "8.7") ; Remember to update chez-scheme-for-racket!
-(define %zuo-version "1.0") ; defined in racket/src/zuo/zuo.c
+(define %racket-version "8.8") ; Remember to update chez-scheme-for-racket!
+(define %zuo-version "1.6") ; defined in racket/src/zuo/zuo.c
 (define %racket-commit
   (string-append "v" %racket-version))
 (define %racket-origin
@@ -202,10 +201,9 @@
           (url "https://github.com/racket/racket")
           (commit %racket-commit)))
     (sha256
-     (base32 "0agwa1nrv8mizkqg9nffjli00djyx1r9n6y6b6ry7k13pb6i7xnj"))
+     (base32 "0d1dknnj93r6rmz9zhgn93z937csrni5xpjam2ci41zc070p09y7"))
     (file-name (git-file-name "racket" %racket-version))
-    (patches (search-patches "racket-backport-8.7-pkg-strip.patch"
-                             "racket-chez-scheme-bin-sh.patch"
+    (patches (search-patches "racket-chez-scheme-bin-sh.patch"
                              "racket-rktio-bin-sh.patch"
                              "racket-zuo-bin-sh.patch"))
     (modules '((guix build utils)))
@@ -672,7 +670,7 @@ DrRacket IDE, are not included.")
        "2d" (base32 "0fb5v6058ls08xw3zbmqyr2ym0psm119gl9ffgmhm9w8rs9i4dq7")
        '("2d" "2d-doc" "2d-lib"))
       (simple-racket-origin
-       "algol60" (base32 "09kj6asypmc24n29w0izc9p0q8hpga2hpkchsypfwn5c8zpvihlx")
+       "algol60" (base32 "03akd7xhn4l7y66qgaimvdbn6gq7ay6j03dc11mz80n06z21dfb6")
        '(("algol60" ".")))
       (racket-packages-origin
        "racket" %racket-origin
@@ -688,7 +686,7 @@ DrRacket IDE, are not included.")
          ("sandbox-lib" "pkgs/sandbox-lib")
          ("zo-lib" "pkgs/zo-lib")))
       (simple-racket-origin
-       "cext-lib" (base32 "00w38jpv88fpl4pgj6ndnysvn0s21rjvj0xhznay80msan0vc341")
+       "cext-lib" (base32 "01dirj5nq9s384xqpzh1p07la38vcycsim0k1ls04a52sgyglgwc")
        '("cext-lib" "dynext-lib"))
       (simple-racket-origin
        "class-iop" (base32 "08z57q83cr7wnh6g8ah3hdhmsmf9zp1jfs7yvxv188l3hzvygy5l")
@@ -709,16 +707,16 @@ DrRacket IDE, are not included.")
        "db" (base32 "0xx0k8yw2vb9b4vk2dwjfbpixnmriqsv7kpv3fvfxbwyg42y0db5")
        '("db" "db-doc" "db-lib"))
       (simple-racket-origin
-       "deinprogramm" (base32 "1ngdjky4n1vy2b9jz1z4pnzl0vgvaqr3p0ff5sx82hs38qvvi5di")
+       "deinprogramm" (base32 "0glnk8f1gi8r9y27glmz59fjib2vx8xwwil9jsds99bsvbp24g06")
        '("deinprogramm" "deinprogramm-signature"))
       (simple-racket-origin
        "distributed-places" (base32 "1dajpkj9balqcpv6cdk9hwjz592h1vq8rrx5vncariiac4vbdpa0")
        '("distributed-places" "distributed-places-doc" "distributed-places-lib"))
       (simple-racket-origin
-       "draw" (base32 "0pxpay04rylq3hqfpdrha2pw78hhwsjzq8w4f156gipin74lb7a2")
+       "draw" (base32 "0p69yk1c1jad5xmr8xxbxvrmq5yb3cr5zlj1kydx3nd0ij3g5dir")
        '("draw" "draw-doc" "draw-lib"))
       (simple-racket-origin
-       "drracket" (base32 "12khv954v7xpi3wv50pp5l28ww1382apbvzvs67d6ik10nn3d0y4")
+       "drracket" (base32 "19x5j1zj8zyg3kfhjshwqayiddbv7kqlsjd5zw0cpv7a3adkjr65")
        '("drracket"
          "drracket-plugin-lib"
          "drracket-tool"
@@ -738,7 +736,7 @@ DrRacket IDE, are not included.")
        "errortrace" (base32 "0l9k2rx6z4jkid7kxhbs763s66pxbzvfrgxajykbrmqkv77lhb3w")
        '("errortrace" "errortrace-doc" "errortrace-lib"))
       (simple-racket-origin
-       "expeditor" (base32 "0mjfwb4wzwsg5xj3k6cmik0va432n56rp5h7rxx1c2yy3prh1j7q")
+       "expeditor" (base32 "10841c60nxqvwnjn6f9c6dcp4vsqbvi7n8nvi59vjk7d3b2qfpbq")
        '("expeditor" "expeditor-doc" "expeditor-lib"))
       (simple-racket-origin
        "frtime" (base32 "0ydz2yn8vvv6z7brwlswcyx0f31a6y6d443i89rysfvd2xkhpfd5")
@@ -752,13 +750,13 @@ DrRacket IDE, are not included.")
        "games" (base32 "0kpn3izlx1ccd0pj0dnvmnrhny51b85xy418a7psj70lz8j8415d")
        '(("games" ".")))
       (simple-racket-origin
-       "gui" (base32 "027imnxwm0663yn9mbkq8sjm1qr1pw7zf4ra168k746hp446ah58")
+       "gui" (base32 "1dddr8c5v6vp42jmnrrfsm1v1hgha0q0wvvpdkl7x0ri23plgcrm")
        '("gui" "gui-doc" "gui-lib" "tex-table"))
       (simple-racket-origin
        "gui-pkg-manager" (base32 "1ji9448d723nklqvycwdswj0ni28sabrncag14f9mx47did5myb5")
        '("gui-pkg-manager-lib"))
       (simple-racket-origin
-       "htdp" (base32 "0pf2kf63xj9s0n44vaxlmnd1bdb1a44gcp807a3b3cmlc1lkb36z")
+       "htdp" (base32 "1ba4pj7v8mi8kvwdn7iw4jc435hm2d04i7gqgys79b47i6qyyf6h")
        '("htdp" "htdp-doc" "htdp-lib"))
       (simple-racket-origin
        "html" (base32 "18n1jnjgzfknc8nv8dppi85nb8q08gqdwkg6hfjk08x0p00anx2x")
@@ -782,7 +780,7 @@ DrRacket IDE, are not included.")
        "make" (base32 "10852fj30bz5r46c3d99s37fkgy5yh44gb01j29sf3kxnhi0g2sa")
        '(("make" ".")))
       (simple-racket-origin
-       "math" (base32 "00ld38in5jfshs1q4zf07w84cyv4yjr40kmw30pyd5wqgs2zq9ai")
+       "math" (base32 "072hkk9lih1265pyjvafd4pill9x5wjs41kmm6cgwzwy5hqv0qyw")
        '("math" "math-doc" "math-lib"))
       (simple-racket-origin
        "mysterx" (base32 "11p9jzrafw0hizhl0cs4sxx7rv281185q8hryic2rpk0kzjdyr48")
@@ -826,7 +824,7 @@ DrRacket IDE, are not included.")
        "pconvert" (base32 "00czi0p399mmyrvxyrs5kniizpkqfxyz2ncxqi2jy79a7wk79pb1")
        '("pconvert-lib"))
       (simple-racket-origin
-       "pict" (base32 "063a1lc6v1i8ywxcskkvvfxdvlx0qhr0l4l3dkibmnli47mdhv7g")
+       "pict" (base32 "0hiwld84kd5s07rppswv8hd83sx8vk78xbhkbbwrnc51cfqwvvfj")
        '("pict" "pict-doc" "pict-lib"))
       (simple-racket-origin
        "pict-snip" (base32 "081nwiy4a0n4f7xws16hqbhf0j3kz5alizndi3nnyr3chm4kng6x")
@@ -860,7 +858,7 @@ DrRacket IDE, are not included.")
                        (file-name (git-file-name "Metaxal-quickscript" %racket-version)))
        '(("quickscript" ".")))
       (simple-racket-origin
-       "r5rs" (base32 "1g3cysj7z88r38vkzvi8g2fb2hn4yg1fdhy5smxw303jxgl3inp6")
+       "r5rs" (base32 "0iciz6khmynly0901kl9m7rnd1d3nxrin0rl6d9rjwvsks30aqad")
        '("r5rs" "r5rs-doc" "r5rs-lib"))
       (simple-racket-origin
        "r6rs" (base32 "1mgcxd88s67w47a2z1i6snz8qhbngjbmr6rs4pchpnrfap96ssgl")
@@ -896,7 +894,7 @@ DrRacket IDE, are not included.")
        "realm" (base32 "0rlvwyd6rpyl0zda4a5p8dp346fvqzc8555dgfnrhliymkxb6x4g")
        '(("realm" ".")))
       (simple-racket-origin
-       "redex" (base32 "1v5p65y3hnp1mfvy0jl4lhmaw9s3qzzfcfh3fhihhqxsybbqp3q3")
+       "redex" (base32 "1dlivxllz1y7lsh402i6bmljbwbbphcvhbgf8jsnhip2vhck5rp4")
        '("redex"
          "redex-benchmark"
          "redex-doc"
@@ -905,13 +903,13 @@ DrRacket IDE, are not included.")
          "redex-lib"
          "redex-pict-lib"))
       (simple-racket-origin
-       "sasl" (base32 "0ibh4wb4gn8pggx6gkv4vk4d6rwzn5nrvjibhvkzhaynf6lhb824")
+       "sasl" (base32 "1l74rkp8m2jfb82678k3lhd2y5k9l8csazwshf9m969i67gzbjh8")
        '("sasl" "sasl-doc" "sasl-lib"))
       (simple-racket-origin
        "scheme-lib" (base32 "0pcf0y8rp4qyjhaz5ww5sr5diq0wpcdfrrnask7zapyklzx1jx8x")
        '(("scheme-lib" ".")))
       (simple-racket-origin
-       "scribble" (base32 "1n0ywdham53h2ibkhc0cnrhhaxfkl7ax0bx5sdfpnyh2yrabxwqf")
+       "scribble" (base32 "1m3s7nz4qk71hnl2qhnm4fbk4mfz1z53ig21czhinbxpall8l4d1")
        '("scribble"
          "scribble-doc"
          "scribble-html-lib"
@@ -943,7 +941,7 @@ DrRacket IDE, are not included.")
        "snip" (base32 "19n2i1m2nysrbv38jxk32abymdbhcxdcrrjsg4ppfbng8niygc8x")
        '("snip" "snip-lib"))
       (simple-racket-origin
-       "typed-racket" (base32 "0yh9vcg1bjamf6nq3hqxwjg07kjkxyqhvymv3r64j1n4hiiwz6iv")
+       "typed-racket" (base32 "1hhc0nss68814xsxhl5rnw4smnm06573j6ka0wp77almqg5nzhpv")
        '("source-syntax"
          "typed-racket"
          "typed-racket-compatibility"
@@ -954,13 +952,13 @@ DrRacket IDE, are not included.")
        "srfi" (base32 "13xvfzr5546m3a4kksyawzcl93nrklasr1slfa5ar3p77h962la4")
        '("srfi" "srfi-doc" "srfi-lib" "srfi-lite-lib"))
       (simple-racket-origin
-       "string-constants" (base32 "174q3ihcp8s52mmlk7z0sipjksiac432pfkm0inlwi92s6p7dlb3")
+       "string-constants" (base32 "1lxab9323xmxqs4mxbgr504xgcgsf9dvx2xsb4p92fjzsif0d64y")
        '("string-constants" "string-constants-doc" "string-constants-lib"))
       (simple-racket-origin
        "swindle" (base32 "03n9ymjhrw45h7hxkw4nq8nidnvs9mfzb4228s2cjfaqbgqxvsyb")
        '(("swindle" ".")))
       (simple-racket-origin
-       "syntax-color" (base32 "02dcd4yvdnw35m3srvfd43csxffxw3j4rk6zi379b8dsvbbrjyq1")
+       "syntax-color" (base32 "1xxbvcqca99px01cnh40r69w1ica8zl97yyryb6xz30j6nblsmb6")
        '("syntax-color" "syntax-color-doc" "syntax-color-lib"))
       (simple-racket-origin
        "trace" (base32 "070ihla5j796hdarn5wxdwn4xj0xnkm50shgh49jy994mribvhia")
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 3e5ada8c48..648d6c9281 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -687,7 +687,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
            python-numpy
            python-pycairo
            python-pygobject
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-pyqtgraph
            python-pyyaml
            qtbase-5
@@ -1902,7 +1902,7 @@ methods:
              (substitute* "src/libcw/libcw_pa.c"
                (("libpulse-simple.so" all)
                 (search-input-file inputs "/lib/libpulse-simple.so"))))))))
-    (home-page "http://unixcw.sourceforge.net/")
+    (home-page "https://unixcw.sourceforge.net/")
     (synopsis "Morse code library and programs")
     (description
      "@code{unixcw} is a project providing the libcw library and a set of
@@ -1971,7 +1971,7 @@ intended for people who want to learn receiving and sending morse code.")
              (substitute* "src/cfgfile.c"
                (("/usr/share/")
                 (string-append (assoc-ref outputs "out") "/share/"))))))))
-    (home-page "http://gnuais.sourceforge.net/")
+    (home-page "https://gnuais.sourceforge.net/")
     (synopsis "AIS message demodulator and decoder")
     (description
      "This program contains algorithms to demodulate and decode AIS (Automatic
@@ -2042,7 +2042,6 @@ Compatible hardware/software:
            pulseaudio
            qtbase-5
            qtsvg-5
-           qtwebkit
            qwt
            speexdsp
            zlib))
@@ -2127,7 +2126,7 @@ defined radio with support for rtl-sdr.")
 (define-public csdr
   (package
     (name "csdr")
-    (version "0.18.0")
+    (version "0.18.1")
     (source
      (origin
        (method git-fetch)
@@ -2136,7 +2135,7 @@ defined radio with support for rtl-sdr.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0sdni0p9qcf4yw1wf5jz1pyb9wv6wmdblirh2q6s7jblh50vfwz1"))))
+        (base32 "1vgl7d03khdql45jq5xxayqfhb5sasxhjmrl621gyk1k8kxaqs8a"))))
     (build-system cmake-build-system)
     (native-inputs
      (list pkg-config))
@@ -2358,7 +2357,7 @@ voice formats.")
 (define-public sdrangel
   (package
     (name "sdrangel")
-    (version "7.8.5")
+    (version "7.10.0")
     (source
      (origin
        (method git-fetch)
@@ -2367,7 +2366,7 @@ voice formats.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0kfzmxbhfpvs8csfbhnl5nij6nlbr00s43392wfq35vnnkbgk5lv"))))
+        (base32 "0rl2qnc9s8cjwv77vfwgj66rz5zbxmixqh0gg6b29s4667pjvil6"))))
     (build-system qt-build-system)
     (native-inputs
      (list doxygen graphviz pkg-config))
@@ -2383,6 +2382,7 @@ voice formats.")
            ffmpeg
            fftwf
            hackrf
+           hidapi
            libdab
            libusb
            mbelib
@@ -2689,7 +2689,7 @@ of devices than RTL-SDR.")
 (define-public urh
   (package
     (name "urh")
-    (version "2.9.3")
+    (version "2.9.4")
     (source
      (origin
        (method git-fetch)
@@ -2698,7 +2698,7 @@ of devices than RTL-SDR.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "17r9fkw0icph7fayibp6qbdh4nxi8wy3mmd3djmh0c2jr8yz5fsf"))))
+        (base32 "1sx70mp4bjbymy1lp6p96ydpqlyq7rwnrw96nb6aaya63fl1ab8y"))))
     (build-system python-build-system)
     (native-inputs
      (list python-cython
@@ -2816,7 +2816,7 @@ Navigation Satellite System.")
 (define-public qdmr
   (package
     (name "qdmr")
-    (version "0.11.1")
+    (version "0.11.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2825,7 +2825,7 @@ Navigation Satellite System.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1xbp4ica6bgsiwc57wzm8744dqik2fw77kh1gb8s3sa1q9my2vlx"))))
+                "1r40shli0c66f559m25hd1xagyblh8qhzz7wyqyy7r167fvzagfd"))))
     (build-system cmake-build-system)
     (arguments
      (list #:tests? #f ;no tests
diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm
index 4c7da7376b..210b1a6e64 100644
--- a/gnu/packages/raspberry-pi.scm
+++ b/gnu/packages/raspberry-pi.scm
@@ -81,7 +81,7 @@
     (synopsis "C library for Broadcom BCM 2835 as used in Raspberry Pi")
     (description "This package provides a C library for Broadcom BCM 2835 as
 used in the Raspberry Pi")
-    (home-page "http://www.airspayce.com/mikem/bcm2835/")
+    (home-page "https://www.airspayce.com/mikem/bcm2835/")
     (supported-systems '("armhf-linux" "aarch64-linux"))
     (license license:gpl3)))
 
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index 03aecd1ee5..13e62baa84 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -117,7 +117,7 @@ HTML and JSON.")
                      ; SimpleTest fails.
                      ; Notice that the library appears to be unmaintained
                      ; with no reaction to bug reports.
-    (home-page "http://clucene.sourceforge.net/")
+    (home-page "https://clucene.sourceforge.net/")
     (synopsis "C text indexing and searching library")
     (description "CLucene is a high-performance, scalable, cross platform,
 full-featured indexing and searching API.  It is a port of the very popular
@@ -238,7 +238,7 @@ taxonomic inference capability.")
        ; test failure reported upstream, see
        ; http://bugs.librdf.org/mantis/view.php?id=571
        #:tests? #f))
-    (home-page "http://librdf.org/rasqal/")
+    (home-page "https://librdf.org/rasqal/")
     (synopsis "RDF query library")
     (description "Rasqal is a C library that handles Resource Description
 Framework (RDF) query language syntaxes, query construction and execution
@@ -269,7 +269,7 @@ Turtle/N3 and read them in SPARQL XML, RDF/XML and Turtle/N3.")
      (list rasqal)) ; in Requires.private field of .pc
     (inputs
      (list bdb))
-    (home-page "http://librdf.org/")
+    (home-page "https://librdf.org/")
     (synopsis "RDF library")
     (description "The Redland RDF Library (librdf) provides the RDF API
 and triple stores.")
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index 7cdee5afd4..639244f37d 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -87,5 +87,5 @@ Python.  It is a C++ library.")
     (description "Superset of the POSIX regex API, enabling approximate
 matching.  Also ships a version of the agrep utility which behaves similar to
 grep but features inexact matching.")
-    (home-page "http://laurikari.net/tre")
+    (home-page "https://laurikari.net/tre")
     (license license:bsd-2)))
diff --git a/gnu/packages/robotics.scm b/gnu/packages/robotics.scm
index 0b0ecaf027..949978d5dd 100644
--- a/gnu/packages/robotics.scm
+++ b/gnu/packages/robotics.scm
@@ -120,7 +120,6 @@ hundred times faster than real-time.")
              qtbase-5
              qtsvg-5
              qttools-5 ;for libQt5Help, needed by "studio"
-             qtwebkit
              qtx11extras
              eudev
              libxml2
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
index ea645c6564..48f6139f1f 100644
--- a/gnu/packages/rsync.scm
+++ b/gnu/packages/rsync.scm
@@ -92,7 +92,7 @@ files in the destination.")
     (list popt))
    (native-inputs
     (list which perl))
-   (home-page "http://librsync.sourceforge.net/")
+   (home-page "https://librsync.sourceforge.net/")
    (synopsis "Implementation of the rsync remote-delta algorithm")
    (description
     "Librsync is a free software library that implements the rsync
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 5c8b7eba7a..c7b510ae43 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -239,7 +239,7 @@ a focus on simplicity and productivity.")
 (define-public ruby-3.2
   (package
     (inherit ruby-3.1)
-    (version "3.2.0")
+    (version "3.2.1")
     (source
      (origin
        (method url-fetch)
@@ -248,7 +248,7 @@ a focus on simplicity and productivity.")
                            "/ruby-" version ".tar.xz"))
        (sha256
         (base32
-         "1d18ifvdbf21cncpany948vc2gjw3qa36ck9b4i97pg60rrmgx6j"))))
+         "0333xln2jkqdfk5zwxas6rpyd4rff2910z99qnyrqi15mrhqcv3l"))))
     (inputs
      (modify-inputs (package-inputs ruby-3.1)
        (prepend libyaml)))))
@@ -3668,7 +3668,7 @@ use GNU gettext tools for maintenance.")
     (synopsis "Utility library to package internationalized libraries")
     (description
      "Packnga is a library to translate to many languages using YARD.")
-    (home-page "http://ranguba.org/packnga/")
+    (home-page "https://ranguba.org/packnga/")
     (license license:lgpl2.0+)))
 
 (define-public ruby-test-construct
@@ -5080,7 +5080,7 @@ to reproduce user environments.")
     (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/")
+    (home-page "https://www.nokogiri.org/")
     (license license:expat)))
 
 (define-public ruby-method-source
@@ -6437,7 +6437,7 @@ lock with a counter.")
     (description
      "Oj is a JSON parser and generator for Ruby, where the encoding and
 decoding of JSON is implemented as a C extension to Ruby.")
-    (home-page "http://www.ohler.com/oj/")
+    (home-page "https://www.ohler.com/oj/")
     (license (list license:expat     ; Ruby code
                    license:bsd-3)))) ; extension code
 
@@ -6461,7 +6461,7 @@ decoding of JSON is implemented as a C extension to Ruby.")
 written as a native C extension.  It was designed to be an alternative to
 Nokogiri and other Ruby XML parsers for generic XML parsing and as an
 alternative to Marshal for Object serialization.")
-    (home-page "http://www.ohler.com/ox")
+    (home-page "https://www.ohler.com/ox")
     (license license:expat)))
 
 (define-public ruby-redcloth
@@ -11668,7 +11668,7 @@ entities.")
     (description
      "Sinatra is a DSL for quickly creating web applications in Ruby with
 minimal effort.")
-    (home-page "http://sinatrarb.com/")
+    (home-page "https://sinatrarb.com/")
     (license license:expat)))
 
 (define-public ruby-thin
@@ -12524,7 +12524,7 @@ reference object.  This object is not created until the first method dispatch.")
        (sha256
         (base32 "197wrgqrddgm1xs3yvjvd8vkvil4h4mdrcp16jmd4b57rxrrr769"))))
     (build-system ruby-build-system)
-    (home-page "http://mjackson.github.io/citrus/")
+    (home-page "https://mjackson.github.io/citrus/")
     (synopsis "Parsing Expressions for Ruby")
     (description "Citrus is a parsing library for Ruby that combines the
 expressiveness of the language with the parsing expressions.")
@@ -12548,7 +12548,7 @@ expressiveness of the language with the parsing expressions.")
       ruby-rspec
       ruby-rake-compiler
       ruby-yard))
-    (home-page "http://cbor.io/")
+    (home-page "https://cbor.io/")
     (synopsis "Concise Binary Object Representation")
     (description "CBOR is a library for the
 @acronym{CBOR, Concise Binary Object Representation} format, based on
@@ -12738,7 +12738,7 @@ using published rates from open-exchange-rates.  Compatible with the money gem."
      ;; No rakefile
      `(#:tests? #f))
     (propagated-inputs (list ruby-rack))
-    (home-page "http://roda.jeremyevans.net")
+    (home-page "https://roda.jeremyevans.net")
     (synopsis "Routing Tree Web Toolkit")
     (description "Roda is a routing tree web toolkit, designed for building fast
 and maintainable web applications in ruby.")
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index ce408f8f57..4d7790cfc6 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -54,7 +54,6 @@
   #:use-module (guix build-system cargo)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index fdba37d1b8..8c004a1aac 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -172,7 +172,7 @@ The library is small, thread safe, and written in portable ANSI C with no
 external dependencies.")
     (license license:x11)))
 
-(define-public samba/fixed
+(define-public samba/pinned
   (hidden-package
    (package
      (name "samba")
@@ -282,7 +282,7 @@ Desktops into Active Directory environments using the winbind daemon.")
 
 (define-public samba
   (package
-    (inherit samba/fixed)
+    (inherit samba/pinned)
     (name "samba")
     (version "4.17.0")
     (source
@@ -294,7 +294,7 @@ Desktops into Active Directory environments using the winbind daemon.")
                            "samba-" version ".tar.gz"))
        (sha256
         (base32 "0fl2y5avmyxjadh6zz0fwz35akd6c4j9lldzp2kyvjrgm36qx1h4"))))
-    (properties (alist-delete 'hidden? (package-properties samba/fixed)))))
+    (properties (alist-delete 'hidden? (package-properties samba/pinned)))))
 
 (define-public talloc
   (package
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index c13de9d65b..ddf77c53c6 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2022 Robby Zambito <contact@robbyzambito.me>
+;;; Copyright © 2023 Andrew Whatson <whatson@tailcall.au>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,6 +42,7 @@
   #:use-module ((guix licenses)
                 #:select (gpl2+ lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3+ asl2.0 bsd-3
                           cc-by-sa4.0 non-copyleft expat public-domain))
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -392,14 +394,14 @@ mashups, office (web agendas, mail clients, ...), etc.")
     (version "1.9.2")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://s48.org/" version
+             (uri (string-append "https://s48.org/" version
                                  "/scheme48-" version ".tgz"))
              (sha256
               (base32
                "1x4xfm3lyz2piqcw1h01vbs1iq89zq7wrsfjgh3fxnlm1slj2jcw"))
              (patches (search-patches "scheme48-tests.patch"))))
     (build-system gnu-build-system)
-    (home-page "http://s48.org/")
+    (home-page "https://s48.org/")
     (synopsis "Scheme implementation using a bytecode interpreter")
     (description
      "Scheme 48 is an implementation of Scheme based on a byte-code
@@ -409,6 +411,136 @@ implementation techniques and as an expository tool.")
     ;; Most files are BSD-3; see COPYING for the few exceptions.
     (license bsd-3)))
 
+(define-public scheme48-prescheme
+  (package
+    (inherit scheme48)
+    (name "scheme48-prescheme")
+    (arguments
+     (list
+      #:tests? #f ; tests only cover scheme48
+      #:modules '((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 popen)
+                  (srfi srfi-1))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'configure 'patch-prescheme-version
+            (lambda _
+              ;; Ensure the Pre-Scheme version matches the package version
+              (call-with-output-file "ps-compiler/minor-version-number"
+                (lambda (port)
+                  (let* ((version #$(package-version this-package))
+                         (vparts (string-split version #\.))
+                         (vminor (string-join (drop vparts 1) ".")))
+                    (write vminor port))))))
+          (add-after 'configure 'patch-prescheme-headers
+            (lambda _
+              ;; Rename "io.h" to play nicely with others
+              (copy-file "c/io.h" "c/prescheme-io.h")
+              (substitute* "c/prescheme.h"
+                (("^#include \"io\\.h\"")
+                 "#include \"prescheme-io.h\""))))
+          (add-after 'configure 'generate-pkg-config
+            (lambda _
+              ;; Generate a pkg-config file
+              (call-with-output-file "prescheme.pc"
+                (lambda (port)
+                  (let ((s48-version #$(package-version scheme48))
+                        (version #$(package-version this-package)))
+                    (format port (string-join
+                                  '("prefix=~a"
+                                    "exec_prefix=${prefix}"
+                                    "libdir=${prefix}/lib/scheme48-~a"
+                                    "includedir=${prefix}/include"
+                                    ""
+                                    "Name: Pre-Scheme (Scheme 48)"
+                                    "Description: Pre-Scheme C runtime"
+                                    "Version: ~a"
+                                    "Libs: -L${libdir} -lprescheme"
+                                    "Cflags: -I${includedir}")
+                                  "\n" 'suffix)
+                            #$output s48-version version))))))
+          (add-after 'configure 'generate-prescheme-wrapper
+            (lambda _
+              ;; Generate a wrapper to load and run ps-compiler.image
+              (call-with-output-file "prescheme"
+                (lambda (port)
+                  (let ((s48-version #$(package-version scheme48)))
+                    (format port (string-join
+                                  '("#!/bin/sh"
+                                    "scheme48=~a/lib/scheme48-~a/scheme48vm"
+                                    "prescheme=~a/lib/scheme48-~a/prescheme.image"
+                                    "exec ${scheme48} -i ${prescheme} \"$@\"")
+                                  "\n" 'suffix)
+                            #$scheme48 s48-version #$output s48-version))))
+              (chmod "prescheme" #o755)))
+          (replace 'build
+            (lambda _
+              ;; Build a minimal static library for linking Pre-Scheme code
+              (let ((lib "c/libprescheme.a")
+                    (objs '("c/unix/io.o"
+                            "c/unix/misc.o")))
+                (apply invoke "make" objs)
+                (apply invoke "ar" "rcs" lib objs))
+              ;; Dump a Scheme 48 image with both the Pre-Scheme compatibility
+              ;; library and compiler pre-loaded, courtesy of Taylor Campbell's
+              ;; Pre-Scheme Manual:
+              ;; https://groups.scheme.org/prescheme/1.3/#Invoking-the-Pre_002dScheme-compiler
+              (with-directory-excursion "ps-compiler"
+                (let ((version #$(package-version this-package))
+                      (port (open-pipe* OPEN_WRITE "scheme48")))
+                  (format port (string-join
+                                '(",batch"
+                                  ",config ,load ../scheme/prescheme/interface.scm"
+                                  ",config ,load ../scheme/prescheme/package-defs.scm"
+                                  ",exec ,load load-ps-compiler.scm"
+                                  ",in prescheme-compiler prescheme-compiler"
+                                  ",user (define prescheme-compiler ##)"
+                                  ",dump ../prescheme.image \"(Pre-Scheme ~a)\""
+                                  ",exit")
+                                "\n" 'suffix)
+                          version)
+                  (close-pipe port)))))
+          (replace 'install
+            (lambda _
+              (let* ((s48-version #$(package-version scheme48))
+                     (bin-dir     (string-append #$output "/bin"))
+                     (lib-dir     (string-append #$output "/lib/scheme48-" s48-version))
+                     (pkgconf-dir (string-append #$output "/lib/pkgconfig"))
+                     (share-dir   (string-append #$output "/share/scheme48-" s48-version))
+                     (include-dir (string-append #$output "/include")))
+                ;; Install Pre-Scheme compiler image
+                (install-file "prescheme" bin-dir)
+                (install-file "prescheme.image" lib-dir)
+                ;; Install Pre-Scheme config, headers, and lib
+                (install-file "prescheme.pc" pkgconf-dir)
+                (install-file "c/prescheme.h" include-dir)
+                (install-file "c/prescheme-io.h" include-dir)
+                (install-file "c/libprescheme.a" lib-dir)
+                ;; Install Pre-Scheme sources
+                (copy-recursively "scheme/prescheme"
+                                  (string-append share-dir "/prescheme"))
+                (copy-recursively "ps-compiler"
+                                  (string-append share-dir "/ps-compiler"))
+                ;; Remove files specific to building the Scheme 48 VM
+                (for-each (lambda (file)
+                            (delete-file (string-append share-dir "/" file)))
+                          '("ps-compiler/compile-bibop-gc-32.scm"
+                            "ps-compiler/compile-bibop-gc-64.scm"
+                            "ps-compiler/compile-gc.scm"
+                            "ps-compiler/compile-twospace-gc-32.scm"
+                            "ps-compiler/compile-twospace-gc-64.scm"
+                            "ps-compiler/compile-vm-no-gc-32.scm"
+                            "ps-compiler/compile-vm-no-gc-64.scm"))))))))
+    (propagated-inputs (list scheme48))
+    (home-page "http://s48.org/")
+    (synopsis "Pre-Scheme compiler from Scheme 48")
+    (description
+     "Pre-Scheme is a statically compilable dialect of Scheme, used to implement the
+Scheme 48 virtual machine.  Scheme 48 ships with a Pre-Scheme to C compiler written
+in Scheme, and a runtime library which allows Pre-Scheme code to run as Scheme.")
+    (license bsd-3)))
+
 (define-public gambit-c
   (package
     (name "gambit-c")
@@ -701,7 +833,7 @@ linked with a SCM executable.")
                (install-file "init.scm" scm)
                #t))))
        #:tests? #f))                    ; no tests
-    (home-page "http://tinyscheme.sourceforge.net/")
+    (home-page "https://tinyscheme.sourceforge.net/")
     (synopsis "Light-weight interpreter for the Scheme programming language")
     (description
      "TinyScheme is a light-weight Scheme interpreter that implements as large a
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index 5e7708be6e..21150394db 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -93,7 +93,7 @@ view to show two terminals at once.")
                #t))))
        ;; No check target.
        #:tests? #f))
-    (home-page "http://dtach.sourceforge.net/")
+    (home-page "https://dtach.sourceforge.net/")
     (synopsis "Emulates the detach feature of screen")
     (description
      "dtach is a tiny program that emulates the detach feature of screen,
diff --git a/gnu/packages/scsi.scm b/gnu/packages/scsi.scm
index 8334f543b1..f63b391dc1 100644
--- a/gnu/packages/scsi.scm
+++ b/gnu/packages/scsi.scm
@@ -42,7 +42,7 @@
     (arguments
      `(#:configure-flags
        (list "--disable-static")))
-    (home-page "http://sg.danny.cz/sg/sg3_utils.html")
+    (home-page "https://sg.danny.cz/sg/sg3_utils.html")
     (synopsis "SCSI device utilities")
     (description
      "sg3-utils is a collection of utilities for devices that use the Small
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 0c419dfaca..b37ab08642 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -197,7 +197,7 @@ joystick, and graphics hardware.")
 digital sound files.  It can take advantage of particular features of your
 system, such as sound redirection over the network.")
     (license license:lgpl2.1)
-    (home-page "http://mikmod.sourceforge.net/")))
+    (home-page "https://mikmod.sourceforge.net/")))
 
 (define-public sdl-gfx
   (package
@@ -377,7 +377,7 @@ SDL.")
        ("harfbuzz" ,harfbuzz)
        ("pango" ,pango)
        ("sdl" ,sdl)))
-    (home-page "http://sdlpango.sourceforge.net")
+    (home-page "https://sdlpango.sourceforge.net")
     (synopsis "Pango SDL binding")
     (description "This library is a wrapper around the Pango library.
 It allows you to use TrueType fonts to render internationalized and
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index a0c732dee1..9fe4242268 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -727,7 +727,7 @@ an unprivileged user.")
 (define-public libnitrokey
   (package
     (name "libnitrokey")
-    (version "3.6")
+    (version "3.8")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -736,7 +736,7 @@ an unprivileged user.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0ngrvv61d36vvfwrfg0qxmp2wg18v4aaldwvwzgxvwaysjswhn9r"))))
+                "1b95l979y353rli54a79z18iya9bza83cymcjpndr01q1pb134zm"))))
     (build-system cmake-build-system)
     (arguments
      ;; These tests do not require any device to be connected
@@ -745,7 +745,7 @@ an unprivileged user.")
     (inputs (list hidapi libusb))
     (home-page "https://github.com/Nitrokey/libnitrokey")
     (synopsis "Communication library for Nitrokey")
-    (description "This packate provides communication library for Nitrokey.")
+    (description "This package provides a communication library for Nitrokey.")
     (license license:lgpl3+)))
 
 (define-public cppcodec
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 1d0214deb1..559dafaa92 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
-;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
@@ -608,7 +608,8 @@ use of experts and novices alike.")
          (file-name (string-append name "-" version "-checkout"))
          (sha256
           (base32
-           "1ghk08akiz7hff1pndi8rmgamgcrn2mv9asbss9l79d3c2iaav3q"))))
+           "1ghk08akiz7hff1pndi8rmgamgcrn2mv9asbss9l79d3c2iaav3q"))
+         (patches (search-patches "scsh-nonstring-search-path.patch"))))
       (build-system gnu-build-system)
       (arguments
        `(#:test-target "test"
@@ -627,6 +628,11 @@ use of experts and novices alike.")
        (list scheme48 scheme48-rx))
       (native-inputs
        (list autoconf automake))
+      (native-search-paths
+       (list (search-path-specification
+               (variable "SCSH_LIB_DIRS")
+               (separator " ")
+               (files '("share/scsh-0.7")))))
       (home-page "https://github.com/scheme/scsh")
       (synopsis "Unix shell embedded in Scheme")
       (description
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index a192bd16f7..64cc818d65 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -553,7 +553,7 @@ easily view, navigate, and search your command history with suggestion boxes.
 HSTR can also manage your command history (for instance you can remove
 commands that are obsolete or contain a piece of sensitive information) or
 bookmark your favourite commands.")
-    (home-page "http://me.mindforger.com/projects/hh.html")
+    (home-page "https://me.mindforger.com/projects/hh.html")
     (license license:asl2.0)))
 
 (define-public shell-functools
@@ -617,7 +617,7 @@ install -m 644 rig.6 $(DESTDIR)$(MANDIR)/man6/rig.6")
                          (("install -g 0 -m 644 -o 0 data/\\*.idx \\$\\(DATADIR\\)")
                           "install -m 644 data/*.idx $(DESTDIR)$(DATADIR)")))))
                  #:tests? #f))
-    (home-page "http://rig.sourceforge.net")
+    (home-page "https://rig.sourceforge.net")
     (synopsis "Random identity generator")
     (description
       "RIG (Random Identity Generator) generates random, yet real-looking,
diff --git a/gnu/packages/simulation.scm b/gnu/packages/simulation.scm
index e5e7d2bf60..059be5a2be 100644
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@ -254,6 +254,113 @@ problems for efficient solution on parallel systems.")
     (license license:gpl3+)
     (home-page "https://openfoam.org")))
 
+(define-public open-simulation-interface
+  (package
+    (name "open-simulation-interface")
+    (version "3.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/"
+                                        "OpenSimulationInterface/"
+                                        "open-simulation-interface"))
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "09vclrvsawx608kk0vnzywr71xn11qzwxzh2j508zjfn0kvhyx7q"))))
+    (build-system cmake-build-system)
+    (arguments (list #:tests? #f         ; tests are for the python package
+                     #:phases
+                     #~(modify-phases %standard-phases
+                         (add-after 'unpack 'fix-cmake
+                           (lambda _
+                             (substitute* "CMakeLists.txt"
+                               (("-targets\\.cmake") "_targets.cmake")))))))
+    (native-inputs (list protobuf))
+    (home-page
+     "https://github.com/OpenSimulationInterface/open-simulation-interface")
+    (synopsis "Generic interface for environmental perception")
+    (description "The Open Simulation Interface is a generic interface based on
+Google's protocol buffers for the environmental perception of automated driving
+functions in virtual scenarios.")
+    (license license:mpl2.0)))
+
+(define-public python-open-simulation-interface
+  (package/inherit open-simulation-interface
+    (build-system python-build-system)
+    (arguments '())))
+
+(define-public esmini
+  (package
+    (name "esmini")
+    (version "2.27.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/esmini/esmini")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (patches (search-patches "esmini-use-pkgconfig.patch"
+                                       "esmini-no-clutter-log.patch"))
+              (modules '((guix build utils) (ice-9 ftw)))
+              (snippet
+               #~(with-directory-excursion "externals"
+                   (for-each
+                    (lambda (dir) (unless (member dir '("." ".." "expr"))
+                               (delete-file-recursively dir)))
+                    (scandir "."))))
+              (sha256
+               (base32
+                "07ccydz7kxy5jc52f8fmxg4nkr1spshfnpzcv0wgd5lqz9ghjahz"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags #~(list "-DDYN_PROTOBUF=TRUE")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-cmake
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (substitute* "CMakeLists.txt"
+                (("\\$\\{CMAKE_HOME_DIRECTORY\\}/bin")
+                 (string-append (assoc-ref outputs "out") "/bin")))
+              (substitute* "EnvironmentSimulator/CMakeLists.txt"
+                (("\\$\\{OSI_DIR\\}/(include|lib)(-dyn)?" all what)
+                 (search-input-directory
+                  inputs
+                  (string-append what "/osi"
+                                 #$(version-major
+                                    (package-version
+                                     (this-package-input
+                                      "open-simulation-interface"))))))
+                (("\\$\\{SUMO_BASE_DIR\\}/\\$\\{EXT_DIR_NAME\\}")
+                 #$(this-package-input "sumo")))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (with-directory-excursion "EnvironmentSimulator/Unittest/"
+                (for-each invoke (find-files "_test$")))))
+          (add-after 'install 'move-libraries
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (mkdir-p (string-append out "/lib"))
+                (with-directory-excursion (string-append out "/bin")
+                  (for-each
+                   (lambda (f)
+                     (rename-file f (string-append out "/lib/"
+                                                   (basename f))))
+                   (find-files "." "\\.so$")))))))))
+    (inputs (list mesa
+                  openscenegraph `(,openscenegraph "pluginlib")
+                  open-simulation-interface
+                  protobuf pugixml sumo))
+    (native-inputs (list googletest pkg-config))
+    (home-page "https://github.com/esmini/esmini")
+    (synopsis "Basic OpenSCENARIO player")
+    (description "@command{esmini} is a tool to play OpenSCENARIO files.
+It is provided as both a standalone application and a shared library and has
+some support for generating and analysing traffic scenarios..")
+    (license license:mpl2.0)))
+
 (define-public python-fenics-dijitso
   (package
     (name "python-fenics-dijitso")
@@ -924,7 +1031,7 @@ command-line utility for mesh optimisation.")
                     (invoke "py.test" "-v" "tests/migration")
                     (invoke "py.test" "-v" "tests/pyadjoint")))
              #t)))))
-    (home-page "http://www.dolfin-adjoint.org")
+    (home-page "https://www.dolfin-adjoint.org")
     (synopsis "Automatic differentiation library")
     (description "@code{python-dolfin-adjoint} is a solver of
 differential equations associated with a governing system and a
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index c89e95316a..64146813d1 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -109,7 +109,7 @@
                  (("@LIBC_SO_NAME@") "libc.so")
                  (("@LIBC_SO_DIR@")  (string-append libc "/lib"))))
              #t)))))
-    (home-page "http://smalltalk.gnu.org/")
+    (home-page "https://smalltalk.gnu.org/")
     (synopsis "Smalltalk environment")
     (description
      "GNU Smalltalk is a free implementation of the Smalltalk language.  It
diff --git a/gnu/packages/speech.scm b/gnu/packages/speech.scm
index d217d7ba01..79d8dd5a5a 100644
--- a/gnu/packages/speech.scm
+++ b/gnu/packages/speech.scm
@@ -169,7 +169,7 @@ building tools.")
        (inputs
         (list portaudio pulseaudio))
        (native-inputs (list unzip))
-       (home-page "http://espeak.sourceforge.net/")
+       (home-page "https://espeak.sourceforge.net/")
        (synopsis "Software speech synthesizer")
        (description "eSpeak is a software speech synthesizer for English and
 other languages.  eSpeak uses a \"formant synthesis\" method.  This allows many
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 2be724c455..f492957fb2 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +22,8 @@
 
 (define-module (gnu packages spice)
   #:use-module (gnu packages)
+  #:use-module (gnu packages acl)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
@@ -39,8 +41,11 @@
   #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages polkit)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages security-token)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages virtualization)
@@ -51,6 +56,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
@@ -60,19 +66,18 @@
   (package
     (name "usbredir")
     (home-page "https://spice-space.org")
-    (version "0.9.0")
+    (version "0.13.0")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "/download/" name "/" name "-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "19jnpzlanq0a1m5lmlcsp50wxf7icxvpvclx7hnf0zxw8azngqd3"))))
-    (build-system gnu-build-system)
-    (propagated-inputs
-     (list libusb))
-    (native-inputs
-     (list autoconf automake libtool pkg-config))
+                "0vn4gnd8nmnrvvj2rm7akf4sbcslmdk3v22k9kmxxrha5jhgm9jb"))))
+    (build-system meson-build-system)
+    (propagated-inputs (list libusb))
+    (inputs (list glib))
+    (native-inputs (list 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
@@ -83,50 +88,46 @@ different (virtual) machine than the one to which the USB device is attached.")
 (define-public virglrenderer
   (package
     (name "virglrenderer")
-    (version "0.6.0")
+    (version "0.10.4")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                "https://www.freedesktop.org/software/virgl/"
-                "virglrenderer-" version ".tar.bz2"))
-              (patches (search-patches "virglrenderer-CVE-2017-6386.patch"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.freedesktop.org/virgl/virglrenderer")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "06kf0q4l52gzx5p63l8850hff8pmhp7xv1hk8zgx2apbw18y6jd5"))))
-    (build-system gnu-build-system)
-    (inputs
-      (list libepoxy mesa eudev))
-    (native-inputs
-      (list pkg-config))
+                "06pwavrknyhghlxyh7ckq4scjx47v9fhy08r6pn194whzvzivmqg"))))
+    (build-system meson-build-system)
+    (inputs (list libepoxy mesa))
+    (native-inputs (list pkg-config python))
     (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.")
-    (home-page "https://virgil3d.github.io")
+    (home-page "https://gitlab.freedesktop.org/virgl/virglrenderer")
     (license (list license:expat license:bsd-3))))
 
 (define-public spice-protocol
   (package
     (name "spice-protocol")
-    (version "0.14.3")
+    (version "0.14.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                "https://www.spice-space.org/download/releases/"
-                "spice-protocol-" version ".tar.xz"))
+                    "https://www.spice-space.org/download/releases/"
+                    "spice-protocol-" version ".tar.xz"))
               (sha256
                (base32
-                "0yj8k7gcirrsf21w0q6146n5g4nzn2pqky4p90n5760m5ayfb1pr"))))
+                "04nr2w6ymy5jinfi3lj6205yd5h0swss3ykxqk7l3m4z1mhvmzq4"))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'install-documentation
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (string-append out "/share/doc/"
-                                        ,name "-" ,version)))
-               (install-file "COPYING" doc)
-               #t))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'install-documentation
+                 (lambda _
+                   (install-file "COPYING"
+                                 (string-append #$output "/share/doc/"
+                                                #$name "-" #$version)))))))
     (synopsis "Protocol headers for the SPICE protocol")
     (description "SPICE (the Simple Protocol for Independent Computing
 Environments) is a remote-display system built for virtual environments
@@ -137,77 +138,88 @@ which allows users to view a desktop computing environment.")
 (define-public spice-gtk
   (package
     (name "spice-gtk")
-    (version "0.37")
+    (version "0.42")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                "https://spice-space.org/download/gtk/"
-                "spice-gtk-" version ".tar.bz2"))
+                    "https://spice-space.org/download/gtk/"
+                    "spice-gtk-" version ".tar.xz"))
               (sha256
                (base32
-                "1drvj8y35gnxbnrxsipwi15yh0vs9ixzv4wslz6r3lra8w3bfa0z"))))
-    (build-system gnu-build-system)
-    (propagated-inputs
-      (list gstreamer
-            gst-plugins-base
-            gst-plugins-good
-            spice-protocol
-            ;; These are required by the pkg-config files.
-            gtk+
-            pixman
-            openssl-1.1))
-    (inputs
-      `(("glib-networking" ,glib-networking)
-        ("gobject-introspection" ,gobject-introspection)
-        ("json-glib" ,json-glib)
-        ("libepoxy" ,libepoxy)
-        ("libjpeg" ,libjpeg-turbo)
-        ("libxcb" ,libxcb)
-        ("lz4" ,lz4)
-        ("mesa" ,mesa)
-        ("pulseaudio" ,pulseaudio)
-        ("python" ,python)
-        ("opus" ,opus)
-        ("usbredir" ,usbredir)))
-    (native-inputs
-      `(("glib:bin" ,glib "bin")
-        ("intltool" ,intltool)
-        ("pkg-config" ,pkg-config)
-        ("vala" ,vala)))
+                "0n3s1rn7yzs28hnl9k6ql3a90qlv8w16djqj32m1zb8i31zi304k"))))
+    (build-system meson-build-system)
     (arguments
-      `(#:configure-flags
-        '("--enable-gstaudio"
-          "--enable-gstvideo"
-          "--enable-pulse"
-          "--enable-vala"
-          "--enable-introspection")
-        #:phases
-         (modify-phases %standard-phases
-           (add-before 'check 'disable-session-test
-             (lambda _
-               ;; XXX: Disable session tests, because they require USB support,
-               ;; which is not available in the build container.
-               (substitute* "tests/Makefile"
-                 (("test-session\\$\\(EXEEXT\\) ") ""))
-               #t))
-           (add-after 'install 'patch-la-files
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out"))
-                     (libjpeg (assoc-ref inputs "libjpeg")))
-                 ;; Add an absolute reference for libjpeg in the .la files
-                 ;; so it does not have to be propagated.
-                 (substitute* (find-files (string-append out "/lib") "\\.la$")
-                   (("-ljpeg")
-                    (string-append "-L" libjpeg "/lib -ljpeg")))
-                 #t)))
-           (add-after
-            'install 'wrap-spicy
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (let ((out             (assoc-ref outputs "out"))
-                    (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
-                (wrap-program (string-append out "/bin/spicy")
-                  `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
-              #t)))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-problematic-tests
+            (lambda _
+              ;; XXX: Disable the session and cd-emu tests, because they
+              ;; require USB support, which is not available in the build
+              ;; container.
+              (substitute* "tests/meson.build"
+                ((".*'session.c',.*") "")
+                (("tests_sources \\+= 'cd-emu.c'" all)
+                 (string-append "# " all)))))
+          (add-after 'unpack 'adjust-default-acl-helper-path
+            (lambda _
+              ;; The USB ACL helper used to allow USB redirection as a
+              ;; non-privileged user needs to be setuid, as configured by the
+              ;; gnome-desktop-service-type.  A user can still change the
+              ;; location by specifying the SPICE_USB_ACL_BINARY environment
+              ;; variable.
+              (substitute* "src/usb-acl-helper.c"
+                (("ACL_HELPER_PATH\"/spice-client-glib-usb-acl-helper\"")
+                 "\"/run/setuid-programs/spice-client-glib-usb-acl-helper\""))))
+          (add-before 'configure 'correct-polkit-dir
+            (lambda _
+              (substitute* "meson.build"
+                (("d.get_variable\\(pkgconfig: 'policydir')")
+                 (string-append "'" #$output "/share/polkit-1/actions'")))))
+          (add-before 'install 'fake-pkexec
+            (lambda _ (setenv "PKEXEC_UID" "-1")))
+          (add-after 'install 'wrap-spicy
+            (lambda* (#:key outputs #:allow-other-keys)
+              (wrap-program (search-input-file outputs "bin/spicy")
+                `("GST_PLUGIN_SYSTEM_PATH" ":"
+                  prefix (,(getenv "GST_PLUGIN_SYSTEM_PATH")))))))))
+    (native-inputs
+     (list `(,glib "bin")
+           intltool
+           pkg-config
+           python
+           python-pyparsing
+           python-six
+           vala))
+    (inputs
+     (list cyrus-sasl
+           glib-networking
+           gobject-introspection
+           json-glib
+           acl
+           libcap-ng
+           libepoxy
+           libxcb
+           mesa
+           polkit
+           pulseaudio
+           usbutils))
+    (propagated-inputs
+     (list gstreamer
+           gst-plugins-base
+           gst-plugins-good
+           spice-protocol
+           ;; These are required by the pkg-config files (needed for example
+           ;; when building GNOME Boxes).
+           gtk+
+           openssl-1.1
+           opus
+           libcacard
+           libjpeg-turbo
+           lz4
+           phodav
+           pixman
+           usbredir))
     (synopsis "Gtk client and libraries for SPICE remote desktop servers")
     (description "Gtk client and libraries for SPICE remote desktop servers.")
     (home-page "https://www.spice-space.org")
@@ -216,7 +228,7 @@ which allows users to view a desktop computing environment.")
 (define-public spice
   (package
     (name "spice")
-    (version "0.15.0")
+    (version "0.15.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -224,7 +236,7 @@ which allows users to view a desktop computing environment.")
                 "spice-server/spice-" version ".tar.bz2"))
               (sha256
                (base32
-                "1xd0xffw0g5vvwbq4ksmm3jjfq45f9dw20xpmi82g1fj9f7wy85k"))))
+                "0ym3n60gq0kzzknk5ir8ib09cxsak9hkv7mmgsyic69jmdkszadd"))))
     (build-system gnu-build-system)
     (propagated-inputs
       (list openssl-1.1 pixman spice-protocol))
@@ -270,7 +282,7 @@ Internet and from a wide variety of machine architectures.")
 (define-public spice-vdagent
   (package
     (name "spice-vdagent")
-    (version "0.21.0")
+    (version "0.22.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -278,9 +290,7 @@ Internet and from a wide variety of machine architectures.")
                 "spice-vdagent-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n8jlc1pv6mkry161y656b1nk9hhhminjq6nymzmmyjl7k95ymzx"))
-              (patches
-               (search-patches "spice-vdagent-glib-2.68.patch"))))
+                "18472sqr0gibzgzi48dpcbnvm78l05qrl5wv6xywqqj7r9dd3c4k"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -346,17 +356,11 @@ resolution scaling on graphical console window resize.")
                (base32
                 "1rrjlclm6ad63gah1fa4yfwrz4z6vgq2yrybbvzvvdbxrgl4vgzv"))))
     (build-system meson-build-system)
-    (arguments
-     (list #:configure-flags
-           ;; XXX: For some reason NSS is not automatically added on RUNPATH
-           ;; with newer versions of Meson (after 0.60).
-           #~(list (string-append "-Dc_link_args=-Wl,-rpath="
-                                  (search-input-directory
-                                   %build-inputs "lib/nss")))))
     (propagated-inputs
-     (list glib ; Requires: in the pkg-config file
-           nss ; Requires.private: in the pkg-config
-           pcsc-lite))       ; file
+     ;; The following inputs are required in the pkg-config file.
+     (list glib
+           nss
+           pcsc-lite))
     (native-inputs
      (list openssl
            `(,nss "bin")
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 701b3ea2a1..6b4fd47c0c 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2019 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2021, 2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2023 Simon Streit <simon@netpanic.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +35,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages ssh)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
@@ -130,7 +132,7 @@ file names.
 (define-public libssh
   (package
     (name "libssh")
-    (version "0.9.6")
+    (version "0.10.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.libssh.org/files/"
@@ -138,7 +140,16 @@ file names.
                                   "/libssh-" version ".tar.xz"))
               (sha256
                (base32
-                "16w2mc7pyv9mijjlgacbz8dgczc7ig2m6m70w1pld04vpn2zig46"))))
+                "0zfr9fy4vg1bmz1k836hg9wi20mmaz2sgw61s6464iv1mda2qf87"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; 'PATH_MAX' is undefined on GNU/Hurd; work around it.
+               #~(substitute* (find-files "examples" "\\.c$")
+                   (("#include \"examples_common\\.h\"" all)
+                    (string-append all "\n"
+                                   "#ifndef PATH_MAX\n"
+                                   "# define PATH_MAX 4096\n"
+                                   "#endif\n"))))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -187,7 +198,7 @@ a server that supports the SSH-2 protocol.")
 (define-public openssh
   (package
    (name "openssh")
-   (version "9.1p1")
+   (version "9.2p1")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://openbsd/OpenSSH/portable/"
@@ -196,7 +207,7 @@ a server that supports the SSH-2 protocol.")
                                       "openssh-trust-guix-store-directory.patch"))
              (sha256
               (base32
-               "126jzn5pxkf1dgzcb3lzpzab8airg0avnvr3y23kgqp3qw4m1y0r"))))
+               "0ingf6fxzg2fcf6k68bvh0lc460jn0macvf5w585zd2zcpqxnriz"))))
    (build-system gnu-build-system)
    (native-inputs (list groff pkg-config))
    (inputs `(("libedit" ,libedit)
@@ -319,7 +330,7 @@ Additionally, various channel-specific options can be negotiated.")
 (define-public guile-ssh
   (package
     (name "guile-ssh")
-    (version "0.16.2")
+    (version "0.16.3")
     (home-page "https://github.com/artyom-poptsov/guile-ssh")
     (source (origin
               (method git-fetch)
@@ -329,7 +340,7 @@ Additionally, various channel-specific options can be negotiated.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1rp5y1xjmsxplrzl0yf23g6rdjsw7ryh5pxs4pydpsryjjdwnf84"))))
+                "0b03aizjdj3g15xfkspgvy8k5jl8bgv4q7gwjwr3l2ibqkrm8vrz"))))
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -696,14 +707,14 @@ manipulating key files.")
 (define-public sshpass
   (package
     (name "sshpass")
-    (version "1.09")
+    (version "1.10")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/sshpass/sshpass/"
                            version "/sshpass-" version ".tar.gz"))
        (sha256
-        (base32 "1dwzqknpswa8vjlbwsx9rcq1j2a7px9h9i2anh09pzkz0mg6wx3i"))))
+        (base32 "1npfvxxqs77qg6l4s6cn8q3b98zwr9n8rb9vra2n3dfb0g10c4dd"))))
     (build-system gnu-build-system)
     (home-page "https://sourceforge.net/projects/sshpass/")
     (synopsis "Non-interactive password authentication with SSH")
@@ -941,3 +952,62 @@ Ed25519 keys.
 @item Modern browsers are supported.
 @end itemize")
     (license license:expat)))
+
+(define-public x11-ssh-askpass
+  (package
+    (name "x11-ssh-askpass")
+    (version "1.2.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       ;; The project home page seams to be offline.
+       (uri (string-append "https://pkgs.fedoraproject.org/repo/pkgs/openssh/"
+                           name "-" version ".tar.gz"
+                           "/8f2e41f3f7eaa8543a2440454637f3c3/"
+                           name "-" version ".tar.gz"))
+       (sha256
+        (base32 "124c1frwvdmg4nv8xqv435ibjhj2y8xc1bmfr6i8a8g75b1y63b2"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;no tests
+      #:make-flags
+      #~(list (string-append "BINDIR=" #$output "/libexec")
+              (string-append "MANDIR=" #$output "/share/man"))
+      #:configure-flags
+      #~(list (string-append "--mandir="
+                             "/usr/share/man/test")
+              (string-append "--libexecdir="
+                             "/usr/lib/ssh/test")
+              (string-append "--with-app-defaults-dir="
+                             "/usr/share/X11/app-defaults/test"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'configure 'xmkmf
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((imake #$(this-package-native-input "imake")))
+                (invoke "xmkmf")
+                (substitute* "Makefile"
+                  ;; These imake variables somehow remain undefined
+                  (("DefaultGcc2[[:graph:]]*Opt") "-O2")
+                  ;; Reset a few variable defaults that are set in imake
+                  ;; templates.
+                  ((imake) #$output)
+                  (("(MANPATH = )[[:graph:]]*" _ front)
+                   (string-append front #$output "/share/man"))))))
+          (add-after 'xmkmf 'make-includes
+            (lambda _
+              (invoke "make" "includes")))
+          (add-after 'install 'install/doc
+            (lambda _
+              (lambda _
+                (invoke "make"
+                        (string-append "MANDIR=" #$output "/share/man")
+                        "install.man")))))))
+    (native-inputs (list imake))
+    (inputs (list libxt))
+    (home-page "http://www.jmknoble.net/software/x11-ssh-askpass/")
+    (synopsis "Lightweight passphrase dialog for SSH")
+    (description "code{x11-ssh-askpass} is an X11-based pass-phrase dialog for
+use with OpenSSH.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/stalonetray.scm b/gnu/packages/stalonetray.scm
index 57cdc5e2d8..65732313fe 100644
--- a/gnu/packages/stalonetray.scm
+++ b/gnu/packages/stalonetray.scm
@@ -39,7 +39,7 @@
          "0k7xnpdb6dvx25d67v0crlr32cdnzykdsi9j889njiididc8lm1n"))))
     (inputs (list libx11))
     (build-system gnu-build-system)
-    (home-page "http://stalonetray.sourceforge.net")
+    (home-page "https://stalonetray.sourceforge.net")
     (synopsis "Standalone freedesktop.org and KDE systray implementation")
     (description
      "Stalonetray is a stand-alone freedesktop.org and KDE system
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 8d4f84208c..7ff56d7355 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -164,7 +164,7 @@ be output in text, PostScript, PDF or HTML.")
                (base32
                 "0aa2w4g5057vn1qjp954s2kwxfmy1h7p5yn56fyi7sz9nmaq69gr"))))
     (build-system gnu-build-system)
-    (home-page "http://mcmc-jags.sourceforge.net/")
+    (home-page "https://mcmc-jags.sourceforge.net/")
     (native-inputs
      (list gfortran lapack))
     (synopsis "Gibbs sampler")
@@ -508,17 +508,17 @@ D.V. Hinkley (1997, CUP), originally written by Angelo Canty for S.")
 (define-public r-mass
   (package
     (name "r-mass")
-    (version "7.3-58.1")
+    (version "7.3-58.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "MASS" version))
        (sha256
         (base32
-         "080l4gqkaw9r4s7b0q9hda489rn24p4ma5xf4g8405qkzgif817p"))))
+         "0jvqvlmb1fjqhcnix1blj7hjiyxy7m1rfjdv3sr2nhyad19rvh5m"))))
     (properties `((upstream-name . "MASS")))
     (build-system r-build-system)
-    (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
+    (home-page "https://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "Support functions and datasets for Venables and Ripley's MASS")
     (description
      "This package provides functions and datasets for the book \"Modern
@@ -529,18 +529,18 @@ Applied Statistics with S\" (4th edition, 2002) by Venables and Ripley.")
 (define-public r-class
   (package
     (name "r-class")
-    (version "7.3-20")
+    (version "7.3-21")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "class" version))
        (sha256
         (base32
-         "10slys2jny4k2j8l8k97hwrwd6ryzajfnzywqpq2yc9bqxmh8nz6"))))
+         "1pydmsy4glvdbvm8ci76br69qhlfgjq8irwm4jk63nnjli54068c"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-mass))
-    (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
+    (home-page "https://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "R functions for classification")
     (description
      "This package provides various functions for classification, including
@@ -573,14 +573,14 @@ Hubert, based on Kaufman and Rousseeuw (1990) \"Finding Groups in Data\".")
 (define-public r-codetools
   (package
     (name "r-codetools")
-    (version "0.2-18")
+    (version "0.2-19")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "codetools" version))
        (sha256
         (base32
-         "0a2c115glq8jxixwfigrpvjabhxchn9r4mc40y41dg9dg6wsd7hs"))))
+         "1ardg28x2cvilkgsj6bdvvp5snsy3rj7jbz9bpcdlcvzr1kybdy4"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/codetools")
     (synopsis "Code analysis tools for R")
@@ -644,7 +644,7 @@ estimation) corresponding to the book: Wand, M.P. and Jones, M.C. (1995)
                (base32
                 "1b87fmyjzbg854vpi03my1p25n3d0bchhwsdm2frblxppn98sf12"))))
     (build-system r-build-system)
-    (home-page "http://lattice.r-forge.r-project.org/")
+    (home-page "https://lattice.r-forge.r-project.org/")
     (synopsis "High-level data visualization system")
     (description
      "The lattice package provides a powerful and elegant high-level data
@@ -668,7 +668,7 @@ also flexible enough to handle most nonstandard requirements.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-lattice))
-    (home-page "http://Matrix.R-forge.R-project.org/")
+    (home-page "https://Matrix.R-forge.R-project.org/")
     (synopsis "Sparse and dense matrix classes and methods")
     (description
      "This package provides classes and methods for dense and sparse matrices
@@ -678,13 +678,13 @@ and operations on them using LAPACK and SuiteSparse.")
 (define-public r-nlme
   (package
     (name "r-nlme")
-    (version "3.1-161")
+    (version "3.1-162")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "nlme" version))
        (sha256
-        (base32 "0pw9kwhac6a01zcchl4xxy2rk3ghzc9kxxn6kjkh2z4iq41a1z9a"))))
+        (base32 "0rywlbbg76c8nx62h0fj49va1y59z1qrkfjc9ihs5bslambs4vds"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-lattice))
@@ -731,7 +731,7 @@ distributions beyond the exponential family.")
         (base32
          "1l73v6l9ma0vsg4za3c6i3d6yjj7bpdmakbmrzp7205hbkxyp6nj"))))
     (build-system r-build-system)
-    (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
+    (home-page "https://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "Feed-forward neural networks and multinomial log-linear models")
     (description
      "This package provides functions for feed-forward neural networks with a
@@ -760,16 +760,16 @@ classification, regression and survival trees.")
 (define-public r-spatial
   (package
     (name "r-spatial")
-    (version "7.3-15")
+    (version "7.3-16")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatial" version))
        (sha256
         (base32
-         "1vwc7ingskdj1k4nq418x9yl3cw699pckb9xh5a1yp3g9plknqg5"))))
+         "01p42q72mb8b4fdm75723nj64r3l0d8px1l9fyklihay9jk6arg4"))))
     (build-system r-build-system)
-    (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
+    (home-page "https://www.stats.ox.ac.uk/pub/MASS4/")
     (synopsis "Functions for kriging and point pattern analysis")
     (description
      "This package provides functions for kriging and point pattern
@@ -780,14 +780,14 @@ analysis.")
 (define-public r-survival
   (package
     (name "r-survival")
-    (version "3.4-0")
+    (version "3.5-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "survival" version))
        (sha256
         (base32
-         "04pqkklbjpcqaq49h49j0vw18q4hi31ry3szzf84vzk5fba273m4"))))
+         "12nwvfa921m546acxiidpif6g1laz1h1vxbwc45ww69wdc51gcmq"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-matrix))
@@ -837,7 +837,7 @@ curves, Cox models, and parametric accelerated failure time models.")
     (build-system r-build-system)
     (native-inputs
      (list r-knitr))
-    (home-page "http://ff.r-forge.r-project.org")
+    (home-page "https://ff.r-forge.r-project.org")
     (synopsis "Class for vectors of 1-bit booleans")
     (description
      "This package provides bitmapped vectors of booleans (no @code{NA}s),
@@ -860,7 +860,7 @@ binary booleans, @code{TRUE} and @code{FALSE} can be stored with 1 bit only.")
     (build-system r-build-system)
     (propagated-inputs
      (list r-bit))
-    (home-page "http://ff.r-forge.r-project.org/")
+    (home-page "https://ff.r-forge.r-project.org/")
     (synopsis "S3 class for vectors of 64 bit integers")
     (description
      "The bit64 package provides serializable S3 atomic 64 bit (signed)
@@ -958,7 +958,7 @@ effects of different types of color-blindness.")
     (arguments
      `(#:tests? #f
        #:configure-flags (list "--no-build-vignettes")))
-    (home-page "http://dirk.eddelbuettel.com/code/digest.html")
+    (home-page "https://dirk.eddelbuettel.com/code/digest.html")
     (synopsis "Create cryptographic hash digests of R objects")
     (description
      "This package contains an implementation of a function @code{digest()} for
@@ -1138,20 +1138,20 @@ designed by Cynthia Brewer as described at http://colorbrewer2.org")
 (define-public r-sendmailr
   (package
     (name "r-sendmailr")
-    (version "1.3-2")
+    (version "1.4-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sendmailR" version))
        (sha256
         (base32
-         "0yyxxzhm88xipk68vzqxcckcpjgl9lajnqyxxbkp1i29jcpfgdfa"))))
+         "1balci88r2ci51xdh5zaqm3ss3vnry8pbkx2qngppc7n2gy932sv"))))
     (properties `((upstream-name . "sendmailR")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-base64enc))
-    (home-page
-     "https://cran.r-project.org/web/packages/sendmailR")
+    (native-inputs (list r-knitr))
+    (home-page "https://cran.r-project.org/web/packages/sendmailR")
     (synopsis "Send email using R")
     (description
      "This package contains a simple SMTP client which provides a portable
@@ -1161,14 +1161,14 @@ solution for sending email, including attachments, from within R.")
 (define-public r-stringi
   (package
     (name "r-stringi")
-    (version "1.7.8")
+    (version "1.7.12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringi" version))
        (sha256
         (base32
-         "074b8wky3dhm4vcdqliwz6cqw20ah2x4dcasvnidilbfrnqii2ak"))))
+         "02g0464sbprrbjlacx727p9ad1s5nbxl2mnvfmm9h7q000lsrs7g"))))
     (build-system r-build-system)
     (inputs (list icu4c))
     (native-inputs (list pkg-config))
@@ -1300,21 +1300,21 @@ agnes cluster diagrams.")
 (define-public r-gdtools
   (package
     (name "r-gdtools")
-    (version "0.2.4")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gdtools" version))
        (sha256
         (base32
-         "0a1hqg5b484ji4g9dy0zi06wn9w7pk6hiy5ljzc1zgj9mbhlr21j"))))
+         "1lkyzavgdivxmpvyqx81caizy1yrr8xp47qzgmfcn6k4inrn51jl"))))
     (build-system r-build-system)
     (native-inputs
      (list pkg-config))
     (inputs
      (list cairo fontconfig freetype zlib))
     (propagated-inputs
-     (list r-rcpp r-systemfonts))
+     (list r-gfonts r-htmltools r-memoise r-rcpp r-systemfonts))
     (home-page "https://cran.r-project.org/web/packages/gdtools")
     (synopsis "Utilities for graphical rendering")
     (description
@@ -1325,14 +1325,14 @@ and to generate base64 encoded string from raster matrix.")
 (define-public r-svglite
   (package
     (name "r-svglite")
-    (version "2.1.0")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "svglite" version))
        (sha256
         (base32
-         "16wwhfmp9agdz9azslgd8qs77fllhdp6p0m304qfh2p8qy8gah5d"))))
+         "0mmcipyqq4hs8fnb7301gdhl9ic4m80f1fp2x6z5vc61xrlh2w28"))))
     (build-system r-build-system)
     (inputs
      (list libpng zlib))
@@ -1412,13 +1412,13 @@ R/DBMS implementations.")
 (define-public r-bh
   (package
     (name "r-bh")
-    (version "1.78.0-0")
+    (version "1.81.0-1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "BH" version))
               (sha256
                (base32
-                "1cwc1q8w9d6i81nclgi7lycsnpj0dcbxlv9rdb0f04r0d03rv7iv"))))
+                "0r7zjxpbm2paliplprwf9769a57clqaiskiiadiy10gissnqn77m"))))
     (build-system r-build-system)
     (home-page "https://github.com/eddelbuettel/bh")
     (synopsis "R package providing subset of Boost headers")
@@ -1430,13 +1430,13 @@ for template use among CRAN packages.")
 (define-public r-evaluate
   (package
     (name "r-evaluate")
-    (version "0.19")
+    (version "0.20")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "evaluate" version))
               (sha256
                (base32
-                "1k36mpb12nvcr5bv3n6591shhr38d6zpfwgj643cgprd8l0kvk39"))))
+                "1w7zi9cvbn3751hprfpb7waia4faqn8xa8q9jrc0nq03avldkx9m"))))
     (build-system r-build-system)
     (home-page "https://github.com/hadley/evaluate")
     (synopsis "Parsing and evaluation tools for R")
@@ -1450,13 +1450,13 @@ adapted for other output formats, such as HTML or LaTeX.")
 (define-public r-formatr
   (package
     (name "r-formatr")
-    (version "1.13")
+    (version "1.14")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "formatR" version))
               (sha256
                (base32
-                "09z5wvbhrr2s2d196cxwzvjn0qr6pf4czrfqwdzqgqrdpwrxq1xj"))))
+                "0k271w4bhlj7r9igkiyfw7d7bg30s2mn4sr4alb8f9w57wnapfjf"))))
     (build-system r-build-system)
     (native-inputs
      (list r-knitr))
@@ -1516,13 +1516,13 @@ data derived from /etc/mime.types in UNIX-type systems.")
 (define-public r-markdown
   (package
     (name "r-markdown")
-    (version "1.4")
+    (version "1.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "markdown" version))
               (sha256
                (base32
-                "0ziwirplzjcci2km6wln035qfd2irjl58r77kl98r8s257kavqz0"))))
+                "05lq5r698bk4qs2qklvri3rlbdss9w58n5y91yf3k6x5bzwh6580"))))
     (build-system r-build-system)
     ;; Skip check phase because the tests require the r-knitr package to be
     ;; installed. This prevents installation failures. Knitr normally
@@ -1530,7 +1530,7 @@ data derived from /etc/mime.types in UNIX-type systems.")
     ;; package.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     (list r-commonmark r-mime r-xfun))
+     (list r-commonmark r-xfun))
     (home-page "https://github.com/rstudio/markdown")
     (synopsis "Markdown rendering for R")
     (description
@@ -1542,13 +1542,13 @@ syntax that can be converted to XHTML or other formats.")
 (define-public r-yaml
   (package
     (name "r-yaml")
-    (version "2.3.6")
+    (version "2.3.7")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "yaml" version))
               (sha256
                (base32
-                "09msw6k0hsazjna53ya3c6p8alfajs7cw5k2rm62xvslcs6rvlax"))))
+                "1aw0cvaqw8a0d1r3cplj5kiabkcyz8fghcpi0ax8mi7rw0cv436j"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/yaml/")
     (synopsis "Methods to convert R data to YAML and back")
@@ -1560,16 +1560,16 @@ emitter (http://pyyaml.org/wiki/LibYAML) for R.")
 (define-public r-knitr
   (package
     (name "r-knitr")
-    (version "1.41")
+    (version "1.42")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "knitr" version))
               (sha256
                (base32
-                "1izv1m56ngc20wx4da9mmr5ll6ah14ka8dqn9i3pd7ah70lmya81"))))
+                "1wrha732mhlc3la61ibm5l1b5qygswwfwjpmvq0s2kcy12hg2i4k"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-evaluate r-highr r-stringr r-xfun r-yaml))
+     (list r-evaluate r-highr r-xfun r-yaml))
     (home-page "https://yihui.org/knitr/")
     (synopsis "General-purpose package for dynamic report generation in R")
     (description
@@ -1623,13 +1623,13 @@ the execution time of R expressions.")
 (define-public r-pryr
   (package
     (name "r-pryr")
-    (version "0.1.5")
+    (version "0.1.6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "pryr" version))
               (sha256
                (base32
-                "02vp1y7zhv22id43j5c0gdcgn9171dyypqp8rqrlc3w5a7n565kv"))))
+                "013p2xxd51kr9ddx051cvn45mzgj44fm47nkchdb13l0885a7hb8"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-codetools r-lobstr r-rcpp r-stringr))
@@ -1811,16 +1811,17 @@ and printing capabilities than traditional data frames.")
 (define-public r-dplyr
   (package
     (name "r-dplyr")
-    (version "1.0.10")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "dplyr" version))
               (sha256
                (base32
-                "0aqggs0gk95b326gzqjab8i27cna1hzik3zi5l2kkr5l4zv3kdis"))))
+                "1msfp29lbddwdv8ibc2nkan0g1g4y4w5fws6802v6h6x95g57c4c"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-generics
+     (list r-cli
+           r-generics
            r-glue
            r-lifecycle
            r-magrittr
@@ -1847,14 +1848,14 @@ database.")
 (define-public r-dbplyr
   (package
     (name "r-dbplyr")
-    (version "2.2.1")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dbplyr" version))
        (sha256
         (base32
-         "1xqdrfpl5l94cw717d90xx1hs5aswl6s38wr7qximzk8q12gdwx6"))))
+         "1zqz2ml4pgi93miz5flxmm7cjlh4w33hi45phyvv89i9gxp4a387"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-assertthat
@@ -1951,13 +1952,13 @@ and density estimation.")
 (define-public r-chron
   (package
     (name "r-chron")
-    (version "2.3-58")
+    (version "2.3-59")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "chron" version))
               (sha256
                (base32
-                "1l36yy9jq6hxkg9rfbsggwhjsb33scb56di0klmw4c73rllcczq5"))))
+                "1xh18s4mip3xc9vn2xw6a2gpz09s3zmxw8sarn6qbrs2gjwschxr"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/chron")
     (synopsis "Chronological R objects which can handle dates and times")
@@ -2005,7 +2006,7 @@ and fast file reading.")
     (build-system r-build-system)
     (native-inputs
      (list r-knitr)) ; for vignettes
-    (home-page "http://xtable.r-forge.r-project.org/")
+    (home-page "https://xtable.r-forge.r-project.org/")
     (synopsis "Export R tables to LaTeX or HTML")
     (description
      "This package provides tools to export R data as LaTeX and HTML tables.")
@@ -2110,7 +2111,7 @@ building design matrices.")
            python-matplotlib))
     (native-inputs
      (list python-cython python-nose python-sphinx))
-    (home-page "http://statsmodels.sourceforge.net/")
+    (home-page "https://statsmodels.sourceforge.net/")
     (synopsis "Statistical modeling and econometrics in Python")
     (description
      "Statsmodels is a Python package that provides a complement to scipy for
@@ -2142,18 +2143,18 @@ chain.")
 (define-public r-ade4
   (package
     (name "r-ade4")
-    (version "1.7-20")
+    (version "1.7-22")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "ade4" version))
         (sha256
           (base32
-            "0yxd9dgci3rzz807wsb76wis12ipgjv9w86smdyz20jrnn45giyx"))))
+            "1d4knc1c1hha4gwcakbllzmff4g0mh56y058dn6wp9m2hd7gaz80"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-mass r-pixmap r-sp))
-    (home-page "http://pbil.univ-lyon1.fr/ADE-4")
+     (list r-mass r-pixmap r-rcpp r-rcpparmadillo r-sp))
+    (home-page "https://pbil.univ-lyon1.fr/ADE-4")
     (synopsis "Multivariate data analysis and graphical display")
     (description
      "The ade4 package contains data analysis functions to analyze ecological
@@ -2538,13 +2539,13 @@ functions make it easy to control additional request components.")
 (define-public r-git2r
   (package
     (name "r-git2r")
-    (version "0.30.1")
+    (version "0.31.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "git2r" version))
               (sha256
                (base32
-                "0h58djc9cim8iskkyhdxllbpf6ycl5zj9g4fp70k57k5qzfi7nc5"))))
+                "0vfn7kkkarha63vv3k8hi9y5snfsdpwdrbmych560126z9w95nzi"))))
     (build-system r-build-system)
     (inputs
      (list libgit2 zlib))
@@ -2748,7 +2749,7 @@ scaling functions for R.")
            r-mass
            r-png
            r-rcolorbrewer))
-    (home-page "http://latticeextra.r-forge.r-project.org/")
+    (home-page "https://latticeextra.r-forge.r-project.org/")
     (synopsis "Extra graphical utilities based on lattice")
     (description
      "Building on the infrastructure provided by the lattice package, this
@@ -2759,13 +2760,13 @@ well as additional utilities such as panel and axis annotation functions.")
 (define-public r-rcpparmadillo
   (package
     (name "r-rcpparmadillo")
-    (version "0.11.4.2.1")
+    (version "0.11.4.3.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppArmadillo" version))
               (sha256
                (base32
-                "172vz9j1hck6iwk56hgsrg91n4f11df1n6hy1crbv3cb53rkyjgn"))))
+                "0pk14pv3q3ykdj8pcgj3z1mkfiw9lbn5ny01hydc0mx98yj4lc2w"))))
     (properties `((upstream-name . "RcppArmadillo")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2851,13 +2852,13 @@ certain criterion, e.g., it contains a certain regular file.")
 (define-public r-rmarkdown
   (package
     (name "r-rmarkdown")
-    (version "2.19")
+    (version "2.20")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "rmarkdown" version))
         (sha256
-          (base32 "14lvvdq3n95qbl7nrqlym1lp05i17m6f9mx3ly35iip83p2s9hir"))))
+          (base32 "178mc3dqm11y58k8jdhm1yi11bbl1h7bls9d8f94ngmlzjdhbxyp"))))
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2998,13 +2999,13 @@ engine (version 3.8.8.2) is included.")
 (define-public r-rcurl
   (package
     (name "r-rcurl")
-    (version "1.98-1.9")
+    (version "1.98-1.10")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RCurl" version))
               (sha256
                (base32
-                "1iff8cbfrz94mp1m82ai448zhipm8xv6zlxmbysd5hsycxqli3gj"))))
+                "1m7i0q9scrh2bfr0nqs029052kznhlv3siz9055pzdvgig7jnqjs"))))
     (properties `((upstream-name . "RCurl")))
     (build-system r-build-system)
     (arguments
@@ -3024,7 +3025,7 @@ if (certs != \"\") { .opts = merge.list(.opts, list(cainfo=certs)) }
      (list curl zlib))
     (propagated-inputs
      (list r-bitops))
-    (home-page "http://www.omegahat.net/RCurl")
+    (home-page "https://www.omegahat.net/RCurl")
     (synopsis "General network client interface for R")
     (description
      "The package allows one to compose general HTTP requests and provides
@@ -3054,7 +3055,7 @@ ldap, and also supports cookies, redirects, authentication, etc.")
      (list libxml2 zlib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://www.omegahat.net/RSXML")
+    (home-page "https://www.omegahat.net/RSXML")
     (synopsis "Tools for parsing and generating XML within R")
     (description
      "Many approaches for both reading and creating XML (and HTML)
@@ -3820,14 +3821,14 @@ path-wise fashion.")
 (define-public r-pkgmaker
   (package
     (name "r-pkgmaker")
-    (version "0.32.2")
+    (version "0.32.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pkgmaker" version))
        (sha256
         (base32
-         "14ggsd24n5g5rvn0wl4w90ipxzmywqikh28llj89q6kpxwnv4iff"))))
+         "0c7njqwi3szr7dhw3vglgjf2y1hwv0imgb4wfgp42pizsqmacin6"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-assertthat
@@ -3915,14 +3916,14 @@ Stochastic Neighbor Embedding using a Barnes-Hut implementation.")
 (define-public r-e1071
   (package
     (name "r-e1071")
-    (version "1.7-12")
+    (version "1.7-13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "e1071" version))
        (sha256
         (base32
-         "1ksxbkf2zb1hs353vc1qr8n2l7v0vcldn2prdnk79nr1lp855q4i"))))
+         "0bvbgcbj8a5z3rv4z4cx6dlwhk374fwd8l1jkq7slsbfmy8y356s"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-class r-proxy))
@@ -4142,7 +4143,7 @@ vignettes.")
     (build-system r-build-system)
     (native-inputs
      (list gfortran))
-    (home-page "http://mvtnorm.R-forge.R-project.org")
+    (home-page "https://mvtnorm.R-forge.R-project.org")
     (synopsis "Package for multivariate normal and t-distributions")
     (description "This package can compute multivariate normal and
 t-probabilities, quantiles, random deviates and densities.")
@@ -4258,24 +4259,25 @@ selection.")
 (define-public r-tidyr
   (package
     (name "r-tidyr")
-    (version "1.2.1")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidyr" version))
        (sha256
         (base32
-         "1bv1rvnbbfdqf78qfbawq3yxjhjfdy0mgcla6b17bp336rnpcwb9"))))
+         "178a9sb07rph4mh7cz004ls0g7d4b7jk065m4ycfrlzxcs9jnlwd"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-cpp11
+     (list r-cli
+           r-cpp11
            r-dplyr
-           r-ellipsis
            r-magrittr
            r-glue
            r-lifecycle
            r-purrr
            r-rlang
+           r-stringr
            r-tidyselect
            r-tibble
            r-vctrs))
@@ -4318,14 +4320,14 @@ It uses and relies on grid graphics and formal (S4) classes and methods.")
 (define-public r-purrr
   (package
     (name "r-purrr")
-    (version "1.0.0")
+    (version "1.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "purrr" version))
        (sha256
         (base32
-         "1hm6lylx05s43rdk9q7xqdcydz495aim16c7xlw94lyw7v5l81kz"))))
+         "18ibdyd9dyqba1w208pplgasmjpg5dhg4dni8165ld9r6nz12y8a"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli r-lifecycle r-magrittr r-rlang r-vctrs))
@@ -4464,14 +4466,14 @@ data behind them) can be viewed and modified in a web browser.")
 (define-public r-biased-urn
   (package
    (name "r-biased-urn")
-   (version "2.0.8")
+   (version "2.0.9")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "BiasedUrn" version))
      (sha256
       (base32
-       "0mmq8zf52p6y76nqm0fcvvg8bdlrfl12mlfr9fznz9zvm26pypi0"))))
+       "02bb81x1hfvhm6qlcvp88bdpm1fhqak9cjbqz1r7fhg2qfxjpims"))))
    (properties `((upstream-name . "BiasedUrn")))
    (build-system r-build-system)
    (home-page "https://www.agner.org/random/")
@@ -4975,14 +4977,14 @@ closely-packed, non-overlapping points.")
 (define-public r-sourcetools
   (package
     (name "r-sourcetools")
-    (version "0.1.7")
+    (version "0.1.7-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sourcetools" version))
        (sha256
         (base32
-         "1jnjir0q2dj724f1mjm6p5h77yzyx6xcqy9r2g7gmcxkxw349627"))))
+         "1l9i9ram12pjks8h2gzmj119wf4ixwyhljsfv289dn8dgbdjp0cn"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/sourcetools")
     (synopsis "Tools for reading, tokenizing and parsing R code")
@@ -5393,7 +5395,7 @@ can be efficiently implemented directly in the R language.")
      (list gfortran))
     (propagated-inputs
      (list r-deoptimr))
-    (home-page "http://robustbase.r-forge.r-project.org/")
+    (home-page "https://robustbase.r-forge.r-project.org/")
     (synopsis "Basic robust statistics")
     (description
      "This package analyzes data with robust methods such as
@@ -5577,14 +5579,14 @@ VGLMs can be loosely thought of as multivariate generalised linear models.")
 (define-public r-pbapply
   (package
     (name "r-pbapply")
-    (version "1.6-0")
+    (version "1.7-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pbapply" version))
        (sha256
         (base32
-         "0qbzqgxz3lm97y0k9v2radqblzb4r5zkfrjw5wj1a91dvxz3xhg8"))))
+         "1h06nz312si2hsy2klrmy6w46q341bl3q5v61g133450w0qykf34"))))
     (build-system r-build-system)
     (home-page "https://github.com/psolymos/pbapply")
     (synopsis "Adding progress bar to apply functions")
@@ -5610,7 +5612,7 @@ showing the progress is useful e.g. bootstrap.")
      (list r-rcpp))
     (inputs
      (list gfortran))
-    (home-page "http://optimizer.r-forge.r-project.org")
+    (home-page "https://optimizer.r-forge.r-project.org")
     (synopsis "Derivative-free optimization algorithms by quadratic approximation")
     (description
       "This package provides a derivative-free optimization by quadratic approximation
@@ -5780,20 +5782,19 @@ C++ library for numerical linear algebra and RcppEigen glue.")
 (define-public r-pbkrtest
   (package
     (name "r-pbkrtest")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pbkrtest" version))
        (sha256
         (base32
-         "1if7msv9i7jhg1as1f7m81a95dnwhwj3yfs24bqr0f6r0ch4b8xj"))))
+         "1qxnd4pfpsq762x81s3vkw09wdwpfj25bba5474g7z506pqasycf"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-broom
            r-dplyr
            r-lme4
-           r-magrittr
            r-mass
            r-matrix
            r-numderiv))
@@ -6075,14 +6076,14 @@ is supported.")
 (define-public r-lubridate
   (package
     (name "r-lubridate")
-    (version "1.9.0")
+    (version "1.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lubridate" version))
        (sha256
         (base32
-         "0flh3arja7al9xznj5jvicadvq1kb2s63zyg63wlx2bii8gh8dmr"))))
+         "1brjq18lbnn2r6qiysmps9276rx691a36qiw66x8hrqv55vwxa8d"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-generics r-timechange))
@@ -6111,7 +6112,7 @@ easy and fun.")
         (base32
          "1pf554vb902vavgqc4c0kgghywbgcvr3lkkr414bxngavcd60lil"))))
     (build-system r-build-system)
-    (home-page "http://strimmerlab.org/software/fdrtool/")
+    (home-page "https://strimmerlab.org/software/fdrtool/")
     (synopsis "Estimation of false discovery rates and higher criticism")
     (description
      "This package provides tools to estimate tail area-based false discovery
@@ -6130,24 +6131,22 @@ and the corresponding decision threshold.")
 (define-public r-forcats
   (package
     (name "r-forcats")
-    (version "0.5.2")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "forcats" version))
        (sha256
         (base32
-         "0hb1m16il1n8nmhp7hx8k2xxq8bd8kp3qqs2pw7xm0iz311hm9hl"))))
+         "0ki5c84n7xm4iw4aj629l51hm84f6p5wa3bw88d1wbnr15wibfy5"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
-           r-ellipsis
            r-glue
            r-lifecycle
            r-magrittr
            r-tibble
-           r-rlang
-           r-withr))
+           r-rlang))
     (native-inputs
      (list r-knitr))
     (home-page "https://forcats.tidyverse.org")
@@ -6481,7 +6480,7 @@ functions.")
      (list java-jtransforms))
     (native-inputs
      (list java-junit))
-    (home-page "http://jdistlib.sourceforge.net/")
+    (home-page "https://jdistlib.sourceforge.net/")
     (synopsis "Java library of statistical distributions")
     (description "JDistlib is the Java Statistical Distribution Library, a
 Java package that provides routines for various statistical distributions.")
@@ -6908,16 +6907,17 @@ normal model.")
 (define-public r-naniar
   (package
     (name "r-naniar")
-    (version "0.6.1")
+    (version "1.0.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "naniar" version))
               (sha256
                (base32
-                "0l3l2x85v3srilww483kpgp4zlwixyml257b0cqly8kcpwawlinm"))))
+                "1x4ljc6yji7312g6cg1shc85jqv5kaf2zlf5q7sdmqh3wryskvf2"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-dplyr
+     (list r-cli
+           r-dplyr
            r-norm
            r-forcats
            r-ggplot2
@@ -6928,6 +6928,7 @@ normal model.")
            r-tibble
            r-tidyr
            r-upsetr
+           r-vctrs
            r-viridis
            r-visdat))
     (native-inputs
@@ -7181,7 +7182,7 @@ highlighted in all linked plots.  Interactions with the plots are controlled
 by the mouse, menus and dialog boxes.  An object-oriented programming system
 is used to allow menus, dialogs, and the response to mouse actions to be
  customized.")
-      (home-page "http://homepage.divms.uiowa.edu/~luke/xls/xlsinfo/")
+      (home-page "https://homepage.divms.uiowa.edu/~luke/xls/xlsinfo/")
       (license license:expat))))
 
 (define-public r-rlrsim
diff --git a/gnu/packages/sugar.scm b/gnu/packages/sugar.scm
index c9b8433f01..64d01bbd90 100644
--- a/gnu/packages/sugar.scm
+++ b/gnu/packages/sugar.scm
@@ -20,6 +20,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -32,6 +33,7 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages search)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages time)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xorg)
@@ -80,6 +82,11 @@
               (substitute* "bin/sugar.in"
                 (("exec python3")
                  (string-append "exec " (which "python3"))))
+              (substitute* "src/jarabe/main.py"
+                (("'metacity'")
+                 (string-append "'" (search-input-file inputs "/bin/metacity") "'"))
+                (("'metacity-message")
+                 (string-append "'" (search-input-file inputs "/bin/metacity-message"))))
               (substitute* "extensions/cpsection/datetime/model.py"
                 (("/usr/share/zoneinfo/zone.tab")
                  (search-input-file inputs "/share/zoneinfo/zone.tab")))
@@ -90,16 +97,24 @@
                  (dirname
                   (search-input-file inputs
                                      "/share/mobile-broadband-provider-info/serviceproviders.xml"))))
+              ;; XXX: spawn_command_line_sync is not used correctly here, so
+              ;; we need to patch invocations.
+              (substitute* '("extensions/cpsection/aboutcomputer/model.py"
+                             "src/jarabe/model/brightness.py")
+                (("spawn_command_line_sync\\(cmd\\)")
+                 "spawn_command_line_sync(cmd, 0)"))
+              ;; XXX: The brightness component crashes, so we disable it here.
+              (substitute* "src/jarabe/main.py"
+                (("brightness.get_instance\\(\\)") ""))
               ;; TODO: these locations should be set to places that exist on
               ;; Guix System.
               #;
               (substitute* "extensions/cpsection/background/model.py"
                 (("\\('/usr', 'share', 'backgrounds'\\)")
                  "('TODO')"))
-              #;
               (substitute* "src/jarabe/view/viewhelp.py"
-                (("/usr/share/sugar/activities/Help.activity")
-                 "TODO"))))
+                (("/usr/share/sugar/activities/")
+                 "/run/current-system/profile/share/sugar/activities/"))))
           (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
             (lambda* (#:key inputs outputs #:allow-other-keys)
               (for-each
@@ -107,27 +122,38 @@
                  (wrap-program executable
                    `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")
                                           ,(python:site-packages inputs outputs)))
-                   `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))
+                   `("GI_TYPELIB_PATH" prefix
+                     (,(getenv "GI_TYPELIB_PATH")))))
                (find-files (string-append #$output "/bin") "^sugar.*")))))))
     (inputs
-     (list gtk+
+     (list bash-minimal
+           gtk+
+           metacity
            mobile-broadband-provider-info
            python
-           sugar-artwork
-           sugar-datastore
            sugar-toolkit-gtk3
            tzdata))
+    ;; Some packages are propagated so that they can be used with gobject
+    ;; introspection at runtime; others are propagated for their dbus
+    ;; services.
     (propagated-inputs
-     (list gstreamer
+     (list gsettings-desktop-schemas
+           gstreamer
            gtk+
            gtksourceview-3
            libsoup-minimal-2
            libwnck
            libxklavier
            network-manager
+           python-gwebsockets
+           sugar-artwork                ;for cursor theme
+           sugar-datastore              ;for org.laptop.sugar.DataStore
            telepathy-glib
-           webkitgtk-with-libsoup2
-           python-gwebsockets))
+           ;; This is for org.freedesktop.Telepathy.AccountManager at runtime
+           telepathy-mission-control
+           ;; This is for the UPowerGlib namespace
+           upower
+           webkitgtk-with-libsoup2))
     (native-inputs
      (list autoconf automake
            gettext-minimal
@@ -231,7 +257,8 @@ activities and other Sugar components.")
                     (search-input-file outputs "bin/copy-to-journal")
                     (search-input-file outputs "bin/datastore-service"))))))))
     (inputs
-     (list python
+     (list bash-minimal
+           python
            sugar-toolkit-gtk3))
     (propagated-inputs
      (list python-dbus
@@ -271,20 +298,23 @@ and metadata, and the journal with querying and full text search.")
         ((guix build python-build-system) #:prefix python:)
         (guix build utils))
       #:phases
-      '(modify-phases %standard-phases
-         (add-after 'unpack 'patch-build-system
-           (lambda _
-             (substitute* "autogen.sh"
-               (("^\"\\$srcdir/configure" m)
-                (string-append "#" m)))))
-         (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (wrap-program (search-input-file outputs "bin/sugar-activity3")
-               `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")
-                                      ,(python:site-packages inputs outputs)))
-               `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))))
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-build-system
+            (lambda _
+              (substitute* "autogen.sh"
+                (("^\"\\$srcdir/configure" m)
+                 (string-append "#" m)))))
+          (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (wrap-program (search-input-file outputs "bin/sugar-activity3")
+                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH")
+                                       ,(python:site-packages inputs outputs)))
+                `("GI_TYPELIB_PATH" prefix
+                  (,(getenv "GI_TYPELIB_PATH")
+                   ,(string-append #$output "/lib/girepository-1.0")))))))))
     (inputs
      (list alsa-lib
+           bash-minimal
            libice
            libsm
            libx11
@@ -295,6 +325,8 @@ and metadata, and the journal with querying and full text search.")
      ;; The gi typelib files are needed by users of this library.
      (list gdk-pixbuf
            gobject-introspection
+           gstreamer ;for speech
+           gst-plugins-espeak
            gtk+
            (librsvg-for-system)
 
@@ -305,7 +337,10 @@ and metadata, and the journal with querying and full text search.")
            python-dbus
            python-decorator
            python-pygobject
-           python-six))
+           python-six
+
+           telepathy-glib
+           webkitgtk-with-libsoup2))
     (native-inputs
      (list autoconf automake
            gettext-minimal
@@ -320,3 +355,196 @@ and metadata, and the journal with querying and full text search.")
 build activities and other Sugar components.  This is the GTK+ 3 binding of
 the Sugar Toolkit.")
     (license license:lgpl2.1+)))
+
+
+(define-public sugar-browse-activity
+  (package
+    (name "sugar-browse-activity")
+    (version "207")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/sugarlabs/browse-activity")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "01p1gfdw9fhn92didc9sq23n6a3krs6findbbmicijz91kx8kfb2"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:test-target "check"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-reference-to-gschema-compiler
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "browser.py"
+                (("glib-compile-schemas")
+                 (search-input-file inputs "/bin/glib-compile-schemas")))))
+          (add-after 'unpack 'patch-launcher
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "activity/activity.info"
+                (("exec = sugar-activity3")
+                 (string-append "exec = "
+                                (search-input-file inputs "/bin/sugar-activity3"))))))
+          (replace 'install
+            (lambda _
+              (setenv "HOME" "/tmp")
+              (invoke "python" "setup.py" "install"
+                      (string-append "--prefix=" #$output)))))))
+    ;; All these libraries are accessed via gobject introspection.
+    (propagated-inputs
+     (list evince
+           gobject-introspection
+           gtk+
+           (librsvg-for-system)
+           libsoup-minimal-2
+           python-pygobject
+           sugar-toolkit-gtk3
+           telepathy-glib
+           webkitgtk-with-libsoup2))
+    (inputs
+     (list (list glib "bin")))
+    (native-inputs
+     (list gettext-minimal))
+    (home-page "https://help.sugarlabs.org/browse.html")
+    (synopsis "Sugar activity to browse the internet")
+    (description "Browse is a web browser activity for the Sugar desktop.")
+    (license (list license:cc0       ;metadata
+                   license:lgpl2.0+
+                   license:gpl2+
+                   license:gpl3+))))
+
+(define-public sugar-help-activity
+  (let ((commit "492531e95a4c60af9b85c79c59c24c06c2cd4bb3")
+        (revision "1"))
+    (package
+      (name "sugar-help-activity")
+      (version (git-version "20" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/sugarlabs/help-activity")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0awjbqyc9f74dx0d7fgjk42vfsygxr8jhwqiv4hpggqcawc02xv8"))))
+      (build-system python-build-system)
+      (arguments
+       (list
+        #:test-target "check"
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'patch-launcher
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "activity/activity.info"
+                  (("exec = sugar-activity3")
+                   (string-append "exec = "
+                                  (search-input-file inputs "/bin/sugar-activity3"))))))
+            (replace 'build
+              (lambda _ (invoke "make" "html")))
+            (replace 'install
+              (lambda _
+                (invoke "python" "setup.py" "install"
+                        (string-append "--prefix=" #$output)))))))
+      (native-inputs
+       (list sugar-toolkit-gtk3
+             python-sphinx))
+      (home-page "https://github.com/sugarlabs/help-activity")
+      (synopsis "Sugar activity for accessing documentation and manuals")
+      (description "This is an activity for the Sugar environment which aims
+to provide users with easy access to documentation and manuals.")
+      (license license:gpl3+))))
+
+(define-public sugar-jukebox-activity
+  (let ((commit "e11f40c94c1c6302d3e36ddf4dc8101732ffb9d9")
+        (revision "1"))
+    (package
+      (name "sugar-jukebox-activity")
+      (version (git-version "36" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/sugarlabs/jukebox-activity")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0gm1cj4vrwwdriyshd27w6vc0palwpg9pnnab5axinrnkzczyk1v"))))
+      (build-system python-build-system)
+      (arguments
+       (list
+        #:test-target "check"
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'patch-launcher
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "activity/activity.info"
+                  (("exec = sugar-activity3")
+                   (string-append "exec = "
+                                  (search-input-file inputs "/bin/sugar-activity3"))))))
+            (replace 'install
+              (lambda _
+                (setenv "HOME" "/tmp")
+                (invoke "python" "setup.py" "install"
+                        (string-append "--prefix=" #$output)))))))
+      ;; All these libraries are accessed via gobject introspection.
+      (propagated-inputs
+       (list gtk+
+             gstreamer
+             gst-plugins-base
+             sugar-toolkit-gtk3))
+      (inputs
+       (list gettext-minimal))
+      (home-page "https://help.sugarlabs.org/jukebox.html")
+      (synopsis "Media player for the Sugar learning environment")
+      (description "Jukebox is the media player to play different kinds of
+audio and video files including online streams.  It also supports playlists
+like @file{.m3u} and @file{.pls}.")
+      (license license:gpl2+))))
+
+(define-public sugar-typing-turtle-activity
+  (package
+    (name "sugar-typing-turtle-activity")
+    (version "32")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/sugarlabs/typing-turtle-activity")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0shadv9wgddjvl97kvsqb8iw1wmmfw5lzcqk78hd70pzvh4c1hmd"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:test-target "check"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-reference-to-executables
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "keyboard.py"
+                (("setxkbmap")
+                 (search-input-file inputs "/bin/setxkbmap")))))
+          (add-after 'unpack 'patch-launcher
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "activity/activity.info"
+                (("exec = sugar-activity3")
+                 (string-append "exec = "
+                                (search-input-file inputs "/bin/sugar-activity3"))))))
+          (replace 'install
+            (lambda _
+              (invoke "python" "setup.py" "install"
+                      (string-append "--prefix=" #$output)))))))
+    (native-inputs
+     (list gettext-minimal sugar-toolkit-gtk3))
+    (inputs
+     (list setxkbmap))
+    (home-page "https://help.sugarlabs.org/en/typing_turtle.html")
+    (synopsis "Learn typing")
+    (description "Need some help typing?  In this activity for the Sugar
+environment you will learn the best way to hold your hands in order for you to
+become a faster typist.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index a90a5d51e8..51024ef487 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -54,7 +54,7 @@
                          perl))
                      ;;("python" ,python-wrapper)
     (inputs (list pcre))
-    (home-page "http://swig.org/")
+    (home-page "https://swig.org/")
     (synopsis
      "Interface compiler that connects C/C++ code to higher-level languages")
     (description
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index 3ce5f2cee0..b0d8b4274e 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -54,6 +54,7 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages kde-frameworks)
+  #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ocaml)
@@ -217,7 +218,7 @@ Nextcloud Server with your computer.")
 (define-public megacmd
   (package
     (name "megacmd")
-    (version "1.1.0")
+    (version "1.5.1")
     (source
       (origin
         (method git-fetch)
@@ -227,28 +228,29 @@ Nextcloud Server with your computer.")
               (recursive? #t)))
         (sha256
          (base32
-          "004j8m3xs6slx03g2g6wzr97myl2v3zc09wxnfar5c62a625pd53"))
+          "12v46jyxdgp2qqdpmd084d60hd5srjbgwpk082b3rp5dl7yg1rd8"))
         (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     ;; XXX: Disabling tests because they depend on libgtest.la from googletest,
     ;; which is not installed for unclear reasons.
     (arguments
-     `(#:tests? #f
-       #:configure-flags '("--with-pcre")))
+     (list #:tests? #f
+           #:configure-flags #~'("--with-pcre")))
     (native-inputs
      (list autoconf automake libtool))
     (inputs
-     `(("c-ares" ,c-ares)
-       ("crypto++" ,crypto++)
-       ("curl" ,curl)
-       ("freeimage" ,freeimage)
-       ("gtest" ,googletest)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("readline" ,readline)
-       ("sodium" ,libsodium)
-       ("sqlite3" ,sqlite)
-       ("zlib" ,zlib)))
+     (list c-ares
+           crypto++
+           curl
+           freeimage
+           googletest
+           libuv
+           openssl
+           pcre
+           readline
+           libsodium
+           sqlite
+           zlib))
     (home-page "https://mega.nz/cmd")
     (synopsis
      "Command Line Interactive and Scriptable Application to access mega.nz")
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 74c25ed3ab..5f98cb56b0 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -26,7 +26,6 @@
 (define-module (gnu packages syncthing)
   #:use-module (guix build-system go)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system trivial)
   #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix download)
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 506245fd17..769cc85d37 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -33,7 +33,6 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system qt)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index 29515c6eb9..e4dd488cb6 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -422,7 +422,7 @@ export, password protection and auto-saving.")
              (substitute* "Makefile"
                (("/man1") "/share/man/man1")))))
        #:tests? #f))  ; No "check" target.
-    (home-page "http://wtime.sourceforge.net")
+    (home-page "https://wtime.sourceforge.net")
     (synopsis
      "Command-line utility for tracking time spent on arbitrary tasks")
     (description
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 4cb562f583..2a5fbc6fe8 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -134,7 +134,7 @@
      (list tcl))
     (inputs
      (list tcllib))
-    (home-page "http://incrtcl.sourceforge.net/")
+    (home-page "https://incrtcl.sourceforge.net/")
     (synopsis "Object Oriented programming (OOP) extension for Tcl")
     (description
      "[incr Tcl] is a widely used object-oriented system for Tcl.  The name is
@@ -392,7 +392,7 @@ modules for Tk, all written in high-level Tcl.  Examples of provided widgets:
                             (assoc-ref %build-inputs "libxslt")
                             "/bin/xslt-config"))
        #:test-target "test"))
-    (home-page "http://tclxml.sourceforge.net/")
+    (home-page "https://tclxml.sourceforge.net/")
     (synopsis "Tcl library for XML parsing")
     (description "TclXML provides event-based parsing of XML documents.  The
 application may register callback scripts for certain document features, and
@@ -424,7 +424,7 @@ callback is evaluated.")
                                               "/lib"))))
     (inputs
      (list tcl tk))
-    (home-page "http://tclx.sourceforge.net/")
+    (home-page "https://tclx.sourceforge.net/")
     (synopsis "System programming extensions for Tcl")
     (description
      "Extended Tcl is oriented towards system programming tasks and large
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index ad9ca74a6c..c6ab5d312c 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -75,7 +75,6 @@
   #:use-module (guix build-system copy)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt))
 
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 02401b712d..51b135c99d 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -425,7 +425,7 @@ multi-seat support, a replacement for @command{mingetty}, and more.")
     (description
      "Libtermkey handles all the necessary logic to recognise special keys, UTF-8
 combining, and so on, with a simple interface.")
-    (home-page "http://www.leonerd.org.uk/code/libtermkey")
+    (home-page "https://www.leonerd.org.uk/code/libtermkey")
     (license license:expat)))
 
 (define-public mlterm
@@ -457,7 +457,7 @@ combining, and so on, with a simple interface.")
            libx11
            libxext
            libxft))
-    (home-page "http://mlterm.sourceforge.net/")
+    (home-page "https://mlterm.sourceforge.net/")
     (synopsis "Multi-Lingual TERMinal emulator")
     (description
      "mlterm is a multi-lingual terminal emulator.  It supports various complex
@@ -650,7 +650,7 @@ should be thread-safe.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://www.leonerd.org.uk/code/libvterm/"
+       (uri (string-append "https://www.leonerd.org.uk/code/libvterm/"
                            "libvterm-" version ".tar.gz"))
        (sha256
         (base32 "15y3y23kfpcda7n79ym3gp1abzn8mshxrad8s3gnhls82nfava15"))))
@@ -665,7 +665,7 @@ should be thread-safe.")
          (delete 'configure))))
     (native-inputs
      (list libtool perl))
-    (home-page "http://www.leonerd.org.uk/code/libvterm/")
+    (home-page "https://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
 or xterm-like terminal emulator.  It doesn't use any particular graphics
@@ -872,6 +872,40 @@ desktop environments.  It can be used as a standalone terminal and also has
 a server/client mode.")
     (license license:expat)))
 
+(define-public havoc
+  (package
+    (name "havoc")
+    (version "0.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ii8/havoc")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "052nfli8x4kvly2iwbk0w3i8gk82bz2p8i0ygkwxhy03m5187lnc"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ; no check target
+      #:make-flags #~(list (string-append "PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)           ; no configure script
+          (add-before 'build 'set-CC
+            (lambda _
+              (setenv "CC" #$(cc-for-target)))))))
+    (native-inputs
+     (list pkg-config wayland-protocols))
+    (inputs
+     (list libxkbcommon wayland))
+    (home-page "https://github.com/ii8/havoc")
+    (synopsis "Minimal terminal emulator for Wayland")
+    (description
+     "Havoc is a minimal terminal emulator for Wayland.")
+    (license license:expat)))
+
 (define-public sakura
   (package
     (name "sakura")
@@ -1509,8 +1543,9 @@ basic input/output.")
                        "-o" (string-append share "/terminfo/")
                        "extra/alacritty.info")
                ;; Install completions.
-               (install-file "extra/completions/alacritty.bash"
-                             (string-append out "/etc/bash_completion.d"))
+               (mkdir-p (string-append out "/etc/bash_completion.d"))
+               (copy-file "extra/completions/alacritty.bash"
+                          (string-append out "/etc/bash_completion.d/alacritty"))
                (install-file "extra/completions/_alacritty"
                              (string-append share "/zsh/site-functions"))
                (install-file "extra/completions/alacritty.fish"
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 3d8c71e62f..7172944c70 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -1224,7 +1224,7 @@ support (for use with a variety of encodings) is provided.")
               (base32
                "0yyk0dr4yms82mwy4dc03zf5igyhgcb65icdah042rk23rlpxygv")
               #:trivial? #t))
-    (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern/")
+    (home-page "https://www.gust.org.pl/projects/e-foundry/latin-modern/")
     (synopsis "Latin Modern family of fonts")
     (description "The Latin Modern fonts are derived from the famous Computer
 Modern fonts designed by Donald E. Knuth and described in Volume E of his
@@ -1245,7 +1245,7 @@ Computers & Typesetting series.")
               (base32
                "0gqdk8x3r1iz4n8j6r3pcqbwalxvkihayvmjfq4iv6hwb0pvys8z")
               #:trivial? #t))
-    (home-page "http://www.gust.org.pl/projects/e-foundry/latin-modern")
+    (home-page "https://www.gust.org.pl/projects/e-foundry/latin-modern")
     (synopsis "OpenType maths fonts for Latin Modern")
     (description "Latin Modern Math is a maths companion for the Latin Modern
 family of fonts, in OpenType format.  For use with LuaLaTeX or XeLaTeX,
@@ -4368,7 +4368,7 @@ polyglossia package rather than Babel.")
                "fonts/vf/cs/cs-a35/")
               (base32 "1ww5lrqja051fh0ygmfdyy5a6bhwq9k5zv857vwiqf5syvw5djps")
               #:trivial? #t))
-    (home-page "http://petr.olsak.net/cstex/")
+    (home-page "https://petr.olsak.net/cstex/")
     (synopsis "Czech/Slovak-tuned Computer Modern fonts")
     (description "This package provides Czech/Slovak-tuned Computer Modern
 fonts in the Metafont format; Type 1 format versions (csfonts-t1) are also
@@ -4384,7 +4384,7 @@ available.")
               (list "tex/csplain/base/")
               (base32 "0cgrwc8lgf2x2hq6bb4kqxw597card985zdd9ipn7k98mmwrxhz3")
               #:trivial? #t))
-    (home-page "http://petr.olsak.net/csplain-e.html")
+    (home-page "https://petr.olsak.net/csplain-e.html")
     (synopsis "Plain TeX multilanguage support")
     (description "CSplain is a small extension of basic Plain TeX macros from
 which the formats @code{csplain} and @code{pdfcsplain} can be generated.  It
@@ -5195,6 +5195,7 @@ corresponding italics: light, regular, medium, bold, ...")
                (base32
                 "157pplavvm2z97b3jl4x41w11k6q9wgy074mfg0dwmsx5lm328jy"))))
     (build-system texlive-build-system)
+    (propagated-inputs (list texlive-catchfile))
     (arguments '(#:tex-directory "latex/ifplatform"))
     (home-page "https://www.ctan.org/pkg/ifplatform")
     (synopsis "Conditionals to test which platform is being used")
@@ -5589,6 +5590,26 @@ capabilities of longtable and tabularx; an environment for including plain TeX
 in LaTeX documents; a jiffy to create slashed characters for physicists.")
     (license license:lppl)))
 
+(define-public texlive-catchfile
+  (let ((template (simple-texlive-package
+                   "texlive-catchfile"
+                   (list "/doc/latex/catchfile/"
+                         "/source/latex/catchfile/"
+                         "/tex/generic/catchfile/")
+                   (base32
+                    "1dpxy64hs0bjp8d2dmikflc995vazf7fi6z92w51fnj2fidgl8gx"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/catchfile")))
+      (home-page "https://ctan.org/macros/latex/contrib/catchfile")
+      (synopsis "Catch an external file into a macro")
+      (description
+       "Catchfile catches the contents of a file and puts it in a macro.")
+      (license license:lppl1.3+))))
+
 (define-public texlive-doi
   (package
     (inherit (simple-texlive-package
@@ -8578,7 +8599,7 @@ values (strings, macros, or numbers) pasted together.")
        ("perl-file-which" ,perl-file-which)
        ("perl-test-more" ,perl-test-most) ; FIXME: "more" would be sufficient
        ("perl-test-differences" ,perl-test-differences)))
-    (home-page "http://biblatex-biber.sourceforge.net/")
+    (home-page "https://biblatex-biber.sourceforge.net/")
     (synopsis "Backend for the BibLaTeX citation management tool")
     (description "Biber is a BibTeX replacement for users of biblatex.  Among
 other things it comes with full Unicode support.")
@@ -8651,7 +8672,7 @@ PDF documents.")
      (list poppler-qt5 qtbase-5 qtscript zlib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://www.xm1math.net/texmaker/")
+    (home-page "https://www.xm1math.net/texmaker/")
     (synopsis "LaTeX editor")
     (description "Texmaker is a program that integrates many tools needed to
 develop documents with LaTeX, in a single application.")
@@ -10673,6 +10694,37 @@ various fonts are provided.  An alternative package
 the bundle.")
       (license license:lppl1.3c))))
 
+(define-public texlive-minted
+  (let ((template (simple-texlive-package
+                   "texlive-minted"
+                   (list "/doc/latex/minted/"
+                         "/source/latex/minted/"
+                         "/tex/latex/minted/")
+                   (base32
+                    "13cjsjb3b04n9arwp46ayk8fcicylxq5g1864cpxl1lxjxh1yi0l"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/minted")))
+      (propagated-inputs (list python-pygments
+                               texlive-etoolbox
+                               texlive-fancyvrb
+                               texlive-fvextra
+                               texlive-latex-float
+                               texlive-latex-framed
+                               texlive-latex-ifplatform
+                               texlive-latex-newfloat
+                               texlive-lineno
+                               texlive-xstring))
+      (home-page "https://ctan.org/pkg/minted")
+      (synopsis "Highlight source code in LaTeX documents")
+      (description "This package facilitates expressive syntax highlighting in
+LaTeX using the Pygments library.  This package also provides options to
+customize the highlighted source code output using fancyvrb and fvextra.")
+      (license license:lppl1.3+))))
+
 (define-public texlive-caption
   (let ((template (simple-texlive-package
                    "texlive-caption"
@@ -11842,6 +11894,28 @@ span the full width of a page; it improves upon floatfig, and allows
 tables and figures to be set left/right or alternating on even/odd pages.")
     (license license:lppl1.3+)))
 
+(define-public texlive-fvextra
+  (let ((template (simple-texlive-package
+                   "texlive-fvextra"
+                   (list "/doc/latex/fvextra/"
+                         "/source/latex/fvextra/"
+                         "/tex/latex/fvextra/")
+                   (base32
+                    "0nawx1fh55yhqspy5jgss2qmwpqmikfrg7628smk931rph9nq0aa"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t)
+          "latex/fvextra")))
+      (home-page "https://ctan.org/macros/latex/contrib/fvextra")
+      (synopsis "Extensions and patches for fancyvrb")
+      (description
+       "This package provides several extensions to fancyvrb, including
+automatic line breaking and improved math mode.  It also patches some fancyvrb
+internals.")
+      (license license:lppl1.3+))))
+
 (define-public bibtool
   (package
     (name "bibtool")
@@ -11888,7 +11962,7 @@ and selecting references used in a publication.")
                              texlive-endnotes
                              texlive-etoolbox
                              texlive-fancyhdr
-                             texlive-generic-xstring
+                             texlive-xstring
                              texlive-graphics
                              texlive-latex-draftwatermark
                              texlive-latex-float
@@ -12188,6 +12262,8 @@ Polish of standard ``LaTeX names''.")
        "tex/latex/mdframed/")
       (base32 "1i5rm946wg43rjckxlfhx79zfx5cgd3bxk71206hd1dqkrgpdpa8")
       #:trivial? #t))
+    (propagated-inputs (list texlive-latex-needspace
+                             texlive-zref))
     (home-page "https://ctan.org/pkg/mdframed")
     (synopsis "Framed environments that can split at page boundaries")
     (description
@@ -12682,16 +12758,34 @@ which the command @code{\\tab} advances typesetting position to the next
 defined ``tab stop''.")
     (license license:lppl1.3+)))
 
-(define-public texlive-generic-soul
+(define-public texlive-soul
   (let ((template (simple-texlive-package
-                   "texlive-generic-soul"
-                   (list "/doc/generic/soul/"
-                         "/tex/generic/soul/")
+                   "texlive-soul"
+                   (list "doc/generic/soul/"
+                         "source/generic/soul/"
+                         "tex/generic/soul/")
                    (base32
-                    "11jdgvfpcv10y5j898495lf29k2m03x39v9jzb4v79w4cgxcmfps")
-                   #:trivial? #t)))
+                    "0ikipdswzsafi4rr6q9xh3hkxk2n2683ym1879qcax41xs6cizdl"))))
     (package
       (inherit template)
+      (outputs '("out" "doc"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t) "generic/soul")
+         ((#:build-targets _ '()) '(list "soul.ins"))
+         ((#:phases phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'chdir
+                (lambda _ (chdir "source/generic/soul/")))
+              (replace 'copy-files
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((origin (assoc-ref inputs "source"))
+                        (source (string-append #$output
+                                               "/share/texmf-dist/source"))
+                        (doc (string-append #$output:doc
+                                            "/share/texmf-dist/doc")))
+                    (copy-recursively (string-append origin "/source") source)
+                    (copy-recursively (string-append origin "/doc") doc))))))))
       (home-page "http://www.ctan.org/pkg/soul")
       (synopsis "Hyphenation for letterspacing, underlining, and more")
       (description
@@ -12703,9 +12797,11 @@ syllable.  The package itself does not support UTF-8 input in ordinary
 (PDF)LaTeX; some UTF-8 support is offered by package @code{soulutf8}.")
       (license license:lppl))))
 
-(define-public texlive-generic-xstring
+(define-deprecated-package texlive-generic-soul texlive-soul)
+
+(define-public texlive-xstring
   (let ((template (simple-texlive-package
-                   "texlive-generic-xstring"
+                   "texlive-xstring"
                    (list "/doc/generic/xstring/"
                          "/tex/generic/xstring/")
                    (base32
@@ -12724,6 +12820,8 @@ recurrences of, a substring.  The package works equally in Plain TeX and LaTeX
 (expandable) macros.")
       (license license:lppl1.3c))))
 
+(define-deprecated texlive-generic-xstring texlive-xstring)
+
 (define-public texlive-substr
   (package
     (inherit (simple-texlive-package
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index 9200083eab..bd0b22176e 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2015, 2016, 2017, 2019, 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2013, 2015-2017, 2019, 2022-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017, 2019, 2022 Efraim Flashner <efraim@flashner.co.il>
@@ -43,6 +43,7 @@
   #:use-module ((gnu packages hurd) #:select (hurd-target?))
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-compression)
   #:use-module (gnu packages readline))
 
 (define-public texinfo
@@ -111,7 +112,27 @@ is on expressing the content semantically, avoiding physical markup commands.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1balvbkdlwa8zwnzp4irkixq1zhps2wr6njmwj4ilgiqc4rfq4gj"))))))
+                "1balvbkdlwa8zwnzp4irkixq1zhps2wr6njmwj4ilgiqc4rfq4gj"))))
+    (inputs (modify-inputs (package-inputs texinfo)
+              (append perl-archive-zip)))        ;needed for 'tex2any --epub3'
+    (arguments
+     (substitute-keyword-arguments (package-arguments texinfo)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'install 'wrap-program
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let* ((out (assoc-ref outputs "out"))
+                       (bin (string-append out "/bin"))
+                       (program (string-append bin "/texi2any"))
+                       (zip (car (find-files
+                                  (assoc-ref inputs "perl-archive-zip")
+                                  (lambda (file stat)
+                                    (and (eq? 'directory (stat:type stat))
+                                         (string=? (basename file)
+                                                   "Archive")))
+                                  #:directories? #t))))
+                  (wrap-program program
+                    `("PERL5LIB" prefix (,(dirname zip)))))))))))))
 
 (define-public texinfo-5
   (package (inherit texinfo)
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index f9330008e7..e05a58c447 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2022 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;; Copyright © 2022 zamfofex <zamfofex@twdb.moe>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2022 Andy Tai <atai@atai.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -73,8 +74,8 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages hunspell)
-  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages lesstif)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
@@ -300,7 +301,7 @@ can load dynamic libraries.")
          "1pmr598xxxm9j9dl93kq4dv36zyw0q2dh6d7x07hf134y9hhlnj9"))))
     (build-system gnu-build-system)
     (inputs (list ncurses))
-    (home-page "http://joe-editor.sourceforge.net/")
+    (home-page "https://joe-editor.sourceforge.net/")
     (synopsis "Console screen editor")
     (description
      "JOE is a powerful console screen editor with a \"mode-less\" user
@@ -1256,57 +1257,6 @@ similar to vi/ex.")
 FreeDOS as a functional clone of the old MS-DOS program edlin.")
     (license license:gpl2+)))
 
-(define-public tree-sitter
-  (package
-    (name "tree-sitter")
-    (version "0.20.6")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/tree-sitter/tree-sitter")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1z20518snyg0zp75qgs5bxmzjqws4dd19vnp6sya494za3qp5b6d"))
-              (modules '((guix build utils)))
-              (snippet '(begin
-                          ;; Remove bundled ICU parts
-                          (delete-file-recursively "lib/src/unicode")
-                          #t))))
-    (build-system gnu-build-system)
-    (inputs (list icu4c))
-    (arguments
-     (list #:phases
-           '(modify-phases %standard-phases
-              (delete 'configure))
-           #:tests? #f ; there are no tests for the runtime library
-           #:make-flags
-           #~(list (string-append "PREFIX="
-                                  #$output)
-                   (string-append "CC="
-                                  #$(cc-for-target)))))
-    (home-page "https://tree-sitter.github.io/tree-sitter/")
-    (synopsis "Incremental parsing system for programming tools")
-    (description
-     "Tree-sitter is a parser generator tool and an incremental parsing
-library.  It can build a concrete syntax tree for a source file and efficiently
-update the syntax tree as the source file is edited.
-
-Tree-sitter aims to be:
-
-@itemize
-@item General enough to parse any programming language
-@item Fast enough to parse on every keystroke in a text editor
-@item Robust enough to provide useful results even in the presence of syntax errors
-@item Dependency-free so that the runtime library (which is written in pure C)
-can be embedded in any application
-@end itemize
-
-This package includes the @code{libtree-sitter} runtime library.
-")
-    (license license:expat)))
-
 (define-public mle
   (package
     (name "mle")
@@ -1431,3 +1381,35 @@ for configuration and extensibility.  It provides emulation modes for the
 key bindings of many editors (including Emacs and WordStar), and has syntax
 highlighting for dozens of languages.  Jed is very small and fast.")
     (license license:gpl2+)))
+
+(define-public xnedit
+  (package
+    (name "xnedit")
+    (version "1.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/xnedit/" name "-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0fw3li7hr47hckm9pl1njx30lfr6cx2p094ir8zmgr91hyxidgld"))))
+
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:make-flags #~(list (string-append "PREFIX=" #$output)
+                           (string-append "CC=" #$(cc-for-target)))
+      #:tests? #f                       ;no tests
+      #:phases #~(modify-phases %standard-phases
+                   (delete 'configure)
+                   (replace 'build
+                     (lambda* (#:key make-flags #:allow-other-keys)
+                       (apply invoke "make" "linux" make-flags))))))
+    (inputs (list motif pcre))
+    (native-inputs (list pkg-config))
+    (home-page "https://sourceforge.net/projects/xnedit/")
+    (synopsis "Fast and classic X11 text editor")
+    (description
+     "XNEdit is a fast and classic X11 text editor, based on NEdit,
+with full unicode support and antialiased text rendering.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 151add964e..e5d3a0efc0 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -79,25 +79,24 @@
 (define-public dos2unix
   (package
     (name "dos2unix")
-    (version "7.4.3")
+    (version "7.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://waterlan.home.xs4all.nl/dos2unix/"
                            "dos2unix-" version ".tar.gz"))
        (sha256
-        (base32 "0wnacvz99rnlx0ayf5jrxwljvh801r8k1ai3hj137yfsaqcv93dn"))))
+        (base32 "0vj3wix17vl7a85hg673qqyrhw9sbq0xiadbbij7v0nm1gdl3a18"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             (string-append "prefix=" (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)))) ; no configure script
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "prefix=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)))) ; no configure script
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("perl" ,perl)))
+     (list gettext-minimal perl))
     (home-page "https://waterlan.home.xs4all.nl/dos2unix.html")
     (synopsis "DOS/Mac to Unix and vice versa text file format converter")
     (description
@@ -852,7 +851,7 @@ categories.")
                             (invoke "sh" "test_all.sh")))))))))
     (native-inputs (list which)) ;for tests
     (inputs (list pcre))
-    (home-page "http://drmtools.sourceforge.net/")
+    (home-page "https://drmtools.sourceforge.net/")
     (synopsis "Utilities to manipulate text and binary files")
     (description "The drm_tools package contains the following commands:
 @table @command
@@ -1082,7 +1081,7 @@ names like Euro.
 @item Handling (bullet, decimal, letter, roman) lists along with (attempt at)
 indentation.
 @end itemize\n")
-    (home-page "http://docx2txt.sourceforge.net")
+    (home-page "https://docx2txt.sourceforge.net")
     (license license:gpl3+)))
 
 (define-public html2text
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 90147ed805..db436db186 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -52,6 +52,7 @@
   #:use-module (guix build-system python)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system trivial)
+  #:use-module (guix build-system meson)
   #:use-module ((guix search-paths) #:select ($SSL_CERT_DIR $SSL_CERT_FILE))
   #:use-module (gnu packages compression)
   #:use-module (gnu packages)
@@ -547,7 +548,7 @@ OpenSSL for TARGET."
   (package
     (inherit openssl-1.1)
     (name "openssl")
-    (version "1.1.1s")
+    (version "1.1.1t")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -560,12 +561,12 @@ OpenSSL for TARGET."
               (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
               (sha256
                (base32
-                "1amnwis6z2piqs022cpbcg828rql62yjnsqxnvdg0vzfc3kh3b65"))))))
+                "0fwxhlv7ary9nzg5mx07x1jj3wkbizxh56qy7l6bzp5iplj9pvld"))))))
 
 (define-public openssl-3.0
   (package
     (inherit openssl-1.1)
-    (version "3.0.7")
+    (version "3.0.8")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -578,7 +579,7 @@ OpenSSL for TARGET."
               (patches (search-patches "openssl-3.0-c-rehash-in.patch"))
               (sha256
                (base32
-                "0virbkcrw7nn3gr5r51z722gs1ppig0casj0c9pnj3i65829s143"))))
+                "0gjb7qjl2jnzs1liz3rrccrddxbk6q3lg8z27jn1xwzx72zx44vc"))))
     (arguments
      (substitute-keyword-arguments (package-arguments openssl-1.1)
        ((#:phases phases '%standard-phases)
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 6e5b3c0f60..9e26753857 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017, 2018, 2019, 2021 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2017, 2018, 2019, 2021, 2023 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
@@ -46,6 +46,7 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages pcre)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -256,7 +257,7 @@ networks.")
 (define-public onionshare-cli
   (package
     (name "onionshare-cli")
-    (version "2.5")
+    (version "2.6")
     (source
      (origin
        (method git-fetch)
@@ -265,7 +266,8 @@ networks.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16m5ll0v0qjbirwwzbzxg53kq4ry1n3ay5x0h8zkij73v3x0q864"))))
+        (base32 "1bhrp019a0923h7dnfxhgvgvdp81blvnsbnvzy34hp827abxf3ic"))
+       (patches (search-patches "onionshare-cli-async-mode.patch"))))
     (build-system python-build-system)
     (native-inputs
      (list python-pytest))
@@ -329,6 +331,11 @@ OnionShare.")
      (substitute-keyword-arguments (package-arguments onionshare-cli)
        ((#:phases phases)
         #~(modify-phases #$phases
+            (add-after 'unpack 'absolutize
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "desktop/onionshare/tab/mode/history.py"
+                  (("Popen\\(\\[\"xdg-open\"")
+                   (string-append "Popen([\"" (which "xdg-open") "\"")))))
             (replace 'change-directory
               (lambda _ (chdir "desktop/")))
             (add-after 'install 'install-data
@@ -353,15 +360,9 @@ OnionShare.")
                   (setenv "QT_QPA_PLATFORM" "offscreen")
                   (setenv "HOME" "/tmp")
                   (apply invoke "xvfb-run" "pytest" "-vv"
-                         (find-files "tests" "^test_gui.*\\.py$")))))))
-       ;; Most tests fail: "2 failed, 8 warnings, 44 errors in 6.06s", due to
-       ;; error "RuntimeError: Please destroy the Application singleton before
-       ;; creating a new Application instance." (see:
-       ;; https://github.com/onionshare/onionshare/issues/1603).
-       ((#:tests? _ #f)
-        #f)))
+                         (find-files "tests" "^test_gui.*\\.py$")))))))))
     (native-inputs
-     (list python-pytest))
+     (list python-pytest xvfb-run))
     (inputs
      ;; The desktop client uses onionshare-cli like a python module.  But
      ;; propagating onionshare-cli's inputs is not great, since a user would
@@ -372,7 +373,7 @@ OnionShare.")
                 python-shiboken-2
                 python-pyside-2
                 python-qrcode
-                xvfb-run)))
+                xdg-utils)))
     (description "OnionShare lets you securely and anonymously share files,
 host websites, and chat with friends using the Tor network.")))
 
diff --git a/gnu/packages/tree-sitter.scm b/gnu/packages/tree-sitter.scm
new file mode 100644
index 0000000000..8dda7737ca
--- /dev/null
+++ b/gnu/packages/tree-sitter.scm
@@ -0,0 +1,475 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
+;;; Copyright © 2022, 2023 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2022 muradm <mail@muradm.net>
+;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
+;;; Copyright © 2023 Andrew Tropin <andrew@trop.in>
+;;;
+;;; 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 tree-sitter)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages crates-graphics)
+  #:use-module (gnu packages crates-io)
+  #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages icu4c)
+  #:use-module (gnu packages node)
+  #:use-module (guix build-system cargo)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system tree-sitter)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module (guix utils))
+
+(define-public tree-sitter
+  (package
+    (name "tree-sitter")
+    (version "0.20.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/tree-sitter/tree-sitter")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1nv2a2hr22w8ix71b6rkkxv9rfvhvwlmyql0g6lva9qzj4vy50p4"))
+              (modules '((guix build utils)))
+              (snippet #~(begin
+                           ;; Remove bundled ICU parts
+                           (delete-file-recursively "lib/src/unicode")))))
+    (build-system gnu-build-system)
+    (inputs (list icu4c))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))
+           #:tests? #f ; there are no tests for the runtime library
+           #:make-flags
+           #~(list (string-append "PREFIX=" #$output)
+                   (string-append "CC=" #$(cc-for-target)))))
+    (home-page "https://tree-sitter.github.io/tree-sitter/")
+    (synopsis "Incremental parsing system for programming tools")
+    (description
+     "Tree-sitter is a parser generator tool and an incremental parsing
+library.  It can build a concrete syntax tree for a source file and
+efficiently update the syntax tree as the source file is edited.
+
+Tree-sitter aims to be:
+
+@itemize
+@item General enough to parse any programming language
+@item Fast enough to parse on every keystroke in a text editor
+@item Robust enough to provide useful results even in the presence of syntax errors
+@item Dependency-free so that the runtime library (which is written in pure C)
+can be embedded in any application
+@end itemize
+
+This package includes the @code{libtree-sitter} runtime library.")
+    (license license:expat)))
+
+(define-public tree-sitter-cli
+  (package
+    (inherit tree-sitter)
+    (name "tree-sitter-cli")
+    (source (origin
+              (inherit (package-source tree-sitter))
+              (snippet
+               #~(begin
+                   ;; Remove the runtime library code and dynamically link to
+                   ;; it instead.
+                   (delete-file-recursively "lib/src")
+                   (delete-file "lib/binding_rust/build.rs")
+                   (with-output-to-file "lib/binding_rust/build.rs"
+                     (lambda _
+                       (format #t "fn main() {~@
+                              println!(\"cargo:rustc-link-lib=tree-sitter\");~@
+                              }~%")))))))
+    (build-system cargo-build-system)
+    (inputs
+     (list tree-sitter graphviz node-lts))
+    (arguments
+     (list
+      #:cargo-test-flags
+      ''("--release" "--"
+         ;; Skip tests which rely on downloading grammar fixtures.  It is
+         ;; difficult to support such tests given upstream does not encode
+         ;; which version of the grammars are expected.
+         ;; Instead, we do run some tests for each grammar in the tree-sitter
+         ;; build-system, by running `tree-sitter test'.  This isn't as
+         ;; complete as running all tests from tree-sitter-cli, but it's a
+         ;; good compromise compared to maintaining two different sets of
+         ;; grammars (Guix packages vs test fixtures).
+         "--skip=tests::corpus_test"
+         "--skip=tests::highlight_test"
+         "--skip=tests::node_test"
+         "--skip=tests::parser_test"
+         "--skip=tests::pathological_test"
+         "--skip=tests::query_test"
+         "--skip=tests::tags_test"
+         "--skip=tests::test_highlight_test"
+         "--skip=tests::test_tags_test"
+         "--skip=tests::tree_test")
+      ;; We're only packaging the CLI program so we do not need to install
+      ;; sources.
+      #:install-source? #f
+      #:cargo-inputs
+      `(("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-anyhow" ,rust-anyhow-1)
+        ("rust-atty" ,rust-atty-0.2)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-difference" ,rust-difference-2)
+        ("rust-dirs" ,rust-dirs-3)
+        ("rust-html-escape" ,rust-html-escape-0.2)
+        ("rust-libloading" ,rust-libloading-0.7)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rustc-hash" ,rust-rustc-hash-1)
+        ("rust-semver" ,rust-semver-1)
+        ("rust-smallbitvec" ,rust-smallbitvec-2)
+        ("rust-thiserror" ,rust-thiserror-1)
+        ("rust-tiny-http" ,rust-tiny-http-0.8)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-walkdir" ,rust-walkdir-2)
+        ("rust-webbrowser" ,rust-webbrowser-0.5)
+        ("rust-which" ,rust-which-4))
+      #:cargo-development-inputs
+      `(("rust-pretty-assertions" ,rust-pretty-assertions-0.7))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-cargo-lock
+            (lambda _
+              (delete-file "Cargo.lock")))
+          (add-after 'unpack 'patch-node
+            (lambda _
+              (substitute* "cli/src/generate/mod.rs"
+                (("Command::new\\(\"node\"\\)")
+                 (string-append
+                  "Command::new(\"" #$node-lts "/bin/node\")")))))
+          (add-after 'unpack 'patch-dot
+            (lambda _
+              (substitute* "cli/src/util.rs"
+                (("Command::new\\(\"dot\"\\)")
+                 (string-append
+                  "Command::new(\"" #$graphviz "/bin/dot\")")))))
+          (replace 'install
+            (lambda _
+              (let ((bin (string-append #$output "/bin")))
+                (mkdir-p bin)
+                (install-file "target/release/tree-sitter" bin)))))))
+    (description "Tree-sitter is a parser generator tool and an incremental
+parsing library.  It can build a concrete syntax tree for a source file and
+efficiently update the syntax tree as the source file is edited.
+
+Tree-sitter aims to be:
+
+@enumerate
+@item General enough to parse any programming language.
+@item Fast enough to parse on every keystroke in a text editor.
+@item Robust enough to provide useful results even in the presence of syntax
+errors.
+@item Dependency-free so that the runtime library (which is written in pure C)
+can be embedded in any application.
+@end enumerate
+
+This package includes the @command{tree-sitter} command-line tool.")
+    (license license:expat)))
+
+(define (tree-sitter-delete-generated-files grammar-directories)
+  #~(begin
+      (use-modules (guix build utils))
+      (delete-file "binding.gyp")
+      (delete-file-recursively "bindings")
+      (for-each
+       (lambda (lang)
+         (with-directory-excursion lang
+           (delete-file "src/grammar.json")
+           (delete-file "src/node-types.json")
+           (delete-file "src/parser.c")
+           (delete-file-recursively "src/tree_sitter")))
+       '#$grammar-directories)))
+
+(define* (tree-sitter-grammar
+          name text hash version
+          #:key
+          (commit (string-append "v" version))
+          (repository-url
+           (format #f "https://github.com/tree-sitter/tree-sitter-~a" name))
+          (grammar-directories '("."))
+          (article "a")
+          (inputs '())
+          (license license:expat))
+  "Returns a package for Tree-sitter grammar.  NAME will be used with
+tree-sitter- prefix to generate package name and also for generating
+REPOSITORY-URL value if it's not specified explicitly, TEXT is a string which
+will be used in description and synopsis."
+  (let* ((multiple? (> (length grammar-directories) 1))
+         (grammar-names (string-append text " grammar" (if multiple? "s" "")))
+         (synopsis (string-append "Tree-sitter " grammar-names))
+         (description
+          (string-append "This package provides "
+                         (if multiple? "" article) (if multiple? "" " ")
+                         grammar-names " for the Tree-sitter library."))
+         (name (string-append "tree-sitter-" name)))
+    (package
+      (name name)
+      (version version)
+      (home-page repository-url)
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url repository-url)
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256 (base32 hash))
+                (snippet
+                 (tree-sitter-delete-generated-files grammar-directories))))
+      (build-system tree-sitter-build-system)
+      (arguments (list #:grammar-directories grammar-directories))
+      (inputs inputs)
+      (synopsis synopsis)
+      (description description)
+      (license license))))
+
+(define-public tree-sitter-html
+  (tree-sitter-grammar
+   "html" "HTML"
+   "1hg7vbcy7bir6b8x11v0a4x0glvqnsqc3i2ixiarbxmycbgl3axy"
+   "0.19.0"))
+
+(define-public tree-sitter-javascript
+  (tree-sitter-grammar
+   "javascript" "JavaScript(JSX)"
+   "175yrk382n2di0c2xn4gpv8y4n83x1lg4hqn04vabf0yqynlkq67"
+   "0.20.0"
+   #:commit "rust-0.20.0"))
+
+(define-public tree-sitter-typescript
+  (tree-sitter-grammar
+   "typescript" "TypeScript and TSX"
+   "07fl9d968lal0aqj4f0n16p3n94cjkgfp54wynfr8gbdkjss5v5x"
+   "0.20.1"
+   #:inputs (list tree-sitter-javascript)
+   #:grammar-directories '("typescript" "tsx")))
+
+(define-public tree-sitter-css
+  (tree-sitter-grammar
+   "css" "CSS"
+   "014jrlgi7zfza9g38hsr4vlbi8964i5p7iglaih6qmzaiml7bja2"
+   "0.19.0"))
+
+(define-public tree-sitter-c
+  (tree-sitter-grammar
+   "c" "C"
+   "1w03r4l773ki4iq2xxsc2pqxf3pjsbybq3xq4glmnsihgylibn8v"
+   "0.20.2"))
+
+(define-public tree-sitter-cpp
+  ;; There are a lot of additions, the last tag was placed more than 1 year ago
+  (let ((commit "56cec4c2eb5d6af3d2942e69e35db15ae2433740")
+        (revision "0"))
+      (tree-sitter-grammar
+       "cpp" "C++"
+       "0c5iwg9j6naivvr18glfp095x32nfl9hbw0q02rhh1b59fkpjs09"
+       (git-version "0.20.0" revision commit)
+       #:commit commit
+       #:inputs (list tree-sitter-c))))
+
+(define-public tree-sitter-elixir
+  ;; No tags at all, version in the source code is 0.19.0
+  (let ((commit "b20eaa75565243c50be5e35e253d8beb58f45d56")
+        (revision "0"))
+      (tree-sitter-grammar
+       "elixir" "Elixir"
+       "1i0c0xki3sv24649p0ws7xs2jagbwg7z7baz1960239bj94nl487"
+       (git-version "0.19.0" revision commit)
+       #:article "an"
+       #:repository-url "https://github.com/elixir-lang/tree-sitter-elixir"
+       #:commit commit
+       #:license (list license:asl2.0 license:expat))))
+
+(define-public tree-sitter-bash
+  (tree-sitter-grammar
+   "bash" "Bash"
+   "18c030bb65r50i6z37iy7jb9z9i8i36y7b08dbc9bchdifqsijs5"
+   "0.19.0"))
+
+(define-public tree-sitter-c-sharp
+  (tree-sitter-grammar
+   "c-sharp" "C#"
+   "054fmpf47cwh59gbg00sc0nl237ba4rnxi73miz39yqzcs87055r"
+   "0.19.1"))
+
+(define-public tree-sitter-elm
+  (tree-sitter-grammar
+   "elm" "Elm"
+   "0b5jpj8bnil1ylisyc4w48j8a30dyf3zylhidj73mlrb8rf7xm2s"
+   "5.6.3"
+   #:article "an"
+   #:repository-url "https://github.com/elm-tooling/tree-sitter-elm"))
+
+(define-public tree-sitter-go
+  ;; There are a lot of additions, the last tag was placed more than 1 year ago
+  (let ((commit "64457ea6b73ef5422ed1687178d4545c3e91334a")
+        (revision "0"))
+    (tree-sitter-grammar
+     "go" "Go"
+     "16d32m78y8jricba9xav35c9y0k2r29irj5xyqgq24323yln9jnz"
+     (git-version "0.19.1" revision commit)
+     #:commit commit)))
+
+(define-public tree-sitter-haskell
+  ;; There are a lot of additions, the last tag was placed more than 4 years ago
+  (let ((commit "3bdba07c7a8eec23f87fa59ce9eb2ea4823348b3")
+        (revision "0"))
+    (tree-sitter-grammar
+     "haskell" "Haskell"
+     "1hg19af1n510bndf5k5iri7dzb48xb527vispv1aapki4mvr98gx"
+     (git-version "0.14.0" revision commit)
+     #:commit commit)))
+
+(define-public tree-sitter-java
+  (tree-sitter-grammar
+   "java" "Java"
+   "1i9zfgqibinz3rkx6yws1wk49iys32x901dki65qihbxcmcfh341"
+   "0.20.0"))
+
+(define-public tree-sitter-json
+  (tree-sitter-grammar
+   "json" "JSON"
+   "06pjh31bv9ja9hlnykk257a6zh8bsxg2fqa54al7qk1r4n9ksnff"
+   "0.19.0"))
+
+(define-public tree-sitter-julia
+  (tree-sitter-grammar
+   "julia" "Julia"
+   "1pbnmvhy2gq4vg1b0sjzmjm4s2gsgdjh7h01yj8qrrqbcl29c463"
+   "0.19.0"))
+
+(define-public tree-sitter-ocaml
+  (tree-sitter-grammar
+   "ocaml" "OCaml (.ml and .mli)"
+   "021vnbpzzb4cca3ncd4qhzy583vynhndn3qhwayxrpgdl61m44i6"
+   "0.20.1"
+   #:grammar-directories '("ocaml" "interface")))
+
+(define-public tree-sitter-php
+  ;; There are a lot of additions, the last tag was placed more than 1 year ago
+  (let ((commit "f860e598194f4a71747f91789bf536b393ad4a56")
+        (revision "0"))
+    (tree-sitter-grammar
+     "php" "PHP"
+     "02yc5b3qps8ghsmy4b5m5kldyr5pnqz9yw663v13pnz92r84k14g"
+     (git-version "0.19.0" revision commit)
+     #:commit commit)))
+
+(define-public tree-sitter-python
+  ;; There are a lot of additions, the last tag was placed a while ago
+  (let ((commit "9e53981ec31b789ee26162ea335de71f02186003")
+        (revision "0"))
+    (tree-sitter-grammar
+     "python" "Python"
+     "1lv3pgb7h2a0f121897r0lwc228rjwb77y3a6g3ghifx1rgbwvqg"
+     (git-version "0.20.0" revision commit)
+     #:commit commit)))
+
+(define-public tree-sitter-r
+  ;; No tags
+  (let ((commit "80efda55672d1293aa738f956c7ae384ecdc31b4")
+        (revision "0"))
+    (tree-sitter-grammar
+     "r" "R"
+     "1n7yxi2wf9xj8snw0b85a5w40vhf7x1pwirnwfk78ilr6hhz4ix9"
+     (git-version "0.0.1" revision commit)
+     #:commit commit)))
+
+(define-public tree-sitter-ruby
+  ;; There are a lot of additions, the last tag was placed more than 1 year ago
+  (let ((commit "206c7077164372c596ffa8eaadb9435c28941364")
+        (revision "0"))
+    (tree-sitter-grammar
+     "ruby" "Ruby"
+     "1pqr24bj68lgi1w2cblr8asfby681l3032jrppq4n9x5zm23fi6n"
+     (git-version "0.19.0" revision commit)
+     #:commit commit)))
+
+(define-public tree-sitter-rust
+  (tree-sitter-grammar
+   "rust" "Rust"
+   "149jhy01mqvavwa8jlxb8bnn7sxpfq2x1w35si6zn60b7kqjlx8f"
+   "0.20.3"))
+
+(define-public tree-sitter-clojure
+  (tree-sitter-grammar
+   "clojure" "Clojure"
+   "0bgd9g1j4ww45g0l0aa1jac49421z95cc2rhcgqmgx7nzn94rszp"
+   "0.0.11"
+   #:repository-url "https://github.com/sogaiu/tree-sitter-clojure"))
+
+(define-public tree-sitter-markdown
+  ;; No tags
+  (let ((commit "ef3caf83663ea97ad9e88d891424fff6a20d878d")
+        (revision "0"))
+    (tree-sitter-grammar
+     "markdown" "Markdown (CommonMark Spec v0.30)"
+     "0p9mxpvkhzsxbndda36zx5ycd6g2r2qs60gpx4y56p10lhgzlyqj"
+     "0.1.1"
+     #:repository-url "https://github.com/MDeiml/tree-sitter-markdown"
+     #:grammar-directories '("tree-sitter-markdown"
+                             "tree-sitter-markdown-inline")
+     #:commit commit)))
+
+(define-public tree-sitter-markdown-gfm
+  ;; Not updated for more than 1 year, can be deprecated when gfm will be
+  ;; implemented in tree-sitter-markdown
+  (tree-sitter-grammar
+   "markdown-gfm" "Markdown (CommonMark Spec v0.29-gfm)"
+   "1a2899x7i6dgbsrf13qzmh133hgfrlvmjsr3bbpffi1ixw1h7azk"
+   "0.7.1"
+   #:repository-url "https://github.com/ikatyang/tree-sitter-markdown"))
+
+(define-public tree-sitter-org
+  ;; There are a lot of additions, the last tag was placed a while ago
+  (let ((commit "081179c52b3e8175af62b9b91dc099d010c38770")
+        (revision "0"))
+    (tree-sitter-grammar
+     "org" "Org"
+     "0h9krbaq9j6ijf86sg0w221s0zbpbx5f7m1l0whzjahbrqpnqgxl"
+     (git-version "1.3.1" revision commit)
+     #:repository-url "https://github.com/milisims/tree-sitter-org"
+     #:commit commit)))
+
+(define-public tree-sitter-scheme
+  ;; There are a lot of additions, the last tag was placed a while ago
+  (let ((commit "67b90a365bebf4406af4e5a546d6336de787e135")
+        (revision "0"))
+    (tree-sitter-grammar
+     "scheme" "Scheme (R5RS, R6RS)"
+     "1pvxckza1kdfwqs78ka3lbwldrwkgymb31f5x1fq5vyawg60wxk8"
+     (git-version "0.2.0" revision commit)
+     #:repository-url "https://github.com/6cdh/tree-sitter-scheme"
+     #:commit commit)))
+
+(define-public tree-sitter-racket
+  ;; No tags
+  (let ((commit "1a5df0206b25a05cb1b35a68d2105fc7493df39b")
+        (revision "0"))
+    (tree-sitter-grammar
+     "racket" "Racket"
+     "06gwn3i7swhkvbkgxjlljdjgvx8y1afafbqmpwya70r9z635593h"
+     (git-version "0.1.0" revision commit)
+     #:repository-url "https://github.com/6cdh/tree-sitter-racket"
+     #:commit commit)))
diff --git a/gnu/packages/tv.scm b/gnu/packages/tv.scm
index 3927aca776..f8b7c4c696 100644
--- a/gnu/packages/tv.scm
+++ b/gnu/packages/tv.scm
@@ -68,7 +68,7 @@
            zlib))
     (native-inputs
      (list pkg-config))
-    (home-page "http://tvtime.sourceforge.net")
+    (home-page "https://tvtime.sourceforge.net")
     (synopsis "Television viewer")
     (description
      "Tvtime processes the input from your video capture card and
diff --git a/gnu/packages/unicode.scm b/gnu/packages/unicode.scm
index 857af13d71..afb9546966 100644
--- a/gnu/packages/unicode.scm
+++ b/gnu/packages/unicode.scm
@@ -65,7 +65,7 @@
                        '("LineBreakTest.txt"
                          "WordBreakTest.txt"
                          "GraphemeBreakTest.txt")))))))
-    (home-page "http://vimgadgets.sourceforge.net/libunibreak/")
+    (home-page "https://vimgadgets.sourceforge.net/libunibreak/")
     (synopsis "Unicode line breaking and word breaking algorithms")
     (description
      "Libunibreak is an implementation of the line breaking and word
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index ff78829e4e..df94dc8f8b 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -113,7 +113,7 @@ over IRC, instant messaging, network games, and most server software.")
      ;; https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00312.html.
      `(#:tests? #f
        #:configure-flags '("--disable-static")))
-    (home-page "http://pupnp.sourceforge.net")
+    (home-page "https://pupnp.sourceforge.net")
     (synopsis "Portable SDK for UPnP Devices")
     (description
      "The portable SDK for UPnP Devices (libupnp) provides developers with an
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 422e542918..bd08dffc83 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2022 Denis Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,7 +97,7 @@ also use Valgrind to build new tools.")
 (define-public valgrind/interactive
   (package/inherit
    valgrind
-   (version "3.17.0")
+   (version "3.20.0")
    (source (origin
              (method url-fetch)
              (uri (list (string-append "https://sourceware.org/pub/valgrind"
@@ -105,9 +106,8 @@ also use Valgrind to build new tools.")
                                        "/valgrind-" version ".tar.bz2")))
              (sha256
               (base32
-               "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
+               "1ipkp6yi202pml2r0qwflysmq86dkqd8iyi1y51d6y70vcqw0dl5"))
              (patches (search-patches
-                       "valgrind-enable-arm.patch"
                        "valgrind-fix-default-debuginfo-path.patch"))))
    (inputs
     ;; GDB is needed to provide a sane default for `--db-command'.
@@ -148,19 +148,3 @@ also use Valgrind to build new tools.")
                       (string-length "/usr/lib/debug")
                       1))))))))))
    (properties '())))
-
-(define-public valgrind-3.20
-  (package
-    (inherit valgrind/interactive)
-    (version "3.20.0")
-    (source (origin
-              (inherit (package-source valgrind/interactive))
-              (uri (list (string-append "https://sourceware.org/pub/valgrind"
-                                        "/valgrind-" version ".tar.bz2")
-                         (string-append "ftp://sourceware.org/pub/valgrind"
-                                        "/valgrind-" version ".tar.bz2")))
-              (sha256
-               (base32
-                "1ipkp6yi202pml2r0qwflysmq86dkqd8iyi1y51d6y70vcqw0dl5"))
-              (patches (search-patches
-                        "valgrind-fix-default-debuginfo-path.patch"))))))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 3ce886d3f3..bd9fea1e9c 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2016, 2019, 2021 Eric Bavier <bavier@posteo.net>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2023 Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2018, 2020, 2021, 2022 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
@@ -67,6 +67,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils)
   #:use-module (guix packages)
+  #:use-module (guix deprecation)
   #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -668,7 +669,11 @@ everything from small to very large projects with speed and efficiency.")
            perl
            zlib))))
 
-(define-public git-minimal/fixed
+;;; The symbol git-minimal/fixed should be used when git-minimal needs fixes
+;;; (security or else) and this deprecation could be removed.
+(define-deprecated/public-alias git-minimal/fixed git-minimal/pinned)
+
+(define-public git-minimal/pinned
   ;; Version that rarely changes, depended on by Graphene/GTK+.
   (package/inherit git-minimal
     (version "2.33.1")
@@ -797,7 +802,7 @@ to GitHub contributions calendar.")
 (define-public libgit2
   (package
     (name "libgit2")
-    (version "1.4.3")
+    (version "1.5.1")
     (source (origin
               ;; Since v1.1.1, release artifacts are no longer offered (see:
               ;; https://github.com/libgit2/libgit2/discussions/5932#discussioncomment-1682729).
@@ -808,18 +813,11 @@ to GitHub contributions calendar.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02x1a4zrzpzjd0yxnsi8njh5hgihc1iy1v4r0fnl8m4ckcgp6x2s"))
+                "04ypzpicpgq1wh6anwcmjjyh2b854lvjhxq0hq2hbsx7kb14qc1b"))
               (modules '((guix build utils)))
               (snippet
                '(begin
-                  (delete-file-recursively "deps")
-
-                  ;; The "refs:revparse::date" test is time-dependent: it
-                  ;; assumes "HEAD@{10 years ago}" matches a specific commit.
-                  ;; See <https://github.com/libgit2/libgit2/pull/6299>.
-                  (substitute* "tests/refs/revparse.c"
-                    (("test_object.*10 years ago.*" all)
-                     (string-append "// " all "\n")))))))
+                  (delete-file-recursively "deps")))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -861,10 +859,10 @@ write native speed custom Git applications in any language with bindings.")
     ;; GPLv2 with linking exception
     (license license:gpl2)))
 
-(define-public libgit2-1.3
+(define-public libgit2-1.4
   (package
     (inherit libgit2)
-    (version "1.3.0")
+    (version "1.4.5")
     (source (origin
               (inherit (package-source libgit2))
               (method git-fetch)
@@ -874,7 +872,22 @@ write native speed custom Git applications in any language with bindings.")
               (file-name (git-file-name "libgit2" version))
               (sha256
                (base32
-                "0vgpb2175a5dhqiy1iwywwppahgqhi340i8bsvafjpvkw284vazd"))))
+                "0q754ipc6skagszi93lcy6qr09ibavivm2q5i5fhpdblvlnv2p7x"))))))
+
+(define-public libgit2-1.3
+  (package
+    (inherit libgit2-1.4)
+    (version "1.3.2")
+    (source (origin
+              (inherit (package-source libgit2-1.4))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libgit2/libgit2")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name "libgit2" version))
+              (sha256
+               (base32
+                "1dngga8jq419z6ps65wpmh2jihcf70k6r98pb1m1yiwj7qqh9792"))))
     (arguments
      (substitute-keyword-arguments (package-arguments libgit2)
        ((#:phases _ '%standard-phases)
@@ -887,22 +900,6 @@ write native speed custom Git applications in any language with bindings.")
                    ;; Tests may be disabled if cross-compiling.
                    (format #t "Test suite not run.~%"))))))))))
 
-(define-public libgit2-1.1
-  (package
-    (inherit libgit2-1.3)
-    (version "1.1.0")
-    (source (origin
-              (inherit (package-source libgit2-1.3))
-              (file-name #f)                      ;use the default name
-              (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"))))))
-
 (define-public git-crypt
   (package
     (name "git-crypt")
@@ -1107,20 +1104,23 @@ a built-in cache to decrease server I/O pressure.")
 (define-public python-git-multimail
   (package
     (name "python-git-multimail")
-    (version "1.5.0.post1")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "git-multimail" version))
        (sha256
         (base32
-         "1zkrbsa70anwpw86ysfwalrb7nsr064kygfiyikyq1pl9pcl969y"))))
+         "0hwgf2p2dd4z397wj0y558s8xxbkzbsa6yb9n1iax624y7swjng1"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
            (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "setup.py"
+               (("'git-multimail', 'README.rst'")
+                "'README.rst'"))
              (substitute* "git-multimail/git_multimail.py"
                (("GIT_EXECUTABLE = 'git'")
                 (string-append "GIT_EXECUTABLE = '"
@@ -2163,7 +2163,7 @@ patch associated with a particular revision of an RCS file.")
      '(#:tests? #f
        #:configure-flags (list "--with-external-zlib")))
     (inputs (list zlib nano))                    ; the default editor
-    (home-page "http://cvs.nongnu.org")
+    (home-page "https://cvs.nongnu.org")
     (synopsis "Historical centralized version control system")
     (description
      "CVS is a version control system, an important component of Source
@@ -2400,7 +2400,7 @@ any project with more than one developer, is one of Aegis's major functions.")
 (define-public tig
   (package
     (name "tig")
-    (version "2.5.7")
+    (version "2.5.8")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2408,7 +2408,7 @@ any project with more than one developer, is one of Aegis's major functions.")
                     version "/tig-" version ".tar.gz"))
               (sha256
                (base32
-                "0xna55y1r1jssdmrzpinv96p7w00w9hn39q5l3d8l299dg4bmiyv"))
+                "14b38200bmwvi3030hqnwdsp34854ck3bzncj0wlljnpmr10l3mp"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index f63da08e4b..2760a90eab 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -48,7 +48,7 @@
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org>
-;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
+;;; Copyright © 2021, 2022, 2023 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2021 David Wilson <david@daviwil.com>
 ;;; Copyright © 2021,2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -63,6 +63,7 @@
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
 ;;; Copyright © 2022 Chadwain Holness <chadwainholness@gmail.com>
 ;;; Copyright © 2022 Andy Tai <atai@atai.org>
+;;; Copyright © 2023 Ott Joon <oj@vern.cc>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -306,7 +307,7 @@ audio/video everything to everything converter primarily focused on producing
 AVI video files with MP3 audio, but also including a program to read all the
 video and audio streams from a DVD.")
     (home-page
-     "http://linuxfromscratch.org/blfs/view/svn/multimedia/transcode.html")
+     "https://linuxfromscratch.org/blfs/view/svn/multimedia/transcode.html")
     (license license:gpl2+)))
 
 (define-public svt-hevc
@@ -468,7 +469,7 @@ as a joint effort between the BBC and Fluendo.")
     (synopsis "Quick Time Library")
     (description "The goal of this project is to enhance the quicktime4linux
 library.")
-    (home-page "http://libquicktime.sourceforge.net/")
+    (home-page "https://libquicktime.sourceforge.net/")
     (license license:lgpl2.1+)))
 
 (define-public mjpg-streamer
@@ -537,7 +538,7 @@ receiving MJPG streams.")
     (description "Mjpeg tools is a suite of programs which support video capture,
 editing, playback, and compression to MPEG of MJPEG video.  Edit, play and
 compression software is hardware independent.")
-    (home-page "http://mjpeg.sourceforge.net/")
+    (home-page "https://mjpeg.sourceforge.net/")
     (license license:gpl2+)))
 
 (define-public libmms
@@ -765,7 +766,7 @@ stream decoding")
                               (string-append "--build=" build)
                               (string-append "--with-ncurses="
                                              ncurses))))))))
-    (home-page "http://aa-project.sourceforge.net/aalib/")
+    (home-page "https://aa-project.sourceforge.net/aalib/")
     (synopsis "ASCII-art library")
     (description
      "AA-lib is a low level gfx library which does not require graphics device.
@@ -838,7 +839,7 @@ mpv's powerful playback capabilities.")
                    ;; system fixes above.
                    (replace 'bootstrap
                      (lambda _ (invoke "sh" "bootstrap"))))))
-    (home-page "http://liba52.sourceforge.net/")
+    (home-page "https://liba52.sourceforge.net/")
     (synopsis "ATSC A/52 audio stream decoder")
     (description "liba52 is a library for decoding ATSC A/52 audio streams.
 The A/52 standard is used in a variety of applications, including digital
@@ -906,7 +907,7 @@ shared library and encoder and decoder command-line executables.")
            libice
            sdl))
     (build-system gnu-build-system)
-    (home-page "http://libmpeg2.sourceforge.net/")
+    (home-page "https://libmpeg2.sourceforge.net/")
     (synopsis "MPEG1 and MPEG2 video decoder library")
     (description
      "libmpeg2 is a library which can decode MPEG1 and MPEG2 video streams.")
@@ -1341,7 +1342,7 @@ on the Invidious instances only as a fallback method.")
                      (rename-file file
                                   (string-append static "/lib/" file)))
                    (find-files "." "\\.a$")))))))))
-    (home-page "http://x265.org/")
+    (home-page "https://x265.org/")
     (synopsis "Library for encoding h.265/HEVC video streams")
     (description "x265 is a H.265 / HEVC video encoder application library,
 designed to encode video or images into an H.265 / HEVC encoded bitstream.")
@@ -1444,7 +1445,7 @@ streams.")
     (build-system gnu-build-system)
     (native-inputs (list pkg-config))
     (inputs (list libxv))
-    (home-page "http://libdv.sourceforge.net/")
+    (home-page "https://libdv.sourceforge.net/")
     (synopsis "DV video (IEC 61834 and SMPTE 314M) codec")
     (description "The Quasar DV codec (libdv) is a software codec for DV
 video, the encoding format used by most digital camcorders, typically those
@@ -1641,6 +1642,7 @@ operate properly.")
             libvdpau
             libvorbis
             libvpx
+            libwebp
             libx11
             libx264
             mesa
@@ -1738,6 +1740,7 @@ operate properly.")
          "--enable-libvidstab"
          "--enable-libvorbis"
          "--enable-libvpx"
+         "--enable-libwebp"
          "--enable-libxvid"
          "--enable-libx264"
          "--enable-libx265"
@@ -1884,7 +1887,11 @@ audio/video codec library.")
              (let* ((dso  (find-files "." "\\.so$"))
                     (path (string-join (map dirname dso) ":")))
                (format #t "setting LD_LIBRARY_PATH to ~s~%" path)
-               (setenv "LD_LIBRARY_PATH" path)))))))))
+               (setenv "LD_LIBRARY_PATH" path)))))))
+    ;; FFmpeg 2.8 does support libwebp, but we don't enable it while configuring
+    ;; the build, and we'd rather not add features to this old package anymore.
+    (inputs (modify-inputs (package-inputs ffmpeg-3.4)
+              (delete "libwebp")))))
 
 (define-public ffmpeg ffmpeg-5)
 
@@ -2189,7 +2196,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
 (define-public mpv
   (package
     (name "mpv")
-    (version "0.35.0")
+    (version "0.35.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2197,7 +2204,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "1jnk1arwhf82s6q90jp70izk1wy0bkx3lr3il2jgbqsp355l6wsk"))))
+               (base32 "1lzaijqddr4ir9nb27cv9ki20b0k5jns2k47v4xvmi30v1gi71ha"))))
     (build-system waf-build-system)
     (arguments
      (list
@@ -2572,7 +2579,7 @@ YouTube.com and many more sites.")
 (define-public yt-dlp
   (package/inherit youtube-dl
     (name "yt-dlp")
-    (version "2023.01.06")
+    (version "2023.02.17")
     (source
      (origin
        (method git-fetch)
@@ -2581,7 +2588,7 @@ YouTube.com and many more sites.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13kg6zsc0js4smqj6v4qpiycl9jlijj3pvp49wif6ilgv87sq7v3"))))
+        (base32 "08m626ij0jij5vbvfbbalwr97jdhl1n2w2cwwgbj5a4s7vhvp84x"))))
     (arguments
      (substitute-keyword-arguments (package-arguments youtube-dl)
        ((#:tests? _) (not (%current-target-system)))
@@ -2863,7 +2870,7 @@ installed).")
     (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.")
-    (home-page "http://dvdauthor.sourceforge.net")
+    (home-page "https://dvdauthor.sourceforge.net")
     (license license:gpl3+)))
 
 (define-public libdvdnav
@@ -3406,7 +3413,7 @@ be used for realtime video capture via Linux-specific APIs.")
 (define-public obs
   (package
     (name "obs")
-    (version "27.2.4")
+    (version "29.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3416,7 +3423,7 @@ be used for realtime video capture via Linux-specific APIs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13bfzjqmvabli99yr1h0306w5lx72mbl5sxrnr46hjig1a6rw91s"))
+                "15nvvlpryvlbf76918jvygg1985glz38cndfgnc2c0009vdb9qbk"))
               (patches
                (search-patches "obs-modules-location.patch"))))
     (build-system cmake-build-system)
@@ -3425,6 +3432,8 @@ be used for realtime video capture via Linux-specific APIs.")
       #:configure-flags
       #~(list (string-append "-DOBS_VERSION_OVERRIDE=" #$version)
               "-DENABLE_UNIT_TESTS=ON"
+              "-DENABLE_NEW_MPEGTS_OUTPUT=OFF"
+              "-DENABLE_AJA=OFF"
               ;; Browser plugin requires cef, but it is not packaged yet.
               ;; <https://bitbucket.org/chromiumembedded/cef/src/master/>
               "-DBUILD_BROWSER=OFF")
@@ -3458,6 +3467,8 @@ be used for realtime video capture via Linux-specific APIs.")
       glib
       jack-1
       jansson
+      libglvnd
+      libva
       libx264
       libxcomposite
       libxkbcommon
@@ -3474,6 +3485,7 @@ be used for realtime video capture via Linux-specific APIs.")
       qtwayland-5
       speexdsp
       v4l-utils
+      vlc
       wayland
       wayland-protocols
       zlib))
@@ -3555,7 +3567,7 @@ programs on your current machine or on other machines.")
 (define-public obs-wlrobs
   (package
     (name "obs-wlrobs")
-    (version "1.0")
+    (version "1.1")
     (source
       (origin
         (method hg-fetch)
@@ -3565,7 +3577,7 @@ programs on your current machine or on other machines.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "1faiq2gdb7qis3m1hilm4pz8lkmkab75vzm608dbiazahhybf96p"))))
+          "1whdb2ykisz50qw19nv1djw5qp17rpnpkc8s8470ja8iz894mmwd"))))
     (build-system meson-build-system)
     (native-inputs
      (list pkg-config))
@@ -3579,6 +3591,38 @@ programs on your current machine or on other machines.")
 Wayland compositors.")
     (license license:gpl3+)))
 
+(define-public obs-vkcapture
+  (package
+    (name "obs-vkcapture")
+    (version "1.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/nowrep/obs-vkcapture")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "18v15bfzm31qkpwipvbqgzak4z6f2hhq6mnz2bvhwnv57whirln6"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f)) ;no tests
+    (native-inputs (list pkg-config))
+    (inputs (list mesa
+                  obs
+                  libx11
+                  libxcb
+                  vulkan-headers
+                  vulkan-loader
+                  wayland))
+    (home-page "https://github.com/nowrep/obs-vkcapture")
+    (synopsis "OBS plugin for Vulkan/OpenGL game capture on Linux")
+    (description
+     "This OBS plugin lets you record an OpenGL or Vulkan
+game by adding the Game Capture source to your scene and starting an
+application with @code{obs-gamecapture}.")
+    (license license:gpl2)))
+
 (define-public libvdpau
   (package
     (name "libvdpau")
@@ -4422,7 +4466,7 @@ programmers to access a standard API to open and decompress media files.")
            wxwidgets-gtk2))
     (native-inputs
      (list intltool desktop-file-utils pkg-config))
-    (home-page "http://www.aegisub.org/")
+    (home-page "https://www.aegisub.org/")
     (synopsis "Subtitle engine")
     (description
       "Aegisub is a tool for creating and modifying subtitles.  Aegisub makes
@@ -4497,7 +4541,7 @@ tools for styling them, including a built-in real-time video preview.")
                ;; precedence in case they have e.g. the full gst-plugins-bad.
                `("GST_PLUGIN_SYSTEM_PATH" suffix
                  (,(getenv "GST_PLUGIN_SYSTEM_PATH")))))))))
-    (home-page "http://www.pitivi.org")
+    (home-page "https://www.pitivi.org")
     (synopsis "Video editor based on GStreamer Editing Services")
     (description "Pitivi is a video editor built upon the GStreamer Editing
 Services.  It aims to be an intuitive and flexible application that can appeal
@@ -4523,7 +4567,7 @@ to newbies and professionals alike.")
      '(#:configure-flags '("LIBS=-lm")))
     (native-inputs
      (list pkg-config doxygen))
-    (home-page "http://gmerlin.sourceforge.net")
+    (home-page "https://gmerlin.sourceforge.net")
     (synopsis "Low level library for multimedia API building")
     (description
      "Gavl is short for Gmerlin Audio Video Library.  It is a low level
@@ -4842,7 +4886,7 @@ API.  It includes bindings for Python, Ruby, and other languages.")
            font-dejavu
            libopenshot
            python
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-pyqtwebengine
            python-pyzmq
            python-requests
@@ -4972,7 +5016,7 @@ and audio capture, network stream playback, and many more.")
 (define-public dav1d
   (package
     (name "dav1d")
-    (version "0.9.2")
+    (version "1.0.0")
     (source
       (origin
         (method git-fetch)
@@ -4981,7 +5025,7 @@ and audio capture, network stream playback, and many more.")
                (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "0bkps488h9s15ylvkm4fmfywgrpbw570glawpnv6khpq9n223dzl"))))
+         (base32 "0jkvb5as7danpalzlwd0w1dc9i2vijvmf39z0j6fwqvialsgnnj5"))))
     (build-system meson-build-system)
     (native-inputs (list nasm))
     (home-page "https://code.videolan.org/videolan/dav1d")
@@ -5143,7 +5187,7 @@ Theora videos.  Theorafile was written to be used for FNA's VideoPlayer.")
     (build-system gnu-build-system)
     (inputs
      (list libdvdcss libdvdread))
-    (home-page "http://dvdbackup.sourceforge.net")
+    (home-page "https://dvdbackup.sourceforge.net")
     (synopsis "DVD video ripper")
     (description
      "A simple command line tool to backup video from a DVD.  Decrypts the
@@ -5477,7 +5521,7 @@ wlroots-based compositors.  More specifically, those that support
            gsl
            portaudio
            alsa-lib))
-    (home-page "http://guvcview.sourceforge.net/")
+    (home-page "https://guvcview.sourceforge.net/")
     (synopsis "Control your webcam and capture videos and images")
     (description
      "GTK+ UVC Viewer (guvcview) is a graphical application to control a
@@ -5637,7 +5681,7 @@ create video contact sheets (previews) of videos.  Any video supported by
 MPlayer and FFmpeg can be used.  A note of warning: Unlike most similar tools
 VCS, by default, makes screenshots the same size as the video, see the manual
 for details on how to change this.")
-   (home-page "http://p.outlyer.net/vcs/")
+   (home-page "https://p.outlyer.net/vcs/")
    (license license:lgpl2.1+)))
 
 (define-public svtplay-dl
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 6939057ff2..6baf10915a 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -72,13 +72,14 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages text-editors)
   #:use-module (gnu packages terminals)
+  #:use-module (gnu packages tree-sitter)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg))
 
 (define-public vim
   (package
     (name "vim")
-    (version "9.0.1073")
+    (version "9.0.1303")
     (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -87,7 +88,7 @@
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "0vifinbxjcs7j3zs290q91009cdqijn2awyva2332if7qbx48ssw"))))
+               "16difqsdl3v9irjiaj2zqiyn5q94r70ws4i1ygrrcpzk6127mk2q"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -692,7 +693,7 @@ are detected, the user is notified.")))
 (define-public neovim
   (package
     (name "neovim")
-    (version "0.8.2")
+    (version "0.8.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -701,7 +702,7 @@ are detected, the user is notified.")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1jjw9a42l7wrziki2qznn7wiw5r59n4hs9i6g2hxnjyzixpg9xvl"))))
+                "1zff73yxbnxym6sn43xk6r0zc2ncingsib81v9g39ibrcinpwaa9"))))
     (build-system cmake-build-system)
     (arguments
      (list #:modules
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 64a26edb02..4fc6f1868c 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013-2017, 2020-2022 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-2021, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017 Andy Patterson <ajpatter@uwaterloo.ca>
@@ -302,7 +302,11 @@
                 ;; Comment out the test-char test, which needs networking and
                 ;; fails within the build environment.
                 ((".*'test-char':.*" all)
-                 (string-append "# " all)))))
+                 (string-append "# " all)))
+              (substitute* "tests/qtest/meson.build"
+                ;; These tests fail to get the expected number of tests
+                ;; on arm platforms.
+                (("'arm-cpu-features',") ""))))
           #$@(if (target-riscv64?)
                  '((add-after 'unpack 'disable-some-tests
                      (lambda _
@@ -1188,7 +1192,7 @@ of one or more RISC-V harts.")
                  (format #f "path = ~s;"
                          (search-input-directory (or native-inputs inputs)
                                                  "share/osinfo")))))))))
-    (inputs (list libsoup-minimal-2 libxml2 libxslt osinfo-db))
+    (inputs (list libsoup libxml2 libxslt osinfo-db))
     (native-inputs
      (list `(,glib "bin")                ;glib-mkenums, etc.
            gobject-introspection
@@ -2196,7 +2200,7 @@ by default and can be made read-only.")
      `(#:tests? #f))                    ; no tests exist
     (inputs
      (list libxrandr))
-    (home-page "http://bochs.sourceforge.net/")
+    (home-page "https://bochs.sourceforge.net/")
     (synopsis "Emulator for x86 PC")
     (description
      "Bochs is an emulator which can emulate Intel x86 CPU, common I/O
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index f38fd28cea..500461fecf 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -750,7 +750,7 @@ and probably others.")
            python-lxml
            python-prompt-toolkit
            python-requests
-           python-pyqt-without-qtwebkit
+           python-pyqt
            python-pyqtwebengine
            python-pysocks
            python-pyxdg
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index c6df524fbc..218a7b21ea 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -28,7 +28,6 @@
   #:use-module (guix gexp)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system meson)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bison)
@@ -120,11 +119,6 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
     (arguments
      `(#:configure-flags
        (list "-DSPIRV_CROSS_SHARED=YES")
-       ;; FIXME: The following tests fail:
-       ;;   15 - spirv-cross-test-opt
-       ;;   16 - spirv-cross-test-metal-opt
-       ;;   17 - spirv-cross-test-hlsl-opt
-       #:tests? #f
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-tests-to-find-deps
@@ -134,8 +128,11 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
                 (string-append (assoc-ref inputs "glslang") "/bin")))
              (substitute* "CMakeLists.txt"
                (("\\$\\{CMAKE_(.*)_DIR\\}/external/spirv-tools(.*)/bin")
-                (string-append (assoc-ref inputs "spirv-tools") "/bin")))
-             #t)))))
+                (string-append (assoc-ref inputs "spirv-tools") "/bin")))))
+         (add-before 'check 'update-reference-shaders
+           (lambda _
+             (with-directory-excursion "../source"
+               (invoke "./update_test_shaders.sh")))))))
     (inputs
      (list glslang spirv-headers spirv-tools))
     (native-inputs (list python))
diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm
index 5239cd43a0..39d5e3c37f 100644
--- a/gnu/packages/w3m.scm
+++ b/gnu/packages/w3m.scm
@@ -42,7 +42,7 @@
 (define-public w3m
   (package
     (name "w3m")
-    (version "0.5.3+git20210102")
+    (version "0.5.3+git20230121")
     (source (origin
               (method git-fetch)
               ;; Debian's fork of w3m is the only one that is still maintained.
@@ -52,7 +52,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0amq1wfjp5mhqjmvrc0yhxjlx1335p78d7ap8iykfjn5h8yhmrg5"))))
+                "0nvhxsqxgxjrr62mvxzhhfzvbvg56g19vlqcgb8mh2x1daazk5ms"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f  ; no check target
@@ -77,7 +77,7 @@
      `(("gettext" ,gettext-minimal)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)))
-    (home-page "http://w3m.sourceforge.net/")
+    (home-page "https://w3m.sourceforge.net/")
     (synopsis "Text-mode web browser")
     (description
      "w3m is a text-based web browser as well as a pager like @code{more} or
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index b876f25882..851c79fef5 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2014, 2019 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2019, 2021-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -38,7 +38,6 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages web-browsers)
-  #:use-module (guix build-system asdf)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
@@ -469,7 +468,7 @@ interface.")
 (define-public qutebrowser
   (package
     (name "qutebrowser")
-    (version "2.5.2")
+    (version "2.5.3")
     (source
      (origin
        (method url-fetch)
@@ -477,7 +476,7 @@ interface.")
                            "qutebrowser/releases/download/v" version "/"
                            "qutebrowser-" version ".tar.gz"))
        (sha256
-        (base32 "0279fi4lx8sfxz3mx6ar0wz01kiiqa1zkv9fxc6xw0y4vlacxgx9"))))
+        (base32 "10fpr414nadqba33xgvbpaacc5sn0xnpnnljf5a3n8yh6hjg4pl4"))))
     (build-system python-build-system)
     (native-inputs
      (list python-attrs))               ; for tests
@@ -493,7 +492,7 @@ interface.")
            ;; FIXME: python-pyqtwebengine needs to come before python-pyqt so
            ;; that it's __init__.py is used first.
            python-pyqtwebengine
-           python-pyqt-without-qtwebkit
+           python-pyqt
            ;; While qtwebengine-5 is provided by python-pyqtwebengine, it's
            ;; included here so we can wrap QTWEBENGINEPROCESS_PATH.
            qtwebengine-5))
@@ -712,7 +711,7 @@ is fully configurable and extensible in Common Lisp.")
 (define-public lagrange
   (package
     (name "lagrange")
-    (version "1.14.2")
+    (version "1.15.2")
     (source
      (origin
        (method url-fetch)
@@ -720,7 +719,7 @@ is fully configurable and extensible in Common Lisp.")
         (string-append "https://git.skyjake.fi/skyjake/lagrange/releases/"
                        "download/v" version "/lagrange-" version ".tar.gz"))
        (sha256
-        (base32 "0r4cwpgnz761dvkfijq0p7pcyzq6f8bnmivijpnpf3bkzpvmxc2i"))
+        (base32 "1xgdarwc8cpwb4rcbasdbc2nn5mcvwl7fz7v70x974wpf5xjmd3k"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -836,7 +835,7 @@ http, and https via third-party applications.")
 (define-public tinmop
   (package
     (name "tinmop")
-    (version "0.9.9.14")
+    (version "0.9.9.141")
     (source
      (origin
        (method git-fetch)
@@ -845,7 +844,7 @@ http, and https via third-party applications.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0xpqakqg4827wv92vvzwcvkqzr8d523fvnyjvnj4ac83d4w6nnls"))))
+        (base32 "0hx52kaq0q9iccalkxk50q1v3mf9ypardjgv56d5sdrbhfqyashl"))))
     (build-system gnu-build-system)
     (native-inputs
      (list autoconf
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 69d2d6b061..151e1a6301 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -30,7 +30,7 @@
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2019, 2020-2021, 2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -61,6 +61,7 @@
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2023 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2022 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2023 David Thompson <dthompson2@worcester.edu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,7 +98,6 @@
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system qt)
   #:use-module (guix build-system scons)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
@@ -121,6 +121,7 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages django)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages datastructures)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages emacs-xyz)
@@ -680,7 +681,7 @@ supported at your website.")
       (source (origin
                 (method hg-fetch)
                 (uri (hg-reference
-                      (url "http://hg.nginx.org/xslscript")
+                      (url "https://hg.nginx.org/xslscript")
                       (changeset changeset)))
                 (file-name (string-append name "-" version))
                 (sha256
@@ -704,7 +705,7 @@ supported at your website.")
                              out-bin
                              "/xslscript.pl"))
                  #t))))))
-      (home-page "http://hg.nginx.org/xslscript")
+      (home-page "https://hg.nginx.org/xslscript")
       (synopsis "XSLScript with NGinx specific modifications")
       (description
        "XSLScript is a terse notation for writing complex XSLT stylesheets.
@@ -1253,7 +1254,7 @@ project)
            (lambda _ (setenv "QT_QPA_PLATFORM" "offscreen") #t)))))
     (inputs
      (list qtbase-5))
-    (home-page "http://qjson.sourceforge.net")
+    (home-page "https://qjson.sourceforge.net")
     (synopsis "Library that maps JSON data to QVariant objects")
     (description "QJson is a Qt-based library that maps JSON data to
 @code{QVariant} objects.  JSON arrays will be mapped to @code{QVariantList}
@@ -1567,6 +1568,53 @@ These tools are intended for use in (or for development of) toolchains or
 other systems that want to manipulate WebAssembly files.")
     (license license:asl2.0)))
 
+(define-public wasm3
+  (package
+    (name "wasm3")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wasm3/wasm3")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07zzmk776j8ydyxhrnnjiscbhhmz182a62r6aix6kfk5kq2cwia2"))))
+    (build-system cmake-build-system)
+    (arguments
+     ;; The default WASI option "uvwasi" causes CMake to initiate a 'git
+     ;; clone' which cannot happen within the build container.
+     '(#:configure-flags '("-DBUILD_WASI=simple")
+       ;; No check target.  There are tests but they require a network
+       ;; connection to download the WebAssembly core test suite.
+       #:tests? #f
+       ;; There is no install target.  Instead, we have to manually copy the
+       ;; wasm3 build artifacts to the output directory.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bindir (string-append out "/bin"))
+                    (includedir (string-append out "/include"))
+                    (libdir (string-append out "/lib")))
+               (mkdir-p bindir)
+               (mkdir-p includedir)
+               (mkdir-p libdir)
+               (copy-file "wasm3" (string-append bindir "/wasm3"))
+               (for-each (lambda (header)
+                           (copy-file header
+                                      (string-append includedir "/"
+                                                     (basename header))))
+                         (find-files "../source/source" "\\.h$"))
+               (copy-file "source/libm3.a"
+                          (string-append libdir "/libm3.a"))))))))
+    (home-page "https://github.com/wasm3/wasm3")
+    (synopsis "WebAssembly interpreter")
+    (description "WASM3 is a fast WebAssembly interpreter.")
+    (license license:expat)))
+
 (define-public websocketpp
   (package
     (name "websocketpp")
@@ -1711,7 +1759,7 @@ UTS#46.")
     (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.")
-    (home-page "http://tidy.sourceforge.net/")
+    (home-page "https://tidy.sourceforge.net/")
     (license (license:x11-style "file:///include/tidy.h"))))
 
 (define-public esbuild
@@ -1929,7 +1977,7 @@ hash/signatures.")
        (sha256
         (base32 "0d0giry6bb57pnidymvdl7i5x9bq3ljk3g4bs294hcr5mj3cq0kw"))))
     (build-system gnu-build-system)
-    (home-page "http://quvi.sourceforge.net/")
+    (home-page "https://quvi.sourceforge.net/")
     (synopsis "Media stream URL parser")
     (description "This package contains support scripts called by libquvi to
 parse media stream properties.")
@@ -1963,7 +2011,7 @@ parse media stream properties.")
          (list
           (string-append "liblua_CFLAGS=-I" lua "/include")
           (string-append "liblua_LIBS=-L" lua "/libs -llua")))))
-    (home-page "http://quvi.sourceforge.net/")
+    (home-page "https://quvi.sourceforge.net/")
     (synopsis "Media stream URL parser")
     (description "libquvi is a library with a C API for parsing media stream
 URLs and extracting their actual media files.")
@@ -1985,7 +2033,7 @@ URLs and extracting their actual media files.")
     (native-inputs (list pkg-config))
     (inputs
      (list curl libquvi))
-    (home-page "http://quvi.sourceforge.net/")
+    (home-page "https://quvi.sourceforge.net/")
     (synopsis "Media stream URL parser")
     (description "quvi is a command-line-tool suite to extract media files
 from streaming URLs.  It is a command-line wrapper for the libquvi library.")
@@ -2955,17 +3003,17 @@ development server with Starman.")
 (define-public perl-cgi
   (package
     (name "perl-cgi")
-    (version "4.52")
+    (version "4.55")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/L/LE/LEEJO/"
                            "CGI-" version ".tar.gz"))
        (sha256
-        (base32 "1bxrpxv95js8yinicminxdg41xvd85haj2gvlywg3zqdb66smqy8"))))
+        (base32 "1ck4ik5i0v394qgg9qah4p6x9hyls311g6iwi6ildprzn6a5x2b7"))))
     (build-system perl-build-system)
     (native-inputs
-     (list perl-test-deep perl-test-nowarnings perl-test-warn))
+     (list perl-test-nowarnings perl-test-warn))
     (propagated-inputs
      (list perl-html-parser))
     (home-page "https://metacpan.org/release/CGI")
@@ -4723,8 +4771,8 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                    license:freebsd-doc)))) ; documentation
 
 (define-public guix-data-service
-  (let ((commit "7b69611755ac3b9132710d83a1139b4c5606578d")
-        (revision "36"))
+  (let ((commit "8c2f97eef82412a4309273e22b6edeaf53dc2d0e")
+        (revision "39"))
     (package
       (name "guix-data-service")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -4736,7 +4784,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0lmvmalgfbc6q80f8dwqikdd5kna2vl4jlmf2li206hmcq2hzh6p"))))
+                  "12k930vkg07i9xysli3fxbgn3hbqy2l5s9rybm7ayvbcmbdqmgcn"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
@@ -4802,7 +4850,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
              bash-minimal))
       (propagated-inputs
        (list guix
-             guile-fibers-1.1
+             guile-fibers-next
              guile-json-4
              guile-email
              guile-prometheus
@@ -6153,7 +6201,7 @@ used to start services with both privileged and non-privileged port numbers.")
                #t))))))
     (native-inputs
      (list libxslt))
-    (home-page "http://www.html-tidy.org/")
+    (home-page "https://www.html-tidy.org/")
     (synopsis "HTML Tidy with HTML5 support")
     (description
      "Tidy is a console application which corrects and cleans up
@@ -6613,7 +6661,7 @@ file links.")
            cairo
            gdk-pixbuf
            gtk+
-           libressl
+           openssl-3.0
            pango))
     (home-page "https://git.sr.ht/~julienxx/castor")
     (synopsis "Graphical client for plain-text protocols")
@@ -7879,17 +7927,41 @@ instructions on how to use Guix in a shared HPC environment.")
 (define-public httrack
   (package
     (name "httrack")
-    (version "3.49.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://mirror.httrack.com/historical/"
-                                  "httrack-" version ".tar.gz"))
-              (sha256
-               (base32
-                "09a0gm67nml86qby1k1gh7rdxamnrnzwr6l9r5iiq94favjs0xrl"))))
+    (version "3.49.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xroche/httrack")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1izn1h7gaxb2barclm2pj5kaz1mmddx2c35n70m0552q8ms4lvks"))))
     (build-system gnu-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'autogen
+            ;; Force reconfiguration to generate "test-driver".
+            (lambda _
+              (substitute* "configure.ac"
+                ;; Fix errors when running "configure" script.
+                (("AX_CHECK_(COMPILE|LINK)_FLAG\\(.*") "")
+                (("AX_CHECK_ALIGNED_ACCESS_REQUIRED") "")
+                (("gl_VISIBILITY") ""))
+              (invoke "autoreconf" "-vif")))
+          (add-after 'unpack 'copy-coucal-source
+            ;; Install Coucal source to work around missing submodule.
+            (lambda* (#:key inputs #:allow-other-keys)
+              (for-each (lambda (f) (install-file f "src/coucal"))
+                        (find-files #$(this-package-input "coucal")
+                                    "\\.(c|h|diff|orig)$")))))))
+    (native-inputs
+     (list autoconf automake libtool))
     (inputs
-     (list libressl zlib))
+     (list coucal 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
@@ -8058,7 +8130,7 @@ returned.")
        (sha256
         (base32 "1j3mzjlczjrk4ahc43s6kzpvzypzjmqz4sillnca5yadrwwgjf2x"))))
     (build-system gnu-build-system)
-    (home-page "http://htmlcxx.sourceforge.net/")
+    (home-page "https://htmlcxx.sourceforge.net/")
     (synopsis "Simple non-validating CSS1 and HTML parser for C++")
     (description "htmlcxx is a simple non-validating CSS1 and HTML parser for
 C++.  Although there are several other HTML parsers available, htmlcxx has some
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index a82601096f..8ef95ce518 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -33,7 +33,6 @@
   #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system meson)
-  #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
@@ -124,7 +123,7 @@ the WPE-flavored port of WebKit.")
 engine that uses Wayland for graphics output.")
     (license license:bsd-2)))
 
-(define %webkit-version "2.38.3")
+(define %webkit-version "2.38.5")
 
 (define-public webkitgtk
   (package
@@ -135,7 +134,7 @@ engine that uses Wayland for graphics output.")
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
-               (base32 "0njac0878ksh53gn50phly1vzvj08q7g5aclncv6k324xp8h3w21"))
+               (base32 "19y1n05mp370mq4bp2bk0pm3wk49z9a10azjjdcdyx12091hrhj0"))
               (patches (search-patches
                         "webkitgtk-adjust-bubblewrap-paths.patch"))))
     (build-system cmake-build-system)
@@ -316,7 +315,7 @@ propagated by default) such as @code{gst-plugins-good} and
               (uri (string-append "https://wpewebkit.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
-               (base32 "160456k4yiml0zn2fxba9qwp94dvvn93z9rqs2qa2lvjxig0gn8x"))))
+               (base32 "0q8nmk9l6bqv2bhljm9wv7mvgdl393z7v2m7a0c5avac18yzs07z"))))
     (arguments
      (substitute-keyword-arguments (package-arguments webkitgtk)
        ((#:configure-flags flags)
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 6e86add4e3..88f146b46b 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2022 Liliana Marie Prikler <liliana.prikler@gmail.com>
+;;; Copyright © 2023 Kaelyn Takata <kaelyn.alexi@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -73,10 +74,12 @@
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
-(define-public wine
+;; This minimal build of Wine is needed to prevent a circular dependency with
+;; vkd3d.
+(define-public wine-minimal
   (package
-    (name "wine")
-    (version "7.19")
+    (name "wine-minimal")
+    (version "8.0")
     (source
      (origin
        (method url-fetch)
@@ -88,10 +91,79 @@
               (string-append "https://dl.winehq.org/wine/source/" dir
                              "wine-" version ".tar.xz")))
        (sha256
-        (base32 "08cxigkd83as6gkqgiwdpvr7cyy5ajsnhan3jbadwzqxdrz4kb23"))))
+        (base32 "0bkr3klvjy8h4djddr31fvapsi9pc2rsiyhaa7j1lwpq704w4wh2"))))
     (build-system gnu-build-system)
+    (native-inputs (list bison flex))
+    (inputs `())
+    (arguments
+     (list
+      ;; Force a 32-bit build targeting a similar architecture, i.e.:
+      ;; armhf for armhf/aarch64, i686 for i686/x86_64.
+      #:system (match (%current-system)
+                 ((or "armhf-linux" "aarch64-linux") "armhf-linux")
+                 (_ "i686-linux"))
+
+       ;; XXX: There's a test suite, but it's unclear whether it's supposed to
+       ;; pass.
+       #:tests? #f
+
+       #:make-flags
+       #~(list "SHELL=bash"
+               (string-append "libdir=" #$output "/lib/wine32"))
+
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'patch-SHELL
+             (lambda _
+               (substitute* "configure"
+                 ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
+                 (("/bin/sh")
+                  (which "bash")))))
+           (add-after 'configure 'patch-dlopen-paths
+             ;; Hardcode dlopened sonames to absolute paths.
+             (lambda _
+               (let* ((library-path (search-path-as-string->list
+                                     (getenv "LIBRARY_PATH")))
+                      (find-so (lambda (soname)
+                                 (search-path library-path soname))))
+                 (substitute* "include/config.h"
+                   (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
+                    (format #f "~a\"~a\"" defso (find-so soname)))))))
+           (add-after 'patch-generated-file-shebangs 'patch-makedep
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "tools/makedep.c"
+                 (("output_filenames\\( unix_libs \\);" all)
+                  (string-append all
+                   "output ( \" -Wl,-rpath=%s \", arch_install_dirs[arch] );")))))
+           (add-before 'build 'set-widl-time-override
+             ;; Set WIDL_TIME_OVERRIDE to avoid embedding the current date in
+             ;; files generated by WIDL.
+             (lambda _
+               (setenv "WIDL_TIME_OVERRIDE" "315532800"))))
+       #:configure-flags
+       #~(list "--without-freetype"
+               "--without-x")))
+    (home-page "https://www.winehq.org/")
+    (synopsis "Implementation of the Windows API (32-bit only)")
+    (description
+     "Wine (originally an acronym for \"Wine Is Not an Emulator\") is a
+compatibility layer capable of running Windows applications.  Instead of
+simulating internal Windows logic like a virtual machine or emulator, Wine
+translates Windows API calls into POSIX calls on-the-fly, eliminating the
+performance and memory penalties of other methods and allowing you to cleanly
+integrate Windows applications into your desktop.")
+    ;; Any platform should be able to build wine, but based on '#:system' these
+    ;; are the ones we currently support.
+    (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"))
+    (license license:lgpl2.1+)))
+
+(define-public wine
+  (package
+    (inherit wine-minimal)
+    (name "wine")
     (native-inputs
-     (list bison flex gettext-minimal perl pkg-config))
+     (modify-inputs (package-native-inputs wine-minimal)
+       (prepend gettext-minimal perl pkg-config)))
     (inputs
      ;; Some libraries like libjpeg are now compiled into native PE objects.
      ;; The ELF objects provided by Guix packages are of no use.  Whilst this
@@ -99,6 +171,7 @@
      ;; to build some of these from Guix PACKAGE-SOURCE but attempts were not
      ;; fruitful so far.  See <https://www.winehq.org/announce/7.0>.
      (list alsa-lib
+           bash-minimal
            cups
            dbus
            eudev
@@ -131,26 +204,9 @@
            vkd3d
            vulkan-loader))
     (arguments
-     (list
-      ;; Force a 32-bit build targeting a similar architecture, i.e.:
-      ;; armhf for armhf/aarch64, i686 for i686/x86_64.
-      #:system (match (%current-system)
-                 ((or "armhf-linux" "aarch64-linux") "armhf-linux")
-                 (_ "i686-linux"))
-
-       ;; XXX: There's a test suite, but it's unclear whether it's supposed to
-       ;; pass.
-       #:tests? #f
-
-       #:configure-flags
-       #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib/wine32"))
-
-       #:make-flags
-       #~(list "SHELL=bash"
-               (string-append "libdir=" #$output "/lib/wine32"))
-
-       #:phases
-       #~(modify-phases %standard-phases
+     (substitute-keyword-arguments (package-arguments wine-minimal)
+       ((#:phases phases)
+        #~(modify-phases #$phases
            ;; Explicitly set the 32-bit version of vulkan-loader when installing
            ;; to i686-linux or x86_64-linux.
            ;; TODO: Add more JSON files as they become available in Mesa.
@@ -175,42 +231,8 @@
                                               "/radeon_icd.i686.json" ":"
                                               icd "/intel_icd.i686.json")))))))))
                 (_
-                 `()))
-           (add-after 'unpack 'patch-SHELL
-             (lambda _
-               (substitute* "configure"
-                 ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
-                 (("/bin/sh")
-                  (which "bash")))))
-           (add-after 'configure 'patch-dlopen-paths
-             ;; Hardcode dlopened sonames to absolute paths.
-             (lambda _
-               (let* ((library-path (search-path-as-string->list
-                                     (getenv "LIBRARY_PATH")))
-                      (find-so (lambda (soname)
-                                 (search-path library-path soname))))
-                 (substitute* "include/config.h"
-                   (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
-                    (format #f "~a\"~a\"" defso (find-so soname)))))))
-           (add-after 'patch-generated-file-shebangs 'patch-makedep
-             (lambda* (#:key outputs #:allow-other-keys)
-               (substitute* "tools/makedep.c"
-                 (("output_filenames\\( unix_libs \\);" all)
-                  (string-append all
-                                 "output ( \" -Wl,-rpath=%s \", so_dir );"))))))))
-    (home-page "https://www.winehq.org/")
-    (synopsis "Implementation of the Windows API (32-bit only)")
-    (description
-     "Wine (originally an acronym for \"Wine Is Not an Emulator\") is a
-compatibility layer capable of running Windows applications.  Instead of
-simulating internal Windows logic like a virtual machine or emulator, Wine
-translates Windows API calls into POSIX calls on-the-fly, eliminating the
-performance and memory penalties of other methods and allowing you to cleanly
-integrate Windows applications into your desktop.")
-    ;; Any platform should be able to build wine, but based on '#:system' these
-    ;; are thr ones we currently support.
-    (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"))
-    (license license:lgpl2.1+)))
+                 `()))))
+       ((#:configure-flags _ '()) #~'())))))
 
 (define-public wine64
   (package
@@ -219,127 +241,69 @@ integrate Windows applications into your desktop.")
     (inputs (modify-inputs (package-inputs wine)
               (prepend wine)))
     (arguments
-     (cons*
-      #:make-flags
-      #~(list "SHELL=bash"
-              (string-append "libdir=" #$output "/lib/wine64"))
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Explicitly set both the 64-bit and 32-bit versions of vulkan-loader
-          ;; when installing to x86_64-linux so both are available.
-          ;; TODO: Add more JSON files as they become available in Mesa.
-          #$@(match (%current-system)
-               ((or "x86_64-linux")
-                `((add-after 'copy-wine32-binaries 'wrap-executable
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let* ((out (assoc-ref outputs "out"))
-                             (icd-files (map
-                                         (lambda (basename)
-                                           (search-input-file
-                                            inputs
-                                            (string-append "/share/vulkan/icd.d/"
-                                                           basename)))
-                                         '("radeon_icd.x86_64.json"
-                                           "intel_icd.x86_64.json"
-                                           "radeon_icd.i686.json"
-                                           "intel_icd.i686.json"))))
-                        (wrap-program (string-append out "/bin/wine-preloader")
-                          `("VK_ICD_FILENAMES" ":" = ,icd-files))
-                        (wrap-program (string-append out "/bin/wine64-preloader")
-                          `("VK_ICD_FILENAMES" ":" = ,icd-files)))))))
-               (_
-                `()))
-          (add-after 'unpack 'patch-SHELL
-            (lambda _
-              (substitute* "configure"
-                ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
-                (("/bin/sh")
-                 (which "bash")))))
-          (add-after 'patch-generated-file-shebangs 'patch-makedep
-            (lambda* (#:key outputs #:allow-other-keys)
-              (substitute* "tools/makedep.c"
-                (("output_filenames\\( unix_libs \\);" all)
-                 (string-append all
-                                "output ( \" -Wl,-rpath=%s \", so_dir );")))))
-          (add-after 'install 'copy-wine32-binaries
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (let ((out (assoc-ref %outputs "out")))
-                ;; Copy the 32-bit binaries needed for WoW64.
-                (copy-file (search-input-file inputs "/bin/wine")
-                           (string-append out "/bin/wine"))
-                ;; Copy the real 32-bit wine-preloader instead of the wrapped
-                ;; version.
-                (copy-file (search-input-file inputs "/bin/.wine-preloader-real")
-                           (string-append out "/bin/wine-preloader")))))
-          (add-after 'install 'copy-wine32-libraries
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (let* ((out (assoc-ref %outputs "out")))
-                (copy-recursively (search-input-directory inputs "/lib/wine32")
-                                  (string-append out "/lib/wine32")))))
-          (add-after 'compress-documentation 'copy-wine32-manpage
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (let* ((out (assoc-ref %outputs "out")))
-                ;; Copy the missing man file for the wine binary from wine.
-                (copy-file (search-input-file inputs "/share/man/man1/wine.1.gz")
-                           (string-append out "/share/man/man1/wine.1.gz")))))
-          (add-after 'configure 'patch-dlopen-paths
-            ;; Hardcode dlopened sonames to absolute paths.
-            (lambda _
-              (let* ((library-path (search-path-as-string->list
-                                    (getenv "LIBRARY_PATH")))
-                     (find-so (lambda (soname)
-                                (search-path library-path soname))))
-                (substitute* "include/config.h"
-                  (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
-                   (format #f "~a\"~a\"" defso (find-so soname))))))))
-      #:configure-flags
-      #~(list "--enable-win64"
-              (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib/wine64"))
-      (strip-keyword-arguments '(#:configure-flags #:make-flags #:phases
-                                 #:system)
-                               (package-arguments wine))))
+     (substitute-keyword-arguments
+         (strip-keyword-arguments '(#:system) (package-arguments wine))
+       ((#:make-flags _)
+        #~(list "SHELL=bash"
+                (string-append "libdir=" #$output "/lib/wine64"))
+        )
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            ;; Explicitly set both the 64-bit and 32-bit versions of vulkan-loader
+            ;; when installing to x86_64-linux so both are available.
+            ;; TODO: Add more JSON files as they become available in Mesa.
+            #$@(match (%current-system)
+                 ((or "x86_64-linux")
+                  `((delete 'wrap-executable)
+                    (add-after 'copy-wine32-binaries 'wrap-executable
+                      (lambda* (#:key inputs outputs #:allow-other-keys)
+                        (let* ((out (assoc-ref outputs "out"))
+                               (icd-files (map
+                                           (lambda (basename)
+                                             (search-input-file
+                                              inputs
+                                              (string-append "/share/vulkan/icd.d/"
+                                                             basename)))
+                                           '("radeon_icd.x86_64.json"
+                                             "intel_icd.x86_64.json"
+                                             "radeon_icd.i686.json"
+                                             "intel_icd.i686.json"))))
+                          (wrap-program (string-append out "/bin/wine-preloader")
+                            `("VK_ICD_FILENAMES" ":" = ,icd-files))
+                          (wrap-program (string-append out "/bin/wine64-preloader")
+                            `("VK_ICD_FILENAMES" ":" = ,icd-files)))))))
+                 (_
+                  `()))
+            (add-after 'install 'copy-wine32-binaries
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let ((out (assoc-ref %outputs "out")))
+                  ;; Copy the 32-bit binaries needed for WoW64.
+                  (copy-file (search-input-file inputs "/bin/wine")
+                             (string-append out "/bin/wine"))
+                  ;; Copy the real 32-bit wine-preloader instead of the wrapped
+                  ;; version.
+                  (copy-file (search-input-file inputs "/bin/.wine-preloader-real")
+                             (string-append out "/bin/wine-preloader")))))
+            (add-after 'install 'copy-wine32-libraries
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let* ((out (assoc-ref %outputs "out")))
+                  (copy-recursively (search-input-directory inputs "/lib/wine32")
+                                    (string-append out "/lib/wine32")))))
+            (add-after 'compress-documentation 'copy-wine32-manpage
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let* ((out (assoc-ref %outputs "out")))
+                  ;; Copy the missing man file for the wine binary from wine.
+                  (copy-file (search-input-file inputs "/share/man/man1/wine.1.gz")
+                             (string-append out "/share/man/man1/wine.1.gz")))))))
+       ((#:configure-flags configure-flags '())
+        #~(cons "--enable-win64" #$configure-flags))))
     (synopsis "Implementation of the Windows API (WoW64 version)")
     (supported-systems '("x86_64-linux" "aarch64-linux"))))
 
-;; This minimal build of Wine is needed to prevent a circular dependency with
-;; vkd3d.
-(define-public wine-minimal
-  (package
-    (inherit wine)
-    (name "wine-minimal")
-    (native-inputs (modify-inputs (package-native-inputs wine)
-                     (delete "gettext" "perl" "pkg-config")))
-    (inputs `())
-    (arguments
-     `(#:validate-runpath? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-SHELL
-           (lambda _
-             (substitute* "configure"
-               ;; configure first respects CONFIG_SHELL, clobbers SHELL later.
-               (("/bin/sh")
-                (which "bash")))))
-         (add-after 'configure 'patch-dlopen-paths
-           ;; Hardcode dlopened sonames to absolute paths.
-           (lambda _
-             (let* ((library-path (search-path-as-string->list
-                                   (getenv "LIBRARY_PATH")))
-                    (find-so (lambda (soname)
-                               (search-path library-path soname))))
-               (substitute* "include/config.h"
-                 (("(#define SONAME_.* )\"(.*)\"" _ defso soname)
-                  (format #f "~a\"~a\"" defso (find-so soname))))))))
-       #:configure-flags
-       (list "--without-freetype"
-             "--without-x")
-       ,@(strip-keyword-arguments '(#:configure-flags #:phases)
-                                  (package-arguments wine))))))
-
 (define-public wine-staging-patchset-data
   (package
     (name "wine-staging-patchset-data")
-    (version "7.8")
+    (version "8.0")
     (source
      (origin
        (method git-fetch)
@@ -348,7 +312,7 @@ integrate Windows applications into your desktop.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "02rgpymhqrdr3aamvv6yvpgh82rj1n4adr36mi26cs3zbkx8zb55"))))
+        (base32 "11q9fa1jdrv1pd9piaicgqvidq1c08imkwpqhyzcj5r711rl7581"))))
     (build-system trivial-build-system)
     (native-inputs
      (list bash coreutils))
@@ -398,7 +362,7 @@ integrate Windows applications into your desktop.")
                              "wine-" wine-version ".tar.xz"))
          (file-name (string-append name "-" wine-version ".tar.xz"))
          (sha256
-          (base32 "1f0r00b6lk59cmpj42b7f2jrd58d7vxfvpp54j7arwjhdg4yjxlg")))))
+          (base32 "0bkr3klvjy8h4djddr31fvapsi9pc2rsiyhaa7j1lwpq704w4wh2")))))
     (inputs (modify-inputs (package-inputs wine)
               (prepend autoconf ; for autoreconf
                        ffmpeg
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index c9d3e228f1..310553406f 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -37,7 +37,7 @@
 ;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2022 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2022, 2023 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 Niklas Eklund <niklas.eklund@posteo.net>
 ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
@@ -100,6 +100,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages build-tools)
   #:use-module (gnu packages calendar)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages docbook)
@@ -189,14 +190,14 @@ the leaves of a full binary tree.")
 (define-public herbstluftwm
   (package
     (name "herbstluftwm")
-    (version "0.9.4")
+    (version "0.9.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1k03rdr6irsgnjl4w0vac0kk9nsz46qhy74iflmaycxgfv8fxy7f"))
+        (base32 "01c1f5041bblg8d7p12jkynd57xi1frxy61qsrdcxgp5144n1m5j"))
        (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (inputs
@@ -207,6 +208,7 @@ the leaves of a full binary tree.")
            xterm
            xsetroot
            libx11
+           libxcursor
            libxext
            libxfixes
            libxinerama
@@ -223,6 +225,10 @@ the leaves of a full binary tree.")
                (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
        #:phases
        (modify-phases %standard-phases
+         (add-before 'configure 'link-libxcursor
+           (lambda _
+             ;; libX11 will dlopen libXcursor to load cursors.
+             (setenv "LDFLAGS" "-lXcursor")))
          (add-after 'install 'install-xsession
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -734,89 +740,131 @@ This screen locker can be used with any window manager or
 desktop environment.")
     (license license:expat)))
 
-(define-public xmonad-next
+(define-public icewm
   (package
-    (name "xmonad-next")
-    (version "0.17.0")
-    (synopsis "Tiling window manager")
+    (name "icewm")
+    (version "3.3.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://hackage/package/xmonad/"
-                                  "xmonad-" version ".tar.gz"))
+              (uri (string-append
+                    "https://github.com/ice-wm/icewm/releases/download/"
+                    version "/icewm-" version ".tar.lz"))
               (sha256
                (base32
-                "04qspdz9w6xpw1npcmx2zx0595wc68q985pv4i0hvp32zillvdqy"))
-              (patches (search-patches "xmonad-next-dynamic-linking.patch"))))
-    (build-system haskell-build-system)
-    (inputs (list ghc-data-default-class ghc-setlocale ghc-x11))
-    (native-inputs (list ghc-quickcheck ghc-quickcheck-classes))
+                "1m0jl9d2ikwb1s2cpm3q7f73h84mai9y31k8bhsq8y47jbkc6slk"))))
+    (build-system gnu-build-system)
+    (native-inputs (list pkg-config))
+    (inputs (list fontconfig
+                  fribidi
+                  glib                  ;for icewm-menu-fdo
+                  imlib2
+                  libice
+                  libjpeg-turbo
+                  libsm
+                  libxcomposite
+                  libxdamage
+                  libxext
+                  libxfixes
+                  libxft
+                  libxinerama
+                  libxpm
+                  libxrandr
+                  libxrender
+                  libx11
+                  lzip
+                  perl))
     (arguments
      (list #:phases
            #~(modify-phases %standard-phases
-               (add-after 'install 'install-xsession
+               (add-after 'unpack 'remove-gmo-files
+                 ;; gmo files are generated from .po files
+                 ;; so remove them before build to make sure
+                 ;; they are re-generated if needed
                  (lambda _
-                   (let ((xsessions (string-append #$output "/share/xsessions")))
-                     (mkdir-p xsessions)
-                     (call-with-output-file (string-append xsessions
-                                                           "/xmonad.desktop")
-                       (lambda (port)
-                         (format port "~
-                    [Desktop Entry]~@
-                    Name=~a~@
-                    Comment=~a~@
-                    Exec=~a/bin/xmonad~@
-                    Type=Application~%" #$name #$synopsis #$output)))))))))
-    (home-page "https://xmonad.org")
+                   (for-each delete-file
+                             (find-files "po" "\\.gmo$"))))
+               (add-after 'unpack 'skip-failing-test
+                 ;; strtest.cc tests failing due to $HOME and /etc setup
+                 ;; difference under guix
+                 (lambda _
+                   (substitute* "src/Makefile.in"
+                     (("TESTS = strtest\\$\\(EXEEXT\\)")
+                      "TESTS = ")))))))
+    (home-page "https://ice-wm.org/")
+    (synopsis "Window manager for the X Window System")
     (description
-     "Xmonad is a tiling window manager for X.  Windows are arranged
-automatically to tile the screen without gaps or overlap, maximising screen
-use.  All features of the window manager are accessible from the keyboard: a
-mouse is strictly optional.  Xmonad is written and extensible in Haskell.
-Custom layout algorithms, and other extensions, may be written by the user in
-config files.  Layouts are applied dynamically, and different layouts may be
-used on each workspace.  Xinerama is fully supported, allowing windows to be
-tiled on several screens.")
-    (license license:bsd-3)))
+     "IceWM is a window manager for the X Window System.  The goal of IceWM is
+speed, simplicity, and not getting in the user’s way.  It comes with a taskbar
+with pager, global and per-window keybindings and a dynamic menu system.
+Application windows can be managed by keyboard and mouse.  Windows can be
+iconified to the taskbar, to the tray, to the desktop or be made hidden.  They
+are controllable by a quick switch window (Alt+Tab) and in a window list.  A
+handful of configurable focus models are menu-selectable.  Setups with
+multiple monitors are supported by RandR and Xinerama.  IceWM is very
+configurable, themeable and well documented.  It includes an optional external
+background wallpaper manager with transparency support, a simple session
+manager and a system tray.")
+    (license license:lgpl2.0)))
 
 (define-public xmonad
   (package
-    (inherit xmonad-next)
     (name "xmonad")
-    (version "0.15")
+    (version "0.17.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://hackage/package/xmonad/"
-                                  "xmonad-" version ".tar.gz"))
+              (uri (hackage-uri "xmonad" version))
               (sha256
                (base32
-                "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
+                "1apqwyqmc51gamfgsvlanzqqig9qvjss89ibcamhnha1gs1k4jl8"))
               (patches (search-patches "xmonad-dynamic-linking.patch"))))
-    (inputs
-     (list ghc-extensible-exceptions
-           ghc-data-default
-           ghc-quickcheck
-           ghc-semigroups
-           ghc-setlocale
-           ghc-utf8-string
-           ghc-x11))
-    (native-inputs '())
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "xmonad")))
+    (inputs (list ghc-x11 ghc-data-default-class ghc-setlocale))
+    (native-inputs (list ghc-quickcheck ghc-quickcheck-classes))
     (arguments
-     `(#:cabal-revision
-       ("1" "0yqh96qqphllr0zyz5j93cij5w2qvf39xxnrb52pz0qz3pywz9wd")
-       ,@(package-arguments xmonad-next)))))
+      (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'install 'install-xsession
+             (lambda _
+               (let ((xsessions (string-append #$output "/share/xsessions")))
+                 (mkdir-p xsessions)
+                 (call-with-output-file (string-append xsessions
+                                                       "/xmonad.desktop")
+                  (lambda (port)
+                    (format port "~
+                     [Desktop Entry]~@
+                     Name=~a~@
+                     Comment=xmonad window manager~@
+                     Exec=~a/bin/xmonad~@
+                     Type=Application~%" #$name #$output)))))))
+       #:cabal-revision '("2"
+                          "1rgwrnyb7kijzl2mqm8ks2nydh37q5vkbg4400rg9n6x13w2r9b3")))
+    (home-page "http://xmonad.org")
+    (synopsis "Tiling window manager")
+    (description
+     "Xmonad is a tiling window manager for X.  Windows are arranged
+automatically to tile the screen without gaps or overlap, maximising screen
+use.  All features of the window manager are accessible from the keyboard: a
+mouse is strictly optional.  Xmonad is written and extensible in Haskell.
+Custom layout algorithms, and other extensions, may be written by the user in
+config files.  Layouts are applied dynamically, and different layouts may be
+used on each workspace.  Xinerama is fully supported, allowing windows to be
+tiled on several screens.")
+    (license license:bsd-3)))
 
 (define-public xmobar
   (package
     (name "xmobar")
-    (version "0.44.2")
+    (version "0.46")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/xmobar/"
-                                  "xmobar-" version ".tar.gz"))
+              (uri (hackage-uri "xmobar" version))
               (sha256
                (base32
-                "0gdphjn5ll5lkb2psdsb34563wsz6g0y2gg3z8cj4jy8lvbbv808"))))
+                "0glpiq7c0qwfcxnc2flgzj7afm5m1a9ghzwwcq7f8q27m21kddrd"))))
     (build-system haskell-build-system)
+    (properties '((upstream-name . "xmobar")))
     (native-inputs
      (list ghc-hspec hspec-discover))
     (inputs
@@ -837,16 +885,22 @@ tiled on several screens.")
            ghc-timezone-olson
            ghc-x11
            ghc-x11-xft
+           ghc-cairo
+           ghc-pango
            libxpm))
     (arguments
      `(#:configure-flags (list "--flags=all_extensions")
+       ;; Haddock documentation is for the library.
+       #:haddock? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'register 'remove-libraries
+             (lambda* (#:key outputs #:allow-other-keys)
+               (delete-file-recursively (string-append (assoc-ref outputs "out") "/lib"))))
          (add-before 'build 'patch-test-shebang
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
-               (("/bin/bash") (which "bash")))
-             #t)))))
+               (("/bin/bash") (which "bash"))))))))
     (home-page "https://xmobar.org")
     (synopsis "Minimalistic text based status bar")
     (description
@@ -878,54 +932,30 @@ Unlike dmenu, it mangles the input before it presents its choices.  In
 particular, it displays commonly-chosen options before uncommon ones.")
     (license license:bsd-3)))
 
-(define-public ghc-xmonad-contrib-next
+(define-public ghc-xmonad-contrib
   (package
-    (name "ghc-xmonad-contrib-next")
-    (version "0.17.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://hackage/package/xmonad-contrib/"
-                           "xmonad-contrib-" version ".tar.gz"))
-       (sha256
-        (base32 "11g1cyfgfvcmz35qhgi9wzxrk3br8m8b7qy3jvph4nnf6aj13wvy"))))
+    (name "ghc-xmonad-contrib")
+    (version "0.17.1")
+    (source (origin
+              (method url-fetch)
+              (uri (hackage-uri "xmonad-contrib" version))
+              (sha256
+               (base32
+                "0lwj8xkyaw6h0rv3lz2jdqrwzz7yghfmnhpndygkb3wgyhvq6dxb"))))
     (build-system haskell-build-system)
-    (propagated-inputs (list ghc-random ghc-x11 ghc-utf8-string ghc-x11-xft xmonad-next))
+    (properties '((upstream-name . "xmonad-contrib")))
+    (inputs (list ghc-random ghc-x11 xmonad ghc-utf8-string ghc-x11-xft))
     (native-inputs (list ghc-quickcheck ghc-hspec))
-    (home-page "https://xmonad.org")
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0dc9nbn0kaw98rgpi1rq8np601zjhdr1y0ydg6yb82wwaqawql6z")))
+    (home-page "https://xmonad.org/")
     (synopsis "Third party extensions for xmonad")
     (description
      "Third party tiling algorithms, configurations, and scripts to Xmonad, a
 tiling window manager for X.")
     (license license:bsd-3)))
 
-(define-public ghc-xmonad-contrib
-  (package
-    (inherit ghc-xmonad-contrib-next)
-    (name "ghc-xmonad-contrib")
-    (version "0.16")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://hackage/package/xmonad-contrib/"
-                           "xmonad-contrib-" version ".tar.gz"))
-       (sha256
-        (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
-    (arguments
-     `(#:cabal-revision
-       ("1" "0vimkby2gq6sgzxzbvz67caba609xqlv2ii2gi8a1cjrnn6ib011")
-       ,@(package-arguments ghc-xmonad-contrib-next)))
-    (native-inputs '())
-    (propagated-inputs
-     (list ghc-old-time
-           ghc-random
-           ghc-utf8-string
-           ghc-extensible-exceptions
-           ghc-semigroups
-           ghc-x11
-           ghc-x11-xft
-           xmonad))))
-
 (define-public evilwm
   (package
     (name "evilwm")
@@ -958,7 +988,7 @@ tiling window manager for X.")
        #:tests? #f                      ;no tests
        #:phases (modify-phases %standard-phases
                   (delete 'configure)))) ;no configure script
-    (home-page "http://www.6809.org.uk/evilwm/")
+    (home-page "https://www.6809.org.uk/evilwm/")
     (synopsis "Minimalist window manager for the X Window System")
     (description
      "evilwm is a minimalist window manager based on aewm, extended to feature
@@ -1227,7 +1257,7 @@ all of them.  Currently supported window managers include:
 @item WindowMaker
 @item XFCE
 @end enumerate\n")
-    (home-page "http://menumaker.sourceforge.net/")
+    (home-page "https://menumaker.sourceforge.net/")
     (license license:bsd-2)))
 
 (define-public keybinder
@@ -1332,47 +1362,40 @@ It is inspired by Xmonad and dwm.  Its major features include:
 (define-public cwm
   (package
     (name "cwm")
-    (version "6.7")
+    (version "7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://leahneukirchen.org/releases/cwm-"
                            version ".tar.gz"))
        (sha256
-        (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
+        (base32 "145xjwam11194w2irsvs4z0xgn0jdijxfmx67gqd1n0j8g5wan2a"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
-                          (string-append "PREFIX=" %output))
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'build 'install-xsession
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Add a .desktop file to xsessions.
-             (let* ((output (assoc-ref outputs "out"))
-                    (xsessions (string-append output "/share/xsessions")))
-               (mkdir-p xsessions)
-               (with-output-to-file
-                   (string-append xsessions "/cwm.desktop")
-                 (lambda _
-                   (format #t
-                           "[Desktop Entry]~@
-                     Name=cwm~@
-                     Comment=OpenBSD Calm Window Manager fork~@
-                     Exec=~a/bin/cwm~@
-                     TryExec=~@*~a/bin/cwm~@
-                     Icon=~@
-                     Type=Application~%"
-                           output)))
-               #t))))))
-    (inputs
-     (list libxft libxrandr libxinerama))
+     (list
+      #:tests? #f
+      #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
+                           (string-append "PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-after 'build 'install-xsession
+            (lambda _
+              ;; Add a .desktop file to xsessions.
+              (let ((xsessions (string-append #$output "/share/xsessions")))
+                (mkdir-p xsessions)
+                (make-desktop-entry-file
+                 (string-append xsessions "/cwm.desktop")
+                 #:name: cwm
+                 #:exec (string-append #$output "/bin/cwm")
+                 #:try-exec (string-append #$output "/bin/cwm")
+                 #:comment '((#f "OpenBSD Calm Window Manager fork")))))))))
     (native-inputs
-     (list pkg-config bison))
+     (list bison pkg-config))
+    (inputs
+     (list libxrandr libxft libxinerama))
     (home-page "https://github.com/leahneukirchen/cwm")
-    (synopsis "OpenBSD fork of the calmwm window manager")
+    (synopsis "OpenBSD fork of the Calm Window Manager")
     (description "Cwm is a stacking window manager for X11.  It is an OpenBSD
 project derived from the original Calm Window Manager.")
     (license license:isc)))
@@ -1889,59 +1912,55 @@ Wayland compositors supporting the wlr-output-management protocol.")
     (license license:expat))) ; MIT license
 
 (define-public stumpwm
-  ;; Some fixes to make stumpwm work with sbcl>=2.2.7 are not in a release
-  ;; yet, so we use a commit directly.
-  (let ((commit "ff6cb73f48f0df4285948f1009ef3b285c78b351")
-        (revision "1"))
-    (package
-      (name "stumpwm")
-      (version (git-version "22.05" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/stumpwm/stumpwm")
-               (commit commit)))
-         (file-name (git-file-name "stumpwm" version))
-         (sha256
-          (base32 "0gvr136fv5zs61017gns3kbkz00837n0b52fif9vany5fslx3aj2"))))
-      (build-system asdf-build-system/sbcl)
-      (native-inputs
-       (list sbcl-fiasco
-             texinfo
+  (package
+    (name "stumpwm")
+    (version "22.11")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/stumpwm/stumpwm")
+             (commit version)))
+       (file-name (git-file-name "stumpwm" version))
+       (sha256
+        (base32 "1wxgddmkgmpml44a3m6bd8y529b13jz14apxxipmij10wzpgay6d"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-fiasco
+           texinfo
 
-             ;; To build the manual.
-             autoconf
-             automake))
-      (inputs
-       (list sbcl-alexandria
-             sbcl-cl-ppcre
-             sbcl-clx))
-      (outputs '("out" "lib"))
-      (arguments
-       (list
-        #:phases
-        #~(modify-phases %standard-phases
-            (add-after 'unpack 'fix-tests
-              (lambda _
-                (substitute* "stumpwm-tests.asd"
-                  (("\"ALL-TESTS\"")
-                   "\"RUN-PACKAGE-TESTS\" :package"))))
-            (add-after 'create-asdf-configuration 'build-program
-              (lambda* (#:key outputs #:allow-other-keys)
-                (build-program
-                 (string-append (assoc-ref outputs "out") "/bin/stumpwm")
-                 outputs
-                 #:entry-program '((stumpwm:stumpwm) 0))))
-            (add-after 'build-program 'create-desktop-file
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (xsessions (string-append out "/share/xsessions")))
-                  (mkdir-p xsessions)
-                  (call-with-output-file
-                      (string-append xsessions "/stumpwm.desktop")
-                    (lambda (file)
-                      (format file
+           ;; To build the manual.
+           autoconf
+           automake))
+    (inputs
+     (list sbcl-alexandria
+           sbcl-cl-ppcre
+           sbcl-clx))
+    (outputs '("out" "lib"))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-tests
+            (lambda _
+              (substitute* "stumpwm-tests.asd"
+                (("\"ALL-TESTS\"")
+                 "\"RUN-PACKAGE-TESTS\" :package"))))
+          (add-after 'create-asdf-configuration 'build-program
+            (lambda* (#:key outputs #:allow-other-keys)
+              (build-program
+               (string-append (assoc-ref outputs "out") "/bin/stumpwm")
+               outputs
+               #:entry-program '((stumpwm:stumpwm) 0))))
+          (add-after 'build-program 'create-desktop-file
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (xsessions (string-append out "/share/xsessions")))
+                (mkdir-p xsessions)
+                (call-with-output-file
+                    (string-append xsessions "/stumpwm.desktop")
+                  (lambda (file)
+                    (format file
                        "[Desktop Entry]~@
                         Name=stumpwm~@
                         Comment=The Stump Window Manager~@
@@ -1950,26 +1969,23 @@ Wayland compositors supporting the wlr-output-management protocol.")
                         Icon=~@
                         Type=Application~%"
                        out))))))
-            (add-after 'install 'install-manual
-              (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
-                (let* ((out  (assoc-ref outputs "out"))
-                       (info (string-append out "/share/info")))
-                  (invoke "./autogen.sh")
-                  (invoke "sh" "./configure" "SHELL=sh")
-                  (apply invoke "make" "stumpwm.info" make-flags)
-                  (install-file "stumpwm.info" info)))))))
-      (synopsis "Window manager written in Common Lisp")
-      (description
-       "Stumpwm is a window manager written entirely in Common Lisp.
+          (add-after 'install 'install-manual
+            (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
+              (let* ((out  (assoc-ref outputs "out"))
+                     (info (string-append out "/share/info")))
+                (invoke "./autogen.sh")
+                (invoke "sh" "./configure" "SHELL=sh")
+                (apply invoke "make" "stumpwm.info" make-flags)
+                (install-file "stumpwm.info" info)))))))
+    (synopsis "Window manager written in Common Lisp")
+    (description
+     "Stumpwm is a window manager written entirely in Common Lisp.
 It attempts to be highly customizable while relying entirely on the keyboard
 for input.  These design decisions reflect the growing popularity of
 productive, customizable lisp based systems.")
-      (home-page "https://github.com/stumpwm/stumpwm")
-      (license license:gpl2+)
-      (properties `((cl-source-variant . ,(delay cl-stumpwm)))))))
-
-(define-public sbcl-stumpwm
-  (deprecated-package "sbcl-stumpwm" stumpwm))
+    (home-page "https://github.com/stumpwm/stumpwm")
+    (license license:gpl2+)
+    (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
 
 (define-public cl-stumpwm
   (package
@@ -2006,8 +2022,8 @@ productive, customizable lisp based systems.")
            (delete 'cleanup)))))))
 
 (define stumpwm-contrib
-  (let ((commit "d0c05077eca5257d33083de949c10bca4aac4242")
-        (revision "4"))
+  (let ((commit "4613a956add7a17986a3b26c341229466cd13f1d")
+        (revision "5"))
     (package
       (name "stumpwm-contrib")
       (version (git-version "0.0.1" revision commit)) ;no upstream release
@@ -2019,7 +2035,7 @@ productive, customizable lisp based systems.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0zxhqh9wjfk7zas67kmwfx0a47y8rxmh8f1a5rcs300bv1083lkb"))))
+          (base32 "1g8h2vd5qsmaiz6ixlx9ykrv6a08izmkf0js18fvljvznpyhsznz"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("stumpwm" ,stumpwm "lib")))
@@ -2087,9 +2103,6 @@ productive, customizable lisp based systems.")
 control module for StumpWM.")
       (license license:gpl3))))
 
-(define-public sbcl-stumpwm+slynk
-  (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
-
 (define-public sbcl-stumpwm-ttf-fonts
   (package
     (inherit stumpwm-contrib)
diff --git a/gnu/packages/wv.scm b/gnu/packages/wv.scm
index 1fdcf0ac2b..bb773f2ed1 100644
--- a/gnu/packages/wv.scm
+++ b/gnu/packages/wv.scm
@@ -55,5 +55,5 @@ to plain text but will lack formatting.
 Other programs can use wv as a library to convert Word documents to other
 formats.  AbiWord uses it as its Word importer, and KWord uses concepts and
 code from wv in theirs.")
-    (home-page "http://wvware.sourceforge.net/")
+    (home-page "https://wvware.sourceforge.net/")
     (license license:gpl2+)))
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index 0eaebc1068..b226aa4e83 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2023 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,6 +34,7 @@
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix l:)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (gnu packages)
@@ -46,13 +48,16 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages photo)
-  #:use-module (gnu packages video)
   #:use-module (gnu packages pcre)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-check)
+  #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
@@ -121,20 +126,12 @@
                             "--with-sdl"
                             "--enable-gui"
                             "--enable-mediactrl"
-                            "--enable-webview"
-                            "--enable-webviewwebkit")
+                            "--enable-webview")
       #:make-flags
       #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
       #:tests? #f                       ;TODO
       #:phases
       #~(modify-phases %standard-phases
-          (add-after 'unpack 'use-newer-webkit
-            (lambda _
-              ;; XXX: The configure script tests only for an ancient
-              ;; WebKitGTK version.
-              (substitute* "configure"
-                (("webkit2gtk-4\\.0")
-                 "webkit2gtk-4.1"))))
           (add-after 'unpack 'refer-to-inputs
             (lambda* (#:key inputs #:allow-other-keys)
               (let ((catch (search-input-file inputs "include/catch.hpp"))
@@ -342,8 +339,36 @@ provide a 100% native look and feel for the application.")
     (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.")
-    (home-page "http://wxsvg.sourceforge.net")
+    (home-page "https://wxsvg.sourceforge.net")
 
     ;; wxSVG is licenced under the "wxWindows library licence", which is
     ;; the LGPL2.0+, with a few extra permissions.
     (license (list l:lgpl2.0+ (l:fsf-free "file://COPYING")))))
+
+(define-public perl-alien-wxwidgets
+  (package
+    (name "perl-alien-wxwidgets")
+    (version "0.69")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/M/MD/MDOOTSON/Alien-wxWidgets-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0jg2dmkzhj03f6b0vmv597yryfw9cclsdn9ynvvlrzzgpd5lw8jk"))))
+    (build-system perl-build-system)
+    (native-inputs
+     (list perl-lwp-protocol-https
+       perl-module-build
+       perl-test-pod
+       perl-test-pod-coverage
+       wxwidgets))
+    (propagated-inputs (list perl-module-pluggable))
+    (home-page "https://metacpan.org/release/Alien-wxWidgets")
+    (synopsis "Perl module for wxWidgets binaries")
+    (description "Alien::wxWidgets is a Perl module for detecting and
+getting configuration settings from an installed wxWidgets package.")
+    (license l:perl-license)))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 8364a72955..7149fb65d2 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -77,6 +77,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
@@ -97,6 +98,7 @@
   #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
@@ -107,6 +109,7 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
@@ -128,6 +131,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages syncthing)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages terminals)
   #:use-module (gnu packages xml)
@@ -764,7 +768,7 @@ and Matrox.")
           "1q700h9dqcm3zl6c3gj0qxxjcx6ibw2c51wjijydhwdcm26v5mqm"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-static")))
-    (home-page "http://bitmath.org/code/mtdev/")
+    (home-page "https://bitmath.org/code/mtdev/")
     (synopsis "Multitouch protocol translation library")
     (description "Mtdev is a stand-alone library which transforms all
 variants of kernel MT events to the slotted type B protocol.  The events
@@ -1357,7 +1361,7 @@ Escape key when Left Control is pressed and released on its own.")
 (define-public libwacom
   (package
     (name "libwacom")
-    (version "2.4.0")
+    (version "2.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1365,18 +1369,11 @@ Escape key when Left Control is pressed and released on its own.")
                     "libwacom-" version "/libwacom-" version ".tar.xz"))
               (sha256
                (base32
-                "056l5dndd8654bmwlxxhvx8082s7pp9bg0wm68zb56iz3rv25l6h"))))
+                "13x978gzyw28cqd985m5smiqgza0xp3znb1s0msmn8vmjjlwqxi3"))))
     (build-system meson-build-system)
     (arguments
      (list
-      #:configure-flags #~(list "--default-library=shared")
-      #:phases #~(modify-phases %standard-phases
-                   (add-after 'unpack 'fix-tests
-                     (lambda _
-                       ;; Do not attempt to run systemd-specific commands.
-                       (substitute* "test/test_udev_rules.py"
-                         (("(systemd-hwdb|systemctl)")
-                          "true")))))))
+      #:configure-flags #~(list "--default-library=shared")))
     (native-inputs
      (list pkg-config
            ;; For tests.
@@ -1391,9 +1388,9 @@ Escape key when Left Control is pressed and released on its own.")
      ;; libwacom.pc 'Requires' these:
      (list glib libgudev))
     (home-page "https://linuxwacom.github.io/")
-    (synopsis "Helper library for Wacom tablet settings")
+    (synopsis "Helper library for graphics tablet settings")
     (description
-     "Libwacom is a library to help implement Wacom tablet settings.  It is
+     "Libwacom is a library to help implement graphics tablet settings.  It is
 intended to be used by client-programs that need model identification.  It is
 already being used by the gnome-settings-daemon and the GNOME Control Center
 Wacom tablet applet.")
@@ -1785,7 +1782,7 @@ Saver extension) library.")
       (native-inputs (list autoconf automake libtool))
       (inputs
        (list libxt))
-      (home-page "http://www.vergenet.net/~conrad/software/xsel/")
+      (home-page "https://www.vergenet.net/~conrad/software/xsel/")
       (synopsis "Manipulate X selection")
       (description
        "XSel is a command-line program for getting and setting the contents of
@@ -1983,6 +1980,36 @@ border, and background.  It also supports multihead setups, customized mouse
 actions, a built-in clock, a battery monitor and a system tray.")
     (license license:gpl2)))
 
+(define-public tofi
+  (package
+    (name "tofi")
+    (version "0.8.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/philj56/tofi")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "11bfi9his0cc5mzikamr5icv5mh2fyj9jy5l3sbbayj6jk51f68y"))))
+    (build-system meson-build-system)
+    (arguments
+     (list #:meson meson-0.63))         ;requires meson 0.61 or later
+    (native-inputs (list pkg-config))
+    (inputs (list cairo
+                  harfbuzz
+                  libxkbcommon
+                  pango
+                  wayland
+                  wayland-protocols))
+    (home-page "https://github.com/philj56/tofi")
+    (synopsis "Application launcher for Wayland")
+    (description
+     "Tofi is a Dmenu and Rofi replacement for wlroots-based Wayland
+compositors such as Sway.")
+    (license license:expat)))
+
 (define-public dzen
   (let ((commit "488ab66019f475e35e067646621827c18a879ba1")
         (revision "1"))
@@ -2929,6 +2956,48 @@ depending on the value of @code{CM_LAUNCHER}) to let the user select a clip.
 After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.")
       (license license:public-domain))))
 
+(define-public clipman
+  (package
+    (name "clipman")
+    (version "1.6.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append "https://github.com/yory8/" name "/"))
+                    (commit (string-append "v" version))))
+              (sha256 (base32
+                        "0b9kvj0dif4221dy6c1npknhhjxvbc4kygzhwxjirpwjws0yv6v9"))))
+    (build-system go-build-system)
+    (arguments
+     (list #:import-path "github.com/yory8/clipman"
+           #:install-source? #f
+           #:phases #~(modify-phases %standard-phases
+                        (add-before 'build 'patch
+                          (lambda _
+                            (substitute* "src/github.com/yory8/clipman/main.go"
+                              (("gopkg.in/alecthomas/kingpin.v2")
+                               "github.com/alecthomas/kingpin")
+                              (("\"wl-copy\"")
+                               (string-append "\"" (which "wl-copy") "\"")))))
+                        (delete 'install-license-files))))
+    (native-inputs (list go-github-com-alecthomas-template
+                         go-github-com-alecthomas-units))
+    (inputs (list go-github-com-kballard-go-shellquote
+                  go-github-com-alecthomas-kingpin
+                  libnotify
+                  wl-clipboard))
+    (synopsis "Basic clipboard manager with support for persisting copy buffers")
+    (description
+     "A clipboard manager for Wayland that relies on an external selector,
+such as @code{wofi}, @code{bemenu}, @code{dmenu}, or @code{rofi}.
+
+Run the binary in your session by adding @command{exec wl-paste -t text --watch
+clipman store} (or @command{exec wl-paste -t text --watch clipman store 1>>
+PATH/TO/LOGFILE 2>&1 &} to log errors) at the beginning of wherever you
+initialize programs.")
+    (home-page "https://github.com/yory8/clipman")
+    (license license:gpl3)))
+
 (define-public kbdd
   (package
     (name "kbdd")
@@ -3061,6 +3130,29 @@ such as sway, similar to @command{rofi}.")
     (home-page "https://hg.sr.ht/~scoopta/wofi")
     (license license:gpl3+)))
 
+(define-public nwg-launchers
+  (package
+    (name "nwg-launchers")
+    (version "0.7.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/nwg-piotr/nwg-launchers")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0hq2qiqxvrw3g515ywcb676ljc8mdw3pyslgxr3vahizfljah1pv"))))
+    (build-system meson-build-system)
+    (native-inputs (list json-modern-cxx pkg-config))
+    (inputs (list gtk-layer-shell gtkmm-3 librsvg))
+    (home-page "https://github.com/nwg-piotr/nwg-launchers")
+    (synopsis "Application launchers for wlroots")
+    (description
+     "This package provides an application grid, button bar, and dmenu
+applications for Sway and other wlroots-based Wayland compositors.")
+    (license license:gpl3+)))
+
 (define-public dex
   (package
     (name "dex")
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index dda3cff901..716c32d1bb 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -66,6 +66,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages search)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
@@ -184,7 +185,7 @@ storage system.")
 (define-public libxfce4ui
   (package
     (name "libxfce4ui")
-    (version "4.18.1")
+    (version "4.18.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -192,7 +193,7 @@ storage system.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0bp5wl9r6wbl7a18wikldb6kvyqzaz16sk2bh9swwyqv08q7pgvf"))))
+                "01wlwigrq5icf6bz3waqxjd066hm0z397crxnlz0ri764w22sq5d"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -395,7 +396,7 @@ management D-Bus specification.")
 (define-public xfce4-panel
   (package
     (name "xfce4-panel")
-    (version "4.18.1")
+    (version "4.18.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -403,7 +404,7 @@ management D-Bus specification.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0wnfx08gacq803ha6ywvqfxn91brgbyymhi5x2xis713gl4mizgi"))
+                "1hbxwlw806qj7z1169ahwgkl1fm789z22r6dszddx2wzv8w9qv3w"))
               (patches (search-patches "xfce4-panel-plugins.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -627,7 +628,7 @@ your system in categories, so you can quickly find and launch them.")
 (define-public xfce4-session
   (package
     (name "xfce4-session")
-    (version "4.18.0")
+    (version "4.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -635,7 +636,7 @@ your system in categories, so you can quickly find and launch them.")
                                   "xfce4-session-" version ".tar.bz2"))
               (sha256
                (base32
-                "0zwsp2qc1bk87gbvx5fc8wb3hg2nq2ln0fjljks148171d8dpfiq"))
+                "1ky54pc0zi2q3qkpmccr3qa4c08j5c6bb6xxiczdnngjxrz9anhw"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -679,7 +680,7 @@ allows you to shut down the computer from Xfce.")
 (define-public xfce4-settings
   (package
     (name "xfce4-settings")
-    (version "4.18.1")
+    (version "4.18.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -687,7 +688,7 @@ allows you to shut down the computer from Xfce.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "140xclvl05y3xwlckwnryxyj6y6gr8cpksrpzlhvip6jz9l0wxfm"))
+                "08jgvhxhh95rcgpvsfqn1rv7i45zj37zyhcpnkpmgbpshw83cqa6"))
               (patches (search-patches "xfce4-settings-defaults.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -724,7 +725,7 @@ like appearance, display, keyboard and mouse settings.")
 (define-public thunar
   (package
     (name "thunar")
-    (version "4.18.3")                           ;stable version = even minor
+    (version "4.18.4")                           ;stable version = even minor
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -732,7 +733,7 @@ like appearance, display, keyboard and mouse settings.")
                                   "thunar-" version ".tar.bz2"))
               (sha256
                (base32
-                "15rjbr9gdiqzpvy97vz8s9hhr35zvl2kr4q6iwxq0gwza4wfl0pl"))))
+                "1k7dkdhp353l1z2d55384c10iyp59n5qx0hawzf8lqhxzgi3qin4"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--with-custom-thunarx-dirs-enabled")))
@@ -1195,6 +1196,7 @@ for and start applications.")
            greybird-gtk-theme
            hicolor-icon-theme
            mate-polkit-for-xfce
+           mousepad
            ristretto
            shared-mime-info
            thunar
@@ -1204,12 +1206,15 @@ for and start applications.")
            xfce4-notifyd                          ;for pop-up notifications
            xfce4-panel
            xfce4-power-manager
+           xfce4-screenshooter
            xfce4-session
            xfce4-settings
+           xfce4-taskmanager
            xfce4-terminal
            xfconf
            xfdesktop
            xfwm4
+           xkill
            ;; Panel plugins.
            xfce4-battery-plugin
            xfce4-clipman-plugin
@@ -1233,7 +1238,7 @@ system resources, while still being visually appealing and user friendly.")
 (define-public xfce4-power-manager
   (package
     (name "xfce4-power-manager")
-    (version "4.18.0")
+    (version "4.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -1241,7 +1246,7 @@ system resources, while still being visually appealing and user friendly.")
                                   "xfce4-power-manager-" version ".tar.bz2"))
               (sha256
                (base32
-                "16n3f9zam3v8584rprckvr72gmgsv9kyqy690jkrybr5hrw4dvif"))))
+                "00zz9bhzsf2vww8mym9c093sz7va5716qb6kvdvn6ldp9h6b223b"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config intltool))
@@ -1262,7 +1267,7 @@ inhibit interface which allows applications to prevent automatic sleep.")
 (define-public ristretto
   (package
     (name "ristretto")
-    (version "0.12.4")
+    (version "0.13.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/ristretto/"
@@ -1270,7 +1275,7 @@ inhibit interface which allows applications to prevent automatic sleep.")
                                   "ristretto-" version ".tar.bz2"))
               (sha256
                (base32
-                "0c3rx02bk74fip7ishdxnbn0l9f48qbiglckzclz7v758fbmq074"))))
+                "00g3yk06h2xca73bq3dzyiha4ck8ps1vprc3il63knma3ns7crjr"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool desktop-file-utils
@@ -1320,7 +1325,7 @@ memory usage graphically, and it can display processes as a tree.")
 (define-public orage
   (package
     (name "orage")
-    (version "4.16.0")
+    (version "4.18.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/"
@@ -1328,7 +1333,7 @@ memory usage graphically, and it can display processes as a tree.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "000py6r63rlv7pjwvwd7ycrb383lny8ha7ha3qpwh1r0d8xil496"))))
+                "1v5385hps6jgcw1ky9vl7w7iryp0rzxz6s4lx72rz8yg4sdv84v3"))))
     (build-system gnu-build-system)
     (native-inputs
      (list
@@ -1350,7 +1355,7 @@ several different time zones.")
 (define-public xfce4-notifyd
   (package
     (name "xfce4-notifyd")
-    (version "0.7.2")
+    (version "0.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/"
@@ -1358,12 +1363,12 @@ several different time zones.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0yzdidi7x8bfnypn0pnahpc25vmjmdiclvbybjqxmdk9pl8ylhfq"))))
+                "1jcmcjq2kay9kmzd5j5l8kasrzqb7aidp26q4nbmxghxxa3ncyf7"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      (list intltool pkg-config))
     (inputs
-     (list libxfce4ui libnotify xfce4-panel))
+     (list libxfce4ui libnotify sqlite xfce4-panel))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-notifyd")
     (synopsis "Show notification bubbles on Xfce")
     (description
@@ -1413,7 +1418,7 @@ of data to either CD/DVD/BD.")
 (define-public mousepad
   (package
     (name "mousepad")
-    (version "0.5.10")
+    (version "0.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/mousepad/"
@@ -1421,7 +1426,7 @@ of data to either CD/DVD/BD.")
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "1b9bal9wxmgpff6r7k48gnkd0vla7xljmiahjq6mdrdyaa6z7fkf"))))
+                "1m0k36fbh1gkxps3yjfagjnka13ndcfk3r588bc9ka5qhb2salr2"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '(;; Use the GSettings keyfile backend rather than
diff --git a/gnu/packages/xfig.scm b/gnu/packages/xfig.scm
index 1d4d17527c..8efe561433 100644
--- a/gnu/packages/xfig.scm
+++ b/gnu/packages/xfig.scm
@@ -64,7 +64,7 @@
                ;; The patch-dot-desktop-files phase requires a relative name.
                (("Exec=/usr/bin/xfig") "Exec=xfig"))
              #t)))))
-    (home-page "http://mcj.sourceforge.net/")
+    (home-page "https://mcj.sourceforge.net/")
     (synopsis "Interactive drawing tool")
     (description
      "Xfig is an interactive drawing tool which runs under X Window System.
@@ -146,7 +146,7 @@ selected in various ways.  For text, 35 fonts are available.")
          (add-after 'install 'install/doc
            (lambda _
              (invoke "make" "install.man"))))))
-    (home-page "http://mcj.sourceforge.net/")
+    (home-page "https://mcj.sourceforge.net/")
     (synopsis "Create portable LaTeX figures")
     (description
      "Transfig creates a makefile to translate figures described in Fig code
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index fc3c1839b2..e0de8d52cf 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -435,7 +435,7 @@ based on libxml for XML parsing, tree manipulation and XPath support.")
      (list opensp))
     (native-inputs
      (list perl))
-    (home-page "http://openjade.sourceforge.net/")
+    (home-page "https://openjade.sourceforge.net/")
     (synopsis "ISO/IEC 10179:1996 standard DSSSL language implementation")
     (description "OpenJade is an implementation of Document Style Semantics
 and Specification Language (DSSSL), a style language to format SGML or XML
@@ -1088,7 +1088,7 @@ parsing/saving.")
                (base32
                 "1d17pyixbfvjyi2lb0cfp0ch8wwdf44mmg3r5pwqhyyqs66z601a"))))
     (build-system python-build-system)
-    (home-page "http://pyxb.sourceforge.net/")
+    (home-page "https://pyxb.sourceforge.net/")
     (synopsis "Python XML Schema Bindings")
     (description
      "PyXB (\"pixbee\") is a pure Python package that generates Python source
@@ -1137,14 +1137,14 @@ XSL-T processor.  It also performs any necessary post-processing.")
 (define-public xmlsec
   (package
     (name "xmlsec")
-    (version "1.2.36")
+    (version "1.2.37")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.aleksey.com/xmlsec/download/"
                                   "xmlsec1-" version ".tar.gz"))
               (sha256
                (base32
-                "100wsklff8x30rsg0xp191kg8p3z5va2d0q3iy08a791ic07xngh"))))
+                "0747w8mnnyawvvzlvhjpkwm3998c7l5f1hjy1gfvsmhydp5zp3az"))))
     (build-system gnu-build-system)
     (propagated-inputs                  ; according to xmlsec1.pc
      (list libxml2 libxslt))
@@ -1334,7 +1334,7 @@ C++ programming language.")
              #t))))))
    (inputs
     (list libxslt libxml2))
-   (home-page "http://xmlstar.sourceforge.net/")
+   (home-page "https://xmlstar.sourceforge.net/")
    (synopsis "Command line XML toolkit")
    (description "XMLStarlet is a set of command line utilities which can be
 used to transform, query, validate, and edit XML documents.  XPath is used to
@@ -1710,7 +1710,7 @@ support.")
              (substitute* "GNUmakefile"
                (("#! /bin/sh") (which "sh")))
              #t)))))
-    (home-page "http://xmlrpc-c.sourceforge.net/")
+    (home-page "https://xmlrpc-c.sourceforge.net/")
     (synopsis "Lightweight RPC library based on XML and HTTP")
     (description
      "XML-RPC is a quick-and-easy way to make procedure calls over the Internet.
@@ -1795,7 +1795,7 @@ modular implementation of XML-RPC for C and C++.")
                                 (files '("sgml"))
                                 (file-pattern "^catalog$|^CATALOG$|^.*\\.cat$")
                                 (file-type 'regular))))
-    (home-page "http://openjade.sourceforge.net/")
+    (home-page "https://openjade.sourceforge.net/")
     (synopsis "Suite of SGML/XML processing tools")
     (description "OpenSP is an object-oriented toolkit for SGML parsing and
 entity management.  It is a fork of James Clark's SP suite.  The tools it
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 6c4cf36eb9..cd867cc410 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -143,14 +143,14 @@
 (define-public imake
   (package
     (name "imake")
-    (version "1.0.8")
+    (version "1.0.9")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://xorg/individual/util/imake-"
-                          version ".tar.bz2"))
+                          version ".tar.xz"))
       (sha256
-       (base32 "00m7l90ws72k1qm101sd2rx92ckd50cszyng5d4dd77jncbf9lmq"))))
+       (base32 "10wgw3l0rsnvc2191awyg5j24n3g552xgc671qr5vnbliwkrvpkj"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config))
@@ -191,15 +191,15 @@ autotools system.")
 (define-public lndir
   (package
     (name "lndir")
-    (version "1.0.3")
+    (version "1.0.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://xorg/individual/util/"
-                    "lndir-" version ".tar.bz2"))
+                    "lndir-" version ".tar.xz"))
               (sha256
                (base32
-                "0pdngiy8zdhsiqx2am75yfcl36l7kd7d7nl0rss8shcdvsqgmx29"))))
+                "11syg5hx3f7m1d2p7zw717lryk819h6wk8h4vmapfdxvsflkfd1y"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config))
@@ -1429,17 +1429,17 @@ treat it as part of their software base when porting.")
 (define-public libxscrnsaver
   (package
     (name "libxscrnsaver")
-    (version "1.2.3")
+    (version "1.2.4")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/lib/libXScrnSaver-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "1y4vx1vabg7j9hamp0vrfrax5b0lmgm3h0lbgbb3hnkv3dd0f5zr"))))
+            "1zi0r6mqa1g0hhsp02cdsjcxmsbipiv0v65c1h4pl84fydcjikbm"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -1455,14 +1455,14 @@ treat it as part of their software base when porting.")
 (define-public libxxf86dga
   (package
     (name "libxxf86dga")
-    (version "1.1.5")
+    (version "1.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://xorg/individual/lib/"
-                           "libXxf86dga-" version ".tar.bz2"))
+                           "libXxf86dga-" version ".tar.xz"))
        (sha256
-        (base32 "00vjvcdlc1sga251jkxn6gkxmx9h5n290ffxxpa40qbca1gvr61b"))))
+        (base32 "03wqsxbgyrdbrhw8fk3fxc9nk8jnwz5537ym2yif73w0g5sl4i5y"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -1517,17 +1517,17 @@ input from UTF-8 into the locale's encoding.")
 (define-public makedepend
   (package
     (name "makedepend")
-    (version "1.0.6")
+    (version "1.0.8")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/util/makedepend-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "072h9nzh8s5vqfz35dli4fba36fnr219asjrb7p89n8ph0paan6m"))))
+            "0nxs5ibrghym3msbnh0b8i3yd3xgqandmrkc500jm6qq4n06zcmz"))))
     (build-system gnu-build-system)
     (inputs
       (list xorgproto))
@@ -1736,14 +1736,14 @@ features and to query screensaver info on specific windows.")
 (define-public sessreg
   (package
     (name "sessreg")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://xorg/individual/app/sessreg-" version ".tar.bz2"))
+             "mirror://xorg/individual/app/sessreg-" version ".tar.xz"))
        (sha256
-        (base32 "0crczl25zynkrslmm8sjaxszhrh4i33m7h5fg4wfdb3k8aarxjyz"))))
+        (base32 "1hmc9wsfgl2wmy0kccwa4brxbv02w5wiz5hrz72dsz87x1fwsah2"))))
     (build-system gnu-build-system)
     (inputs
       (list xorgproto))
@@ -2200,17 +2200,17 @@ left-handed version of the cursors is also included.")
 (define-public xcursorgen
   (package
     (name "xcursorgen")
-    (version "1.0.7")
+    (version "1.0.8")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xcursorgen-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0ggbv084cavp52hjgcz3vdj0g018axs0m23c03lpc5sgn92gidim"))))
+            "16yc82k4vp7icmf9247z4v38r65pdf032mrpzxj5wa2fggi3rcrj"))))
     (build-system gnu-build-system)
     (inputs
       (list libxcursor libpng))
@@ -2263,17 +2263,17 @@ available.")
 (define-public xdriinfo
   (package
     (name "xdriinfo")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xdriinfo-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0lcx8h3zd11m4w8wf7dyp89826d437iz78cyrix436bqx31x5k6r"))))
+            "0d7p9fj3znq0av9pjgi2kphqaz5w7b9hxlz63zbxs69bknp8p0yx"))))
     (build-system gnu-build-system)
     (inputs
       (list mesa libx11))
@@ -2436,17 +2436,17 @@ provide all features that libinput supports it does little beyond.")
 (define-public xf86-input-joystick
   (package
     (name "xf86-input-joystick")
-    (version "1.6.3")
+    (version "1.6.4")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/driver/xf86-input-joystick-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "1awfq496d082brgjbr60lhm6jvr9537rflwxqdfqwfzjy3n6jxly"))))
+            "1lnc6cvrg81chb2hj3jphgx7crr4ab8wn60mn8f9nsdwza2w8plh"))))
     (build-system gnu-build-system)
     (inputs (list xorg-server))
     (native-inputs (list pkg-config))
@@ -2488,17 +2488,17 @@ It is used to control the pointer with a joystick device.")
 (define-public xf86-input-mouse
   (package
     (name "xf86-input-mouse")
-    (version "1.9.3")
+    (version "1.9.4")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/driver/xf86-input-mouse-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "1iawr1wyl2qch1mqszcs0s84i92mh4xxprflnycbw1adc18b7v4k"))))
+            "0k4dpppplj0hq77lgn8argdcgy61cijr0f4zrzfvv2i3zi8qavvz"))))
     (build-system gnu-build-system)
     (inputs (list xorg-server))
     (native-inputs (list pkg-config))
@@ -2618,16 +2618,16 @@ X server.")
 (define-public xf86-video-ast
   (package
     (name "xf86-video-ast")
-    (version "1.1.5")
+    (version "1.1.6")
     (home-page "https://cgit.freedesktop.org/xorg/driver/xf86-video-ast/")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://xorg/individual/driver/xf86-video-ast-"
-                    version ".tar.bz2"))
+                    version ".tar.xz"))
               (sha256
                (base32
-                "1pm2cy81ma7ldsw0yfk28b33h9z2hcj5rccrxhfxfgvxsiavrnqy"))))
+                "1bqdjcxi8fj48821322djdqnrla2i48wqckdf364zagrqyllyxbm"))))
     (build-system gnu-build-system)
     (inputs (list xorg-server))
     (native-inputs (list pkg-config))
@@ -2832,30 +2832,6 @@ compositing.  Both support Xv overlay and dynamic rotation with XRandR.")
 ;;      "xf86-video-glide is a Glide video driver for the Xorg X server.")
 ;;     (license license:x11)))
 
-(define-public xf86-video-glint
-  (package
-    (name "xf86-video-glint")
-    (version "1.2.9")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/driver/xf86-video-glint-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-           "1lkpspvrvrp9s539bhfdjfh4andaqyk63l6zjn8m3km95smk6a45"))))
-    (build-system gnu-build-system)
-    (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
-     "xf86-video-glint is a GLINT/Permedia video driver for the Xorg
-X server.")
-    (license license:x11)))
-
 (define-public xf86-video-i128
   (package
     (name "xf86-video-i128")
@@ -3022,17 +2998,17 @@ the same level of support for generic VGA or 8514/A adapters.")
 (define-public xf86-video-nv
   (package
     (name "xf86-video-nv")
-    (version "2.1.21")
+    (version "2.1.22")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/driver/xf86-video-nv-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-           "0bdk3pc5y0n7p53q4gc2ff7bw16hy5hwdjjxkm5j3s7hdyg6960z"))))
+           "126j60dgnmiahjk5mxbnaav23hv7nvxvh49vhn6qg2f3nlnr6632"))))
     (build-system gnu-build-system)
     (inputs (list xorg-server))
     (native-inputs (list pkg-config))
@@ -3068,51 +3044,18 @@ supported, and the RENDER extension is not accelerated by this driver.")
 graphics cards.")
     (license license:x11)))
 
-(define-public xf86-video-openchrome
-  (package
-    (name "xf86-video-openchrome")
-    (version "0.6.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/driver/xf86-video-openchrome-"
-               version
-               ".tar.bz2"))
-        (sha256
-         (base32
-          "0x9gq3hw6k661k82ikd1y2kkk4dmgv310xr5q59dwn4k6z37aafs"))))
-    (build-system gnu-build-system)
-    (inputs (list libx11
-                  libxext
-                  libxvmc
-                  mesa
-                  xorgproto
-                  xorg-server))
-    (native-inputs
-     (list pkg-config))
-    (home-page "https://www.x.org/wiki/")
-    (synopsis "Openchrome video driver for X server")
-    (description
-     "xf86-video-openchrome is a video driver for the Xorg X server.
-This driver is intended for VIA chipsets featuring the VIA UniChrome,
-UniChrome Pro and Chrome9 integrated graphics processors.")
-    (license license:x11)))
-
 (define-public xf86-video-qxl
   (package
     (name "xf86-video-qxl")
-    (version "0.1.5")
+    (version "0.1.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
                 "mirror://xorg/individual/driver/"
-                "xf86-video-qxl-" version ".tar.bz2"))
+                "xf86-video-qxl-" version ".tar.xz"))
               (sha256
                (base32
-                "14jc24znnahhmz4kqalafmllsg8awlz0y6gpgdpk5ih38ph851mi"))
-              (patches (search-patches
-                        "xf86-video-qxl-fix-build.patch"))))
+                "0pwncx60r1xxk8kpp9a46ga5h7k7hjqf14726v0gra27vdc9blra"))))
     (build-system gnu-build-system)
     (inputs
       (list libxfont2 spice-protocol xorg-server xorgproto))
@@ -3121,20 +3064,20 @@ UniChrome Pro and Chrome9 integrated graphics processors.")
     (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.")
-    (home-page "http://www.spice-space.org")
+    (home-page "https://www.spice-space.org")
     (license license:x11)))
 
 (define-public xf86-video-r128
   (package
     (name "xf86-video-r128")
-    (version "6.12.0")
+    (version "6.12.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://xorg/individual/driver/"
-                                  name "-" version ".tar.bz2"))
+                                  name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0mz0v5mqmmbncr2drd5zvia1fb7frz2xqwflhhqbnaxx5j48c740"))))
+                "0hf7h54wxgs8njavp0kgadjq1787fhbd588j7pj685hz2wmkq0kx"))))
     (build-system gnu-build-system)
     (inputs (list mesa xorgproto xorg-server))
     (native-inputs
@@ -3220,52 +3163,6 @@ Xorg X server.")
 This driver supports SiS chipsets of 300/315/330/340 series.")
     (license license:bsd-3)))
 
-(define-public xf86-video-suncg6
-  (package
-    (name "xf86-video-suncg6")
-    (version "1.1.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/driver/xf86-video-suncg6-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "04fgwgk02m4nimlv67rrg1wnyahgymrn6rb2cjj1l8bmzkii4glr"))))
-    (build-system gnu-build-system)
-    (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
-     "xf86-video-suncg6 is a GX/TurboGX video driver for the Xorg X server.")
-    (license license:x11)))
-
-(define-public xf86-video-sunffb
-  (package
-    (name "xf86-video-sunffb")
-    (version "1.2.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/driver/xf86-video-sunffb-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "07z3ngifwg2d4jgq8pms47n5lr2yn0ai72g86xxjnb3k20n5ym7s"))))
-    (build-system gnu-build-system)
-    (inputs (list xorg-server))
-    (native-inputs (list pkg-config))
-    (home-page "https://www.x.org/wiki/")
-    (synopsis "SUNFFB video driver for X server")
-    (description
-     "xf86-video-sunffb is a SUNFFB video driver for the Xorg X server.")
-    (license license:x11)))
-
 (define-public xf86-video-tdfx
   (package
     (name "xf86-video-tdfx")
@@ -3289,71 +3186,23 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
      "xf86-video-tdfx is a 3Dfx video driver for the Xorg X server.")
     (license license:x11)))
 
-(define-public xf86-video-tga
-  (package
-    (name "xf86-video-tga")
-    (version "1.2.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/driver/xf86-video-tga-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-           "0cb161lvdgi6qnf1sfz722qn38q7kgakcvj7b45ba3i0020828r0"))
-        (patches (search-patches "xf86-video-tga-remove-mibstore.patch"))))
-    (build-system gnu-build-system)
-    (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
-     "xf86-video-tga is a TGA (DEC 21030) video driver for the Xorg
-X server.")
-    (license license:x11)))
-
-(define-public xf86-video-trident
-  (package
-    (name "xf86-video-trident")
-    (version "1.3.8")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/driver/xf86-video-trident-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-           "0gxcar434kx813fxdpb93126lhmkl3ikabaljhcj5qn3fkcijlcy"))))
-    (build-system gnu-build-system)
-    (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
-     "xf86-video-trident is a Trident video driver for the Xorg X server.")
-    (license license:x11)))
-
 ;; no license
 ;; (define-public xf86-video-v4l
 
 (define-public xf86-video-vesa
   (package
     (name "xf86-video-vesa")
-    (version "2.5.0")
+    (version "2.6.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/driver/xf86-video-vesa-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0nf6ai74c60xk96kgr8q9mx6lrxm5id3765ws4d801irqzrj85hz"))))
+            "1ccvaigb1f1kz8nxxjmkfn598nabd92p16rx1g35kxm8n5qjf20h"))))
     (build-system gnu-build-system)
     (inputs (list xorg-server))
     (native-inputs (list pkg-config))
@@ -3466,17 +3315,17 @@ server driver works.")
 (define-public xf86-video-vmware
   (package
     (name "xf86-video-vmware")
-    (version "13.3.0")
+    (version "13.4.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/driver/xf86-video-vmware-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-           "0v06qhm059klq40m2yx4wypzb7h53aaassbjfmm6clcyclj1k5s7"))))
+           "06mq7spifsrpbwq9b8kn2cn61xq6mpkq6lvh4qi6xk2yxpjixlxf"))))
     (build-system gnu-build-system)
     (inputs
      (list libx11
@@ -3490,24 +3339,24 @@ server driver works.")
     (synopsis "VMware SVGA video driver for X server")
     (description
      "xf86-video-vmware is a VMware SVGA video driver for the Xorg X server.")
+    ;; This package only makes sense on some architectures.
+    (supported-systems (list "x86_64-linux" "i686-linux"))
     (license license:x11)))
 
 (define-public xf86-video-voodoo
   (package
     (name "xf86-video-voodoo")
-    (version "1.2.5")
+    (version "1.2.6")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/driver/xf86-video-voodoo-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-           "1s6p7yxmi12q4y05va53rljwyzd6ry492r1pgi7wwq6cznivhgly"))
-        (patches
-         (search-patches "xf86-video-voodoo-pcitag.patch"))))
+           "00pn5826aazsdipf7ny03s1lypzid31fmswl8y2hrgf07bq76ab2"))))
     (build-system gnu-build-system)
     (inputs (list xorgproto xorg-server))
     (native-inputs (list pkg-config))
@@ -3616,17 +3465,17 @@ configuring modelines and gamma.")
 (define-public xgamma
   (package
     (name "xgamma")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xgamma-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "1lr2nb1fhg5fk2fchqxdxyl739602ggwhmgl2wiv5c8qbidw7w8f"))))
+            "13xw2fqp9cs7xj3nqi8khqxv81rk0dd8khp59xgs2lw9bbldly8w"))))
     (build-system gnu-build-system)
     (inputs
       (list libxxf86vm libx11))
@@ -3643,22 +3492,22 @@ monitor via the X video mode extension.")
 (define-public xhost
   (package
     (name "xhost")
-    (version "1.0.8")
+    (version "1.0.9")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xhost-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "15n3mnd4i5kh4z32qv11580qjgvnng0wry2y753ljrqkkrbkrp52"))))
+            "0ib66h78ykc4zki4arh8hkcsgk1mk8yyy0ay5sdb2d908qqvb1pa"))))
     (build-system gnu-build-system)
     (inputs
       (list libxmu libxau libx11))
     (native-inputs
-      (list pkg-config))
+      (list gettext-minimal pkg-config))
     (home-page "https://gitlab.freedesktop.org/xorg/app/xhost")
     (synopsis "Xorg server access control utility")
     (description
@@ -3780,17 +3629,17 @@ make keyboards more accessible to people with physical impairments.")
 (define-public xkbevd
   (package
     (name "xkbevd")
-    (version "1.1.4")
+    (version "1.1.5")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xkbevd-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0sprjx8i86ljk0l7ldzbz2xlk8916z5zh78cafjv8k1a63js4c14"))))
+            "0swjhk33fp15060hhzycmk288ys51wwm6l7p9xy4blz95mq7nd9q"))))
     (build-system gnu-build-system)
     (inputs
       (list libxkbfile libx11))
@@ -3806,14 +3655,14 @@ requested commands if they occur.")
 (define-public xkbprint
   (package
     (name "xkbprint")
-    (version "1.0.5")
+    (version "1.0.6")
     (source
       (origin
         (method url-fetch)
         (uri (string-append  "mirror://xorg/individual/app/"
-                             "xkbprint-" version ".tar.bz2"))
+                             "xkbprint-" version ".tar.xz"))
         (sha256
-          (base32 "1yi3232g25hhp241irncd8znv3090k2gm0yjcdnz08h89y1zwn2v"))))
+          (base32 "1c57kb8d8cbf720n9bcjhhaqpk08lac0sk4l0jp8j0mryw299k4r"))))
     (build-system gnu-build-system)
     (inputs
      (list libx11 libxkbfile xorgproto))
@@ -3884,17 +3733,17 @@ can be combined together using the @code{rules} component of this database.")
 (define-public xkill
   (package
     (name "xkill")
-    (version "1.0.5")
+    (version "1.0.6")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xkill-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0szzd9nzn0ybkhnfyizb876irwnjsnb78rcaxx6prb71jmmbpw65"))))
+            "01xrmqw498hqlhn6l1sq89s31k6sjf6xlij6a08pnrvmqiwama75"))))
     (build-system gnu-build-system)
     (inputs
       (list libxmu libx11))
@@ -3911,17 +3760,17 @@ programs that have displayed undesired windows on a user's screen.")
 (define-public xlsatoms
   (package
     (name "xlsatoms")
-    (version "1.1.3")
+    (version "1.1.4")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xlsatoms-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "10m3a046jvaw5ywx4y65kl84lsxqan70gww1g1r7cf96ijaqz1jp"))))
+            "1dviriynilkw0jwl0s2h8y95pwh8cxj95cnmllkd6rn0args3gzl"))))
     (build-system gnu-build-system)
     (inputs
       (list libxcb))
@@ -3936,17 +3785,17 @@ programs that have displayed undesired windows on a user's screen.")
 (define-public xlsclients
   (package
     (name "xlsclients")
-    (version "1.1.4")
+    (version "1.1.5")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xlsclients-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "1h8931sn34mcip6vpi4v7hdmr1r58gkbw4s2p97w98kykks2lgvp"))))
+            "1qxsav5gicsfwv1dqlcfpj47vy9i30i7iysrfx5aql02wxbyxfk8"))))
     (build-system gnu-build-system)
     (inputs
       (list libxcb))
@@ -4017,15 +3866,15 @@ Font Description (XLFD) full name for a font.")
 (define-public xfd
   (package
     (name "xfd")
-    (version "1.1.3")
+    (version "1.1.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://xorg/individual/app/xfd-"
-                    version ".tar.bz2"))
+                    version ".tar.xz"))
               (sha256
                (base32
-                "0n6r1v8sm0z0ycqch035xpm46nv5v4mav3kxh36883l3ln5r6bqr"))))
+                "1zbnj0z28dx2rm2h7pjwcz7z1jnl28gz0v9xn3hs2igxcvxhyiym"))))
     (build-system gnu-build-system)
     (arguments
        `(#:configure-flags
@@ -4163,7 +4012,7 @@ an X server.")
 (define-public xrandr
   (package
     (name "xrandr")
-    (version "1.5.1")
+    (version "1.5.2")
     (source
       (origin
         (method url-fetch)
@@ -4172,7 +4021,7 @@ an X server.")
                version ".tar.xz"))
         (sha256
           (base32
-            "0ql75s1n3dm2m3g1ilb9l6hqh15r0v709bgghpwazy3jknpnvivv"))))
+            "0h7jy4c5zgrr06fimnnxhy5ba782b1n4aik29g6bln4h1mwy9gn8"))))
     (build-system gnu-build-system)
     (inputs
       (list libxrender libxrandr xorgproto libx11))
@@ -4263,17 +4112,17 @@ up your screen.")
 (define-public xsetroot
   (package
     (name "xsetroot")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xsetroot-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0z21mqvmdl6rl63q77479wgkfygnll57liza1i3va7sr4fx45i0h"))))
+            "1l9qcv4mldj70slnmfg56nv7yh9j9ca1x795bl26whmlkrdb90b0"))))
     (build-system gnu-build-system)
     (inputs
       (list libxmu libxcursor xbitmaps))
@@ -4314,17 +4163,17 @@ libICE, the X font server, and related components.")
 (define-public xvinfo
   (package
     (name "xvinfo")
-    (version "1.1.4")
+    (version "1.1.5")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/app/xvinfo-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0gz7fvxavqlrqynpfbrm2nc9yx8h0ksnbnv34fj7n1q6cq6j4lq3"))))
+            "0164qpbjmxxa1rbvh6ay1iz2qnp9hl1745k9pk6195kdnbn73piy"))))
     (build-system gnu-build-system)
     (inputs
       (list libxext libxv libx11))
@@ -5796,14 +5645,14 @@ The XCB util-wm module provides the following libraries:
 (define-public xinit
   (package
     (name "xinit")
-    (version "1.4.1")
+    (version "1.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://xorg/individual/app/xinit-"
-                                  version ".tar.bz2"))
+                                  version ".tar.xz"))
               (sha256
                (base32
-                "1fdbakx59vyh474skjydj1bbglpby3y03nl7mxn0z9v8gdhqz6yy"))))
+                "08qz6f6yhis6jdcp6hzspql6ib9a9zp0ddhhbac1b7zg4a6xrn5p"))))
     (build-system gnu-build-system)
     (inputs
      (list xorgproto libx11))
@@ -5825,17 +5674,17 @@ user-friendly mechanism to start the X server.")
 (define-public libxaw3d
   (package
     (name "libxaw3d")
-    (version "1.6.3")
+    (version "1.6.4")
     (source
       (origin
         (method url-fetch)
         (uri (string-append
                "mirror://xorg/individual/lib/libXaw3d-"
                version
-               ".tar.bz2"))
+               ".tar.xz"))
         (sha256
           (base32
-            "0i653s8g25cc0mimkwid9366bqkbyhdyjhckx7bw77j20hzrkfid"))))
+            "0484fn93jqjadc68gnrnjgx0pbgravq2i6ssbbrb13n69d9dy016"))))
     (build-system gnu-build-system)
     (propagated-inputs
       (list libxext libxmu libxt))
@@ -6677,14 +6526,14 @@ box, and a calendar.  It uses GTK+, and will match your desktop theme.")
 (define-public xvfb-run
   (package
     (name "xvfb-run")
-    (version "1.20.11-1")
+    (version "21.1.7-1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://debian/pool/main/x/xorg-server/"
                            "xorg-server_" version ".diff.gz"))
        (sha256
-        (base32 "0hq8a2rw2ginxsifrpj3rsf2shxl69ylkc1650ij5vwjhxdr82hh"))))
+        (base32 "1073m4gzn8yv9kn70fbyq8a2xckgz0wljjr2w7i2bsrg767h29gd"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -6750,7 +6599,7 @@ an existing user-specified one, writes a cookie to it, and then starts the
 @command{Xvfb} X server as a background process.  It also takes care of killing
 the server and cleaning up before returning the exit status of the command.")
     (license (list license:x11          ; the script
-                   license:gpl2+))))              ; the man page
+                   license:gpl2+))))    ; the man page
 
 (define-public setroot
   (package
diff --git a/gnu/packages/zig-xyz.scm b/gnu/packages/zig-xyz.scm
index 3812aa0125..fd42c21638 100644
--- a/gnu/packages/zig-xyz.scm
+++ b/gnu/packages/zig-xyz.scm
@@ -41,7 +41,7 @@
                (base32
                 "1hhs7dz9rpshfd1a7x5swmix2rmh53vsqskh3mzqlrj2lgb3cnii"))))
     (build-system gnu-build-system)
-    (inputs (list zig python))
+    (inputs (list zig-0.9 python))
     (arguments
      (list #:phases #~(modify-phases %standard-phases
                         (delete 'configure)
diff --git a/gnu/packages/zig.scm b/gnu/packages/zig.scm
index cda93bed2e..5414b5ba6e 100644
--- a/gnu/packages/zig.scm
+++ b/gnu/packages/zig.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2021 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Calum Irwin <calumirwin1@gmail.com>
-;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2022, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,12 +25,13 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages llvm))
 
-(define-public zig
+(define-public zig-0.10
   (package
     (name "zig")
-    (version "0.9.1")
+    (version "0.10.1")
     (source
      (origin
        (method git-fetch)
@@ -39,21 +40,25 @@
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0nfvgg23sw50ksy0z0ml6lkdsvmd0278mq29m23dbb2jsirkhry7"))
-       (patches (search-patches "zig-use-system-paths.patch"))))
+        (base32 "1sh5xjsksl52i4cfv1qj36sz5h0ln7cq4pdhgs3960mk8a90im7b"))))
     (build-system cmake-build-system)
     (inputs
-     (list clang-13 ; Clang propagates llvm.
-           lld-13))
+     (list clang-15 ; Clang propagates llvm.
+           lld-15
+           zlib
+           (list zstd "lib")))
     ;; Zig compiles fine with GCC, but also needs native LLVM libraries.
     (native-inputs
-     (list llvm-13))
+     (list llvm-15))
     (arguments
      `(#:configure-flags
        (list ,@(if (%current-target-system)
-                   (string-append "-DZIG_TARGET_TRIPLE="
-                                  (%current-target-system))
-                   '()))
+                   '(string-append "-DZIG_TARGET_TRIPLE="
+                                   (%current-target-system))
+                   '())
+             (string-append "-DZIG_LIB_DIR=" (assoc-ref %outputs "out")
+                            "/lib/zig"))
+       #:validate-runpath? #f       ; TODO: zig binary can't find ld-linux.
        #:out-of-source? #f ; for tests
        #:phases
        (modify-phases %standard-phases
@@ -62,17 +67,20 @@
              ;; Set cache dir, otherwise Zig looks for `$HOME/.cache'.
              (setenv "ZIG_GLOBAL_CACHE_DIR"
                      (string-append (getcwd) "/zig-cache"))))
+         (add-after 'patch-source-shebangs 'patch-more-shebangs
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Zig uses information about /usr/bin/env to determine the
+             ;; version of glibc and other data.
+             (substitute* "lib/std/zig/system/NativeTargetInfo.zig"
+               (("/usr/bin/env") (search-input-file inputs "/bin/env")))))
          (delete 'check)
          (add-after 'install 'check
            (lambda* (#:key outputs tests? #:allow-other-keys)
              (when tests?
                (invoke (string-append (assoc-ref outputs "out") "/bin/zig")
-                       ;; Testing the standard library takes >7.5GB RAM, and
-                       ;; will fail if it is OOM-killed.  The 'test-toolchain'
-                       ;; target skips standard library and doc tests.
-                       "build" "test-toolchain"
-                       ;; Stage 2 is experimental, not what we run with `zig',
-                       ;; and stage 2 tests require a lot of RAM.
+                       "build" "test"
+                       ;; We're not testing the compiler bootstrap chain.
+                       "-Dskip-stage1"
                        "-Dskip-stage2-tests"
                        ;; Non-native tests try to link and execute non-native
                        ;; binaries.
@@ -104,3 +112,56 @@ toolchain.  Among other features it provides
     ;; https://github.com/ziglang/zig/issues/6485
     (supported-systems %64bit-supported-systems)
     (license license:expat)))
+
+(define-public zig-0.9
+  (package
+    (inherit zig-0.10)
+    (name "zig")
+    (version "0.9.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ziglang/zig.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0nfvgg23sw50ksy0z0ml6lkdsvmd0278mq29m23dbb2jsirkhry7"))
+       (patches (search-patches "zig-use-system-paths.patch"))))
+    (inputs
+     (list clang-13 ; Clang propagates llvm.
+           lld-13))
+    ;; Zig compiles fine with GCC, but also needs native LLVM libraries.
+    (native-inputs
+     (list llvm-13))
+    (arguments
+     `(#:configure-flags
+       (list ,@(if (%current-target-system)
+                   (string-append "-DZIG_TARGET_TRIPLE="
+                                  (%current-target-system))
+                   '()))
+       #:out-of-source? #f ; for tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'set-cache-dir
+           (lambda _
+             ;; Set cache dir, otherwise Zig looks for `$HOME/.cache'.
+             (setenv "ZIG_GLOBAL_CACHE_DIR"
+                     (string-append (getcwd) "/zig-cache"))))
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (when tests?
+               (invoke (string-append (assoc-ref outputs "out") "/bin/zig")
+                       ;; Testing the standard library takes >7.5GB RAM, and
+                       ;; will fail if it is OOM-killed.  The 'test-toolchain'
+                       ;; target skips standard library and doc tests.
+                       "build" "test-toolchain"
+                       ;; Stage 2 is experimental, not what we run with `zig',
+                       ;; and stage 2 tests require a lot of RAM.
+                       "-Dskip-stage2-tests"
+                       ;; Non-native tests try to link and execute non-native
+                       ;; binaries.
+                       "-Dskip-non-native")))))))))
+
+(define-public zig zig-0.10)
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index c60053f33c..d55b804ba9 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,19 +21,108 @@
 
 (define-module (gnu services audio)
   #:use-module (guix gexp)
+  #:use-module (guix deprecation)
+  #:use-module (guix diagnostics)
+  #:use-module (guix i18n)
   #:use-module (gnu services)
+  #:use-module (gnu services admin)
+  #:use-module (gnu services configuration)
   #:use-module (gnu services shepherd)
+  #:use-module (gnu services admin)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages mpd)
   #:use-module (guix records)
-  #:use-module (ice-9 match)
   #:use-module (ice-9 format)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-71)
   #:export (mpd-output
             mpd-output?
+            mpd-output-name
+            mpd-output-type
+            mpd-output-enabled?
+            mpd-output-format
+            mpd-output-tags?
+            mpd-output-always-on?
+            mpd-output-mixer-type
+            mpd-output-replay-gain-handler
+            mpd-output-extra-options
+
+            mpd-plugin
+            mpd-plugin?
+            mpd-plugin-plugin
+            mpd-plugin-name
+            mpd-plugin-enabled?
+            mpd-plugin-extra-options
+
+            mpd-partition
+            mpd-partition?
+            mpd-partition-name
+            mpd-partition-extra-options
+
             mpd-configuration
             mpd-configuration?
-            mpd-service-type))
+            mpd-configuration-package
+            mpd-configuration-user
+            mpd-configuration-group
+            mpd-configuration-shepherd-requirement
+            mpd-configuration-log-file
+            mpd-configuration-log-level
+            mpd-configuration-music-directory
+            mpd-configuration-music-dir
+            mpd-configuration-playlist-directory
+            mpd-configuration-playlist-dir
+            mpd-configuration-db-file
+            mpd-configuration-state-file
+            mpd-configuration-sticker-file
+            mpd-configuration-default-port
+            mpd-configuration-endpoints
+            mpd-configuration-address
+            mpd-configuration-database
+            mpd-configuration-partitions
+            mpd-configuration-neighbors
+            mpd-configuration-inputs
+            mpd-configuration-archive-plugins
+            mpd-configuration-input-cache-size
+            mpd-configuration-decoders
+            mpd-configuration-resampler
+            mpd-configuration-filters
+            mpd-configuration-outputs
+            mpd-configuration-playlist-plugins
+            mpd-configuration-extra-options
+            mpd-service-type
+
+            mympd-service-type
+            mympd-configuration
+            mympd-configuration?
+            mympd-configuration-package
+            mympd-configuration-shepherd-requirement
+            mympd-configuration-user
+            mympd-configuration-group
+            mympd-configuration-work-directory
+            mympd-configuration-cache-directory
+            mympd-configuration-acl
+            mympd-configuration-covercache-ttl
+            mympd-configuration-http?
+            mympd-configuration-host
+            mympd-configuration-port
+            mympd-configuration-log-level
+            mympd-configuration-log-to
+            mympd-configuration-lualibs
+            mympd-configuration-uri
+            mympd-configuration-script-acl
+            mympd-configuration-ssl?
+            mympd-configuration-ssl-port
+            mympd-configuration-ssl-cert
+            mympd-configuration-ssl-key
+            mympd-configuration-pin-hash
+            mympd-configuration-save-caches?
+            mympd-ip-acl
+            mympd-ip-acl?
+            mympd-ip-acl-allow
+            mympd-ip-acl-deny))
 
 ;;; Commentary:
 ;;;
@@ -40,150 +130,433 @@
 ;;;
 ;;; Code:
 
-(define-record-type* <mpd-output>
-  mpd-output make-mpd-output
-  mpd-output?
-  (type          mpd-output-type
-                 (default "pulse"))
-  (name          mpd-output-name
-                 (default "MPD"))
-  (enabled?      mpd-output-enabled?
-                 (default #t))
-  (tags?         mpd-output-tags?
-                 (default #t))
-  (always-on?    mpd-output-always-on?
-                 (default #f))
-  (mixer-type    mpd-output-mixer-type
-                 ;; valid: hardware, software, null, none
-                 (default #f))
-  (extra-options mpd-output-extra-options
-                 (default '())))
-
-(define-record-type* <mpd-configuration>
-  mpd-configuration make-mpd-configuration
-  mpd-configuration?
-  (user         mpd-configuration-user
-                (default "mpd"))
-  (music-dir    mpd-configuration-music-dir
-                (default "~/Music"))
-  (playlist-dir mpd-configuration-playlist-dir
-                (default "~/.mpd/playlists"))
-  (db-file      mpd-configuration-db-file
-                (default "~/.mpd/tag_cache"))
-  (state-file   mpd-configuration-state-file
-                (default "~/.mpd/state"))
-  (sticker-file mpd-configuration-sticker-file
-                (default "~/.mpd/sticker.sql"))
-  (port         mpd-configuration-port
-                (default "6600"))
-  (address      mpd-configuration-address
-                (default "any"))
-  (outputs      mpd-configuration-outputs
-                (default (list (mpd-output)))))
-
-(define (mpd-output->string output)
-  "Convert the OUTPUT of type <mpd-output> to a configuration file snippet."
-  (let ((extra (string-join
-                (map (match-lambda
-                       ((key . value)
-                        (format #f "  ~a \"~a\""
-                                (string-map
-                                 (lambda (c) (if (char=? c #\-) #\_ c))
-                                 (symbol->string key))
-                                value)))
-                     (mpd-output-extra-options output))
-                "\n")))
-    (format #f "\
-audio_output {
-  type \"~a\"
-  name \"~a\"
-~:[  enabled \"no\"~%~;~]\
-~:[  tags \"no\"~%~;~]\
-~:[~;  always_on \"yes\"~%~]\
-~@[  mixer_type \"~a\"~%~]\
-~a~%}~%"
-            (mpd-output-type output)
-            (mpd-output-name output)
-            (mpd-output-enabled? output)
-            (mpd-output-tags? output)
-            (mpd-output-always-on? output)
-            (mpd-output-mixer-type output)
-            extra)))
-
-(define (mpd-config->file config)
-  (apply
-   mixed-text-file "mpd.conf"
-   "pid_file \"" (mpd-file-name config "pid") "\"\n"
-   (append (map mpd-output->string
-                (mpd-configuration-outputs config))
-           (map (match-lambda
-                  ((config-name config-val)
-                   (string-append config-name " \"" (config-val config) "\"\n")))
-                `(("user" ,mpd-configuration-user)
-                  ("music_directory" ,mpd-configuration-music-dir)
-                  ("playlist_directory" ,mpd-configuration-playlist-dir)
-                  ("db_file" ,mpd-configuration-db-file)
-                  ("state_file" ,mpd-configuration-state-file)
-                  ("sticker_file" ,mpd-configuration-sticker-file)
-                  ("port" ,mpd-configuration-port)
-                  ("bind_to_address" ,mpd-configuration-address))))))
-
-(define (mpd-file-name config file)
-  "Return a path in /var/run/mpd/ that is writable
-   by @code{user} from @code{config}."
-  (string-append "/var/run/mpd/"
-                 (mpd-configuration-user config)
-                 "/" file))
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-join (string-split (if (string-suffix? "?" str)
+                                   (string-drop-right str 1)
+                                   str)
+                               #\-) "_")))
+
+(define list-of-string?
+  (list-of string?))
+
+(define list-of-symbol?
+  (list-of symbol?))
+
+(define (mpd-serialize-field field-name value)
+  (let ((field (if (string? field-name) field-name
+                   (uglify-field-name field-name)))
+        (value (cond
+                ((boolean? value) (if value "yes" "no"))
+                ((string? value) value)
+                (else (object->string value)))))
+    #~(format #f "~a ~s~%" #$field #$value)))
+
+(define (mpd-serialize-alist field-name value)
+  #~(string-append #$@(generic-serialize-alist list mpd-serialize-field
+                                               value)))
+
+(define mpd-serialize-string mpd-serialize-field)
+(define mpd-serialize-boolean mpd-serialize-field)
+
+(define (mpd-serialize-list-of-string field-name value)
+  #~(string-append #$@(map (cut mpd-serialize-string field-name <>) value)))
+
+(define-maybe string (prefix mpd-))
+(define-maybe list-of-string (prefix mpd-))
+(define-maybe boolean (prefix mpd-))
+
+;;; TODO: Procedures for deprecated fields, to be removed.
+
+(define mpd-deprecated-fields '((music-dir . music-directory)
+                                (playlist-dir . playlist-directory)
+                                (address . endpoints)))
+
+(define (port? value) (or (string? value) (integer? value)))
+
+(define (mpd-serialize-deprecated-field field-name value)
+  (if (maybe-value-set? value)
+      (begin
+        (warn-about-deprecation
+         field-name #f
+         #:replacement (assoc-ref mpd-deprecated-fields field-name))
+        (match field-name
+          ('playlist-dir (mpd-serialize-string "playlist_directory" value))
+          ('music-dir (mpd-serialize-string "music_directory" value))
+          ('address (mpd-serialize-string "bind_to_address" value))))
+      ""))
+
+(define (mpd-serialize-port field-name value)
+  (when (string? value)
+    (warning
+     (G_ "string value for '~a' is deprecated, use integer instead~%")
+     field-name))
+  (mpd-serialize-field "port" value))
+
+(define-maybe port (prefix mpd-))
+
+;;;
+
+;; Generic MPD plugin record, lists only the most prevalent fields.
+(define-configuration mpd-plugin
+  (plugin
+   maybe-string
+   "Plugin name.")
+
+  (name
+   maybe-string
+   "Name.")
+
+  (enabled?
+   maybe-boolean
+   "Whether the plugin is enabled/disabled.")
+
+  (extra-options
+   (alist '())
+   "An association list of option symbols/strings to string values
+to be appended to the plugin configuration. See
+@uref{https://mpd.readthedocs.io/en/latest/plugins.html,MPD plugin reference}
+for available options.")
+
+  (prefix mpd-))
+
+(define (mpd-serialize-mpd-plugin field-name value)
+  #~(format #f "~a {~%~a}~%"
+            '#$field-name
+            #$(serialize-configuration value mpd-plugin-fields)))
+
+(define (mpd-serialize-list-of-mpd-plugin field-name value)
+  #~(string-append #$@(map (cut mpd-serialize-mpd-plugin field-name <>)
+                           value)))
+
+(define list-of-mpd-plugin? (list-of mpd-plugin?))
+
+(define-maybe mpd-plugin (prefix mpd-))
+
+(define-configuration mpd-partition
+  (name
+   string
+   "Partition name.")
+
+  (extra-options
+   (alist '())
+   "An association list of option symbols/strings to string values
+to be appended to the partition configuration. See
+@uref{https://mpd.readthedocs.io/en/latest/user.html#configuring-partitions,Configuring Partitions}
+for available options.")
+
+  (prefix mpd-))
+
+(define (mpd-serialize-mpd-partition field-name value)
+  #~(format #f "partition {~%~a}~%"
+            #$(serialize-configuration value mpd-partition-fields)))
+
+(define (mpd-serialize-list-of-mpd-partition field-name value)
+  #~(string-append #$@(map (cut mpd-serialize-mpd-partition #f <>) value)))
+
+(define list-of-mpd-partition?
+  (list-of mpd-partition?))
+
+(define-configuration mpd-output
+  (name
+   (string "MPD")
+   "The name of the audio output.")
+
+  (type
+   (string "pulse")
+   "The type of audio output.")
+
+  (enabled?
+   (boolean #t)
+   "Specifies whether this audio output is enabled when MPD is started. By
+default, all audio outputs are enabled. This is just the default
+setting when there is no state file; with a state file, the previous
+state is restored.")
+
+  (format
+   maybe-string
+   "Force a specific audio format on output. See
+@uref{https://mpd.readthedocs.io/en/latest/user.html#audio-output-format,Global Audio Format}
+for a more detailed description.")
+
+  (tags?
+   (boolean #t)
+   "If set to @code{#f}, then MPD will not send tags to this output. This
+is only useful for output plugins that can receive tags, for example the
+@code{httpd} output plugin.")
+
+  (always-on?
+   (boolean #f)
+   "If set to @code{#t}, then MPD attempts to keep this audio output always
+open. This may be useful for streaming servers, when you don’t want to
+disconnect all listeners even when playback is accidentally stopped.")
+
+  (mixer-type
+   (string "none")
+   "This field accepts a string that specifies which mixer should be used
+for this audio output: the @code{hardware} mixer, the @code{software}
+mixer, the @code{null} mixer (allows setting the volume, but with no
+effect; this can be used as a trick to implement an external mixer
+External Mixer) or no mixer (@code{none}).")
+
+  (replay-gain-handler
+   maybe-string
+   "This field accepts a string that specifies how
+@uref{https://mpd.readthedocs.io/en/latest/user.html#replay-gain,Replay Gain}
+is to be applied. @code{software} uses an internal software volume control,
+@code{mixer} uses the configured (hardware) mixer control and @code{none}
+disables replay gain on this audio output.")
+
+  (extra-options
+   (alist '())
+   "An association list of option symbols/strings to string values
+to be appended to the audio output configuration.")
+
+  (prefix mpd-))
+
+(define (mpd-serialize-mpd-output field-name value)
+  #~(format #f "audio_output {~%~a}~%"
+            #$(serialize-configuration value mpd-output-fields)))
+
+(define (mpd-serialize-list-of-mpd-plugin-or-output field-name value)
+  (let ((plugins outputs (partition mpd-plugin? value)))
+    #~(string-append #$@(map (cut mpd-serialize-mpd-plugin "audio_output" <>)
+                             plugins)
+                     #$@(map (cut mpd-serialize-mpd-output #f <>) outputs))))
+
+(define list-of-mpd-plugin-or-output?
+  (list-of (lambda (x)
+             (or (mpd-output? x) (mpd-plugin? x)))))
+
+(define-configuration mpd-configuration
+  (package
+   (file-like mpd)
+   "The MPD package."
+   empty-serializer)
+
+  (user
+   (string "mpd")
+   "The user to run mpd as.")
+
+  (group
+   (string "mpd")
+   "The group to run mpd as.")
+
+  (shepherd-requirement
+   (list-of-symbol '())
+   "This is a list of symbols naming Shepherd services that this service
+will depend on."
+   empty-serializer)
+
+  (environment-variables
+   (list-of-string '())
+   "A list of strings specifying environment variables."
+   empty-serializer)
+
+  (log-file
+   (maybe-string "/var/log/mpd/log")
+   "The location of the log file. Set to @code{syslog} to use the
+local syslog daemon or @code{%unset-value} to omit this directive
+from the configuration file.")
+
+  (log-level
+   maybe-string
+   "Supress any messages below this threshold.
+Available values: @code{notice}, @code{info}, @code{verbose},
+@code{warning} and @code{error}.")
+
+  (music-directory
+   maybe-string
+   "The directory to scan for music files.")
+
+  (music-dir ; TODO: deprecated, remove later
+   maybe-string
+   "The directory to scan for music files."
+   mpd-serialize-deprecated-field)
+
+  (playlist-directory
+   maybe-string
+   "The directory to store playlists.")
+
+  (playlist-dir ; TODO: deprecated, remove later
+   maybe-string
+   "The directory to store playlists."
+   mpd-serialize-deprecated-field)
+
+  (db-file
+   maybe-string
+   "The location of the music database.")
+
+  (state-file
+   maybe-string
+   "The location of the file that stores current MPD's state.")
+
+  (sticker-file
+   maybe-string
+   "The location of the sticker database.")
+
+  (default-port
+   (maybe-port 6600)
+   "The default port to run mpd on.")
+
+  (endpoints
+   maybe-list-of-string
+   "The addresses that mpd will bind to. A port different from
+@var{default-port} may be specified, e.g. @code{localhost:6602} and
+IPv6 addresses must be enclosed in square brackets when a different
+port is used.
+To use a Unix domain socket, an absolute path or a path starting with @code{~}
+can be specified here."
+   (lambda (_ endpoints)
+     (if (maybe-value-set? endpoints)
+         (mpd-serialize-list-of-string "bind_to_address" endpoints)
+         "")))
+
+  (address ; TODO: deprecated, remove later
+   maybe-string
+   "The address that mpd will bind to.
+To use a Unix domain socket, an absolute path can be specified here."
+   mpd-serialize-deprecated-field)
+
+  (database
+   maybe-mpd-plugin
+   "MPD database plugin configuration.")
+
+  (partitions
+   (list-of-mpd-partition '())
+   "List of MPD \"partitions\".")
+
+  (neighbors
+   (list-of-mpd-plugin '())
+   "List of MPD neighbor plugin configurations.")
+
+  (inputs
+   (list-of-mpd-plugin '())
+   "List of MPD input plugin configurations."
+   (lambda (_ x)
+     (mpd-serialize-list-of-mpd-plugin "input" x)))
+
+  (archive-plugins
+   (list-of-mpd-plugin '())
+   "List of MPD archive plugin configurations."
+   (lambda (_ x)
+     (mpd-serialize-list-of-mpd-plugin "archive_plugin" x)))
+
+  (input-cache-size
+   maybe-string
+   "MPD input cache size."
+   (lambda (_ x)
+     (if (maybe-value-set? x)
+         #~(string-append "\ninput_cache {\n"
+                          #$(mpd-serialize-string "size" x)
+                          "}\n") "")))
+
+  (decoders
+   (list-of-mpd-plugin '())
+   "List of MPD decoder plugin configurations."
+   (lambda (_ x)
+     (mpd-serialize-list-of-mpd-plugin "decoder" x)))
+
+  (resampler
+   maybe-mpd-plugin
+   "MPD resampler plugin configuration.")
+
+  (filters
+   (list-of-mpd-plugin '())
+   "List of MPD filter plugin configurations."
+   (lambda (_ x)
+     (mpd-serialize-list-of-mpd-plugin "filter" x)))
+
+  (outputs
+   (list-of-mpd-plugin-or-output (list (mpd-output)))
+   "The audio outputs that MPD can use.
+By default this is a single output using pulseaudio.")
+
+  (playlist-plugins
+   (list-of-mpd-plugin '())
+   "List of MPD playlist plugin configurations."
+   (lambda (_ x)
+     (mpd-serialize-list-of-mpd-plugin "playlist_plugin" x)))
+
+  (extra-options
+   (alist '())
+   "An association list of option symbols/strings to string values to be
+appended to the configuration.")
+
+  (prefix mpd-))
+
+(define (mpd-serialize-configuration configuration)
+  (mixed-text-file
+   "mpd.conf"
+   (serialize-configuration configuration mpd-configuration-fields)))
+
+(define (mpd-log-rotation config)
+  (match-record config <mpd-configuration> (log-file)
+    (log-rotation
+     (files (list log-file))
+     (post-rotate #~(begin
+                      (use-modules (gnu services herd))
+                      (with-shepherd-action 'mpd ('reopen) #f))))))
 
 (define (mpd-shepherd-service config)
-  (shepherd-service
-   (documentation "Run the MPD (Music Player Daemon)")
-   (requirement '(user-processes))
-   (provision '(mpd))
-   (start #~(make-forkexec-constructor
-             (list #$(file-append mpd "/bin/mpd")
-                   "--no-daemon"
-                   #$(mpd-config->file config))
-             #:environment-variables
-             ;; Required to detect PulseAudio when run under a user account.
-             (list (string-append
-                    "XDG_RUNTIME_DIR=/run/user/"
-                    (number->string
-                     (passwd:uid
-                      (getpwnam #$(mpd-configuration-user config))))))
-             #:log-file #$(mpd-file-name config "log")))
-   (stop  #~(make-kill-destructor))))
-
-(define (mpd-service-activation config)
-  (with-imported-modules '((guix build utils))
-    #~(begin
-        (use-modules (guix build utils))
-        (define %user
-          (getpw #$(mpd-configuration-user config)))
-
-        (let ((directory #$(mpd-file-name config ".mpd")))
-          (mkdir-p directory)
-          (chown directory (passwd:uid %user) (passwd:gid %user))
-
-          ;; Make /var/run/mpd/USER user-owned as well.
-          (chown (dirname directory)
-                 (passwd:uid %user) (passwd:gid %user))))))
-
-
-(define %mpd-accounts
-  ;; Default account and group for MPD.
-  (list (user-group (name "mpd") (system? #t))
-        (user-account
-         (name "mpd")
-         (group "mpd")
-         (system? #t)
-         (comment "Music Player Daemon (MPD) user")
-
-         ;; Note: /var/run/mpd hosts one sub-directory per user, of which
-         ;; /var/run/mpd/mpd corresponds to the "mpd" user.
-         (home-directory "/var/run/mpd/mpd")
-
-         (shell (file-append shadow "/sbin/nologin")))))
+  (match-record config <mpd-configuration> (user package shepherd-requirement
+                                            log-file playlist-directory
+                                            db-file state-file sticker-file
+                                            environment-variables)
+    (let* ((config-file (mpd-serialize-configuration config)))
+      (shepherd-service
+       (documentation "Run the MPD (Music Player Daemon)")
+       (requirement `(user-processes loopback ,@shepherd-requirement))
+       (provision '(mpd))
+       (start #~(begin
+                  (and=> #$(maybe-value log-file)
+                         (compose mkdir-p dirname))
+
+                  (let ((user (getpw #$user)))
+                    (for-each
+                     (lambda (x)
+                       (when (and x (not (file-exists? x)))
+                         (mkdir-p x)
+                         (chown x (passwd:uid user) (passwd:gid user))))
+                     (list #$(maybe-value playlist-directory)
+                           (and=> #$(maybe-value db-file) dirname)
+                           (and=> #$(maybe-value state-file) dirname)
+                           (and=> #$(maybe-value sticker-file) dirname))))
+
+                  (make-forkexec-constructor
+                   (list #$(file-append package "/bin/mpd")
+                         "--no-daemon"
+                         #$config-file)
+                   #:environment-variables '#$environment-variables)))
+       (stop  #~(make-kill-destructor))
+       (actions
+        (list (shepherd-configuration-action config-file)
+              (shepherd-action
+               (name 'reopen)
+               (documentation "Re-open log files and flush caches.")
+               (procedure
+                #~(lambda (pid)
+                    (if pid
+                        (begin
+                          (kill pid SIGHUP)
+                          (format #t
+                                  "Issued SIGHUP to Service MPD (PID ~a)."
+                                  pid))
+                        (format #t "Service MPD is not running.")))))))))))
+
+(define (mpd-accounts config)
+  (match-record config <mpd-configuration> (user group)
+    (list (user-group
+           (name group)
+           (system? #t))
+          (user-account
+           (name user)
+           (group group)
+           (system? #t)
+           (comment "Music Player Daemon (MPD) user")
+           ;; MPD can use $HOME (or $XDG_CONFIG_HOME) to place its data
+           (home-directory "/var/lib/mpd")
+           (shell (file-append shadow "/sbin/nologin"))))))
 
 (define mpd-service-type
   (service-type
@@ -193,7 +566,242 @@ audio_output {
     (list (service-extension shepherd-root-service-type
                              (compose list mpd-shepherd-service))
           (service-extension account-service-type
-                             (const %mpd-accounts))
-          (service-extension activation-service-type
-                             mpd-service-activation)))
+                             mpd-accounts)
+          (service-extension rottlog-service-type
+                             (compose list mpd-log-rotation))))
    (default-value (mpd-configuration))))
+
+
+;;;
+;;; myMPD
+;;;
+
+(define (string-or-symbol? x)
+  (or (symbol? x) (string? x)))
+
+(define-configuration/no-serialization mympd-ip-acl
+  (allow
+   (list-of-string '())
+   "Allowed IP addresses.")
+
+  (deny
+   (list-of-string '())
+   "Disallowed IP addresses."))
+
+(define-maybe/no-serialization integer)
+(define-maybe/no-serialization mympd-ip-acl)
+
+;; XXX: The serialization procedures are insufficient since we require
+;; access to multiple fields at once.
+;; Fields marked with empty-serializer are never serialized and are
+;; used for command-line arguments or by the service definition.
+(define-configuration/no-serialization mympd-configuration
+  (package
+    (file-like mympd)
+    "The package object of the myMPD server."
+    empty-serializer)
+
+  (shepherd-requirement
+   (list-of-symbol '())
+   "This is a list of symbols naming Shepherd services that this service
+will depend on."
+   empty-serializer)
+
+  (user
+   (string "mympd")
+   "Owner of the @command{mympd} process."
+   empty-serializer)
+
+  (group
+   (string "nogroup")
+   "Owner group of the @command{mympd} process."
+   empty-serializer)
+
+  (work-directory
+   (string "/var/lib/mympd")
+   "Where myMPD will store its data."
+   empty-serializer)
+
+  (cache-directory
+   (string "/var/cache/mympd")
+   "Where myMPD will store its cache."
+   empty-serializer)
+
+  (acl
+   maybe-mympd-ip-acl
+   "ACL to access the myMPD webserver.")
+
+  (covercache-ttl
+   (maybe-integer 31)
+   "How long to keep cached covers, @code{0} disables cover caching.")
+
+  (http?
+   (boolean #t)
+   "HTTP support.")
+
+  (host
+   (string "[::]")
+   "Host name to listen on.")
+
+  (port
+   (maybe-port 80)
+   "HTTP port to listen on.")
+
+  (log-level
+   (integer 5)
+   "How much detail to include in logs, possible values: @code{0} to @code{7}.")
+
+  (log-to
+   (string-or-symbol "/var/log/mympd/log")
+   "Where to send logs. By default, the service logs to
+@file{/var/log/mympd.log}. The alternative is @code{'syslog}, which
+sends output to the running syslog service under the @samp{daemon} facility."
+   empty-serializer)
+
+  (lualibs
+   (maybe-string "all")
+   "See
+@url{https://jcorporation.github.io/myMPD/scripting/#lua-standard-libraries}.")
+
+  (uri
+   maybe-string
+   "Override URI to myMPD.
+See @url{https://github.com/jcorporation/myMPD/issues/950}.")
+
+  (script-acl
+   (maybe-mympd-ip-acl (mympd-ip-acl
+                        (allow '("127.0.0.1"))))
+   "ACL to access the myMPD script backend.")
+
+  (ssl?
+   (boolean #f)
+   "SSL/TLS support.")
+
+  (ssl-port
+   (maybe-port 443)
+   "Port to listen for HTTPS.")
+
+  (ssl-cert
+   maybe-string
+   "Path to PEM encoded X.509 SSL/TLS certificate (public key).")
+
+  (ssl-key
+   maybe-string
+   "Path to PEM encoded SSL/TLS private key.")
+
+  (pin-hash
+   maybe-string
+   "SHA-256 hashed pin used by myMPD to control settings access by
+prompting a pin from the user.")
+
+  (save-caches?
+   maybe-boolean
+   "Whether to preserve caches between service restarts."))
+
+(define (mympd-serialize-configuration config)
+  (define serialize-value
+    (match-lambda
+      ((? boolean? val) (if val "true" "false"))
+      ((? integer? val) (number->string val))
+      ((? mympd-ip-acl? val) (ip-acl-serialize-configuration val))
+      ((? string? val) val)))
+
+  (define (ip-acl-serialize-configuration config)
+    (define (serialize-list-of-string prefix lst)
+      (map (cut format #f "~a~a" prefix <>) lst))
+    (string-join
+     (append
+      (serialize-list-of-string "+" (mympd-ip-acl-allow config))
+      (serialize-list-of-string "-" (mympd-ip-acl-deny config))) ","))
+
+  ;; myMPD configuration fields are serialized as individual files under
+  ;; <work-directory>/config/.
+  (match-record config <mympd-configuration> (work-directory acl
+                                              covercache-ttl http? host port
+                                              log-level lualibs uri script-acl
+                                              ssl? ssl-port ssl-cert ssl-key
+                                              pin-hash save-caches?)
+    (define (serialize-field filename value)
+      (when (maybe-value-set? value)
+        (list (format #f "~a/config/~a" work-directory filename)
+              (mixed-text-file filename (serialize-value value)))))
+
+    (let ((filename-to-field `(("acl" . ,acl)
+                               ("covercache_keep_days" . ,covercache-ttl)
+                               ("http"                 . ,http?)
+                               ("http_host"            . ,host)
+                               ("http_port"            . ,port)
+                               ("loglevel"             . ,log-level)
+                               ("lualibs"              . ,lualibs)
+                               ("mympd_uri"            . ,uri)
+                               ("scriptacl"            . ,script-acl)
+                               ("ssl"                  . ,ssl?)
+                               ("ssl_port"             . ,ssl-port)
+                               ("ssl_cert"             . ,ssl-cert)
+                               ("ssl_key"              . ,ssl-key)
+                               ("pin_hash"             . ,pin-hash)
+                               ("save_caches"          . ,save-caches?))))
+      (filter list?
+              (generic-serialize-alist list serialize-field
+                                       filename-to-field)))))
+
+(define (mympd-shepherd-service config)
+  (match-record config <mympd-configuration> (package shepherd-requirement
+                                              user work-directory
+                                              cache-directory log-level log-to)
+    (let ((log-level* (format #f "MYMPD_LOGLEVEL=~a" log-level)))
+      (shepherd-service
+       (documentation "Run the myMPD daemon.")
+       (requirement `(loopback user-processes ,@shepherd-requirement))
+       (provision '(mympd))
+       (start #~(begin
+                  (let* ((pw (getpwnam #$user))
+                         (uid (passwd:uid pw))
+                         (gid (passwd:gid pw)))
+                    (for-each (lambda (dir)
+                                (mkdir-p dir)
+                                (chown dir uid gid))
+                              (list #$work-directory #$cache-directory)))
+
+                  (make-forkexec-constructor
+                   `(#$(file-append package "/bin/mympd")
+                     "--user" #$user
+                     #$@(if (eqv? log-to 'syslog) '("--syslog") '())
+                     "--workdir" #$work-directory
+                     "--cachedir" #$cache-directory)
+                   #:environment-variables (list #$log-level*)
+                   #:log-file #$(if (string? log-to) log-to #f))))
+       (stop #~(make-kill-destructor))))))
+
+(define (mympd-accounts config)
+  (match-record config <mympd-configuration> (user group)
+                (list (user-group (name group)
+                                  (system? #t))
+                      (user-account (name user)
+                                    (group group)
+                                    (system? #t)
+                                    (comment "myMPD user")
+                                    (home-directory "/var/empty")
+                                    (shell (file-append shadow "/sbin/nologin"))))))
+
+(define (mympd-log-rotation config)
+  (match-record config <mympd-configuration> (log-to)
+    (if (string? log-to)
+        (list (log-rotation
+               (files (list log-to))))
+        '())))
+
+(define mympd-service-type
+  (service-type
+   (name 'mympd)
+   (extensions
+    (list  (service-extension shepherd-root-service-type
+                              (compose list mympd-shepherd-service))
+           (service-extension account-service-type
+                              mympd-accounts)
+           (service-extension special-files-service-type
+                              mympd-serialize-configuration)
+           (service-extension rottlog-service-type
+                              mympd-log-rotation)))
+   (description "Run myMPD, a frontend for MPD. (Music Player Daemon)")
+   (default-value (mympd-configuration))))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 9e799445d2..7ad1e765bd 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2022 Justin Veilleux <terramorpha@cock.li>
 ;;; Copyright © 2022 ( <paren@disroot.org>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,6 +65,7 @@
                 #:select (coreutils glibc glibc-utf8-locales tar
                           canonical-package))
   #:use-module ((gnu packages compression) #:select (gzip))
+  #:use-module (gnu packages fonts)
   #:autoload   (gnu packages guile-xyz) (guile-netlink)
   #:autoload   (gnu packages hurd) (hurd)
   #:use-module (gnu packages package-management)
@@ -103,6 +105,13 @@
             console-font-service
             virtual-terminal-service-type
 
+            host
+            host?
+            host-address
+            host-canonical-name
+            host-aliases
+            hosts-service-type
+
             static-networking
             static-networking?
             static-networking-addresses
@@ -685,6 +694,72 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
            (rngd-configuration
             (rng-tools rng-tools)
             (device device))))
+
+;;;
+;;; /etc/hosts
+;;;
+
+(define (valid-name? name)
+  "Return true if @var{name} is likely to be a valid host name."
+  (false-if-exception (not (string-any char-set:whitespace name))))
+
+(define-compile-time-procedure (assert-valid-name (name valid-name?))
+  "Ensure @var{name} is likely to be a valid host name."
+  ;; TODO: RFC compliant implementation.
+  (unless (valid-name? name)
+    (raise
+     (make-compound-condition
+      (formatted-message (G_ "host name '~a' contains invalid characters")
+                         name)
+      (condition (&error-location
+                  (location
+                   (source-properties->location procedure-call-location)))))))
+  name)
+
+(define-record-type* <host> %host
+  ;; XXX: Using the record type constructor becomes tiresome when
+  ;; there's multiple records to make.
+  make-host host?
+  (address        host-address)
+  (canonical-name host-canonical-name
+                  (sanitize assert-valid-name))
+  (aliases        host-aliases
+                  (default '())
+                  (sanitize (cut map assert-valid-name <>))))
+
+(define* (host address canonical-name #:optional (aliases '()))
+  "Return a new record for the host at @var{address} with the given
+@var{canonical-name} and possibly @var{aliases}.
+
+@var{address} must be a string denoting a valid IPv4 or IPv6 address, and
+@var{canonical-name} and the strings listed in @var{aliases} must be valid
+host names."
+  (%host
+   (address address)
+   (canonical-name canonical-name)
+   (aliases aliases)))
+
+(define hosts-service-type
+  ;; Extend etc-service-type with a entry for @file{/etc/hosts}.
+  (let* ((serialize-host-record
+          (lambda (record)
+            (match-record record <host> (address canonical-name aliases)
+              (format #f "~a~/~a~{~^~/~a~}~%" address canonical-name aliases))))
+         (host-etc-service
+          (lambda (lst)
+            `(("hosts" ,(plain-file "hosts"
+                                    (format #f "~{~a~}"
+                                            (map serialize-host-record
+                                                 lst))))))))
+    (service-type
+     (name 'etc-hosts)
+     (extensions
+      (list
+       (service-extension etc-service-type
+                          host-etc-service)))
+     (compose concatenate)
+     (extend append)
+     (description "Populate the @file{/etc/hosts} file."))))
 
 
 ;;;
@@ -749,10 +824,11 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
 of console keymaps with @command{loadkeys}.")))
 
 (define %default-console-font
-  ;; Note: 'LatGrkCyr-8x16' has the advantage of providing three common
-  ;; scripts as well as glyphs for em dash, quotation marks, and other Unicode
-  ;; codepoints notably found in the UTF-8 manual.
-  "LatGrkCyr-8x16")
+  ;; Note: the 'font-gnu-unifont' package cannot be cross-compiled (yet), but
+  ;; its "psf" output is the same whether it's built natively or not, hence
+  ;; 'ungexp-native'.
+  #~(string-append #+font-gnu-unifont:psf
+                   "/share/consolefonts/Unifont-APL8x16.psf.gz"))
 
 (define (console-font-shepherd-services tty+font)
   "Return a list of Shepherd services for each pair in TTY+FONT."
@@ -2502,7 +2578,7 @@ notably to select, copy, and paste text.  The default options use the
                   ;; TODO: Make this configurable.
                   #:environment-variables
                   (list (string-append "XDG_DATA_DIRS="
-                                       #$font-gnu-unifont "/share"))))
+                                       #+font-gnu-unifont "/share"))))
         (stop #~(make-kill-destructor)))))
    (description "Start the @command{kmscon} virtual terminal emulator for the
 Linux @dfn{kernel mode setting} (KMS).")))
@@ -3071,6 +3147,7 @@ to handle."
        (default-session-command (greetd-default-session-command config)))
     (mixed-text-file
      config-file-name
+     "[general]\n"
      "source_profile = " (if source-profile? "true" "false") "\n"
      "[terminal]\n"
      "vt = " terminal-vt "\n"
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index 6b0291dc00..02d1aa1796 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -34,6 +34,7 @@
   #:autoload   (texinfo) (texi-fragment->stexi)
   #:autoload   (texinfo serialize) (stexi->texi)
   #:use-module (ice-9 curried-definitions)
+  #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-34)
@@ -370,6 +371,8 @@ DEFAULT."
                      (cond
                       ((package? val)
                        (symbol->string (package->symbol val)))
+                      (((list-of package?) val)
+                       (format #f "(~{~a~^ ~})" (map package->symbol val)))
                       (else (str val))))
 
                    `(entry (% (heading
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index fe1f0fd20a..4724294433 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -3,10 +3,10 @@
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2017, 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2017, 2020, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2018, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2019 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
@@ -59,6 +59,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages scanner)
   #:use-module (gnu packages suckless)
+  #:use-module (gnu packages sugar)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages lxqt)
@@ -73,6 +74,7 @@
   #:use-module (guix utils)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:export (<upower-configuration>
@@ -143,6 +145,10 @@
             lxqt-desktop-configuration?
             lxqt-desktop-service-type
 
+            sugar-desktop-configuration
+            sugar-desktop-configuration?
+            sugar-desktop-service-type
+
             xfce-desktop-configuration
             xfce-desktop-configuration?
             xfce-desktop-service
@@ -183,11 +189,19 @@
 (define (bool value)
   (if value "true\n" "false\n"))
 
-(define (package-direct-input-selector input)
+(define (package-direct-input-selector tree)
+  "Return a procedure that selects TREE from the inputs of PACKAGE.  If TREE
+is a list, it recursively searches it until it locates the last item of TREE."
   (lambda (package)
-    (match (assoc-ref (package-direct-inputs package) input)
-      ((package . _) package))))
-
+    (let loop ((tree (if (pair? tree)
+                         tree
+                         (list tree)))
+               (package package))
+      (if (null? tree)
+          package
+          (loop (cdr tree)
+                (car (assoc-ref (package-direct-inputs package)
+                                (car tree))))))))
 
 
 ;;;
@@ -1339,28 +1353,44 @@ rules.")
 (define-record-type* <gnome-desktop-configuration> gnome-desktop-configuration
   make-gnome-desktop-configuration
   gnome-desktop-configuration?
-  (gnome gnome-package (default gnome)))
+  (gnome gnome-desktop-configuration-gnome
+         (default gnome)))
 
-(define (gnome-packages config packages)
-  "Return the list of GNOME dependencies from CONFIG which names are part of
-the given PACKAGES list."
-  (let ((gnome (gnome-package config)))
-    (map (lambda (name)
-           ((package-direct-input-selector name) gnome))
-         packages)))
+(define (gnome-package gnome name)
+  "Return the package NAME among the GNOME package inputs.  NAME can be a
+single name or a tree-like, e.g. @code{'(\"gnome-boxes\" \"spice-gtk\")} to
+denote the spice-gtk input of the gnome-boxes input of the GNOME meta-package."
+  ((package-direct-input-selector name) gnome))
+
+(define (gnome-packages gnome names)
+  "Return the package NAMES among the GNOME package inputs."
+  (map (cut gnome-package gnome <>) names))
 
 (define (gnome-udev-rules config)
   "Return the list of GNOME dependencies that provide udev rules."
-  (gnome-packages config '("gnome-settings-daemon")))
+  (let ((gnome (gnome-desktop-configuration-gnome config)))
+    (gnome-packages gnome '("gnome-settings-daemon"))))
 
 (define (gnome-polkit-settings config)
   "Return the list of GNOME dependencies that provide polkit actions and
 rules."
-  (gnome-packages config
-                  '("gnome-settings-daemon"
-                    "gnome-control-center"
-                    "gnome-system-monitor"
-                    "gvfs")))
+  (let ((gnome (gnome-desktop-configuration-gnome config)))
+    (gnome-packages gnome
+                    '("gnome-settings-daemon"
+                      "gnome-control-center"
+                      "gnome-system-monitor"
+                      "gvfs"
+                      ;; spice-gtk provides polkit actions for USB redirection
+                      ;; in GNOME Boxes.
+                      ("gnome-boxes" "spice-gtk")))))
+
+(define (gnome-setuid-programs config)
+  "Return the list of GNOME setuid programs."
+  (let* ((gnome (gnome-desktop-configuration-gnome config))
+         (spice-gtk (gnome-package gnome '("gnome-boxes" "spice-gtk"))))
+    (map file-like->setuid-program
+         (list (file-append spice-gtk
+                            "/libexec/spice-client-glib-usb-acl-helper")))))
 
 (define gnome-desktop-service-type
   (service-type
@@ -1370,9 +1400,10 @@ rules."
                              gnome-udev-rules)
           (service-extension polkit-service-type
                              gnome-polkit-settings)
+          (service-extension setuid-program-service-type
+                             gnome-setuid-programs)
           (service-extension profile-service-type
-                             (compose list
-                                      gnome-package))))
+                             (compose list gnome-desktop-configuration-gnome))))
    (default-value (gnome-desktop-configuration))
    (description "Run the GNOME desktop environment.")))
 
@@ -1493,6 +1524,38 @@ rules."
 
 
 ;;;
+;;; Sugar desktop service.
+;;;
+
+(define-record-type* <sugar-desktop-configuration> sugar-desktop-configuration
+  make-sugar-desktop-configuration
+  sugar-desktop-configuration?
+  (sugar sugar-package (default sugar))
+  (gobject-introspection
+   sugar-gobject-introspection (default gobject-introspection))
+  (activities
+   sugar-activities (default (list sugar-help-activity))))
+
+(define (sugar-polkit-settings config)
+  "Return the list of packages that provide polkit actions and rules."
+  (list (sugar-package config)))
+
+(define sugar-desktop-service-type
+  (service-type
+   (name 'sugar-desktop)
+   (extensions
+    (list (service-extension polkit-service-type
+                             sugar-polkit-settings)
+          (service-extension profile-service-type
+                             (lambda (config)
+                               (cons* (sugar-package config)
+                                      (sugar-gobject-introspection config)
+                                      (sugar-activities config))))))
+   (default-value (sugar-desktop-configuration))
+   (description "Run the Sugar desktop environment.")))
+
+
+;;;
 ;;; X11 socket directory service
 ;;;
 
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index 65bf0b5a7f..2dfedc553e 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -126,7 +126,18 @@
             nar-herder-configuration-storage
             nar-herder-configuration-storage-limit
             nar-herder-configuration-storage-nar-removal-criteria
-            nar-herder-configuration-log-level))
+            nar-herder-configuration-log-level
+            nar-herder-configuration-cached-compressions
+            nar-herder-configuration-cached-compression-min-uses
+            nar-herder-configuration-cached-compression-workers
+            nar-herder-configuration-cached-compression-nar-source
+
+            nar-herder-cached-compression-configuration
+            nar-herder-cached-compression-configuration?
+            nar-herder-cached-compression-configuration-type
+            nar-herder-cached-compression-configuration-level
+            nar-herder-cached-compression-configuration-directory
+            nar-herder-cached-compression-configuration-directory-max-size))
 
 ;;;; Commentary:
 ;;;
@@ -828,17 +839,67 @@ ca-certificates.crt file in the system profile."
   (negative-ttl  nar-herder-configuration-negative-ttl
                  (default #f))
   (log-level     nar-herder-configuration-log-level
-                 (default 'DEBUG)))
+                 (default 'DEBUG))
+  (cached-compressions
+   nar-herder-configuration-cached-compressions
+   (default '()))
+  (cached-compression-min-uses
+   nar-herder-configuration-cached-compression-min-uses
+   (default 3))
+  (cached-compression-workers
+   nar-herder-configuration-cached-compression-workers
+   (default 2))
+  (cached-compression-nar-source
+   nar-herder-configuration-cached-compression-nar-source
+   (default #f)))
 
+(define-record-type* <nar-herder-cached-compression-configuration>
+  nar-herder-cached-compression-configuration
+  make-nar-herder-cached-compression-configuration
+  nar-herder-cached-compression-configuration?
+  (type                nar-herder-cached-compression-configuration-type)
+  (level               nar-herder-cached-compression-configuration-level
+                       (default #f))
+  (directory           nar-herder-cached-compression-configuration-directory
+                       (default #f))
+  (directory-max-size
+   nar-herder-cached-compression-configuration-directory-max-size
+   (default #f)))
 
 (define (nar-herder-shepherd-services config)
+  (define (cached-compression-configuration->options cached-compression)
+    (match-record
+        cached-compression
+        <nar-herder-cached-compression-configuration>
+      (type level directory directory-max-size)
+
+      `(,(simple-format #f "--enable-cached-compression=~A~A"
+                        type
+                        (if level
+                            (simple-format #f ":~A" level)
+                            ""))
+        ,@(if directory
+              (list
+               (simple-format #f "--cached-compression-directory=~A=~A"
+                              type
+                              directory))
+              '())
+        ,@(if directory-max-size
+              (list
+               (simple-format #f "--cached-compression-directory-max-size=~A=~A"
+                              type
+                              directory-max-size))
+              '()))))
+
   (match-record config <nar-herder-configuration>
     (package user group
              mirror
              database database-dump
              host port
              storage storage-limit storage-nar-removal-criteria
-             ttl negative-ttl log-level)
+             ttl negative-ttl log-level
+             cached-compressions cached-compression-min-uses
+             cached-compression-workers cached-compression-nar-source)
 
     (unless (or mirror storage)
       (error "nar-herder: mirror or storage must be set"))
@@ -882,6 +943,24 @@ ca-certificates.crt file in the system profile."
                              '())
                       #$@(if log-level
                              (list (simple-format #f "--log-level=~A" log-level))
+                             '())
+                      #$@(append-map
+                          cached-compression-configuration->options
+                          cached-compressions)
+                      #$@(if cached-compression-min-uses
+                             (list (simple-format
+                                    #f "--cached-compression-min-uses=~A"
+                                    cached-compression-min-uses))
+                             '())
+                      #$@(if cached-compression-workers
+                             (list (simple-format
+                                    #f "--cached-compression-workers=~A"
+                                    cached-compression-workers))
+                             '())
+                      #$@(if cached-compression-nar-source
+                             (list (simple-format
+                                    #f "--cached-compression-nar-source=~A"
+                                    cached-compression-nar-source))
                              '()))
                 #:user #$user
                 #:group #$group
diff --git a/gnu/services/lightdm.scm b/gnu/services/lightdm.scm
index 7e3864fec2..0b9094cda1 100644
--- a/gnu/services/lightdm.scm
+++ b/gnu/services/lightdm.scm
@@ -151,7 +151,7 @@ icon themes."
    "The name of the cursor theme to use.")
   (cursor-theme-size
    (number 16)
-   "The size to use for the the cursor theme.")
+   "The size to use for the cursor theme.")
   (allow-debugging?
    maybe-boolean
    "Set to #t to enable debug log level.")
diff --git a/gnu/services/monitoring.scm b/gnu/services/monitoring.scm
index 44e2e8886c..bbf8b10f8b 100644
--- a/gnu/services/monitoring.scm
+++ b/gnu/services/monitoring.scm
@@ -662,9 +662,11 @@ $DB['PASSWORD'] = " (let ((file (location-file %location))
                               (string-append "trim(file_get_contents('"
                                              db-secret-file "'));\n"))
                           (begin
-                            (display-hint (format #f (G_ "~a:~a:~a: ~a:
+                            (display-hint (G_ "~a:~a:~a: ~a:
 Consider using @code{db-secret-file} instead of @code{db-password} for better
-security.") file line column 'zabbix-front-end-configuration))
+security.")
+                                          file line column
+                                          'zabbix-front-end-configuration)
                             (format #f "'~a';~%" db-password))))
                      "
 // Schema name. Used for IBM DB2 and PostgreSQL.
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 89ce16f6af..dacf64c2d1 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2022, 2023 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2023 Declan Tsien <declantsien@riseup.net>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -80,7 +81,9 @@
   #:use-module (json)
   #:re-export (static-networking-service
                static-networking-service-type)
-  #:export (%facebook-host-aliases
+  #:export (%facebook-host-aliases ;deprecated
+            block-facebook-hosts-service-type
+
             dhcp-client-service-type
             dhcp-client-configuration
             dhcp-client-configuration?
@@ -235,39 +238,36 @@
 ;;;
 ;;; Code:
 
-(define %facebook-host-aliases
+(define facebook-host-aliases
   ;; This is the list of known Facebook hosts to be added to /etc/hosts if you
   ;; are to block it.
-  "\
-# Block Facebook IPv4.
-127.0.0.1   www.facebook.com
-127.0.0.1   facebook.com
-127.0.0.1   login.facebook.com
-127.0.0.1   www.login.facebook.com
-127.0.0.1   fbcdn.net
-127.0.0.1   www.fbcdn.net
-127.0.0.1   fbcdn.com
-127.0.0.1   www.fbcdn.com
-127.0.0.1   static.ak.fbcdn.net
-127.0.0.1   static.ak.connect.facebook.com
-127.0.0.1   connect.facebook.net
-127.0.0.1   www.connect.facebook.net
-127.0.0.1   apps.facebook.com
-
-# Block Facebook IPv6.
-fe80::1%lo0 facebook.com
-fe80::1%lo0 login.facebook.com
-fe80::1%lo0 www.login.facebook.com
-fe80::1%lo0 fbcdn.net
-fe80::1%lo0 www.fbcdn.net
-fe80::1%lo0 fbcdn.com
-fe80::1%lo0 www.fbcdn.com
-fe80::1%lo0 static.ak.fbcdn.net
-fe80::1%lo0 static.ak.connect.facebook.com
-fe80::1%lo0 connect.facebook.net
-fe80::1%lo0 www.connect.facebook.net
-fe80::1%lo0 apps.facebook.com\n")
-
+  (let ((domains '("facebook.com" "www.facebook.com"
+                   "login.facebook.com" "www.login.facebook.com"
+                   "fbcdn.net" "www.fbcdn.net" "fbcdn.com" "www.fbcdn.com"
+                   "static.ak.fbcdn.net" "static.ak.connect.facebook.com"
+                   "connect.facebook.net" "www.connect.facebook.net"
+                   "apps.facebook.com")))
+    (append-map (lambda (name)
+                  (map (lambda (addr)
+                         (host addr name))
+                       (list "127.0.0.1" "::1"))) domains)))
+
+(define-deprecated %facebook-host-aliases
+  block-facebook-hosts-service-type
+  (string-join
+   (map (lambda (x)
+          (string-append (host-address x) "\t"
+                         (host-canonical-name x) "\n"))
+        facebook-host-aliases)))
+
+(define block-facebook-hosts-service-type
+  (service-type
+   (name 'block-facebook-hosts)
+   (extensions
+    (list (service-extension hosts-service-type
+                             (const facebook-host-aliases))))
+   (default-value #f)
+   (description "Add a list of known Facebook hosts to @file{/etc/hosts}")))
 
 (define-record-type* <dhcp-client-configuration>
   dhcp-client-configuration make-dhcp-client-configuration
diff --git a/gnu/services/telephony.scm b/gnu/services/telephony.scm
index b66c7a8563..23ccb8d403 100644
--- a/gnu/services/telephony.scm
+++ b/gnu/services/telephony.scm
@@ -267,7 +267,7 @@ consistent state."))
 CONFIG, a <jami-configuration> object."
   (match-record config <jami-configuration>
     (libjami dbus enable-logging? debug? auto-answer?)
-    `(,(file-append libjami "/libexec/jamid")
+    `(,#~(string-append #$libjami:bin "/libexec/jamid")
       "--persistent"                    ;stay alive after client quits
       ,@(if enable-logging?
             '()                         ;logs go to syslog by default
@@ -524,7 +524,8 @@ argument, either a registered username or the fingerprint of the account.")
                    #:environment-variables
                    ;; This is so that the cx.ring.Ring service D-Bus
                    ;; definition is found by dbus-daemon.
-                   (list (string-append "XDG_DATA_DIRS=" #$libjami "/share"))))
+                   (list (string-append "XDG_DATA_DIRS="
+                                        #$libjami:bin "/share"))))
                (stop #~(make-kill-destructor)))
 
               (shepherd-service
@@ -595,7 +596,8 @@ argument, either a registered username or the fingerprint of the account.")
                     ;; Start the daemon.
                     (define daemon-pid
                       ((make-forkexec-constructor/container
-                        '#$(jami-configuration->command-line-arguments config)
+                        (list #$@(jami-configuration->command-line-arguments
+                                  config))
                         #:mappings
                         (list (file-system-mapping
                                (source "/dev/log") ;for syslog
diff --git a/gnu/system.scm b/gnu/system.scm
index 0109e9a712..bb1b7b5309 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,7 +98,7 @@
             operating-system-user-services
             operating-system-packages
             operating-system-host-name
-            operating-system-hosts-file
+            operating-system-hosts-file ;deprecated
             operating-system-hurd
             operating-system-kernel
             operating-system-kernel-file
@@ -169,7 +170,7 @@
             read-boot-parameters-file
             boot-parameters->menu-entry
 
-            local-host-aliases
+            local-host-aliases                    ;deprecated
             %root-account
             %setuid-programs
             %sudoers-specification
@@ -208,6 +209,15 @@ VERSION is the target version of the boot-parameters record."
                          #$system "/boot")))
 
 ;; System-wide configuration.
+
+(define-with-syntax-properties (warn-hosts-file-field-deprecation
+                                (value properties))
+  (when value
+    (warning (source-properties->location properties)
+             (G_ "the 'hosts-file' field is deprecated, please use \
+'hosts-service-type' instead~%")))
+  value)
+
 ;; TODO: Add per-field docstrings/stexi.
 (define-record-type* <operating-system> operating-system
   make-operating-system
@@ -239,8 +249,9 @@ VERSION is the target version of the boot-parameters record."
             (default %base-firmware))
 
   (host-name operating-system-host-name)          ; string
-  (hosts-file operating-system-hosts-file         ; file-like | #f
-              (default #f))
+  (hosts-file %operating-system-hosts-file         ; deprecated
+              (default #f)
+              (sanitize warn-hosts-file-field-deprecation))
 
   (mapped-devices operating-system-mapped-devices ; list of <mapped-device>
                   (default '()))
@@ -296,6 +307,10 @@ VERSION is the target version of the boot-parameters record."
                             source-properties->location))
             (innate)))
 
+(define-deprecated (operating-system-hosts-file os)
+  hosts-service-type
+  (%operating-system-hosts-file os))
+
 (define* (operating-system-kernel-arguments
           os root-device #:key (version %boot-parameters-version))
   "Return all the kernel arguments, including the ones not specified directly
@@ -733,7 +748,8 @@ bookkeeping."
          (non-boot-fs  (non-boot-file-system-service os))
          (swaps        (swap-services os))
          (procs        (service user-processes-service-type))
-         (host-name    (host-name-service (operating-system-host-name os)))
+         (host-name    (operating-system-host-name os))
+         (hosts-file   (%operating-system-hosts-file os))
          (entries      (operating-system-directory-base-entries os)))
     (cons* (service system-service-type entries)
            (service linux-builder-service-type
@@ -755,12 +771,19 @@ bookkeeping."
                                     (operating-system-groups os))
                             (operating-system-skeletons os))
            (operating-system-etc-service os)
+           ;; XXX: hosts-file is deprecated
+           (if hosts-file
+               (simple-service 'deprecated-hosts-file etc-service-type
+                               (list `("hosts" ,hosts-file)))
+               (service hosts-service-type
+                        (local-host-entries host-name)))
            (service fstab-service-type
                     (filter file-system-needed-for-boot?
                             (operating-system-file-systems os)))
            (session-environment-service
             (operating-system-environment-variables os))
-           host-name procs root-fs
+           (host-name-service host-name)
+           procs root-fs
            (service setuid-program-service-type
                     (operating-system-setuid-programs os))
            (service profile-service-type
@@ -774,7 +797,9 @@ bookkeeping."
                                   (operating-system-firmware os)))))))
 
 (define (hurd-default-essential-services os)
-  (let ((entries (operating-system-directory-base-entries os)))
+  (let ((host-name    (operating-system-host-name os))
+        (hosts-file   (%operating-system-hosts-file os))
+        (entries      (operating-system-directory-base-entries os)))
     (list (service system-service-type entries)
           %boot-service
           %hurd-startup-service
@@ -794,6 +819,12 @@ bookkeeping."
                            (operating-system-file-systems os)))
           (pam-root-service (operating-system-pam-services os))
           (operating-system-etc-service os)
+          ;; XXX: hosts-file is deprecated
+          (if hosts-file
+              (simple-service 'deprecated-hosts-file etc-service-type
+                              (list `("hosts" ,hosts-file)))
+              (service hosts-service-type
+                       (local-host-entries host-name)))
           (service setuid-program-service-type
                    (operating-system-setuid-programs os))
           (service profile-service-type (operating-system-packages os)))))
@@ -912,14 +943,17 @@ of PROVENANCE-SERVICE-TYPE to its services."
   "
 This is the GNU system.  Welcome.\n")
 
-(define (local-host-aliases host-name)
+(define-deprecated (local-host-aliases host-name)
+  local-host-entries
   "Return aliases for HOST-NAME, to be used in /etc/hosts."
   (string-append "127.0.0.1 localhost " host-name "\n"
                  "::1       localhost " host-name "\n"))
 
-(define (default-/etc/hosts host-name)
-  "Return the default /etc/hosts file."
-  (plain-file "hosts" (local-host-aliases host-name)))
+(define (local-host-entries host-name)
+  "Return <host> records for @var{host-name}."
+  (map (lambda (address)
+         (host address "localhost" (list host-name)))
+       '("127.0.0.1" "::1")))
 
 (define (validated-sudoers-file file)
   "Return a copy of FILE, a sudoers file, after checking that it is
@@ -1068,8 +1102,6 @@ fi\n")))
        ,@(if nsswitch `(("nsswitch.conf" ,#~#$nsswitch)) '())
        ("profile" ,#~#$profile)
        ("bashrc" ,#~#$bashrc)
-       ("hosts" ,#~#$(or (operating-system-hosts-file os)
-                         (default-/etc/hosts (operating-system-host-name os))))
        ;; Write the operating-system-host-name to /etc/hostname to prevent
        ;; NetworkManager from changing the system's hostname when connecting
        ;; to certain networks.  Some discussion at
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index 2e87928368..445a72e2f5 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -151,6 +151,9 @@ alias grep='grep --color=auto'\n"))
 'useradd' in the home directory of newly created user accounts."
 
   (let ((profile (plain-file "bash_profile" "\
+# Set up Guix Home profile
+if [ -f ~/.profile ]; then . ~/.profile; fi
+
 # Honor per-interactive-shell startup file
 if [ -f ~/.bashrc ]; then . ~/.bashrc; fi\n"))
         (bashrc  %default-bashrc)
diff --git a/gnu/tests/audio.scm b/gnu/tests/audio.scm
index 8aa6d1e818..acb91293e8 100644
--- a/gnu/tests/audio.scm
+++ b/gnu/tests/audio.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
+;;; Copyright © 2022 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,9 +23,11 @@
   #:use-module (gnu system vm)
   #:use-module (gnu services)
   #:use-module (gnu services audio)
+  #:use-module (gnu services networking)
   #:use-module (gnu packages mpd)
   #:use-module (guix gexp)
-  #:export (%test-mpd))
+  #:export (%test-mpd
+            %test-mympd))
 
 (define %mpd-os
   (simple-operating-system
@@ -76,3 +79,51 @@
    (name "mpd")
    (description "Test that the mpd can run and be connected to.")
    (value (run-mpd-test))))
+
+(define (run-mympd-test)
+  (define os (marionette-operating-system
+              (simple-operating-system (service dhcp-client-service-type)
+                                       (service mympd-service-type))
+              #:imported-modules '((gnu services herd))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings '((8080 . 80)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-64)
+                       (srfi srfi-8)
+                       (web client)
+                       (web response)
+                       (gnu build marionette))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (test-runner-current (system-test-runner #$output))
+          (test-begin "mympd")
+          (test-assert "service is running"
+            (marionette-eval '(begin
+                                (use-modules (gnu services herd))
+
+                                (start-service 'mympd))
+                             marionette))
+
+          (test-assert "HTTP port ready"
+            (wait-for-tcp-port 80 marionette))
+
+          (test-equal "http-head"
+            200
+            (receive (x _) (http-head "http://localhost:8080") (response-code x)))
+
+          (test-end))))
+  (gexp->derivation "mympd-test" test))
+
+(define %test-mympd
+  (system-test
+   (name "mympd")
+   (description "Connect to a running myMPD service.")
+   (value (run-mympd-test))))
diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm
index f647e9554c..b5624b7598 100644
--- a/gnu/tests/ganeti.scm
+++ b/gnu/tests/ganeti.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +23,7 @@
   #:use-module (gnu tests)
   #:use-module (gnu system vm)
   #:use-module (gnu services)
+  #:use-module (gnu services base)
   #:use-module (gnu services ganeti)
   #:use-module (gnu services networking)
   #:use-module (gnu services ssh)
@@ -46,18 +48,15 @@
                         %base-file-systems))
     (firmware '())
 
-    ;; The hosts file must contain a nonlocal IP for host-name.
-    ;; In addition, the cluster name must resolve to an IP address that
-    ;; is not currently provisioned.
-    (hosts-file (plain-file "hosts" (format #f "
-127.0.0.1       localhost
-::1             localhost
-10.0.2.15       gnt1.example.com gnt1
-192.168.254.254 ganeti.example.com
-")))
-
     (packages (append (list ganeti-instance-debootstrap ganeti-instance-guix)
                       %base-packages))
+
+    ;; The hosts file must contain a nonlocal IP for host-name.
+    (essential-services
+     (modify-services (operating-system-default-essential-services this-operating-system)
+       (hosts-service-type config => (list
+                                      (host "127.0.0.1" "localhost")
+                                      (host "::1"       "localhost")))))
     (services
      (append (list (service static-networking-service-type
                             (list %qemu-static-networking))
@@ -65,6 +64,13 @@
                             (openssh-configuration
                              (permit-root-login 'prohibit-password)))
 
+                   ;; In addition, the cluster name must resolve to an IP address that
+                   ;; is not currently provisioned.
+                   (simple-service 'ganeti-host-entries hosts-service-type
+                                   (list
+                                    (host "10.0.2.15" "gnt1.example.com" '("gnt1"))
+                                    (host "192.168.254.254" "ganeti.example.com")))
+
                    (service ganeti-service-type
                             (ganeti-configuration
                              (file-storage-paths '("/srv/ganeti/file-storage"))
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index 60c35eed07..912400a191 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -123,6 +123,7 @@ to NAME and VERSION."
   (gexp->derivation name builder
                     #:system system
                     #:target #f
+                    #:graft? #f
                     #:guile-for-build guile))
 
 (define (package-cargo-inputs p)
diff --git a/guix/build-system/copy.scm b/guix/build-system/copy.scm
index e15dc9f616..6cd3ec0216 100644
--- a/guix/build-system/copy.scm
+++ b/guix/build-system/copy.scm
@@ -133,6 +133,7 @@
                       #:system system
                       #:target #f
                       #:substitutable? substitutable?
+                      #:graft? #f
                       #:guile-for-build guile)))
 
 (define copy-build-system
diff --git a/guix/build-system/dune.scm b/guix/build-system/dune.scm
index 05784feb32..dc280242fb 100644
--- a/guix/build-system/dune.scm
+++ b/guix/build-system/dune.scm
@@ -156,6 +156,7 @@ provides a 'setup.ml' file as its build system."
   (gexp->derivation name builder
                     #:system system
                     #:target #f
+                    #:graft? #f
                     #:guile-for-build guile))
 
 (define dune-build-system
diff --git a/guix/build-system/font.scm b/guix/build-system/font.scm
index c43fb9a542..925933516c 100644
--- a/guix/build-system/font.scm
+++ b/guix/build-system/font.scm
@@ -112,6 +112,7 @@
     (gexp->derivation name builder
                       #:system system
                       #:target #f
+                      #:graft? #f
                       #:guile-for-build guile)))
 
 (define font-build-system
diff --git a/guix/build-system/guile.scm b/guix/build-system/guile.scm
index 36a88e181a..ffc892260a 100644
--- a/guix/build-system/guile.scm
+++ b/guix/build-system/guile.scm
@@ -114,6 +114,7 @@
     (gexp->derivation name builder
                       #:system system
                       #:target #f
+                      #:graft? #f
                       #:guile-for-build guile)))
 
 (define* (guile-cross-build name
@@ -170,6 +171,7 @@
     (gexp->derivation name builder
                       #:system system
                       #:target target
+                      #:graft? #f
                       #:guile-for-build guile)))
 
 (define guile-build-system
diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm
index dc83512d30..a37b3a938c 100644
--- a/guix/build-system/haskell.scm
+++ b/guix/build-system/haskell.scm
@@ -109,10 +109,7 @@ version REVISION."
                         ,@(standard-packages)))
          (build-inputs `(("haskell" ,haskell)
                          ,@native-inputs))
-         ;; XXX: this is a hack to get around issue #41569.
-         (outputs (match outputs
-                    (("out") (cons "static" outputs))
-                    (_ outputs)))
+         (outputs outputs)
          (build haskell-build)
          (arguments
           (substitute-keyword-arguments
diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm
index 0948ad92b5..bf43303027 100644
--- a/guix/build-system/meson.scm
+++ b/guix/build-system/meson.scm
@@ -74,16 +74,9 @@ for TRIPLET."
                   ;; 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")
-                     ((target-ppc32? triplet) "big")
-                     ((target-riscv64? triplet) "little")
-                     (#t (error "meson: unknown architecture"))))))
+    (endian . ,(if (target-little-endian? triplet)
+                   "little"
+                   "big"))))
 
 (define (make-binaries-alist triplet)
   "Make an associatoin list describing what should go into
diff --git a/guix/build-system/ocaml.scm b/guix/build-system/ocaml.scm
index 5f4308a46e..6e1fc62a62 100644
--- a/guix/build-system/ocaml.scm
+++ b/guix/build-system/ocaml.scm
@@ -309,6 +309,7 @@ provides a 'setup.ml' file as its build system."
   (gexp->derivation name builder
                     #:system system
                     #:target #f
+                    #:graft? #f
                     #:guile-for-build guile))
 
 (define ocaml-build-system
diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm
index 342daf7978..0aa273b4f4 100644
--- a/guix/build-system/ruby.scm
+++ b/guix/build-system/ruby.scm
@@ -114,6 +114,7 @@ NAME and VERSION."
     (gexp->derivation name build
                       #:system system
                       #:target #f
+                      #:graft? #f
                       #:modules imported-modules
                       #:guile-for-build guile)))
 
diff --git a/guix/build-system/scons.scm b/guix/build-system/scons.scm
index 7a02fa8a0f..9af24d40f8 100644
--- a/guix/build-system/scons.scm
+++ b/guix/build-system/scons.scm
@@ -121,6 +121,7 @@ provides a 'SConstruct' file as its build system."
   (gexp->derivation name builder
                     #:system system
                     #:target #f
+                    #:graft? #f
                     #:guile-for-build guile))
 
 (define scons-build-system
diff --git a/guix/build-system/texlive.scm b/guix/build-system/texlive.scm
index dbb72cd24a..336e192d83 100644
--- a/guix/build-system/texlive.scm
+++ b/guix/build-system/texlive.scm
@@ -182,6 +182,7 @@ level package ID."
     (gexp->derivation name builder
                       #:system system
                       #:target #f
+                      #:graft? #f
                       #:substitutable? substitutable?
                       #:guile-for-build guile)))
 
diff --git a/guix/build-system/tree-sitter.scm b/guix/build-system/tree-sitter.scm
new file mode 100644
index 0000000000..21c4eb35b2
--- /dev/null
+++ b/guix/build-system/tree-sitter.scm
@@ -0,0 +1,195 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build-system tree-sitter)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
+  #:use-module (guix search-paths)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system node)
+  #:use-module (ice-9 match)
+  #:export (%tree-sitter-build-system-modules
+            tree-sitter-build
+            tree-sitter-build-system))
+
+(define %tree-sitter-build-system-modules
+  ;; Build-side modules imported by default.
+  `((guix build tree-sitter-build-system)
+    ,@%node-build-system-modules))
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME from the given arguments."
+  (define private-keywords
+    `(#:inputs #:native-inputs #:outputs ,@(if target
+                                               '()
+                                               '(#:target))))
+  (define node
+    (module-ref (resolve-interface '(gnu packages node))
+                'node-lts))
+  (define tree-sitter
+    (module-ref (resolve-interface '(gnu packages tree-sitter))
+                'tree-sitter))
+  (define tree-sitter-cli
+    (module-ref (resolve-interface '(gnu packages tree-sitter))
+                'tree-sitter-cli))
+  ;; Grammars depend on each other via JS modules, which we package into a
+  ;; dedicated js output.
+  (define grammar-inputs
+    (map (match-lambda
+           ((name package)
+            `(,name ,package "js")))
+         inputs))
+  (bag
+    (name name)
+    (system system) (target target)
+    (build-inputs `(,@(if source
+                          `(("source" ,source))
+                          '())
+                    ("node" ,node)
+                    ("tree-sitter-cli" ,tree-sitter-cli)
+                    ,@native-inputs
+                    ,@(if target '() grammar-inputs)
+                    ;; Keep the standard inputs of 'gnu-build-system'.
+                    ,@(if target
+                          (standard-cross-packages target 'host)
+                          '())
+                    ,@(standard-packages)))
+    (host-inputs `(("tree-sitter" ,tree-sitter)
+                   ,@(if target grammar-inputs '())))
+    ;; Keep the standard inputs of 'gnu-buid-system'.
+    (target-inputs (if target
+                       (standard-cross-packages target 'target)
+                       '()))
+    ;; XXX: this is a hack to get around issue #41569.
+    (outputs (match outputs
+               (("out") (cons "js" outputs))
+               (_ outputs)))
+    (build (if target tree-sitter-cross-build tree-sitter-build))
+    (arguments (strip-keyword-arguments private-keywords arguments))))
+
+(define* (tree-sitter-build name inputs
+                            #:key
+                            source
+                            (phases '%standard-phases)
+                            (grammar-directories '("."))
+                            (tests? #t)
+                            (outputs '("out" "js"))
+                            (search-paths '())
+                            (system (%current-system))
+                            (guile #f)
+                            (imported-modules %tree-sitter-build-system-modules)
+                            (modules '((guix build utils)
+                                       (guix build tree-sitter-build-system))))
+  (define builder
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (tree-sitter-build #:name #$name
+                             #:source #+source
+                             #:system #$system
+                             #:phases #$phases
+                             #:tests? #$tests?
+                             #:grammar-directories '#$grammar-directories
+                             #: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* (tree-sitter-cross-build name
+                                  #:key
+                                  target
+                                  build-inputs target-inputs host-inputs
+                                  guile source
+                                  (phases '%standard-phases)
+                                  (grammar-directories '("."))
+                                  (tests? #t)
+                                  (outputs '("out" "js"))
+                                  (search-paths '())
+                                  (native-search-paths '())
+                                  (system (%current-system))
+                                  (build (nix-system->gnu-triplet system))
+                                  (imported-modules
+                                   %tree-sitter-build-system-modules)
+                                  (modules
+                                   '((guix build utils)
+                                     (guix build tree-sitter-build-system))))
+  (define builder
+    (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-inputs
+            (append %build-host-inputs %build-target-inputs))
+
+          (tree-sitter-build #:name #$name
+                             #:source #+source
+                             #:system #$system
+                             #:build #$build
+                             #:target #$target
+                             #:phases #$phases
+                             #:tests? #$tests?
+                             #:grammar-directories '#$grammar-directories
+                             #:outputs #$(outputs->gexp 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))))))
+
+  (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 tree-sitter-build-system
+  (build-system
+    (name 'tree-sitter)
+    (description "The Tree-sitter grammar build system")
+    (lower lower)))
+
+;;; tree-sitter.scm ends here
diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm
index e8cd5520b8..1d520050f6 100644
--- a/guix/build-system/waf.scm
+++ b/guix/build-system/waf.scm
@@ -111,6 +111,7 @@ as its build system."
     (gexp->derivation name build
                       #:system system
                       #:target #f
+                      #:graft? #f
                       #:modules imported-modules
                       #:guile-for-build guile)))
 
diff --git a/guix/build/haskell-build-system.scm b/guix/build/haskell-build-system.scm
index ef6cb316ee..0e94cf59a5 100644
--- a/guix/build/haskell-build-system.scm
+++ b/guix/build/haskell-build-system.scm
@@ -5,6 +5,8 @@
 ;;; Copyright © 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2021 John Kehayias <john.kehayias@protonmail.com>
+;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2022 Philip Munksgaard <philip@munksgaard.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,12 +99,14 @@ and parameters ~s~%"
                    ,@(if tests?
                          '("--enable-tests")
                          '())
-                   ;; Build and link with shared libraries
+                   ;; Build static and shared libraries.
                    "--enable-shared"
-                   "--enable-executable-dynamic"
+                   "--enable-static"
+                   ;; Link executables statically by default.
+                   "--disable-executable-dynamic"
                    "--ghc-option=-fPIC"
-                   ,(string-append "--ghc-option=-optl=-Wl,-rpath=" (or lib out)
-                                   "/lib/$compiler/$pkg-$version")
+                   ;; Ensure static libraries can be used with -Wl,--gc-sections for size.
+                   "--ghc-option=-split-sections"
                    ,@configure-flags)))
     ;; Cabal errors if GHC_PACKAGE_PATH is set during 'configure', so unset
     ;; and restore it.
@@ -118,8 +122,7 @@ and parameters ~s~%"
       (setenv "CONFIG_SHELL" "sh"))
     (run-setuphs "configure" params)
 
-    (setenv "GHC_PACKAGE_PATH" ghc-path)
-    #t))
+    (setenv "GHC_PACKAGE_PATH" ghc-path)))
 
 (define* (build #:key parallel-build? #:allow-other-keys)
   "Build a given Haskell package."
@@ -130,18 +133,7 @@ and parameters ~s~%"
 
 (define* (install #:key outputs #:allow-other-keys)
   "Install a given Haskell package."
-  (run-setuphs "copy" '())
-  (when (assoc-ref outputs "static")
-    (let ((static (assoc-ref outputs "static"))
-          (lib (or (assoc-ref outputs "lib")
-                   (assoc-ref outputs "out"))))
-      (for-each (lambda (static-lib)
-                  (let* ((subdir (string-drop static-lib (string-length lib)))
-                         (new    (string-append static subdir)))
-                    (mkdir-p (dirname new))
-                    (rename-file static-lib new)))
-                (find-files lib "\\.a$"))))
-  #t)
+  (run-setuphs "copy" '()))
 
 (define* (setup-compiler #:key system inputs outputs #:allow-other-keys)
   "Setup the compiler environment."
@@ -175,8 +167,7 @@ and parameters ~s~%"
               conf-files)
     (invoke "ghc-pkg"
             (string-append "--package-db=" %tmp-db-dir)
-            "recache")
-    #t))
+            "recache")))
 
 (define* (register #:key name system inputs outputs #:allow-other-keys)
   "Generate the compiler registration and binary package database files for a
@@ -215,15 +206,54 @@ given Haskell package."
         (() #t)                         ;done
         ((id . tail)
          (if (not (vhash-assoc id seen))
-             (let ((dep-conf  (string-append src  "/" id ".conf"))
-                   (dep-conf* (string-append dest "/" id ".conf")))
-               (when (not (file-exists? dep-conf))
+             (let* ((dep-conf  (string-append src  "/" id ".conf"))
+                    (dep-conf* (string-append dest "/" id ".conf"))
+                    (dep-conf-exists? (file-exists? dep-conf))
+                    (dep-conf*-exists? (file-exists? dep-conf*))
+                    (next-tail (append lst (if dep-conf-exists? (conf-depends dep-conf) '()))))
+               (unless dep-conf*-exists?
+                 (unless dep-conf-exists?
                    (error (format #f "File ~a does not exist. This usually means the dependency ~a is missing. Was checking conf-file ~a." dep-conf id conf-file)))
-               (copy-file dep-conf dep-conf*) ;XXX: maybe symlink instead?
-               (loop (vhash-cons id #t seen)
-                     (append lst (conf-depends dep-conf))))
+                 (copy-file dep-conf dep-conf*)) ;XXX: maybe symlink instead?
+                (loop (vhash-cons id #t seen) next-tail))
              (loop seen tail))))))
 
+  (define (install-config-file conf-file dest output:doc output:lib)
+      ;; Copy CONF-FILE to DEST removing reference to OUTPUT:DOC from
+      ;; OUTPUT:LIB and using install-transitive-deps.
+      (let* ((contents (call-with-input-file conf-file read-string))
+             (id-rx (make-regexp "^id:[ \n\t]+([^ \t\n]+)$" regexp/newline))
+             (config-file-name+id
+              (match:substring (first (list-matches id-rx contents)) 1)))
+
+        (when (or
+               (and
+                (string? config-file-name+id)
+                (string-null? config-file-name+id))
+               (not config-file-name+id))
+          (error (format #f "The package id for ~a is empty. This is a bug." conf-file)))
+
+        ;; Remove reference to "doc" output from "lib" (or "out") by rewriting the
+        ;; "haddock-interfaces" field and removing the optional "haddock-html"
+        ;; field in the generated .conf file.
+        (when output:doc
+          (substitute* conf-file
+            (("^haddock-html: .*") "\n")
+            (((format #f "^haddock-interfaces: ~a" output:doc))
+             (string-append "haddock-interfaces: " output:lib)))
+          ;; Move the referenced file to the "lib" (or "out") output.
+          (match (find-files output:doc "\\.haddock$")
+            ((haddock-file . rest)
+             (let* ((subdir (string-drop haddock-file (string-length output:doc)))
+                    (new    (string-append output:lib subdir)))
+               (mkdir-p (dirname new))
+               (rename-file haddock-file new)))
+            (_ #f)))
+        (install-transitive-deps conf-file %tmp-db-dir dest)
+        (rename-file conf-file
+                     (string-append dest "/"
+                                    config-file-name+id ".conf"))))
+
   (let* ((out (assoc-ref outputs "out"))
          (doc (assoc-ref outputs "doc"))
          (haskell  (assoc-ref inputs "haskell"))
@@ -233,7 +263,6 @@ given Haskell package."
          (config-dir (string-append lib
                                     "/ghc-" version
                                     "/" name ".conf.d"))
-         (id-rx (make-regexp "^id:[ \n\t]+([^ \t\n]+)$" regexp/newline))
          (config-file (string-append out "/" name ".conf"))
          (params
           (list (string-append "--gen-pkg-config=" config-file))))
@@ -241,53 +270,24 @@ given Haskell package."
     ;; The conf file is created only when there is a library to register.
     (when (file-exists? config-file)
       (mkdir-p config-dir)
-      (let* ((contents (call-with-input-file config-file read-string))
-             (config-file-name+id (match:substring (first (list-matches id-rx contents)) 1)))
-
-        (when (or
-                (and
-                  (string? config-file-name+id)
-                  (string-null? config-file-name+id))
-                (not config-file-name+id))
-          (error (format #f "The package id for ~a is empty. This is a bug." config-file)))
-
-        ;; Remove reference to "doc" output from "lib" (or "out") by rewriting the
-        ;; "haddock-interfaces" field and removing the optional "haddock-html"
-        ;; field in the generated .conf file.
-        (when doc
-          (substitute* config-file
-            (("^haddock-html: .*") "\n")
-            (((format #f "^haddock-interfaces: ~a" doc))
-             (string-append "haddock-interfaces: " lib)))
-          ;; Move the referenced file to the "lib" (or "out") output.
-          (match (find-files doc "\\.haddock$")
-            ((haddock-file . rest)
-             (let* ((subdir (string-drop haddock-file (string-length doc)))
-                    (new    (string-append lib subdir)))
-               (mkdir-p (dirname new))
-               (rename-file haddock-file new)))
-            (_ #f)))
-        (install-transitive-deps config-file %tmp-db-dir config-dir)
-        (rename-file config-file
-                     (string-append config-dir "/"
-                                    config-file-name+id ".conf"))
-        (invoke "ghc-pkg"
-                (string-append "--package-db=" config-dir)
-                "recache")))
-    #t))
+      (if (file-is-directory? config-file)
+          (for-each (cut install-config-file <> config-dir doc lib)
+           (find-files config-file))
+          (install-config-file config-file config-dir doc lib))
+      (invoke "ghc-pkg"
+              (string-append "--package-db=" config-dir)
+              "recache"))))
 
 (define* (check #:key tests? test-target #:allow-other-keys)
   "Run the test suite of a given Haskell package."
   (if tests?
       (run-setuphs test-target '())
-      (format #t "test suite not run~%"))
-  #t)
+      (format #t "test suite not run~%")))
 
 (define* (haddock #:key outputs haddock? haddock-flags #:allow-other-keys)
   "Generate the Haddock documentation of a given Haskell package."
   (when haddock?
-    (run-setuphs "haddock" haddock-flags))
-  #t)
+    (run-setuphs "haddock" haddock-flags)))
 
 (define* (patch-cabal-file #:key cabal-revision #:allow-other-keys)
   (when cabal-revision
@@ -296,8 +296,7 @@ given Haskell package."
       ((original)
        (format #t "replacing ~s with ~s~%" original cabal-revision)
        (copy-file cabal-revision original))
-      (_ (error "Could not find a Cabal file to patch."))))
-  #t)
+      (_ (error "Could not find a Cabal file to patch.")))))
 
 (define* (generate-setuphs #:rest empty)
   "Generate a default Setup.hs if needed."
@@ -307,8 +306,7 @@ given Haskell package."
     (with-output-to-file "Setup.hs"
       (lambda ()
         (format #t "import Distribution.Simple~%")
-        (format #t "main = defaultMain~%"))))
-  #t)
+        (format #t "main = defaultMain~%")))))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 0358960ff5..df9b9f6ac7 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -1400,7 +1400,8 @@ exception if it's already taken."
       thunk
       (lambda ()
         (when port
-          (unlock-file port))))))
+          (unlock-file port)
+          (delete-file file))))))
 
 (define (call-with-file-lock/no-wait file thunk handler)
   (let ((port #f))
@@ -1428,7 +1429,8 @@ exception if it's already taken."
       thunk
       (lambda ()
         (when port
-          (unlock-file port))))))
+          (unlock-file port)
+          (delete-file file))))))
 
 (define-syntax-rule (with-file-lock file exp ...)
   "Wait to acquire a lock on FILE and evaluate EXP in that context."
diff --git a/guix/build/tree-sitter-build-system.scm b/guix/build/tree-sitter-build-system.scm
new file mode 100644
index 0000000000..4106728bdf
--- /dev/null
+++ b/guix/build/tree-sitter-build-system.scm
@@ -0,0 +1,153 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build tree-sitter-build-system)
+  #:use-module ((guix build node-build-system) #:prefix node:)
+  #:use-module (guix build json)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
+  #:use-module (srfi srfi-1)
+  #:export (%standard-phases
+            tree-sitter-build))
+
+;; Commentary:
+;;
+;; Build procedures for tree-sitter grammar packages.  This is the
+;; builder-side code, which builds on top of the node build-system.
+;;
+;; Tree-sitter grammars are written in JavaScript and compiled to a native
+;; shared object.  The `tree-sitter generate' command invokes `node' in order
+;; to evaluate the grammar.js into a grammar.json file, which is then
+;; translated into C code.  We then compile the C code ourselves.  Packages
+;; also sometimes add extra manually written C/C++ code.
+;;
+;; In order to support grammars depending on each other, such as C and C++,
+;; JavaScript and TypeScript, this build-system installs the source of the
+;; node module in a dedicated "js" output.
+;;
+;; Code:
+
+(define* (patch-dependencies #:key inputs #:allow-other-keys)
+  "Rewrite dependencies in 'package.json'.  We remove all runtime dependencies
+and replace development dependencies with tree-sitter grammar node modules."
+
+  (define (rewrite package.json)
+    (map (match-lambda
+           (("dependencies" @ . _)
+            '("dependencies" @))
+           (("devDependencies" @ . _)
+            `("devDependencies" @
+              ,@(filter-map (match-lambda
+                              ((key . directory)
+                               (let ((node-module
+                                      (string-append directory
+                                                     "/lib/node_modules/"
+                                                     key)))
+                                 (and (directory-exists? node-module)
+                                      `(,key . ,node-module)))))
+                            (alist-delete "node" inputs))))
+           (other other))
+         package.json))
+
+  (node:with-atomic-json-file-replacement "package.json"
+    (match-lambda
+      (('@ . package.json)
+       (cons '@ (rewrite package.json))))))
+
+;; FIXME: The node build-system's configure phase does not support
+;; cross-compiling so we re-define it.
+(define* (configure #:key native-inputs inputs #:allow-other-keys)
+  (invoke (search-input-file (or native-inputs inputs) "/bin/npm")
+          "--offline" "--ignore-scripts" "install"))
+
+(define* (build #:key grammar-directories #:allow-other-keys)
+  (for-each (lambda (dir)
+              (with-directory-excursion dir
+                ;; Avoid generating binding code for other languages, we do
+                ;; not support this use-case yet and it relies on running
+                ;; `node-gyp' to build native addons.
+                (invoke "tree-sitter" "generate" "--no-bindings")))
+            grammar-directories))
+
+(define* (check #:key grammar-directories tests? #:allow-other-keys)
+  (when tests?
+    (for-each (lambda (dir)
+                (with-directory-excursion dir
+                  (invoke "tree-sitter" "test")))
+              grammar-directories)))
+
+(define* (install #:key target grammar-directories outputs #:allow-other-keys)
+  (let ((lib (string-append (assoc-ref outputs "out")
+                            "/lib/tree-sitter")))
+    (mkdir-p lib)
+    (define (compile-language dir)
+      (with-directory-excursion dir
+        (let ((lang (assoc-ref (call-with-input-file "src/grammar.json"
+                                 read-json)
+                               "name"))
+              (source-file (lambda (path)
+                             (if (file-exists? path)
+                                 path
+                                 #f))))
+          (apply invoke
+                 `(,(if target
+                        (string-append target "-g++")
+                        "g++")
+                   "-shared"
+                   "-fPIC"
+                   "-fno-exceptions"
+                   "-O2"
+                   "-g"
+                   "-o" ,(string-append lib "/libtree-sitter-" lang ".so")
+                   ;; An additional `scanner.{c,cc}' file is sometimes
+                   ;; provided.
+                   ,@(cond
+                      ((source-file "src/scanner.c")
+                       => (lambda (file) (list "-xc" "-std=c99" file)))
+                      ((source-file "src/scanner.cc")
+                       => (lambda (file) (list file)))
+                      (else '()))
+                   "-xc" "src/parser.c")))))
+    (for-each compile-language grammar-directories)))
+
+(define* (install-js #:key native-inputs inputs outputs #:allow-other-keys)
+  (invoke (search-input-file (or native-inputs inputs) "/bin/npm")
+          "--prefix" (assoc-ref outputs "js")
+          "--global"
+          "--offline"
+          "--loglevel" "info"
+          "--production"
+          ;; Skip scripts to prevent building bindings via GYP.
+          "--ignore-scripts"
+          "install" "../package.tgz"))
+
+(define %standard-phases
+  (modify-phases node:%standard-phases
+    (replace 'patch-dependencies patch-dependencies)
+    (replace 'configure configure)
+    (replace 'build build)
+    (replace 'check check)
+    (replace 'install install)
+    (add-after 'install 'install-js install-js)))
+
+(define* (tree-sitter-build #:key inputs (phases %standard-phases)
+                            #:allow-other-keys #:rest args)
+  (apply node:node-build #:inputs inputs #:phases phases args))
+
+;;; tree-sitter-build-system.scm ends here
diff --git a/guix/channels.scm b/guix/channels.scm
index 40cbc4bb3a..d44e7a0a3a 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -952,6 +952,10 @@ be used as a profile hook."
                       (backtrace))))
               (mkdir #$output))))
 
+    (define channels
+      (map (compose string->symbol manifest-entry-name)
+           (manifest-entries manifest)))
+
     (gexp->derivation-in-inferior "guix-package-cache" build
                                   profile
 
@@ -960,8 +964,9 @@ be used as a profile hook."
                                   ;; instead of failing.
                                   #:silent-failure? #t
 
-                                  #:properties '((type . profile-hook)
-                                                 (hook . package-cache))
+                                  #:properties `((type . profile-hook)
+                                                 (hook . package-cache)
+                                                 (channels . ,channels))
                                   #:local-build? #t)))
 
 (define %channel-profile-hooks
diff --git a/guix/cpio.scm b/guix/cpio.scm
index d4a7d5f1e0..876f61ea3c 100644
--- a/guix/cpio.scm
+++ b/guix/cpio.scm
@@ -170,7 +170,7 @@ using FILE-NAME as its file name."
                       #:size (stat:size st)
                       #:dev (stat:dev st)
                       #:rdev (stat:rdev st)
-                      #:name-size (string-length file-name))))
+                      #:name-size (string-utf8-length file-name))))
 
 (define* (file->cpio-header* file
                              #:optional (file-name file)
@@ -182,7 +182,7 @@ produced in a deterministic fashion."
     (make-cpio-header #:mode (stat:mode st)
                       #:nlink (stat:nlink st)
                       #:size (stat:size st)
-                      #:name-size (string-length file-name))))
+                      #:name-size (string-utf8-length file-name))))
 
 (define* (special-file->cpio-header* file
                                      device-type
@@ -201,7 +201,7 @@ The number of hard links is assumed to be 1."
                                     permission-bits)
                     #:nlink 1
                     #:rdev (device-number device-major device-minor)
-                    #:name-size (string-length file-name)))
+                    #:name-size (string-utf8-length file-name)))
 
 (define %trailer
   "TRAILER!!!")
@@ -237,7 +237,7 @@ produces with the '-H newc' option."
 
       ;; We're padding the header + following file name + trailing zero, and
       ;; the header is 110 byte long.
-      (write-padding (+ 110 1 (string-length file)) port)
+      (write-padding (+ 110 (string-utf8-length file) 1) port)
 
       (case (mode->type (cpio-header-mode header))
         ((regular)
@@ -246,7 +246,7 @@ produces with the '-H newc' option."
              (dump-port input port))))
         ((symlink)
          (let ((target (readlink file)))
-           (put-string port target)))
+           (put-bytevector port (string->utf8 target))))
         ((directory)
          #t)
         ((block-special)
diff --git a/guix/download.scm b/guix/download.scm
index fff54d7a17..561a893eee 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -387,7 +387,11 @@
                         file "/" (symbol->string algo) "/"
                         (bytevector->nix-base32-string hash))))
 
-     (list (guix-publish "ci.guix.gnu.org")
+     (list (guix-publish
+            ;; bordeaux.guix.gnu.org uses the nar-herder rather than guix
+            ;; publish, but it supports the same style of requests
+            "bordeaux.guix.gnu.org")
+           (guix-publish "ci.guix.gnu.org")
            (lambda (file algo hash)
              ;; 'tarballs.nixos.org' supports several algorithms.
              (string-append "https://tarballs.nixos.org/"
diff --git a/guix/git.scm b/guix/git.scm
index 95630a5e69..4019323327 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2021 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2023 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -141,11 +142,6 @@ the 'SSL_CERT_FILE' and 'SSL_CERT_DIR' environment variables."
   (define total
     (indexer-progress-total-objects progress))
 
-  (define hundredth
-    (match (quotient (indexer-progress-total-objects progress) 100)
-      (0 1)
-      (x x)))
-
   (define-values (done label)
     (if (< (indexer-progress-received-objects progress) total)
         (values (indexer-progress-received-objects progress)
@@ -156,14 +152,22 @@ the 'SSL_CERT_FILE' and 'SSL_CERT_DIR' environment variables."
   (define %
     (* 100. (/ done total)))
 
-  (when (and (< % 100) (zero? (modulo done hundredth)))
+  ;; TODO: Both should be handled & exposed by the PROGRESS-BAR API instead.
+  (define width
+    (max (- (current-terminal-columns)
+            (string-length label) 7)
+         3))
+
+  (define grain
+    (match (quotient total (max 100 (* 8 width))) ; assume 1/8 glyph resolution
+      (0 1)
+      (x x)))
+
+  (when (and (< % 100) (zero? (modulo done grain)))
     (erase-current-line (current-error-port))
-    (let ((width (max (- (current-terminal-columns)
-                         (string-length label) 7)
-                      3)))
-      (format (current-error-port) "~a ~3,d% ~a"
+    (format (current-error-port) "~a ~3,d% ~a"
               label (inexact->exact (round %))
-              (progress-bar % width)))
+              (progress-bar % width))
     (force-output (current-error-port)))
 
   (when (= % 100.)
diff --git a/guix/import/cran.scm b/guix/import/cran.scm
index c4b36da12b..17c19a2dcf 100644
--- a/guix/import/cran.scm
+++ b/guix/import/cran.scm
@@ -55,6 +55,7 @@
   #:use-module (guix ui)
   #:use-module (guix upstream)
   #:use-module (guix packages)
+  #:use-module (guix sets)
   #:use-module (gnu packages)
   #:export (%input-style
 
@@ -422,6 +423,7 @@ empty list when the FIELD cannot be found."
     ("libarchive_dev" "libarchive")
     ("libbz2" "bzip2")
     ("libexpat" "expat")
+    ("libjpeg" "libjpeg-turbo")
     ("liblz4" "lz4")
     ("liblzma" "xz")
     ("libzstd" "zstd")
@@ -447,6 +449,13 @@ empty list when the FIELD cannot be found."
     (() #f)
     (_ #t)))
 
+(define (directory-needs-esbuild? dir)
+  "Check if the directory DIR contains minified JavaScript files and thus
+needs a JavaScript compiler."
+  (match (find-files dir "\\.min.js$")
+    (() #f)
+    (_ #t)))
+
 (define (files-match-pattern? directory regexp . file-patterns)
   "Return #T if any of the files matching FILE-PATTERNS in the DIRECTORY match
 the given REGEXP."
@@ -462,10 +471,49 @@ the given REGEXP."
                     (else (loop))))))))
          (apply find-files directory file-patterns))))
 
-(define (directory-needs-zlib? dir)
-  "Return #T if any of the Makevars files in the src directory DIR contain a
-zlib linker flag."
-  (files-match-pattern? dir "-lz" "(Makevars.*|configure.*)"))
+(define packages-for-matches
+  '(("-lcrypto"    . "openssl")
+    ("-lcurl"      . "curl")
+    ("-lgit2"      . "libgit2")
+    ("-lpcre"      . "pcre2")
+    ("-lssh"       . "openssh")
+    ("-lssl"       . "openssl")
+    ("-ltbb"       . "tbb")
+    ("-lz"         . "zlib")
+    ("gsl-config"  . "gsl")
+    ("xml2-config" . "libxml2")
+    ("CURL_LIBS"   . "curl")))
+
+(define libraries-pattern
+  (make-regexp
+   (string-append "("
+                  (string-join
+                   (map (compose regexp-quote first) packages-for-matches) "|")
+                  ")")))
+
+(define (needed-libraries-in-directory dir)
+  "Return a list of package names that correspond to libraries that are
+referenced in build system files."
+  (set->list
+   (fold
+    (lambda (file packages)
+      (call-with-input-file file
+        (lambda (port)
+          (let loop ((packages packages))
+            (let ((line (read-line port)))
+              (cond
+               ((eof-object? line) packages)
+               (else
+                (loop
+                 (fold (lambda (match acc)
+                         (or (and=> (assoc-ref packages-for-matches
+                                               (match:substring match))
+                                    (cut set-insert <> acc))
+                             acc))
+                       packages
+                       (list-matches libraries-pattern line))))))))))
+    (set)
+    (find-files dir "(Makevars.in*|configure.*)"))))
 
 (define (directory-needs-pkg-config? dir)
   "Return #T if any of the Makevars files in the src directory DIR reference
@@ -477,8 +525,9 @@ the pkg-config tool."
   "Guess dependencies of R package source in DIR and return two values: a list
 of package names for INPUTS and another list of names of NATIVE-INPUTS."
   (values
-   (if (directory-needs-zlib? dir) '("zlib") '())
+   (needed-libraries-in-directory dir)
    (append
+       (if (directory-needs-esbuild? dir) '("esbuild") '())
        (if (directory-needs-pkg-config? dir) '("pkg-config") '())
        (if (directory-needs-fortran? dir) '("gfortran") '()))))
 
@@ -493,8 +542,8 @@ by TARBALL?"
        (source-dir->dependencies dir)))
     (source-dir->dependencies source)))
 
-(define (needs-knitr? meta)
-  (member "knitr" (listify meta "VignetteBuilder")))
+(define (vignette-builders meta)
+  (map cran-guix-name (listify meta "VignetteBuilder")))
 
 (define* (description->package repository meta #:key (license-prefix identity)
                                (download-source download))
@@ -608,8 +657,7 @@ from the alist META, which was derived from the R package's DESCRIPTION file."
               ,@(maybe-inputs (map cran-guix-name propagate) 'propagated-inputs)
               ,@(maybe-inputs
                  `(,@source-native-inputs
-                   ,@(if (needs-knitr? meta)
-                         '("r-knitr") '()))
+                   ,@(vignette-builders meta))
                  'native-inputs)
               (home-page ,(if (string-null? home-page)
                               (string-append base-url name)
diff --git a/guix/import/hackage.scm b/guix/import/hackage.scm
index 7bc2908405..83ad85f3fe 100644
--- a/guix/import/hackage.scm
+++ b/guix/import/hackage.scm
@@ -52,7 +52,6 @@
             hackage-recursive-import
             %hackage-updater
 
-            guix-package->hackage-name
             hackage-name->package-name
             hackage-fetch
             hackage-source-url
@@ -76,6 +75,7 @@
     "exceptions"
     "filepath"
     "ghc"
+    "ghc-bignum"
     "ghc-boot"
     "ghc-boot-th"
     "ghc-compact"
@@ -126,17 +126,6 @@ version is returned."
       (string-downcase name)
       (string-append package-name-prefix (string-downcase name))))
 
-(define guix-package->hackage-name
-  (let ((uri-rx (make-regexp "(https?://hackage.haskell.org|mirror://hackage)/package/([^/]+)/.*"))
-        (name-rx (make-regexp "(.*)-[0-9\\.]+")))
-    (lambda (package)
-      "Given a Guix package name, return the corresponding Hackage name."
-      (let* ((source-url (and=> (package-source package) origin-uri))
-             (name (match:substring (regexp-exec uri-rx source-url) 2)))
-        (match (regexp-exec name-rx name)
-          (#f name)
-          (m (match:substring m 1)))))))
-
 (define (read-cabal-and-hash port)
   "Read a Cabal file from PORT and return it and its hash in nix-base32
 format as two values."
@@ -314,6 +303,7 @@ the hash of the Cabal file."
                          (bytevector->nix-base32-string (file-sha256 tarball))
                          "failed to download tar archive")))))
         (build-system haskell-build-system)
+        (properties '((upstream-name . ,name)))
         ,@(maybe-inputs 'inputs dependencies)
         ,@(maybe-inputs 'native-inputs native-dependencies)
         ,@(maybe-arguments)
@@ -370,7 +360,7 @@ respectively."
      (formatted-message
       (G_ "~a updater doesn't support updating to a specific version, sorry.")
       "hackage")))
-  (let* ((hackage-name (guix-package->hackage-name package))
+  (let* ((hackage-name (package-upstream-name* package))
          (cabal-meta (hackage-fetch hackage-name)))
     (match cabal-meta
       (#f
@@ -378,7 +368,10 @@ respectively."
                "warning: failed to parse ~a~%"
                (hackage-cabal-url hackage-name))
        #f)
-      ((_ *** ("version" (version)))
+      ;; Cabal files have no particular order and while usually the version
+      ;; as somewhere in the middle it can also be at the beginning,
+      ;; requiring two pattern.
+      ((or (_ *** ("version" (version))) (("version" (version)) _ ...))
        (let ((url (hackage-uri hackage-name version)))
          (upstream-source
           (package (package-name package))
diff --git a/guix/import/stackage.scm b/guix/import/stackage.scm
index c0284e48a4..735eeb75f7 100644
--- a/guix/import/stackage.scm
+++ b/guix/import/stackage.scm
@@ -49,7 +49,7 @@
   (make-parameter "https://www.stackage.org"))
 
 ;; Latest LTS version compatible with current GHC.
-(define %default-lts-version "18.14")
+(define %default-lts-version "20.5")
 
 (define-json-mapping <stackage-lts> make-stackage-lts
   stackage-lts?
@@ -149,7 +149,7 @@ PACKAGE or #f if the package is not included in the Stackage LTS release."
          (formatted-message
           (G_ "~a updater doesn't support updating to a specific version, sorry.")
           "stackage")))
-      (let* ((hackage-name (guix-package->hackage-name pkg))
+      (let* ((hackage-name (package-upstream-name* pkg))
              (version (lts-package-version (packages) hackage-name))
              (name-version (hackage-name-version hackage-name version)))
         (match (and=> name-version hackage-fetch)
@@ -173,7 +173,7 @@ PACKAGE or #f if the package is not included in the Stackage LTS release."
        (false-if-networking-error
         (let ((packages (stackage-lts-packages
                          (stackage-lts-info-fetch %default-lts-version)))
-              (hackage-name (guix-package->hackage-name package)))
+              (hackage-name (package-upstream-name* package)))
           (find (lambda (package)
                   (string=? (stackage-package-name package) hackage-name))
                 packages)))))
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 632c9174df..f7df5826bf 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -613,7 +613,7 @@ at URI, which may be a file:// URI pointing the package's tree."
 
 (define nmap
   (license "Nmap license"
-           "https://svn.nmap.org/nmap/COPYING"
+           "https://svn.nmap.org/nmap/LICENSE"
            "https://fedoraproject.org/wiki/Licensing/Nmap"))
 
 (define ogl-psi1.0
diff --git a/guix/progress.scm b/guix/progress.scm
index 4f8e98edc0..33cf6f4a1a 100644
--- a/guix/progress.scm
+++ b/guix/progress.scm
@@ -166,16 +166,47 @@ INTERVAL (a time-duration object), otherwise does nothing and returns #f."
   ;; Number of columns of the terminal.
   (make-parameter 80))
 
+(define-record-type* <progress-bar-style>
+  progress-bar-style make-progress-bar-style progress-bar-style?
+  (start  progress-bar-style-start)
+  (stop   progress-bar-style-stop)
+  (filled progress-bar-style-filled)
+  (steps  progress-bar-style-steps))
+
+(define ascii-bar-style
+  (progress-bar-style
+    (start #\[)
+    (stop #\])
+    (filled #\#)
+    (steps '())))
+
+(define unicode-bar-style
+  (progress-bar-style
+    (start #\x2595)
+    (stop #\x258f)
+    (filled #\x2588)
+    (steps '(#\x258F #\x258E #\x258D #\x258C #\x258B #\x258A #\x2589))))
+
 (define* (progress-bar % #:optional (bar-width 20))
   "Return % as a string representing an ASCII-art progress bar.  The total
 width of the bar is BAR-WIDTH."
-  (let* ((bar-width (max 3 (- bar-width 2)))
-         (fraction (/ % 100))
-         (filled   (inexact->exact (floor (* fraction bar-width))))
-         (empty    (- bar-width filled)))
-    (format #f "[~a~a]"
-            (make-string filled #\#)
-            (make-string empty #\space))))
+  (let* ((bar-style (if (equal? (port-encoding (current-output-port)) "UTF-8")
+                        unicode-bar-style
+                        ascii-bar-style))
+         (bar-width (max 3 (- bar-width 2)))
+         (intermediates (+ (length (progress-bar-style-steps bar-style)) 1))
+         (step     (inexact->exact (floor (/ (* % bar-width intermediates) 100))))
+         (filled   (quotient step intermediates))
+         (intermediate
+           (list-ref (cons #f (progress-bar-style-steps bar-style))
+                     (modulo step intermediates)))
+         (empty    (- bar-width filled (if intermediate 1 0))))
+    (simple-format #f "~a~a~a~a~a"
+                   (string (progress-bar-style-start bar-style))
+                   (make-string filled (progress-bar-style-filled bar-style))
+                   (if intermediate (string intermediate) "")
+                   (make-string empty #\space)
+                   (string (progress-bar-style-stop bar-style)))))
 
 (define (erase-current-line port)
   "Write an ANSI erase-current-line sequence to PORT to erase the whole line and
diff --git a/guix/rpm.scm b/guix/rpm.scm
new file mode 100644
index 0000000000..734aef29c1
--- /dev/null
+++ b/guix/rpm.scm
@@ -0,0 +1,630 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix rpm)
+  #:autoload (gcrypt hash) (hash-algorithm file-hash md5)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 textual-ports)
+  #:use-module (rnrs bytevectors)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-71)
+  #:use-module (srfi srfi-171)
+  #:export (generate-lead
+            generate-signature
+            generate-header
+            assemble-rpm-metadata
+
+            ;; XXX: These are internals, but the inline disabling trick
+            ;; doesn't work on them.
+            make-header-entry
+            header-entry?
+            header-entry-tag
+            header-entry-count
+            header-entry-value
+
+            bytevector->hex-string
+
+            fhs-directory?))
+
+;;; Commentary:
+;;;
+;;; This module provides the building blocks required to construct RPM
+;;; archives.  It is intended to be importable on the build side, so shouldn't
+;;; depend on (guix diagnostics) or other host-side-only modules.
+;;;
+;;; Code:
+
+(define (gnu-system-triplet->machine-type triplet)
+  "Return the machine component of TRIPLET, a GNU system triplet."
+  (first (string-split triplet #\-)))
+
+(define (gnu-machine-type->rpm-arch type)
+  "Return the canonical RPM architecture string, given machine TYPE."
+  (match type
+    ("arm" "armv7hl")
+    ("powerpc" "ppc")
+    ("powerpc64le" "ppc64le")
+    (machine machine)))                 ;unchanged
+
+(define (gnu-machine-type->rpm-number type)
+  "Translate machine TYPE to its corresponding RPM integer value."
+  ;; Refer to the rpmrc.in file in the RPM source for the complete
+  ;; translation tables.
+  (match type
+    ((or "i486" "i586" "i686" "x86_64")	1)
+    ((? (cut string-prefix? "powerpc" <>)) 5)
+    ("mips64el"	11)
+    ((? (cut string-prefix? "arm" <>)) 12)
+    ("aarch64" 19)
+    ((? (cut string-prefix? "riscv" <>)) 22)
+    (_ (error "no RPM number known for machine type" type))))
+
+(define (u16-number->u8-list number)
+  "Return a list of byte values made of NUMBER, a 16 bit unsigned integer."
+  (let ((bv (uint-list->bytevector (list number) (endianness big) 2)))
+    (bytevector->u8-list bv)))
+
+(define (u32-number->u8-list number)
+  "Return a list of byte values made of NUMBER, a 32 bit unsigned integer."
+  (let ((bv (uint-list->bytevector (list number) (endianness big) 4)))
+    (bytevector->u8-list bv)))
+
+(define (s32-number->u8-list number)
+  "Return a list of byte values made of NUMBER, a 32 bit signed integer."
+  (let ((bv (sint-list->bytevector (list number) (endianness big) 4)))
+    (bytevector->u8-list bv)))
+
+(define (u8-list->u32-number lst)
+  "Return the 32 bit unsigned integer corresponding to the 4 bytes in LST."
+  (bytevector-u32-ref (u8-list->bytevector lst) 0 (endianness big)))
+
+
+;;;
+;;; Lead section.
+;;;
+
+;; Refer to the docs/manual/format.md file of the RPM source for the details
+;; regarding the binary format of an RPM archive.
+(define* (generate-lead name-version #:key (target %host-type))
+  "Generate a RPM lead u8-list that uses NAME-VERSION, the name and version
+string of the package, and TARGET, a GNU triplet used to derive the target
+machine type."
+  (define machine-type (gnu-system-triplet->machine-type target))
+  (define magic (list #xed #xab #xee #xdb))
+  (define file-format-version (list 3 0)) ;3.0
+  (define type (list 0 0))                ;0 for binary packages
+  (define arch-number (u16-number->u8-list
+                       (gnu-machine-type->rpm-number machine-type)))
+  ;; The 66 bytes from 10 to 75 are for the name-version-release string.
+  (define name
+    (let ((padding-bytes (make-list (- 66 (string-length name-version)) 0)))
+      (append (bytevector->u8-list (string->utf8 name-version))
+              padding-bytes)))
+  ;; There is no OS number corresponding to GNU/Hurd (GNU), only Linux, per
+  ;; rpmrc.in.
+  (define os-number (list 0 1))
+
+  ;; For RPM format 3.0, the signature type is 5, which means a "Header-style"
+  ;; signature.
+  (define signature-type (list 0 5))
+
+  (define reserved-bytes (make-list 16 0))
+
+  (append magic file-format-version type arch-number name
+          os-number signature-type reserved-bytes))
+
+
+;;;
+;;; Header section.
+;;;
+
+(define header-magic (list #x8e #xad #xe8))
+(define header-version (list 1))
+(define header-reserved (make-list 4 0)) ;4 reserved bytes
+;;; Every header starts with 8 bytes made by the header magic number, the
+;;; header version and 4 reserved bytes.
+(define header-intro (append header-magic header-version header-reserved))
+
+;;; Header entry data types.
+(define NULL 0)
+(define CHAR 1)
+(define INT8 2)
+(define INT16 3)                        ;2-bytes aligned
+(define INT32 4)                        ;4-bytes aligned
+(define INT64 5)                        ;8-bytes aligned
+(define STRING 6)
+(define BIN 7)
+(define STRING_ARRAY 8)
+(define I18NSTRIN_TYPE 9)
+
+;;; Header entry tags.
+(define-record-type <rpm-tag>
+  (make-rpm-tag number type)
+  rpm-tag?
+  (number rpm-tag-number)
+  (type rpm-tag-type))
+
+;;; The following are internal tags used to identify the data sections.
+(define RPMTAG_HEADERSIGNATURES (make-rpm-tag 62 BIN)) ;signature header
+(define RPMTAG_HEADERIMMUTABLE (make-rpm-tag 63 BIN))  ;main/data header
+(define RPMTAG_HEADERI18NTABLE (make-rpm-tag 100 STRING_ARRAY))
+
+;;; Subset of RPM tags from include/rpm/rpmtag.h.
+(define RPMTAG_NAME (make-rpm-tag 1000 STRING))
+(define RPMTAG_VERSION (make-rpm-tag 1001 STRING))
+(define RPMTAG_RELEASE (make-rpm-tag 1002 STRING))
+(define RPMTAG_SUMMARY (make-rpm-tag 1004 STRING))
+(define RPMTAG_SIZE (make-rpm-tag 1009 INT32))
+(define RPMTAG_LICENSE (make-rpm-tag 1014 STRING))
+(define RPMTAG_OS (make-rpm-tag 1021 STRING))
+(define RPMTAG_ARCH (make-rpm-tag 1022 STRING))
+(define RPMTAG_PREIN (make-rpm-tag 1023 STRING))
+(define RPMTAG_POSTIN (make-rpm-tag 1024 STRING))
+(define RPMTAG_PREUN (make-rpm-tag 1025 STRING))
+(define RPMTAG_POSTUN (make-rpm-tag 1026 STRING))
+(define RPMTAG_FILESIZES (make-rpm-tag 1028 INT32))
+(define RPMTAG_FILEMODES (make-rpm-tag 1030 INT16))
+(define RPMTAG_FILEDIGESTS (make-rpm-tag 1035 STRING_ARRAY))
+(define RPMTAG_FILELINKTOS (make-rpm-tag 1036 STRING_ARRAY))
+(define RPMTAG_FILEUSERNAME (make-rpm-tag 1039 STRING_ARRAY))
+(define RPMTAG_GROUPNAME (make-rpm-tag 1040 STRING_ARRAY))
+(define RPMTAG_PREFIXES (make-rpm-tag 1098 STRING_ARRAY))
+(define RPMTAG_DIRINDEXES (make-rpm-tag 1116 INT32))
+(define RPMTAG_BASENAMES (make-rpm-tag 1117 STRING_ARRAY))
+(define RPMTAG_DIRNAMES (make-rpm-tag 1118 STRING_ARRAY))
+(define RPMTAG_PAYLOADFORMAT (make-rpm-tag 1124 STRING))
+(define RPMTAG_PAYLOADCOMPRESSOR (make-rpm-tag 1125 STRING))
+(define RPMTAG_LONGFILESIZES (make-rpm-tag 5008 INT64))
+(define RPMTAG_LONGSIZE (make-rpm-tag 5009 INT64))
+;;; The algorithm used to compute the digest of each file, e.g. RPM_HASH_MD5.
+(define RPMTAG_FILEDIGESTALGO (make-rpm-tag 5011 INT32))
+;;; RPMTAG_ENCODING specifies the encoding used for strings, e.g. "utf-8".
+(define RPMTAG_ENCODING (make-rpm-tag 5062 STRING))
+;;; Compressed payload digest.  Its type is a string array, but currently in
+;;; practice it is equivalent to STRING, since only the first element is used.
+(define RPMTAG_PAYLOADDIGEST (make-rpm-tag 5092 STRING_ARRAY))
+;;; The algorithm used to compute the payload digest, e.g. RPM_HASH_SHA256.
+(define RPMTAG_PAYLOADDIGESTALGO (make-rpm-tag 5093 INT32))
+;;; The following are taken from the rpmHashAlgo_e enum in rpmcrypto.h.
+(define RPM_HASH_MD5 1)
+(define RPM_HASH_SHA256 8)
+
+;;; Other useful internal definitions.
+(define REGION_TAG_COUNT 16)            ;number of bytes
+(define INT32_MAX (1- (expt 2 32)))     ;4294967295 bytes (unsigned)
+
+(define (rpm-tag->u8-list tag)
+  "Return the u8 list corresponding to RPM-TAG, a <rpm-tag> object."
+  (append (u32-number->u8-list (rpm-tag-number tag))
+          (u32-number->u8-list (rpm-tag-type tag))))
+
+(define-record-type <header-entry>
+  (make-header-entry tag count value)
+  header-entry?
+  (tag header-entry-tag)                ;<rpm-tag>
+  (count header-entry-count)            ;number (u32)
+  (value header-entry-value))           ;string|number|list|...
+
+(define (entry-type->alignement type)
+  "Return the byte alignment of TYPE, an RPM header entry type."
+  (cond ((= INT16 type) 2)
+        ((= INT32 type) 4)
+        ((= INT64 type) 8)
+        (else 1)))
+
+(define (next-aligned-offset offset alignment)
+  "Return the next position from OFFSET which satisfies ALIGNMENT."
+  (if (= 0 (modulo offset alignment))
+      offset
+      (next-aligned-offset (1+ offset) alignment)))
+
+(define (header-entry->data entry)
+  "Return the data of ENTRY, a <header-entry> object, as a u8 list."
+  (let* ((tag (header-entry-tag entry))
+         (count (header-entry-count entry))
+         (value (header-entry-value entry))
+         (number (rpm-tag-number tag))
+         (type (rpm-tag-type tag)))
+    (cond
+     ((= STRING type)
+      (unless (string? value)
+        (error "expected string value for STRING type, got" value))
+      (unless (= 1 count)
+        (error "count must be 1 for STRING type"))
+      (let ((value (cond ((= (rpm-tag-number RPMTAG_VERSION) number)
+                          ;; Hyphens are not allowed in version strings.
+                          (string-map (match-lambda
+                                        (#\- #\+)
+                                        (c c))
+                                      value))
+                         (else value))))
+        (append (bytevector->u8-list (string->utf8 value))
+                (list 0))))             ;strings must end with null byte
+     ((= STRING_ARRAY type)
+      (unless (list? value)
+        (error "expected a list of strings for STRING_ARRAY type, got" value))
+      (unless (= count (length value))
+        (error "expected count to be equal to" (length value) 'got count))
+      (append-map (lambda (s)
+                    (append (bytevector->u8-list (string->utf8 s))
+                            (list 0)))  ;null byte separated
+                  value))
+     ((member type (list INT8 INT16 INT32))
+      (if (= 1 count)
+          (unless (number? value)
+            (error "expected number value for scalar INT type; got" value))
+          (unless (list? value)
+            (error "expected list value for array INT type; got" value)))
+      (if (list? value)
+          (cond ((= INT8 type) value)
+                ((= INT16 type) (append-map u16-number->u8-list value))
+                ((= INT32 type) (append-map u32-number->u8-list value))
+                (else (error "unexpected type" type)))
+          (cond ((= INT8 type) (list value))
+                ((= INT16 type) (u16-number->u8-list value))
+                ((= INT32 type) (u32-number->u8-list value))
+                (else (error "unexpected type" type)))))
+     ((= BIN type)
+      (unless (list? value)
+        (error "expected list value for BIN type; got" value))
+      value)
+     (else (error "unimplemented type" type)))))
+
+(define (make-header-index+data entries)
+  "Return the index and data sections as u8 number lists, via multiple values.
+An index is composed of four u32 (16 bytes total) quantities, in order: tag,
+type, offset and count."
+  (match (fold (match-lambda*
+                 ((entry (offset . (index . data)))
+                  (let* ((tag (header-entry-tag entry))
+                         (tag-number (rpm-tag-number tag))
+                         (tag-type (rpm-tag-type tag))
+                         (count (header-entry-count entry))
+                         (data* (header-entry->data entry))
+                         (alignment (entry-type->alignement tag-type))
+                         (aligned-offset (next-aligned-offset offset alignment))
+                         (padding (make-list (- aligned-offset offset) 0)))
+                    (cons (+ aligned-offset (length data*))
+                          (cons (append index
+                                        (u32-number->u8-list tag-number)
+                                        (u32-number->u8-list tag-type)
+                                        (u32-number->u8-list aligned-offset)
+                                        (u32-number->u8-list count))
+                                (append data padding data*))))))
+               '(0 . (() . ()))
+               entries)
+    ((offset . (index . data))
+     (values index data))))
+
+;; Prevent inlining of the variables/procedures accessed by unit tests.
+(set! make-header-index+data make-header-index+data)
+(set! RPMTAG_ARCH RPMTAG_ARCH)
+(set! RPMTAG_LICENSE RPMTAG_LICENSE)
+(set! RPMTAG_NAME RPMTAG_NAME)
+(set! RPMTAG_OS RPMTAG_OS)
+(set! RPMTAG_RELEASE RPMTAG_RELEASE)
+(set! RPMTAG_SUMMARY RPMTAG_SUMMARY)
+(set! RPMTAG_VERSION RPMTAG_VERSION)
+
+(define (wrap-in-region-tags header region-tag)
+  "Wrap HEADER, a header provided as u8-list with REGION-TAG."
+  (let* ((type (rpm-tag-type region-tag))
+         (header-intro (take header 16))
+         (header-rest (drop header 16))
+         ;; Increment the existing index value to account for the added region
+         ;; tag index.
+         (index-length (1+ (u8-list->u32-number
+                            (drop-right (drop header-intro 8) 4)))) ;bytes 8-11
+         ;; Increment the data length value to account for the added region
+         ;; tag data.
+         (data-length (+ REGION_TAG_COUNT
+                         (u8-list->u32-number
+                          (take-right header-intro 4))))) ;last 4 bytes of intro
+    (unless (member region-tag (list RPMTAG_HEADERSIGNATURES
+                                     RPMTAG_HEADERIMMUTABLE))
+      (error "expected RPMTAG_HEADERSIGNATURES or RPMTAG_HEADERIMMUTABLE, got"
+             region-tag))
+    (append (drop-right header-intro 8) ;strip existing index and data lengths
+            (u32-number->u8-list index-length)
+            (u32-number->u8-list data-length)
+            ;; Region tag (16 bytes).
+            (u32-number->u8-list (rpm-tag-number region-tag))      ;number
+            (u32-number->u8-list type)                             ;type
+            (u32-number->u8-list (- data-length REGION_TAG_COUNT)) ;offset
+            (u32-number->u8-list REGION_TAG_COUNT)                 ;count
+            ;; Immutable region.
+            header-rest
+            ;; Region tag trailer (16 bytes).  Note: the trailer offset value
+            ;; is an enforced convention; it has no practical use.
+            (u32-number->u8-list (rpm-tag-number region-tag)) ;number
+            (u32-number->u8-list type)                        ;type
+            (s32-number->u8-list (* -1 index-length 16))      ;negative offset
+            (u32-number->u8-list REGION_TAG_COUNT))))         ;count
+
+(define (bytevector->hex-string bv)
+  (format #f "~{~2,'0x~}" (bytevector->u8-list bv)))
+
+(define (files->md5-checksums files)
+  "Return the MD5 checksums (formatted as hexadecimal strings) for FILES."
+  (let ((file-md5 (cut file-hash (hash-algorithm md5) <>)))
+    (map (lambda (f)
+           (or (and=> (false-if-exception (file-md5 f))
+                      bytevector->hex-string)
+               ;; Only regular files (e.g., not directories) can have their
+               ;; checksum computed.
+               ""))
+         files)))
+
+(define (strip-leading-dot name)
+  "Remove the leading \".\" from NAME, if present.  If a single \".\" is
+encountered, translate it to \"/\"."
+  (match name
+    ("." "/")                           ;special case
+    ((? (cut string-prefix? "." <>))
+     (string-drop name 1))
+    (x name)))
+
+;;; An extensive list of required and optional FHS directories, per its 3.0
+;;; revision.
+(define %fhs-directories
+  (list "/bin" "/boot" "/dev"
+        "/etc" "/etc/opt" "/etc/X11" "/etc/sgml" "/etc/xml"
+        "/home" "/root" "/lib" "/media" "/mnt"
+        "/opt" "/opt/bin" "/opt/doc" "/opt/include"
+        "/opt/info" "/opt/lib" "/opt/man"
+        "/run" "/sbin" "/srv" "/sys" "/tmp"
+        "/usr" "/usr/bin" "/usr/include" "/usr/libexec"
+        "/usr/share" "/usr/share/applications"
+        "/usr/share/color" "/usr/share/dict" "/usr/share/doc" "/usr/share/games"
+        "/usr/share/icons" "/usr/share/icons/hicolor"
+        "/usr/share/icons/hicolor/48x48"
+        "/usr/share/icons/hicolor/48x48/apps"
+        "/usr/share/icons/hicolor/scalable"
+        "/usr/share/icons/hicolor/scalable/apps"
+        "/usr/share/info" "/usr/share/locale" "/usr/share/man"
+        "/usr/share/metainfo" "/usr/share/misc"
+        "/usr/share/nls" "/usr/share/ppd" "/usr/share/sgml"
+        "/usr/share/terminfo" "/usr/share/tmac" "/usr/share/xml"
+        "/usr/share/zoneinfo" "/usr/local" "/usr/local/bin" "/usr/local/etc"
+        "/usr/local/games" "/usr/local/include" "/usr/local/lib"
+        "/usr/local/man" "/usr/local/sbin" "/usr/local/sbin" "/usr/local/share"
+        "/usr/local/src" "/var" "/var/account" "/var/backups"
+        "/var/cache" "/var/cache/fonts" "/var/cache/man" "/var/cache/www"
+        "/var/crash" "/var/cron" "/var/games" "/var/mail" "/var/msgs"
+        "/var/lib" "/var/lib/color" "/var/lib/hwclock" "/var/lib/misc"
+        "/var/local" "/var/lock" "/var/log" "/var/opt" "/var/preserve"
+        "/var/run" "/var/spool" "/var/spool/lpd" "/var/spool/mqueue"
+        "/var/spool/news" "/var/spool/rwho" "/var/spool/uucp"
+        "/var/tmp" "/var/yp"))
+
+(define (fhs-directory? file-name)
+  "Predicate to check if FILE-NAME is a known File Hierarchy Standard (FHS)
+directory."
+  (member (strip-leading-dot file-name) %fhs-directories))
+
+(define (directory->file-entries directory)
+  "Return the file lists triplet header entries for the files found under
+DIRECTORY."
+  (with-directory-excursion directory
+    ;; Skip the initial "." directory, as its name would get concatenated with
+    ;; the "./" dirname and fail to match "." in the payload.
+    (let* ((files (cdr (find-files "." #:directories? #t)))
+           (file-stats (map lstat files))
+           (directories
+            (append (list ".")
+                    (filter-map (match-lambda
+                                  ((index . file)
+                                   (let ((st (list-ref file-stats index)))
+                                     (and (eq? 'directory (stat:type st))
+                                          file))))
+                                (list-transduce (tenumerate) rcons files))))
+           ;; Omit any FHS directories found in FILES to avoid the RPM package
+           ;; from owning them.  This can occur when symlinks directives such
+           ;; as "/usr/bin/hello -> bin/hello" are used.
+           (package-files package-file-stats
+                          (unzip2 (reverse
+                                   (fold (lambda (file stat res)
+                                           (if (fhs-directory? file)
+                                               res
+                                               (cons (list file stat) res)))
+                                         '() files file-stats))))
+
+           ;; When provided with the index of a file, the directory index must
+           ;; return the index of the corresponding directory entry.
+           (dirindexes (map (lambda (d)
+                              (list-index (cut string=? <> d) directories))
+                            (map dirname package-files)))
+           ;; The files owned are those appearing in 'basenames'; own them
+           ;; all.
+           (basenames (map basename package-files))
+           ;; The directory names must end with a trailing "/".
+           (dirnames (map (compose strip-leading-dot (cut string-append <> "/"))
+                          directories))
+           ;; Note: All the file-related entries must have the same length as
+           ;; the basenames entry.
+           (symlink-targets (map (lambda (f)
+                                   (if (symbolic-link? f)
+                                       (readlink f)
+                                       "")) ;unused
+                                 package-files))
+           (file-modes (map stat:mode package-file-stats))
+           (file-sizes (map stat:size package-file-stats))
+           (file-md5s (files->md5-checksums package-files)))
+      (let ((basenames-length (length basenames))
+            (dirindexes-length (length dirindexes)))
+        (unless (= basenames-length dirindexes-length)
+          (error "length mismatch for dirIndexes; expected/actual"
+                 basenames-length dirindexes-length))
+        (append
+         (if (> (apply max file-sizes) INT32_MAX)
+             (list (make-header-entry RPMTAG_LONGFILESIZES (length file-sizes)
+                                      file-sizes)
+                   (make-header-entry RPMTAG_LONGSIZE 1
+                                      (reduce + 0 file-sizes)))
+             (list (make-header-entry RPMTAG_FILESIZES (length file-sizes)
+                                      file-sizes)
+                   (make-header-entry RPMTAG_SIZE 1 (reduce + 0 file-sizes))))
+         (list
+          (make-header-entry RPMTAG_FILEMODES (length file-modes) file-modes)
+          (make-header-entry RPMTAG_FILEDIGESTS (length file-md5s) file-md5s)
+          (make-header-entry RPMTAG_FILEDIGESTALGO 1 RPM_HASH_MD5)
+          (make-header-entry RPMTAG_FILELINKTOS (length symlink-targets)
+                             symlink-targets)
+          (make-header-entry RPMTAG_FILEUSERNAME basenames-length
+                             (make-list basenames-length "root"))
+          (make-header-entry RPMTAG_GROUPNAME basenames-length
+                             (make-list basenames-length "root"))
+          ;; The dirindexes, basenames and dirnames tags form the so-called RPM
+          ;; "path triplet".
+          (make-header-entry RPMTAG_DIRINDEXES dirindexes-length dirindexes)
+          (make-header-entry RPMTAG_BASENAMES basenames-length basenames)
+          (make-header-entry RPMTAG_DIRNAMES (length dirnames) dirnames)))))))
+
+(define (make-header entries)
+  "Return the u8 list of a RPM header containing ENTRIES, a list of
+<rpm-entry> objects."
+  (let* ((entries (sort entries (lambda (x y)
+                                  (< (rpm-tag-number (header-entry-tag x))
+                                     (rpm-tag-number (header-entry-tag y))))))
+         (count (length entries))
+         (index data (make-header-index+data entries)))
+    (append header-intro                        ;8 bytes
+            (u32-number->u8-list count)         ;4 bytes
+            (u32-number->u8-list (length data)) ;4 bytes
+            ;; Now starts the header index, which can contain up to 32 entries
+            ;; of 16 bytes each.
+            index data)))
+
+(define* (generate-header name version
+                          payload-digest
+                          payload-directory
+                          payload-compressor
+                          #:key
+                          relocatable?
+                          prein-file postin-file
+                          preun-file postun-file
+                          (target %host-type)
+                          (release "0")
+                          (license "N/A")
+                          (summary "RPM archive generated by GNU Guix.")
+                          (os "Linux")) ;see rpmrc.in
+  "Return the u8 list corresponding to the Header section.  PAYLOAD-DIGEST is
+the SHA256 checksum string of the compressed payload.  PAYLOAD-DIRECTORY is
+the directory containing the payload files.  PAYLOAD-COMPRESSOR is the name of
+the compressor used to compress the CPIO payload, such as \"none\", \"gz\",
+\"xz\" or \"zstd\"."
+  (let* ((rpm-arch (gnu-machine-type->rpm-arch
+                    (gnu-system-triplet->machine-type target)))
+         (file->string (cut call-with-input-file <> get-string-all))
+         (prein-script (and=> prein-file file->string))
+         (postin-script (and=> postin-file file->string))
+         (preun-script (and=> preun-file file->string))
+         (postun-script (and=> postun-file file->string)))
+    (wrap-in-region-tags
+     (make-header (append
+                   (list (make-header-entry RPMTAG_HEADERI18NTABLE 1 (list "C"))
+                         (make-header-entry RPMTAG_NAME 1 name)
+                         (make-header-entry RPMTAG_VERSION 1 version)
+                         (make-header-entry RPMTAG_RELEASE 1 release)
+                         (make-header-entry RPMTAG_SUMMARY 1 summary)
+                         (make-header-entry RPMTAG_LICENSE 1 license)
+                         (make-header-entry RPMTAG_OS 1 os)
+                         (make-header-entry RPMTAG_ARCH 1 rpm-arch))
+                   (directory->file-entries payload-directory)
+                   (if relocatable?
+                       ;; Note: RPMTAG_PREFIXES must not have a trailing
+                       ;; slash, unless it's '/'.  This allows installing the
+                       ;; package via 'rpm -i --prefix=/tmp', for example.
+                       (list (make-header-entry RPMTAG_PREFIXES 1 (list "/")))
+                       '())
+                   (if prein-script
+                       (list (make-header-entry RPMTAG_PREIN 1 prein-script))
+                       '())
+                   (if postin-script
+                       (list (make-header-entry RPMTAG_POSTIN 1 postin-script))
+                       '())
+                   (if preun-script
+                       (list (make-header-entry RPMTAG_PREUN 1 preun-script))
+                       '())
+                   (if postun-script
+                       (list (make-header-entry RPMTAG_POSTUN 1 postun-script))
+                       '())
+                   (if (string=? "none" payload-compressor)
+                       '()
+                       (list (make-header-entry RPMTAG_PAYLOADCOMPRESSOR 1
+                                                payload-compressor)))
+                   (list (make-header-entry RPMTAG_ENCODING 1 "utf-8")
+                         (make-header-entry RPMTAG_PAYLOADFORMAT 1 "cpio")
+                         (make-header-entry RPMTAG_PAYLOADDIGEST 1
+                                            (list payload-digest))
+                         (make-header-entry RPMTAG_PAYLOADDIGESTALGO 1
+                                            RPM_HASH_SHA256))))
+     RPMTAG_HEADERIMMUTABLE)))
+
+
+;;;
+;;; Signature section
+;;;
+
+;;; Header sha256 checksum.
+(define RPMSIGTAG_SHA256 (make-rpm-tag 273 STRING))
+;;; Uncompressed payload size.
+(define RPMSIGTAG_PAYLOADSIZE (make-rpm-tag 1007 INT32))
+;;; Header and compressed payload combined size.
+(define RPMSIGTAG_SIZE (make-rpm-tag 1000 INT32))
+;;; Uncompressed payload size (when size > max u32).
+(define RPMSIGTAG_LONGARCHIVESIZE (make-rpm-tag 271 INT64))
+;;; Header and compressed payload combined size (when size > max u32).
+(define RPMSIGTAG_LONGSIZE (make-rpm-tag 270 INT64))
+;;; Extra space reserved for signatures (typically 32 bytes).
+(define RPMSIGTAG_RESERVEDSPACE (make-rpm-tag 1008 BIN))
+
+(define (generate-signature header-sha256
+                            header+compressed-payload-size
+                            ;; uncompressed-payload-size
+                            )
+  "Return the u8 list representing a signature header containing the
+HEADER-SHA256 (a string) and the PAYLOAD-SIZE, which is the combined size of
+the header and compressed payload."
+  (define size-tag (if (> header+compressed-payload-size INT32_MAX)
+                       RPMSIGTAG_LONGSIZE
+                       RPMSIGTAG_SIZE))
+  (wrap-in-region-tags
+   (make-header (list (make-header-entry RPMSIGTAG_SHA256 1 header-sha256)
+                      (make-header-entry size-tag 1
+                                         header+compressed-payload-size)
+                      ;; (make-header-entry RPMSIGTAG_PAYLOADSIZE 1
+                      ;;                    uncompressed-payload-size)
+                      ;; Reserve 32 bytes of extra space in case users would
+                      ;; like to add signatures, as done in rpmGenerateSignature.
+                      (make-header-entry RPMSIGTAG_RESERVEDSPACE 32
+                                         (make-list 32 0))))
+   RPMTAG_HEADERSIGNATURES))
+
+(define (assemble-rpm-metadata lead signature header)
+  "Align and append the various u8 list components together, and return the
+result as a bytevector."
+  (let* ((offset (+ (length lead) (length signature)))
+         (header-offset (next-aligned-offset offset 8))
+         (padding (make-list (- header-offset offset) 0)))
+    ;; The Header is 8-bytes aligned.
+    (u8-list->bytevector (append lead signature padding header))))
diff --git a/guix/scripts.scm b/guix/scripts.scm
index 4de8bc23b3..395df864a3 100644
--- a/guix/scripts.scm
+++ b/guix/scripts.scm
@@ -321,11 +321,11 @@ THRESHOLDS is a pair (ABSOLUTE-THRESHOLD . RELATIVE-THRESHOLD)."
                             absolute-threshold-in-bytes))
       (warning (G_ "only ~,1f GiB of free space available on ~a~%")
                (/ available 1. GiB) (%store-prefix))
-      (display-hint (format #f (G_ "Consider deleting old profile
+      (display-hint (G_ "Consider deleting old profile
 generations and collecting garbage, along these lines:
 
 @example
 guix gc --delete-generations=1m
-@end example\n"))))))
+@end example\n")))))
 
 ;;; scripts.scm ends here
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index b4437172d7..6a4a32fc0a 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
@@ -377,12 +377,12 @@ use '--no-offload' instead~%")))
                       arg)
                      (if closest
                          (display-hint
-                          (format #f (G_ "Did you mean @code{~a}?
+                          (G_ "Did you mean @code{~a}?
 Try @option{--list-targets} to view available targets.~%")
-                                  closest))
+                          closest)
                          (display-hint
-                          (format #f (G_ "\
-Try @option{--list-targets} to view available targets.~%"))))
+                          (G_ "\
+Try @option{--list-targets} to view available targets.~%")))
                      (exit 1))))))))
 
 (define %standard-native-build-options
@@ -404,12 +404,12 @@ Try @option{--list-targets} to view available targets.~%"))))
                                    arg)
                      (if closest
                          (display-hint
-                          (format #f (G_ "Did you mean @code{~a}?
+                          (G_ "Did you mean @code{~a}?
 Try @option{--list-systems} to view available system types.~%")
-                                  closest))
+                          closest)
                          (display-hint
-                          (format #f (G_ "\
-Try @option{--list-systems} to view available system types.~%"))))
+                          (G_ "\
+Try @option{--list-systems} to view available system types.~%")))
                      (exit 1))))))))
 
 
diff --git a/guix/scripts/container/exec.scm b/guix/scripts/container/exec.scm
index 51b616b384..3e70b1d3c2 100644
--- a/guix/scripts/container/exec.scm
+++ b/guix/scripts/container/exec.scm
@@ -102,4 +102,12 @@ and the other containing arguments for the command to be executed."
                                        environment)
                              (apply execlp program program program-args)))))))
           (unless (zero? result)
-            (leave (G_ "exec failed with status ~d~%") result)))))))
+            (match (status:exit-val result)
+              (#f
+               (if (status:term-sig result)
+                   (leave (G_ "process terminated with signal ~a~%")
+                          (status:term-sig result))
+                   (leave (G_ "process stopped with signal ~a~%")
+                          (status:stop-sig result))))
+              (code
+               (leave (G_ "process exited with status ~d~%") code)))))))))
diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm
index 80cd0ce00a..5523aa0ec2 100644
--- a/guix/scripts/describe.scm
+++ b/guix/scripts/describe.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2020, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
@@ -154,10 +154,10 @@ within a Git checkout."
          (channel (repository->guix-channel (dirname program))))
     (unless channel
       (report-error (G_ "failed to determine origin~%"))
-      (display-hint (format #f (G_ "Perhaps this
+      (display-hint (G_ "Perhaps this
 @command{guix} command was not obtained with @command{guix pull}?  Its version
 string is ~a.~%")
-                            %guix-version))
+                    %guix-version)
       (exit 1))
 
     (match fmt
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 46435ae48e..44cfcb4f76 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -664,8 +664,8 @@ command name."
         (let ((closest (string-closest executable available
                                        #:threshold 12)))
           (unless (or (not closest) (string=? closest executable))
-            (display-hint (format #f (G_ "Did you mean '~a'?~%")
-                                  closest)))))))))
+            (display-hint (G_ "Did you mean '~a'?~%")
+                          closest))))))))
 
 (define* (launch-environment/fork command profile manifest
                                   #:key pure? (white-list '()))
diff --git a/guix/scripts/home.scm b/guix/scripts/home.scm
index a37f059711..445853d01f 100644
--- a/guix/scripts/home.scm
+++ b/guix/scripts/home.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
+;;; Copyright © 2021, 2023 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
@@ -410,6 +410,7 @@ immediately.  Return the exit status of the process in the container."
                          network?)
   "Perform ACTION for home environment. "
 
+  (ensure-profile-directory)
   (define println
     (cut format #t "~a~%" <>))
 
@@ -474,7 +475,6 @@ ACTION must be one of the sub-commands that takes a home environment
 declaration as an argument (a file name.)  OPTS is the raw alist of options
 resulting from command-line parsing."
   (define (ensure-home-environment file-or-exp obj)
-    (ensure-profile-directory)
     (unless (home-environment? obj)
       (leave (G_ "'~a' does not return a home environment~%")
              file-or-exp))
@@ -573,10 +573,10 @@ argument list and OPTS is the option alist."
          (cut import-manifest manifest destination <>))
        (info (G_ "'~a' populated with all the Home configuration files~%")
              destination)
-       (display-hint (format #f (G_ "\
+       (display-hint (G_ "\
 Run @command{guix home reconfigure ~a/home-configuration.scm} to effectively
 deploy the home environment described by these files.\n")
-                             destination))))
+                     destination)))
     ((describe)
      (let ((list-installed-regex (assoc-ref opts 'list-installed)))
        (match (generation-number %guix-home)
diff --git a/guix/scripts/home/edit.scm b/guix/scripts/home/edit.scm
index a6c05675b3..d039179a10 100644
--- a/guix/scripts/home/edit.scm
+++ b/guix/scripts/home/edit.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,8 +40,8 @@
                                              '()))
          (closest   (string-closest type available)))
     (unless (or (not closest) (string=? closest type))
-      (display-hint (format #f (G_ "Did you mean @code{~a}?~%")
-                            closest))))
+      (display-hint (G_ "Did you mean @code{~a}?~%")
+                    closest)))
 
   (exit 1))
 
diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm
index 2bca927d63..fe1d7a8dda 100644
--- a/guix/scripts/import.scm
+++ b/guix/scripts/import.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2014, 2020-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2014, 2020-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
 ;;; Copyright © 2018 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2019, 2022 Ricardo Wurmus <rekado@elephly.net>
@@ -106,6 +106,5 @@ Run IMPORTER with ARGS.\n"))
          (let ((hint (string-closest importer importers #:threshold 3)))
            (report-error (G_ "~a: invalid importer~%") importer)
            (when hint
-             (display-hint
-              (format #f (G_ "Did you mean @code{~a}?~%") hint)))
+             (display-hint (G_ "Did you mean @code{~a}?~%") hint))
            (exit 1))))))
diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm
index 578b3b9888..8c6132e7c3 100644
--- a/guix/scripts/offload.scm
+++ b/guix/scripts/offload.scm
@@ -220,7 +220,12 @@ number of seconds after which the connection times out."
         (session (make-session #:user (build-machine-user machine)
                                #:host (build-machine-name machine)
                                #:port (build-machine-port machine)
-                               #:timeout 10       ;initial timeout (seconds)
+                               ;; Multiple derivations may be offloaded in
+                               ;; parallel, and when there is a large amount
+                               ;; of data to be sent, it can choke lower
+                               ;; bandwidth connections and cause timeouts, so
+                               ;; set it to a large enough value.
+                               #:timeout 30 ;initial timeout (seconds)
                                ;; #:log-verbosity 'protocol
                                #:identity (build-machine-private-key machine)
 
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index f65642fb85..eb41eb5563 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -1,11 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2017-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2017-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; 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, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2022 Alex Griffin <a@ajgrf.com>
 ;;;
@@ -67,6 +67,7 @@
 
             self-contained-tarball
             debian-archive
+            rpm-archive
             docker-image
             squashfs-image
 
@@ -194,104 +195,150 @@ target the profile's @file{bin/env} file:
      (leave (G_ "~a: invalid symlink specification~%")
             arg))))
 
-
-;;;
-;;; Tarball format.
-;;;
-(define* (self-contained-tarball/builder profile
-                                         #:key (profile-name "guix-profile")
-                                         (compressor (first %compressors))
-                                         localstatedir?
-                                         (symlinks '())
-                                         (archiver tar)
-                                         (extra-options '()))
-  "Return the G-Expression of the builder used for self-contained-tarball."
+(define (set-utf8-locale profile)
+  "Configure the environment to use the \"en_US.utf8\" locale provided by the
+GLIBC-UT8-LOCALES package."
+  ;; Arrange to not depend on 'glibc-utf8-locales' when using '--bootstrap'.
+  (and (or (not (profile? profile))
+           (profile-locales? profile))
+       #~(begin
+           (setenv "GUIX_LOCPATH"
+                   #+(file-append glibc-utf8-locales "/lib/locale"))
+           (setlocale LC_ALL "en_US.utf8"))))
+
+(define* (populate-profile-root profile
+                                #:key (profile-name "guix-profile")
+                                target
+                                localstatedir?
+                                deduplicate?
+                                (symlinks '()))
+  "Populate the root profile directory with SYMLINKS and a Guix database, when
+LOCALSTATEDIR? is set.  When DEDUPLICATE? is true, deduplicate the store
+items, which relies on hard links."
   (define database
     (and localstatedir?
          (file-append (store-database (list profile))
                       "/db/db.sqlite")))
 
-  (define set-utf8-locale
-    ;; Arrange to not depend on 'glibc-utf8-locales' when using '--bootstrap'.
-    (and (or (not (profile? profile))
-             (profile-locales? profile))
-         #~(begin
-             (setenv "GUIX_LOCPATH"
-                     #+(file-append glibc-utf8-locales "/lib/locale"))
-             (setlocale LC_ALL "en_US.utf8"))))
+  (define bootstrap?
+    ;; Whether a '--bootstrap' environment is needed, for testing purposes.
+    ;; XXX: Infer that from available info.
+    (and (not database) (not (profile-locales? profile))))
 
   (define (import-module? module)
     ;; Since we don't use deduplication support in 'populate-store', don't
     ;; import (guix store deduplication) and its dependencies, which includes
-    ;; Guile-Gcrypt.  That way we can run tests with '--bootstrap'.
+    ;; Guile-Gcrypt, unless DEDUPLICATE? is #t.  This makes it possible to run
+    ;; tests with '--bootstrap'.
     (and (not-config? module)
-         (not (equal? '(guix store deduplication) module))))
-
-  (with-imported-modules (source-module-closure
-                          `((guix build pack)
-                            (guix build store-copy)
-                            (guix build utils)
-                            (guix build union)
-                            (gnu build install))
-                          #:select? import-module?)
+         (or deduplicate? (not (equal? '(guix store deduplication) module)))))
+
+  (computed-file "profile-directory"
+    (with-imported-modules (source-module-closure
+                            `((guix build pack)
+                              (guix build store-copy)
+                              (guix build utils)
+                              (guix build union)
+                              (gnu build install))
+                            #:select? import-module?)
+      #~(begin
+          (use-modules (guix build pack)
+                       (guix build store-copy)
+                       (guix build utils)
+                       ((guix build union) #:select (relative-file-name))
+                       (gnu build install)
+                       (srfi srfi-1)
+                       (srfi srfi-26)
+                       (ice-9 match))
+
+          (define symlink->directives
+            ;; Return "populate directives" to make the given symlink and its
+            ;; parent directories.
+            (match-lambda
+              ((source '-> target)
+               (let ((target (string-append #$profile "/" target))
+                     (parent (dirname source)))
+                 ;; Never add a 'directory' directive for "/" so as to
+                 ;; preserve its ownership when extracting the archive (see
+                 ;; below), and also because this would lead to adding the
+                 ;; same entries twice in the tarball.
+                 `(,@(if (string=? parent "/")
+                         '()
+                         `((directory ,parent)))
+                   ;; Use a relative file name for compatibility with
+                   ;; relocatable packs.
+                   (,source -> ,(relative-file-name parent target)))))))
+
+          (define directives
+            ;; Fully-qualified symlinks.
+            (append-map symlink->directives '#$symlinks))
+
+          ;; Make sure non-ASCII file names are properly handled.
+          #+(set-utf8-locale profile)
+
+          ;; Note: there is not much to gain here with deduplication and there
+          ;; is the overhead of the '.links' directory, so turn it off by
+          ;; default.  Furthermore GNU tar < 1.30 sometimes fails to extract
+          ;; tarballs with hard links:
+          ;; <http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>.
+          (populate-store (list "profile") #$output
+                          #:deduplicate? #$deduplicate?)
+
+          (when #+localstatedir?
+            (install-database-and-gc-roots #$output #+database #$profile
+                                           #:profile-name #$profile-name))
+
+          ;; Create SYMLINKS.
+          (for-each (cut evaluate-populate-directive <> #$output)
+                    directives)))
+    #:local-build? #f
+    #:guile (if bootstrap? %bootstrap-guile (default-guile))
+    #:options (list #:references-graphs `(("profile" ,profile))
+                    #:target target)))
+
+
+;;;
+;;; Tarball format.
+;;;
+(define* (self-contained-tarball/builder profile
+                                         #:key (profile-name "guix-profile")
+                                         target
+                                         localstatedir?
+                                         deduplicate?
+                                         symlinks
+                                         compressor
+                                         archiver)
+  "Return a GEXP that can build a self-contained tarball."
+
+  (define root (populate-profile-root profile
+                                      #:profile-name profile-name
+                                      #:target target
+                                      #:localstatedir? localstatedir?
+                                      #:deduplicate? deduplicate?
+                                      #:symlinks symlinks))
+
+  (with-imported-modules (source-module-closure '((guix build pack)
+                                                  (guix build utils)))
     #~(begin
         (use-modules (guix build pack)
-                     (guix build store-copy)
-                     (guix build utils)
-                     ((guix build union) #:select (relative-file-name))
-                     (gnu build install)
-                     (srfi srfi-1)
-                     (srfi srfi-26)
-                     (ice-9 match))
-
-        (define %root "root")
-
-        (define symlink->directives
-          ;; Return "populate directives" to make the given symlink and its
-          ;; parent directories.
-          (match-lambda
-            ((source '-> target)
-             (let ((target (string-append #$profile "/" target))
-                   (parent (dirname source)))
-               ;; Never add a 'directory' directive for "/" so as to
-               ;; preserve its ownership when extracting the archive (see
-               ;; below), and also because this would lead to adding the
-               ;; same entries twice in the tarball.
-               `(,@(if (string=? parent "/")
-                       '()
-                       `((directory ,parent)))
-                 ;; Use a relative file name for compatibility with
-                 ;; relocatable packs.
-                 (,source -> ,(relative-file-name parent target)))))))
-
-        (define directives
-          ;; Fully-qualified symlinks.
-          (append-map symlink->directives '#$symlinks))
+                     (guix build utils))
 
         ;; Make sure non-ASCII file names are properly handled.
-        #+set-utf8-locale
+        #+(set-utf8-locale profile)
 
         (define tar #+(file-append archiver "/bin/tar"))
 
-        ;; Note: there is not much to gain here with deduplication and there
-        ;; is the overhead of the '.links' directory, so turn it off.
-        ;; Furthermore GNU tar < 1.30 sometimes fails to extract tarballs
-        ;; with hard links:
-        ;; <http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>.
-        (populate-store (list "profile") %root #:deduplicate? #f)
+        (define %root (if #$localstatedir? "." #$root))
 
-        (when #+localstatedir?
-          (install-database-and-gc-roots %root #+database #$profile
-                                         #:profile-name #$profile-name))
+        (when #$localstatedir?
+          ;; Fix the permission of the Guix database file, which was made
+          ;; read-only when copied to the store in populate-profile-root.
+          (copy-recursively #$root %root)
+          (chmod (string-append %root "/var/guix/db/db.sqlite") #o644))
 
-        ;; Create SYMLINKS.
-        (for-each (cut evaluate-populate-directive <> %root)
-                  directives)
-
-        ;; Create the tarball.
         (with-directory-excursion %root
           ;; GNU Tar recurses directories by default.  Simply add the whole
-          ;; current directory, which contains all the generated files so far.
+          ;; current directory, which contains all the files to be archived.
           ;; This avoids creating duplicate files in the archives that would
           ;; be stored as hard links by GNU Tar.
           (apply invoke tar "-cvf" #$output "."
@@ -320,17 +367,16 @@ added to the pack."
     (warning (G_ "entry point not supported in the '~a' format~%")
              'tarball))
 
-  (gexp->derivation
-   (string-append name ".tar"
-                  (compressor-extension compressor))
-   (self-contained-tarball/builder profile
-                                   #:profile-name profile-name
-                                   #:compressor compressor
-                                   #:localstatedir? localstatedir?
-                                   #:symlinks symlinks
-                                   #:archiver archiver)
-   #:target target
-   #:references-graphs `(("profile" ,profile))))
+  (gexp->derivation (string-append name ".tar"
+                                   (compressor-extension compressor))
+    (self-contained-tarball/builder profile
+                                    #:profile-name profile-name
+                                    #:target target
+                                    #:localstatedir? localstatedir?
+                                    #:deduplicate? deduplicate?
+                                    #:symlinks symlinks
+                                    #:compressor compressor
+                                    #:archiver archiver)))
 
 
 ;;;
@@ -676,18 +722,19 @@ Valid compressors are: ~a~%") compressor-name %valid-compressors)))
              'deb))
 
   (define data-tarball
-    (computed-file (string-append "data.tar"
-                                  (compressor-extension compressor))
-                   (self-contained-tarball/builder
-                    profile
-                    #:profile-name profile-name
-                    #:compressor compressor
-                    #:localstatedir? localstatedir?
-                    #:symlinks symlinks
-                    #:archiver archiver)
-                   #:local-build? #f    ;allow offloading
-                   #:options (list #:references-graphs `(("profile" ,profile))
-                                   #:target target)))
+    (computed-file (string-append "data.tar" (compressor-extension
+                                              compressor))
+      (self-contained-tarball/builder profile
+                                      #:target target
+                                      #:profile-name profile-name
+                                      #:localstatedir? localstatedir?
+                                      #:deduplicate? deduplicate?
+                                      #:symlinks symlinks
+                                      #:compressor compressor
+                                      #:archiver archiver)
+      #:local-build? #f                 ;allow offloading
+      #:options (list #:references-graphs `(("profile" ,profile))
+                      #:target target)))
 
   (define build
     (with-extensions (list guile-gcrypt)
@@ -702,6 +749,7 @@ Valid compressors are: ~a~%") compressor-name %valid-compressors)))
                          (guix build utils)
                          (guix profiles)
                          (ice-9 match)
+                         (ice-9 optargs)
                          (srfi srfi-1))
 
             (define machine-type
@@ -762,32 +810,23 @@ Valid compressors are: ~a~%") compressor-name %valid-compressors)))
 
             (copy-file #+data-tarball data-tarball-file-name)
 
-            (define (keyword-ref lst keyword)
-              (match (memq keyword lst)
-                ((_ value . _) value)
-                (#f #f)))
-
             ;; Generate the control archive.
-            (define control-file
-              (keyword-ref '#$extra-options #:control-file))
-
-            (define postinst-file
-              (keyword-ref '#$extra-options #:postinst-file))
-
-            (define triggers-file
-              (keyword-ref '#$extra-options #:triggers-file))
-
-            (define control-tarball-file-name
-              (string-append "control.tar"
-                             #$(compressor-extension compressor)))
-
-            ;; Write the compressed control tarball.  Only the control file is
-            ;; mandatory (see: 'man deb' and 'man deb-control').
-            (if control-file
-                (copy-file control-file "control")
-                (call-with-output-file "control"
-                  (lambda (port)
-                    (format port "\
+            (let-keywords '#$extra-options #f
+                          ((control-file #f)
+                           (postinst-file #f)
+                           (triggers-file #f))
+
+              (define control-tarball-file-name
+                (string-append "control.tar"
+                               #$(compressor-extension compressor)))
+
+              ;; Write the compressed control tarball.  Only the control file is
+              ;; mandatory (see: 'man deb' and 'man deb-control').
+              (if control-file
+                  (copy-file control-file "control")
+                  (call-with-output-file "control"
+                    (lambda (port)
+                      (format port "\
 Package: ~a
 Version: ~a
 Description: Debian archive generated by GNU Guix.
@@ -797,36 +836,196 @@ Priority: optional
 Section: misc
 ~%" package-name package-version architecture))))
 
-            (when postinst-file
-              (copy-file postinst-file "postinst")
-              (chmod "postinst" #o755))
+              (when postinst-file
+                (copy-file postinst-file "postinst")
+                (chmod "postinst" #o755))
 
-            (when triggers-file
-              (copy-file triggers-file "triggers"))
+              (when triggers-file
+                (copy-file triggers-file "triggers"))
 
-            (define tar (string-append #+archiver "/bin/tar"))
+              (define tar (string-append #+archiver "/bin/tar"))
 
-            (apply invoke tar
-                   `(,@(tar-base-options
-                        #:tar tar
-                        #:compressor #+(and=> compressor compressor-command))
-                     "-cvf" ,control-tarball-file-name
-                     "control"
-                     ,@(if postinst-file '("postinst") '())
-                     ,@(if triggers-file '("triggers") '())))
+              (apply invoke tar
+                     `(,@(tar-base-options
+                          #:tar tar
+                          #:compressor #+(and=> compressor compressor-command))
+                       "-cvf" ,control-tarball-file-name
+                       "control"
+                       ,@(if postinst-file '("postinst") '())
+                       ,@(if triggers-file '("triggers") '())))
 
-            ;; Create the .deb archive using GNU ar.
-            (invoke (string-append #+binutils "/bin/ar") "-rv" #$output
-                    "debian-binary"
-                    control-tarball-file-name data-tarball-file-name)))))
+              ;; Create the .deb archive using GNU ar.
+              (invoke (string-append #+binutils "/bin/ar") "-rv" #$output
+                      "debian-binary"
+                      control-tarball-file-name data-tarball-file-name))))))
 
-  (gexp->derivation (string-append name ".deb")
-    build
-    #:target target
-    #:references-graphs `(("profile" ,profile))))
+  (gexp->derivation (string-append name ".deb") build))
 
 
 ;;;
+;;; RPM archive format.
+;;;
+(define* (rpm-archive name profile
+                      #:key target
+                      (profile-name "guix-profile")
+                      entry-point
+                      (compressor (first %compressors))
+                      deduplicate?
+                      localstatedir?
+                      (symlinks '())
+                      archiver
+                      (extra-options '()))
+  "Return a RPM archive (.rpm) containing a store initialized with the closure
+of PROFILE, a derivation.  The archive contains /gnu/store.  SYMLINKS must be
+a list of (SOURCE -> TARGET) tuples denoting symlinks to be added to the pack.
+ARCHIVER and ENTRY-POINT are not used.  RELOCATABLE?, PREIN-FILE, POSTIN-FILE,
+PREUN-FILE and POSTUN-FILE can be provided via EXTRA-OPTIONS."
+  (when entry-point
+    (warning (G_ "entry point not supported in the '~a' format~%") 'rpm))
+
+  (define root (populate-profile-root profile
+                                      #:profile-name profile-name
+                                      #:target target
+                                      #:localstatedir? localstatedir?
+                                      #:deduplicate? deduplicate?
+                                      #:symlinks symlinks))
+
+  (define payload
+    (let* ((raw-cpio-file-name "payload.cpio")
+           (compressed-cpio-file-name (string-append raw-cpio-file-name
+                                                     (compressor-extension
+                                                      compressor))))
+      (computed-file compressed-cpio-file-name
+        (with-imported-modules (source-module-closure
+                                '((guix build utils)
+                                  (guix cpio)
+                                  (guix rpm)))
+          #~(begin
+              (use-modules (guix build utils)
+                           (guix cpio)
+                           (guix rpm)
+                           (srfi srfi-1))
+
+              ;; Make sure non-ASCII file names are properly handled.
+              #+(set-utf8-locale profile)
+
+              (define %root (if #$localstatedir? "." #$root))
+
+              (when #$localstatedir?
+                ;; Fix the permission of the Guix database file, which was made
+                ;; read-only when copied to the store in populate-profile-root.
+                (copy-recursively #$root %root)
+                (chmod (string-append %root "/var/guix/db/db.sqlite") #o644))
+
+              (call-with-output-file #$raw-cpio-file-name
+                (lambda (port)
+                  (with-directory-excursion %root
+                    ;; The first "." entry is discarded.
+                    (write-cpio-archive
+                     (remove fhs-directory?
+                             (cdr (find-files "." #:directories? #t)))
+                     port))))
+              (when #+(compressor-command compressor)
+                (apply invoke (append #+(compressor-command compressor)
+                                      (list #$raw-cpio-file-name))))
+              (copy-file #$compressed-cpio-file-name #$output)))
+        #:local-build? #f)))            ;allow offloading
+
+  (define build
+    (with-extensions (list guile-gcrypt)
+      (with-imported-modules `(((guix config) => ,(make-config.scm))
+                               ,@(source-module-closure
+                                  `((gcrypt hash)
+                                    (guix build utils)
+                                    (guix profiles)
+                                    (guix rpm))
+                                  #:select? not-config?))
+        #~(begin
+            (use-modules (gcrypt hash)
+                         (guix build utils)
+                         (guix profiles)
+                         (guix rpm)
+                         (ice-9 binary-ports)
+                         (ice-9 match)  ;for manifest->friendly-name
+                         (ice-9 optargs)
+                         (rnrs bytevectors)
+                         (srfi srfi-1))
+
+            ;; Make sure non-ASCII file names are properly handled.
+            #+(set-utf8-locale profile)
+
+            (define machine-type
+              (and=> (or #$target %host-type)
+                     (lambda (triplet)
+                       (first (string-split triplet #\-)))))
+
+            #$(procedure-source manifest->friendly-name)
+
+            (define manifest (profile-manifest #$profile))
+
+            (define single-entry        ;manifest entry
+              (match (manifest-entries manifest)
+                ((entry)
+                 entry)
+                (_ #f)))
+
+            (define name
+              (or (and=> single-entry manifest-entry-name)
+                  (manifest->friendly-name manifest)))
+
+            (define version
+              (or (and=> single-entry manifest-entry-version) "0.0.0"))
+
+            (define lead
+              (generate-lead (string-append name "-" version)
+                             #:target (or #$target %host-type)))
+
+            (define payload-digest
+              (bytevector->hex-string (file-sha256 #$payload)))
+
+            (let-keywords '#$extra-options #f ((relocatable? #f)
+                                               (prein-file #f)
+                                               (postin-file #f)
+                                               (preun-file #f)
+                                               (postun-file #f))
+
+              (let ((header (generate-header name version
+                                             payload-digest
+                                             #$root
+                                             #$(compressor-name compressor)
+                                             #:target (or #$target %host-type)
+                                             #:relocatable? relocatable?
+                                             #:prein-file prein-file
+                                             #:postin-file postin-file
+                                             #:preun-file preun-file
+                                             #:postun-file postun-file)))
+
+                (define header-sha256
+                  (bytevector->hex-string (sha256 (u8-list->bytevector header))))
+
+                (define payload-size (stat:size (stat #$payload)))
+
+                (define header+compressed-payload-size
+                  (+ (length header) payload-size))
+
+                (define signature
+                  (generate-signature header-sha256
+                                      header+compressed-payload-size))
+
+                ;; Serialize the archive components to a file.
+                (call-with-input-file #$payload
+                  (lambda (in)
+                    (call-with-output-file #$output
+                      (lambda (out)
+                        (put-bytevector out (assemble-rpm-metadata lead
+                                                                   signature
+                                                                   header))
+                        (sendfile out in payload-size)))))))))))
+
+  (gexp->derivation (string-append name ".rpm") build))
+
+  
+;;;
 ;;; Compiling C programs.
 ;;;
 
@@ -1158,7 +1357,8 @@ last resort for relocation."
   `((tarball . ,self-contained-tarball)
     (squashfs . ,squashfs-image)
     (docker  . ,docker-image)
-    (deb . ,debian-archive)))
+    (deb . ,debian-archive)
+    (rpm . ,rpm-archive)))
 
 (define (show-formats)
   ;; Print the supported pack formats.
@@ -1172,18 +1372,22 @@ last resort for relocation."
   docker        Tarball ready for 'docker load'"))
   (display (G_ "
   deb           Debian archive installable via dpkg/apt"))
+  (display (G_ "
+  rpm           RPM archive installable via rpm/yum"))
   (newline))
 
+(define (required-option symbol)
+  "Return an SYMBOL option that requires a value."
+  (option (list (symbol->string symbol)) #t #f
+          (lambda (opt name arg result . rest)
+            (apply values
+                   (alist-cons symbol arg result)
+                   rest))))
+
 (define %deb-format-options
-  (let ((required-option (lambda (symbol)
-                           (option (list (symbol->string symbol)) #t #f
-                                   (lambda (opt name arg result . rest)
-                                     (apply values
-                                            (alist-cons symbol arg result)
-                                            rest))))))
-    (list (required-option 'control-file)
-          (required-option 'postinst-file)
-          (required-option 'triggers-file))))
+  (list (required-option 'control-file)
+        (required-option 'postinst-file)
+        (required-option 'triggers-file)))
 
 (define (show-deb-format-options)
   (display (G_ "
@@ -1202,6 +1406,32 @@ last resort for relocation."
   (newline)
   (exit 0))
 
+(define %rpm-format-options
+  (list (required-option 'prein-file)
+        (required-option 'postin-file)
+        (required-option 'preun-file)
+        (required-option 'postun-file)))
+
+(define (show-rpm-format-options)
+  (display (G_ "
+      --help-rpm-format  list options specific to the RPM format")))
+
+(define (show-rpm-format-options/detailed)
+  (display (G_ "
+      --prein-file=FILE
+                         Embed the provided prein script"))
+  (display (G_ "
+      --postin-file=FILE
+                         Embed the provided postin script"))
+  (display (G_ "
+      --preun-file=FILE
+                         Embed the provided preun script"))
+  (display (G_ "
+      --postun-file=FILE
+                         Embed the provided postun script"))
+  (newline)
+  (exit 0))
+
 (define %options
   ;; Specifications of the command-line options.
   (cons* (option '(#\h "help") #f #f
@@ -1278,7 +1508,12 @@ last resort for relocation."
                  (lambda args
                    (show-deb-format-options/detailed)))
 
+         (option '("help-rpm-format") #f #f
+                 (lambda args
+                   (show-rpm-format-options/detailed)))
+
          (append %deb-format-options
+                 %rpm-format-options
                  %transformation-options
                  %standard-build-options
                  %standard-cross-build-options
@@ -1296,6 +1531,7 @@ Create a bundle of PACKAGE.\n"))
   (show-transformation-options-help)
   (newline)
   (show-deb-format-options)
+  (show-rpm-format-options)
   (newline)
   (display (G_ "
   -f, --format=FORMAT    build a pack in the given FORMAT"))
@@ -1454,6 +1690,16 @@ Create a bundle of PACKAGE.\n"))
                                            (process-file-arg opts 'postinst-file)
                                            #:triggers-file
                                            (process-file-arg opts 'triggers-file)))
+                                    ('rpm
+                                     (list #:relocatable? relocatable?
+                                           #:prein-file
+                                           (process-file-arg opts 'prein-file)
+                                           #:postin-file
+                                           (process-file-arg opts 'postin-file)
+                                           #:preun-file
+                                           (process-file-arg opts 'preun-file)
+                                           #:postun-file
+                                           (process-file-arg opts 'postun-file)))
                                     (_ '())))
                    (target      (assoc-ref opts 'target))
                    (bootstrap?  (assoc-ref opts 'bootstrap?))
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 2f774621bb..cb58f56d5a 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2013, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
@@ -323,7 +323,7 @@ of manifest entries, in the context of PROFILE."
          (settings (search-path-environment-variables entries (list profile)
                                                       #:kind 'prefix)))
     (unless (null? settings)
-      (display-hint (format #f (G_ "Consider setting the necessary environment
+      (display-hint (G_ "Consider setting the necessary environment
 variables by running:
 
 @example
@@ -332,7 +332,7 @@ GUIX_PROFILE=\"~a\"
 @end example
 
 Alternately, see @command{guix package --search-paths -p ~s}.")
-                            profile profile)))))
+                    profile profile))))
 
 
 ;;;
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index 7b6c58dbc3..2be8de3b9c 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2015, 2017-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2015, 2017-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -469,9 +469,9 @@ true, display what would be built without actually building it."
             ;; Is the 'guix' command previously in $PATH the same as the new
             ;; one?  If the answer is "no", then suggest 'hash guix'.
             (unless (member guix-command new)
-              (display-hint (format #f (G_ "After setting @code{PATH}, run
+              (display-hint (G_ "After setting @code{PATH}, run
 @command{hash guix} to make sure your shell refers to @file{~a}.")
-                                    (first new))))
+                            (first new)))
             (return #f))
           (return #f)))))
 
diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm
index 787c63d48e..0b978ae35f 100644
--- a/guix/scripts/repl.scm
+++ b/guix/scripts/repl.scm
@@ -211,6 +211,7 @@ call THUNK."
               ((guile)
                (save-module-excursion
                 (lambda ()
+                  (current-profile) ;populate (%package-module-path); see above
                   (set-user-module)
                   ;; Do not exit repl on SIGINT.
                   ((@@ (ice-9 top-repl) call-with-sigint)
diff --git a/guix/scripts/shell.scm b/guix/scripts/shell.scm
index 64b5c2e8e9..92bbfb04d0 100644
--- a/guix/scripts/shell.scm
+++ b/guix/scripts/shell.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2021-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021-2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -305,16 +305,16 @@ Return the modified OPTS."
                (report-error
                 (G_ "not loading '~a' because not authorized to do so~%")
                 file)
-               (display-hint (format #f (G_ "To allow automatic loading of
+               (display-hint (G_ "To allow automatic loading of
 @file{~a} when running @command{guix shell}, you must explicitly authorize its
 directory, like so:
 
 @example
 echo ~a >> ~a
 @end example\n")
-                                     file
-                                     (dirname file)
-                                     (authorized-directory-file)))
+                             file
+                             (dirname file)
+                             (authorized-directory-file))
                (exit 1)))))))
 
 
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 6fd915cb5e..c0bc295c00 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -633,9 +633,9 @@ any, are available.  Raise an error if they're not."
                              (G_ "device '~a' not found: ~a~%")
                              device (strerror errno))
                       (unless (string-prefix? "/" device)
-                        (display-hint (format #f (G_ "If '~a' is a file system
+                        (display-hint (G_ "If '~a' is a file system
 label, write @code{(file-system-label ~s)} in your @code{device} field.")
-                                              device device)))))))
+                                      device device))))))
               literal)
     (for-each (lambda (fs)
                 (let ((label (file-system-label->string
@@ -1417,8 +1417,7 @@ argument list and OPTS is the option alist."
            (let ((hint (string-closest arg actions #:threshold 3)))
              (report-error (G_ "~a: unknown action~%") arg)
              (when hint
-               (display-hint
-                (format #f (G_ "Did you mean @code{~a}?~%") hint)))
+               (display-hint (G_ "Did you mean @code{~a}?~%") hint))
              (exit 1)))))
 
   (define (match-pair car)
diff --git a/guix/scripts/system/edit.scm b/guix/scripts/system/edit.scm
index d966ee0aaa..0afb071650 100644
--- a/guix/scripts/system/edit.scm
+++ b/guix/scripts/system/edit.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,8 +39,8 @@
                                         '()))
          (closest   (string-closest type available)))
     (unless (or (not closest) (string=? closest type))
-      (display-hint (format #f (G_ "Did you mean @code{~a}?~%")
-                            closest))))
+      (display-hint (G_ "Did you mean @code{~a}?~%")
+                    closest)))
 
   (exit 1))
 
diff --git a/guix/ssh.scm b/guix/ssh.scm
index 1b825a2573..5b35f664d9 100644
--- a/guix/ssh.scm
+++ b/guix/ssh.scm
@@ -477,7 +477,7 @@ Use SIZES to determine the size of ITEM, which is about to be sent."
   (define (display-bar %)
     (erase-current-line port)
     (format port "~3@a% ~a"
-            (inexact->exact (round (* 100. (/ sent total))))
+            (inexact->exact (round %))
             (progress-bar % (- (max (current-terminal-columns) 5) 5)))
     (force-output port))
 
diff --git a/guix/status.scm b/guix/status.scm
index 2c69f49fb5..a192cd789a 100644
--- a/guix/status.scm
+++ b/guix/status.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -22,6 +22,7 @@
   #:use-module (guix i18n)
   #:use-module (guix colors)
   #:use-module (guix progress)
+  #:autoload   (guix ui) (display-hint)
   #:autoload   (guix build syscalls) (terminal-columns)
   #:autoload   (guix build download) (nar-uri-abbreviation)
   #:use-module (guix store)
@@ -526,6 +527,21 @@ substitutes being downloaded."
      (erase-current-line*)                      ;erase spinner or progress bar
      (format port (failure (G_ "build of ~a failed")) drv)
      (newline port)
+     (let ((properties (and=> (false-if-exception
+                               (read-derivation-from-file drv))
+                              derivation-properties)))
+       (when (and (pair? properties)
+                  (eq? (assq-ref properties 'type) 'profile-hook)
+                  (eq? (assq-ref properties 'hook) 'package-cache))
+         (display-hint (G_ "This usually indicates a bug in one of
+the channels you are pulling from, or some incompatibility among them.  You
+can check the build log and report the issue to the channel developers.
+
+The channels you are pulling from are: ~a.")
+                       (string-join
+                        (map symbol->string
+                             (or (assq-ref properties 'channels)
+                                 '(guix)))))))
      (match (derivation-log-file drv)
        (#f
         (format port (failure (G_ "Could not find build log for '~a'."))
diff --git a/guix/ui.scm b/guix/ui.scm
index 9f81ff3b8e..b6c3bd04ba 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -296,9 +296,22 @@ VARIABLE and return it, or #f if none was found."
 
 (define %hint-color (color BOLD CYAN))
 
-(define* (display-hint message #:optional (port (current-error-port)))
-  "Display MESSAGE, a l10n message possibly containing Texinfo markup, to
-PORT."
+(define (texinfo-quote str)
+  "Quote at signs and braces in STR to obtain its Texinfo represention."
+  (list->string
+   (string-fold-right (lambda (chr result)
+                        (if (memq chr '(#\@ #\{ #\}))
+                            (cons* #\@ chr result)
+                            (cons chr result)))
+                      '()
+                      str)))
+
+(define* (display-hint message
+                       #:key (port (current-error-port))
+                       #:rest arguments)
+  "Display MESSAGE, a l10n message possibly containing Texinfo markup and
+'format' escape, to PORT.  ARGUMENTS is a (possibly empty) list of strings or
+other objects that must match the 'format' escapes in MESSAGE."
   (define colorize
     (if (color-output? port)
         (lambda (str)
@@ -309,7 +322,16 @@ PORT."
   (display
    ;; XXX: We should arrange so that the initial indent is wider.
    (parameterize ((%text-width (max 15 (- (terminal-columns) 5))))
-     (texi->plain-text message))
+     (texi->plain-text (match arguments
+                         (() message)
+                         (_  (apply format #f message
+                                    (map (match-lambda
+                                           ((? string? str)
+                                            (texinfo-quote str))
+                                           (obj
+                                            (texinfo-quote
+                                             (object->string obj))))
+                                         arguments))))))
    port))
 
 (define* (report-unbound-variable-error args #:key frame)
@@ -324,8 +346,8 @@ arguments."
        (#f
         (display-hint (G_ "Did you forget a @code{use-modules} form?")))
        ((? module? module)
-        (display-hint (format #f (G_ "Did you forget @code{(use-modules ~a)}?")
-                              (module-name module))))))))
+        (display-hint (G_ "Did you forget @code{(use-modules ~a)}?")
+                      (module-name module)))))))
 
 (define (check-module-matches-file module file)
   "Check whether FILE starts with 'define-module MODULE' and print a hint if
@@ -334,10 +356,10 @@ it doesn't."
   ;; definitions and try loading them with 'guix build -L …', so help them
   ;; diagnose the problem.
   (define (hint)
-    (display-hint (format #f (G_ "File @file{~a} should probably start with:
+    (display-hint (G_ "File @file{~a} should probably start with:
 
 @example\n(define-module ~a)\n@end example")
-                          file module)))
+                  file module))
 
   (catch 'system-error
     (lambda ()
@@ -663,12 +685,12 @@ interpreted."
          (name1  (manifest-entry-name (top-most-entry first)))
          (name2  (manifest-entry-name (top-most-entry second))))
     (if (string=? name1 name2)
-        (display-hint (format #f (G_ "You cannot have two different versions
+        (display-hint (G_ "You cannot have two different versions
 or variants of @code{~a} in the same profile.")
-                              name1))
-        (display-hint (format #f (G_ "Try upgrading both @code{~a} and @code{~a},
+                      name1)
+        (display-hint (G_ "Try upgrading both @code{~a} and @code{~a},
 or remove one of them from the profile.")
-                              name1 name2)))))
+                      name1 name2))))
 
 ;; On Guile 3.0, in 'call-with-error-handling' we need to re-raise.  To
 ;; preserve useful backtraces in case of unhandled errors, we want that to
@@ -2226,8 +2248,7 @@ found."
              (format (current-error-port)
                      (G_ "guix: ~a: command not found~%") command)
              (when hint
-               (display-hint (format #f (G_ "Did you mean @code{~a}?")
-                                     hint)))
+               (display-hint (G_ "Did you mean @code{~a}?") hint))
              (show-guix-usage)))))
       (file
        (load file)
diff --git a/guix/utils.scm b/guix/utils.scm
index 1a1cf673b8..f47c565ab5 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
+;;; Copyright © 2023 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -104,6 +105,7 @@
             target-riscv64?
             target-mips64el?
             target-64bit?
+            target-little-endian?
             ar-for-target
             as-for-target
             cc-for-target
@@ -743,6 +745,12 @@ architecture (x86_64)?"
   (any (cut string-prefix? <> system) '("x86_64" "aarch64" "mips64"
                                         "powerpc64" "riscv64")))
 
+(define* (target-little-endian? #:optional (target (or (%current-target-system)
+                                                       (%current-system))))
+  "Is the architecture of TARGET little-endian?"
+  ;; At least in Guix.  Aarch64 and 32-bit arm have a big-endian mode as well.
+  (not (target-ppc32? target)))
+
 (define* (ar-for-target #:optional (target (%current-target-system)))
   (if target
       (string-append target "-ar")
diff --git a/po/packages/POTFILES.in b/po/packages/POTFILES.in
index 32d34d6456..4775986c57 100644
--- a/po/packages/POTFILES.in
+++ b/po/packages/POTFILES.in
@@ -25,7 +25,6 @@ gnu/packages/image.scm
 gnu/packages/image-viewers.scm
 gnu/packages/inkscape.scm
 gnu/packages/jemalloc.scm
-gnu/packages/key-mon.scm
 gnu/packages/less.scm
 gnu/packages/lesstif.scm
 gnu/packages/libreoffice.scm
diff --git a/tests/containers.scm b/tests/containers.scm
index 608902c41a..70d5ba2d30 100644
--- a/tests/containers.scm
+++ b/tests/containers.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2019, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,7 +31,8 @@
   #:use-module (guix tests)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-64)
-  #:use-module (ice-9 match))
+  #:use-module (ice-9 match)
+  #:use-module ((ice-9 ftw) #:select (scandir)))
 
 (define (assert-exit x)
   (primitive-exit (if x 0 1)))
@@ -176,21 +177,11 @@
                   (close start-in)
                   (container-excursion pid
                     (lambda ()
-                      ;; Fork again so that the pid is within the context of
-                      ;; the joined pid namespace instead of the original pid
-                      ;; namespace.
-                      (match (primitive-fork)
-                        (0
-                         ;; Check that all of the namespace identifiers are
-                         ;; the same as the container process.
-                         (assert-exit
-                          (equal? container-namespaces
-                                  (namespaces (getpid)))))
-                        (fork-pid
-                         (match (waitpid fork-pid)
-                           ((_ . status)
-                            (primitive-exit
-                             (status:exit-val status)))))))))))
+                      ;; Check that all of the namespace identifiers are
+                      ;; the same as the container process.
+                      (assert-exit
+                       (equal? container-namespaces
+                               (namespaces (getpid)))))))))
           (close end-in)
           ;; Stop the container.
           (write 'done end-out)
@@ -203,9 +194,10 @@
   42
   ;; The parent and child are in the same namespaces.  'container-excursion'
   ;; should notice that and avoid calling 'setns' since that would fail.
-  (container-excursion (getpid)
-    (lambda ()
-      (primitive-exit 42))))
+  (status:exit-val
+   (container-excursion (getpid)
+     (lambda ()
+       (primitive-exit 42)))))
 
 (skip-if-unsupported)
 (test-assert "container-excursion*"
@@ -236,6 +228,27 @@
       (* 6 7))))
 
 (skip-if-unsupported)
+(test-equal "container-excursion*, /proc"
+  '("1" "2")
+  (call-with-temporary-directory
+   (lambda (root)
+     (let* ((pid    (run-container root '()
+                                   %namespaces 1
+                                   (lambda ()
+                                     (sleep 100))))
+            (result (container-excursion* pid
+                      (lambda ()
+                        ;; We expect to see exactly two processes in this
+                        ;; namespace.
+                        (scandir "/proc"
+                                 (lambda (file)
+                                   (char-set-contains?
+                                    char-set:digit
+                                    (string-ref file 0))))))))
+       (kill pid SIGKILL)
+       result))))
+
+(skip-if-unsupported)
 (test-equal "eval/container, exit status"
   42
   (let* ((store  (open-connection-for-tests))
diff --git a/tests/guix-pack-relocatable.sh b/tests/guix-pack-relocatable.sh
index b90bc7f891..46120c9ee6 100644
--- a/tests/guix-pack-relocatable.sh
+++ b/tests/guix-pack-relocatable.sh
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2018, 2019, 2020, 2023 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2020 Eric Bavier <bavier@posteo.net>
 #
 # This file is part of GNU Guix.
@@ -82,6 +82,7 @@ then
     tarball="`guix pack -R -S /Bin=bin sed`"
     (cd "$test_directory"; tar xvf "$tarball")
 
+    chmod +w "$test_directory"
     run_without_store "$test_directory/Bin/sed" --version > "$test_directory/output"
     grep 'GNU sed' "$test_directory/output"
 
@@ -104,6 +105,7 @@ case "`uname -m`" in
 	tarball="`guix pack -RR -S /Bin=bin sed`"
 	tar tvf "$tarball" | grep /bin/proot
 	(cd "$test_directory"; tar xf "$tarball")
+	chmod +w "$test_directory"
 	run_without_store GUIX_EXECUTION_ENGINE="proot" \
 	"$test_directory/Bin/sed" --version > "$test_directory/output"
 	grep 'GNU sed' "$test_directory/output"
@@ -195,6 +197,7 @@ EOF
     # Run '/bin/daemon', which forks, then wait for the child, send it SIGHUP
     # so that it dumps its view of the store, and make sure the child and
     # parent both see the same store contents.
+    chmod +w "$test_directory"
     (cd "$test_directory"; run_without_store ./bin/daemon)
     wait_for_file "$test_directory/pid"
     kill -HUP $(cat "$test_directory/pid")
@@ -241,6 +244,7 @@ cat >"$test_directory/manifest.scm" <<'EOF'
 EOF
 tarball="`guix pack -RR -S /opt= -m $test_directory/manifest.scm`"
 (cd "$test_directory"; tar xvf "$tarball")
+chmod +w "$test_directory"
 ( export GUIX_PROFILE=$test_directory/opt
   . $GUIX_PROFILE/etc/profile
   run_without_store "$test_directory/opt/bin/hello" > "$test_directory/output" )
diff --git a/tests/guix-pack.sh b/tests/guix-pack.sh
index 6fc9e3723b..a13e0ededf 100644
--- a/tests/guix-pack.sh
+++ b/tests/guix-pack.sh
@@ -1,6 +1,6 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
-# Copyright © 2018, 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2018, 2019, 2020, 2022, 2023 Ludovic Courtès <ludo@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -114,7 +114,8 @@ guix pack --dry-run --bootstrap --target=arm-linux-gnueabihf coreutils
 guix pack -R --dry-run --bootstrap -S /mybin=bin guile-bootstrap
 
 # Make sure package transformation options are honored.
-mkdir -p "$test_directory"
+chmod -Rf +w "$test_directory"; rm -r "$test_directory"
+mkdir -p "$test_directory" -m 755
 drv1="`guix pack --no-grafts -n guile 2>&1 | grep pack.*\.drv`"
 drv2="`guix pack --no-grafts -n --with-source=guile=$test_directory guile 2>&1 | grep pack.*\.drv`"
 test -n "$drv1"
diff --git a/tests/hackage.scm b/tests/hackage.scm
index ad2ee4b7f9..8eea818ebd 100644
--- a/tests/hackage.scm
+++ b/tests/hackage.scm
@@ -201,6 +201,7 @@ library
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
+    ('properties '(quote ((upstream-name . "foo"))))
     ('inputs ('list 'ghc-http))
     ('home-page "http://test.org")
     ('synopsis (? string?))
@@ -241,6 +242,7 @@ library
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
+    ('properties '(quote ((upstream-name . "foo"))))
     ('inputs ('list 'ghc-b 'ghc-http))
     ('native-inputs ('list 'ghc-haskell-gi))
     ('home-page "http://test.org")
@@ -471,6 +473,7 @@ library
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
+    ('properties '(quote ((upstream-name . "foo"))))
     ('inputs ('list 'ghc-c))
     ('home-page "http://test.org")
     ('synopsis (? string?))
@@ -520,6 +523,7 @@ executable cabal
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
+    ('properties '(quote ((upstream-name . "foo"))))
     ('inputs ('list 'ghc-http))
     ('arguments
      ('quasiquote
@@ -610,6 +614,7 @@ executable cabal
         ('base32
          (? string? hash)))))
     ('build-system 'haskell-build-system)
+    ('properties '(quote ((upstream-name . "foo"))))
     ('inputs ('list 'ghc-http))
     ('home-page "http://test.org")
     ('synopsis (? string?))
diff --git a/tests/pack.scm b/tests/pack.scm
index a4c388d93e..87187bb62c 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; 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>
+;;; Copyright © 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,13 +28,16 @@
   #:use-module (guix tests)
   #:use-module (guix gexp)
   #:use-module (guix modules)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module ((gnu packages base) #:select (glibc-utf8-locales))
   #:use-module (gnu packages bootstrap)
+  #:use-module ((gnu packages package-management) #:select (rpm))
   #:use-module ((gnu packages compression) #:select (squashfs-tools))
   #:use-module ((gnu packages debian) #:select (dpkg))
   #:use-module ((gnu packages guile) #:select (guile-sqlite3))
   #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
+  #:use-module ((gnu packages linux) #:select (fakeroot))
   #:use-module (srfi srfi-64))
 
 (define %store
@@ -59,6 +62,17 @@
 
 (define %ar-bootstrap %bootstrap-binutils)
 
+;;; This is a variant of the RPM package configured so that its database can
+;;; be created on a writable location readily available inside the build
+;;; container ("/tmp").
+(define rpm-for-tests
+  (package
+    (inherit rpm)
+    (arguments (substitute-keyword-arguments (package-arguments rpm)
+                 ((#:configure-flags flags '())
+                  #~(cons "--localstatedir=/tmp"
+                          (delete "--localstatedir=/var" #$flags)))))))
+
 
 (test-begin "pack")
 
@@ -74,44 +88,43 @@
                                                       -> "bin/guile"))
                                         #:compressor %gzip-compressor
                                         #:archiver %tar-bootstrap))
-       (check   (gexp->derivation
-                 "check-tarball"
-                 (with-imported-modules '((guix build utils))
-                   #~(begin
-                       (use-modules (guix build utils)
-                                    (srfi srfi-1))
-
-                       (define store
-                         ;; The unpacked store.
-                         (string-append "." (%store-directory) "/"))
-
-                       (define (canonical? file)
-                         ;; Return #t if FILE is read-only and its mtime is 1.
-                         (let ((st (lstat file)))
-                           (or (not (string-prefix? store file))
-                               (eq? 'symlink (stat:type st))
-                               (and (= 1 (stat:mtime st))
-                                    (zero? (logand #o222
-                                                   (stat:mode st)))))))
-
-                       (define bin
-                         (string-append "." #$profile "/bin"))
-
-                       (setenv "PATH"
-                               (string-append #$%tar-bootstrap "/bin"))
-                       (system* "tar" "xvf" #$tarball)
-                       (mkdir #$output)
-                       (exit
-                        (and (file-exists? (string-append bin "/guile"))
-                             (file-exists? store)
-                             (every canonical?
-                                    (find-files "." (const #t)
-                                                #:directories? #t))
-                             (string=? (string-append #$%bootstrap-guile "/bin")
-                                       (readlink bin))
-                             (string=? (string-append ".." #$profile
-                                                      "/bin/guile")
-                                       (readlink "bin/Guile")))))))))
+       (check   (gexp->derivation "check-tarball"
+                  (with-imported-modules '((guix build utils))
+                    #~(begin
+                        (use-modules (guix build utils)
+                                     (srfi srfi-1))
+
+                        (define store
+                          ;; The unpacked store.
+                          (string-append "." (%store-directory) "/"))
+
+                        (define (canonical? file)
+                          ;; Return #t if FILE is read-only and its mtime is 1.
+                          (let ((st (lstat file)))
+                            (or (not (string-prefix? store file))
+                                (eq? 'symlink (stat:type st))
+                                (and (= 1 (stat:mtime st))
+                                     (zero? (logand #o222
+                                                    (stat:mode st)))))))
+
+                        (define bin
+                          (string-append "." #$profile "/bin"))
+
+                        (setenv "PATH"
+                                (string-append #$%tar-bootstrap "/bin"))
+                        (system* "tar" "xvf" #$tarball)
+                        (mkdir #$output)
+                        (exit
+                         (and (file-exists? (string-append bin "/guile"))
+                              (file-exists? store)
+                              (every canonical?
+                                     (find-files "." (const #t)
+                                                 #:directories? #t))
+                              (string=? (string-append #$%bootstrap-guile "/bin")
+                                        (readlink bin))
+                              (string=? (string-append ".." #$profile
+                                                       "/bin/guile")
+                                        (readlink "bin/Guile")))))))))
     (built-derivations (list check))))
 
 ;; The following test needs guile-sqlite3, libgcrypt, etc. as a consequence of
@@ -125,23 +138,22 @@
   (test-assertm "self-contained-tarball + localstatedir" store
     (mlet* %store-monad
         ((guile   (set-guile-for-build (default-guile)))
-         (profile (profile-derivation (packages->manifest
-                                       (list %bootstrap-guile))
-                                      #:hooks '()
-                                      #:locales? #f))
+         (profile -> (profile
+                      (content (packages->manifest (list %bootstrap-guile)))
+                      (hooks '())
+                      (locales? #f)))
          (tarball (self-contained-tarball "tar-pack" profile
                                           #:localstatedir? #t))
-         (check   (gexp->derivation
-                   "check-tarball"
-                   #~(let ((bin (string-append "." #$profile "/bin")))
-                       (setenv "PATH"
-                               (string-append #$%tar-bootstrap "/bin"))
-                       (system* "tar" "xvf" #$tarball)
-                       (mkdir #$output)
-                       (exit
-                        (and (file-exists? "var/guix/db/db.sqlite")
-                             (string=? (string-append #$%bootstrap-guile "/bin")
-                                       (readlink bin))))))))
+         (check   (gexp->derivation "check-tarball"
+                    #~(let ((bin (string-append "." #$profile "/bin")))
+                        (setenv "PATH"
+                                (string-append #$%tar-bootstrap "/bin"))
+                        (system* "tar" "xvf" #$tarball)
+                        (mkdir #$output)
+                        (exit
+                         (and (file-exists? "var/guix/db/db.sqlite")
+                              (string=? (string-append #$%bootstrap-guile "/bin")
+                                        (readlink bin))))))))
       (built-derivations (list check))))
 
   (unless store (test-skip 1))
@@ -154,135 +166,132 @@
                      ("λ" regular (data "lambda")))))
          (tarball (self-contained-tarball "tar-pack" tree
                                           #:localstatedir? #t))
-         (check   (gexp->derivation
-                   "check-tarball"
-                   (with-extensions (list guile-sqlite3 guile-gcrypt)
-                     (with-imported-modules (source-module-closure
-                                             '((guix store database)))
-                       #~(begin
-                           (use-modules (guix store database)
-                                        (rnrs io ports)
-                                        (srfi srfi-1))
-
-                           (define (valid-file? basename data)
-                             (define file
-                               (string-append "./" #$tree "/" basename))
-
-                             (string=? (call-with-input-file (pk 'file file)
-                                         get-string-all)
-                                       data))
-
-                           (setenv "PATH"
-                                   (string-append #$%tar-bootstrap "/bin"))
-                           (system* "tar" "xvf" #$tarball)
-
-                           (sql-schema
-                            #$(local-file (search-path %load-path
-                                                       "guix/store/schema.sql")))
-                           (with-database "var/guix/db/db.sqlite" db
-                             ;; Make sure non-ASCII file names are properly
-                             ;; handled.
-                             (setenv "GUIX_LOCPATH"
-                                     #+(file-append glibc-utf8-locales
-                                                    "/lib/locale"))
-                             (setlocale LC_ALL "en_US.utf8")
-
-                             (mkdir #$output)
-                             (exit
-                              (and (every valid-file?
-                                          '("α" "λ")
-                                          '("alpha" "lambda"))
-                                   (integer? (path-id db #$tree)))))))))))
+         (check   (gexp->derivation "check-tarball"
+                    (with-extensions (list guile-sqlite3 guile-gcrypt)
+                      (with-imported-modules (source-module-closure
+                                              '((guix store database)))
+                        #~(begin
+                            (use-modules (guix store database)
+                                         (rnrs io ports)
+                                         (srfi srfi-1))
+
+                            (define (valid-file? basename data)
+                              (define file
+                                (string-append "./" #$tree "/" basename))
+
+                              (string=? (call-with-input-file (pk 'file file)
+                                          get-string-all)
+                                        data))
+
+                            (setenv "PATH"
+                                    (string-append #$%tar-bootstrap "/bin"))
+                            (system* "tar" "xvf" #$tarball)
+
+                            (sql-schema
+                             #$(local-file (search-path %load-path
+                                                        "guix/store/schema.sql")))
+                            (with-database "var/guix/db/db.sqlite" db
+                              ;; Make sure non-ASCII file names are properly
+                              ;; handled.
+                              (setenv "GUIX_LOCPATH"
+                                      #+(file-append glibc-utf8-locales
+                                                     "/lib/locale"))
+                              (setlocale LC_ALL "en_US.utf8")
+
+                              (mkdir #$output)
+                              (exit
+                               (and (every valid-file?
+                                           '("α" "λ")
+                                           '("alpha" "lambda"))
+                                    (integer? (path-id db #$tree)))))))))))
       (built-derivations (list check))))
 
   (unless store (test-skip 1))
   (test-assertm "docker-image + localstatedir" store
     (mlet* %store-monad
         ((guile   (set-guile-for-build (default-guile)))
-         (profile (profile-derivation (packages->manifest
-                                       (list %bootstrap-guile))
-                                      #:hooks '()
-                                      #:locales? #f))
+         (profile -> (profile
+                      (content (packages->manifest (list %bootstrap-guile)))
+                      (hooks '())
+                      (locales? #f)))
          (tarball (docker-image "docker-pack" profile
                                 #:symlinks '(("/bin/Guile" -> "bin/guile"))
                                 #:localstatedir? #t))
-         (check   (gexp->derivation
-                   "check-tarball"
-                   (with-imported-modules '((guix build utils))
-                     #~(begin
-                         (use-modules (guix build utils)
-                                      (ice-9 match))
-
-                         (define bin
-                           (string-append "." #$profile "/bin"))
-
-                         (setenv "PATH" (string-append #$%tar-bootstrap "/bin"))
-                         (mkdir "base")
-                         (with-directory-excursion "base"
-                           (invoke "tar" "xvf" #$tarball))
-
-                         (match (find-files "base" "layer.tar")
-                           ((layer)
-                            (invoke "tar" "xvf" layer)))
-
-                         (when
-                          (and (file-exists? (string-append bin "/guile"))
-                               (file-exists? "var/guix/db/db.sqlite")
-                               (file-is-directory? "tmp")
-                               (string=? (string-append #$%bootstrap-guile "/bin")
-                                         (pk 'binlink (readlink bin)))
-                               (string=? (string-append #$profile "/bin/guile")
-                                         (pk 'guilelink (readlink "bin/Guile"))))
-                          (mkdir #$output)))))))
+         (check   (gexp->derivation "check-tarball"
+                    (with-imported-modules '((guix build utils))
+                      #~(begin
+                          (use-modules (guix build utils)
+                                       (ice-9 match))
+
+                          (define bin
+                            (string-append "." #$profile "/bin"))
+
+                          (setenv "PATH" (string-append #$%tar-bootstrap "/bin"))
+                          (mkdir "base")
+                          (with-directory-excursion "base"
+                            (invoke "tar" "xvf" #$tarball))
+
+                          (match (find-files "base" "layer.tar")
+                            ((layer)
+                             (invoke "tar" "xvf" layer)))
+
+                          (when
+                              (and (file-exists? (string-append bin "/guile"))
+                                   (file-exists? "var/guix/db/db.sqlite")
+                                   (file-is-directory? "tmp")
+                                   (string=? (string-append #$%bootstrap-guile "/bin")
+                                             (pk 'binlink (readlink bin)))
+                                   (string=? (string-append #$profile "/bin/guile")
+                                             (pk 'guilelink (readlink "bin/Guile"))))
+                            (mkdir #$output)))))))
       (built-derivations (list check))))
 
   (unless store (test-skip 1))
   (test-assertm "squashfs-image + localstatedir" store
     (mlet* %store-monad
         ((guile   (set-guile-for-build (default-guile)))
-         (profile (profile-derivation (packages->manifest
-                                       (list %bootstrap-guile))
-                                      #:hooks '()
-                                      #:locales? #f))
+         (profile -> (profile
+                      (content (packages->manifest (list %bootstrap-guile)))
+                      (hooks '())
+                      (locales? #f)))
          (image   (squashfs-image "squashfs-pack" profile
                                   #:symlinks '(("/bin" -> "bin"))
                                   #:localstatedir? #t))
-         (check   (gexp->derivation
-                   "check-tarball"
-                   (with-imported-modules '((guix build utils))
-                     #~(begin
-                         (use-modules (guix build utils)
-                                      (ice-9 match))
-
-                         (define bin
-                           (string-append "." #$profile "/bin"))
-
-                         (setenv "PATH"
-                                 (string-append #$squashfs-tools "/bin"))
-                         (invoke "unsquashfs" #$image)
-                         (with-directory-excursion "squashfs-root"
-                           (when (and (file-exists? (string-append bin
-                                                                   "/guile"))
-                                      (file-exists? "var/guix/db/db.sqlite")
-                                      (string=? (string-append #$%bootstrap-guile "/bin")
-                                                (pk 'binlink (readlink bin)))
-
-                                      ;; This is a relative symlink target.
-                                      (string=? (string-drop
-                                                 (string-append #$profile "/bin")
-                                                 1)
-                                                (pk 'guilelink (readlink "bin"))))
-                             (mkdir #$output))))))))
+         (check   (gexp->derivation "check-tarball"
+                    (with-imported-modules '((guix build utils))
+                      #~(begin
+                          (use-modules (guix build utils)
+                                       (ice-9 match))
+
+                          (define bin
+                            (string-append "." #$profile "/bin"))
+
+                          (setenv "PATH"
+                                  (string-append #$squashfs-tools "/bin"))
+                          (invoke "unsquashfs" #$image)
+                          (with-directory-excursion "squashfs-root"
+                            (when (and (file-exists? (string-append bin
+                                                                    "/guile"))
+                                       (file-exists? "var/guix/db/db.sqlite")
+                                       (string=? (string-append #$%bootstrap-guile "/bin")
+                                                 (pk 'binlink (readlink bin)))
+
+                                       ;; This is a relative symlink target.
+                                       (string=? (string-drop
+                                                  (string-append #$profile "/bin")
+                                                  1)
+                                                 (pk 'guilelink (readlink "bin"))))
+                              (mkdir #$output))))))))
       (built-derivations (list check))))
 
   (unless store (test-skip 1))
   (test-assertm "deb archive with symlinks and control files" store
     (mlet* %store-monad
         ((guile   (set-guile-for-build (default-guile)))
-         (profile (profile-derivation (packages->manifest
-                                       (list %bootstrap-guile))
-                                      #:hooks '()
-                                      #:locales? #f))
+         (profile -> (profile
+                      (content (packages->manifest (list %bootstrap-guile)))
+                      (hooks '())
+                      (locales? #f)))
          (deb (debian-archive
                "deb-pack" profile
                #:compressor %gzip-compressor
@@ -361,6 +370,47 @@
                   (assert (file-exists? "triggers"))
 
                   (mkdir #$output))))))
+      (built-derivations (list check))))
+
+  (unless store (test-skip 1))
+  (test-assertm "rpm archive can be installed/uninstalled" store
+    (mlet* %store-monad
+        ((guile   (set-guile-for-build (default-guile)))
+         (profile -> (profile
+                      (content (packages->manifest (list %bootstrap-guile)))
+                      (hooks '())
+                      (locales? #f)))
+         (rpm-pack (rpm-archive "rpm-pack" profile
+                                #:compressor %gzip-compressor
+                                #:symlinks '(("/bin/guile" -> "bin/guile"))
+                                #:extra-options '(#:relocatable? #t)))
+         (check
+          (gexp->derivation "check-rpm-pack"
+            (with-imported-modules (source-module-closure
+                                    '((guix build utils)))
+              #~(begin
+                  (use-modules (guix build utils))
+
+                  (define fakeroot #+(file-append fakeroot "/bin/fakeroot"))
+                  (define rpm #+(file-append rpm-for-tests "/bin/rpm"))
+                  (mkdir-p "/tmp/lib/rpm")
+
+                  ;; Install the RPM package.  This causes RPM to validate the
+                  ;; signatures, header as well as the file digests, which
+                  ;; makes it a rather thorough test.
+                  (mkdir "test-prefix")
+                  (invoke fakeroot rpm "--install"
+                          (string-append "--prefix=" (getcwd) "/test-prefix")
+                          #$rpm-pack)
+
+                  ;; Invoke the installed Guile command.
+                  (invoke "./test-prefix/bin/guile" "--version")
+
+                  ;; Uninstall the RPM package.
+                  (invoke fakeroot rpm "--erase" "guile-bootstrap")
+
+                  ;; Required so the above is run.
+                  (mkdir #$output))))))
       (built-derivations (list check)))))
 
 (test-end)
diff --git a/tests/rpm.scm b/tests/rpm.scm
new file mode 100644
index 0000000000..f40b36fe60
--- /dev/null
+++ b/tests/rpm.scm
@@ -0,0 +1,86 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-rpm)
+  #:use-module (guix rpm)
+  #:use-module (rnrs bytevectors)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-64)
+  #:use-module (srfi srfi-71))
+
+;; For white-box testing.
+(define-syntax-rule (expose-internal name)
+  (define name (@@ (guix rpm) name)))
+
+(expose-internal RPMTAG_ARCH)
+(expose-internal RPMTAG_LICENSE)
+(expose-internal RPMTAG_NAME)
+(expose-internal RPMTAG_OS)
+(expose-internal RPMTAG_RELEASE)
+(expose-internal RPMTAG_SUMMARY)
+(expose-internal RPMTAG_VERSION)
+(expose-internal header-entry-count)
+(expose-internal header-entry-tag)
+(expose-internal header-entry-value)
+(expose-internal header-entry?)
+(expose-internal make-header)
+(expose-internal make-header-entry)
+(expose-internal make-header-index+data)
+
+(test-begin "rpm")
+
+(test-equal "lead must be 96 bytes long"
+  96
+  (length (generate-lead "hello-2.12.1")))
+
+(define header-entries
+  (list (make-header-entry RPMTAG_NAME 1 "hello")
+        (make-header-entry RPMTAG_VERSION 1 "2.12.1")
+        (make-header-entry RPMTAG_RELEASE 1 "0")
+        (make-header-entry RPMTAG_SUMMARY 1
+                           "Hello, GNU world: An example GNU package")
+        (make-header-entry RPMTAG_LICENSE 1 "GPL 3 or later")
+        (make-header-entry RPMTAG_OS 1 "Linux")
+        (make-header-entry RPMTAG_ARCH 1 "x86_64")))
+
+(define expected-header-index-length
+  (* 16 (length header-entries)))       ;16 bytes per index entry
+
+(define expected-header-data-length
+  (+ (length header-entries)            ;to account for null bytes
+     (fold + 0 (map (compose string-length (cut header-entry-value <>))
+                    header-entries))))
+
+(let ((index data (make-header-index+data header-entries)))
+  (test-equal "header index"
+    expected-header-index-length
+    (length index))
+
+  ;; This test depends on the fact that only STRING entries are used, and that
+  ;; they are composed of single byte characters and the delimiting null byte.
+  (test-equal "header data"
+    expected-header-data-length
+    (length data)))
+
+(test-equal "complete header section"
+  (+ 16                                 ;leading magic + count bytes
+     expected-header-index-length expected-header-data-length)
+  (length (make-header header-entries)))
+
+(test-end)