summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2020-02-03 15:35:51 +0100
committerMarius Bakke <mbakke@fastmail.com>2020-02-03 15:35:51 +0100
commit0a83339bb1429332ee889e9a976aa214ae2ac0db (patch)
tree9c3d2bcbdba2c670a5f8f98d3557f0444c357327
parent20fe3cd761c286a27236d8fced4152a0ccdc547d (diff)
parent75385105348066201ef898b934917eeb6ceab87a (diff)
downloadguix-0a83339bb1429332ee889e9a976aa214ae2ac0db.tar.gz
Merge branch 'master' into staging
-rw-r--r--Makefile.am1
-rw-r--r--doc/guix.texi69
-rw-r--r--gnu/bootloader/u-boot.scm7
-rw-r--r--gnu/ci.scm3
-rw-r--r--gnu/local.mk10
-rw-r--r--gnu/packages/admin.scm4
-rw-r--r--gnu/packages/aspell.scm9
-rw-r--r--gnu/packages/bdw-gc.scm14
-rw-r--r--gnu/packages/bootloaders.scm15
-rw-r--r--gnu/packages/check.scm4
-rw-r--r--gnu/packages/commencement.scm4
-rw-r--r--gnu/packages/diffoscope.scm4
-rw-r--r--gnu/packages/disk.scm31
-rw-r--r--gnu/packages/education.scm130
-rw-r--r--gnu/packages/emacs-xyz.scm157
-rw-r--r--gnu/packages/emulators.scm9
-rw-r--r--gnu/packages/file-systems.scm2
-rw-r--r--gnu/packages/firmware.scm63
-rw-r--r--gnu/packages/game-development.scm17
-rw-r--r--gnu/packages/gdb.scm22
-rw-r--r--gnu/packages/gimp.scm1
-rw-r--r--gnu/packages/gnome.scm8
-rw-r--r--gnu/packages/golang.scm4
-rw-r--r--gnu/packages/haskell-web.scm63
-rw-r--r--gnu/packages/hurd.scm113
-rw-r--r--gnu/packages/imagemagick.scm5
-rw-r--r--gnu/packages/linux.scm160
-rw-r--r--gnu/packages/lisp-xyz.scm334
-rw-r--r--gnu/packages/mail.scm66
-rw-r--r--gnu/packages/maths.scm15
-rw-r--r--gnu/packages/messaging.scm8
-rw-r--r--gnu/packages/networking.scm6
-rw-r--r--gnu/packages/openldap.scm30
-rw-r--r--gnu/packages/patches/opensmtpd-fix-crash.patch44
-rw-r--r--gnu/packages/patches/sdl-pango-api_additions.patch128
-rw-r--r--gnu/packages/patches/sdl-pango-blit_overflow.patch32
-rw-r--r--gnu/packages/patches/sdl-pango-fillrect_crash.patch15
-rw-r--r--gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch20
-rw-r--r--gnu/packages/patches/sdl-pango-matrix_declarations.patch131
-rw-r--r--gnu/packages/patches/sdl-pango-sans-serif.patch13
-rw-r--r--gnu/packages/patches/superlu-dist-fix-mpi-deprecations.patch57
-rw-r--r--gnu/packages/patches/t4k-common-libpng16.patch26
-rw-r--r--gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch54
-rw-r--r--gnu/packages/python-compression.scm15
-rw-r--r--gnu/packages/rsync.scm6
-rw-r--r--gnu/packages/ruby.scm50
-rw-r--r--gnu/packages/samba.scm4
-rw-r--r--gnu/packages/scanner.scm6
-rw-r--r--gnu/packages/sdl.scm52
-rw-r--r--gnu/packages/sync.scm6
-rw-r--r--gnu/packages/tbb.scm4
-rw-r--r--gnu/packages/text-editors.scm17
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/video.scm105
-rw-r--r--gnu/packages/web.scm42
-rw-r--r--gnu/packages/xdisorg.scm104
-rw-r--r--gnu/services/getmail.scm2
-rw-r--r--gnu/services/linux.scm125
-rw-r--r--gnu/services/mail.scm10
-rw-r--r--gnu/services/pm.scm2
-rw-r--r--gnu/services/virtualization.scm12
-rw-r--r--gnu/tests/mail.scm5
-rw-r--r--tests/services/linux.scm57
63 files changed, 2076 insertions, 460 deletions
diff --git a/Makefile.am b/Makefile.am
index 7474b7f375..c6a2e6cf6c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -426,6 +426,7 @@ SCM_TESTS =					\
   tests/scripts-build.scm			\
   tests/search-paths.scm			\
   tests/services.scm				\
+  tests/services/linux.scm			\
   tests/sets.scm				\
   tests/size.scm				\
   tests/snix.scm				\
diff --git a/doc/guix.texi b/doc/guix.texi
index 8cc824b917..bd9d896c78 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -48,7 +48,7 @@ Copyright @copyright{} 2017 humanitiesNerd@*
 Copyright @copyright{} 2017 Christopher Allan Webber@*
 Copyright @copyright{} 2017, 2018, 2019 Marius Bakke@*
 Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@*
-Copyright @copyright{} 2017, 2019 Maxim Cournoyer@*
+Copyright @copyright{} 2017, 2019, 2020 Maxim Cournoyer@*
 Copyright @copyright{} 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice@*
 Copyright @copyright{} 2017 George Clemmer@*
 Copyright @copyright{} 2017 Andy Wingo@*
@@ -310,6 +310,7 @@ Services
 * Version Control Services::    Providing remote access to Git repositories.
 * Game Services::               Game servers.
 * PAM Mount Service::           Service to mount volumes when logging in.
+* Linux Services::              Services tied to the Linux kernel.
 * Miscellaneous Services::      Other services.
 
 Defining Services
@@ -12101,6 +12102,7 @@ declaration.
 * Game Services::               Game servers.
 * PAM Mount Service::           Service to mount volumes when logging in.
 * Guix Services::               Services relating specifically to Guix.
+* Linux Services::              Services tied to the Linux kernel.
 * Miscellaneous Services::      Other services.
 @end menu
 
@@ -25146,6 +25148,71 @@ list.
 @end table
 @end deftp
 
+@node Linux Services
+@subsubheading Linux Services
+
+@cindex oom
+@cindex out of memory killer
+@cindex earlyoom
+@cindex early out of memory daemon
+@subsection Early OOM Service
+
+@uref{https://github.com/rfjakob/earlyoom,Early OOM}, also known as
+Earlyoom, is a minimalist out of memory (OOM) daemon that runs in user
+space and provides a more responsive and configurable alternative to the
+in-kernel OOM killer.  It is useful to prevent the system from becoming
+unresponsive when it runs out of memory.
+
+@deffn {Scheme Variable} earlyoom-service-type
+The service type for running @command{earlyoom}, the Early OOM daemon.
+Its value must be a @code{earlyoom-configuration} object, described
+below.  The service can be instantiated in its default configuration
+with:
+
+@lisp
+(service earlyoom-service-type)
+@end lisp
+@end deffn
+
+@deftp {Data Type} earlyoom-configuration
+This is the configuration record for the @code{earlyoom-service-type}.
+
+@table @asis
+@item @code{earlyoom} (default: @var{earlyoom})
+The Earlyoom package to use.
+
+@item @code{minimum-available-memory} (default: @code{10})
+The threshold for the minimum @emph{available} memory, in percentages.
+
+@item @code{minimum-free-swap} (default: @code{10})
+The threshold for the minimum free swap memory, in percentages.
+
+@item @code{prefer-regexp} (default: @code{#f})
+A regular expression (as a string) to match the names of the processes
+that should be preferably killed.
+
+@item @code{avoid-regexp} (default: @code{#f})
+A regular expression (as a string) to match the names of the processes
+that should @emph{not} be killed.
+
+@item @code{memory-report-interval} (default: @code{0})
+The interval in seconds at which a memory report is printed.  It is
+disabled by default.
+
+@item @code{ignore-positive-oom-score-adj?} (default: @code{#f})
+A boolean indicating whether the positive adjustments set in
+@file{/proc/*/oom_score_adj}.
+
+@item @code{show-debug-messages?} (default: @code{#f})
+A boolean indicating whether debug messages should be printed.  The logs
+are saved at @file{/var/log/earlyoom.log}.
+
+@item @code{send-notification-command} (default: @code{#f})
+This can be used to provide a custom command used for sending
+notifications.
+@end table
+@end deftp
+
 
 @node Miscellaneous Services
 @subsection Miscellaneous Services
diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm
index 3e892c5475..6f41d0abe9 100644
--- a/gnu/bootloader/u-boot.scm
+++ b/gnu/bootloader/u-boot.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 David Craven <david@craven.ch>
 ;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
             u-boot-a20-olinuxino-micro-bootloader
             u-boot-bananapi-m2-ultra-bootloader
             u-boot-beaglebone-black-bootloader
+            u-boot-cubietruck-bootloader
             u-boot-firefly-rk3399-bootloader
             u-boot-mx6cuboxi-bootloader
             u-boot-nintendo-nes-classic-edition-bootloader
@@ -180,6 +182,11 @@
    (inherit u-boot-allwinner-bootloader)
    (package u-boot-bananapi-m2-ultra)))
 
+(define u-boot-cubietruck-bootloader
+  (bootloader
+    (inherit u-boot-allwinner-bootloader)
+    (package u-boot-cubietruck)))
+
 (define u-boot-firefly-rk3399-bootloader
   ;; SD and eMMC use the same format
   (bootloader
diff --git a/gnu/ci.scm b/gnu/ci.scm
index d6eb2d018f..89f499e25f 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
 ;;;
@@ -130,6 +130,7 @@ SYSTEM."
     "arm-linux-gnueabihf"
     "aarch64-linux-gnu"
     "powerpc-linux-gnu"
+    "riscv64-linux-gnu"
     "i586-pc-gnu"                                 ;aka. GNU/Hurd
     "i686-w64-mingw32"
     "x86_64-w64-mingw32"))
diff --git a/gnu/local.mk b/gnu/local.mk
index 98b7395598..125118bc55 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1243,7 +1243,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/openjdk-10-idlj-reproducibility.patch	\
   %D%/packages/patches/openmpi-mtl-priorities.patch		\
   %D%/packages/patches/openocd-nrf52.patch			\
-  %D%/packages/patches/opensmtpd-fix-crash.patch		\
   %D%/packages/patches/openssl-runpath.patch			\
   %D%/packages/patches/openssl-1.1-c-rehash-in.patch		\
   %D%/packages/patches/openssl-c-rehash-in.patch		\
@@ -1257,6 +1256,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/p7zip-CVE-2017-17969.patch		\
   %D%/packages/patches/p7zip-remove-unused-code.patch		\
   %D%/packages/patches/pam-mount-luks2-support.patch		\
+  %D%/packages/patches/sdl-pango-api_additions.patch		\
+  %D%/packages/patches/sdl-pango-blit_overflow.patch		\
+  %D%/packages/patches/sdl-pango-fillrect_crash.patch		\
+  %D%/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch	\
+  %D%/packages/patches/sdl-pango-matrix_declarations.patch	\
+  %D%/packages/patches/sdl-pango-sans-serif.patch		\
   %D%/packages/patches/patchutils-test-perms.patch		\
   %D%/packages/patches/patch-hurd-path-max.patch		\
   %D%/packages/patches/perl-autosplit-default-time.patch	\
@@ -1403,7 +1408,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/spice-fix-test-armhf.patch		\
   %D%/packages/patches/steghide-fixes.patch			\
   %D%/packages/patches/superlu-dist-awpm-grid.patch		\
-  %D%/packages/patches/superlu-dist-fix-mpi-deprecations.patch	\
   %D%/packages/patches/superlu-dist-scotchmetis.patch		\
   %D%/packages/patches/supertux-unbundle-squirrel.patch		\
   %D%/packages/patches/swig-guile-gc.patch			\
@@ -1416,6 +1420,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/t1lib-CVE-2010-2642.patch		\
   %D%/packages/patches/t1lib-CVE-2011-0764.patch		\
   %D%/packages/patches/t1lib-CVE-2011-1552+.patch		\
+  %D%/packages/patches/t4k-common-libpng16.patch		\
   %D%/packages/patches/tar-remove-wholesparse-check.patch	\
   %D%/packages/patches/tar-skip-unreliable-tests.patch		\
   %D%/packages/patches/tcc-boot-0.9.27.patch			\
@@ -1440,6 +1445,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/tomb-fix-errors-on-open.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
   %D%/packages/patches/txr-shell.patch				\
+  %D%/packages/patches/u-boot-riscv64-fix-extlinux.patch	\
   %D%/packages/patches/ucx-tcp-iface-ioctl.patch		\
   %D%/packages/patches/udiskie-no-appindicator.patch		\
   %D%/packages/patches/unzip-CVE-2014-8139.patch		\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 371fcc7ec3..26e2693431 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1201,7 +1201,7 @@ system administrator.")
 (define-public sudo
   (package
     (name "sudo")
-    (version "1.8.30")
+    (version "1.8.31")
     (source (origin
               (method url-fetch)
               (uri
@@ -1211,7 +1211,7 @@ system administrator.")
                                     version ".tar.gz")))
               (sha256
                (base32
-                "1rvrqlqrrjsd06dczgj9cwjdkpkqil5zzlwh87h06ms6qzfx6nm3"))
+                "0ks5mm9hda5idivncyfpiz4lrd8fv0dpmsl711788k7f7ixdka3y"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index af38c149c2..c88b8a25a2 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2016, 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
+;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -319,6 +320,14 @@ dictionaries, including personal ones.")
                      (base32
                       "0ip6nq43hcr7vvzbv4lwwmlwgfa60hrhsldh9xy3zg2prv6bcaaw")))
 
+(define-public aspell-dict-sl
+  (aspell-dictionary "sl" "Slovenian"
+                     #:version "0.50-0"
+                     #:prefix "aspell-"
+                     #:sha256
+                     (base32
+                      "1l9kc5g35flq8kw9jhn2n0bjb4sipjs4qkqzgggs438kywkx2rp5")))
+
 (define-public aspell-dict-sv
   (aspell-dictionary "sv" "Swedish"
                      #:version "0.51-0"
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index 7196ffcd32..cc492105d1 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 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016, 2017, 2020 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>
@@ -91,6 +91,18 @@ C or C++ programs, though that is not its primary goal.")
 
    (license (x11-style (string-append home-page "license.txt")))))
 
+(define-public libgc-8.0
+  (package/inherit
+   libgc
+   (version "8.0.4")
+   (source (origin
+             (method url-fetch)
+             (uri (string-append "https://github.com/ivmai/bdwgc/releases"
+                                 "/download/v" version "/gc-" version ".tar.gz"))
+             (sha256
+              (base32
+               "1798rp3mcfkgs38ynkbg2p47bq59pisrc6mn0l20pb5iczf0ssj3"))))))
+
 (define-public libgc/back-pointers
   (package
     (inherit libgc)
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index c072ff8c8e..63a88dd7ec 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -751,6 +751,21 @@ to Novena upstream, does not load u-boot.img from the first partition.")
          ("firmware-m0" ,rk3399-cortex-m0)
          ,@(package-native-inputs base))))))
 
+(define-public u-boot-qemu-riscv64
+  (make-u-boot-package "qemu-riscv64" "riscv64-linux-gnu"))
+
+(define-public u-boot-qemu-riscv64-smode
+  (let ((base (make-u-boot-package "qemu-riscv64_smode" "riscv64-linux-gnu")))
+    (package
+      (inherit base)
+      (source (origin
+                (inherit (package-source u-boot))
+                (patches
+                 (search-patches "u-boot-riscv64-fix-extlinux.patch")))))))
+
+(define-public u-boot-sifive-fu540
+  (make-u-boot-package "sifive_fu540" "riscv64-linux-gnu"))
+
 (define-public u-boot-rock64-rk3328
   (let ((base (make-u-boot-package "rock64-rk3328" "aarch64-linux-gnu")))
     (package
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index eb2e2d62e2..f9eb350ff4 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -2438,7 +2438,7 @@ grew out of the @dfn{Vc} project.")
 (define-public python-pyfakefs
   (package
     (name "python-pyfakefs")
-    (version "3.5.8")
+    (version "3.7.1")
     (source (origin
               (method url-fetch)
               ;; We use the PyPI URL because there is no proper release
@@ -2447,7 +2447,7 @@ grew out of the @dfn{Vc} project.")
               (uri (pypi-uri "pyfakefs" version))
               (sha256
                (base32
-                "0qb9jp0bqhc0dv0rn805fv99029fvx135f3bvka6scfkcl6jgllc"))
+                "1cp2yw96fa2qkgi39xa3nlr3inf8wb5rgh9kdq53256ca2r8pdhy"))
               (patches (search-patches
                         "python-pyfakefs-remove-bad-test.patch"))
               (file-name (string-append name "-" version ".tar.gz"))))
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 729b0466ac..42d1132fba 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -24,8 +24,6 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages commencement)
-  #:use-module ((guix licenses)
-                #:select (gpl3+ lgpl2.0+ public-domain))
   #:use-module (gnu packages)
   #:use-module (gnu packages bootstrap)
   #:use-module (gnu packages base)
@@ -56,10 +54,8 @@
   #:use-module (guix memoization)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-26)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
-  #:use-module (ice-9 regex)
   #:export (make-gcc-toolchain))
 
 ;;; Commentary:
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index 6be2b7f9fc..998a71aeab 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -67,7 +67,7 @@
   #:use-module (ice-9 match))
 
 (define-public diffoscope
-  (let ((version "135"))
+  (let ((version "136"))
     (package
       (name "diffoscope")
       (version version)
@@ -79,7 +79,7 @@
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0rkpvajkp3qryi6dxkrh8aq5xg79aybnw8iy73wsblcnfq6yhba7"))))
+                  "1wp4fnmwcsgv17dmvk9xr3h63gp4nmmpysr248qvxs8s5qy5xlyk"))))
       (build-system python-build-system)
       (arguments
        `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index a28033c0af..7684e57a7b 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2020 Pkill -9 <pkill9@runbox.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,11 +63,14 @@
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages swig)
+  #:use-module (gnu packages terminals)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages vim)
   #:use-module (gnu packages w3m)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system scons)
@@ -822,3 +826,30 @@ on your file system and offers to remove it.  @command{rmlint} can find:
 @item files with broken user and/or group ID.
 @end itemize\n")
     (license license:gpl3+)))
+
+(define-public lf
+  (package
+    (name "lf")
+    (version "13")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/gokcehan/lf.git")
+                    (commit (string-append "r" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ld3q75v8rvp169w5p85z1vznqs9bhck6bm2f6fykxx16hmpb6ga"))))
+    (build-system go-build-system)
+    (native-inputs
+     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
+       ("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
+    (arguments
+     `(#:import-path "github.com/gokcehan/lf"))
+    (home-page "https://github.com/gokcehan/lf")
+    (synopsis "Console file browser similar to Ranger")
+    (description "lf (as in \"list files\") is a terminal file manager
+written in Go.  It is heavily inspired by ranger with some missing and
+extra features.  Some of the missing features are deliberately omitted
+since they are better handled by external tools.")
+    (license license:expat)))
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 4f8d7582c7..b0297e9075 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -36,6 +36,7 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages kde)
   #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules
@@ -254,7 +255,7 @@ easy.")
 (define-public snap
   (package
     (name "snap")
-    (version "5.4.0")
+    (version "5.4.5")
     (source
      (origin
        (method git-fetch)
@@ -263,8 +264,7 @@ easy.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "05m3x8yc9a7x9hfkrz2bm3yqkc63cdb8v3yznkjqq04sfx5dfd04"))))
+        (base32 "1z6dbcsgvxxs40p23qysfsk4vzpg8jlrr5pqfnjf8q3kpz1xvzxf"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -590,14 +590,14 @@ Portuguese, Spanish and Italian.")
 (define-public fet
   (package
     (name "fet")
-    (version "5.42.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.lalescu.ro/liviu/fet/download/"
-                                  "fet-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "1dzlbhp42dxdxbcrjwrjl4kj65cibxgjqc3ir1w78yprikihdxca"))))
+    (version "5.42.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.lalescu.ro/liviu/fet/download/"
+                           "fet-" version ".tar.bz2"))
+       (sha256
+        (base32 "0z31i8kwd59c3hlq35qll61qhc3x63w330ss92glhp12iy0aja1y"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -714,3 +714,111 @@ each key.  A collection of lessons are included for a wide range of different
 languages and keyboard layouts, and typing statistics are used to dynamically
 adjust the level of difficulty.")
     (license license:gpl2)))
+
+(define-public t4k-common
+  (package
+    (name "t4k-common")
+    (version "0.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tux4kids/t4kcommon")
+             (commit (string-append "upstream/" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "13q02xpmps9qg8zrzzy2gzv4a6afgi28lxk4z242j780v0gphchp"))
+       (patches
+        (search-patches "t4k-common-libpng16.patch"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;FIXME: cannot find how to run tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'set-paths 'set-sdl-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "CPATH" (string-append (assoc-ref inputs "sdl")
+                                            "/include/SDL:"
+                                            (or (getenv "CPATH") "")))))
+         (add-after 'unpack 'fix-andika-font-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/t4k_sdl.c"
+               (("(/usr/share/.*?)/AndikaDesRevG\\.ttf")
+                (string-append (assoc-ref inputs "font-andika")
+                               "/share/fonts/truetype")))
+             #t)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("font-andika" ,font-sil-andika)
+       ("libpng" ,libpng)
+       ("librsvg" ,librsvg)
+       ("libxml2" ,libxml2)
+       ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net sdl-pango)))))
+    (home-page "https://github.com/tux4kids/t4kcommon")
+    (synopsis "Library of code shared between TuxMath and TuxType")
+    (description "Tux4Kids-Common is a library of code shared between
+TuxMath and TuxType.")
+    (license license:gpl3+)))
+
+(define-public tuxmath
+  (package
+    (name "tuxmath")
+    (version "2.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tux4kids/tuxmath")
+             (commit (string-append "upstream/" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1f1pz83w6d3mbik2h6xavfxmk5apxlngxbkh80x0m55lhniwkdxv"))
+       (modules '((guix build utils)))
+       ;; Unbundle fonts.
+       (snippet
+        `(begin
+           (for-each delete-file (find-files "data/fonts" "\\.ttf$"))
+           #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'set-paths 'set-sdl-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "CPATH"
+                     (string-append (assoc-ref inputs "sdl")
+                                    "/include/SDL:"
+                                    (or (getenv "CPATH") "")))
+             #t))
+         (add-after 'install 'install-desktop-file
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (apps (string-append out "/share/applications"))
+                    (pixmaps (string-append out "/share/pixmaps")))
+               (install-file "tuxmath.desktop" apps)
+               (for-each (lambda (f) (install-file f pixmaps))
+                         (find-files "data/images/icons/"
+                                     "tuxmath\\.(png|ico|svg)$"))
+               #t))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("librsvg" ,librsvg)
+       ("libxml2" ,libxml2)
+       ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net sdl-pango)))
+       ("t4k-common" ,t4k-common)))
+    (home-page "https://github.com/tux4kids/tuxmath")
+    (synopsis "Educational math tutorial game")
+    (description "@emph{Tux, of Math Command} is an educational math
+tutorial game starring Tux, the Linux penguin, in which you play the
+part of Commander Tux, as he defends his friends from an attack of
+math equations.  Comets are crashing towards the friendly penguins in
+their igloos, and you must destroy the comets by solving their
+equations.
+
+TuxMath also includes Factoroids, a game that gives practice in
+factoring numbers and simplifying fractions, as well as zapping rocks
+floating through space.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index e834dfffb3..9936127a18 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -960,13 +960,13 @@ in certain cases.  It also enables recursion for anonymous functions.")
 (define-public emacs-xr
   (package
     (name "emacs-xr")
-    (version "1.14")
+    (version "1.15")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/xr-" version ".tar"))
        (sha256
-        (base32 "1hfl7jvimgdgi2mwsx9laxcywp4n6k6vfkanjwm3sf27awqz7ngs"))))
+        (base32 "0pxzr6n0qa29ly8j3cl46rv9a65ajfcgahrhdylg4yfb9gh1x4ly"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/xr.html")
     (synopsis "Convert string regexp to rx notation")
@@ -1064,14 +1064,14 @@ optional minor mode which can apply this command automatically on save.")
 (define-public emacs-relint
   (package
     (name "emacs-relint")
-    (version "1.11")
+    (version "1.13")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://elpa.gnu.org/packages/relint-" version ".tar"))
        (sha256
-        (base32 "0c7d35kp5k11fnyjrq9cg8i2r005gs57pmb3rvpf8ilwv0scn1m7"))))
+        (base32 "1kzzlixhd6kp0mkmgn02b7pqv6m55g708xsys7vjskdxbfb6jjib"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-xr" ,emacs-xr)))
     (home-page "https://github.com/mattiase/relint")
@@ -18997,6 +18997,29 @@ previewed by scrolling up and down within a @code{dired} buffer.")
 and searching through @code{Ctags} files.")
     (license license:gpl3+)))
 
+(define-public emacs-ivy-clipmenu
+  (let ((commit "d2071f2c5043a05d610cd1952e84176ca78c31dc"))
+    (package
+      (name "emacs-ivy-clipmenu")
+      (version (git-version "0.0.1" "1" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/wpcarro/ivy-clipmenu.el.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0npd8glzk5z4n7y9mzbsbzi0cf3by19fqcki052jr3dga363lds7"))))
+      (propagated-inputs
+       `(("emacs-f" ,emacs-f)
+         ("emacs-ivy" ,emacs-ivy)))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/wpcarro/ivy-clipmenu.el")
+      (synopsis "Ivy integration with clipmenu")
+      (description "Ivy integration with the clipboard manager, clipmenu.")
+      (license license:expat))))
+
 (define-public emacs-org-download
   (let ((commit "10c9d7c8eed928c88a896310c882e3af4d8d0f61")
         (revision "2"))
@@ -20484,9 +20507,9 @@ fish-completion.  It can be used in both Eshell and M-x shell.")
   ;; This package has versions newer than indicated on MELPA.
   ;; Get the current version from `telega-version` in telega.el.
   ;; or by running M-x telega-version.
-  (let ((commit "f6728934988140839a71550c9c18b65424ba6225")
+  (let ((commit "ae09592498ce380e57fbb76725fd4c89ae248864")
 	(revision "0")
-	(version "0.5.10"))
+	(version "0.6.0"))
     (package
       (name "emacs-telega")
       (version (git-version version revision commit))
@@ -20498,7 +20521,7 @@ fish-completion.  It can be used in both Eshell and M-x shell.")
                (commit commit)))
          (sha256
           (base32
-           "1ijz1isxzssbhz6bxrqmn6wv2apx5rhvd9sbsclv1gaiz3wmkj7i"))
+           "0mv6i80958d9crzspzik5xh5g8326115bvg2frgv0dp9p6rm86m3"))
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (arguments
@@ -21237,3 +21260,123 @@ mode-line text (lighter) of major and minor modes.")
       (description "@code{unkillable-scratch} helps prevent killing buffers
 matching a given regexp.")
       (license license:gpl2+))))
+
+(define-public emacs-switch-buffer-functions
+  (package
+    (name "emacs-switch-buffer-functions")
+    (version "0.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/10sr/switch-buffer-functions-el.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0pq53b8wrjbrxd5hnrcdi0z7mffp4bax55hn90k9ca3j76lhbn1k"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/10sr/switch-buffer-functions-el")
+    (synopsis "Hooks run when switching current buffer")
+    (description "This package provides a hook variable
+@code{switch-buffer-functions}.  The hooks will be run when the current buffer
+is changed after an interactive command, i.e., when @code{post-command-hook}
+hooks are run.  The hooked functions will be called with both the previous and
+the current buffer.")
+    (license license:unlicense)))
+
+(define-public emacs-erc-scrolltoplace
+  (package
+    (name "emacs-erc-scrolltoplace")
+    (version "0.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/jgkamat/erc-scrolltoplace.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "11zpqwh1mlfifbgnvhc63bvnhg340jgxssm3m43hr1sxsyb52lh6"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-switch-buffer-functions" ,emacs-switch-buffer-functions)))
+    (home-page "https://gitlab.com/jgkamat/erc-scrolltoplace")
+    (synopsis "ERC module to replace scrolltobottom while using keep-place")
+    (description "@code{erc-scrolltoplace} is an ERC module to try
+to emulate @code{scrolltobottom} while @code{keep-place} is enabled.")
+    (license license:gpl3+)))
+
+(define-public emacs-dmenu
+  ;; Use the latest commit, as there are no tagged releases.
+  (let ((commit "e8cc9b27c79d3ecc252267c082ab8e9c82eab264")
+        (revision "0"))
+    (package
+      (name "emacs-dmenu")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lujun9972/el-dmenu.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "098ncygms1r33zhjlq4fj2p4jc91v5whqrm3fazzdk7sd6dilf25"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/lujun9972/el-dmenu")
+      (synopsis "Simulate the @command{dmenu} command line program")
+      (description "This package provides a @command{dmenu} command for
+launching other commands/applications from within Emacs, similar to the
+@command{dmenu} program.  This is especially useful when using EXWM.")
+      (license license:gpl3+))))
+
+(define-public emacs-no-littering
+  (package
+    (name "emacs-no-littering")
+    (version "1.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/emacscollective/no-littering.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "17is06l0w6glppabv2kaclrnqi3dqb6p6alpslpg7lrjd8vd45ir"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/emacscollective/no-littering")
+    (synopsis "Help keep ~/.emacs.d/ clean")
+    (description "The default paths used to store configuration files and
+persistent data are not consistent across Emacs packages, be them built-in or
+third-party ones.  @code{no-littering} sets out to help clean
+@file{~/.emacs.d/} by putting configuration files and persistent data files in
+two user-defined directories, as well as using more descriptive names for
+files and subdirectories when appropriate.")
+    (license license:gpl3+)))
+
+(define-public emacs-message-x
+  ;; Use the latest commit, as there are no tagged releases.
+  (let ((commit "5524de7bbfdd8749c110f48de5afb024d9f83133")
+        (revision "0"))
+    (package
+      (name "emacs-message-x")
+      (version (git-version "1.23" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emacsmirror/message-x.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0qy1xf11j357lsnbb829hnbg7fq1cii4cx54fwf0wgjh1bv2abvj"))))
+      (build-system emacs-build-system)
+      (home-page "https://www.emacswiki.org/emacs/message-x.el")
+      (synopsis "Customizable completion in message headers")
+      (description "@code{message-x} assigns a context-sensitive function to
+the TAB key in Message mode.  When on a header line, it performs completion
+based on which header we are in (for example, newsgroup name completion makes
+sense on the @samp{Newsgroups} header, whereas mail alias expansion makes
+sense in the @samp{To} and @samp{Cc} headers).  When in the message body, this
+executes a different function (default: @code{indent-relative}).")
+      (license license:gpl2+))))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 23b5ad864f..284dc22039 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -1234,7 +1234,8 @@ multi-system game/emulator system.")
                (setenv "CONFIG_SHELL" bash)
                (apply invoke "./configure" flags)))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("nasm" ,nasm)
+       ("pkg-config" ,pkg-config)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("faad2" ,faad2)
@@ -1249,7 +1250,6 @@ multi-system game/emulator system.")
        ("libpng" ,libpng)
        ("libtheora" ,libtheora)
        ("libvorbis" ,libvorbis)
-       ("nasm" ,nasm)
        ("sdl2" ,(sdl-union (list sdl2 sdl2-net)))
        ("zlib" ,zlib)))
     (home-page "https://www.scummvm.org/")
@@ -1264,7 +1264,7 @@ play them on systems for which they were never designed!")
 (define-public mame
   (package
     (name "mame")
-    (version "0.217")
+    (version "0.218")
     (source
      (origin
        (method git-fetch)
@@ -1273,8 +1273,7 @@ play them on systems for which they were never designed!")
              (commit (apply string-append "mame" (string-split version #\.)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "03h4d0d8lh6djjff3zqhjm14klc9n129yzwygdqppz0f43w97cmw"))
+        (base32 "1c43hqfabc7spkyk5ma4bjdb0yqm93sdg5g13ka8mvi462snrfd7"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index d7a0d6dbac..3e7314bc2b 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -101,7 +101,7 @@
       (home-page "https://bcachefs.org/")
       (synopsis "Tools to create and manage bcachefs file systems")
       (description
-       "The bcachefs-tools are command-line utilites for creating, checking,
+       "The bcachefs-tools are command-line utilities for creating, checking,
 and otherwise managing bcachefs file systems.
 
 Bcachefs is a @acronym{CoW, copy-on-write} file system supporting native
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index e96a00bb22..d5828deca2 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -183,6 +183,69 @@ Broadcom/AirForce chipset BCM43xx with Wireless-Core Revision 5.  It is used
 by the b43-open driver of Linux-libre.")
     (license license:gpl2)))
 
+(define* (make-opensbi-package platform variant #:optional (arch "riscv64"))
+  (package
+    (name (string-replace-substring
+           (string-append "opensbi-" platform "-" variant)
+           "_" "-"))
+    (version "0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/riscv/opensbi.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0qc73xbiy79qqkwxmp4mg15q8n8k26njkyqb6n0jw5dyibd6hb85"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(,@(if (and (not (string-prefix? "riscv64" (%current-system)))
+                  (string-prefix? "riscv64" arch))
+           `(("cross-gcc" ,(cross-gcc "riscv64-linux-gnu" #:xgcc gcc-7))
+             ("cross-binutils" ,(cross-binutils "riscv64-linux-gnu")))
+           '())))
+    (arguments
+     `(#:tests? #f ; no check target
+       #:make-flags (list (string-append "PLATFORM=" ,platform "/" ,variant)
+                          ,@(if (and (not (string-prefix? "riscv64"
+                                                          (%current-system)))
+                                     (string-prefix? "riscv64" arch))
+                                `("CROSS_COMPILE=riscv64-linux-gnu-")
+                                '())
+                          "FW_PAYLOAD=n"
+                          "V=1")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bin (find-files "." ".*fw_.*.elf$")))
+               (for-each
+                 (lambda (file)
+                   (install-file file out))
+                 bin))
+             #t)))))
+    (home-page "https://github.com/riscv/opensbi")
+    (synopsis "RISC-V Open Source Supervisor Binary Interface")
+    (description "A reference implementation of the RISC-V SBI specifications
+for platform-specific firmwares executing in M-mode.")
+    (license (list license:bsd-2
+                   ;; lib/utils/libfdt/* is dual licensed under bsd-2 and gpl2+.
+                   license:gpl2+
+                   ;; platform/ariane-fpga/* is gpl2.
+                   license:gpl2))))
+
+(define-public opensbi-qemu-virt
+  (make-opensbi-package "qemu" "virt"))
+
+(define-public opensbi-qemu-sifive-u
+  (make-opensbi-package "qemu" "sifive_u"))
+
+(define-public opensbi-sifive-fu540
+  (make-opensbi-package "sifive" "fu540"))
+
 (define-public seabios
   (package
     (name "seabios")
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index ceec993d04..6fa4fed74f 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -90,6 +90,7 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
@@ -1505,7 +1506,7 @@ games.")
 (define-public godot
   (package
     (name "godot")
-    (version "3.1.2")
+    (version "3.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1514,7 +1515,7 @@ games.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "12305wj2i4067jc50l8r0wmb7zjcna24fli8vb8kiaild0jrlip6"))
+                "0f15izjl4i2xlz1xj5pcslzl9gm3rmr3c21gh256ynpi2zhhkcdd"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (srfi srfi-1)))
@@ -1526,7 +1527,7 @@ games.")
                   (with-directory-excursion "thirdparty"
                     (let* ((preserved-files
                             '("README.md"
-                              "b2d_convexdecomp"
+                              "assimp"
                               "certs"
                               "cvtt"
                               "enet"
@@ -1535,7 +1536,6 @@ games.")
                               "glad"
                               "jpeg-compressor"
                               "libsimplewebm"
-                              "libwebsockets"
                               "miniupnpc"
                               "minizip"
                               "misc"
@@ -1543,8 +1543,8 @@ games.")
                               "pvrtccompressor"
                               "recastnavigation"
                               "squish"
-                              "thekla_atlas"
                               "tinyexr"
+                              "vhacd"
                               "xatlas")))
                       (for-each delete-file-recursively
                                 (lset-difference string=?
@@ -1574,6 +1574,7 @@ games.")
                            "builtin_mbedtls=no"
                            "builtin_opus=no"
                            "builtin_pcre2=no"
+                           "builtin_wslay=no"
                            "builtin_zlib=no"
                            "builtin_zstd=no")
        #:tests? #f ; There are no tests
@@ -1598,6 +1599,10 @@ games.")
                      (rename-file "godot.x11.tools.64" "godot")
                      (rename-file "godot.x11.tools.32" "godot"))
                  (install-file "godot" bin))
+               ;; Tell Godot where to find zenity for OS.alert().
+               (wrap-program (string-append bin "/godot")
+                 `("PATH" ":" prefix
+                   (,(string-append (assoc-ref %build-inputs "zenity") "/bin"))))
                #t)))
          (add-after 'install 'install-godot-desktop
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1640,6 +1645,8 @@ games.")
               ("opusfile" ,opusfile)
               ("pcre2" ,pcre2)
               ("pulseaudio" ,pulseaudio)
+              ("wslay" ,wslay)
+              ("zenity" ,zenity)
               ("zstd" ,zstd "lib")))
     (home-page "https://godotengine.org/")
     (synopsis "Advanced 2D and 3D game engine")
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 81e2892ad2..1aa8d49036 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -1,7 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,12 +28,14 @@
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
   #:use-module (gnu packages pkg-config)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (srfi srfi-1))
 
 (define-public gdb-8.3
   (package
@@ -45,6 +48,10 @@
              (sha256
               (base32
                "1i2pjwaafrlz7wqm40b4znr77ai32rjsxkpl2az38yyarpbv8m8y"))))
+
+    ;; Hide this package so that end users get 'gdb/next' below.
+    (properties '((hidden? . #t)))
+
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; FIXME "make check" fails on single-processor systems.
@@ -106,6 +113,8 @@ the program is running to try to fix bugs.  It can be used to debug programs
 written in C, C++, Ada, Objective-C, Pascal and more.")
     (license gpl3+)))
 
+;; This version of GDB is required by some of the Rust compilers, see
+;; <https://bugs.gnu.org/37810>.
 (define-public gdb-8.2
   (package/inherit
    gdb-8.3
@@ -118,6 +127,15 @@ written in C, C++, Ada, Objective-C, Pascal and more.")
               (base32
                "00i27xqawjv282a07i73lp1l02n0a3ywzhykma75qg500wll6sha"))))))
 
+;; The "next" version of GDB, to be merged with 'gdb' in the next rebuild cycle.
+(define-public gdb/next
+  (package/inherit
+   gdb-8.3
+   (inputs
+    `(("source-highlight" ,source-highlight)
+      ,@(package-inputs gdb-8.3)))
+   (properties (alist-delete 'hidden? (package-properties gdb-8.3)))))
+
 (define-public gdb
   ;; This is the fixed version that packages depend on.  Update it rarely
   ;; enough to avoid massive rebuilds.
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index 0991109510..0f2eba373d 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -174,6 +174,7 @@ buffers.")
        ("glib" ,glib)
        ("glib-networking" ,glib-networking)
        ("libtiff" ,libtiff)
+       ("libwebp" ,libwebp)
        ("libjpeg" ,libjpeg)
        ("atk" ,atk)
        ("gexiv2" ,gexiv2)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 4c3e47bb8c..2f6029fba5 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -39,7 +39,7 @@
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2019 Jonathan Frederickson <jonathan@terracrypt.net>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
 ;;; Copyright © 2019, 2020 Raghav Gururajan <raghavgururajan@disroot.org>
@@ -8303,7 +8303,11 @@ functionality and behavior.")
        (modify-phases %standard-phases
          ;; autogen.sh calls configure at the end of the script.
          (replace 'bootstrap
-           (lambda _ (invoke "autoreconf" "-vfi"))))))
+           (lambda _ (invoke "autoreconf" "-vfi")))
+         (add-before 'build 'set-home   ;placate Inkscape
+           (lambda _
+             (setenv "HOME" (getcwd))
+             #t)))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index a6b5f2a4cf..9102469749 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -220,7 +220,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.4)
     (name "go")
-    (version "1.12.15")
+    (version "1.12.16")
     (source
      (origin
        (method url-fetch)
@@ -228,7 +228,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                            name version ".src.tar.gz"))
        (sha256
         (base32
-         "1hw4xjywcl883dnvfbb92w85sy8n231fdri4aynj8xajgr0p9fla"))))
+         "1y0x10fsvgpc1x24b9q9y6kv9b0kwf7879am3p0gym2abgc5wvnf"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.4)
        ((#:phases phases)
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index 5888e8542e..e5ec572e1d 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
 ;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
+;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1595,3 +1596,65 @@ cookies, serving files, and more.")
     (description
      "Haskell library which exposes zero-copy sendfile functionality in a portable way.")
     (license license:bsd-3)))
+
+(define-public ghc-scalpel-core
+  (package
+    (name "ghc-scalpel-core")
+    (version "0.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/scalpel-core/"
+               "scalpel-core-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1qf0gnidyh8zk0acj99vn6hsj37m410lrm50sqpiv1i36rpmmsqh"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-data-default" ,ghc-data-default)
+       ("ghc-fail" ,ghc-fail)
+       ("ghc-pointedlist" ,ghc-pointedlist)
+       ("ghc-regex-base" ,ghc-regex-base)
+       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
+       ("ghc-tagsoup" ,ghc-tagsoup)
+       ("ghc-vector" ,ghc-vector)))
+    (native-inputs `(("ghc-hunit" ,ghc-hunit)))
+    (home-page "https://github.com/fimad/scalpel")
+    (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
+non-Haskell dependencies.")
+    (license license:asl2.0)))
+
+(define-public ghc-scalpel
+  (package
+    (name "ghc-scalpel")
+    (version "0.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/scalpel/"
+               "scalpel-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0jbrfcgljl8kbcwi2zqx1jp3c3dpxrkc94za44x56kcz68n89hlz"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-scalpel-core" ,ghc-scalpel-core)
+       ("ghc-case-insensitive" ,ghc-case-insensitive)
+       ("ghc-data-default" ,ghc-data-default)
+       ("ghc-http-client" ,ghc-http-client)
+       ("ghc-http-client-tls" ,ghc-http-client-tls)
+       ("ghc-tagsoup" ,ghc-tagsoup)))
+    (home-page "https://github.com/fimad/scalpel")
+    (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
+declarative and monadic interface.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 938cb116ca..3d1709fcc3 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages texinfo)
   #:use-module (guix git-download)
   #:export (hurd-triplet?
             hurd-target?))
@@ -44,69 +46,54 @@ GNU/Hurd."
   (or (and=> (%current-target-system) hurd-triplet?)
       (string-suffix? (%current-system) "-gnu")))
 
-(define (gnumach-source-url version)
-  (string-append "mirror://gnu/gnumach/gnumach-"
-                 version ".tar.gz"))
-
 (define (hurd-source-url version)
   (string-append "mirror://gnu/hurd/hurd-"
                  version ".tar.gz"))
 
-(define (patch-url repository commit)
-  (string-append "https://git.savannah.gnu.org/cgit/hurd/" repository
-                 ".git/patch/?id=" commit))
-
 (define-public gnumach-headers
-  (package
-    (name "gnumach-headers")
-    (version "1.8")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (gnumach-source-url version))
-      (sha256
-       (base32
-        "02hygsfpd2dljl5lg1vjjg9pizi9jyxd4aiiqzjshz6jax62jm9f"))
-      (patches (list (origin
-                       ;; This patch adds <mach/vm_wire.h>, which defines the
-                       ;; VM_WIRE_* constants needed by glibc 2.28.
-                       (method url-fetch)
-                       (uri (patch-url "gnumach" "2b0f19f602e08fd9d37268233b962674fd592634"))
-                       (sha256
-                        (base32
-                         "01iajnwsmka0w9hwjkxxijc4xfhwqbvlkw1w8n71hpnhfixd0y28"))
-                       (file-name "gnumach-vm-wire-header.patch"))))
-      (modules '((guix build utils)))
-      (snippet
-       '(begin
-          ;; Actually install vm_wire.h.
-          (substitute* "Makefile.in"
-            (("^include_mach_HEADERS =")
-             "include_mach_HEADERS = include/mach/vm_wire.h"))
-          #t))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'install
-           (lambda _
-             (invoke "make" "install-data")))
-         (delete 'build))
+   (let ((commit "097f9cf735ffa1212b828682ad92f0f6c5f1c552")
+         (revision "1"))
+     (package
+       (name "gnumach-headers")
+       (version (git-version "1.8" revision commit))
+       (source
+         (origin
+           (method git-fetch)
+           (uri (git-reference
+                  (url "https://git.savannah.gnu.org/git/hurd/gnumach.git")
+                  (commit commit)))
+           (file-name (git-file-name "gnumach" version))
+           (sha256
+            (base32
+             "0q36z7k02bykrld90zaxbhyzxlmwlqqs4divgir6ix38zsp6icqk"))))
+       (build-system gnu-build-system)
+       (arguments
+        `(#:phases
+          (modify-phases %standard-phases
+            (replace 'install
+              (lambda _
+                (invoke "make" "install-data")))
+            (delete 'build))
 
-      ;; GNU Mach supports only IA32 currently, so cheat so that we can at
-      ;; least install its headers.
-      ,@(if (%current-target-system)
-            '()
-            ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-06/msg00042.html>
-            ;; <http://lists.gnu.org/archive/html/guix-devel/2015-06/msg00716.html>
-            '(#:configure-flags '("--build=i586-pc-gnu")))
+           ;; GNU Mach supports only IA32 currently, so cheat so that we can at
+           ;; least install its headers.
+           ,@(if (%current-target-system)
+               '()
+               ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-06/msg00042.html>
+               ;; <http://lists.gnu.org/archive/html/guix-devel/2015-06/msg00716.html>
+               '(#:configure-flags '("--build=i586-pc-gnu"
+                                     "--host=i686-linux-gnu")))
 
-      #:tests? #f))
-    (home-page "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html")
-    (synopsis "GNU Mach kernel headers")
-    (description
-     "Headers of the GNU Mach kernel.")
-    (license gpl2+)))
+           #:tests? #f))
+       (native-inputs
+        `(("autoconf" ,autoconf)
+          ("automake" ,automake)
+          ("texinfo" ,texinfo-4)))
+       (home-page "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html")
+       (synopsis "GNU Mach kernel headers")
+       (description
+        "Headers of the GNU Mach kernel.")
+       (license gpl2+))))
 
 (define-public mig
   (package
@@ -264,15 +251,8 @@ Hurd-minimal package which are needed for both glibc and GCC.")
 
 (define-public gnumach
   (package
+    (inherit gnumach-headers)
     (name "gnumach")
-    (version "1.8")
-    (source (origin
-              (method url-fetch)
-              (uri (gnumach-source-url version))
-              (sha256
-               (base32
-                "02hygsfpd2dljl5lg1vjjg9pizi9jyxd4aiiqzjshz6jax62jm9f"))))
-    (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'install 'produce-image
@@ -286,12 +266,9 @@ Hurd-minimal package which are needed for both glibc and GCC.")
      `(("mig" ,mig)
        ("perl" ,perl)))
     (supported-systems (cons "i686-linux" %hurd-systems))
-    (home-page
-     "https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html")
     (synopsis "Microkernel of the GNU system")
     (description
-     "GNU Mach is the microkernel upon which a GNU Hurd system is based.")
-    (license gpl2+)))
+     "GNU Mach is the microkernel upon which a GNU Hurd system is based.")))
 
 (define-public hurd
   (package
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 2b4bc5680d..1ea4b5bd6a 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -170,7 +170,7 @@ script.")
 (define-public graphicsmagick
   (package
     (name "graphicsmagick")
-    (version "1.3.33")
+    (version "1.3.34")
     (source
      (origin
        (method url-fetch)
@@ -182,7 +182,8 @@ script.")
                         "GraphicsMagick/" (version-major+minor version)
                         "/GraphicsMagick-" version ".tar.xz")))
        (sha256
-        (base32 "0y67dl6xbk1pxndppa93hhlq9i6bpcjw39gb4i8hnn1klqqb630k"))))
+        (base32
+         "197pshms3m8mn2x1ryiag37ambm8qmb448spch66l3gdfd8rs06z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c7425a67f8..c3f6502d45 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -11,7 +11,7 @@
 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Raymond Nicholson <rain1@openmailbox.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
-;;; Copyright © 2016, 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
@@ -33,7 +33,7 @@
 ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
-;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Stefan Stefanović <stefanx2ovic@gmail.com>
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Brice Waegeneire <brice@waegenei.re>
@@ -87,6 +87,8 @@
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages haskell-apps)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages libunwind)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages man)
@@ -357,42 +359,42 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                         "linux-" version ".tar.xz"))
     (sha256 hash)))
 
-(define-public linux-libre-5.4-version "5.4.15")
+(define-public linux-libre-5.4-version "5.4.17")
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "1ccldlwj89qd22cl06706w7xzm8n69m6kg8ic0s5ns0ghlpj41v4")))
+        (hash (base32 "1fbl5knf6pini9lsx8mqkdmf3qbsydqvaxggh6nd1vk9mzv2npwl")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.99")
+(define-public linux-libre-4.19-version "4.19.101")
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "1axmspnqir2zz7lail95y5yaamxl86k39sd4im3c77dgjkwj3g4d")))
+        (hash (base32 "1i4bkwankl5q95kgqmmyzdkwmf3b8ppkb8ild9bw12mkpmm1a9my")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.168")
+(define-public linux-libre-4.14-version "4.14.169")
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "1ziixdg4jsr17kgfa9dpckczk0r2mc5jayqb2f6br19al79pfmyv")))
+        (hash (base32 "0jc24zvqz3vsv65xxcivzkj6nv27vsy62l50n2h1ysy5jdwsk3nq")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.211")
+(define-public linux-libre-4.9-version "4.9.212")
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "1gmi27ih5ys1wxbrnc4a5dr9vw9ngccs9xpa2p0gsk4pbn6n15r5")))
+        (hash (base32 "0c5yjilaq86j6i2hzlxbp2ia7jhnf7kv952ffv7jxdf90sk3irxd")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
 
-(define-public linux-libre-4.4-version "4.4.211")
+(define-public linux-libre-4.4-version "4.4.212")
 (define-public linux-libre-4.4-pristine-source
   (let ((version linux-libre-4.4-version)
-        (hash (base32 "1f6qz4bvjn18cfcg3wwfsl75aw2kxwn28r228kdic9aibhy6rpvp")))
+        (hash (base32 "0mx3qyj6w6h7gw7drsfsgl4iyz1695sjnf9hqh4kczci48kw5rj7")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.4)))
@@ -780,7 +782,7 @@ It has been modified to remove all non-free binary blobs.")
 (define-public linux-libre-5.4
   (make-linux-libre* linux-libre-5.4-version
                      linux-libre-5.4-source
-                     '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
+                     '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux" "riscv64-linux")
                      #:configuration-file kernel-config))
 
 (define-public linux-libre-version         linux-libre-5.4-version)
@@ -872,6 +874,12 @@ It has been modified to remove all non-free binary blobs.")
                      #:defconfig "omap2plus_defconfig"
                      #:extra-version "arm-omap2plus"))
 
+(define-public linux-libre-riscv64-generic
+  (make-linux-libre* linux-libre-version
+                     linux-libre-source
+                     '("riscv64-linux")
+                     #:extra-version "riscv64-generic"))
+
 
 ;;;
 ;;; Linux kernel modules.
@@ -2656,6 +2664,50 @@ kmod.  The aim is to be compatible with tools, configurations and indices
 from the module-init-tools project.")
     (license license:gpl2+))) ; library under lgpl2.1+
 
+(define-public earlyoom
+  (package
+    (name "earlyoom")
+    (version "1.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rfjakob/earlyoom.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0fwbx0y80nqgkxrc9kf9j3iwa0wbps2jmqir3pgqbc2cj0wjh0lr"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (add-before 'check 'set-home
+                    (lambda _
+                      (setenv "HOME" (getcwd))
+                      #t))
+                  (add-after 'build 'install-contribs
+                    ;; Install what seems useful from the contrib directory.
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (contrib (string-append
+                                       out "/share/earlyoom/contrib")))
+                        (install-file "contrib/notify_all_users.py" contrib)
+                        #t))))
+       #:make-flags (let* ((prefix (assoc-ref %outputs "out")))
+                      (list "CC=gcc"
+                            (string-append "VERSION=v" ,version)
+                            (string-append "PREFIX=" prefix)
+                            (string-append "SYSCONFDIR=" prefix "/etc")))
+       #:test-target "test"))
+    (native-inputs `(("go" ,go)               ;for the test suite
+                     ("pandoc" ,ghc-pandoc))) ;to generate the manpage
+    (home-page "https://github.com/rfjakob/earlyoom")
+    (synopsis "Simple out of memory (OOM) daemon for the Linux kernel")
+    (description "Early OOM is a minimalist out of memory (OOM) daemon that
+runs in user space and provides a more responsive and configurable alternative
+to the in-kernel OOM killer.")
+    (license license:expat)))
+
 (define-public eudev
   ;; The post-systemd fork, maintained by Gentoo.
   (package
@@ -5119,42 +5171,46 @@ interface in sysfs, which can be accomplished with the included udev rules.")
 (define-public tlp
   (package
     (name "tlp")
-    (version "1.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/linrunner/"
-                    (string-upcase name)
-                    "/archive/" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "059kxrpxx580mm6p0z2a421nxngszyh4yqqhbgvn04b6a7dbsa2w"))))
-    (inputs `(("bash" ,bash)
-              ("dbus" ,dbus)
-              ("ethtool" ,ethtool)
-              ("eudev" ,eudev)
-              ("grep" ,grep)
-              ("hdparm" ,hdparm)
-              ("inetutils" ,inetutils)
-              ("iw" ,iw)
-              ("kmod" ,kmod)
-              ("pciutils" ,pciutils)
-              ("perl" ,perl)
-              ("rfkill" ,rfkill)
-              ("sed" ,sed)
-              ("usbutils" ,usbutils)
-              ("util-linux" ,util-linux)
-              ("wireless-tools" ,wireless-tools)
-              ,@(if (let ((system (or (%current-target-system)
-                                      (%current-system))))
-                      (or (string-prefix? "i686-" system)
-                          (string-prefix? "x86_64-" system)))
-                    `(("x86-energy-perf-policy" ,x86-energy-perf-policy))
-                    '())))
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/linrunner/TLP/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "169k3xypq5rq0xiggrlpr73yr2r2x7b2d9vcr9ac96qrgph7sk7r"))))
+    (native-inputs
+     `(("shellcheck" ,shellcheck)))
+    (inputs
+     `(("bash" ,bash)
+       ("dbus" ,dbus)
+       ("ethtool" ,ethtool)
+       ("eudev" ,eudev)
+       ("grep" ,grep)
+       ("hdparm" ,hdparm)
+       ("inetutils" ,inetutils)
+       ("iw" ,iw)
+       ("kmod" ,kmod)
+       ("pciutils" ,pciutils)
+       ("perl" ,perl)
+       ("rfkill" ,rfkill)
+       ("sed" ,sed)
+       ("usbutils" ,usbutils)
+       ("util-linux" ,util-linux)
+       ("wireless-tools" ,wireless-tools)
+       ,@(if (let ((system (or (%current-target-system)
+                               (%current-system))))
+               (or (string-prefix? "i686-" system)
+                   (string-prefix? "x86_64-" system)))
+             `(("x86-energy-perf-policy" ,x86-energy-perf-policy))
+             '())))
     (build-system gnu-build-system)
     (arguments
-     `(#:modules ((guix build gnu-build-system)
+     ;; XXX: The full test suite is run with "checkall" but it requires
+     ;; "checkbashisms" and "perlcritic", not yet packaged in Guix.
+     `(#:test-target "shellcheck"
+       #:modules ((guix build gnu-build-system)
                   (guix build utils)
                   (srfi srfi-1))
        #:phases
@@ -5171,7 +5227,9 @@ interface in sysfs, which can be accomplished with the included udev rules.")
                (setenv "TLP_TLIB" (string-append out "/share/tlp"))
                (setenv "TLP_FLIB" (string-append out "/share/tlp/func.d"))
                (setenv "TLP_ULIB" (string-append out "/lib/udev"))
-               (setenv "TLP_CONF" "/etc/tlp")
+               (setenv "TLP_CONFDEF"
+                       (string-append out "/share/tlp/defaults.conf"))
+               (setenv "TLP_CONFDIR" (string-append out "/etc/tlp.d"))
                (setenv "TLP_ELOD"
                        (string-append out "/lib/elogind/system-sleep"))
                (setenv "TLP_SHCPL"
@@ -5179,17 +5237,15 @@ interface in sysfs, which can be accomplished with the included udev rules.")
                (setenv "TLP_MAN" (string-append out "/share/man"))
                (setenv "TLP_META" (string-append out "/share/metainfo"))
                #t)))
-         (delete 'check)                ; no tests
          (add-before 'install 'fix-installation
            (lambda _
              ;; Stop the Makefile from trying to create system directories.
              (substitute* "Makefile"
-               (("\\[ -f \\$\\(_CONF\\) \\]") "#")
+               (("\\[ -f \\$\\(_CONFUSR\\) \\]") "#")
                (("install -d -m 755 \\$\\(_VAR\\)") "#"))
              #t))
          (replace 'install
-           (lambda _
-             (invoke "make" "install-tlp" "install-man")))
+           (lambda _ (invoke "make" "install-tlp" "install-man-tlp")))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index d0cc685969..920837abae 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -51,6 +51,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages lisp)
@@ -59,6 +60,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
@@ -9709,3 +9711,335 @@ possible.")
 
 (define-public ecl-green-threads
   (sbcl-package->ecl-package sbcl-green-threads))
+
+(define-public sbcl-cl-base32
+  (let ((commit "8cdee06fab397f7b0a19583b57e7f0c98405be85")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-base32")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/hargettp/cl-base32.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "17jrng8jb05d64ggyd11hp308c2fl5drvf9g175blgrkkl8l4mf8"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("lisp-unit" ,sbcl-lisp-unit)))
+      (synopsis "Common Lisp library for base32 encoding and decoding")
+      (description
+       "This package provides functions for base32 encoding and decoding as
+defined in RFC4648.")
+      (home-page "https://github.com/hargettp/cl-base32")
+      (license license:expat))))
+
+(define-public cl-base32
+  (sbcl-package->cl-source-package sbcl-cl-base32))
+
+(define-public ecl-cl-base32
+  (sbcl-package->ecl-package sbcl-cl-base32))
+
+(define-public sbcl-cl-z85
+  (let ((commit "85b3951a9cfa2603acb6aee15567684f9a108098")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-z85")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/glv2/cl-z85.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0r27pidjaxbm7k1rr90nnajwl5xm2kp65g1fv0fva17lzy45z1mp"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("cl-octet-streams" ,sbcl-cl-octet-streams)
+         ("fiveam" ,sbcl-fiveam)))
+      (synopsis "Common Lisp library for Z85 encoding and decoding")
+      (description
+       "This package provides functions to encode or decode byte vectors or
+byte streams using the Z85 format, which is a base-85 encoding used by
+ZeroMQ.")
+      (home-page "https://github.com/glv2/cl-z85")
+      (license license:gpl3+))))
+
+(define-public cl-z85
+  (sbcl-package->cl-source-package sbcl-cl-z85))
+
+(define-public ecl-cl-z85
+  (sbcl-package->ecl-package sbcl-cl-z85))
+
+(define-public sbcl-ltk
+  (package
+    (name "sbcl-ltk")
+    (version "0.992")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/herth/ltk.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "13l2q4mskzilya9xh5wy2xvy30lwn104bd8wrq6ifds56r82iy3x"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("imagemagick" ,imagemagick)
+       ("tk" ,tk)))
+    (arguments
+     `(#:asd-file "ltk/ltk.asd"
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'fix-paths
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "ltk/ltk.lisp"
+                        (("#-freebsd \"wish\"")
+                         (string-append "#-freebsd \""
+                                        (assoc-ref inputs "tk")
+                                        "/bin/wish\""))
+                        (("do-execute \"convert\"")
+                         (string-append "do-execute \""
+                                        (assoc-ref inputs "imagemagick")
+                                        "/bin/convert\"")))
+                      #t)))))
+    (synopsis "Common Lisp bindings for the Tk GUI toolkit")
+    (description
+     "LTK is a Common Lisp binding for the Tk graphics toolkit.  It is written
+in pure Common Lisp and does not require any Tk knowledge for its usage.")
+    (home-page "http://www.peter-herth.de/ltk/")
+    (license license:llgpl)))
+
+(define-public cl-ltk
+  (sbcl-package->cl-source-package sbcl-ltk))
+
+(define-public ecl-ltk
+  (sbcl-package->ecl-package sbcl-ltk))
+
+(define-public sbcl-ltk-mw
+  (package
+    (inherit sbcl-ltk)
+    (name "sbcl-ltk-mw")
+    (inputs
+     `(("ltk" ,sbcl-ltk)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-ltk)
+       ((#:asd-file _) "ltk/ltk-mw.asd")
+       ((#:phases _) '%standard-phases)))
+    (synopsis "Extra widgets for LTK")
+    (description
+     "This is a collection of higher-level widgets built on top of LTK.")))
+
+(define-public cl-ltk-mw
+  (sbcl-package->cl-source-package sbcl-ltk-mw))
+
+(define-public ecl-ltk-mw
+  (sbcl-package->ecl-package sbcl-ltk-mw))
+
+(define-public sbcl-ltk-remote
+  (package
+    (inherit sbcl-ltk)
+    (name "sbcl-ltk-remote")
+    (inputs
+     `(("ltk" ,sbcl-ltk)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-ltk)
+       ((#:asd-file _) "ltk/ltk-remote.asd")
+       ((#:phases _) '%standard-phases)))
+    (synopsis "Remote GUI support for LTK")
+    (description
+     "This LTK extension allows the GUI to be displayed on a computer different
+from the one running the Lisp program by using a TCP connection.")))
+
+(define-public cl-ltk-remote
+  (sbcl-package->cl-source-package sbcl-ltk-remote))
+
+(define-public sbcl-cl-lex
+  (let ((commit "f2dbbe25ef553005fb402d9a6203180c3fa1093b")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-lex")
+      (version (git-version "1.1.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/djr7C4/cl-lex.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1kg50f76bfpfxcv4dfivq1n9a0xlsra2ajb0vd68lxwgbidgyc2y"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+      (synopsis "Common Lisp macros for generating lexical analyzers")
+      (description
+       "This is a Common Lisp library providing a set of macros for generating
+lexical analyzers automatically.  The lexers generated using @code{cl-lex} can
+be used with @code{cl-yacc}.")
+      (home-page "https://github.com/djr7C4/cl-lex")
+      (license license:gpl3))))
+
+(define-public cl-lex
+  (sbcl-package->cl-source-package sbcl-cl-lex))
+
+(define-public ecl-cl-lex
+  (sbcl-package->ecl-package sbcl-cl-lex))
+
+(define-public sbcl-clunit2
+  (let ((commit "5e28343734eb9b7aee39306a614af92c1062d50b")
+        (revision "1"))
+    (package
+      (name "sbcl-clunit2")
+      (version (git-version "0.2.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://notabug.org/cage/clunit2.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1ngiapfki6nm8a555mzhb5p7ch79i3w665za5bmb5j7q34fy80vw"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Unit testing framework for Common Lisp")
+      (description
+       "CLUnit is a Common Lisp unit testing framework.  It is designed to be
+easy to use so that you can quickly start testing.")
+      (home-page "https://notabug.org/cage/clunit2")
+      (license license:expat))))
+
+(define-public cl-clunit2
+  (sbcl-package->cl-source-package sbcl-clunit2))
+
+(define-public ecl-clunit2
+  (sbcl-package->ecl-package sbcl-clunit2))
+
+(define-public sbcl-cl-colors2
+  (let ((commit "795aedee593b095fecde574bd999b520dd03ed24")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-colors2")
+      (version (git-version "0.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://notabug.org/cage/cl-colors2.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0hlyf4h5chkjdp9armla5w4kw5acikk159sym7y8c4jbjp9x47ih"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("clunit2" ,sbcl-clunit2)))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cl-ppcre" ,sbcl-cl-ppcre)))
+      (synopsis "Color library for Common Lisp")
+      (description
+       "This is a very simple color library for Common Lisp, providing:
+
+@itemize
+@item Types for representing colors in HSV and RGB spaces.
+@item Simple conversion functions between the above types (and also
+hexadecimal representation for RGB).
+@item Some predefined colors (currently X11 color names -- of course
+the library does not depend on X11).
+@end itemize\n")
+      (home-page "https://notabug.org/cage/cl-colors2")
+      (license license:boost1.0))))
+
+(define-public cl-colors2
+  (sbcl-package->cl-source-package sbcl-cl-colors2))
+
+(define-public ecl-cl-colors2
+  (sbcl-package->ecl-package sbcl-cl-colors2))
+
+(define-public sbcl-cl-jpeg
+  (let ((commit "ec557038128df6895fbfb743bfe8faf8ec2534af")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-jpeg")
+      (version (git-version "2.8" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/sharplispers/cl-jpeg.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1bkkiqz8fqldlj1wbmrccjsvxcwj98h6s4b6gslr3cg2wmdv5xmy"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "JPEG image library for Common Lisp")
+      (description
+       "This is a baseline JPEG codec written in Common Lisp.  It can be used
+for reading and writing JPEG image files.")
+      (home-page "https://github.com/sharplispers/cl-jpeg")
+      (license license:bsd-3))))
+
+(define-public cl-jpeg
+  (sbcl-package->cl-source-package sbcl-cl-jpeg))
+
+(define-public ecl-cl-jpeg
+  (sbcl-package->ecl-package sbcl-cl-jpeg))
+
+(define-public sbcl-nodgui
+  (let ((commit "bc59ed9b787dfc9e68ae3bd7f7e8507c5c619212")
+        (revision "1"))
+    (package
+      (name "sbcl-nodgui")
+      (version (git-version "0.0.5" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://notabug.org/cage/nodgui.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0xx0dk54d882i598ydnwmy7mnfk0b7vib3ddsgpqxhjck1rwq8l8"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cl-colors2" ,sbcl-cl-colors2)
+         ("cl-jpeg" ,sbcl-cl-jpeg)
+         ("cl-lex" ,sbcl-cl-lex)
+         ("cl-ppcre-unicode" ,sbcl-cl-ppcre-unicode)
+         ("cl-unicode" ,sbcl-cl-unicode)
+         ("cl-yacc" ,sbcl-cl-yacc)
+         ("clunit2" ,sbcl-clunit2)
+         ("named-readtables" ,sbcl-named-readtables)
+         ("parse-number" ,sbcl-parse-number)
+         ("tk" ,tk)))
+      (arguments
+       `(#:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'fix-paths
+                      (lambda* (#:key inputs #:allow-other-keys)
+                        (substitute* "src/wish-communication.lisp"
+                          (("#-freebsd \"wish\"")
+                           (string-append "#-freebsd \""
+                                          (assoc-ref inputs "tk")
+                                          "/bin/wish\"")))
+                        #t)))))
+      (synopsis "Common Lisp bindings for the Tk GUI toolkit")
+      (description
+       "Nodgui (@emph{No Drama GUI}) is a Common Lisp binding for the Tk GUI
+toolkit.  It also provides a few additional widgets more than the standard Tk
+ones.")
+      (home-page "https://www.autistici.org/interzona/nodgui.html")
+      (license license:llgpl))))
+
+(define-public cl-nodgui
+  (sbcl-package->cl-source-package sbcl-nodgui))
+
+(define-public ecl-nodgui
+  (sbcl-package->ecl-package sbcl-nodgui))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index aa37c4e38c..0538342977 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -2301,72 +2301,6 @@ transfer protocols.")
 (define-public opensmtpd
   (package
     (name "opensmtpd")
-    (version "6.0.3p1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.opensmtpd.org/archives/"
-                                  name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "10bsfsnlg9d9i6l2izdnxp05s3ri8fvwzqxvx1jmarc852382619"))
-              ;; Fixed upstream: <github.com/OpenSMTPD/OpenSMTPD/pull/835>.
-              (patches (search-patches "opensmtpd-fix-crash.patch"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("bdb" ,bdb)
-       ("libressl" ,libressl)
-       ("libevent" ,libevent)
-       ("libasr" ,libasr)
-       ("linux-pam" ,linux-pam)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("bison" ,bison)
-       ("groff" ,groff)))
-    (arguments
-     `(#:configure-flags
-       (list "--with-table-db" "--with-auth-pam" "--localstatedir=/var"
-             "--with-user-smtpd=smtpd" "--with-user-queue=smtpq"
-             "--with-group-queue=smtpq"
-             "--with-path-socket=/var/run" ; not default (./configure lies)
-             "--with-path-CAfile=/etc/ssl/certs/ca-certificates.crt")
-       #:phases
-       (modify-phases %standard-phases
-         ;; Fix some incorrectly hard-coded external tool file names.
-         (add-after 'unpack 'patch-FHS-file-names
-           (lambda _
-             (substitute* "smtpd/smtpctl.c"
-               (("/bin/cat") (which "cat"))
-               (("/bin/sh") (which "sh")))
-             #t))
-         ;; OpenSMTPD provides a single utility smtpctl to control the daemon and
-         ;; the local submission subsystem.  To accomodate systems that require
-         ;; historical interfaces such as sendmail, newaliases or makemap, the
-         ;; smtpctl utility can operate in compatibility mode if called with the
-         ;; historical name.
-         (add-after 'install 'install-compability-links
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out  (assoc-ref outputs "out"))
-                    (sbin (string-append out "/sbin/")))
-               (for-each (lambda (command)
-                           (symlink "smtpctl" (string-append sbin command)))
-                         '("makemap" "sendmail" "send-mail"
-                           "newaliases" "mailq")))
-             #t)))))
-    (synopsis "Lightweight SMTP daemon")
-    (description
-     "OpenSMTPD is an implementation of the server-side SMTP protocol, with
-some additional standard extensions.  It allows ordinary machines to exchange
-e-mails with other systems speaking the SMTP protocol.")
-    (home-page "https://www.opensmtpd.org")
-    (license (list bsd-2 bsd-3 bsd-4 (non-copyleft "file://COPYING")
-                   public-domain isc license:openssl))))
-
-;; OpenSMTPd 6.4 introduced a new and incompatible configuration file format.
-;; Use a different name, for now, to avoid auto-upgrades and broken mail boxes.
-;; OPENSMTP-CONFIGURATION in (gnu services mail) will also need an overhaul.
-(define-public opensmtpd-next
-  (package
-    (name "opensmtpd-next")
     (version "6.6.2p1")
     (source
      (origin
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 9241966d24..5ac3bd1403 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2016, 2019 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2016, 2017 John Darrington <jmd@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2014 Mathieu Lirzin <mathieu.lirzin@openmailbox.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
@@ -2411,7 +2411,7 @@ easy-to-write markup language for mathematics.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
+       (uri (string-append "https://portal.nersc.gov/project/sparse/superlu/"
                            "superlu_" version ".tar.gz"))
        (sha256
         (base32 "0qzlb7cd608q62kyppd0a8c65l03vrwqql6gsm465rky23b6dyr8"))
@@ -2457,7 +2457,7 @@ void mc64ad_ (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
      `(#:configure-flags '("-Denable_blaslib:BOOL=NO" ;do not use internal cblas
                            "-DTPL_BLAS_LIBRARIES=openblas"
                            "-DBUILD_SHARED_LIBS:BOOL=YES")))
-    (home-page "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/")
+    (home-page "https://portal.nersc.gov/project/sparse/superlu/")
     (synopsis "Supernodal direct solver for sparse linear systems")
     (description
      "SuperLU is a general purpose library for the direct solution of large,
@@ -2473,14 +2473,14 @@ also provides threshold-based ILU factorization preconditioners.")
 (define-public superlu-dist
   (package
     (name "superlu-dist")
-    (version "6.1.0")
+    (version "6.2.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
+       (uri (string-append "https://portal.nersc.gov/project/sparse/superlu/"
                            "superlu_dist_" version ".tar.gz"))
        (sha256
-        (base32 "0pqgcgh1yxhfzs99fas3mggajzd5wca3nbyp878rziy74gfk03dl"))
+        (base32 "1ynmwqajc9sc3my2hssa5k9s58ggvizqv9rdss0j7w99pbh5mnvw"))
        (modules '((guix build utils)))
        (snippet
         ;; Replace the non-free implementation of MC64 with a stub
@@ -2506,8 +2506,7 @@ void mc64ad_dist (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
               "RowPerm = NOROWPERM;"))
            #t))
        (patches (search-patches "superlu-dist-scotchmetis.patch"
-                                "superlu-dist-awpm-grid.patch"
-                                "superlu-dist-fix-mpi-deprecations.patch"))))
+                                "superlu-dist-awpm-grid.patch"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("tcsh" ,tcsh)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 81569d29b9..b1276e267b 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1949,9 +1949,9 @@ Telegram messenger.")
     (license license:gpl2+)))
 
 (define-public tdlib
-  (let ((commit "5efaf8c3b523797373c487d972ea514364e5eac2")
-        (revision "1")
-        (version "1.5.5"))
+  (let ((commit "278c7acdec83c5ac17d8e1ed0bb2cacbcea62460")
+        (revision "0")
+        (version "1.6.0"))
     (package
       (name "tdlib")
       (version (git-version version revision commit))
@@ -1962,7 +1962,7 @@ Telegram messenger.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1grflgvqqxbf84yi09j60a1cpbcrv85yhj9a735agi32hgd51whi"))
+                  "0zlzpl6fgszg18kwycyyyrnkm255dvc6fkq0b0y32m5wvwwl36cv"))
                 (file-name (git-file-name name version))))
       (build-system cmake-build-system)
       (arguments
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 5c2c91891c..ed339524c0 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
@@ -601,14 +601,14 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "3.2.0")
+    (version "3.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0v5nn7i2nbqr59jsw8cs2052hr7xd96x1sa3480g8ks5kahk7zac"))))
+        (base32 "0nz84zyhs4177ljxmv34vgc9kgg7ssxhxa4mssxqwh6nb00697sq"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index 7abe9ab6f0..de8239b7fe 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,7 +49,7 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages)
-  #:use-module ((guix licenses) #:select (openldap2.8 lgpl2.1+ gpl3+ psfl))
+  #:use-module ((guix licenses) #:select (openldap2.8 lgpl2.1+ gpl3+ psfl expat))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
@@ -367,3 +368,30 @@ Other features include:
 @end enumerate\n")
     ;; GPLv3+ with OpenSSL linking exception.
     (license gpl3+)))
+
+(define-public python-bonsai
+  (package
+    (name "python-bonsai")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "bonsai" version))
+       (sha256
+        (base32
+         "013bl6h1m3f7vg1lk89d4vi28wbf31zdcs4f9g8css7ngx63v6px"))))
+    (build-system python-build-system)
+    (inputs
+     `(("mit-krb5" ,mit-krb5)
+       ("cyrus-sasl" ,cyrus-sasl)
+       ("openldap" ,openldap)))
+    ;; disabling tests, since they require docker and extensive setup
+    (arguments `(#:tests? #f))
+    (home-page "https://github.com/noirello/bonsai")
+    (synopsis "Access LDAP directory servers from Python")
+    (description
+     "This is a module for handling LDAP operations in Python.  LDAP entries
+are mapped to a special Python case-insensitive dictionary, tracking the
+changes of the dictionary to modify the entry on the server easily.")
+    (license expat)))
+
diff --git a/gnu/packages/patches/opensmtpd-fix-crash.patch b/gnu/packages/patches/opensmtpd-fix-crash.patch
deleted file mode 100644
index 0030167533..0000000000
--- a/gnu/packages/patches/opensmtpd-fix-crash.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 9b5f70b93e038df5446bd37a4adac5a0380748e7 Mon Sep 17 00:00:00 2001
-From: johannes <johannes.brechtmann@gmail.com>
-Date: Wed, 21 Feb 2018 23:57:11 +0100
-Subject: [PATCH] crypt_checkpass: include HAVE_CRYPT_H definition, add NULL
- check
-
----
- openbsd-compat/crypt_checkpass.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/openbsd-compat/crypt_checkpass.c b/openbsd-compat/crypt_checkpass.c
-index dafd2dae..d10b3a57 100644
---- a/openbsd-compat/crypt_checkpass.c
-+++ b/openbsd-compat/crypt_checkpass.c
-@@ -1,5 +1,6 @@
- /* OPENBSD ORIGINAL: lib/libc/crypt/cryptutil.c */
- 
-+#include "includes.h"
- #include <errno.h>
- #ifdef HAVE_CRYPT_H
- #include <crypt.h>
-@@ -10,6 +11,8 @@
- int
- crypt_checkpass(const char *pass, const char *goodhash)
- {
-+	char *c;
-+
- 	if (goodhash == NULL)
- 		goto fail;
- 
-@@ -17,7 +20,11 @@ crypt_checkpass(const char *pass, const char *goodhash)
- 	if (strlen(goodhash) == 0 && strlen(pass) == 0)
- 		return 0;
- 
--	if (strcmp(crypt(pass, goodhash), goodhash) == 0)
-+	c = crypt(pass, goodhash);
-+	if (c == NULL)
-+		goto fail;
-+
-+	if (strcmp(c, goodhash) == 0)
- 		return 0;
- 
- fail:
-
diff --git a/gnu/packages/patches/sdl-pango-api_additions.patch b/gnu/packages/patches/sdl-pango-api_additions.patch
new file mode 100644
index 0000000000..5c02e79910
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-api_additions.patch
@@ -0,0 +1,128 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2004-12-10 10:06:33.000000000 +0100
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 14:56:35.362379428 +0200
+@@ -723,13 +723,9 @@
+     SDL_UnlockSurface(surface);

+ }

+ 

+-/*!

+-    Create a context which contains Pango objects.

+ 

+-    @return A pointer to the context as a SDLPango_Context*.

+-*/

+ SDLPango_Context*

+-SDLPango_CreateContext()

++SDLPango_CreateContext_GivenFontDesc(const char* font_desc)

+ {

+     SDLPango_Context *context = g_malloc(sizeof(SDLPango_Context));

+     G_CONST_RETURN char *charset;

+@@ -743,8 +739,7 @@
+     pango_context_set_language (context->context, pango_language_from_string (charset));

+     pango_context_set_base_dir (context->context, PANGO_DIRECTION_LTR);

+ 

+-    context->font_desc = pango_font_description_from_string(

+-	MAKE_FONT_NAME (DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE));

++    context->font_desc = pango_font_description_from_string(font_desc);

+ 

+     context->layout = pango_layout_new (context->context);

+ 

+@@ -762,6 +757,17 @@
+ }

+ 

+ /*!

++    Create a context which contains Pango objects.

++

++    @return A pointer to the context as a SDLPango_Context*.

++*/

++SDLPango_Context*

++SDLPango_CreateContext()

++{

++    SDLPango_CreateContext_GivenFontDesc(MAKE_FONT_NAME(DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE));

++}

++

++/*!

+     Free a context.

+ 

+     @param *context [i/o] Context to be free

+@@ -1053,6 +1059,20 @@
+     pango_layout_set_font_description (context->layout, context->font_desc);

+ }

+ 

++void

++SDLPango_SetText_GivenAlignment(

++    SDLPango_Context *context,

++    const char *text,

++    int length,

++    SDLPango_Alignment alignment)

++{

++    pango_layout_set_attributes(context->layout, NULL);

++    pango_layout_set_text (context->layout, text, length);

++    pango_layout_set_auto_dir (context->layout, TRUE);

++    pango_layout_set_alignment (context->layout, alignment);

++    pango_layout_set_font_description (context->layout, context->font_desc);

++}

++

+ /*!

+     Set plain text to context.

+     Text must be utf-8.

+@@ -1067,11 +1087,7 @@
+     const char *text,

+     int length)

+ {

+-    pango_layout_set_attributes(context->layout, NULL);

+-    pango_layout_set_text (context->layout, text, length);

+-    pango_layout_set_auto_dir (context->layout, TRUE);

+-    pango_layout_set_alignment (context->layout, PANGO_ALIGN_LEFT);

+-    pango_layout_set_font_description (context->layout, context->font_desc);

++    SDLPango_SetText_GivenAlignment(context, text, length, SDLPANGO_ALIGN_LEFT);

+ }

+ 

+ /*!

+Index: SDL_Pango-0.1.2/src/SDL_Pango.h
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.h	2004-12-10 10:06:33.000000000 +0100
++++ SDL_Pango-0.1.2/src/SDL_Pango.h	2007-09-18 15:00:41.736419485 +0200
+@@ -26,6 +26,7 @@
+ 

+ #ifndef SDL_PANGO_H

+ #define SDL_PANGO_H

++#define SDL_PANGO_HAS_GC_EXTENSIONS

+ 

+ #include "SDL.h"

+ 

+@@ -109,12 +110,20 @@
+     SDLPANGO_DIRECTION_NEUTRAL	/*! Neutral */

+ } SDLPango_Direction;

+ 

+-

++/*!

++    Specifies alignment of text. See Pango reference for detail

++*/

++typedef enum {

++    SDLPANGO_ALIGN_LEFT,

++    SDLPANGO_ALIGN_CENTER,

++    SDLPANGO_ALIGN_RIGHT

++} SDLPango_Alignment;

+ 

+ extern DECLSPEC int SDLCALL SDLPango_Init();

+ 

+ extern DECLSPEC int SDLCALL SDLPango_WasInit();

+ 

++extern DECLSPEC SDLPango_Context* SDLCALL SDLPango_CreateContext_GivenFontDesc(const char* font_desc);

+ extern DECLSPEC SDLPango_Context* SDLCALL SDLPango_CreateContext();

+ 

+ extern DECLSPEC void SDLCALL SDLPango_FreeContext(

+@@ -157,6 +166,12 @@
+     const char *markup,

+     int length);

+ 

++extern DECLSPEC void SDLCALL SDLPango_SetText_GivenAlignment(

++    SDLPango_Context *context,

++    const char *text,

++    int length,

++    SDLPango_Alignment alignment);

++

+ extern DECLSPEC void SDLCALL SDLPango_SetText(

+     SDLPango_Context *context,

+     const char *markup,

diff --git a/gnu/packages/patches/sdl-pango-blit_overflow.patch b/gnu/packages/patches/sdl-pango-blit_overflow.patch
new file mode 100644
index 0000000000..411d066a74
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-blit_overflow.patch
@@ -0,0 +1,32 @@
+Index: sdlpango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- sdlpango-0.1.2.orig/src/SDL_Pango.c	2007-10-08 19:44:15.000000000 +0000
++++ sdlpango-0.1.2/src/SDL_Pango.c	2007-10-08 19:45:27.000000000 +0000
+@@ -725,16 +725,23 @@
+     int x = rect->x;

+     int y = rect->y;

+ 

++    if(x < 0) {

++	width += x; x = 0;

++    }

+     if(x + width > surface->w) {

+ 	width = surface->w - x;

+-	if(width <= 0)

+-	    return;

++    }

++    if(width <= 0)

++	return;

++

++    if(y < 0) {

++	height += y; y = 0;

+     }

+     if(y + height > surface->h) {

+ 	height = surface->h - y;

+-	if(height <= 0)

+-	    return;

+     }

++    if(height <= 0)

++	return;

+ 

+     if(SDL_LockSurface(surface)) {

+ 	SDL_SetError("surface lock failed");

diff --git a/gnu/packages/patches/sdl-pango-fillrect_crash.patch b/gnu/packages/patches/sdl-pango-fillrect_crash.patch
new file mode 100644
index 0000000000..7a41bbf2fe
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-fillrect_crash.patch
@@ -0,0 +1,15 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2007-09-18 15:56:12.406223540 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 15:57:27.986530616 +0200
+@@ -932,7 +932,9 @@
+     width = PANGO_PIXELS (logical_rect.width);

+     height = PANGO_PIXELS (logical_rect.height);

+ 

+-    SDL_FillRect(surface, NULL, SDL_MapRGBA(surface->format, 0, 0, 0, 0));

++    if (width && height) {

++        SDL_FillRect(surface, NULL, SDL_MapRGBA(surface->format, 0, 0, 0, 0));

++    }

+ 

+     if((! context->tmp_ftbitmap) || context->tmp_ftbitmap->width < width

+ 	|| context->tmp_ftbitmap->rows < height)

diff --git a/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch b/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch
new file mode 100644
index 0000000000..3d4b10cc10
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch
@@ -0,0 +1,20 @@
+--- a/src/SDL_Pango.h
++++ b/src/SDL_Pango.h
+@@ -171,7 +171,7 @@
+     SDLPango_Direction direction);

+ 

+ 

+-#ifdef __FT2_BUILD_UNIX_H__

++#ifdef FT2BUILD_H_

+ 

+ extern DECLSPEC void SDLCALL SDLPango_CopyFTBitmapToSurface(

+     const FT_Bitmap *bitmap,

+@@ -179,7 +179,7 @@
+     const SDLPango_Matrix *matrix,

+     SDL_Rect *rect);

+ 

+-#endif	/* __FT2_BUILD_UNIX_H__ */

++#endif

+ 

+ 

+ #ifdef __PANGO_H__

diff --git a/gnu/packages/patches/sdl-pango-matrix_declarations.patch b/gnu/packages/patches/sdl-pango-matrix_declarations.patch
new file mode 100644
index 0000000000..c35d0a708d
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-matrix_declarations.patch
@@ -0,0 +1,131 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2007-09-18 15:03:10.732910311 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 15:04:41.970109622 +0200
+@@ -286,6 +286,59 @@
+ } contextImpl;

+ 

+ 

++const SDLPango_Matrix _MATRIX_WHITE_BACK

++    = {255, 0, 0, 0,

++       255, 0, 0, 0,

++       255, 0, 0, 0,

++       255, 255, 0, 0,};

++

++/*!

++    Specifies white back and black letter.

++*/

++const SDLPango_Matrix *MATRIX_WHITE_BACK = &_MATRIX_WHITE_BACK;

++

++const SDLPango_Matrix _MATRIX_BLACK_BACK

++    = {0, 255, 0, 0,

++       0, 255, 0, 0,

++       0, 255, 0, 0,

++       255, 255, 0, 0,};

++/*!

++    Specifies black back and white letter.

++*/

++const SDLPango_Matrix *MATRIX_BLACK_BACK = &_MATRIX_BLACK_BACK;

++

++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_BLACK_LETTER

++    = {0, 0, 0, 0,

++       0, 0, 0, 0,

++       0, 0, 0, 0,

++       0, 255, 0, 0,};

++/*!

++    Specifies transparent back and black letter.

++*/

++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER = &_MATRIX_TRANSPARENT_BACK_BLACK_LETTER;

++

++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_WHITE_LETTER

++    = {255, 255, 0, 0,

++       255, 255, 0, 0,

++       255, 255, 0, 0,

++       0, 255, 0, 0,};

++/*!

++    Specifies transparent back and white letter.

++*/

++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER = &_MATRIX_TRANSPARENT_BACK_WHITE_LETTER;

++

++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER

++    = {255, 255, 0, 0,

++       255, 255, 0, 0,

++       255, 255, 0, 0,

++       0, 0, 0, 0,};

++/*!

++    Specifies transparent back and transparent letter.

++    This is useful for KARAOKE like rendering.

++*/

++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER = &_MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER;

++

++

+ /*!

+     Initialize the Glib and Pango API.

+     This must be called before using other functions in this library,

+Index: SDL_Pango-0.1.2/src/SDL_Pango.h
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.h	2007-09-18 15:03:10.732910311 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.h	2007-09-18 15:06:24.919976401 +0200
+@@ -47,57 +47,27 @@
+     Uint8 m[4][4];  /*! Matrix variables */

+ } SDLPango_Matrix;

+ 

+-const SDLPango_Matrix _MATRIX_WHITE_BACK

+-    = {255, 0, 0, 0,

+-       255, 0, 0, 0,

+-       255, 0, 0, 0,

+-       255, 255, 0, 0,};

+-

+ /*!

+     Specifies white back and black letter.

+ */

+-const SDLPango_Matrix *MATRIX_WHITE_BACK = &_MATRIX_WHITE_BACK;

+-

+-const SDLPango_Matrix _MATRIX_BLACK_BACK

+-    = {0, 255, 0, 0,

+-       0, 255, 0, 0,

+-       0, 255, 0, 0,

+-       255, 255, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_WHITE_BACK;

+ /*!

+     Specifies black back and white letter.

+ */

+-const SDLPango_Matrix *MATRIX_BLACK_BACK = &_MATRIX_BLACK_BACK;

+-

+-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_BLACK_LETTER

+-    = {0, 0, 0, 0,

+-       0, 0, 0, 0,

+-       0, 0, 0, 0,

+-       0, 255, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_BLACK_BACK;

+ /*!

+     Specifies transparent back and black letter.

+ */

+-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER = &_MATRIX_TRANSPARENT_BACK_BLACK_LETTER;

+-

+-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_WHITE_LETTER

+-    = {255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       0, 255, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER;

+ /*!

+     Specifies transparent back and white letter.

+ */

+-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER = &_MATRIX_TRANSPARENT_BACK_WHITE_LETTER;

+-

+-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER

+-    = {255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       0, 0, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER;

+ /*!

+     Specifies transparent back and transparent letter.

+     This is useful for KARAOKE like rendering.

+ */

+-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER = &_MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER;

++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER;

+ 

+ /*!

+     Specifies direction of text. See Pango reference for detail

diff --git a/gnu/packages/patches/sdl-pango-sans-serif.patch b/gnu/packages/patches/sdl-pango-sans-serif.patch
new file mode 100644
index 0000000000..ccdc8150a7
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-sans-serif.patch
@@ -0,0 +1,13 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2007-09-18 15:12:20.736253215 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 15:12:44.621614364 +0200
+@@ -234,7 +234,7 @@
+ //! non-zero if initialized

+ static int IS_INITIALIZED = 0;

+ 

+-#define DEFAULT_FONT_FAMILY "Sans"

++#define DEFAULT_FONT_FAMILY "sans-serif"

+ #define DEFAULT_FONT_SIZE 12

+ #define DEFAULT_DPI 96

+ #define _MAKE_FONT_NAME(family, size) family " " #size

diff --git a/gnu/packages/patches/superlu-dist-fix-mpi-deprecations.patch b/gnu/packages/patches/superlu-dist-fix-mpi-deprecations.patch
deleted file mode 100644
index 25f0aaf2f3..0000000000
--- a/gnu/packages/patches/superlu-dist-fix-mpi-deprecations.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From c9cbcf8730221e366c7495073f8f8d819ee8ce89 Mon Sep 17 00:00:00 2001
-From: Eric Bavier <bavier@member.fsf.org>
-Date: Wed, 6 Feb 2019 10:06:59 -0600
-Subject: [PATCH] Replace deprecated MPI_Attr_get.
-
-Fixes build with OpenMPI version 4.0.
-
-* SRC/pdgstrf.c, SRC/pdgstrf.c, SRC/superlu_grid.c: 'MPI_Attr_get' ->
-  'MPI_Comm_get_attr'.
----
- SRC/pdgstrf.c      | 2 +-
- SRC/pzgstrf.c      | 2 +-
- SRC/superlu_grid.c | 2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/SRC/pdgstrf.c b/SRC/pdgstrf.c
-index 736ffa2..f92a1ba 100644
---- a/SRC/pdgstrf.c
-+++ b/SRC/pdgstrf.c
-@@ -426,7 +426,7 @@ pdgstrf(superlu_dist_options_t * options, int m, int n, double anorm,
-     s_eps = smach_dist("Epsilon");
-     thresh = s_eps * anorm;
- 
--    MPI_Attr_get (MPI_COMM_WORLD, MPI_TAG_UB, &attr_val, &flag);
-+    MPI_Comm_get_attr (MPI_COMM_WORLD, MPI_TAG_UB, &attr_val, &flag);
-     if (!flag) {
-         fprintf (stderr, "Could not get TAG_UB\n");
-         return (-1);
-diff --git a/SRC/pzgstrf.c b/SRC/pzgstrf.c
-index 8896548..8800057 100644
---- a/SRC/pzgstrf.c
-+++ b/SRC/pzgstrf.c
-@@ -426,7 +426,7 @@ pzgstrf(superlu_dist_options_t * options, int m, int n, double anorm,
-     s_eps = smach_dist("Epsilon");
-     thresh = s_eps * anorm;
- 
--    MPI_Attr_get (MPI_COMM_WORLD, MPI_TAG_UB, &attr_val, &flag);
-+    MPI_Comm_get_attr (MPI_COMM_WORLD, MPI_TAG_UB, &attr_val, &flag);
-     if (!flag) {
-         fprintf (stderr, "Could not get TAG_UB\n");
-         return (-1);
-diff --git a/SRC/superlu_grid.c b/SRC/superlu_grid.c
-index 1213d27..0c0fb90 100644
---- a/SRC/superlu_grid.c
-+++ b/SRC/superlu_grid.c
-@@ -150,7 +150,7 @@ void superlu_gridmap(
-     {
- 	int tag_ub;
- 	if ( !grid->iam ) {
--	    MPI_Attr_get(Bcomm, MPI_TAG_UB, &tag_ub, &info);
-+	    MPI_Comm_get_attr(Bcomm, MPI_TAG_UB, &tag_ub, &info);
- 	    printf("MPI_TAG_UB %d\n", tag_ub);
- 	    /* returns 4295677672
- 	       In reality it is restricted to no greater than 16384. */
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/t4k-common-libpng16.patch b/gnu/packages/patches/t4k-common-libpng16.patch
new file mode 100644
index 0000000000..17967773de
--- /dev/null
+++ b/gnu/packages/patches/t4k-common-libpng16.patch
@@ -0,0 +1,26 @@
+Description: Fix for libpng 1.6
+Author: Programmer Nerd <theprogrammernerd@gmail.com>
+Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743388#20
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743388
+Reviewed-by: Tobias Frost <tobi@debian.org>>
+Last-Update: 2016-04-07
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/src/t4k_loaders.c
++++ b/src/t4k_loaders.c
+@@ -1028,12 +1028,9 @@
+       {
+         png_init_io(png_ptr, fi);
+ 
+-        info_ptr->width = surf->w;
+-        info_ptr->height = surf->h;
+-        info_ptr->bit_depth = 8;
+-        info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
+-        info_ptr->interlace_type = 1;
+-        info_ptr->valid = 0;	/* will be updated by various png_set_FOO() functions */
++	png_set_IHDR(png_ptr, info_ptr, surf->w, surf->h, 8,
++		PNG_COLOR_TYPE_RGB_ALPHA,  PNG_INTERLACE_NONE,
++                PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+ 
+         png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
+                        PNG_sRGB_INTENT_PERCEPTUAL);
diff --git a/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch b/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
new file mode 100644
index 0000000000..3feeb1dc5e
--- /dev/null
+++ b/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
@@ -0,0 +1,54 @@
+From 3fc056f0b9f7c26e58a1e947c8c0184e55919614 Mon Sep 17 00:00:00 2001
+From: David Abdurachmanov <david.abdurachmanov@gmail.com>
+Date: Wed, 21 Aug 2019 12:07:20 -0700
+Subject: [PATCH] qemu-riscv64_smode, sifive-fu540: fix extlinux (define
+ preboot)
+Forwarded: https://patchwork.ozlabs.org/patch/1151125/
+
+Commit 37304aaf60bf92a5dc3ef222ba520698bd862a44 removed preboot
+commands in RISC-V targets and broke extlinux support as reported
+by Fu Wei <wefu@redhat.com>.
+
+The patch finishes migration of CONFIG_USE_PREBOOT and CONFIG_REBOOT
+to Kconfig.
+
+Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
+---
+ configs/qemu-riscv64_smode_defconfig | 2 ++
+ configs/sifive_fu540_defconfig       | 2 ++
+ include/configs/sifive-fu540.h       | 4 ----
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+Index: u-boot/configs/qemu-riscv64_smode_defconfig
+===================================================================
+--- u-boot.orig/configs/qemu-riscv64_smode_defconfig
++++ u-boot/configs/qemu-riscv64_smode_defconfig
+@@ -14,3 +14,5 @@ CONFIG_CMD_NVEDIT_EFI=y
+ CONFIG_OF_PRIOR_STAGE=y
+ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+ CONFIG_DM_MTD=y
++CONFIG_USE_PREBOOT=y
++CONFIG_PREBOOT="setenv fdt_addr ${fdtcontroladdr}; fdt addr ${fdtcontroladdr};"
+Index: u-boot/configs/sifive_fu540_defconfig
+===================================================================
+--- u-boot.orig/configs/sifive_fu540_defconfig
++++ u-boot/configs/sifive_fu540_defconfig
+@@ -12,3 +12,5 @@ CONFIG_DISPLAY_BOARDINFO=y
+ CONFIG_DEFAULT_DEVICE_TREE="hifive-unleashed-a00"
+ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+ CONFIG_DM_MTD=y
++CONFIG_USE_PREBOOT=y
++CONFIG_PREBOOT="setenv fdt_addr ${fdtcontroladdr}; fdt addr ${fdtcontroladdr};"
+Index: u-boot/include/configs/sifive-fu540.h
+===================================================================
+--- u-boot.orig/include/configs/sifive-fu540.h
++++ u-boot/include/configs/sifive-fu540.h
+@@ -40,8 +40,4 @@
+ 	"ramdisk_addr_r=0x88300000\0" \
+ 	BOOTENV
+ 
+-#define CONFIG_PREBOOT \
+-	"setenv fdt_addr ${fdtcontroladdr};" \
+-	"fdt addr ${fdtcontroladdr};"
+-
+ #endif /* __CONFIG_H */
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index 70abc7bad1..7a0f3ae6ac 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx))
@@ -84,11 +86,20 @@ Python strings.")
        (uri (pypi-uri "lz4" version))
        (sha256
         (base32
-         "0ghv1xbaq693kgww1x9c22bplz479ls9szjsaa4ig778ls834hm0"))))
+         "0ghv1xbaq693kgww1x9c22bplz479ls9szjsaa4ig778ls834hm0"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove bundled copy of lz4.
+           (delete-file-recursively "lz4libs")
+           #t))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-nose" ,python-nose)
+     `(("pkg-config" ,pkg-config)
+       ("python-nose" ,python-nose)
        ("python-setuptools-scm" ,python-setuptools-scm)))
+    (inputs
+     `(("lz4" ,lz4)))
     (home-page "https://github.com/python-lz4/python-lz4")
     (synopsis "LZ4 bindings for Python")
     (description
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
index 7be18cb8e3..74efae753c 100644
--- a/gnu/packages/rsync.scm
+++ b/gnu/packages/rsync.scm
@@ -47,8 +47,10 @@
              (base32
               "1h0011dj6jgqpgribir4anljjv7bbrdcs8g91pbsmzf5zr75bk2m"))))
    (build-system gnu-build-system)
-   (inputs `(("perl" ,perl)
-             ("acl" ,acl)))
+   (native-inputs
+    `(("perl" ,perl)))
+   (inputs
+    `(("acl" ,acl)))
    (synopsis "Remote (and local) file copying tool")
    (description
     "Rsync is a fast and versatile file copying tool.  It can copy locally,
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index c5c4d8672d..98868cdda3 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -2836,13 +2836,13 @@ definitions on a Ruby object.")
 (define-public ruby-redcarpet
   (package
     (name "ruby-redcarpet")
-    (version "3.4.0")
+    (version "3.5.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "redcarpet" version))
               (sha256
                (base32
-                "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"))))
+                "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -4784,7 +4784,7 @@ unacceptable HTML and/or CSS from a string.")
 (define-public ruby-oj
   (package
     (name "ruby-oj")
-    (version "3.6.7")
+    (version "3.10.1")
     (source
      (origin
        (method git-fetch)
@@ -4796,7 +4796,7 @@ unacceptable HTML and/or CSS from a string.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1fqx58pwjiln7053lw2jy6ns4agcpxq2ac4f2fkd2ca3fxwpmh03"))))
+         "0i5xjx4sh816zx2c1a4d1q67k7vllg5jnnc4jy6zhbmwi1dvp5vw"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "test_all"
@@ -4955,19 +4955,26 @@ including comments and whitespace.")
 (define-public ruby-unf-ext
   (package
     (name "ruby-unf-ext")
-    (version "0.0.7.1")
+    (version "0.0.7.6")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "unf_ext" version))
               (sha256
                (base32
-                "0ly2ms6c3irmbr1575ldyh52bz2v0lzzr2gagf0p526k12ld2n5b"))))
+                "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-ext
-           (lambda _ (invoke "rake" "compile:unf_ext"))))))
+           (lambda _ (invoke "rake" "compile:unf_ext")))
+         (add-before 'check 'lose-rake-compiler-dock-dependency
+           (lambda _
+             ;; rake-compiler-dock is listed in the gemspec, but only
+             ;; required when cross-compiling.
+             (substitute* "unf_ext.gemspec"
+               ((".*rake-compiler-dock.*") ""))
+             #t)))))
     (native-inputs
      `(("bundler" ,bundler)
        ("ruby-rake-compiler" ,ruby-rake-compiler)
@@ -6076,14 +6083,14 @@ neither too verbose nor too minimal.")
 (define-public ruby-sqlite3
   (package
     (name "ruby-sqlite3")
-    (version "1.3.13")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sqlite3" version))
        (sha256
         (base32
-         "01ifzp8nwzqppda419c9wcvr8n82ysmisrs0hph9pdmv1lpa4f5i"))))
+         "0lja01cp9xd5m6vmx99zwn4r7s97r1w5cb76gqd8xhbm1wxyzf78"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -7764,23 +7771,34 @@ features that don't exist yet like variables, nesting, mixins and inheritance.")
 (define-public ruby-sassc
   (package
     (name "ruby-sassc")
-    (version "2.0.1")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sassc" version))
        (sha256
         (base32
-         "1sr4825rlwsrl7xrsm0sgalcpf5zgp4i56dbi3qxfa9lhs8r6zh4"))))
+         "09bnid7r5z5hcin5hykvpvv8xig27wbbckxwis60z2aaxq4j9siz"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:phases
+     '(#:modules ((guix build ruby-build-system)
+                  (guix build utils)
+                  (ice-9 textual-ports))
+       #:phases
        (modify-phases %standard-phases
          ;; TODO: This would be better as a snippet, but the ruby-build-system
          ;; doesn't seem to support that
          (add-after 'unpack 'remove-libsass
            (lambda _
              (delete-file-recursively "ext")
+             (with-atomic-file-replacement "sassc.gemspec"
+               (lambda (in out)
+                 (let* ((gemspec (get-string-all in))
+                        (index (string-contains gemspec "libsass_dir")))
+                   (display (string-append
+                             (string-take gemspec index)
+                             "\nend\n")
+                            out))))
              #t))
          (add-after 'unpack 'dont-check-the-libsass-version
            (lambda _
@@ -7790,18 +7808,17 @@ features that don't exist yet like variables, nesting, mixins and inheritance.")
          (add-after 'unpack 'remove-git-from-gemspec
            (lambda _
              (substitute* "sassc.gemspec"
-               (("`git ls-files -z`") "`find . -type f -print0 |sort -z`")
-               (("`git submodule --quiet foreach pwd`") "''"))
+               (("`git ls-files -z`") "`find . -type f -print0 |sort -z`"))
              #t))
          (add-after 'unpack 'remove-extensions-from-gemspec
            (lambda _
              (substitute* "sassc.gemspec"
-               (("\\[\"ext/Rakefile\"\\]") "[]"))
+               (("\\[\"ext/extconf.rb\"\\]") "[]"))
              #t))
          (add-after 'unpack 'fix-Rakefile
            (lambda _
              (substitute* "Rakefile"
-               (("test: 'libsass:compile'") ":test"))
+               (("test: 'compile:libsass'") ":test"))
              #t))
          (add-after 'unpack 'remove-unnecessary-dependencies
            (lambda _
@@ -7826,6 +7843,7 @@ features that don't exist yet like variables, nesting, mixins and inheritance.")
      `(("libsass" ,libsass)))
     (native-inputs
      `(("bundler" ,bundler)
+       ("ruby-rake-compiler" ,ruby-rake-compiler)
        ("ruby-minitest-around" ,ruby-minitest-around)
        ("ruby-test-construct" ,ruby-test-construct)))
     (synopsis "Use libsss from Ruby")
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 6cd875df46..d0db693e30 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -168,14 +168,14 @@ anywhere.")
 (define-public samba
   (package
     (name "samba")
-    (version "4.11.4")
+    (version "4.11.6")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.samba.org/pub/samba/stable/"
                                  "samba-" version ".tar.gz"))
              (sha256
               (base32
-               "096vc6j36924xrjzqr6lqmf9qwgwv9szxb35rsfi0mq78nx72m5r"))))
+               "0f7g17zw4nzk1bjnqqrr84hkyq9vn0k7zyim2i177xkigd6qyhwi"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index 98f7fd203a..6adaba18cd 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -39,16 +39,16 @@
 (define-public sane-backends-minimal
   (package
     (name "sane-backends-minimal")
-    (version "1.0.28")
+    (version "1.0.29")
     (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://gitlab.com/sane-project/backends/uploads/"
-                   "9e718daff347826f4cfe21126c8d5091/"
+                   "54f858b20a364fc35d820df935a86478/"
                    "sane-backends-" version ".tar.gz"))
              (sha256
               (base32
-               "00yy8q9hqdf0zjxxl4d8njr9zf0hhi3a9ib23ikc2anqf8zhy9ii"))
+               "1vd83vhl0hddwsdh2jb0k3yzycfghi2xa9lc3ga9r12rbx77n0ma"))
              (modules '((guix build utils)))
              (snippet
               ;; Generated HTML files and udev rules normally embed a
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index a01cafb34a..26c9bd5eb3 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
@@ -42,10 +42,12 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages fcitx)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages image)
@@ -326,6 +328,54 @@ SDL.")
     (home-page "https://www.libsdl.org/projects/SDL_net/")
     (license zlib)))
 
+(define-public sdl-pango
+  (package
+    (name "sdl-pango")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://sourceforge/sdlpango/SDL_Pango/" version "/"
+             "SDL_Pango-" version  ".tar.gz"))
+       (sha256
+        (base32 "197baw1dsg0p4pljs5k0fshbyki00r4l49m1drlpqw6ggawx6xbz"))
+       (patches
+        (search-patches
+         "sdl-pango-api_additions.patch"
+         "sdl-pango-blit_overflow.patch"
+         "sdl-pango-fillrect_crash.patch"
+         "sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch"
+         "sdl-pango-matrix_declarations.patch"
+         "sdl-pango-sans-serif.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'autogen
+           ;; Force reconfiguration because the included libtool
+           ;; generates linking errors.
+           (lambda _ (invoke "autoreconf" "-vif"))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ("harfbuzz" ,harfbuzz)
+       ("pango" ,pango)
+       ("sdl" ,sdl)))
+    (home-page "http://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
+tagged text in SDL applications.")
+    (license lgpl2.1)))
+
 (define-public sdl-ttf
   (package
     (name "sdl-ttf")
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index d4a48c48c5..89dbe4578b 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;;
@@ -360,14 +360,14 @@ over the Internet in an HTTP and CDN friendly way;
 (define-public rclone
   (package
     (name "rclone")
-    (version "1.50.2")
+    (version "1.51.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/rclone/rclone/releases/download/"
                            "v" version "/rclone-v" version ".tar.gz"))
        (sha256
-        (base32 "14b0k5nb85v0mxmdpqxf8avha0wwc3f4dbj1s8h3hkaifa59kn3d"))))
+        (base32 "1vi7sbdr5irlgxn080nwzs9lr893cxk59y4vnannzr8prvzvgd9y"))))
     ;; FIXME: Rclone bundles some libraries Guix already provides.  Need to
     ;; un-bundle them.
     (build-system go-build-system)
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 5414e663f4..f04385ca1e 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -29,7 +29,7 @@
 (define-public tbb
   (package
     (name "tbb")
-    (version "2020.0")
+    (version "2020.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -38,7 +38,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "11prl038dh8gprvn5f5p16af2rgh4lr3bfyyvavgfl3jdvsj2mqh"))
+                "1vrh1mr9jmj46as9y8j5q1hpvihzd1iq4jr1y4x9a19dw8b7yk56"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 7806a4c8b2..5d49d5d83d 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -657,15 +657,14 @@ and Octave.  TeXmacs is completely extensible via Guile.")
 (define-public scintilla
   (package
     (name "scintilla")
-    (version "4.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (let ((v (apply string-append (string-split version #\.))))
-                     (string-append
-                      "https://www.scintilla.org/scintilla" v ".tgz")))
-              (sha256
-               (base32
-                "01gq31ggvasw4sy9xs544h7v1dmxrlxs5bzxpasqb9yi3ps3nl0f"))))
+    (version "4.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (let ((v (apply string-append (string-split version #\.))))
+              (string-append "https://www.scintilla.org/scintilla" v ".tgz")))
+       (sha256
+        (base32 "0c52b2wg0y55kv3w7rnzp0nbd1yn2kksy0w8bjdp3gkl0v28wwx5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list "GTK3=1" "CC=gcc" "-Cgtk")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 079c5550b6..2a6f121219 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -122,7 +122,7 @@ in intelligent transportation networks.")
 (define-public p11-kit
   (package
     (name "p11-kit")
-    (version "0.23.19")
+    (version "0.23.20")
     (source
      (origin
       (method url-fetch)
@@ -130,7 +130,7 @@ in intelligent transportation networks.")
                           "download/" version "/p11-kit-" version ".tar.xz"))
       (sha256
        (base32
-        "1w7i4f5lc8darjkfjsm1ldvhkv0x29mvwg89klmh5kb2xqf6x4wi"))))
+        "0131maw666ha4d6iyj13fkz18c4pnb3lw2xwv5kvkmnzqcj61n0l"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 7b3e393dc9..19e6ccb182 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2015, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Alex Vong <alexvong1995@gmail.com>
@@ -23,7 +23,7 @@
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2018, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Brendan Tildesley <mail@brendan.scot>
@@ -337,52 +337,59 @@ a shared library and encoder and decoder command-line executables.")
     (license license:gpl2+)))
 
 (define-public libx264
-  (package
-    (name "libx264")
-    (version "20180810-2245")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://download.videolan.org/pub/x264/snapshots/"
-                                  "x264-snapshot-" version "-stable.tar.bz2"))
-              (sha256
-               (base32
-                "0f25f39imas9pcqm7lnaa0shhjmf42hdx7jxzcnvxc7qsb7lh1bv"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("nasm" ,nasm)))
-    ;; TODO: Add gpac input
-    (arguments
-     `(#:tests? #f  ;no check target
-       #:configure-flags '("--enable-shared"
-                           ;; Don't build the command-line program.  If we
-                           ;; want it later, we should do so in a different
-                           ;; package to avoid a circular dependency (the x264
-                           ;; program depends on ffmpeg and ffmpeg depends on
-                           ;; libx264).
-                           "--disable-cli"
-
-                           ;; On MIPS, we must pass "--disable-asm" or else
-                           ;; configure fails after printing: "You specified a
-                           ;; pre-MSA CPU in your CFLAGS. If you really want
-                           ;; to run on such a CPU, configure with
-                           ;; --disable-asm."
-                           ,@(if (string-prefix? "mips"
-                                                 (or (%current-target-system)
-                                                     (%current-system)))
-                                 '("--disable-asm")
-                                 '()))))
-    (home-page "https://www.videolan.org/developers/x264.html")
-    (synopsis "H.264 video coding library")
-    (description "libx264 is an advanced encoding library for creating
+  ;; There are no tags in the repository, so we take the version number from
+  ;; the X264_BUILD variable defined in x264.h.
+  (let ((version "159")
+        (commit "1771b556ee45207f8711744ccbd5d42a3949b14c")
+        (revision "0"))
+    (package
+      (name "libx264")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://code.videolan.org/videolan/x264.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0kmi78gs5101d4df33il5bmjbns54nvdjsyn44xiw60lwsg11vwz"))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("pkg-config" ,pkg-config)
+         ("nasm" ,nasm)))
+      ;; TODO: Add gpac input
+      (arguments
+       `(#:tests? #f                    ;no check target
+         #:configure-flags '("--enable-shared"
+                             ;; Don't build the command-line program.  If we
+                             ;; want it later, we should do so in a different
+                             ;; package to avoid a circular dependency (the x264
+                             ;; program depends on ffmpeg and ffmpeg depends on
+                             ;; libx264).
+                             "--disable-cli"
+
+                             ;; On MIPS, we must pass "--disable-asm" or else
+                             ;; configure fails after printing: "You specified a
+                             ;; pre-MSA CPU in your CFLAGS. If you really want
+                             ;; to run on such a CPU, configure with
+                             ;; --disable-asm."
+                             ,@(if (string-prefix? "mips"
+                                                   (or (%current-target-system)
+                                                       (%current-system)))
+                                   '("--disable-asm")
+                                   '()))))
+      (home-page "https://www.videolan.org/developers/x264.html")
+      (synopsis "H.264 video coding library")
+      (description "libx264 is an advanced encoding library for creating
 H.264 (MPEG-4 AVC) video streams.")
-    (license (list license:gpl2+         ;most files
-                   license:isc           ;common/x86/x86inc.asm
-                   license:lgpl2.1+      ;extras/getopt.c
-                   license:bsd-3         ;extras/inttypes.h
-                   (license:non-copyleft ;extras/cl*.h
-                    "file://extras/cl.h"
-                    "See extras/cl.h in the distribution.")))))
+      (license (list license:gpl2+       ;most files
+                     license:isc         ;common/x86/x86inc.asm
+                     license:lgpl2.1+    ;extras/getopt.c
+                     license:bsd-3       ;extras/inttypes.h
+                     (license:non-copyleft ;extras/cl*.h
+                      "file://extras/cl.h"
+                      "See extras/cl.h in the distribution."))))))
 
 (define-public mkvtoolnix
   (package
@@ -1349,7 +1356,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
 (define-public mpv
   (package
     (name "mpv")
-    (version "0.31.0")
+    (version "0.32.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1358,7 +1365,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "138m09l4wi6ifbi15z76j578plmxkclhlzfryasfcdp8hswhs59r"))))
+                "0kmy1q0hp87vq4rpv7py04x8bpg1wmlzaibavmkf713jqp6qy596"))))
     (build-system waf-build-system)
     (native-inputs
      `(("perl" ,perl) ; for zsh completion file
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 6f45072772..15b5dedd16 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -36,6 +36,7 @@
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>
 ;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1140,6 +1141,36 @@ implementation that is simple, portable, flexible, lightweight, low level, and
 high performance.")
     (license license:bsd-3)))
 
+(define-public wslay
+  (package
+    (name "wslay")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tatsuhiro-t/wslay.git")
+             (commit (string-append "release-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ak9a6hsanhys40yhv7c2gqkfghpm6jx36j1pnml8ajvgaky5q98"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("cunit" ,cunit) ; For tests.
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python-sphinx" ,python-sphinx)))
+    (home-page "https://tatsuhiro-t.github.io/wslay/")
+    (synopsis "C WebSocket library")
+    (description "@code{Wslay} is an event-based C library for the WebSocket
+protocol version 13, described in RFC 6455.  Besides a high-level API it
+provides callbacks for sending and receiving frames directly.  @code{Wslay}
+only supports the data transfer part of WebSocket protocol and does not
+perform the opening handshake in HTTP.")
+    (license license:expat)))
+
 (define-public libpsl
   (package
     (name "libpsl")
@@ -5073,21 +5104,20 @@ w3c webidl files and a binding configuration file.")
          (delete 'configure)
          (add-after 'build 'adjust-welcome
            (lambda _
-             ;; First, fix some unended tags and simple substitutions
              (substitute* "frontends/gtk/res/welcome.html"
+             ;; Close some XHTML tags.
                (("<(img|input)([^>]*)>" _ tag contents)
                 (string-append "<" tag contents " />"))
-               (("Licence") "License") ;prefer GNU spelling
+               ;; Increase freedom.
                ((" open source") ", free software")
-               (("web&nbsp;site") "website")
-               ;; Prefer privacy-respecting default search engine
+               ;; Prefer a more privacy-respecting default search engine.
                (("www.google.co.uk") "www.duckduckgo.com/html")
                (("Google Search") "DuckDuckGo Search")
                (("name=\"btnG\"") ""))
-             ;; Remove default links so it doesn't seem we're endorsing them
+             ;; Remove default links so it doesn't seem we're endorsing them.
              (with-atomic-file-replacement "frontends/gtk/res/welcome.html"
                (lambda (in out)
-                 ;; Leave the DOCTYPE header as is
+                 ;; Leave the DOCTYPE header as is.
                  (display (read-line in 'concat) out)
                  (sxml->xml
                   (let rec ((sxml (xml->sxml in)))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index a9113923dd..a638ae44e2 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -30,6 +30,8 @@
 ;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020 David Wilson <david@daviwil.com>
+;;; Copyright © 2020 Ivan Vilata i Balaguer <ivan@selidor.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,6 +59,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system scons)
   #:use-module (gnu packages)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages admin)
@@ -2005,3 +2008,104 @@ The cutbuffer and clipboard selection are always synchronized.")
 can optionally use some appearance settings from XSettings, tint2 and GTK.")
     (home-page "https://jgmenu.github.io/")
     (license license:gpl2)))
+
+(define-public xwrits
+  (package
+    (name "xwrits")
+    (version "2.26")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.lcdf.org/~eddietwo/xwrits/"
+                           "xwrits-" version ".tar.gz"))
+       (sha256
+        (base32 "1n7y0fqpcvmzznvbsn14hzy5ddaa3lilm8aw6ckscqndnh4lijma"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-docs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/xwrits")))
+               (install-file "GESTURES" doc)
+               (install-file "README" doc)
+               #t))))))
+    (inputs
+     `(("libx11" ,libx11)
+       ("libxinerama" ,libxinerama)))
+    (home-page "https://www.lcdf.org/~eddietwo/xwrits/")
+    (synopsis "Reminds you to take wrist breaks")
+    (description "Xwrits reminds you to take wrist breaks for prevention or
+management of repetitive stress injuries.  When you should take a break, it
+pops up an X window, the warning window.  You click on the warning window,
+then take a break.  The window changes appearance while you take the break.
+It changes again when your break is over.  Then you just resume typing.
+Xwrits hides itself until you should take another break.")
+    (license license:gpl2)))
+
+(define-public xsettingsd
+  (package
+    (name "xsettingsd")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/derat/xsettingsd.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "05m4jlw0mgwp24cvyklncpziq1prr2lg0cq9c055sh4n9d93d07v"))))
+    (build-system scons-build-system)
+    (inputs
+     `(("libx11" ,libx11)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("googletest" ,googletest)
+       ("googletest-source" ,(package-source googletest))))
+    (arguments
+     `(#:scons ,scons-python2
+       #:scons-flags
+       (list "CC=gcc")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'patch-sconstruct
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "SConstruct"
+               ;; scons doesn't pick up environment variables automatically
+               ;; so it needs help to find path variables
+               (("env = Environment\\(")
+                "env = Environment(
+                         ENV = {
+                           'PATH': os.environ['PATH'],
+                           'CPATH': os.environ['CPATH'],
+                           'LIBRARY_PATH': os.environ['LIBRARY_PATH'],
+                           'PKG_CONFIG_PATH': os.environ['PKG_CONFIG_PATH']
+                         },")
+               ;; Update path to gtest source files used in tests
+               (("/usr/src/gtest") (string-append
+                                    (assoc-ref inputs "googletest-source")
+                                    "/googletest"))
+               ;; Exclude one warning that causes a build error
+               (("-Werror") "-Werror -Wno-error=sign-compare"))
+             #t))
+         ;; The SConstruct script doesn't configure installation so
+         ;; binaries must be copied to the output path directly
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (mkdir-p bin)
+               (install-file "xsettingsd" bin)
+               (install-file "dump_xsettings" bin)
+               #t))))))
+    (home-page "https://github.com/derat/xsettingsd")
+    (synopsis "Xorg settings daemon")
+    (description "@command{xsettingsd} is a lightweight daemon that provides settings to
+Xorg applications via the XSETTINGS specification.  It is used for defining
+font and theme settings when a complete desktop environment (GNOME, KDE) is
+not running.  With a simple @file{.xsettingsd} configuration file one can avoid
+configuring visual settings in different UI toolkits separately.")
+    (license license:bsd-3)))
diff --git a/gnu/services/getmail.scm b/gnu/services/getmail.scm
index 7d77888517..933d820bc5 100644
--- a/gnu/services/getmail.scm
+++ b/gnu/services/getmail.scm
@@ -112,7 +112,7 @@
 @samp{passwd} and @samp{static}.")
   (server
    (string 'unset)
-   "Name or IP adddress of the server to retrieve mail from.")
+   "Name or IP address of the server to retrieve mail from.")
   (username
    (string 'unset)
    "Username to login to the mail server with.")
diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm
new file mode 100644
index 0000000000..caa0326c31
--- /dev/null
+++ b/gnu/services/linux.scm
@@ -0,0 +1,125 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2020 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 (gnu services linux)
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:use-module (guix modules)
+  #:use-module (gnu services)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages linux)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
+  #:export (earlyoom-configuration
+            earlyoom-configuration?
+            earlyoom-configuration-earlyoom
+            earlyoom-configuration-minimum-available-memory
+            earlyoom-configuration-minimum-free-swap
+            earlyoom-configuration-prefer-regexp
+            earlyoom-configuration-avoid-regexp
+            earlyoom-configuration-memory-report-interval
+            earlyoom-configuration-ignore-positive-oom-score-adj?
+            earlyoom-configuration-show-debug-messages?
+            earlyoom-configuration-send-notification-command
+            earlyoom-service-type))
+
+
+;;;
+;;; Early OOM daemon.
+;;;
+
+(define-record-type* <earlyoom-configuration>
+  earlyoom-configuration make-earlyoom-configuration
+  earlyoom-configuration?
+  (earlyoom earlyoom-configuration-earlyoom
+            (default earlyoom))
+  (minimum-available-memory earlyoom-configuration-minimum-available-memory
+                            (default 10)) ; in percent
+  (minimum-free-swap earlyoom-configuration-minimum-free-swap
+                     (default 10))      ; in percent
+  (prefer-regexp earlyoom-configuration-prefer-regexp ; <string>
+                 (default #f))
+  (avoid-regexp earlyoom-configuration-avoid-regexp  ; <string>
+                (default #f))
+  (memory-report-interval earlyoom-configuration-memory-report-interval
+                          (default 0)) ; in seconds; 0 means disabled
+  (ignore-positive-oom-score-adj?
+   earlyoom-configuration-ignore-positive-oom-score-adj? (default #f))
+  (run-with-higher-priority? earlyoom-configuration-run-with-higher-priority?
+                             (default #f))
+  (show-debug-messages? earlyoom-configuration-show-debug-messages?
+                        (default #f))
+  (send-notification-command
+   earlyoom-configuration-send-notification-command  ; <string>
+   (default #f)))
+
+(define (earlyoom-configuration->command-line-args config)
+  "Translate a <earlyoom-configuration> object to its command line arguments
+representation."
+  (match config
+    (($ <earlyoom-configuration> earlyoom minimum-available-memory
+                                 minimum-free-swap prefer-regexp avoid-regexp
+                                 memory-report-interval
+                                 ignore-positive-oom-score-adj?
+                                 run-with-higher-priority? show-debug-messages?
+                                 send-notification-command)
+     `(,(file-append earlyoom "/bin/earlyoom")
+       ,@(if minimum-available-memory
+             (list "-m" (format #f "~s" minimum-available-memory))
+             '())
+       ,@(if minimum-free-swap
+             (list "-s" (format #f "~s" minimum-free-swap))
+             '())
+       ,@(if prefer-regexp
+             (list "--prefer" prefer-regexp)
+             '())
+       ,@(if avoid-regexp
+             (list "--avoid" avoid-regexp)
+             '())
+       "-r" ,(format #f "~s" memory-report-interval)
+       ,@(if ignore-positive-oom-score-adj?
+             (list "-i")
+             '())
+       ,@(if run-with-higher-priority?
+             (list "-p")
+             '())
+       ,@(if show-debug-messages?
+             (list "-d")
+             '())
+       ,@(if send-notification-command
+             (list "-N" send-notification-command)
+             '())))))
+
+(define (earlyoom-shepherd-service config)
+  (shepherd-service
+   (documentation "Run the Early OOM daemon.")
+   (provision '(earlyoom))
+   (start #~(make-forkexec-constructor
+             '#$(earlyoom-configuration->command-line-args config)
+             #:log-file "/var/log/earlyoom.log"))
+   (stop #~(make-kill-destructor))))
+
+(define earlyoom-service-type
+  (service-type
+   (name 'earlyoom)
+   (default-value (earlyoom-configuration))
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             (compose list earlyoom-shepherd-service))))
+   (description "Run @command{earlyoom}, the Early OOM daemon.")))
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index 2606aa9e3e..d97316512f 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Kristofer Buffington <kristoferbuffington@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -1621,8 +1621,12 @@ by @code{dovecot-configuration}.  @var{config} may also be created by
 (define %default-opensmtpd-config-file
   (plain-file "smtpd.conf" "
 listen on lo
-accept from any for local deliver to mbox
-accept from local for any relay
+
+action inbound mbox
+match for local action inbound
+
+action outbound relay
+match from local for any action outbound
 "))
 
 (define opensmtpd-shepherd-service
diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm
index 1e01b5059d..256c6a7fa7 100644
--- a/gnu/services/pm.scm
+++ b/gnu/services/pm.scm
@@ -388,7 +388,7 @@ shutdown on system startup."))
     (with-imported-modules '((guix build utils))
       #~(begin
           (use-modules (guix build utils))
-          (copy-file #$config-file "/etc/tlp")))))
+          (copy-file #$config-file "/etc/tlp.conf")))))
 
 (define tlp-service-type
   (service-type
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 2cd4e5e89c..d473c5342e 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -627,6 +627,16 @@ potential infinite waits blocking libvirt."))
                  (bv "\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00")
                  (bv "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff")))
 
+(define %riscv32
+  (qemu-platform "riscv32" "riscv"
+                 (bv "\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xf3\x00")
+                 (bv "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff")))
+
+(define %riscv64
+  (qemu-platform "riscv64" "riscv"
+                 (bv "\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xf3\x00")
+                 (bv "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff")))
+
 (define %sh4
   (qemu-platform "sh4" "sh4"
                  (bv "\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00")
@@ -655,7 +665,7 @@ potential infinite waits blocking libvirt."))
 (define %qemu-platforms
   (list %i386 %i486 %alpha %arm %sparc32plus %ppc %ppc64 %ppc64le %m68k
         %mips %mipsel %mipsn32 %mipsn32el %mips64 %mips64el
-        %sh4 %sh4eb %s390x %aarch64 %hppa))
+        %riscv32 %riscv64 %sh4 %sh4eb %s390x %aarch64 %hppa))
 
 (define (lookup-qemu-platforms . names)
   "Return the list of QEMU platforms that match NAMES--a list of names such as
diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm
index bb446da8f9..023f59df10 100644
--- a/gnu/tests/mail.scm
+++ b/gnu/tests/mail.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,7 +47,8 @@
              (config-file
               (plain-file "smtpd.conf" "
 listen on 0.0.0.0
-accept from any for local deliver to mbox
+action inbound mbox
+match from any for local action inbound
 "))))))
 
 (define (run-opensmtpd-test)
diff --git a/tests/services/linux.scm b/tests/services/linux.scm
new file mode 100644
index 0000000000..8ad119c49f
--- /dev/null
+++ b/tests/services/linux.scm
@@ -0,0 +1,57 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2020 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 (tests services linux)
+  #:use-module (ice-9 match)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services linux)
+  #:use-module (guix gexp)
+  #:use-module (srfi srfi-64))
+
+;;; Tests for the (gnu services linux) module.
+
+(test-begin "linux-services")
+
+
+;;;
+;;; Early OOM daemon.
+;;;
+
+(define earlyoom-configuration->command-line-args
+  (@@ (gnu services linux) earlyoom-configuration->command-line-args))
+
+(define %earlyoom-configuration-sample
+  (earlyoom-configuration
+   (minimum-available-memory 10)
+   (minimum-free-swap 20)
+   (prefer-regexp "icecat")
+   (avoid-regexp "guix-daemon")
+   (memory-report-interval 60)
+   (ignore-positive-oom-score-adj? #f)
+   (run-with-higher-priority? #t)
+   (show-debug-messages? #f)
+   (send-notification-command "python \"/some/path/notify-all-users.py\"")))
+
+(test-equal "earlyoom-configuration->command-line-args"
+  (list (file-append earlyoom "/bin/earlyoom")
+        "-m" "10" "-s" "20" "--prefer" "icecat"
+        "--avoid" "guix-daemon" "-r" "60" "-p"
+        "-N" "python \"/some/path/notify-all-users.py\"")
+  (earlyoom-configuration->command-line-args %earlyoom-configuration-sample))
+
+(test-end "linux-services")