summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2019-06-03 17:03:56 +0200
committerMarius Bakke <mbakke@fastmail.com>2019-06-03 17:03:56 +0200
commit30e12b9664d774aca3948b1fa2e0aee6af09ca40 (patch)
tree483e1bfaad4671b922bb070a35da3ada819f9e50 /gnu
parent136b7d81f0eb713783e9ea7cf7f260a2b6252dfd (diff)
parent3092f1b835d79655eecb2f8a79dda20ad9ba6bd6 (diff)
downloadguix-30e12b9664d774aca3948b1fa2e0aee6af09ca40.tar.gz
Merge branch 'master' into staging
Diffstat (limited to 'gnu')
-rw-r--r--gnu/installer/connman.scm2
-rw-r--r--gnu/installer/newt/wifi.scm1
-rw-r--r--gnu/local.mk8
-rw-r--r--gnu/packages/aidc.scm55
-rw-r--r--gnu/packages/algebra.scm4
-rw-r--r--gnu/packages/audio.scm4
-rw-r--r--gnu/packages/backup.scm4
-rw-r--r--gnu/packages/bioconductor.scm74
-rw-r--r--gnu/packages/bioinformatics.scm33
-rw-r--r--gnu/packages/bootstrap.scm1
-rw-r--r--gnu/packages/coq.scm4
-rw-r--r--gnu/packages/cran.scm95
-rw-r--r--gnu/packages/cross-base.scm12
-rw-r--r--gnu/packages/databases.scm4
-rw-r--r--gnu/packages/debian.scm8
-rw-r--r--gnu/packages/dictionaries.scm4
-rw-r--r--gnu/packages/display-managers.scm9
-rw-r--r--gnu/packages/education.scm107
-rw-r--r--gnu/packages/elf.scm23
-rw-r--r--gnu/packages/emacs-xyz.scm228
-rw-r--r--gnu/packages/emulators.scm4
-rw-r--r--gnu/packages/game-development.scm1
-rw-r--r--gnu/packages/games.scm28
-rw-r--r--gnu/packages/geo.scm29
-rw-r--r--gnu/packages/gnome.scm98
-rw-r--r--gnu/packages/gnucash.scm9
-rw-r--r--gnu/packages/golang.scm20
-rw-r--r--gnu/packages/gtk.scm5
-rw-r--r--gnu/packages/guile-xyz.scm75
-rw-r--r--gnu/packages/haskell.scm10
-rw-r--r--gnu/packages/libevent.scm23
-rw-r--r--gnu/packages/linux.scm189
-rw-r--r--gnu/packages/lisp.scm48
-rw-r--r--gnu/packages/machine-learning.scm14
-rw-r--r--gnu/packages/mate.scm165
-rw-r--r--gnu/packages/maths.scm23
-rw-r--r--gnu/packages/messaging.scm12
-rw-r--r--gnu/packages/music.scm4
-rw-r--r--gnu/packages/node.scm48
-rw-r--r--gnu/packages/package-management.scm30
-rw-r--r--gnu/packages/password-utils.scm4
-rw-r--r--gnu/packages/patches/gnucash-fix-test-transaction-failure.patch54
-rw-r--r--gnu/packages/patches/gtksourceview-2-add-default-directory.patch33
-rw-r--r--gnu/packages/patches/libevent-2.1-dns-tests.patch26
-rw-r--r--gnu/packages/patches/libevent-2.1-skip-failing-test.patch24
-rw-r--r--gnu/packages/patches/supertux-fix-build-with-gcc5.patch75
-rw-r--r--gnu/packages/patches/supertux-unbundle-squirrel.patch53
-rw-r--r--gnu/packages/patches/txr-shell.patch59
-rw-r--r--gnu/packages/patchutils.scm167
-rw-r--r--gnu/packages/php.scm8
-rw-r--r--gnu/packages/python-web.scm25
-rw-r--r--gnu/packages/python-xyz.scm12
-rw-r--r--gnu/packages/shells.scm26
-rw-r--r--gnu/packages/squirrel.scm76
-rw-r--r--gnu/packages/statistics.scm40
-rw-r--r--gnu/packages/terminals.scm4
-rw-r--r--gnu/packages/video.scm8
-rw-r--r--gnu/packages/vpn.scm4
-rw-r--r--gnu/packages/wine.scm8
-rw-r--r--gnu/packages/xfce.scm42
-rw-r--r--gnu/services/cgit.scm3
-rw-r--r--gnu/services/getmail.scm380
-rw-r--r--gnu/services/herd.scm4
-rw-r--r--gnu/services/sddm.scm16
-rw-r--r--gnu/services/web.scm368
-rw-r--r--gnu/system/linux-container.scm53
-rw-r--r--gnu/tests/mail.scm178
-rw-r--r--gnu/tests/web.scm164
68 files changed, 2747 insertions, 682 deletions
diff --git a/gnu/installer/connman.scm b/gnu/installer/connman.scm
index ef8cca3952..7f47b9af77 100644
--- a/gnu/installer/connman.scm
+++ b/gnu/installer/connman.scm
@@ -108,7 +108,7 @@
 (define-record-type* <service>
   service make-service
   service?
-  (name            service-name) ; string
+  (name            service-name) ; string or #f
   (type            service-type) ; string
   (path            service-path) ; string
   (strength        service-strength) ; integer
diff --git a/gnu/installer/newt/wifi.scm b/gnu/installer/newt/wifi.scm
index da2f0b56d0..1cb2ef2df3 100644
--- a/gnu/installer/newt/wifi.scm
+++ b/gnu/installer/newt/wifi.scm
@@ -144,6 +144,7 @@ of <service-item> records present in LISTBOX."
   (let ((services (connman-services)))
     (filter (lambda (service)
               (and (string=? (service-type service) "wifi")
+                   (service-name service)
                    (not (string-null? (service-name service)))))
             services)))
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 09a165c26e..d6ad896f93 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -516,6 +516,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/docker.scm			\
   %D%/services/authentication.scm		\
   %D%/services/games.scm			\
+  %D%/services/getmail.scm				\
   %D%/services/kerberos.scm			\
   %D%/services/lirc.scm				\
   %D%/services/virtualization.scm		\
@@ -864,7 +865,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/gmp-faulty-test.patch			\
   %D%/packages/patches/gnome-shell-theme.patch			\
   %D%/packages/patches/gnome-tweaks-search-paths.patch		\
-  %D%/packages/patches/gnucash-fix-test-transaction-failure.patch \
   %D%/packages/patches/gnutls-skip-trust-store-test.patch	\
   %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \
   %D%/packages/patches/gobject-introspection-cc.patch		\
@@ -895,6 +895,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
+  %D%/packages/patches/gtksourceview-2-add-default-directory.patch \
   %D%/packages/patches/gzdoom-search-in-installed-share.patch	\
   %D%/packages/patches/haskell-mode-unused-variables.patch	\
   %D%/packages/patches/haskell-mode-make-check.patch		\
@@ -987,8 +988,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch	\
   %D%/packages/patches/libevent-2.0-CVE-2016-10197.patch	\
   %D%/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch	\
-  %D%/packages/patches/libevent-2.1-dns-tests.patch		\
-  %D%/packages/patches/libevent-2.1-skip-failing-test.patch	\
   %D%/packages/patches/libexif-CVE-2016-6328.patch		\
   %D%/packages/patches/libexif-CVE-2017-7544.patch		\
   %D%/packages/patches/libgcrypt-make-yat2m-reproducible.patch	\
@@ -1281,6 +1280,8 @@ dist_patch_DATA =						\
   %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-fix-build-with-gcc5.patch	\
+  %D%/packages/patches/supertux-unbundle-squirrel.patch		\
   %D%/packages/patches/swig-guile-gc.patch			\
   %D%/packages/patches/swish-e-search.patch			\
   %D%/packages/patches/swish-e-format-security.patch		\
@@ -1315,6 +1316,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/totem-meson-easy-codec.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
   %D%/packages/patches/twinkle-include-qregexpvalidator.patch	\
+  %D%/packages/patches/txr-shell.patch				\
   %D%/packages/patches/u-boot-fix-mkimage-header-verification.patch	\
   %D%/packages/patches/unzip-CVE-2014-8139.patch		\
   %D%/packages/patches/unzip-CVE-2014-8140.patch		\
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index afcb33ad6d..61d3331c97 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,8 +27,15 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (gnu packages autotools)
-  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages video)
   #:use-module (guix build-system gnu))
 
 
@@ -102,3 +110,48 @@ characters, and is highly robust.")
 barcodes of the modern ECC200 variety.  libdmtx is a shared library, allowing
 C/C++ programs to use its capabilities without restrictions or overhead.")
     (license license:bsd-3)))
+
+(define-public zbar
+  (package
+    (name "zbar")
+    (version "0.23")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://linuxtv.org/downloads/zbar/zbar-"
+                           version
+                           ".tar.bz2"))
+       (sha256
+        (base32
+         "0bmd93a15qpgbsq9c9j33qms18rdrgz6gbc48zi6z9w5pvrvi7z9"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags (list "--with-gtk=auto"
+                               "--with-python=auto"
+                               (string-append "--with-dbusconfdir="
+                                              (assoc-ref %outputs "out")
+                                              "/etc")
+                               "CXXFLAGS=-std=c++11")))
+    (native-inputs
+     `(("glib" ,glib "bin")
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("gtk+" ,gtk+)
+       ("imagemagick" ,imagemagick)
+       ("libjpeg" ,libjpeg-turbo)
+       ("python" ,python)
+       ("qtbase" ,qtbase)
+       ("qtx11extras" ,qtx11extras)
+       ("v4l-utils" ,v4l-utils)))
+    (synopsis "Bar code reader")
+    (description
+     "ZBar can read barcodes from various sources, such as video streams,
+image files, and raw intensity sensors.  It supports EAN-13/UPC-A, UPC-E,
+EAN-8, Code 128, Code 93, Code 39, Codabar, Interleaved 2 of 5, QR Code and SQ
+Code.  Included with the library are basic applications for decoding captured
+bar code images and using a video device (e.g. webcam) as a bar code scanner.
+For application developers, language bindings are included for C, C++ and
+Python as well as GUI widgets for GTK and Qt.")
+    (home-page "https://github.com/mchehab/zbar")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 128d41a570..69163a43d9 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -251,7 +251,7 @@ precision.")
 (define-public giac
   (package
     (name "giac")
-    (version "1.5.0-49")
+    (version "1.5.0-57")
     (source (origin
               (method url-fetch)
               ;; "~parisse/giac" is not used because the maintainer regularly
@@ -263,7 +263,7 @@ precision.")
                                   "source/giac_" version ".tar.gz"))
               (sha256
                (base32
-                "0f4pkand9vmqfayw18jm5qxbhcwi1405qfd7ibzh9lwzz6amkm3l"))))
+                "08c93knsisbk9dkyyrignw0wvqbr1sa5czlvk5l307ahxbbmqncf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index c897e30458..592a1ba94c 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -3701,7 +3701,7 @@ library.")
 (define-public faudio
   (package
     (name "faudio")
-    (version "19.05")
+    (version "19.06")
     (source
      (origin
        (method git-fetch)
@@ -3710,7 +3710,7 @@ library.")
              (commit version)))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
-        (base32 "1dja2ykixk1ycqda116cg9fy4qg364dqj88amfln0r9pnsj2kbxk"))))
+        (base32 "1azjf972hik1cizsblbvfp38xz7dx368pbpw3pd6z1xk9mnrhi6s"))))
     (arguments
      '(#:tests? #f                      ; No tests.
        #:configure-flags '("-DFFMPEG=ON")))
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 262c6efc24..70cc06c736 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -73,7 +73,7 @@
 (define-public duplicity
   (package
     (name "duplicity")
-    (version "0.7.18.2")
+    (version "0.7.19")
     (source
      (origin
       (method url-fetch)
@@ -82,7 +82,7 @@
                           "-series/" version "/+download/duplicity-"
                           version ".tar.gz"))
       (sha256
-       (base32 "0j37dgyji36hvb5dbzlmh5rj83jwhni02yq16g6rd3hj8f7qhdn2"))))
+       (base32 "0ag9dknslxlasslwfjhqgcqbkb1mvzzx93ry7lch2lfzcdd91am6"))))
     (build-system python-build-system)
     (native-inputs
      `(("util-linux" ,util-linux)       ; setsid command, for the tests
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 3810749f83..5ffb7c4e3c 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -1153,14 +1153,14 @@ determining dependencies between variables, code improvement suggestions.")
 (define-public r-chippeakanno
   (package
     (name "r-chippeakanno")
-    (version "3.18.0")
+    (version "3.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChIPpeakAnno" version))
        (sha256
         (base32
-         "089v16mm5m0rlyyyd0d6rz8gwb852zf3bcdrrw70wanlfjn258q7"))))
+         "1mwi5s600c3jxy8f1azfrndc3g06qvhbmrp9wqac9nwjbfx1kfji"))))
     (properties `((upstream-name . "ChIPpeakAnno")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2086,14 +2086,14 @@ independent of the p-value under the null hypothesis.")
 (define-public r-icobra
   (package
     (name "r-icobra")
-    (version "1.12.0")
+    (version "1.12.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "iCOBRA" version))
        (sha256
         (base32
-         "1w9frnczgypzc2czbwrvlizqcqhbp6cdpyws7vkmnn9k0ggzxvfc"))))
+         "1wj0vqyb6h4rddmn4va3182yap9bv4m1r1jlzyjfyrqxhl2sqb1q"))))
     (properties `((upstream-name . "iCOBRA")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2886,14 +2886,14 @@ to multiple hypothesis correction.")
 (define-public r-dose
   (package
     (name "r-dose")
-    (version "3.10.0")
+    (version "3.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DOSE" version))
        (sha256
         (base32
-         "0dvhnfhzhhzcxm8zhdwrkif7sak4p888sjqfd3a0p77h0hs6g8pv"))))
+         "0ab7mgj42fg6608qkciyqivr1n8s8r5ibvp0z3jfclrnyx6cl0w1"))))
     (properties `((upstream-name . "DOSE")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3408,14 +3408,14 @@ position-specific scores within R and Bioconductor.")
 (define-public r-atacseqqc
   (package
     (name "r-atacseqqc")
-    (version "1.8.0")
+    (version "1.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ATACseqQC" version))
        (sha256
         (base32
-         "03f130vcd6hd3fv2pg60id0ddd6qkwsyx73gm907xaayf42ar2pj"))))
+         "0h5j3724hnd86w22vy3whqx6gkf0nf2dxd2clgzdvjzblbcd5s69"))))
     (properties `((upstream-name . "ATACseqQC")))
     (build-system r-build-system)
     (propagated-inputs
@@ -4548,3 +4548,61 @@ high-throughput sequencing data.  It performs parallel processing of entire
 files and produces a report which contains a set of high-resolution
 graphics.")
     (license license:gpl2+)))
+
+(define-public r-birewire
+  (package
+    (name "r-birewire")
+    (version "3.16.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "BiRewire" version))
+       (sha256
+        (base32
+         "1gjb18l3gq3w8zl6r5d49hw0r1kfh9f7ghv9hz6y86aniprvb518"))))
+    (properties `((upstream-name . "BiRewire")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-igraph" ,r-igraph)
+       ("r-matrix" ,r-matrix)
+       ("r-slam" ,r-slam)
+       ("r-tsne" ,r-tsne)))
+    (home-page "https://bioconductor.org/packages/release/bioc/html/BiRewire.html")
+    (synopsis "Tools for randomization of bipartite graphs")
+    (description
+     "This package provides functions for bipartite network rewiring through N
+consecutive switching steps and for the computation of the minimal number of
+switching steps to be performed in order to maximise the dissimilarity with
+respect to the original network.  It includes functions for the analysis of
+the introduced randomness across the switching steps and several other
+routines to analyse the resulting networks and their natural projections.")
+    (license license:gpl3)))
+
+(define-public r-birta
+  (package
+    (name "r-birta")
+    (version "1.28.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "birta" version))
+       (sha256
+        (base32
+         "12xjyvgmh4h0b7hi4qg50kcpb9003gnh2xyfgncb8l9mzvsbkxc2"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biobase" ,r-biobase)
+       ("r-limma" ,r-limma)
+       ("r-mass" ,r-mass)))
+    (home-page "https://bioconductor.org/packages/birta")
+    (synopsis "Bayesian inference of regulation of transcriptional activity")
+    (description
+     "Expression levels of mRNA molecules are regulated by different
+processes, comprising inhibition or activation by transcription factors and
+post-transcriptional degradation by microRNAs.  @dfn{birta} (Bayesian
+Inference of Regulation of Transcriptional Activity) uses the regulatory
+networks of transcription factors and miRNAs together with mRNA and miRNA
+expression data to predict switches in regulatory activity between two
+conditions.  A Bayesian network is used to model the regulatory structure and
+Markov-Chain-Monte-Carlo is applied to sample the activity states.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 8aba7f1c5f..4b8e662a3a 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -7245,18 +7245,19 @@ Bioconductor, CRAN, and Github.")
 (define-public r-biocviews
   (package
     (name "r-biocviews")
-    (version "1.52.0")
+    (version "1.52.2")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "biocViews" version))
               (sha256
                (base32
-                "1wc7a953n6qrlh9azzg1q68rk99h3xkbs82wq0yk6h2vb2c5r3zk"))))
+                "0qwrsd9fcpkv7hhzy1scnj7ahdxi6cjary28kqk6b36gkzmnrw4r"))))
     (properties
      `((upstream-name . "biocViews")))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-biobase" ,r-biobase)
+       ("r-biocmanager" ,r-biocmanager)
        ("r-graph" ,r-graph)
        ("r-rbgl" ,r-rbgl)
        ("r-rcurl" ,r-rcurl)
@@ -7452,13 +7453,13 @@ names in their natural, rather than lexicographic, order.")
 (define-public r-edger
   (package
     (name "r-edger")
-    (version "3.26.3")
+    (version "3.26.4")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "edgeR" version))
               (sha256
                (base32
-                "12889lwcray2cw0skzy1xp1y3siiz6n5cwx8ni86m7r671p6zmb2"))))
+                "013glavk6a1wpyq3q35k343bdp6rf27w30q59i4kf47rp3i37g15"))))
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7480,13 +7481,13 @@ CAGE.")
 (define-public r-variantannotation
   (package
     (name "r-variantannotation")
-    (version "1.30.0")
+    (version "1.30.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "VariantAnnotation" version))
               (sha256
                (base32
-                "1sd01yv1hnwc16412ilncrrph4gxsr9ds0nqg1czl69fqaixjn1i"))))
+                "144x3d3b9a3q5jy4aqrk1nf2yavwjhwlf71s7qyr4x3ms3wmvf8i"))))
     (properties
      `((upstream-name . "VariantAnnotation")))
     (inputs
@@ -7924,13 +7925,13 @@ as well as query and modify the browser state, such as the current viewport.")
 (define-public r-genomicfeatures
   (package
     (name "r-genomicfeatures")
-    (version "1.36.0")
+    (version "1.36.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicFeatures" version))
               (sha256
                (base32
-                "17jy7lrpdaafd8g5v6j70xsypi0lqljdqmhv9f2r1xpyg3yjd84p"))))
+                "02psq3jfgghdydwbydb1j792lvfg44l5npb44mx8d54ckr8658dd"))))
     (properties
      `((upstream-name . "GenomicFeatures")))
     (build-system r-build-system)
@@ -9040,14 +9041,14 @@ TAB-Seq.")
 (define-public r-sva
   (package
     (name "r-sva")
-    (version "3.32.0")
+    (version "3.32.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "sva" version))
        (sha256
         (base32
-         "100jwi43y4xdqb5lldx1ld58jg9icdjgz6c7ylx95gspipnkbgjp"))))
+         "0jj6klfha5v5qmx2sjblf1an6s2zqd7mmgsp7sfmh4k2jpqi3jm9"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-genefilter" ,r-genefilter)
@@ -10568,13 +10569,13 @@ libraries.")
 (define-public r-scater
   (package
     (name "r-scater")
-    (version "1.12.1")
+    (version "1.12.2")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "scater" version))
               (sha256
                (base32
-                "0k4jc0xc2n49saylcjrg7laxq4mchg4nv06nrbc6cp4vzpf33jh5"))))
+                "16a17161xlhh6qpna9qxph3anlc7ydgyrczmy4alfiw8si7pzmxa"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-beachmat" ,r-beachmat)
@@ -10603,14 +10604,14 @@ quality control.")
 (define-public r-scran
   (package
     (name "r-scran")
-    (version "1.12.0")
+    (version "1.12.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scran" version))
        (sha256
         (base32
-         "19cyjjzgmhswni6js4bhbj5djp976sl9n648kk7viazgkspql884"))))
+         "17mknpkvs7mgnlbf2hv9k7rwbx2vlg60yrwfyb8nn3nxsb6vm7yn"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-beachmat" ,r-beachmat)
@@ -12603,7 +12604,7 @@ expression report comparing samples in an easily configurable manner.")
 (define-public pigx-chipseq
   (package
     (name "pigx-chipseq")
-    (version "0.0.40")
+    (version "0.0.41")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BIMSBbioinfo/pigx_chipseq/"
@@ -12611,7 +12612,7 @@ expression report comparing samples in an easily configurable manner.")
                                   "/pigx_chipseq-" version ".tar.gz"))
               (sha256
                (base32
-                "0y9x62cfwzhsp82imnawyamxp58bcb00yjxdy44spylqnjdlsaj8"))))
+                "0akbxdmsjsq5fzbwaap04hqjpsfgv1l6yrc2pwgbya1xgqvcq6vy"))))
     (build-system gnu-build-system)
     ;; parts of the tests rely on access to the network
     (arguments '(#:tests? #f))
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index a3ecbeb076..e8b2120551 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -177,6 +177,7 @@ return value is ignored."
         ((string=? system "powerpc64le-linux") "/lib/ld64.so.2")
         ((string=? system "alpha-linux") "/lib/ld-linux.so.2")
         ((string=? system "s390x-linux") "/lib/ld64.so.1")
+        ((string=? system "riscv64-linux") "/lib/ld-linux-riscv64-lp64d.so.1")
 
         ;; XXX: This one is used bare-bones, without a libc, so add a case
         ;; here just so we can keep going.
diff --git a/gnu/packages/coq.scm b/gnu/packages/coq.scm
index 6c48af4fc9..2b24b75808 100644
--- a/gnu/packages/coq.scm
+++ b/gnu/packages/coq.scm
@@ -499,7 +499,7 @@ uses Ltac to synthesize the substitution operation.")
 (define-public coq-equations
   (package
     (name "coq-equations")
-    (version "1.2-beta2")
+    (version "1.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -508,7 +508,7 @@ uses Ltac to synthesize the substitution operation.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0y2zwv7jxs1crprj5qvg46h0v9wyfn99ln40yskq91y9h1lj5h3j"))))
+                "1q3wvicr43bgy7xn1diwh4j43mnrhprrc2xd22qlbz9cl6bhf8bj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("ocaml"  ,ocaml)
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 199dfbdbe4..005016b984 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -738,6 +738,8 @@ and vice-versa.")
        ("js-strftime" ,js-strftime)
        ("js-highlight" ,js-highlight)
        ("js-es5-shim" ,js-es5-shim)))
+    (native-inputs
+     `(("uglify-js" ,uglify-js)))
     (home-page "http://shiny.rstudio.com")
     (synopsis "Easy interactive web applications with R")
     (description
@@ -983,14 +985,14 @@ coordinates.")
 (define-public r-geosphere
   (package
     (name "r-geosphere")
-    (version "1.5-7")
+    (version "1.5-10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "geosphere" version))
        (sha256
         (base32
-         "186qdm5niq7v3d4w4rngx71znsgi44hnam7698bsx9ar5mg5b6wx"))))
+         "15xlgsmn0vwky1l13n6acdz6jn2b2na3gf6x367y3qh1f5w4zkan"))))
     (build-system r-build-system)
     (propagated-inputs `(("r-sp" ,r-sp)))
     (home-page "https://cran.r-project.org/web/packages/geosphere")
@@ -2066,14 +2068,14 @@ topics for ecologists (ISBN 978-0-691-12522-0).")
 (define-public r-lpsolve
   (package
     (name "r-lpsolve")
-    (version "5.6.13")
+    (version "5.6.13.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lpSolve" version))
        (sha256
         (base32
-         "13a9ry8xf5j1f2j6imqrxdgxqz3nqp9sj9b4ivyx9sid459irm6m"))))
+         "1f10ywlaaldgjj84vs108ly0nsbkrdgbn5d6qj7nk93j1x1xrn3a"))))
     (properties `((upstream-name . "lpSolve")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/lpSolve")
@@ -2204,14 +2206,14 @@ George Marsaglia are included.")
 (define-public r-ksamples
   (package
     (name "r-ksamples")
-    (version "1.2-8")
+    (version "1.2-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "kSamples" version))
        (sha256
         (base32
-         "15d5q5vpp4wx5rk5kjxjdxpwc8mkq5sbdz8gi07iscrvhzb5rzfr"))))
+         "1zs22p68d6320kcylisnk0b5wmpapxkyz15py09czxzw7npw8gms"))))
     (properties `((upstream-name . "kSamples")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2892,14 +2894,14 @@ Laplace approximation and adaptive Gauss-Hermite quadrature.")
 (define-public r-jomo
   (package
     (name "r-jomo")
-    (version "2.6-7")
+    (version "2.6-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "jomo" version))
        (sha256
         (base32
-         "0lyvi32aikkvwdj0y2hc13kmmi0cw1icg8z9lcw10l8326sxm0vf"))))
+         "097zfdcqc3a45ay8xxbraqh8xsfyivskkdmc2b4ca4n979lx8vyb"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lme4" ,r-lme4)
@@ -3494,14 +3496,14 @@ timeout.  It can also poll several processes at once.")
 (define-public r-tsp
   (package
     (name "r-tsp")
-    (version "1.1-6")
+    (version "1.1-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TSP" version))
        (sha256
         (base32
-         "1ym97xl2icjpfkrici0wig29w06bb704hp51v7h5liygjlwpkhlc"))))
+         "0rxxhvqi55869dg2p82hzg5kvgcqf9h60cjcg00k3pv9aw4x07kb"))))
     (properties `((upstream-name . "TSP")))
     (build-system r-build-system)
     (propagated-inputs `(("r-foreach" ,r-foreach)))
@@ -3581,14 +3583,14 @@ Markdown documents.")
 (define-public r-seriation
   (package
     (name "r-seriation")
-    (version "1.2-3")
+    (version "1.2-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "seriation" version))
        (sha256
         (base32
-         "1q6hw4hjw224b4y0dc0j630v2pgj6sn455nwkilb70w8k31hpk92"))))
+         "0sk4wfwxxhz3nwbcsfshb93gra4c9p5pvpsz00d7f9nkkmhs97ws"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cluster" ,r-cluster)
@@ -3713,14 +3715,14 @@ to variables on the left-hand side of the assignment.")
 (define-public r-pillar
   (package
     (name "r-pillar")
-    (version "1.4.0")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pillar" version))
        (sha256
         (base32
-         "1c8rwwh677vc92f4k6qj4mxl3acran1iqdv5dj6r1dyv7fvmcvfx"))))
+         "0mcc09caxm69pghhz6b8vawj9ni63aijv5qba53pg4ph7rxclwgm"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cli" ,r-cli)
@@ -4995,14 +4997,14 @@ additional external tools on any platform.")
 (define-public r-openxlsx
   (package
     (name "r-openxlsx")
-    (version "4.1.0")
+    (version "4.1.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openxlsx" version))
        (sha256
         (base32
-         "1n7z22pm78xa77fvn77kdn68az6xzxk36y11sqf0w6h6adri4yxb"))))
+         "1lflygpi1z4rlb1c6g6wsmi334maiiy7jhpg6ph4sw8lpvg12w4b"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-rcpp" ,r-rcpp)
@@ -5859,14 +5861,14 @@ intervals.")
 (define-public r-snakecase
   (package
     (name "r-snakecase")
-    (version "0.10.0")
+    (version "0.11.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "snakecase" version))
        (sha256
         (base32
-         "0325zkpyqa15lx7biq2cbimr2773332bp4jvcvnl00bjx41ia2fm"))))
+         "1ky1x2cp5rd0ffd9m1fji9sq4z4jsrpxzg30brw8bb4ihfjj114r"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-stringi" ,r-stringi)
@@ -6290,14 +6292,14 @@ Group (Non-)Overlap considerations.")
 (define-public r-refgenome
   (package
     (name "r-refgenome")
-    (version "1.7.3.1")
+    (version "1.7.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "refGenome" version))
        (sha256
         (base32
-         "1s4lxv5pqk6d0f0a9iclgv88yl346fwvzgraxh0gwpbym1yhh787"))))
+         "1za89bn3am1zgvm641qi1ab6kaqpll4rb9p9f1sjwvcgqq6065g5"))))
     (properties `((upstream-name . "refGenome")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7786,14 +7788,14 @@ correlation, censored, ordered and multivariate problems.")
 (define-public r-bayesplot
   (package
     (name "r-bayesplot")
-    (version "1.6.0")
+    (version "1.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bayesplot" version))
        (sha256
         (base32
-         "0in9cq2ybpa7njrwqx4l6nc8i01cjswsvzwlyiw465pi74aapr57"))))
+         "0h23sbfny2hcipvvfhq5aiwdh1vanizn7f8lpb9kffypxhcd7v7w"))))
     (build-system r-build-system)
     (inputs
      `(("pandoc" ,ghc-pandoc)
@@ -7802,8 +7804,11 @@ correlation, censored, ordered and multivariate problems.")
      `(("r-dplyr" ,r-dplyr)
        ("r-ggplot2" ,r-ggplot2)
        ("r-ggridges" ,r-ggridges)
+       ("r-glue" ,r-glue)
        ("r-reshape2" ,r-reshape2)
-       ("r-rlang" ,r-rlang)))
+       ("r-rlang" ,r-rlang)
+       ("r-tibble" ,r-tibble)
+       ("r-tidyselect" ,r-tidyselect)))
     (home-page "http://mc-stan.org/bayesplot")
     (synopsis "Plotting for Bayesian models")
     (description
@@ -7918,14 +7923,14 @@ differentiation.")
 (define-public r-bayestestr
   (package
     (name "r-bayestestr")
-    (version "0.1.0")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bayestestR" version))
        (sha256
         (base32
-         "1m6gj55z3shm3m3mgqj8nk73wij67y617sl04rbj400wz9qrhfva"))))
+         "0729j4fdxkkvmh99nmny38dywidzgmipdjqbi2ljxygsn4jg7ysy"))))
     (properties `((upstream-name . "bayestestR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -8797,14 +8802,14 @@ isosurfaces.")
 (define-public r-ks
   (package
     (name "r-ks")
-    (version "1.11.4")
+    (version "1.11.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ks" version))
        (sha256
         (base32
-         "0d5i8458s8ri9pcx2jm003z1ajk7ha3pmw1sr6lgn6a8d7wgmvqb"))))
+         "06ymx244yknmpl6935l4pafqbm4gcbpnhqg7rinql6rrfr9mcrag"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-fnn" ,r-fnn)
@@ -10481,14 +10486,14 @@ Differences with other sparse matrix packages are:
 (define-public r-fields
   (package
     (name "r-fields")
-    (version "9.8-1")
+    (version "9.8-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fields" version))
        (sha256
         (base32
-         "1zb44bm9mwbnld2q915nxxji3hqa025cmlaar7da35lyqlrjl30v"))))
+         "1q9x68dczjym56v7x90x4x5br59vj3dww6w8v42zd3yl17h7c1h1"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-maps" ,r-maps)
@@ -10724,14 +10729,14 @@ But it can also be used to do data analysis for small scale data sets.")
 (define-public r-cmprsk
   (package
     (name "r-cmprsk")
-    (version "2.2-7")
+    (version "2.2-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cmprsk" version))
        (sha256
         (base32
-         "1imr3wpnj4g57n2x4ryahl4lk8lvq9y2r7319zv3k82mznha8bcm"))))
+         "1nacbzx950ygaqgnj0949skhwpzar5i3xlscd44jsimk2gsppx6z"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-survival" ,r-survival)))
@@ -10751,14 +10756,14 @@ JASA, 94:496-509.")
 (define-public r-etm
   (package
     (name "r-etm")
-    (version "1.0.4")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "etm" version))
        (sha256
         (base32
-         "0ws103b3pmli0z4xbyfxkly2wnnnxnnwc0r66qjjqjrlvm7pffl1"))))
+         "1yivbq8y0ijcl1m4nir4q9hp4pi6iphwxgjprygsdf7vp98wq677"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-data-table" ,r-data-table)
@@ -10777,14 +10782,14 @@ model with finite state space using the Aalen-Johansen estimator.")
 (define-public r-epi
   (package
     (name "r-epi")
-    (version "2.35")
+    (version "2.37")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Epi" version))
        (sha256
         (base32
-         "1z3959761ryv54y6vsrxxvhrwzz50xrxn55pqh5y7lrxh91zdsvl"))))
+         "1lanr9x0c6w22406p56j7cwk6wck8njq6pscb4gzc613d68zj1lk"))))
     (properties `((upstream-name . "Epi")))
     (build-system r-build-system)
     (propagated-inputs
@@ -11155,14 +11160,14 @@ algorithms) can be computed and partitioned matrices can be plotted.")
 (define-public r-upsetr
   (package
     (name "r-upsetr")
-    (version "1.3.3")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "UpSetR" version))
        (sha256
         (base32
-         "08vj7l92b8fpqyqwxshll2mhk3yhgyr74axvr2lf29z78bapymhz"))))
+         "007i0njnjjy7vbrxabwav7a1kk2n0hn2mkvqsdzzfk10ckp5y7im"))))
     (properties `((upstream-name . "UpSetR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -12895,21 +12900,21 @@ SELECT or UPDATE queries to an end-point.")
 (define-public r-bookdown
   (package
     (name "r-bookdown")
-    (version "0.10")
+    (version "0.11")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "bookdown" version))
               (sha256
                (base32
-                "0xk57p9iyj7rqrwb89q3pm8p29ca615fj1h9blf5yb3zhga4bjk3"))))
+                "0w4fkv5fqiaqgkx44p0s161imf29zir9742126xkz1pl1j25jn1r"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-htmltools" ,r-htmltools)
        ("r-knitr" ,r-knitr)
        ("r-rmarkdown" ,r-rmarkdown)
        ("r-tinytex" ,r-tinytex)
-       ("r-yaml" ,r-yaml)
-       ("r-xfun" ,r-xfun)))
+       ("r-xfun" ,r-xfun)
+       ("pandoc" ,ghc-pandoc)))
     (home-page "https://github.com/rstudio/bookdown")
     (synopsis "Authoring books and technical documents with R markdown")
     (description "This package provides output formats and utilities for
@@ -12941,14 +12946,14 @@ that accept short and long options.")
 (define-public r-wgcna
   (package
     (name "r-wgcna")
-    (version "1.67")
+    (version "1.68")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "WGCNA" version))
        (sha256
         (base32
-         "09387w85lxvwr8ax2i2h602b4dgfv4wbvsl9aj1q0b1vfs4rkk69"))))
+         "1s7gy5vd7x67hpgli8r7ba2z99w3psiyv5hqmrh94zw141dg210a"))))
     (properties `((upstream-name . "WGCNA")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14398,14 +14403,14 @@ includes data sets from oceanography.")
 (define-public r-ggfortify
   (package
     (name "r-ggfortify")
-    (version "0.4.6")
+    (version "0.4.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggfortify" version))
        (sha256
         (base32
-         "1clyha9f9ygma64xbgi78lxsp1203f2ashqhhdpm71nr6w91bm88"))))
+         "1wk9j0xg5hj9i1vf62qjiphv8cbsgq7y6baay3pfl3wyb2dwgci0"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-dplyr" ,r-dplyr)
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index b3b90a6490..a0341ebc5d 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -39,7 +39,8 @@
   #:export (cross-binutils
             cross-libc
             cross-gcc
-            cross-newlib?))
+            cross-newlib?
+            cross-kernel-headers))
 
 (define-syntax %xgcc
   ;; GCC package used as the basis for cross-compilation.  It doesn't have to
@@ -276,18 +277,19 @@ target that libc."
 
 (define* (cross-kernel-headers target
                                #:optional
+                               (linux-headers linux-libre-headers)
                                (xgcc (cross-gcc target))
                                (xbinutils (cross-binutils target)))
   "Return headers depending on TARGET."
 
   (define xlinux-headers
-    (package (inherit linux-libre-headers)
-      (name (string-append (package-name linux-libre-headers)
+    (package (inherit linux-headers)
+      (name (string-append (package-name linux-headers)
                            "-cross-" target))
       (arguments
        (substitute-keyword-arguments
            `(#:implicit-cross-inputs? #f
-             ,@(package-arguments linux-libre-headers))
+             ,@(package-arguments linux-headers))
          ((#:phases phases)
           `(alist-replace
             'build
@@ -300,7 +302,7 @@ target that libc."
             ,phases))))
       (native-inputs `(("cross-gcc" ,xgcc)
                        ("cross-binutils" ,xbinutils)
-                       ,@(package-native-inputs linux-libre-headers)))))
+                       ,@(package-native-inputs linux-headers)))))
 
   (define xgnumach-headers
     (package (inherit gnumach-headers)
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index ea0a38b626..47eaac8e69 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -2398,14 +2398,14 @@ You might also want to install the following optional dependencies:
 (define-public python-alembic
   (package
     (name "python-alembic")
-    (version "1.0.2")
+    (version "1.0.10")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "alembic" version))
        (sha256
         (base32
-         "0asqz9mwc4w8bsar1icv3ik9jslxrj3gv3yxgmhc6nc6r9qbkg04"))))
+         "1dwl0264r6ri2jyrjr68am04x538ab26xwy4crqjnnhm4alwm3c2"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-mock" ,python-mock)
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index ba19547898..1b401bc946 100644
--- a/gnu/packages/debian.scm
+++ b/gnu/packages/debian.scm
@@ -32,7 +32,7 @@
 (define-public debian-archive-keyring
   (package
     (name "debian-archive-keyring")
-    (version "2018.1")
+    (version "2019.1")
     (source
       (origin
         (method git-fetch)
@@ -42,7 +42,7 @@
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "136vr5dj7w0dz563qdghsndcfcqm2m8d4j1dyiq9dzx5vd0rcpcw"))))
+          "0bphwji3ywk1zi5bq8bhqk7l51fwjy1idwsw7zfqnxca8m5wvw1g"))))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "verify-results"
@@ -117,7 +117,7 @@ contains the archive keys used for that.")
 (define-public debootstrap
   (package
     (name "debootstrap")
-    (version "1.0.111")
+    (version "1.0.114")
     (source
       (origin
         (method git-fetch)
@@ -127,7 +127,7 @@ contains the archive keys used for that.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "1b8s00a2kvaajqhjlms3q2dk3gqv6g4yq9h843jal1pm66zsx19n"))))
+          "147308flz9y8g6f972izi3szmsywf5f8xm64z2smy1cayd340i63"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 881ac93680..9f4dc59cc8 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -218,7 +218,7 @@ It comes with a German-English dictionary with approximately 270,000 entries.")
 (define-public grammalecte
   (package
     (name "grammalecte")
-    (version "1.1")
+    (version "1.1.1")
     (source
      (origin
        (method url-fetch/zipbomb)
@@ -226,7 +226,7 @@ It comes with a German-English dictionary with approximately 270,000 entries.")
                            "Grammalecte-fr-v" version ".zip"))
        (sha256
         (base32
-         "031d6cn1wn7ps3j38vx6s8z2gjp9nqgiypqm3bfbhxqcammyhian"))))
+         "1al4c3976wgxijxghxqb1banarj82hwad51kln87xj2r5kwcfm05"))))
     (build-system python-build-system)
     (home-page "https://grammalecte.net")
     (synopsis  "French spelling and grammar checker")
diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm
index 29d8ae4eb9..0b8f742c38 100644
--- a/gnu/packages/display-managers.scm
+++ b/gnu/packages/display-managers.scm
@@ -75,6 +75,15 @@
        ("linux-pam" ,linux-pam)
        ("qtbase" ,qtbase)
        ("qtdeclarative" ,qtdeclarative)
+
+       ;; Some user-defined themes use QtQuick components internally.  Adding
+       ;; QtQuick & co. here; they end up in QML2_IMPORT_PATH thanks to
+       ;; 'wrap-qt-program'.
+       ("qtgraphicaleffects" ,qtgraphicaleffects)
+       ("qtquickcontrols" ,qtquickcontrols)
+       ("qtquickcontrols2" ,qtquickcontrols2)
+       ("qtsvg" ,qtsvg)
+
        ("shadow" ,shadow)
        ("wayland" ,wayland)))
     (arguments
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 869789552e..98aaad7e63 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -27,7 +27,10 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages game-development)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -373,3 +376,107 @@ keyboard is also available if the child does not have any other
 specialized device.")
     (home-page "https://bipede.fr/contrib/")
     (license license:gpl3)))
+
+(define-public childsplay
+  (package
+    (name "childsplay")
+    (version "3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/schoolsplay/"
+                    "childsplay-" version ".tgz"))
+              (sha256
+               (base32
+                "0z7yp2swjnbz51vn2zyfnjn40jq38l5mbh15yafmx1z3vn2z1m77"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unbundle-dejavu-font
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((dejavu-dir
+                     (string-append (assoc-ref inputs "font-dejavu")
+                                    "/share/fonts/truetype"))
+                    (dejavu-font
+                     (string-append dejavu-dir
+                                    "/DejaVuSansCondensed-Bold.ttf")))
+               (substitute* "SPConstants.py"
+                 (("^(TTF(BOLD)? = ).*" _ prefix)
+                  (string-append prefix "'" dejavu-font "'\n")))
+               (for-each (lambda (f) (delete-file f))
+                         (find-files "lib/SPData" "DejaVu"))
+               #t)))
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (pixmaps (string-append out "/share/pixmaps"))
+                    (share (string-append out "/share/childsplay"))
+                    (doc (string-append out "/share/doc/" ,name "-",version)))
+               ;; Install icon.
+               (install-file "lib/SPData/themes/childsplay/logo_cp.svg" pixmaps)
+               ;; Install data.
+               (mkdir-p share)
+               (for-each (lambda (f)
+                           (copy-recursively f (string-append share "/" f)))
+                         '("alphabet-sounds" "lib" "locale" "SPWidgets"))
+               (for-each (lambda (f) (install-file f share))
+                         (find-files "." "\\.(py|dev|db)$"))
+               ;; Install documentation.
+               (mkdir-p doc)
+               (copy-recursively "docs" doc)
+               #t)))
+         (add-after 'install 'create-executable
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let* ((python (string-append (assoc-ref inputs "python")
+                                           "/bin/python"))
+                    (out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (executable (string-append bin "/childsplay")))
+               (mkdir-p bin)
+               (call-with-output-file executable
+                 (lambda (file)
+                   (format file
+                           "~a ~a"
+                           python
+                           (string-append out "/share/childsplay/childsplay.py"))))
+               (chmod executable #o555)
+               #t)))
+         (add-after 'install 'create-desktop-file
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (applications (string-append out "/share/applications")))
+               (mkdir-p applications)
+               (call-with-output-file
+                   (string-append applications "/childsplay.desktop")
+                 (lambda (file)
+                   (format file
+                           "[Desktop Entry]~@
+                            Name=Childsplay~@
+                            Comment=Suite of educational games for young children~@
+                            Comment[ca]=Conjunt de jocs educatius per a xiquets~@
+                            Comment[es]=Conjunto de juegos educativos para niños~@
+                            Comment[de]=Sammlung mit lehrreichen Spielen für kleine Kinder~@
+                            Exec=~a/bin/childsplay.py~@
+                            Terminal=false~@
+                            Icon=logo_cp.svg~@
+                            Type=Application~@
+                            Categories=Application;Game;Education;KidsGame;~@
+                            Keywords=suite;children;games;young;educational;~%"
+                           out)))
+               #t))))))
+    (inputs
+     `(("font-dejavu" ,font-dejavu)
+       ("pygame" ,python2-pygame)
+       ("sqlalchemy" ,python2-sqlalchemy)))
+    (synopsis "Suite of educational games for young children")
+    (description "Childsplay is a collection of educational activities
+for young children.  Childsplay can be used at home, kindergartens and
+pre-schools.  Childsplay is a fun and safe way to let young children
+use the computer and at the same time teach them a little math,
+letters of the alphabet, spelling, eye-hand coordination, etc.")
+    (home-page "http://www.schoolsplay.org")
+    (license license:gpl3+)))
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 09be3a75a3..4f365cf205 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -160,13 +160,19 @@ static analysis of the ELF binaries at hand.")
   (package
     (name "libelf")
     (version "0.8.13")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "http://www.mr511.de/software/libelf-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (list
+             ;; As of May 2019, the original URL at mr511.de redirects to a
+             ;; domain that doesn't resolve.  Use these two mirrors instead.
+             (string-append "https://fossies.org/linux/misc/old/"
+                            "libelf-" version ".tar.gz")
+             (string-append "https://ftp.osuosl.org/pub/blfs/conglomeration/"
+                            "libelf/libelf-" version ".tar.gz")))
+       (sha256
+        (base32
+         "0vf7s9dwk2xkmhb79aigqm0x0yfbw1j0b9ksm51207qwr179n6jr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -183,7 +189,8 @@ static analysis of the ELF binaries at hand.")
                                        (%current-system))
                              '("--host=aarch64-unknown-linux-gnu")
                              '()))))))))
-    (home-page "http://www.mr511.de/software/english.html")
+    (home-page (string-append "https://web.archive.org/web/20181111033959/"
+                              "http://www.mr511.de/software/english.html"))
     (synopsis "ELF object file access library")
     (description "Libelf is a C library to access ELF object files.")
     (license lgpl2.0+)))
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index beb35c8122..c2b3bfddcb 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -33,7 +33,7 @@
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2017, 2018, 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Sohom Bhattacharjee <soham.bhattacharjee15@gmail.com>
-;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2018, 2019 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2018, 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2018, 2019 Jack Hill <jackhill@jackhill.us>
@@ -777,7 +777,7 @@ in certain cases.  It also enables recursion for anonymous functions.")
 (define-public emacs-xr
   (package
     (name "emacs-xr")
-    (version "1.11")
+    (version "1.12")
     (source
      (origin
        (method url-fetch)
@@ -785,7 +785,7 @@ in certain cases.  It also enables recursion for anonymous functions.")
              "https://elpa.gnu.org/packages/xr-" version ".tar"))
        (sha256
         (base32
-         "0xwfs2mkmgf63sfp5jwmw0ybc8pa0rlxh5aqwb348ddgmclv322f"))))
+         "1vv87h0h8ldc1mbsn45w5z1m6jq8j2js4xz23a9ixdby06g60y3g"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/xr.html")
     (synopsis "Convert string regexp to rx notation")
@@ -804,10 +804,33 @@ skip set strings, which are arguments to @code{skip-chars-forward} and
 @code{skip-chars-backward}.")
     (license license:gpl3+)))
 
+(define-public emacs-reformatter
+  (package
+    (name "emacs-reformatter")
+    (version "0.4")
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/purcell/reformatter.el.git")
+            (commit version)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "0hhy6x1bkwlhdlarsgm06g3am4yh02yqv8qs34szpzgy53x84qah"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/purcell/reformatter.el")
+    (synopsis "Define commands which run reformatters on the current buffer")
+    (description
+     "This library lets elisp authors easily define an idiomatic command to
+reformat the current buffer using a command-line program, together with an
+optional minor mode which can apply this command automatically on save.")
+    (license license:gpl3+)))
+
 (define-public emacs-relint
   (package
     (name "emacs-relint")
-    (version "1.7")
+    (version "1.8")
     (source
      (origin
        (method url-fetch)
@@ -815,7 +838,7 @@ skip set strings, which are arguments to @code{skip-chars-forward} and
              "https://elpa.gnu.org/packages/relint-" version ".el"))
        (sha256
         (base32
-         "0h9nc84yv5lmbaa8any6i3bqcn6xn1gy6cv6kqaywn0nnqrm17i1"))))
+         "1bl6m2h7131acbmr0kqfnjjpv2syiv2mxfnm61g874ynnvkmmkm3"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-xr" ,emacs-xr)))
     (home-page "https://github.com/mattiase/relint")
@@ -4074,23 +4097,29 @@ well as completely new features.")
     (license license:gpl3+)))
 
 (define-public emacs-highlight-symbol
-  (package
-    (name "emacs-highlight-symbol")
-    (version "1.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/nschum/highlight-symbol.el.git")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "09z13kv2g21kjjkkm3iyaz93sdjmdy2d563r8n7r7ng94acrn7f6"))))
-    (build-system emacs-build-system)
-    (home-page "https://nschum.de/src/emacs/highlight-symbol")
-    (synopsis "Automatic and manual symbol highlighting for Emacs")
-    (description
-     "Use @code{highlight-symbol} to toggle highlighting of the symbol at
+  ;; We prefer a more recent commit that provides an option to squelch
+  ;; echo-area alerts that can drown out useful information like eldoc
+  ;; messages.
+  (let ((commit "7a789c779648c55b16e43278e51be5898c121b3a")
+        (version "1.3")
+        (revision "1"))
+    (package
+      (name "emacs-highlight-symbol")
+      (version (git-version version revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/nschum/highlight-symbol.el.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "19cgyk0sh8nsmf3jbi92i8qsdx4l4yilfq5jj9zfdbj9p5gvwx96"))))
+      (build-system emacs-build-system)
+      (home-page "https://nschum.de/src/emacs/highlight-symbol/")
+      (synopsis "Automatic and manual symbol highlighting for Emacs")
+      (description
+       "Use @code{highlight-symbol} to toggle highlighting of the symbol at
 point throughout the current buffer.  Use @code{highlight-symbol-mode} to keep
 the symbol at point highlighted.
 
@@ -4103,7 +4132,7 @@ bindings @code{M-p} and @code{M-p} for navigation.  When
 regardless of @code{highlight-symbol-idle-delay}.
 
 @code{highlight-symbol-query-replace} can be used to replace the symbol. ")
-    (license license:gpl2+)))
+      (license license:gpl2+))))
 
 (define-public emacs-hl-todo
   (package
@@ -4397,6 +4426,33 @@ splitting the input text by spaces and re-building it into a regular
 expression.")
     (license license:gpl3+)))
 
+(define-public emacs-ivy-pass
+  (let ((commit "5b523de1151f2109fdd6a8114d0af12eef83d3c5")
+        (revision "1"))
+    (package
+      (name "emacs-ivy-pass")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ecraven/ivy-pass.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "18crb4zh2pjf0cmv3b913m9vfng27girjwfqc3mk7vqd1r5a49yk"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-ivy" ,emacs-ivy)
+         ("emacs-password-store" ,emacs-password-store)
+         ("password-store" ,password-store)))
+      (home-page "https://github.com/ecraven/ivy-pass")
+      (synopsis "Ivy interface for password store (pass)")
+      (description "This package provides an Ivy interface for working with
+the password store @code{pass}.")
+      (license license:gpl3))))
+
 (define-public emacs-ivy-yasnippet
   (let ((commit "32580b4fd23ebf9ca7dde96704f7d53df6e253cd")
         (revision "2"))
@@ -4455,7 +4511,7 @@ show icons as well.")
 (define-public emacs-avy
   (package
     (name "emacs-avy")
-    (version "0.4.0")
+    (version "0.5.0")
     (source
      (origin
        (method git-fetch)
@@ -4464,7 +4520,7 @@ show icons as well.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0rq9ab264565z83cly743nbhrd9m967apmnlhqr1gy8dm4hcy7nm"))))
+        (base32 "09qdni1s74i5pv8741szl5g4ynj8fxn0x65qmwa9rmfkbimnc0fs"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/abo-abo/avy")
     (synopsis "Tree-based completion for Emacs")
@@ -4554,37 +4610,35 @@ navigate code in a tree-like fashion.")
       (license license:gpl3+))))
 
 (define-public emacs-lispy
-  ;; Release 0.26.0 was almost 3 years ago, and there have been ~772 commits
-  ;; since.
-  (let ((commit "f94cfc6b8f9c3afe7d028c366928049c011023de")
-        (revision "1"))
-    (package
-      (name "emacs-lispy")
-      (version (git-version "0.26.0" revision commit))
-      (home-page "https://github.com/abo-abo/lispy")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference (url home-page) (commit commit)))
-                (sha256
-                 (base32
-                  "1bm2cpwizg1qfpm377gpx1af1hm5maw69if1csnk5vwaphmv8c4g"))
-                (file-name (git-file-name name version))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-ace-window" ,emacs-ace-window)
-         ("emacs-iedit" ,emacs-iedit)
-         ("emacs-ivy" ,emacs-ivy)
-         ("emacs-hydra" ,emacs-hydra)
-         ("emacs-zoutline" ,emacs-zoutline)))
-      (synopsis "Modal S-expression editing")
-      (description
-       "Due to the structure of Lisp syntax it's very rare for the programmer
+  (package
+    (name "emacs-lispy")
+    (version "0.27.0")
+    (home-page "https://github.com/abo-abo/lispy")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/abo-abo/lispy")
+                    (commit version)))
+              (sha256
+               (base32
+                "1cm7f4pyl73f3vhkb7ah6bbbrj2sa7n0p31g09k7dy4zgx04bgw6"))
+              (file-name (git-file-name name version))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-ace-window" ,emacs-ace-window)
+       ("emacs-iedit" ,emacs-iedit)
+       ("emacs-ivy" ,emacs-ivy)
+       ("emacs-hydra" ,emacs-hydra)
+       ("emacs-zoutline" ,emacs-zoutline)))
+    (synopsis "Modal S-expression editing")
+    (description
+     "Due to the structure of Lisp syntax it's very rare for the programmer
 to want to insert characters right before \"(\" or right after \")\".  Thus
 unprefixed printable characters can be used to call commands when the point is
 at one of these special locations.  Lispy provides unprefixed keybindings for
 S-expression editing when point is at the beginning or end of an
 S-expression.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-lispyville
   (let ((commit "d28b937f0cabd8ce61e2020fe9a733ca80d82c74")
@@ -5554,7 +5608,7 @@ ack, ag, helm and pt.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "3.1")
+    (version "3.2")
     (source
      (origin
        (method git-fetch)
@@ -5563,7 +5617,7 @@ ack, ag, helm and pt.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1x3nv8zvp8vvl30bm2d83hd7zxb0ca64pc8kwb81ml9al6r3mm01"))))
+        (base32 "12yyprpgh2by2pd41i4z9gz55fxg0f90x03bfrsf791xwbhf6931"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -7019,26 +7073,27 @@ actually changing the buffer's text.")
     (license license:gpl3+)))
 
 (define-public emacs-diff-hl
- (package
-  (name "emacs-diff-hl")
-  (version "1.8.5")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "https://elpa.gnu.org/packages/diff-hl-"
-                          version ".tar"))
-      (sha256
+  (package
+    (name "emacs-diff-hl")
+    (version "1.8.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dgutov/diff-hl")
+             (commit version)))
+       (sha256
         (base32
-          "1vxc7z7c2qs0mx7l5sa4sybi5qbzv0s79flj74p1ynw8dl3qxg3d"))))
-  (build-system emacs-build-system)
-  (home-page "https://github.com/dgutov/diff-hl")
-  (synopsis
-    "Highlight uncommitted changes using VC")
-  (description
-    "@code{diff-hl-mode} highlights uncommitted changes on the side of the
+         "1xlsg728mz3cwhrsqvisa0aidic67nymd9g7h4c1h3q63j39yb2s"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/dgutov/diff-hl")
+    (synopsis
+     "Highlight uncommitted changes using VC")
+    (description
+     "@code{diff-hl-mode} highlights uncommitted changes on the side of the
 window (using the fringe, by default), allows you to jump between
 the hunks and revert them selectively.")
-  (license license:gpl3+)))
+    (license license:gpl3+)))
 
 (define-public emacs-diminish
   (package
@@ -9223,16 +9278,16 @@ functionality is inherited from @code{hcl-mode}.")
 (define-public emacs-exec-path-from-shell
   (package
     (name "emacs-exec-path-from-shell")
-    (version "1.11")
+    (version "1.12")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://stable.melpa.org/packages/exec-path-from-shell-"
-             version ".el"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/purcell/exec-path-from-shell")
+             (commit version)))
        (sha256
         (base32
-         "03qjgb81cq1l3j54lvlf98r75vmmgd06mj6qh5wa6mz4xzp4w26r"))))
+         "1ga8bpxngd3ph2hdiik92c612ki71qxw818i6rgx6f6a5r0sbf3p"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/purcell/exec-path-from-shell")
     (synopsis "Get environment variables such as @var{PATH} from the shell")
@@ -12467,16 +12522,17 @@ the GIF result.")
 (define-public emacs-google-translate
   (package
     (name "emacs-google-translate")
-    (version "0.11.16")
+    (version "0.11.17")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/atykhonov/google-translate/"
-                           "archive/v" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/atykhonov/google-translate/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "01n9spj1d0gjfj39x526rl3m9c28wnx9afipmf5s8y77cx3mfwhl"))))
+         "05ljjw7kbnszygw3w085kv57swfiiqxri2b5xvsf5dw3pc3g7j3c"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/atykhonov/google-translate")
     (synopsis "Emacs interface to Google Translate")
@@ -13405,7 +13461,7 @@ backends, including the @command{wordnet} offline backend.")
 (define-public emacs-editorconfig
   (package
     (name "emacs-editorconfig")
-    (version "0.7.14")
+    (version "0.8.0")
     (source
      (origin
        (method git-fetch)
@@ -13415,7 +13471,7 @@ backends, including the @command{wordnet} offline backend.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "19j2428ij7sqvrqs7rqg1mcnv9109y6drqba40dkv3vrkk5d2yia"))))
+         "1b2cpqz75pivl323bs60j5rszwi787x6vy68csycikqz9mhpmjn9"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/editorconfig/editorconfig-emacs")
     (synopsis "Define and maintain consistent coding styles between different
@@ -15346,7 +15402,7 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-counsel-tramp
   (package
     (name "emacs-counsel-tramp")
-    (version "0.6.2")
+    (version "0.6.3")
     (source
      (origin
        (method git-fetch)
@@ -15356,7 +15412,7 @@ well as an option for visually flashing evaluated s-expressions.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0nz0733x2b9b5nkwivvhv5c8747dng451na1sdfbkx5x9fjs5gc7"))))
+         "1qy9lf7cyv6hp9mmpwh92cpdcffbxzyzchx6878d5pmk9qh6xy92"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-ivy" ,emacs-ivy)))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 23e5a976ce..98e7b44cc7 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -407,7 +407,7 @@ Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
 (define-public mgba
   (package
     (name "mgba")
-    (version "0.7.1")
+    (version "0.7.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -416,7 +416,7 @@ Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0q0yg2zna7gjbvpaswyykbg3lr9k3c8l8fydqa407xrgq77lahq4"))
+                "0g0xa1mzvan0sl1p5c784j2g5mcw9kd2b7wiahy06gy0c1nmbcnp"))
               (modules '((guix build utils)))
               (snippet
                ;; Make sure we don't use the bundled software.
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 62f6051e98..c3177a0b1c 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1521,5 +1521,4 @@ the original, ioquake3 has been cleaned up, bugs have been fixed and features
 added.  The permanent goal is to create the open source Quake 3 distribution
 upon which people base their games, ports to new platforms, and other
 projects.")
-      (supported-systems '("x86_64-linux" "i686-linux"))
       (license license:gpl2))))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 541587e059..4fdc9b01e6 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -141,6 +141,7 @@
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages squirrel)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages terminals)
@@ -3495,19 +3496,36 @@ with the \"Stamp\" tool within Tux Paint.")
 (define-public supertux
   (package
    (name "supertux")
-   (version "0.5.1")
+   (version "0.6.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://github.com/SuperTux/supertux/"
                                 "releases/download/v" version "/SuperTux-v"
                                 version "-Source.tar.gz"))
+            (file-name (string-append name "-" version ".tar.gz"))
             (sha256
              (base32
-              "1i8avad7w7ikj870z519j383ldy29r6f956bs38cbr8wk513pp69"))))
+              "1h1s4abirkdv4ag22zvyk6zkk64skqbjmcnnba67ps4hdzxfbhy4"))
+            (patches
+             (search-patches "supertux-fix-build-with-gcc5.patch"
+                             "supertux-unbundle-squirrel.patch"))))
    (arguments
     '(#:tests? #f
       #:configure-flags '("-DINSTALL_SUBDIR_BIN=bin"
-                          "-DENABLE_BOOST_STATIC_LIBS=OFF")))
+                          "-DENABLE_BOOST_STATIC_LIBS=OFF"
+                          "-DUSE_SYSTEM_PHYSFS=ON")
+      #:phases
+      (modify-phases %standard-phases
+        (add-after 'unpack 'patch-squirrel-path
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((squirrel (assoc-ref inputs "squirrel")))
+              (substitute* "CMakeLists.txt"
+                (("set\\(SQUIRREL_PREFIX.*")
+                 (string-append "set(SQUIRREL_PREFIX " squirrel ")"))
+                (("add_dependencies\\(supertux2_lib squirrel\\)") "")
+                (("\\$\\{SQUIRREL_PREFIX\\}/include")
+                 (string-append "${SQUIRREL_PREFIX}/include/squirrel"))))
+            #t)))))
    (build-system cmake-build-system)
    (inputs `(("sdl2" ,sdl2)
              ("sdl2-image" ,sdl2-image)
@@ -3519,7 +3537,9 @@ with the \"Stamp\" tool within Tux Paint.")
              ("libogg" ,libogg)
              ("physfs" ,physfs)
              ("curl" ,curl)
-             ("boost" ,boost)))
+             ("boost" ,boost)
+             ("freetype" ,freetype)
+             ("squirrel" ,squirrel)))
    (native-inputs `(("pkg-config" ,pkg-config)))
    (synopsis "2D platformer game")
    (description "SuperTux is a free classic 2D jump'n run sidescroller game
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 94f2cf0cfb..ec5ace3519 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,6 +37,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -840,3 +842,30 @@ map, geocoding with Nominatim, or general analysis.")
 the texture and density of features is visible at every zoom level, instead of
 dropping features at lower levels.")
     (license license:bsd-2)))
+
+(define-public osmctools
+  (package
+    (name "osmctools")
+    (version "0.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/osm-c-tools/osmctools")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1m8d3r1q1v05pkr8k9czrmb4xjszw6hvgsf3kn9pf0v14gpn4r8f"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)))
+    (inputs
+     `(("zlib" ,zlib)))
+    (home-page "https://gitlab.com/osm-c-tools/osmctools")
+    (synopsis "Tools to convert, filter and update OpenStreetMap data files")
+    (description "This project contains a few tools which are used in the
+OpenStreetMap project.  They can be used to convert, filter and update
+OpenStreetMap data files.")
+    (license license:agpl3)))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 868ca1cdaa..f1952be840 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -162,6 +162,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -4444,7 +4445,7 @@ principles are simplicity and standards compliance.")
 (define-public d-feet
   (package
     (name "d-feet")
-    (version "0.3.11")
+    (version "0.3.14")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4452,7 +4453,7 @@ principles are simplicity and standards compliance.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1hmrijm4d9vwzx2r8qzzsy8ccpj79l1y6cc569n9jjzqcq699p53"))))
+                "1m8lwiwl5jhi0x7y6x5zmd3hjplgvdjrb8a8jg74rvkygslj1p7f"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:out-of-source? #f ; tests need to run in the source directory.
@@ -4491,6 +4492,7 @@ principles are simplicity and standards compliance.")
      `(("gobject-introspection" ,gobject-introspection)
        ("gtk+" ,gtk+)
        ("python" ,python-wrapper)
+       ("hicolor-icon-theme" ,hicolor-icon-theme)
        ("python-pygobject" ,python-pygobject)))
     (home-page "https://wiki.gnome.org/Apps/DFeet")
     (synopsis "D-Bus debugger")
@@ -7973,3 +7975,95 @@ functionality.")
     (license (list license:lgpl2.1 license:lgpl3 ; either one of these
                    license:openldap2.8 ; addressbook/gui/component/openldap-extract.h
                    license:lgpl2.1+))))  ; smime/lib/*
+
+(define-public gthumb
+  (package
+    (name "gthumb")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/gthumb/"
+                                  (version-major+minor version) "/"
+                                  "gthumb-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1l2s1facq1r6yvqjqc34aqfzlvb3nhkhn79xisxbbdlgrrxdq52f"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:configure-flags
+       ;; Ensure the RUNPATH contains all installed library locations.
+       (list (string-append "-Dc_link_args=-Wl,-rpath="
+                            (assoc-ref %outputs "out")
+                            "/lib/gthumb/extensions")
+             (string-append "-Dcpp_link_args=-Wl,-rpath="
+                            (assoc-ref %outputs "out")
+                            "/lib/gthumb/extensions"))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("glib:bin" ,glib "bin")                   ; for glib-compile-resources
+       ("gtk+:bin" ,gtk+ "bin")                   ; for gtk-update-icon-cache
+       ("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
+       ("intltool" ,intltool)
+       ("itstool" ,itstool)))
+    (inputs
+     `(("exiv2" ,exiv2)
+       ("gtk" ,gtk+)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gstreamer" ,gstreamer)
+       ("clutter" ,clutter)
+       ("clutter-gst" ,clutter-gst)
+       ("clutter-gtk" ,clutter-gtk)
+       ("libjpeg" ,libjpeg)
+       ("libtiff" ,libtiff)
+       ("libraw" ,libraw)))
+    (home-page "https://wiki.gnome.org/Apps/Gthumb")
+    (synopsis "GNOME image viewer and browser")
+    (description "GThumb is an image viewer, browser, organizer, editor and
+advanced image management tool")
+    (license license:gpl2+)))
+
+(define-public terminator
+  (package
+    (name "terminator")
+    (version "1.91")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://launchpad.net/" name "/"
+                                  "gtk3/" version "/" "+download/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sdyqwydmdnh7j6mn74vrywz35m416kqsbxbrqcnv5ak08y6xxwm"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("glib:bin" ,glib "bin")                   ; for glib-compile-resources
+       ("gettext" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("gobject-introspection" ,gobject-introspection)
+       ("python2-pycairo" ,python2-pycairo)
+       ("python2-pygobject" ,python2-pygobject)
+       ("python2-psutil" ,python2-psutil)
+       ("vte" ,vte)))
+    (arguments
+     `(#:python ,python-2                          ;Python 3 not supported
+       #:phases
+       (modify-phases %standard-phases
+         (add-after
+          'install 'wrap-program
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let ((prog (string-append (assoc-ref outputs "out")
+                                       "/bin/terminator")))
+              (wrap-program prog
+                `("PYTHONPATH" = (,(getenv "PYTHONPATH")))
+                `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
+              #t))))))
+    (home-page "https://gnometerminator.blogspot.com/")
+    (synopsis "Store and run multiple GNOME terminals in one window")
+    (description
+     "Terminator allows you to run multiple GNOME terminals in a grid and
++tabs, and it supports drag and drop re-ordering of terminals.")
+    (license license:gpl2)))
diff --git a/gnu/packages/gnucash.scm b/gnu/packages/gnucash.scm
index 5b4da97e5d..2196a8c50a 100644
--- a/gnu/packages/gnucash.scm
+++ b/gnu/packages/gnucash.scm
@@ -54,7 +54,7 @@
   ;; directory.
   (package
     (name "gnucash")
-    (version "3.4")
+    (version "3.5")
     (source
      (origin
        (method url-fetch)
@@ -62,8 +62,7 @@
                            version "/gnucash-" version ".tar.bz2"))
        (sha256
         (base32
-         "1ms2wg4sh5gq3rpjmmnp85rh5nc9ahca1imxkvhz4d3yiwy8hm52"))
-       (patches (search-patches "gnucash-fix-test-transaction-failure.patch"))))
+         "0ibp7g6aknvnkwkin97kv04ipksy3l18dsz9qysjb7h2nr8hnvbp"))))
     (build-system cmake-build-system)
     (inputs
      `(("guile" ,guile-2.2)
@@ -197,7 +196,7 @@ installed as well as Yelp, the Gnome help browser.")
 ;; This package is not public, since we use it to build the "doc" output of
 ;; the gnucash package (see above).  It would be confusing if it were public.
 (define gnucash-docs
-  (let ((revision "a"))              ;set to the empty string when no revision
+  (let ((revision ""))              ;set to the empty string when no revision
     (package
       (name "gnucash-docs")
       (version (package-version gnucash))
@@ -208,7 +207,7 @@ installed as well as Yelp, the Gnome help browser.")
                              version "/gnucash-docs-" version revision ".tar.gz"))
          (sha256
           (base32
-           "0bgjxpxgk7hy8ihn1kvd8p6vv191q5md2hz6jb9mqc4aykpvdlq7"))))
+           "0gjndyms413vilf5nqh39frs1691sxib8l7y9mbvcyirj1f8285k"))))
       (build-system gnu-build-system)
       ;; These are native-inputs because they are only required for building the
       ;; documentation.
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index ed0a78c6bd..18013a4450 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright @ 2018, 2019 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright @ 2019 Giovanni Biscuolo <g@xelera.eu>
+;;; Copyright @ 2019 Alex Griffin <a@ajgrf.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -61,14 +62,16 @@
 (define-public go-1.4
   (package
     (name "go")
-    (version "1.4.3")
+    ;; The C-language bootstrap of Go:
+    ;; https://golang.org/doc/install/source#go14
+    (version "1.4-bootstrap-20171003")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://storage.googleapis.com/golang/"
-                                  name version ".src.tar.gz"))
+                                  name version ".tar.gz"))
               (sha256
                (base32
-                "0na9yqilzpvq0bjndbibfp07wr796gf252y471cip10bbdqgqiwr"))))
+                "0liybk5z00hizsb5ypkbhqcawnwwa6mkwgvjjg4y3jm3ndg5pzzl"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"
@@ -135,13 +138,6 @@
                   ("os/os_test.go" "(.+)(TestHostname.+)")
                   ("time/format_test.go" "(.+)(TestParseInSydney.+)")
 
-                  ;; Tzdata 2016g changed the name of the time zone used in this
-                  ;; test, and the patch for Go 1.7 does not work for 1.4.3:
-                  ;; https://github.com/golang/go/issues/17545
-                  ;; https://github.com/golang/go/issues/17276
-                  ("time/time_test.go" "(.+)(TestLoadFixed.+)")
-                  ("time/format_test.go" "(.+)(TestParseInLocation.+)")
-
                   ("os/exec/exec_test.go" "(.+)(TestEcho.+)")
                   ("os/exec/exec_test.go" "(.+)(TestCommandRelativeName.+)")
                   ("os/exec/exec_test.go" "(.+)(TestCatStdin.+)")
@@ -168,9 +164,7 @@
                (setenv "GOOS" "linux")
                (setenv "GOROOT" (dirname (getcwd)))
                (setenv "GOROOT_FINAL" output)
-               ;; Go 1.4's cgo will not work with binutils >= 2.27:
-               ;; https://github.com/golang/go/issues/16906
-               (setenv "CGO_ENABLED" "0")
+               (setenv "GO14TESTS" "1")
                (invoke "sh" "all.bash"))))
 
          (replace 'install
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index ea5c0fa11a..820fd4b41d 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -348,7 +348,10 @@ diagrams.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "07hrabhpl6n8ajz10s0d960jdwndxs87szxyn428mpxi8cvpg1f5"))))
+                "07hrabhpl6n8ajz10s0d960jdwndxs87szxyn428mpxi8cvpg1f5"))
+              (patches
+                (search-patches
+                  "gtksourceview-2-add-default-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("intltool" ,intltool)
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 365f909c2c..43bdcab263 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
 ;;; Copyright © 2016 Amirouche <amirouche@hypermove.net>
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016, 2019 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2017 David Thompson <davet@gnu.org>
 ;;; Copyright © 2017, 2018 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -53,8 +53,10 @@
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gperf)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages image)
@@ -76,11 +78,13 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix hg-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system guile)
   #:use-module (guix utils)
@@ -2232,3 +2236,72 @@ slashes are present and accounted for, resolving @code{.} and @code{..}, etc).
 Inevitably, you have to break the string up into chunks and operate on that
 list of components.  This module takes care of that for you.")
     (license license:lgpl3+)))
+
+(define-public guile-gi
+  (let ((commit "91753258892c4a1fbf7ed43ff793a00ac0f77cf6")
+        (revision "0"))
+    (package
+      (name "guile-gi")
+      (version (string-append "0.0.1-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/janneke/guile-gi.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version))
+                (sha256
+                 (base32
+                  "1i76jfs90p8pbx0bfrjd4sias9380pmjb9x387rx7hav4kvnsd1b"))))
+      (build-system gnu-build-system)
+      (native-inputs `(("autoconf" ,autoconf)
+                       ("automake" ,automake)
+                       ("gettext" ,gnu-gettext)
+                       ("libtool" ,libtool)
+                       ("pkg-config" ,pkg-config)
+                       ("texinfo" ,texinfo)))
+      (propagated-inputs `(("glib" ,glib)
+                           ("gobject-introspection" ,gobject-introspection)
+                           ("gssettings-desktop-schemas" ,gsettings-desktop-schemas)
+                           ("gtk+" ,gtk+)
+                           ("guile-lib" ,guile-lib)
+                           ("webkitgtk" ,webkitgtk)))
+      (inputs `(("guile" ,guile-2.2)))
+      (arguments
+       `(#:configure-flags '("--with-gnu-filesystem-hierarchy")))
+      (home-page "https://github.com/spk121/guile-gi")
+      (synopsis "GObject bindings for Guile")
+      (description
+       "Guile-GI is a library for Guile that allows using GObject-based
+libraries, such as GTK+3.  Its README comes with the disclaimer: This is
+pre-alpha code.")
+      (license license:gpl3+))))
+
+(define-public guile-srfi-159
+  (let ((commit "1bd98abda2ae4ef8f36761a167903e55c6bda7bb")
+        (revision "0"))
+    (package
+      (name "guile-srfi-159")
+      (version (git-version "0" revision commit))
+      (home-page "https://bitbucket.org/bjoli/guile-srfi-159")
+      (source (origin
+                (method hg-fetch)
+                (uri (hg-reference (changeset commit)
+                                   (url home-page)))
+                (sha256
+                 (base32
+                  "1zw6cmcy7xdbfiz3nz9arqnn7l2daidaps6ixkcrc9b6k51fdv3p"))
+                (file-name (git-file-name name version))))
+      (build-system guile-build-system)
+      (arguments
+       ;; The *-impl.scm files are actually included from module files; they
+       ;; should not be compiled separately, but they must be installed.
+       '(#:not-compiled-file-regexp "-impl\\.scm$"))
+      (inputs
+       `(("guile" ,guile-2.2)))
+      (synopsis "Formatting combinators for Guile")
+      (description
+       "The @code{(srfi-159)} module and its sub-modules implement the
+formatting combinators specified by
+@uref{https://srfi.schemers.org/srfi-159/srfi-159.html, SRFI-159}.  These are
+more expressive and flexible than the traditional @code{format} procedure.")
+      (license license:bsd-3))))
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 33c9c6484d..822b0499b6 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -1325,6 +1325,16 @@ postfix notation.  For more information on stack based languages, see
         (base32
          "138xpxdb7x62lpmgmb6b3v3vgdqqvqn4273jaap3mjmc2gla709y"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'skip-test-issue93
+           (lambda _
+             ;; Tests run out of memory on a system with 2GB of available RAM,
+             ;; in 'issue93.a.hs' and 'issue93.n.hs'.
+             (substitute* "tests/Makefile"
+               ((" issue93.y ") " "))
+             #t)))))
     (home-page "https://hackage.haskell.org/package/happy")
     (synopsis "Parser generator for Haskell")
     (description "Happy is a parser generator for Haskell.  Given a grammar
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 01e1e3b00a..bb96fd6abf 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
@@ -41,7 +41,7 @@
 (define-public libevent
   (package
     (name "libevent")
-    (version "2.1.8")
+    (version "2.1.10")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -49,11 +49,7 @@
                    version "-stable/libevent-" version "-stable.tar.gz"))
              (sha256
               (base32
-               "1hhxnxlr0fsdv7bdmzsnhdz16fxf3jg2r6vyljcl3kj6pflcap4n"))
-             (patches (search-patches "libevent-2.1-dns-tests.patch"
-                                      ;; XXX: Try removing this for > 2.1.8.
-                                      ;; https://github.com/libevent/libevent/issues/452
-                                      "libevent-2.1-skip-failing-test.patch"))))
+               "1c25928gdv495clxk2v1d4gkr5py7ack4gx2n7d13frnld0syr78"))))
     (build-system gnu-build-system)
     (arguments
       ;; This skips some of the tests which fail on armhf and aarch64.
@@ -154,19 +150,6 @@ resolution, asynchronous file system operations, and threading primitives.")
     ;; details.  Documentation is CC-BY 4.0 as of 1.12.0; see 'LICENSE-docs'.
     (license (list expat cc-by4.0))))
 
-;; This version is required for Node versions < 10.
-(define-public libuv-1.19
-  (package
-    (inherit libuv)
-    (version "1.19.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://dist.libuv.org/dist/v" version
-                                  "/libuv-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "1msk9ac1z69whww88ibrwjqkd1apdla6l77cm2fwy5kigq0z5g3w"))))))
-
 (define-public perl-anyevent
   (package
     (name "perl-anyevent")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index ef4d7a3543..62f9b12ae5 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -34,6 +34,7 @@
 ;;; 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 Stefan Stefanović <stefanx2ovic@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -143,6 +144,7 @@
           ((string-prefix? "alpha" arch) "alpha")
           ((string-prefix? "powerpc" arch) "powerpc") ;including "powerpc64le"
           ((string-prefix? "s390" arch) "s390")
+          ((string-prefix? "riscv" arch) "riscv")
           (else arch))))
 
 (define-public (system->defconfig system)
@@ -169,18 +171,20 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
          "mirror://gnu/linux-libre/" version "-gnu/linux-libre-"
          version "-gnu.tar.xz")))
 
-(define-public linux-libre-headers
+(define (make-linux-libre-headers version hash)
   (package
     (name "linux-libre-headers")
-    (version "4.14.67")
+    (version version)
     (source (origin
              (method url-fetch)
              (uri (linux-libre-urls version))
-             (sha256
-              (base32
-               "050zvdxjy6sc64q75pr1gxsmh49chwav2pwxz8xlif39bvahnrpg"))))
+             (sha256 (base32 hash))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)))
+    (native-inputs `(("perl" ,perl)
+                     ,@(if (version>=? version "4.16")
+                           `(("flex" ,flex)
+                             ("bison" ,bison))
+                           '())))
     (arguments
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
@@ -246,7 +250,7 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
           "/raw/34a7d9011fcfcfa38b68282fd2b1a8797e6834f0"
           "/debian/patches/bugfix/arm/"
           "arm-mm-export-__sync_icache_dcache-for-xen-privcmd.patch"))
-    (file-name "linux-libre-4.19-arm-export-__sync_icache_dcache.patch")
+    (file-name "linux-libre-arm-export-__sync_icache_dcache.patch")
     (sha256
      (base32 "1ifnfhpakzffn4b8n7x7w5cps9mzjxlkcfz9zqak2vaw8nzvl39f"))))
 
@@ -426,22 +430,26 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
 It has been modified to remove all non-free binary blobs.")
     (license license:gpl2)))
 
-(define %linux-libre-version "5.1.4")
-(define %linux-libre-hash "02pzad29w2apcqsk4r4fq93539z3by8kvk1f59lb8xnl0gvhdi5v")
+(define %linux-libre-version "5.1.6")
+(define %linux-libre-hash "0m7yi23wlgrh16z5z9dxb7dd64i2irrkdwxi71i88mradn55iq42")
 
 (define %linux-libre-5.1-patches
   (list %boot-logo-patch
         %linux-libre-arm-export-__sync_icache_dcache-patch))
 
-(define-public linux-libre
+(define-public linux-libre-5.1
   (make-linux-libre %linux-libre-version
                     %linux-libre-hash
                     '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
                     #:patches %linux-libre-5.1-patches
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.19-version "4.19.45")
-(define %linux-libre-4.19-hash "1wiy8vzpzzml4k76nv3ycjx7ky55x7dqx3mgpjqbh73mj2gcr5bx")
+(define-public linux-libre-headers-5.1
+  (make-linux-libre-headers %linux-libre-version
+                            %linux-libre-hash))
+
+(define %linux-libre-4.19-version "4.19.47")
+(define %linux-libre-4.19-hash "155rn6f555d2r1bqzi74zdif44ay7gk25xxjgw36s9n26dml8wf7")
 
 (define %linux-libre-4.19-patches
   (list %boot-logo-patch
@@ -454,8 +462,26 @@ It has been modified to remove all non-free binary blobs.")
                     #:patches %linux-libre-4.19-patches
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.121")
-(define %linux-libre-4.14-hash "1g7gyjmp056pasf9m34dqs8pa15my6hqasdd551jw8mgkbhsfnxg")
+(define-public linux-libre-headers-4.19
+  (make-linux-libre-headers %linux-libre-4.19-version
+                            %linux-libre-4.19-hash))
+
+(define %linux-libre-4.15-version "4.15.18")
+(define %linux-libre-4.15-hash "0f0s4drx888ydlwjcm9qcxqian4850yiv2vamyw9bbjf83frwxyw")
+
+(define-public linux-libre-4.15
+  (make-linux-libre %linux-libre-4.15-version
+                    %linux-libre-4.15-hash
+                    '("x86_64-linux" "i686-linux" "armhf-linux")
+                    #:configuration-file kernel-config))
+
+(define-public linux-libre-headers-4.15
+  (make-linux-libre-headers %linux-libre-4.15-version
+                            %linux-libre-4.15-hash))
+
+
+(define %linux-libre-4.14-version "4.14.123")
+(define %linux-libre-4.14-hash "185kf576rwhsaq7jqrnmg8r5fh2nh4k8lifxaxwi3amshnwbj2qg")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -463,9 +489,13 @@ It has been modified to remove all non-free binary blobs.")
                     '("x86_64-linux" "i686-linux" "armhf-linux")
                     #:configuration-file kernel-config))
 
+(define-public linux-libre-headers-4.14
+  (make-linux-libre-headers %linux-libre-4.14-version
+                            %linux-libre-4.14-hash))
+
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.178"
-                    "1ridlkymf382qnkc6hi07pkghrrxfv2avx55snjnkfcpdccvsmrb"
+  (make-linux-libre "4.9.180"
+                    "062ybvc5ljpbn8llj62zsvvykl5rikn0jfzh62nrrdsnj7mvi77a"
                     '("x86_64-linux" "i686-linux")
                     #:configuration-file kernel-config))
 
@@ -481,21 +511,28 @@ It has been modified to remove all non-free binary blobs.")
                        ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t))
                      %default-extra-linux-options)))
 
-(define-public linux-libre-arm-generic
+(define-public linux-libre-arm-veyron
   (make-linux-libre %linux-libre-version
                     %linux-libre-hash
                     '("armhf-linux")
                     #:patches %linux-libre-5.1-patches
-                    #:defconfig "multi_v7_defconfig"
-                    #:extra-version "arm-generic"))
+                    #:configuration-file kernel-config-veyron
+                    #:extra-version "arm-veyron"))
 
-(define-public linux-libre-arm-veyron
+(define-public linux-libre-headers-4.14.67
+  (make-linux-libre-headers "4.14.67"
+                            "050zvdxjy6sc64q75pr1gxsmh49chwav2pwxz8xlif39bvahnrpg"))
+
+(define-public linux-libre-headers linux-libre-headers-4.14.67)
+(define-public linux-libre linux-libre-5.1)
+
+(define-public linux-libre-arm-generic
   (make-linux-libre %linux-libre-version
                     %linux-libre-hash
                     '("armhf-linux")
                     #:patches %linux-libre-5.1-patches
-                    #:configuration-file kernel-config-veyron
-                    #:extra-version "arm-veyron"))
+                    #:defconfig "multi_v7_defconfig"
+                    #:extra-version "arm-generic"))
 
 (define-public linux-libre-arm-generic-4.19
   (make-linux-libre %linux-libre-4.19-version
@@ -535,28 +572,6 @@ It has been modified to remove all non-free binary blobs.")
                     #:defconfig "omap2plus_defconfig"
                     #:extra-version "arm-omap2plus"))
 
-(define-public vhba-module
-  (package
-    (name "vhba-module")
-    (version "20190410")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://downloads.sourceforge.net/cdemu/vhba-module/vhba-module-"
-                    version ".tar.bz2"))
-              (sha256
-               (base32
-                "1513hq130raxp9z5grj54cwfjfxj05apipxg425j0zicii59a60c"))))
-    (build-system linux-module-build-system)
-    (arguments
-     ;; TODO: No tests?
-     `(#:tests? #f))
-    (home-page "https://cdemu.sourceforge.io/")
-    (synopsis "Kernel module that emulates SCSI devices")
-    (description "VHBA module provides a Virtual (SCSI) HBA, which is the link
-between the CDemu userspace daemon and linux kernel.")
-    (license license:gpl2+)))
-
 
 ;;;
 ;;; Linux kernel modules.
@@ -4061,6 +4076,39 @@ Linux kernel to retrieve and control processor features related to power saving,
 such as frequency and voltage scaling.")
     (license license:gpl2)))
 
+(define-public x86-energy-perf-policy
+  (package
+    (name "x86-energy-perf-policy")
+    (version (package-version linux-libre))
+    (source (package-source linux-libre))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-subdirectory
+           (lambda _
+             (chdir "tools/power/x86/x86_energy_perf_policy")
+             #t))
+         (delete 'configure)
+         (add-before 'build 'fix-makefile
+           (lambda _
+             (substitute* "Makefile" (("/usr") ""))
+             #t)))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list (string-append "DESTDIR=" out)
+               (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (home-page (package-home-page linux-libre))
+    (synopsis "Display and update Intel-CPU energy-performance policy")
+    (description
+     "@command{x86_energy_perf_policy} displays and updates energy-performance
+policy settings specific to Intel Architecture Processors.  Settings are
+accessed via Model Specific Register (MSR) updates, no matter if the Linux
+cpufreq sub-system is enabled or not.")
+    (license license:gpl2)))
+
 (define-public haveged
   (package
     (name "haveged")
@@ -4589,10 +4637,19 @@ interface in sysfs, which can be accomplished with the included udev rules.")
               ("sed" ,sed)
               ("usbutils" ,usbutils)
               ("util-linux" ,util-linux)
-              ("wireless-tools" ,wireless-tools)))
+              ("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
-     `(#:phases
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
+       #:phases
        (modify-phases %standard-phases
          (delete 'configure)            ; no configure script
          (add-before 'build 'setenv
@@ -4630,30 +4687,34 @@ interface in sysfs, which can be accomplished with the included udev rules.")
              (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
                     (bin-files (find-files bin ".*")))
                (define (bin-directory input-name)
-                 (string-append (assoc-ref inputs input-name) "/bin"))
+                 (let ((p (assoc-ref inputs input-name)))
+                   (and p (string-append p "/bin"))))
                (define (sbin-directory input-name)
                  (string-append (assoc-ref inputs input-name) "/sbin"))
                (for-each (lambda (program)
                            (wrap-program program
                              `("PATH" ":" prefix
                                ,(append
-                                 (map bin-directory '("bash"
-                                                      "coreutils"
-                                                      "dbus"
-                                                      "eudev"
-                                                      "grep"
-                                                      "inetutils"
-                                                      "kmod"
-                                                      "perl"
-                                                      "sed"
-                                                      "usbutils"
-                                                      "util-linux"))
-                                 (map sbin-directory '("ethtool"
-                                                       "hdparm"
-                                                       "iw"
-                                                       "pciutils"
-                                                       "rfkill"
-                                                       "wireless-tools"))))))
+                                 (filter-map bin-directory
+                                             '("bash"
+                                               "coreutils"
+                                               "dbus"
+                                               "eudev"
+                                               "grep"
+                                               "inetutils"
+                                               "kmod"
+                                               "perl"
+                                               "sed"
+                                               "usbutils"
+                                               "util-linux"
+                                               "x86-energy-perf-policy"))
+                                 (filter-map sbin-directory
+                                             '("ethtool"
+                                               "hdparm"
+                                               "iw"
+                                               "pciutils"
+                                               "rfkill"
+                                               "wireless-tools"))))))
                          bin-files)
                #t))))))
     (home-page "http://linrunner.de/en/tlp/tlp.html")
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 167c4433b1..dfc58d469f 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2019 Jesse Gildersleve <jessejohngildersleve@protonmail.com>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,8 +46,10 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages ed)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
@@ -5321,3 +5324,48 @@ port within a range.")
 
 (define-public ecl-find-port
   (sbcl-package->ecl-package sbcl-find-port))
+
+(define-public txr
+  (package
+    (name "txr")
+    (version "216")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.kylheku.com/cgit/txr/snapshot/txr-"
+                           version
+                           ".tar.bz2"))
+       (patches (search-patches "txr-shell.patch"))
+       (sha256
+        (base32
+         "07cxdpc9zsqd0c2668g00dqjpd6zc4mfdn74aarr6d2hpzdhh937"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("cc=gcc")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'configure 'fix-tests
+                    (lambda _
+                      (substitute* "tests/017/realpath.tl"
+                        (("/usr/bin") "/"))
+                      (substitute* "tests/017/realpath.expected"
+                        (("/usr/bin") "/"))
+                      #t))
+                  (replace 'check
+                    (lambda _
+                      (zero? (system* "make" "tests")))))))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (inputs
+     `(("libffi" ,libffi)))
+    (synopsis "General-purpose, multi-paradigm programming language")
+    (description
+     "TXR is a general-purpose, multi-paradigm programming language.  It
+comprises two languages integrated into a single tool: a text scanning and
+extraction language referred to as the TXR Pattern Language (sometimes just
+\"TXR\"), and a general-purpose dialect of Lisp called TXR Lisp.  TXR can be
+used for everything from \"one liner\" data transformation tasks at the
+command line, to data scanning and extracting scripts, to full application
+development in a wide-range of areas.")
+    (home-page "https://nongnu.org/txr/")
+    (license license:bsd-2)))
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 77e12f83e2..b330b2357f 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -573,16 +573,16 @@ in terms of new algorithms.")
 (define-public rxcpp
   (package
     (name "rxcpp")
-    (version "4.0.0")
+    (version "4.1.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/ReactiveX/RxCpp/archive/v"
-                           version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ReactiveX/RxCpp.git")
+             (commit (string-append "v" version))))
        (sha256
-        (base32
-         "0y2isr8dy2n1yjr9c5570kpc9lvdlch6jv0jvw000amwn5d3krsh"))
-       (file-name (string-append name "-" version ".tar.gz"))))
+        (base32 "1rdpa3jlc181jd08nk437aar085h28i45s6nzrv65apb3xyyz0ij"))
+       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index f234d2c860..c2a6aaf011 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -79,8 +79,7 @@
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -136,14 +135,14 @@ actions.")
   (package
     (name "mate-icon-theme")
     (version "1.22.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://pub.mate-desktop.org/releases/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "090vfxpn1b1wwvkilv1j3cx4swdm4z0s7xyvhvqhdzj58zsf2000"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "090vfxpn1b1wwvkilv1j3cx4swdm4z0s7xyvhvqhdzj58zsf2000"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -159,14 +158,14 @@ actions.")
   (package
     (name "mate-icon-theme-faenza")
     (version "1.20.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://pub.mate-desktop.org/releases/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "000vr9cnbl2qlysf2gyg1lsjirqdzmwrnh6d3hyrsfc0r2vh4wna"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "000vr9cnbl2qlysf2gyg1lsjirqdzmwrnh6d3hyrsfc0r2vh4wna"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -197,11 +196,11 @@ from Mint-X-F and Faenza-Fresh icon packs.")
   (package
     (name "mate-themes")
     (version "3.22.19")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://pub.mate-desktop.org/releases/themes/"
-                                  (version-major+minor version) "/mate-themes-"
-                                  version ".tar.xz"))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://mate/themes/" (version-major+minor version)
+                           "/mate-themes-" version ".tar.xz"))
               (sha256
                (base32
                 "1ycb8b8r0s8d1h1477135mynr53s5781gdb2ap8xlvj2g58492wq"))))
@@ -225,14 +224,14 @@ themes for both gtk+-2 and gtk+-3.")
   (package
     (name "mate-desktop")
     (version "1.22.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://pub.mate-desktop.org/releases/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "09gn840p6qds21kxab4pidjd53g76s76i7178fdibrz462mda217"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "09gn840p6qds21kxab4pidjd53g76s76i7178fdibrz462mda217"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -259,14 +258,14 @@ desktop and the mate-about program.")
   (package
     (name "libmateweather")
     (version "1.22.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://pub.mate-desktop.org/releases/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1ribgcwl4ncfbcf9bkcbxrgc7yzajdnxg12837psngymkqswlp6a"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1ribgcwl4ncfbcf9bkcbxrgc7yzajdnxg12837psngymkqswlp6a"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -308,8 +307,7 @@ the MATE desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -349,8 +347,7 @@ configurations (profiles).")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -417,8 +414,7 @@ configuration program to choose applications starting on login.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -460,8 +456,7 @@ configuration program to choose applications starting on login.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -490,8 +485,7 @@ sound systems.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -519,14 +513,14 @@ MATE desktop environment.")
   (package
     (name "mate-menus")
     (version "1.22.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://pub.mate-desktop.org/releases/"
-                                  (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1lkakbf2f1815c146z4xp5f0h4lim6jzr02681wbvzalc6k97v5c"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1lkakbf2f1815c146z4xp5f0h4lim6jzr02681wbvzalc6k97v5c"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -563,8 +557,7 @@ assorted menu related utility programs.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -637,8 +630,7 @@ Interactive Weather Information Network (IWIN).
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -674,8 +666,7 @@ mate-volume-control, a MATE volume control application and applet.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -748,8 +739,7 @@ infamous 'Wanda the Fish'.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -852,8 +842,7 @@ infamous 'Wanda the Fish'.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -911,8 +900,7 @@ icons on the MATE desktop.  It works on local and remote file systems.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -966,8 +954,7 @@ icons on the MATE desktop.  It works on local and remote file systems.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1026,8 +1013,7 @@ of various aspects of your desktop.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1077,8 +1063,7 @@ for use with MATE or as a standalone window manager.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1117,8 +1102,7 @@ sessions, panels, menus, file management, and preferences.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1149,8 +1133,7 @@ sessions, panels, menus, file management, and preferences.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1172,8 +1155,7 @@ can be used as backgrounds in the MATE Desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1214,8 +1196,7 @@ Re-decorates windows on un-maximise.
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1286,8 +1267,7 @@ can be used as backgrounds in the MATE Desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1339,8 +1319,7 @@ can be used as backgrounds in the MATE Desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1390,8 +1369,7 @@ can be used as backgrounds in the MATE Desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1444,8 +1422,7 @@ can be used as backgrounds in the MATE Desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1495,8 +1472,7 @@ can be used as backgrounds in the MATE Desktop environment.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
@@ -1536,8 +1512,7 @@ MATE Desktop to monitor your system resources and usage.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pub.mate-desktop.org/releases/"
-                           (version-major+minor version) "/"
+       (uri (string-append "mirror://mate/" (version-major+minor version) "/"
                            name "-" version ".tar.xz"))
        (sha256
         (base32
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index f88f48b82b..4741a0d5ec 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1692,7 +1692,7 @@ September 2004}")
 (define-public petsc
   (package
     (name "petsc")
-    (version "3.10.4")
+    (version "3.11.2")
     (source
      (origin
       (method url-fetch)
@@ -1700,7 +1700,7 @@ September 2004}")
       (uri (string-append "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/"
                           "petsc-lite-" version ".tar.gz"))
       (sha256
-       (base32 "0fk16944zh3473ra198kdkxdn08rq7b6ap838hxy1mh1i0hb488r"))))
+       (base32 "1645nwwcp9bcnfnxikk480mhbbacdvhsay2c401818hk97dqj5nx"))))
     (outputs '("out"                    ; libraries and headers
                "examples"))             ; ~30MiB of examples
     (build-system gnu-build-system)
@@ -1845,7 +1845,11 @@ scientific applications modeled by partial differential equations.")
         ``("--with-mpiexec=mpirun"
            ,(string-append "--with-mpi-dir="
                            (assoc-ref %build-inputs "openmpi"))
-           ,@(delete "--with-mpi=0" ,cf)))))
+           ,@(delete "--with-mpi=0" ,cf)))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'mpi-setup
+             ,%openmpi-setup)))))
     (synopsis "Library to solve PDEs (with complex scalars and MPI support)")))
 
 (define-public python-petsc4py
@@ -1910,7 +1914,7 @@ savings are consistently > 5x.")
 (define-public slepc
   (package
     (name "slepc")
-    (version "3.10.1")
+    (version "3.11.1")
     (source
      (origin
        (method url-fetch)
@@ -1918,10 +1922,11 @@ savings are consistently > 5x.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "188j1a133q91h8pivpnzwcf78kz8dvz2nzf6ndnjygdbqb48fizn"))))
+         "1yq84q9wannc8xwapxpay4ypdd675picwi395hhsdvng9q6hf5j8"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("python" ,python-2)))
+     `(("python" ,python-2)
+       ("petsc:examples" ,petsc "examples"))) ;for gmakegen.py script
     (inputs
      `(("arpack" ,arpack-ng)
        ("gfortran" ,gfortran)))
@@ -1933,7 +1938,10 @@ savings are consistently > 5x.")
        `(,(string-append "--with-arpack-dir="
                          (assoc-ref %build-inputs "arpack") "/lib"))
        #:make-flags                     ;honor (parallel-job-count)
-       `(,(format #f "MAKE_NP=~a" (parallel-job-count)))
+       `(,(format #f "MAKE_NP=~a" (parallel-job-count))
+         ,(string-append "PETSCCONFIGDIR="
+                         (assoc-ref %build-inputs "petsc:examples")
+                         "/share/petsc/examples/config"))
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -3553,6 +3561,7 @@ in finite element programs.")
     (inputs
      `(("mpi" ,openmpi)
        ;;Supported only with MPI:
+       ("hdf5" ,hdf5-parallel-openmpi)  ;TODO: have petsc-openmpi propagate?
        ("p4est" ,p4est-openmpi)
        ("petsc" ,petsc-openmpi)
        ("slepc" ,slepc-openmpi)
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 827b7f800e..7d036ad473 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -371,15 +371,14 @@ authentication.")
 (define-public pidgin
   (package
     (name "pidgin")
-    (version "2.12.0")
+    (version "2.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/pidgin/Pidgin/"
-                           version "/" name "-" version ".tar.bz2"))
+                           version "/pidgin-" version ".tar.bz2"))
        (sha256
-        (base32
-         "1y5p2mq3bfw35b66jsafmbva0w5gg1k99y9z8fyp3jfksqv3agcc"))
+        (base32 "13vdqj70315p9rzgnbxjp9c51mdzf1l4jg1kvnylc4bidw61air7"))
        (patches (search-patches "pidgin-add-search-path.patch"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
@@ -403,13 +402,13 @@ authentication.")
        ;; TODO: gstreamer: patches needed to support gstreamer-1.0 or later
        ;; TODO: farstream
        ;; TODO: meanwhile
-       ;; TODO: network-manager
        ;; TODO: gtkspell
        ;; TODO: libxephyr
        ;; TODO: libgadu
        ("libxslt" ,libxslt)
        ("avahi" ,avahi)
        ("ncurses" ,ncurses)
+       ("network-manager" ,network-manager)
        ("sqlite" ,sqlite)
        ("libice" ,libice)
        ("libsm" ,libsm)
@@ -420,7 +419,6 @@ authentication.")
        (list "--disable-gtkspell"
              "--disable-tcl"
              "--disable-meanwhile"
-             "--disable-nm"  ; XXX remove when we have network-manager
              "--disable-vv"  ; XXX remove when we have farstream and gstreamer
              "--disable-gstreamer" ; XXX patches needed to support gstreamer-1.0
              "--enable-cyrus-sasl"
@@ -433,7 +431,7 @@ authentication.")
             (files (list (string-append "lib/purple-"
                                         (version-major version))
                          "lib/pidgin")))))
-    (home-page "http://www.pidgin.im/")
+    (home-page "https://www.pidgin.im/")
     (synopsis "Graphical multi-protocol instant messaging client")
     (description
      "Pidgin is a modular instant messaging client that supports many popular
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 9ee5206b33..8ca297b71e 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -3727,7 +3727,7 @@ audio samples and various soft sythesizers.  It can receive input from a MIDI ke
 (define-public musescore
   (package
     (name "musescore")
-    (version "3.0.5")
+    (version "3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3736,7 +3736,7 @@ audio samples and various soft sythesizers.  It can receive input from a MIDI ke
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1inf6zdyh6yspjv1i7g6rw9wn90vki1s2qgilkp0j4aphayj4mic"))
+                "07xkn8gnnqzhj9cn1li5qpm2rfm86bmxbbfd76i1jx4v999icn0j"))
               (modules '((guix build utils)))
               (snippet
                ;; Un-bundle OpenSSL and remove unused libraries.
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index a0221601dd..fc43fcb04c 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -45,14 +45,14 @@
 (define-public node
   (package
     (name "node")
-    (version "9.11.1")
+    (version "10.15.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nodejs.org/dist/v" version
-                                  "/node-v" version ".tar.gz"))
+                                  "/node-v" version ".tar.xz"))
               (sha256
                (base32
-                "1vjh9zvw7wkdz6b0l99ya7mqjk0l8lbg9isr1q8rxwp400dhkk32"))
+                "1mcijznh481s44i59p571a38bfvcxm9f8x2l0l1005aly0kdj8jf"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -83,18 +83,14 @@
                            "--shared-zlib"
                            "--without-snapshot"
                            "--with-intl=system-icu")
+       ;; Run only the CI tests.  The default test target requires additional
+       ;; add-ons from NPM that are not distributed with the source.
+       #:test-target "test-ci-js"
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-files
            (lambda* (#:key inputs #:allow-other-keys)
 
-             ;; This phase is inherited by Node LTS, which does not have all
-             ;; the files listed here.  Use this helper for convenience.
-             (define (delete-if-exists file)
-               (if (file-exists? file)
-                   (delete-file file)
-                   '()))
-
              ;; Fix hardcoded /bin/sh references.
              (substitute* '("lib/child_process.js"
                             "lib/internal/v8_prof_polyfill.js"
@@ -110,17 +106,9 @@
                (("'/usr/bin/env'")
                 (string-append "'" (which "env") "'")))
 
-             ;; FIXME: These tests depend on being able to install eslint.
-             ;; See https://github.com/nodejs/node/issues/17098.
-             (for-each delete-if-exists
-                       '("test/parallel/test-eslint-alphabetize-errors.js"
-                         "test/parallel/test-eslint-buffer-constructor.js"
-                         "test/parallel/test-eslint-documented-errors.js"
-                         "test/parallel/test-eslint-inspector-check.js"))
-
              ;; FIXME: These tests fail in the build container, but they don't
              ;; seem to be indicative of real problems in practice.
-             (for-each delete-if-exists
+             (for-each delete-file
                        '("test/async-hooks/test-ttywrap.readstream.js"
                          "test/parallel/test-util-inspect.js"
                          "test/parallel/test-v8-serdes.js"
@@ -132,14 +120,13 @@
                          "test/parallel/test-net-listen-after-destroying-stdin.js"
                          "test/parallel/test-npm-install.js"
                          "test/sequential/test-child-process-emfile.js"
-                         "test/sequential/test-benchmark-child-process.js"
                          "test/sequential/test-http-regr-gh-2928.js"))
 
              ;; These tests have an expiry date: they depend on the validity of
              ;; TLS certificates that are bundled with the source.  We want this
              ;; package to be reproducible forever, so remove those.
              ;; TODO: Regenerate certs instead.
-             (for-each delete-if-exists
+             (for-each delete-file
                        '("test/parallel/test-tls-passphrase.js"
                          "test/parallel/test-tls-server-verify.js"))
              #t))
@@ -184,9 +171,9 @@
      `(("c-ares" ,c-ares)
        ("http-parser" ,http-parser)
        ("icu4c" ,icu4c)
-       ("libuv" ,libuv-1.19)
+       ("libuv" ,libuv)
        ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
+       ("openssl" ,openssl-next)
        ("zlib" ,zlib)))
     (synopsis "Evented I/O for V8 JavaScript")
     (description "Node.js is a platform built on Chrome's JavaScript runtime
@@ -197,16 +184,3 @@ devices.")
     (home-page "https://nodejs.org/")
     (license expat)
     (properties '((timeout . 3600))))) ; 1 h
-
-(define-public node-lts
-  (package
-    (inherit node)
-    (name "node-lts")
-    (version "8.12.0")
-    (source (origin
-              (inherit (package-source node))
-              (uri (string-append "https://nodejs.org/dist/v" version
-                                  "/node-v" version ".tar.xz"))
-              (sha256
-               (base32
-                "16j1rrxkhmvpcw689ndw1raql1gz4jqn7n82z55zn63c05cgz7as"))))))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index a356a6dab7..e1e7d6a5a0 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -111,8 +111,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "1.0.1")
-        (commit "820429517f9cc8333704a839b4346ac4b02468c4")
-        (revision 1))
+        (commit "4a54ed774913480c0f8dad3caf0cd627e4fa8ebf")
+        (revision 3))
     (package
       (name "guix")
 
@@ -128,7 +128,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "1vfp7ps1k1cwn8p0gsgarlxcy982hzyvb7zqnj66jqd258a1qfgh"))
+                  "14m4a4bn0d5hav6mrks5d7r223knx9dpswgbsc875wgr2921na2h"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -272,6 +272,7 @@
        `(("bzip2" ,bzip2)
          ("gzip" ,gzip)
          ("zlib" ,zlib)                           ;for 'guix publish'
+         ("lzlib" ,lzlib)            ;for 'guix publish' and 'guix substitute'
 
          ("sqlite" ,sqlite)
          ("libgcrypt" ,libgcrypt)
@@ -547,13 +548,16 @@ transactions from C or Python.")
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "114")
+    (version (git-version "115" "1" "7f3416ffd12572b42c814e43ac15cee44ef48155"))
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri name version))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://salsa.debian.org/reproducible-builds/diffoscope.git")
+                    (commit "7f3416ffd12572b42c814e43ac15cee44ef48155")))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "07sma4izcqxdv0zi1s5fnsybvkc47c3vbpm372sg83q8l7rhizzp"))))
+                "1pn2rwlz5shdx7s63798wx2v7029bl5if6dlq3i2r6zsnpp0laki"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -589,7 +593,8 @@ transactions from C or Python.")
                       #t))
                   (add-before 'check 'delete-failing-test
                     (lambda _
-                      (delete-file "tests/test_tools.py") ;this requires /sbin to be on the path
+                      ;; this requires /sbin to be on the path
+                      (delete-file "tests/test_tools.py")
                       #t)))))
     (inputs `(("rpm" ,rpm)                        ;for rpm-python
               ("python-file" ,python-file)
@@ -598,11 +603,10 @@ transactions from C or Python.")
               ("python-tlsh" ,python-tlsh)
               ("acl" ,acl)                        ;for getfacl
               ("colordiff" ,colordiff)
-              ("xxd" ,xxd)
-
-              ;; Below are modules used for tests.
-              ("python-pytest" ,python-pytest)
-              ("python-chardet" ,python-chardet)))
+              ("xxd" ,xxd)))
+    ;; Below are modules used for tests.
+    (native-inputs `(("python-pytest" ,python-pytest)
+                     ("python-chardet" ,python-chardet)))
     (home-page "https://diffoscope.org/")
     (synopsis "Compare files, archives, and directories in depth")
     (description
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 2b844c9a1c..19595a2a62 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -108,7 +108,7 @@ human.")
 (define-public keepassxc
   (package
     (name "keepassxc")
-    (version "2.4.1")
+    (version "2.4.2")
     (source
      (origin
        (method url-fetch)
@@ -117,7 +117,7 @@ human.")
                            version "-src.tar.xz"))
        (sha256
         (base32
-         "1aw9airx9z846p0xc0qjgy5hg35b8cxp57rvlq39n6wx4z8ppa8d"))))
+         "0f31lmpbkw0wrhq0qa4yw5b51bjv7vqp3ikr355qcm905456vyhm"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags '("-DWITH_XC_NETWORKING=YES"
diff --git a/gnu/packages/patches/gnucash-fix-test-transaction-failure.patch b/gnu/packages/patches/gnucash-fix-test-transaction-failure.patch
deleted file mode 100644
index 7b1b29f06c..0000000000
--- a/gnu/packages/patches/gnucash-fix-test-transaction-failure.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-# This patch was submitted upstream to: https://bugs.gnucash.org/show_bug.cgi?id=797008.
-From c20d74bebca516d0e391724202aad511967fe109 Mon Sep 17 00:00:00 2001
-From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
-Date: Wed, 2 Jan 2019 14:46:28 -0500
-Subject: [PATCH] tests: Fix a test failure in test-transaction.scm.
-
-With the New Year upon us, a test which was hard-coded to use 2018 now
-failed.
-
-Fixes issue #797008 (see:
-https://bugs.gnucash.org/show_bug.cgi?id=797008).
-
-* gnucash/report/standard-reports/test/test-transaction.scm:
-(trep-tests): Use the current year in the test string instead of a
-static one.
----
- gnucash/report/standard-reports/test/test-transaction.scm | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/gnucash/report/standard-reports/test/test-transaction.scm b/gnucash/report/standard-reports/test/test-transaction.scm
-index 755aba298..ae3fbd5c1 100644
---- a/gnucash/report/standard-reports/test/test-transaction.scm
-+++ b/gnucash/report/standard-reports/test/test-transaction.scm
-@@ -5,6 +5,7 @@
- (use-modules (gnucash report stylesheets))
- (use-modules (gnucash report report-system))
- (use-modules (gnucash report report-system test test-extras))
-+(use-modules (srfi srfi-19))
- (use-modules (srfi srfi-64))
- (use-modules (gnucash engine test srfi64-extras))
- (use-modules (sxml simple))
-@@ -643,7 +644,8 @@
-       (set-option! options "General" "Show original currency amount" #t)
-       (set-option! options "Sorting" "Primary Key" 'date)
-       (set-option! options "Sorting" "Primary Subtotal for Date Key" 'none)
--      (let* ((sxml (options->sxml options "dual columns")))
-+      (let* ((sxml (options->sxml options "dual columns"))
-+	     (current-year (date->string (current-date) "~y")))
-         (test-equal "dual amount column, with original currency headers"
-           (list "Date" "Num" "Description" "Memo/Notes" "Account"
-                 "Debit (USD)" "Credit (USD)" "Debit" "Credit")
-@@ -652,7 +654,8 @@
-           (list "Grand Total" "$2,280.00" "$2,280.00")
-           (get-row-col sxml -1 #f))
-         (test-equal "dual amount column, first transaction correct"
--          (list "01/03/18" "$103 income" "Root.Asset.Bank" "$103.00" "$103.00")
-+          (list (string-append "01/03/" current-year) "$103 income"
-+		"Root.Asset.Bank" "$103.00" "$103.00")
-           (get-row-col sxml 1 #f)))
-       )
- 
--- 
-2.19.0
-
diff --git a/gnu/packages/patches/gtksourceview-2-add-default-directory.patch b/gnu/packages/patches/gtksourceview-2-add-default-directory.patch
new file mode 100644
index 0000000000..c4b5052b81
--- /dev/null
+++ b/gnu/packages/patches/gtksourceview-2-add-default-directory.patch
@@ -0,0 +1,33 @@
+From fc401acb15f15d487c942437b6fb429289dd3c67 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Fri, 31 May 2019 13:22:25 +0200
+Subject: [PATCH] Add installation directory as a default directory.
+
+In Guix, this library is installed in a separate directory in the store,
+and it's typically not installed system-wide in a fixed directory. Add
+the store path to the set of default directories so dependents can find
+default langs and source highlighting scheme.
+---
+ gtksourceview/gtksourceview-utils.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/gtksourceview/gtksourceview-utils.c b/gtksourceview/gtksourceview-utils.c
+index 6f06bab..c3467d5 100644
+--- a/gtksourceview/gtksourceview-utils.c
++++ b/gtksourceview/gtksourceview-utils.c
+@@ -66,6 +66,12 @@ _gtk_source_view_get_default_dirs (const char *basename,
+ 							 basename,
+ 							 NULL));
+ 
++    /* installed dir */
++    g_ptr_array_add (dirs, g_build_filename (DATADIR,
++						 SOURCEVIEW_DIR,
++						 basename,
++						 NULL));
++
+ 	g_ptr_array_add (dirs, NULL);
+ 
+ 	return (gchar**) g_ptr_array_free (dirs, FALSE);
+-- 
+2.21.0
+
diff --git a/gnu/packages/patches/libevent-2.1-dns-tests.patch b/gnu/packages/patches/libevent-2.1-dns-tests.patch
deleted file mode 100644
index 091752a49d..0000000000
--- a/gnu/packages/patches/libevent-2.1-dns-tests.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Disable tests that rely on usable DNS lookups, which aren't available
-in build chroots.
-
---- libevent-2.0.21-stable/test/regress_dns.c	2013-01-20 22:32:09.000000000 +0100
-+++ libevent-2.0.21-stable/test/regress_dns.c	2013-01-20 22:32:30.000000000 +0100
-@@ -2120,10 +2120,6 @@
- 
- struct testcase_t dns_testcases[] = {
- 	DNS_LEGACY(server, TT_FORK|TT_NEED_BASE),
--	DNS_LEGACY(gethostbyname, TT_FORK|TT_NEED_BASE|TT_NEED_DNS|TT_OFF_BY_DEFAULT),
--	DNS_LEGACY(gethostbyname6, TT_FORK|TT_NEED_BASE|TT_NEED_DNS|TT_OFF_BY_DEFAULT),
--	DNS_LEGACY(gethostbyaddr, TT_FORK|TT_NEED_BASE|TT_NEED_DNS|TT_OFF_BY_DEFAULT),
--	{ "resolve_reverse", dns_resolve_reverse, TT_FORK|TT_OFF_BY_DEFAULT, NULL, NULL },
- 	{ "search_empty", dns_search_empty_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
- 	{ "search", dns_search_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
- 	{ "search_lower", dns_search_lower_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
-@@ -2163,9 +2159,6 @@
- 
- 	{ "client_fail_requests", dns_client_fail_requests_test,
- 	  TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
--	{ "client_fail_requests_getaddrinfo",
--	  dns_client_fail_requests_getaddrinfo_test,
--	  TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
- 
- 	END_OF_TESTCASES
- };
diff --git a/gnu/packages/patches/libevent-2.1-skip-failing-test.patch b/gnu/packages/patches/libevent-2.1-skip-failing-test.patch
deleted file mode 100644
index d9ea1d422d..0000000000
--- a/gnu/packages/patches/libevent-2.1-skip-failing-test.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-These fail on 32-bit due to an overflow bug in the test program.
-
-See test/regress_util.c:1448.
-
-Upstream bug URL:
-
-https://github.com/libevent/libevent/issues/452
-
-diff --git a/test/regress_util.c b/test/regress_util.c
-index ef6a1487..4de501fc 100644
---- a/test/regress_util.c
-+++ b/test/regress_util.c
-@@ -1413,9 +1413,9 @@ static struct date_rfc1123_case {
- 	{  1323648000, "Mon, 12 Dec 2011 00:00:00 GMT"},
- #ifndef _WIN32
- 	/** In win32 case we have max   "23:59:59 January 18, 2038, UTC" for time32 */
--	{  4294967296, "Sun, 07 Feb 2106 06:28:16 GMT"} /* 2^32 */,
-+	//{  4294967296, "Sun, 07 Feb 2106 06:28:16 GMT"} /* 2^32 */,
- 	/** In win32 case we have max "23:59:59, December 31, 3000, UTC" for time64 */
--	{253402300799, "Fri, 31 Dec 9999 23:59:59 GMT"} /* long long future no one can imagine */,
-+	//{253402300799, "Fri, 31 Dec 9999 23:59:59 GMT"} /* long long future no one can imagine */,
- 	{  1456704000, "Mon, 29 Feb 2016 00:00:00 GMT"} /* leap year */,
- #endif
- 	{  1435708800, "Wed, 01 Jul 2015 00:00:00 GMT"} /* leap second */,
diff --git a/gnu/packages/patches/supertux-fix-build-with-gcc5.patch b/gnu/packages/patches/supertux-fix-build-with-gcc5.patch
new file mode 100644
index 0000000000..6393215ca1
--- /dev/null
+++ b/gnu/packages/patches/supertux-fix-build-with-gcc5.patch
@@ -0,0 +1,75 @@
+Taken from https://github.com/SuperTux/supertux/commit/a75317ef0a94847d9b6a7833b9c6652ef29edde3.
+This patch fixes building with gcc versions earlier than 6.
+
+From a75317ef0a94847d9b6a7833b9c6652ef29edde3 Mon Sep 17 00:00:00 2001
+From: Ingo Ruhnke <grumbel@gmail.com>
+Date: Fri, 28 Dec 2018 22:45:35 +0100
+Subject: [PATCH] Add workaround for backwards compatibilty with gcc5
+
+Fixes #1014
+---
+ src/video/gl/gl_painter.cpp | 11 ++++++-----
+ src/video/ttf_surface.cpp   | 16 +++++++++-------
+ 2 files changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/src/video/gl/gl_painter.cpp b/src/video/gl/gl_painter.cpp
+index 5e0d1e7b1e..32fb7a09b6 100644
+--- a/src/video/gl/gl_painter.cpp
++++ b/src/video/gl/gl_painter.cpp
+@@ -37,12 +37,13 @@ namespace {
+ 
+ inline std::tuple<GLenum, GLenum> blend_factor(Blend blend)
+ {
++  using B = std::tuple<GLenum, GLenum>;
+   switch(blend) {
+-    case Blend::NONE: return {GL_ONE, GL_ZERO};
+-    case Blend::BLEND: return {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
+-    case Blend::ADD: return {GL_SRC_ALPHA, GL_ONE};
+-    case Blend::MOD: return {GL_DST_COLOR, GL_ZERO};
+-    default: return {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
++    case Blend::NONE: return B(GL_ONE, GL_ZERO);
++    case Blend::BLEND: return B(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
++    case Blend::ADD: return B(GL_SRC_ALPHA, GL_ONE);
++    case Blend::MOD: return B(GL_DST_COLOR, GL_ZERO);
++    default: return B(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+   }
+ }
+ 
+diff --git a/src/video/ttf_surface.cpp b/src/video/ttf_surface.cpp
+index 7c9505004f..b41d67b2c8 100644
+--- a/src/video/ttf_surface.cpp
++++ b/src/video/ttf_surface.cpp
+@@ -55,12 +55,13 @@ TTFSurface::create(const TTFFont& font, const std::string& text)
+     SDL_SetSurfaceColorMod(text_surface.get(), 0, 0, 0);
+     SDL_SetSurfaceBlendMode(text_surface.get(), SDL_BLENDMODE_BLEND);
+ 
++    using P = std::tuple<int, int>;
+     const std::initializer_list<std::tuple<int, int> > positions[] = {
+       {},
+-      {{0, 0}},
+-      {{-1, 0}, {1, 0}, {0, -1}, {0, 1}},
+-      {{-2, 0}, {2, 0}, {0, -2}, {0, 2},
+-       {-1, -1}, {1, -1}, {-1, 1}, {1, 1}}
++      {P{0, 0}},
++      {P{-1, 0}, P{1, 0}, P{0, -1}, P{0, 1}},
++      {P{-2, 0}, P{2, 0}, P{0, -2}, P{0, 2},
++       P{-1, -1}, P{1, -1}, P{-1, 1}, P{1, 1}}
+     };
+ 
+     int shadow_size = std::min(2, font.get_shadow_size());
+@@ -77,11 +78,12 @@ TTFSurface::create(const TTFFont& font, const std::string& text)
+     SDL_SetSurfaceColorMod(text_surface.get(), 0, 0, 0);
+     SDL_SetSurfaceBlendMode(text_surface.get(), SDL_BLENDMODE_BLEND);
+ 
++    using P = std::tuple<int, int>;
+     const std::initializer_list<std::tuple<int, int> > positions[] = {
+       {},
+-      {{-1, 0}, {1, 0}, {0, -1}, {0, 1}},
+-      {{-2, 0}, {2, 0}, {0, -2}, {0, 2},
+-       {-1, -1}, {1, -1}, {-1, 1}, {1, 1}}
++      {P{-1, 0}, P{1, 0}, P{0, -1}, P{0, 1}},
++      {P{-2, 0}, P{2, 0}, P{0, -2}, P{0, 2},
++       P{-1, -1}, P{1, -1}, P{-1, 1}, P{1, 1}}
+     };
+ 
+     int border = std::min(2, font.get_border());
diff --git a/gnu/packages/patches/supertux-unbundle-squirrel.patch b/gnu/packages/patches/supertux-unbundle-squirrel.patch
new file mode 100644
index 0000000000..054183b75f
--- /dev/null
+++ b/gnu/packages/patches/supertux-unbundle-squirrel.patch
@@ -0,0 +1,53 @@
+diff -ur a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt	2019-05-24 17:58:19.693090158 -0400
++++ b/CMakeLists.txt	2019-05-24 17:57:43.349473252 -0400
+@@ -375,44 +375,15 @@
+ 
+ include(ConfigureChecks)
+ 
+-
+-## Also build external/squirrel
+-
+-if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/external/squirrel/CMakeLists.txt)
+-  message(FATAL_ERROR "squirrel submodule is not checked out or ${CMAKE_CURRENT_SOURCE_DIR}/external/squirrel/CMakeLists.txt is missing")
+-endif()
+-
+ set(SQUIRREL_PREFIX ${CMAKE_BINARY_DIR}/squirrel/ex)
+-ExternalProject_Add(squirrel
+-  SOURCE_DIR "${CMAKE_SOURCE_DIR}/external/squirrel/"
+-  CMAKE_ARGS
+-  -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+-  -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+-  -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+-  -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+-  -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+-  -DCMAKE_INSTALL_PREFIX=${SQUIRREL_PREFIX}
+-  -DINSTALL_INC_DIR=include)
+-
+-if(WIN32)
+-  add_library(squirrel_lib SHARED IMPORTED)
+-  set_target_properties(squirrel_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/bin/${CMAKE_SHARED_LIBRARY_PREFIX}squirrel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+-  set_target_properties(squirrel_lib PROPERTIES IMPORTED_IMPLIB "${SQUIRREL_PREFIX}/lib/squirrel${CMAKE_LINK_LIBRARY_SUFFIX}")
+-  add_library(sqstdlib_lib SHARED IMPORTED)
+-  set_target_properties(sqstdlib_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/bin/${CMAKE_SHARED_LIBRARY_PREFIX}sqstdlib${CMAKE_SHARED_LIBRARY_SUFFIX}")
+-  set_target_properties(sqstdlib_lib PROPERTIES IMPORTED_IMPLIB "${SQUIRREL_PREFIX}/lib/sqstdlib${CMAKE_LINK_LIBRARY_SUFFIX}")
+-
+-  #For debug run purposes
+-  configure_file("${CMAKE_CURRENT_SOURCE_DIR}/mk/msvc/run_supertux.bat.in" "${PROJECT_BINARY_DIR}/run_supertux.bat")
+-else()
+-  add_library(squirrel_lib STATIC IMPORTED)
+-  set_target_properties(squirrel_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}squirrel_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
+-  add_library(sqstdlib_lib STATIC IMPORTED)
+-  set_target_properties(sqstdlib_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}sqstdlib_static${CMAKE_STATIC_LIBRARY_SUFFIX}")
+-endif()
+ 
+ include_directories(SYSTEM ${SQUIRREL_PREFIX}/include)
+ 
++add_library(squirrel_lib SHARED IMPORTED)
++set_target_properties(squirrel_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}squirrel${CMAKE_SHARED_LIBRARY_SUFFIX}")
++add_library(sqstdlib_lib SHARED IMPORTED)
++set_target_properties(sqstdlib_lib PROPERTIES IMPORTED_LOCATION "${SQUIRREL_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}sqstdlib${CMAKE_SHARED_LIBRARY_SUFFIX}")
++
+ ## Also build external/tinygettext
+ 
+ if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/external/tinygettext/CMakeLists.txt)
diff --git a/gnu/packages/patches/txr-shell.patch b/gnu/packages/patches/txr-shell.patch
new file mode 100644
index 0000000000..a4abb73eac
--- /dev/null
+++ b/gnu/packages/patches/txr-shell.patch
@@ -0,0 +1,59 @@
+Use the current shell instead of trying to find another one and
+failing to do so.
+
+diff --git a/configure b/configure
+index f1adb919..7891b4dc 100755
+--- a/configure
++++ b/configure
+@@ -26,28 +26,6 @@
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+-#
+-# The #!/bin/sh might be some legacy piece of crap,
+-# not even up to 1990 POSIX.2 spec. So the first step
+-# is to look for a better shell in some known places
+-# and re-execute ourselves with that interpreter.
+-#
+-
+-if test x$txr_shell = x ; then
+-  for shell in /bin/bash /usr/bin/bash /usr/xpg4/bin/sh ; do
+-    if test -x $shell ; then
+-       txr_shell=$shell
+-       break
+-    fi
+-  done
+-  if test x$txr_shell = x ; then
+-    echo "No known POSIX shell found: falling back on /bin/sh, which may not work"
+-    txr_shell=/bin/sh
+-  fi
+-  export txr_shell
+-  exec $txr_shell $0 ${@+"$@"}
+-fi
+-
+ set -u
+ 
+ #
+@@ -190,13 +168,6 @@ while [ $# -gt 0 ] ; do
+     exit 1
+   fi
+ 
+-  eval "var_exists=\${$var+y}"
+-
+-  if [ "$var_exists" != y ] ; then
+-    printf "$0: nonexistent option: '%s'\n" "$1"
+-    exit 1
+-  fi
+-
+   eval "$var='$val'"
+ 
+   eval "var_given_exists=\${${var}_given+y}"
+@@ -208,6 +179,8 @@ while [ $# -gt 0 ] ; do
+   shift
+ done
+ 
++txr_shell=$CONFIG_SHELL
++
+ #
+ # If --help was given (or --help=<nonempty> or help=<nonempty>) then
+ # print help and exit. The termination status is failed, to indicate
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index f6197b98ee..687864c008 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +32,8 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages django)
   #:use-module (gnu packages file)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
@@ -300,3 +303,167 @@ directories, and has support for many popular version control systems.
 Meld helps you review code changes and understand patches.  It might even help
 you to figure out what is going on in that merge you keep avoiding.")
     (license gpl2)))
+
+(define-public patchwork
+  (package
+    (name "patchwork")
+    (version "2.1.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/getpatchwork/patchwork.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06ng5pv6744w98zkyfm0ldkmpdgnsql3gbbbh6awq61sr2ndr3qw"))))
+    (build-system python-build-system)
+    (arguments
+     `(;; TODO: Tests require a running database
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (add-after 'unpack 'replace-wsgi.py
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (delete-file "patchwork/wsgi.py")
+             (call-with-output-file "patchwork/wsgi.py"
+               (lambda (port)
+                 ;; Embed the PYTHONPATH containing the dependencies, as well
+                 ;; as the python modules in this package in the wsgi.py file,
+                 ;; as this will ensure they are available at runtime.
+                 (define pythonpath
+                   (string-append (getenv "PYTHONPATH")
+                                  ":"
+                                  (site-packages inputs outputs)))
+                 (display
+                  (string-append "
+import os, sys
+
+sys.path.extend('" pythonpath "'.split(':'))
+
+from django.core.wsgi import get_wsgi_application
+
+# By default, assume that patchwork is running as a Guix service, which
+# provides the settings as the 'guix.patchwork.settings' Python module.
+#
+# When using httpd, it's hard to set environment variables, so rely on the
+# default set here.
+os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv(
+  'DJANGO_SETTINGS_MODULE',
+  'guix.patchwork.settings' # default
+)
+
+application = get_wsgi_application()\n") port)))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (setenv "DJANGO_SETTINGS_MODULE" "patchwork.settings.dev")
+               (invoke "python" "-Wonce" "./manage.py" "test" "--noinput"))
+             #t))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (out-site-packages (site-packages inputs outputs)))
+               (for-each (lambda (directory)
+                           (copy-recursively
+                            directory
+                            (string-append out-site-packages directory)))
+                         '(;; Contains the python code
+                           "patchwork"
+                           ;; Contains the templates for the generated HTML
+                           "templates"))
+               (delete-file-recursively
+                (string-append out-site-packages "patchwork/tests"))
+
+               ;; Install patchwork related tools
+               (for-each (lambda (file)
+                           (install-file file (string-append out "/bin")))
+                         (list
+                          (string-append out-site-packages
+                                         "patchwork/bin/pwclient")
+                          (string-append out-site-packages
+                                         "patchwork/bin/parsemail.sh")
+                          (string-append out-site-packages
+                                         "patchwork/bin/parsemail-batch.sh")))
+
+               ;; Delete the symlink to pwclient, and replace it with the
+               ;; actual file, as this can cause issues when serving the file
+               ;; from a webserver.
+               (let ((template-pwclient (string-append
+                                         out-site-packages
+                                         "patchwork/templates/patchwork/pwclient")))
+                 (delete-file template-pwclient)
+                 (copy-file (string-append out-site-packages
+                                           "patchwork/bin/pwclient")
+                            template-pwclient))
+
+               ;; Collect the static assets, this includes JavaScript, CSS and
+               ;; fonts. This is a standard Django process when running a
+               ;; Django application for regular use, and includes assets for
+               ;; dependencies like the admin site from Django.
+               ;;
+               ;; The intent here is that you can serve files from this
+               ;; directory through a webserver, which is recommended when
+               ;; running Django applications.
+               (let ((static-root
+                      (string-append out "/share/patchwork/htdocs")))
+                 (mkdir-p static-root)
+                 (copy-file "patchwork/settings/production.example.py"
+                            "patchwork/settings/assets.py")
+                 (setenv "DJANGO_SECRET_KEY" "dummyvalue")
+                 (setenv "DJANGO_SETTINGS_MODULE" "patchwork.settings.assets")
+                 (setenv "STATIC_ROOT" static-root)
+                 (invoke "./manage.py" "collectstatic" "--no-input"))
+
+               ;; The lib directory includes example configuration files that
+               ;; may be useful when deploying patchwork.
+               (copy-recursively "lib"
+                                 (string-append
+                                  out "/share/doc/" ,name "-" ,version)))
+             #t))
+         ;; The hasher script is used from the post-receive.hook
+         (add-after 'install 'install-hasher
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-site-packages (site-packages inputs outputs))
+                    (out-hasher.py (string-append out-site-packages
+                                                  "/patchwork/hasher.py")))
+               (chmod out-hasher.py #o555)
+               (symlink out-hasher.py (string-append out "/bin/hasher")))
+             #t))
+         ;; Create a patchwork specific version of Django's command line admin
+         ;; utility.
+         (add-after 'install 'install-patchwork-admin
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/bin"))
+               (call-with-output-file (string-append out "/bin/patchwork-admin")
+                 (lambda (port)
+                   (simple-format port "#!~A
+import os, sys
+
+if __name__ == \"__main__\":
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)" (which "python"))))
+               (chmod (string-append out "/bin/patchwork-admin") #o555))
+             #t)))))
+    (inputs
+     `(("python-wrapper" ,python-wrapper)))
+    (propagated-inputs
+     `(("python-django" ,python-django)
+       ;; TODO: Make this configurable
+       ("python-psycopg2" ,python-psycopg2)
+       ("python-mysqlclient" ,python-mysqlclient)
+       ("python-django-filter" ,python-django-filter)
+       ("python-djangorestframework" ,python-djangorestframework)
+       ("python-django-debug-toolbar" ,python-django-debug-toolbar)))
+    (synopsis "Web based patch tracking system")
+    (description
+     "Patchwork is a patch tracking system.  It takes in emails containing
+patches, and displays the patches along with comments and state information.
+Users can login allowing them to change the state of patches.")
+    (home-page "http://jk.ozlabs.org/projects/patchwork/")
+    (license gpl2+)))
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index 68043051b5..62444308db 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -58,7 +58,7 @@
 (define-public php
   (package
     (name "php")
-    (version "7.3.5")
+    (version "7.3.6")
     (home-page "https://secure.php.net/")
     (source (origin
               (method url-fetch)
@@ -66,7 +66,7 @@
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0wi4vd1c3ylsv7cs5b74pkspybb22qwk6fs5r2as3m3glhw1h0g1"))
+                "0r51aiff2abbr3d2swhvja0wm56sjxzqbciabcvvq3m3v9kqkz7y"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "ext"
@@ -255,6 +255,10 @@
                          ;; but the bug report suggests the issue was in
                          ;; the bundled gd, not upstream.
                          "ext/gd/tests/bug77272.phpt"
+                         ;; Expected invalid XBM but got EOF before image was
+                         ;; complete.  It's a warning in both cases and test
+                         ;; result is the same.
+                         "ext/gd/tests/bug77973.phpt"
 
                          ;; XXX: These iconv tests have the expected outcome,
                          ;; but with different error messages.
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 708ffe618f..d78d97c883 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -57,6 +57,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages django)
+  #:use-module (gnu packages groff)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -1541,6 +1542,19 @@ supports url redirection and retries, and also gzip and deflate decoding.")
       (base32
        "0sispclx263lybbk19zp1n9yhg8xxx4jddypzgi24vpjaqnsbwlc"))))
    (build-system python-build-system)
+   (arguments
+    ;; FIXME: The 'pypi' release does not contain tests.
+    '(#:tests? #f
+      #:phases
+      (modify-phases %standard-phases
+        (add-after 'unpack 'fix-reference-to-groff
+          (lambda _
+            (substitute* "awscli/help.py"
+              (("if not self._exists_on_path\\('groff'\\):") "")
+              (("raise ExecutableNotFoundError\\('groff'\\)") "")
+              (("cmdline = \\['groff'")
+               (string-append "cmdline = ['" (which "groff") "'")))
+            #t)))))
    (propagated-inputs
     `(("python-colorama" ,python-colorama)
       ("python-botocore" ,python-botocore)
@@ -1548,9 +1562,8 @@ supports url redirection and retries, and also gzip and deflate decoding.")
       ("python-docutils" ,python-docutils)
       ("python-pyyaml" ,python-pyyaml)
       ("python-rsa" ,python-rsa)))
-   (arguments
-    ;; FIXME: The 'pypi' release does not contain tests.
-    '(#:tests? #f))
+   (inputs
+    `(("groff" ,groff)))
    (home-page "https://aws.amazon.com/cli/")
    (synopsis "Command line client for AWS")
    (description "AWS CLI provides a unified command line interface to the
@@ -1647,13 +1660,13 @@ minimum of WSGI.")
 (define-public python-flask
   (package
     (name "python-flask")
-    (version "1.0.2")
+    (version "1.0.3")
     (source (origin
               (method url-fetch)
-              (uri (pypi-uri "flask" version))
+              (uri (pypi-uri "Flask" version))
               (sha256
                (base32
-                "0j6f4a9rpfh25k1gp7azqhnni4mb4fgy50jammgjgddw1l3w0w92"))))
+                "1wxnhjlxwwjhjxmghykjhllpahv5pkdc5hln4ab6nab43s26sz5d"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 8db048cd2b..3a022c66ce 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -157,14 +157,14 @@
 (define-public python-psutil
   (package
     (name "python-psutil")
-    (version "5.4.3")
+    (version "5.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "psutil" version))
        (sha256
         (base32
-         "063v69x7spyclyaxrd3gmzj3p16q5ayg97xqhwb1kyn22a9pwip2"))))
+         "1v95vb5385qscfdvphv8l2w22bmir3d7yhpi02n58v3mlqy1r3l2"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: some tests does not return and times out.
@@ -193,14 +193,14 @@ pidof, tty, taskset, pmap.")
 (define-public python-shapely
   (package
     (name "python-shapely")
-    (version "1.6.3")
+    (version "1.6.4.post2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Shapely" version))
        (sha256
         (base32
-         "0svc58dzcw9gj92b4sgq35sdxkf85z0qwlzxarkzq4bp3h8jy58l"))))
+         "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-cython" ,python-cython)
@@ -11474,13 +11474,13 @@ and bit flag values.")
 (define-public python-attrs
   (package
     (name "python-attrs")
-    (version "18.2.0")
+    (version "19.1.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "attrs" version))
               (sha256
                (base32
-                "0s9ydh058wmmf5v391pym877x4ahxg45dw6a0w4c7s5wgpigdjqh"))))
+                "16g33zr5f449lqc5wgvzpknxryfzrfsxcr6kpgxwn7l5fkv71f7h"))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((guix build utils)
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 9ed983db98..3512c5ac46 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019 Meiyo Peng <meiyo.peng@gmail.com>
+;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +35,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages groff)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages ncurses)
@@ -789,3 +791,27 @@ is commonly written.")
     (home-page "https://www.oilshell.org/")
     (license (list psfl ; The Oil sources include a patched Python 2 source tree
                    asl2.0))))
+
+(define-public gash
+  (package
+    (name "gash")
+    (version "0.1")
+    (source
+     (origin (method url-fetch)
+             (uri (string-append "mirror://savannah/gash/gash-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "00m3lif64zyxd41cnk208kc81nl6qz659676qgiaqgwrw0brzrid"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("guile" ,guile-2.2)))
+    (home-page "https://savannah.nongnu.org/projects/gash/")
+    (synopsis "POSIX-compatible shell written in Guile Scheme")
+    (description "Gash is a POSIX-compatible shell written in Guile
+Scheme.  It provides both the shell interface, as well as a Guile
+library for parsing shell scripts.  Gash is designed to bootstrap Bash
+as part of the Guix bootstrap process.")
+    (license gpl3+)))
diff --git a/gnu/packages/squirrel.scm b/gnu/packages/squirrel.scm
index 1da0ad9fe3..2c3ed6e570 100644
--- a/gnu/packages/squirrel.scm
+++ b/gnu/packages/squirrel.scm
@@ -19,37 +19,65 @@
 (define-module (gnu packages squirrel)
   #:use-module (gnu packages)
   #:use-module (gnu packages cmake)
+  #:use-module (gnu packages sphinx)
   #:use-module (guix build-system cmake)
-  #:use-module (guix git-download)
+  #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build utils)
   #:use-module (guix packages)
   #:use-module (guix utils))
 
 (define-public squirrel
-  (let ((commit "51137b84e66c4d526809fd8a59f4ba1d38138c76"))
-    (package
-      (name "squirrel")
-      (version "3.1")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/albertodemichelis/squirrel.git")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "0vbiv1q3qcy2vj8y0b9a2ckswl9ld398n3jnxijvwddrjgya5zav"))))
-      (build-system cmake-build-system)
-      (arguments
-       '(#:tests? #f)) ; no tests
-      (native-inputs
-       `(("cmake" ,cmake)))
-      (home-page "https://squirrel-lang.org/")
-      (synopsis "High level imperative, object-oriented programming language")
-      (description
-       "Squirrel is a high level imperative, object-oriented programming
+  (package
+    (name "squirrel")
+    (version "3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/squirrel/squirrel3/"
+                                  "squirrel " version " stable/squirrel_"
+                                  (string-join (string-split version #\.) "_")
+                                  "_stable.tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1jyh1523zrrnh9swanfrda0s14mvwc9431dh07g0nx74hbxsfia8"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags '("-DDISABLE_STATIC=ON")
+       #:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc-dir (string-append out "/share/doc/squirrel")))
+               (for-each
+                (lambda (file)
+                  (install-file (string-append "../squirrel3/" file) doc-dir))
+                '("COPYRIGHT" "HISTORY" "README"
+                  "doc/sqstdlib3.pdf" "doc/squirrel3.pdf")))
+             #t))
+         (add-after 'install 'install-headers
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (include-dir (string-append out "/include/squirrel")))
+               (mkdir-p include-dir)
+               (for-each
+                (lambda (header-file)
+                  (copy-recursively header-file
+                                    (string-append include-dir
+                                                   "/"
+                                                   (basename header-file))))
+                (find-files "../squirrel3/include")))
+             #t)))))
+    (native-inputs
+     `(("cmake" ,cmake)
+       ("python-sphinx" ,python-sphinx)))
+    (home-page "https://squirrel-lang.org/")
+    (synopsis "High level imperative, object-oriented programming language")
+    (description
+     "Squirrel is a high level imperative, object-oriented programming
 language, designed to be a light-weight scripting language that fits in the
 size, memory bandwidth, and real-time requirements of applications like video
 games.")
-      (license license:expat))))
+    (license license:expat)))
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 06f0aa1e75..e845fc0bb0 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -1327,13 +1327,13 @@ for template use among CRAN packages.")
 (define-public r-evaluate
   (package
     (name "r-evaluate")
-    (version "0.13")
+    (version "0.14")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "evaluate" version))
               (sha256
                (base32
-                "0igvc27rsqxcswjb9slnpi5d509rffxn1y5d82hgqvv970nl3p2q"))))
+                "0a2y7j534gbgixkwj9r1z76l2vssw4g1hznzbpclc076wkdqpj58"))))
     (build-system r-build-system)
     (home-page "https://github.com/hadley/evaluate")
     (synopsis "Parsing and evaluation tools for R")
@@ -1670,14 +1670,14 @@ like tidy evaluation.")
 (define-public r-tibble
   (package
     (name "r-tibble")
-    (version "2.1.1")
+    (version "2.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tibble" version))
        (sha256
         (base32
-         "111jl0hdjhh7hkydxvsr5l19gb0ylxq7xrkc28awnc9pzglpgis5"))))
+         "1sb5j6k8hp7yf7grjjhn45hhc163fcndiw9zw976zc74f1856kpj"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cli" ,r-cli)
@@ -2333,14 +2333,14 @@ collation, and NAMESPACE files.")
 (define-public r-openssl
   (package
     (name "r-openssl")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openssl" version))
        (sha256
         (base32
-         "1gx4mk7js1irzkql5rgk48ja9c6mm28ccxz483ngbhdd57az90qw"))))
+         "0mh4xwb9wnn5j2n1zzmjldqjqv2nn4wdidiixxciaqrqsi0l9834"))))
     (build-system r-build-system)
     (inputs
      `(("libressl" ,libressl)))
@@ -2695,14 +2695,14 @@ certain criterion, e.g., it contains a certain regular file.")
 (define-public r-rmarkdown
   (package
     (name "r-rmarkdown")
-    (version "1.12")
+    (version "1.13")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "rmarkdown" version))
         (sha256
           (base32
-            "0milpdaf4nd36kq6sci9wc5dhwswl4w9c9fychfbppgjsgfp6kfv"))))
+            "1vv3b8nlw8ra19492rjg3na42lwh3xr5a2jy2ia81fvvs846pywn"))))
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2714,6 +2714,7 @@ certain criterion, e.g., it contains a certain regular file.")
        ("r-mime" ,r-mime)
        ("r-stringr" ,r-stringr)
        ("r-tinytex" ,r-tinytex)
+       ("r-xfun" ,r-xfun)
        ("r-yaml" ,r-yaml)
        ("ghc-pandoc" ,ghc-pandoc)))
     (home-page "http://rmarkdown.rstudio.com")
@@ -4314,13 +4315,13 @@ mechanism.")
 (define-public r-zoo
   (package
     (name "r-zoo")
-    (version "1.8-5")
+    (version "1.8-6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "zoo" version))
               (sha256
                (base32
-                "09p8gmd5ifz80ahnhiianarsr5xx3nz76jzp90d7v3fjffcrcww7"))))
+                "1k1pmzr9nfwbxq1xf0jzn3nawv4sgnkxkgzxnm1i887jcbrs85r2"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lattice" ,r-lattice)))
@@ -4470,13 +4471,13 @@ Wall Street Journal, among others.  This package also provides
 (define-public r-statmod
   (package
     (name "r-statmod")
-    (version "1.4.30")
+    (version "1.4.32")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "statmod" version))
               (sha256
                (base32
-                "07v4x8af60alcw6vbiwf5fp25bhra61kvxz9kqx64lszm0i1fb4x"))))
+                "083yyp84xj85zg4bhz7i90bqzl3p6155ch4abwsfc9k1lv7s2rrg"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/statmod")
     (native-inputs
@@ -4771,14 +4772,14 @@ and resampling-based inference.")
 (define-public r-prabclus
   (package
     (name "r-prabclus")
-    (version "2.2-7")
+    (version "2.2-7.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "prabclus" version))
        (sha256
         (base32
-         "0h2nml8ri27mhfs2p6ngb6kfd6lyq30sc6813yybpskkrb6gs1pb"))))
+         "0x998nidd7abq5nqynyr8q79z056qbli23mvad6f09fjn2xz6nrc"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-mass" ,r-mass)
@@ -4967,14 +4968,14 @@ of the points.")
 (define-public r-fpc
   (package
     (name "r-fpc")
-    (version "2.1-11.2")
+    (version "2.2-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "fpc" version))
        (sha256
         (base32
-         "0wjjp9xn283acfg6cm1wa6fsi7pf0z97227hrnlpmprks3mbj8kr"))))
+         "183awn9fbigsy3rwmg5l39zpfg2zpbb94hkx7k99v2dir8dpdy85"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-class" ,r-class)
@@ -4986,8 +4987,7 @@ of the points.")
        ("r-mclust" ,r-mclust)
        ("r-mvtnorm" ,r-mvtnorm)
        ("r-prabclus" ,r-prabclus)
-       ("r-robustbase" ,r-robustbase)
-       ("r-trimcluster" ,r-trimcluster)))
+       ("r-robustbase" ,r-robustbase)))
     (home-page "https://cran.r-project.org/web/packages/fpc")
     (synopsis "Flexible procedures for clustering")
     (description
@@ -5270,14 +5270,14 @@ Companion to Applied Regression, Third Edition, Sage.")
 (define-public r-car
   (package
     (name "r-car")
-    (version "3.0-2")
+    (version "3.0-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "car" version))
        (sha256
         (base32
-         "0l3wyc9ia0ypcbap2p39slazfpbl84mjzydqvpsywrzdiyxajnfz"))))
+         "0vy3g3bjljd2al8xb9qr45f98is7yppc9jilqn7b6zvf5yqpr07s"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-abind" ,r-abind)
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 84454b2e0e..0ef9b0079d 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -924,7 +924,7 @@ tmux.")
 (define-public kitty
   (package
     (name "kitty")
-    (version "0.13.3")
+    (version "0.14.1")
     (home-page "https://sw.kovidgoyal.net/kitty/")
     (source
      (origin
@@ -935,7 +935,7 @@ tmux.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1y0vd75j8g61jdj8miml79w5ri3pqli5rv9iq6zdrxvzfa4b2rmb"))
+         "0nm8l8ki0csdapf5mj3vg605ki5hjsx7h7i3m01x1a4vjzjmk8bv"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index ea44cb7fd2..512ac2e117 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1446,7 +1446,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2019.05.11")
+    (version "2019.05.20")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rg3/youtube-dl/releases/"
@@ -1454,7 +1454,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1y272jgdqwhf2njzqfln80zb2pmw83rvp6lxza6wghb7cld249j1"))))
+                "18xwdfvpkqrnj0kb8xj8hgwhgiqpv7x7x7zzr4x3vynb9grcv9m8"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1565,7 +1565,7 @@ other site that youtube-dl supports.")
 (define-public you-get
   (package
     (name "you-get")
-    (version "0.4.1270")
+    (version "0.4.1302")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1574,7 +1574,7 @@ other site that youtube-dl supports.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "123g6x8sh32v4yn4ss55lfw7j79hgl3l6aiwgrk4ndq7dzhnz46q"))))
+                "1fwwzslv1vpjr8q0fq10dbngr8zai1n3d6na700cgpky4j9y0y99"))))
     (build-system python-build-system)
     (inputs
      `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 0c607e60c8..fdcd4521e8 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -456,14 +456,14 @@ The peer-to-peer VPN implements a Layer 2 (Ethernet) network between the peers
 (define-public wireguard
   (package
     (name "wireguard")
-    (version "0.0.20190406")
+    (version "0.0.20190601")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://git.zx2c4.com/WireGuard/snapshot/"
                                   "WireGuard-" version ".tar.xz"))
               (sha256
                (base32
-                "0ns1s31mfkj7nmapsnx126rj7xlydv7jv8infx5fg58byynz61ig"))))
+                "0s2mys78whsr0yw045a132iqx6nfy3c6hppiskbln5x04hc4ca3m"))))
     (build-system gnu-build-system)
     (outputs '("out" ; The WireGuard userspace tools
                "kernel-patch")) ; A patch to build Linux with WireGuard support
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 59716928f5..eb8ac81930 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -310,7 +310,7 @@ integrate Windows applications into your desktop.")
 (define-public wine-staging-patchset-data
   (package
     (name "wine-staging-patchset-data")
-    (version "4.8")
+    (version "4.9")
     (source
      (origin
        (method git-fetch)
@@ -320,7 +320,7 @@ integrate Windows applications into your desktop.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0npm44zdys78qbqqyvjczqqjdgacpsfds3jxyy1y4yj2xjqzagsq"))))
+         "17v66rsxvm3grglidxxzllw4msfrgwg35hmzanvrf8x8jfzjlvv2"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("bash" ,bash)
@@ -366,7 +366,7 @@ integrate Windows applications into your desktop.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0dd1vw3bq47ypdpflgmmbi68pjw5z3wz26kfwvnkxqbp28fapfa8"))))
+                "16vrzhhk0x862mfhninx5515s76j2kbjgmz7gzdigjzkzwi8x14i"))))
     (inputs `(("autoconf" ,autoconf) ; for autoreconf
               ("faudio" ,faudio)
               ("ffmpeg" ,ffmpeg)
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index c3ddf9f866..c518508360 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -1023,3 +1023,45 @@ the libburnia libraries.  It can blank CD/DVD/BD(-RW)s, burn and
 create iso images, audio CDs, as well as burn personal compositions
 of data to either CD/DVD/BD.")
     (license gpl2+)))
+
+(define-public mousepad
+  (package
+    (name "mousepad")
+    (version "0.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://archive.xfce.org/src/apps/mousepad/"
+                                  (version-major+minor version) "/mousepad-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "12si6fvhp68wz4scr339c23jxqq5ywn5nf4w55jld5lxjadkg9rr"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--enable-gtk3"
+                           ;; Use the GSettings keyfile backend rather than
+                           ;; DConf.
+                           "--enable-keyfile-settings")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (gtksourceview (assoc-ref inputs "gtksourceview")))
+              (wrap-program (string-append out "/bin/mousepad")
+                ;; For language-specs.
+                `("XDG_DATA_DIRS" ":" prefix (,(string-append gtksourceview
+                                                              "/share")))))
+             #t)))))
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("glib" ,glib "bin") ; for glib-compile-schemas.
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("gtksourceview" ,gtksourceview-3)))
+    (home-page "https://git.xfce.org/apps/mousepad/")
+    (synopsis "Simple text editor for Xfce")
+    (description
+     "Mousepad is a graphical text editor for Xfce based on Leafpad.")
+    (license gpl2+)))
diff --git a/gnu/services/cgit.scm b/gnu/services/cgit.scm
index a84a2dadb2..94ca9e281a 100644
--- a/gnu/services/cgit.scm
+++ b/gnu/services/cgit.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -581,7 +582,7 @@ removed for the URL and name.")
   (root-readme
    (string "")
    "The content of the file specified with this option will be included
-verbatim below thef \"about\" link on the repository index page.")
+verbatim below the \"about\" link on the repository index page.")
   (root-title
    (string "")
    "Text printed as heading on the repository index page.")
diff --git a/gnu/services/getmail.scm b/gnu/services/getmail.scm
new file mode 100644
index 0000000000..b807bb3a5d
--- /dev/null
+++ b/gnu/services/getmail.scm
@@ -0,0 +1,380 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services getmail)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu system pam)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu packages mail)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages tls)
+  #:use-module (guix records)
+  #:use-module (guix store)
+  #:use-module (guix packages)
+  #:use-module (guix gexp)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 format)
+  #:use-module (srfi srfi-1)
+  #:export (getmail-retriever-configuration
+            getmail-retriever-configuration-extra-parameters
+            getmail-destination-configuration
+            getmail-options-configuration
+            getmail-configuration-file
+            getmail-configuration
+            getmail-service-type))
+
+;;; Commentary:
+;;;
+;;; Service for the getmail mail retriever.
+;;;
+;;; Code:
+
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-join (string-split (if (string-suffix? "?" str)
+                                   (substring str 0 (1- (string-length str)))
+                                   str)
+                               #\-)
+                 "_")))
+
+(define (serialize-field field-name val)
+  #~(let ((val '#$val))
+      (format #f "~a = ~a\n"
+              #$(uglify-field-name field-name)
+              (cond
+               ((list? val)
+                (string-append
+                 "("
+                 (string-concatenate
+                  (map (lambda (list-val)
+                         (format #f "\"~a\", " list-val))
+                       val))
+                 ")"))
+               (else
+                val)))))
+
+(define (serialize-string field-name val)
+  (if (string=? val "")
+      ""
+      (serialize-field field-name val)))
+
+(define (string-or-filelike? val)
+  (or (string? val)
+      (file-like? val)))
+(define (serialize-string-or-filelike field-name val)
+  (if (equal? val "")
+      ""
+      (serialize-field field-name val)))
+
+(define (serialize-boolean field-name val)
+  (serialize-field field-name (if val "true" "false")))
+
+(define (non-negative-integer? val)
+  (and (exact-integer? val) (not (negative? val))))
+(define (serialize-non-negative-integer field-name val)
+  (serialize-field field-name val))
+
+(define serialize-list serialize-field)
+
+(define parameter-alist? list?)
+(define (serialize-parameter-alist field-name val)
+  #~(string-append
+     #$@(map (match-lambda
+               ((key . value)
+                (serialize-field key value)))
+             val)))
+
+(define (serialize-getmail-retriever-configuration field-name val)
+  (serialize-configuration val getmail-retriever-configuration-fields))
+
+(define-configuration getmail-retriever-configuration
+  (type
+   (string "SimpleIMAPSSLRetriever")
+   "The type of mail retriever to use.  Valid values include
+@samp{passwd} and @samp{static}.")
+  (server
+   (string 'unset)
+   "Space separated list of arguments to the userdb driver.")
+  (username
+   (string 'unset)
+   "Space separated list of arguments to the userdb driver.")
+  (port
+   (non-negative-integer #f)
+   "Space separated list of arguments to the userdb driver.")
+  (password
+   (string "")
+   "Override fields from passwd.")
+  (password-command
+   (list '())
+   "Override fields from passwd.")
+  (keyfile
+   (string "")
+   "PEM-formatted key file to use for the TLS negotiation")
+  (certfile
+   (string "")
+   "PEM-formatted certificate file to use for the TLS negotiation")
+  (ca-certs
+   (string "")
+   "CA certificates to use")
+  (extra-parameters
+   (parameter-alist '())
+   "Extra retriever parameters"))
+
+(define (serialize-getmail-destination-configuration field-name val)
+  (serialize-configuration val getmail-destination-configuration-fields))
+
+(define-configuration getmail-destination-configuration
+  (type
+   (string 'unset)
+   "The type of mail destination.  Valid values include @samp{Maildir},
+@samp{Mboxrd} and @samp{MDA_external}.")
+  (path
+   (string-or-filelike "")
+   "The path option for the mail destination.  The behaviour depends on the
+chosen type.")
+  (extra-parameters
+   (parameter-alist '())
+   "Extra destination parameters"))
+
+(define (serialize-getmail-options-configuration field-name val)
+  (serialize-configuration val getmail-options-configuration-fields))
+
+(define-configuration getmail-options-configuration
+  (verbose
+   (non-negative-integer 1)
+   "If set to @samp{0}, getmail will only print warnings and errors.  A value
+of @samp{1} means that messages will be printed about retrieving and deleting
+messages. If set to @samp{2}, getmail will print messages about each of it's
+actions.")
+  (read-all
+   (boolean #t)
+   "If true, getmail will retrieve all available messages.  Otherwise it will
+only retrieve messages it hasn't seen previously.")
+  (delete
+   (boolean #f)
+   "If set to true, messages will be deleted from the server after retrieving
+and successfully delivering them.  Otherwise, messages will be left on the
+server.")
+  (delete-after
+   (non-negative-integer 0)
+   "Getmail will delete messages this number of days after seeing them, if
+they have not been delivered.  This means messages will be left on the server
+this number of days after delivering them.  A value of @samp{0} disabled this
+feature.")
+  (delete-bigger-than
+   (non-negative-integer 0)
+   "Delete messages larger than this of bytes after retrieving them, even if
+the delete and delete-after options are disabled.  A value of @samp{0}
+disables this feature.")
+  (max-bytes-per-session
+   (non-negative-integer 0)
+   "Retrieve messages totalling up to this number of bytes before closing the
+session with the server.  A value of @samp{0} disables this feature.")
+  (max-message-size
+   (non-negative-integer 0)
+   "Don't retrieve messages larger than this number of bytes.  A value of
+@samp{0} disables this feature.")
+  (delivered-to
+   (boolean #t)
+   "If true, getmail will add a Delivered-To header to messages.")
+  (received
+   (boolean #t)
+   "If set, getmail adds a Received header to the messages.")
+  (message-log
+   (string "")
+   "Getmail will record a log of its actions to the named file.  A value of
+@samp{\"\"} disables this feature.")
+  (message-log-syslog
+   (boolean #t)
+   "If true, getmail will record a log of its actions using the system
+logger.")
+  (message-log-verbose
+   (boolean #t)
+   "If true, getmail will log information about messages not retrieved and the
+reason for not retrieving them, as well as starting and ending information
+lines.")
+  (extra-parameters
+   (parameter-alist '())
+   "Extra options to include."))
+
+(define (serialize-getmail-configuration-file field-name val)
+  (match val
+    (($ <getmail-configuration-file> location
+                                     retriever destination options)
+     #~(string-append
+        "[retriever]\n"
+        #$(serialize-getmail-retriever-configuration #f retriever)
+        "\n[destination]\n"
+        #$(serialize-getmail-destination-configuration #f destination)
+        "\n[options]\n"
+        #$(serialize-getmail-options-configuration #f options)))))
+
+(define-configuration getmail-configuration-file
+  (retriever
+   (getmail-retriever-configuration (getmail-retriever-configuration))
+   "What mail account to retrieve mail from, and how to access that account.")
+  (destination
+   (getmail-destination-configuration (getmail-destination-configuration))
+   "What to do with retrieved messages.")
+  (options
+   (getmail-options-configuration (getmail-options-configuration))
+   "Configure getmail."))
+
+(define (serialize-symbol field-name val) "")
+(define (serialize-getmail-configuration field-name val) "")
+
+(define-configuration getmail-configuration
+  (name
+   (symbol "unset")
+   "A symbol to identify the getmail service.")
+  (package
+   (package getmail)
+   "The getmail package to use.")
+  (user
+   (string "getmail")
+   "The user to run getmail as.")
+  (group
+   (string "getmail")
+   "The group to run getmail as.")
+  (directory
+   (string "/var/lib/getmail/default")
+   "The getmail directory to use.")
+  (rcfile
+   (getmail-configuration-file (getmail-configuration-file))
+   "The getmail configuration file to use.")
+  (idle
+   (list '())
+   "A list of mailboxes that getmail should wait on the server for new mail
+notifications.  This depends on the server supporting the IDLE extension.")
+  (environment-variables
+   (list '())
+   "Environment variables to set for getmail."))
+
+(define (generate-getmail-documentation)
+  (generate-documentation
+   `((getmail-configuration
+      ,getmail-configuration-fields
+      (rcfile getmail-configuration-file))
+     (getmail-configuration-file
+      ,getmail-configuration-file-fields
+      (retriever getmail-retriever-configuration)
+      (destination getmail-destination-configuration)
+      (options getmail-options-configuration))
+     (getmail-retriever-configuration ,getmail-retriever-configuration-fields)
+     (getmail-destination-configuration ,getmail-destination-configuration-fields)
+     (getmail-options-configuration ,getmail-options-configuration-fields))
+   'getmail-configuration))
+
+(define-gexp-compiler (getmail-configuration-file-compiler
+                       (rcfile <getmail-configuration-file>) system target)
+  (gexp->derivation
+   "getmailrc"
+   #~(call-with-output-file #$output
+       (lambda (port)
+         (display #$(serialize-getmail-configuration-file #f rcfile)
+                  port)))
+   #:system system
+   #:target target))
+
+(define (getmail-accounts configs)
+  (let ((users (delete-duplicates
+                (map getmail-configuration-user
+                     configs)))
+        (groups (delete-duplicates
+                 (map getmail-configuration-group
+                      configs))))
+    (append
+     (map (lambda (group)
+            (user-group
+             (name group)
+             (system? #t)))
+          groups)
+     (map (lambda (user)
+            (user-account
+             (name user)
+             (group (getmail-configuration-group
+                     (find (lambda (config)
+                             (and
+                              (string=? user (getmail-configuration-user config))
+                              (getmail-configuration-group config)))
+                           configs)))
+             (system? #t)
+             (comment "Getmail user")
+             (home-directory "/var/empty")
+             (shell (file-append shadow "/sbin/nologin"))))
+          users))))
+
+(define (getmail-activation configs)
+  "Return the activation GEXP for CONFIGS."
+  (with-imported-modules '((guix build utils))
+    #~(begin
+        (use-modules (guix build utils))
+        #$@(map
+            (lambda (config)
+              #~(let* ((pw (getpw #$(getmail-configuration-user config)))
+                       (uid (passwd:uid pw))
+                       (gid (passwd:gid pw))
+                       (getmaildir #$(getmail-configuration-directory config)))
+                  (mkdir-p getmaildir)
+                  (chown getmaildir uid gid)))
+            configs))))
+
+(define (getmail-shepherd-services configs)
+  "Return a list of <shepherd-service> for CONFIGS."
+  (map (match-lambda
+         (($ <getmail-configuration> location name package
+                                     user group directory rcfile idle
+                                     environment-variables)
+          (shepherd-service
+           (documentation "Run getmail.")
+           (provision (list (symbol-append 'getmail- name)))
+           (requirement '(networking))
+           (start #~(make-forkexec-constructor
+                     `(#$(file-append package "/bin/getmail")
+                       ,(string-append "--getmaildir=" #$directory)
+                       #$@(map (lambda (idle)
+                                 (string-append "--idle=" idle))
+                               idle)
+                       ,(string-append "--rcfile=" #$rcfile))
+                     #:user #$user
+                     #:group #$group
+                     #:environment-variables
+                     (list #$@environment-variables)
+                     #:log-file
+                     #$(string-append "/var/log/getmail-"
+                                      (symbol->string name)))))))
+       configs))
+
+(define getmail-service-type
+  (service-type
+   (name 'getmail)
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             getmail-shepherd-services)
+          (service-extension activation-service-type
+                             getmail-activation)
+          (service-extension account-service-type
+                             getmail-accounts)))
+   (description
+    "Run @command{getmail}, a mail retriever program.")
+   (default-value '())
+   (compose concatenate)
+   (extend append)))
diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm
index 9fe757fb73..0008746fe9 100644
--- a/gnu/services/herd.scm
+++ b/gnu/services/herd.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -76,7 +76,7 @@ return the socket."
       (catch 'system-error
         (lambda ()
           (connect sock address)
-          (setvbuf sock _IOFBF 1024)
+          (setvbuf sock 'block 1024)
           sock)
         (lambda args
           (close-port sock)
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm
index b433c59e12..b0e6d40260 100644
--- a/gnu/services/sddm.scm
+++ b/gnu/services/sddm.scm
@@ -175,7 +175,7 @@ Relogin="              (if (sddm-configuration-relogin? config)
 (define (sddm-etc-service config)
   (list `("sddm.conf" ,(sddm-configuration-file config))))
 
-(define (sddm-pam-service)
+(define (sddm-pam-service config)
   "Return a PAM service for @command{sddm}."
   (pam-service
    (name "sddm")
@@ -190,7 +190,9 @@ Relogin="              (if (sddm-configuration-relogin? config)
      (pam-entry
       (control "required")
       (module "pam_succeed_if.so")
-      (arguments (list "uid >= 1000" "quiet")))
+      (arguments (list (string-append "uid >= "
+                                      (number->string (sddm-configuration-minimum-uid config)))
+                       "quiet")))
      ;; should be factored out into system-auth
      (pam-entry
       (control "required")
@@ -249,7 +251,7 @@ Relogin="              (if (sddm-configuration-relogin? config)
       (control "required")
       (module "pam_unix.so"))))))
 
-(define (sddm-autologin-pam-service)
+(define (sddm-autologin-pam-service config)
   "Return a PAM service for @command{sddm-autologin}"
   (pam-service
    (name "sddm-autologin")
@@ -261,7 +263,9 @@ Relogin="              (if (sddm-configuration-relogin? config)
      (pam-entry
       (control "required")
       (module "pam_succeed_if.so")
-      (arguments (list "uid >= 1000" "quiet")))
+      (arguments (list (string-append "uid >= "
+                                      (number->string (sddm-configuration-minimum-uid config)))
+                       "quiet")))
      (pam-entry
       (control "required")
       (module "pam_permit.so"))))
@@ -282,9 +286,9 @@ Relogin="              (if (sddm-configuration-relogin? config)
       (module "sddm"))))))
 
 (define (sddm-pam-services config)
-  (list (sddm-pam-service)
+  (list (sddm-pam-service config)
         (sddm-greeter-pam-service)
-        (sddm-autologin-pam-service)))
+        (sddm-autologin-pam-service config)))
 
 (define %sddm-accounts
   (list (user-group (name "sddm") (system? #t))
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 84294db53b..35efddb0ae 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
-;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2017, 2018, 2019 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -29,14 +29,23 @@
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
   #:use-module (gnu services admin)
+  #:use-module (gnu services getmail)
+  #:use-module (gnu services mail)
   #:use-module (gnu system pam)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages patchutils)
   #:use-module (gnu packages php)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages logging)
+  #:use-module (guix packages)
   #:use-module (guix records)
   #:use-module (guix modules)
+  #:use-module (guix utils)
   #:use-module (guix gexp)
   #:use-module ((guix store) #:select (text-file))
   #:use-module ((guix utils) #:select (version-major))
@@ -210,7 +219,42 @@
             varnish-configuration-parameters
             varnish-configuration-extra-options
 
-            varnish-service-type))
+            varnish-service-type
+
+            <patchwork-database-configuration>
+            patchwork-database-configuration
+            patchwork-database-configuration?
+            patchwork-database-configuration-engine
+            patchwork-database-configuration-name
+            patchwork-database-configuration-user
+            patchwork-database-configuration-password
+            patchwork-database-configuration-host
+            patchwork-database-configuration-port
+
+            <patchwork-settings-module>
+            patchwork-settings-module
+            patchwork-settings-module?
+            patchwork-settings-module-database-configuration
+            patchwork-settings-module-secret-key
+            patchwork-settings-module-allowed-hosts
+            patchwork-settings-module-default-from-email
+            patchwork-settings-module-static-url
+            patchwork-settings-module-admins
+            patchwork-settings-module-debug?
+            patchwork-settings-module-enable-rest-api?
+            patchwork-settings-module-enable-xmlrpc?
+            patchwork-settings-module-force-https-links?
+            patchwork-settings-module-extra-settings
+
+            <patchwork-configuration>
+            patchwork-configuration
+            patchwork-configuration?
+            patchwork-configuration-patchwork
+            patchwork-configuration-settings-module
+            patchwork-configuration-domain
+
+            patchwork-virtualhost
+            patchwork-service-type))
 
 ;;; Commentary:
 ;;;
@@ -1268,3 +1312,323 @@ files.")
                              varnish-shepherd-service)))
    (default-value
      (varnish-configuration))))
+
+
+;;;
+;;; Patchwork
+;;;
+
+(define-record-type* <patchwork-database-configuration>
+  patchwork-database-configuration make-patchwork-database-configuration
+  patchwork-database-configuration?
+  (engine          patchwork-database-configuration-engine
+                   (default "django.db.backends.postgresql_psycopg2"))
+  (name            patchwork-database-configuration-name
+                   (default "patchwork"))
+  (user            patchwork-database-configuration-user
+                   (default "httpd"))
+  (password        patchwork-database-configuration-password
+                   (default ""))
+  (host            patchwork-database-configuration-host
+                   (default ""))
+  (port            patchwork-database-configuration-port
+                   (default "")))
+
+(define-record-type* <patchwork-settings-module>
+  patchwork-settings-module make-patchwork-settings-module
+  patchwork-settings-module?
+  (database-configuration    patchwork-settings-module-database-configuration
+                             (default (patchwork-database-configuration)))
+  (secret-key-file           patchwork-settings-module-secret-key-file
+                             (default "/etc/patchwork/django-secret-key"))
+  (allowed-hosts             patchwork-settings-module-allowed-hosts)
+  (default-from-email        patchwork-settings-module-default-from-email)
+  (static-url                patchwork-settings-module-static-url
+                             (default "/static/"))
+  (admins                    patchwork-settings-module-admins
+                             (default '()))
+  (debug?                    patchwork-settings-module-debug?
+                             (default #f))
+  (enable-rest-api?          patchwork-settings-module-enable-rest-api?
+                             (default #t))
+  (enable-xmlrpc?            patchwork-settings-module-enable-xmlrpc?
+                             (default #t))
+  (force-https-links?        patchwork-settings-module-force-https-links?
+                             (default #t))
+  (extra-settings            patchwork-settings-module-extra-settings
+                             (default "")))
+
+(define-record-type* <patchwork-configuration>
+  patchwork-configuration make-patchwork-configuration
+  patchwork-configuration?
+  (patchwork                patchwork-configuration-patchwork
+                            (default patchwork))
+  (domain                   patchwork-configuration-domain)
+  (settings-module          patchwork-configuration-settings-module)
+  (static-path              patchwork-configuration-static-url
+                            (default "/static/"))
+  (getmail-retriever-config getmail-retriever-config))
+
+;; Django uses a Python module for configuration, so this compiler generates a
+;; Python module from the configuration record.
+(define-gexp-compiler (patchwork-settings-module-compiler
+                       (file <patchwork-settings-module>) system target)
+  (match file
+    (($ <patchwork-settings-module> database-configuration secret-key-file
+                                    allowed-hosts default-from-email
+                                    static-url admins debug? enable-rest-api?
+                                    enable-xmlrpc? force-https-links?
+                                    extra-configuration)
+     (gexp->derivation
+      "patchwork-settings"
+      (with-imported-modules '((guix build utils))
+        #~(let ((output #$output))
+            (define (create-__init__.py filename)
+              (call-with-output-file filename
+                (lambda (port) (display "" port))))
+
+            (use-modules (guix build utils)
+                         (srfi srfi-1))
+
+            (mkdir-p (string-append output "/guix/patchwork"))
+            (create-__init__.py
+             (string-append output "/guix/__init__.py"))
+            (create-__init__.py
+             (string-append output "/guix/patchwork/__init__.py"))
+
+            (call-with-output-file
+                (string-append output "/guix/patchwork/settings.py")
+              (lambda (port)
+                (display
+                 (string-append "from patchwork.settings.base import *
+
+# Configuration from Guix
+with open('" #$secret-key-file "') as f:
+    SECRET_KEY = f.read().strip()
+
+ALLOWED_HOSTS = [
+" #$(string-concatenate
+     (map (lambda (allowed-host)
+            (string-append "  '" allowed-host "'\n"))
+          allowed-hosts))
+"]
+
+ADMINS = [
+" #$(string-concatenate
+     (map (match-lambda
+            ((name email-address)
+             (string-append
+              "('" name "','" email-address "'),")))
+          admins))
+"]
+
+DEBUG = " #$(if debug? "True" "False") "
+
+ENABLE_REST_API = " #$(if enable-xmlrpc? "True" "False") "
+ENABLE_XMLRPC = " #$(if enable-xmlrpc? "True" "False") "
+
+FORCE_HTTPS_LINKS = " #$(if force-https-links? "True" "False") "
+
+DATABASES = {
+    'default': {
+" #$(match database-configuration
+      (($ <patchwork-database-configuration>
+          engine name user password host port)
+       (string-append
+        "        'ENGINE': '" engine "',\n"
+        "        'NAME': '" name "',\n"
+        "        'USER': '" user "',\n"
+        "        'PASSWORD': '" password "',\n"
+        "        'HOST': '" host "',\n"
+        "        'PORT': '" port "',\n"))) "
+    },
+}
+
+" #$(if debug?
+        #~(string-append "STATIC_ROOT = '"
+                         #$(file-append patchwork "/share/patchwork/htdocs")
+                         "'")
+        #~(string-append "STATIC_URL = '" #$static-url "'")) "
+
+STATICFILES_STORAGE = (
+  'django.contrib.staticfiles.storage.StaticFilesStorage'
+)
+
+# Guix Extra Configuration
+" #$extra-configuration "
+") port)))
+            #t))
+      #:local-build? #t))))
+
+(define patchwork-virtualhost
+  (match-lambda
+    (($ <patchwork-configuration> patchwork domain
+                                  settings-module static-path
+                                  getmail-retriever-config)
+     (define wsgi.py
+       (file-append patchwork
+                    (string-append
+                     "/lib/python"
+                     (version-major+minor
+                      (package-version python))
+                     "/site-packages/patchwork/wsgi.py")))
+
+     (httpd-virtualhost
+      "*:8080"
+      `("ServerAdmin admin@example.com`
+ServerName " ,domain "
+
+LogFormat \"%v %h %l %u %t \\\"%r\\\" %>s %b \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\" customformat
+LogLevel info
+CustomLog \"/var/log/httpd/" ,domain "-access_log\" customformat
+
+ErrorLog /var/log/httpd/error.log
+
+WSGIScriptAlias / " ,wsgi.py "
+WSGIDaemonProcess " ,(package-name patchwork) " user=httpd group=httpd processes=1 threads=2 display-name=%{GROUP} lang='en_US.UTF-8' locale='en_US.UTF-8' python-path=" ,settings-module "
+WSGIProcessGroup " ,(package-name patchwork) "
+WSGIPassAuthorization On
+
+<Files " ,wsgi.py ">
+  Require all granted
+</Files>
+
+" ,@(if static-path
+        `("Alias " ,static-path " " ,patchwork "/share/patchwork/htdocs/")
+        '())
+"
+<Directory \"/srv/http/" ,domain "/\">
+    AllowOverride None
+    Options MultiViews Indexes SymlinksIfOwnerMatch IncludesNoExec
+    Require method GET POST OPTIONS
+</Directory>")))))
+
+(define (patchwork-httpd-configuration patchwork-configuration)
+  (list "WSGISocketPrefix /var/run/mod_wsgi"
+        (list "LoadModule wsgi_module "
+              (file-append mod-wsgi "/modules/mod_wsgi.so"))
+        (patchwork-virtualhost patchwork-configuration)))
+
+(define (patchwork-django-admin-gexp patchwork settings-module)
+  #~(lambda command
+      (let ((pid (primitive-fork))
+            (user (getpwnam "httpd")))
+        (if (eq? pid 0)
+            (dynamic-wind
+              (const #t)
+              (lambda ()
+                (setgid (passwd:gid user))
+                (setuid (passwd:uid user))
+
+                (setenv "DJANGO_SETTINGS_MODULE" "guix.patchwork.settings")
+                (setenv "PYTHONPATH" #$settings-module)
+                (primitive-exit
+                 (if (zero?
+                      (apply system*
+                             #$(file-append patchwork "/bin/patchwork-admin")
+                             command))
+                     0
+                     1)))
+              (lambda ()
+                (primitive-exit 1)))
+            (zero? (cdr (waitpid pid)))))))
+
+(define (patchwork-django-admin-action patchwork settings-module)
+  (shepherd-action
+   (name 'django-admin)
+   (documentation
+    "Run a django admin command for patchwork")
+   (procedure (patchwork-django-admin-gexp patchwork settings-module))))
+
+(define patchwork-shepherd-services
+  (match-lambda
+    (($ <patchwork-configuration> patchwork domain
+                                  settings-module static-path
+                                  getmail-retriever-config)
+     (define secret-key-file-creation-gexp
+       (if (patchwork-settings-module? settings-module)
+           (with-extensions (list guile-gcrypt)
+             #~(let ((secret-key-file
+                      #$(patchwork-settings-module-secret-key-file
+                         settings-module)))
+                 (use-modules (guix build utils)
+                              (gcrypt random))
+
+                 (unless (file-exists? secret-key-file)
+                   (mkdir-p (dirname secret-key-file))
+                   (call-with-output-file secret-key-file
+                     (lambda (port)
+                       (display (random-token 30 'very-strong) port)))
+                   (let* ((pw  (getpwnam "httpd"))
+                          (uid (passwd:uid pw))
+                          (gid (passwd:gid pw)))
+                     (chown secret-key-file uid gid)
+                     (chmod secret-key-file #o400)))))
+           #~()))
+
+     (list (shepherd-service
+            (requirement '(postgres))
+            (provision (list (string->symbol
+                              (string-append (package-name patchwork)
+                                             "-setup"))))
+            (start
+               #~(lambda ()
+                   (define run-django-admin-command
+                     #$(patchwork-django-admin-gexp patchwork
+                                                    settings-module))
+
+                   #$secret-key-file-creation-gexp
+
+                   (run-django-admin-command "migrate")))
+            (stop #~(const #f))
+            (actions
+             (list (patchwork-django-admin-action patchwork
+                                                  settings-module)))
+            (respawn? #f)
+            (documentation "Setup Patchwork."))))))
+
+(define patchwork-getmail-configs
+  (match-lambda
+    (($ <patchwork-configuration> patchwork domain
+                                  settings-module static-path
+                                  getmail-retriever-config)
+     (list
+      (getmail-configuration
+       (name (string->symbol (package-name patchwork)))
+       (user "httpd")
+       (directory (string-append
+                   "/var/lib/getmail/" (package-name patchwork)))
+       (rcfile
+        (getmail-configuration-file
+         (retriever getmail-retriever-config)
+         (destination
+          (getmail-destination-configuration
+           (type "MDA_external")
+           (path (file-append patchwork "/bin/patchwork-admin"))
+           (extra-parameters
+            '((arguments . ("parsemail"))))))
+         (options
+          (getmail-options-configuration
+           (read-all #f)
+           (delivered-to #f)
+           (received #f)))))
+       (idle (assq-ref
+              (getmail-retriever-configuration-extra-parameters
+               getmail-retriever-config)
+              'mailboxes))
+       (environment-variables
+        (list "DJANGO_SETTINGS_MODULE=guix.patchwork.settings"
+              #~(string-append "PYTHONPATH=" #$settings-module))))))))
+
+(define patchwork-service-type
+  (service-type
+   (name 'patchwork-setup)
+   (extensions
+    (list (service-extension httpd-service-type
+                             patchwork-httpd-configuration)
+          (service-extension shepherd-root-service-type
+                             patchwork-shepherd-services)
+          (service-extension getmail-service-type
+                             patchwork-getmail-configs)))
+   (description
+    "Patchwork patch tracking system.")))
diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm
index 16eee7a3cd..c1e963d047 100644
--- a/gnu/system/linux-container.scm
+++ b/gnu/system/linux-container.scm
@@ -109,7 +109,10 @@ containerized OS.  EXTRA-FILE-SYSTEMS is a list of file systems to add to OS."
                         (memq (service-kind service)
                               useless-services))
                       (operating-system-user-services os)))
-    (file-systems (append (map mapping->fs mappings)
+    (file-systems (append (map mapping->fs
+                               (if shared-network?
+                                   (append %network-file-mappings mappings)
+                                   mappings))
                           extra-file-systems
                           user-file-systems
 
@@ -124,32 +127,33 @@ containerized OS.  EXTRA-FILE-SYSTEMS is a list of file systems to add to OS."
   "Return a derivation of a script that runs OS as a Linux container.
 MAPPINGS is a list of <file-system> objects that specify the files/directories
 that will be shared with the host system."
-  (define network-mappings
-    ;; Files to map if network is to be shared with the host
-    (append %network-file-mappings
-            (let ((nscd-run-directory "/var/run/nscd"))
-              (if (file-exists? nscd-run-directory)
-                  (list (file-system-mapping
-                         (source nscd-run-directory)
-                         (target nscd-run-directory)))
-                  '()))))
+  (define nscd-run-directory "/var/run/nscd")
+
+  (define nscd-mapping
+    (file-system-mapping
+     (source nscd-run-directory)
+     (target nscd-run-directory)))
 
   (define (mountable-file-system? file-system)
     ;; Return #t if FILE-SYSTEM should be mounted in the container.
     (and (not (string=? "/" (file-system-mount-point file-system)))
          (file-system-needed-for-boot? file-system)))
 
-  (let* ((os           (containerized-operating-system
-                        os
-                        (cons %store-mapping
-                              (if shared-network?
-                                  (append network-mappings mappings)
-                                  mappings))
-                        #:shared-network? shared-network?
-                        #:extra-file-systems %container-file-systems))
-         (file-systems (filter mountable-file-system?
-                               (operating-system-file-systems os)))
-         (specs        (map file-system->spec file-systems)))
+  (define (os-file-system-specs os)
+    (map file-system->spec
+         (filter mountable-file-system?
+                 (operating-system-file-systems os))))
+
+  (let* ((os (containerized-operating-system
+              os (cons %store-mapping mappings)
+              #:shared-network? shared-network?
+              #:extra-file-systems %container-file-systems))
+         (nscd-os (containerized-operating-system
+                   os (cons* nscd-mapping %store-mapping mappings)
+                   #:shared-network? shared-network?
+                   #:extra-file-systems %container-file-systems))
+         (specs (os-file-system-specs os))
+         (nscd-specs (os-file-system-specs nscd-os)))
 
     (define script
       (with-imported-modules (source-module-closure
@@ -160,7 +164,12 @@ that will be shared with the host system."
                          (gnu system file-systems) ;spec->file-system
                          (guix build utils))
 
-            (call-with-container (map spec->file-system '#$specs)
+            (call-with-container
+                (map spec->file-system
+                     (if (and #$shared-network?
+                              (file-exists? #$nscd-run-directory))
+                         '#$nscd-specs
+                         '#$specs))
               (lambda ()
                 (setenv "HOME" "/root")
                 (setenv "TMPDIR" "/tmp")
diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm
index 33aa4d3437..10e5be71d8 100644
--- a/gnu/tests/mail.scm
+++ b/gnu/tests/mail.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,7 @@
   #:use-module (gnu system)
   #:use-module (gnu system vm)
   #:use-module (gnu services)
+  #:use-module (gnu services getmail)
   #:use-module (gnu services mail)
   #:use-module (gnu services networking)
   #:use-module (guix gexp)
@@ -32,7 +34,8 @@
   #:use-module (ice-9 ftw)
   #:export (%test-opensmtpd
             %test-exim
-            %test-dovecot))
+            %test-dovecot
+            %test-getmail))
 
 (define %opensmtpd-os
   (simple-operating-system
@@ -394,3 +397,176 @@ Subject: Hello Nice to meet you!")
    (name "dovecot")
    (description "Connect to a running Dovecot server.")
    (value (run-dovecot-test))))
+
+(define %getmail-os
+  (simple-operating-system
+   (service dhcp-client-service-type)
+   (service dovecot-service-type
+            (dovecot-configuration
+             (disable-plaintext-auth? #f)
+             (ssl? "no")
+             (auth-mechanisms '("anonymous" "plain"))
+             (auth-anonymous-username "alice")
+             (mail-location
+              (string-append "maildir:~/Maildir"
+                             ":INBOX=~/Maildir/INBOX"
+                             ":LAYOUT=fs"))))
+   (service getmail-service-type
+            (list
+             (getmail-configuration
+              (name 'test)
+              (user "alice")
+              (directory "/var/lib/getmail/alice")
+              (idle '("TESTBOX"))
+              (rcfile
+               (getmail-configuration-file
+                (retriever
+                 (getmail-retriever-configuration
+                  (type "SimpleIMAPRetriever")
+                  (server "localhost")
+                  (username "alice")
+                  (port 143)
+                  (extra-parameters
+                   '((password . "testpass")
+                     (mailboxes . ("TESTBOX"))))))
+                (destination
+                 (getmail-destination-configuration
+                  (type "Maildir")
+                  (path "/home/alice/TestMaildir/")))
+                (options
+                 (getmail-options-configuration
+                  (read-all #f))))))))))
+
+(define (run-getmail-test)
+  "Return a test of an OS running Getmail service."
+  (define vm
+    (virtual-machine
+     (operating-system (marionette-operating-system
+                        %getmail-os
+                        #:imported-modules '((gnu services herd))))
+     (port-forwardings '((8143 . 143)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (gnu build marionette)
+                       (ice-9 iconv)
+                       (ice-9 rdelim)
+                       (rnrs base)
+                       (rnrs bytevectors)
+                       (srfi srfi-64))
+
+          (define marionette
+            (make-marionette '(#$vm)))
+
+          (define* (message-length message #:key (encoding "iso-8859-1"))
+            (bytevector-length (string->bytevector message encoding)))
+
+          (define message "From: test@example.com\n\
+Subject: Hello Nice to meet you!")
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "getmail")
+
+          ;; Wait for dovecot to be up and running.
+          (test-assert "dovecot running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (start-service 'dovecot))
+             marionette))
+
+          (test-assert "set password for alice"
+            (marionette-eval
+             '(system "echo -e \"testpass\ntestpass\" | passwd alice")
+             marionette))
+
+          ;; Wait for getmail to be up and running.
+          (test-assert "getmail-test running"
+            (marionette-eval
+             '(let* ((pw (getpw "alice"))
+                     (uid (passwd:uid pw))
+                     (gid (passwd:gid pw)))
+                (use-modules (gnu services herd))
+
+                (for-each
+                 (lambda (dir)
+                   (mkdir dir)
+                   (chown dir uid gid))
+                 '("/home/alice/TestMaildir"
+                   "/home/alice/TestMaildir/cur"
+                   "/home/alice/TestMaildir/new"
+                   "/home/alice/TestMaildir/tmp"
+                   "/home/alice/TestMaildir/TESTBOX"
+                   "/home/alice/TestMaildir/TESTBOX/cur"
+                   "/home/alice/TestMaildir/TESTBOX/new"
+                   "/home/alice/TestMaildir/TESTBOX/tmp"))
+
+                (start-service 'getmail-test))
+             marionette))
+
+          ;; Check Dovecot service's PID.
+          (test-assert "service process id"
+            (let ((pid
+                   (number->string (wait-for-file "/var/run/dovecot/master.pid"
+                                                  marionette))))
+              (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
+                               marionette)))
+
+          (test-assert "accept an email"
+            (let ((imap (socket AF_INET SOCK_STREAM 0))
+                  (addr (make-socket-address AF_INET INADDR_LOOPBACK 8143)))
+              (connect imap addr)
+              ;; Be greeted.
+              (read-line imap) ;OK
+              ;; Authenticate
+              (write-line "a AUTHENTICATE ANONYMOUS" imap)
+              (read-line imap) ;+
+              (write-line "c2lyaGM=" imap)
+              (read-line imap) ;OK
+              ;; Create a TESTBOX mailbox
+              (write-line "a CREATE TESTBOX" imap)
+              (read-line imap) ;OK
+              ;; Append a message to a TESTBOX mailbox
+              (write-line (format #f "a APPEND TESTBOX {~a}"
+                                  (number->string (message-length message)))
+                          imap)
+              (read-line imap) ;+
+              (write-line message imap)
+              (read-line imap) ;OK
+              ;; Logout
+              (write-line "a LOGOUT" imap)
+              (close imap)
+              #t))
+
+          (sleep 1)
+
+          (test-assert "mail arrived"
+            (string-contains
+             (marionette-eval
+              '(begin
+                 (use-modules (ice-9 ftw)
+                              (ice-9 match))
+                 (let ((TESTBOX/new "/home/alice/TestMaildir/new/"))
+                   (match (scandir TESTBOX/new)
+                     (("." ".." message-file)
+                      (call-with-input-file
+                          (string-append TESTBOX/new message-file)
+                        get-string-all)))))
+              marionette)
+             message))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "getmail-test" test))
+
+(define %test-getmail
+  (system-test
+   (name "getmail")
+   (description "Connect to a running Getmail server.")
+   (value (run-getmail-test))))
+
+%getmail-os
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 319655396a..7c1c0aa511 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2017, 2019 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
@@ -28,15 +28,29 @@
   #:use-module (gnu system vm)
   #:use-module (gnu services)
   #:use-module (gnu services web)
+  #:use-module (gnu services databases)
+  #:use-module (gnu services getmail)
   #:use-module (gnu services networking)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services mail)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages patchutils)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages web)
+  #:use-module (guix packages)
+  #:use-module (guix modules)
+  #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (ice-9 match)
   #:export (%test-httpd
             %test-nginx
             %test-varnish
             %test-php-fpm
             %test-hpcguix-web
-            %test-tailon))
+            %test-tailon
+            %test-patchwork))
 
 (define %index.html-contents
   ;; Contents of the /index.html file.
@@ -498,3 +512,149 @@ HTTP-PORT."
    (name "tailon")
    (description "Connect to a running Tailon server.")
    (value (run-tailon-test))))
+
+
+;;;
+;;; Patchwork
+;;;
+
+(define patchwork-initial-database-setup-service
+  (match-lambda
+    (($ <patchwork-database-configuration>
+        engine name user password host port)
+
+     (define start-gexp
+       #~(lambda ()
+           (let ((pid (primitive-fork))
+                 (postgres (getpwnam "postgres")))
+             (if (eq? pid 0)
+                 (dynamic-wind
+                   (const #t)
+                   (lambda ()
+                     (setgid (passwd:gid postgres))
+                     (setuid (passwd:uid postgres))
+                     (primitive-exit
+                      (if (and
+                           (zero?
+                            (system* #$(file-append postgresql "/bin/createuser")
+                                     #$user))
+                           (zero?
+                            (system* #$(file-append postgresql "/bin/createdb")
+                                     "-O" #$user #$name)))
+                          0
+                          1)))
+                   (lambda ()
+                     (primitive-exit 1)))
+                 (zero? (cdr (waitpid pid)))))))
+
+     (shepherd-service
+      (requirement '(postgres))
+      (provision '(patchwork-postgresql-user-and-database))
+      (start start-gexp)
+      (stop #~(const #f))
+      (respawn? #f)
+      (documentation "Setup patchwork database.")))))
+
+(define (patchwork-os patchwork)
+  (simple-operating-system
+   (service dhcp-client-service-type)
+   (service httpd-service-type
+            (httpd-configuration
+             (config
+              (httpd-config-file
+               (listen '("8080"))))))
+   (service postgresql-service-type)
+   (service patchwork-service-type
+            (patchwork-configuration
+             (patchwork patchwork)
+             (domain "localhost")
+             (settings-module
+              (patchwork-settings-module
+               (allowed-hosts (list domain))
+               (default-from-email "")))
+             (getmail-retriever-config
+              (getmail-retriever-configuration
+               (type "SimpleIMAPSSLRetriever")
+               (server "imap.example.com")
+               (port 993)
+               (username "username")
+               (password "password")
+               (extra-parameters
+                '((mailboxes . ("INBOX"))))))))
+   (simple-service 'patchwork-database-setup
+                   shepherd-root-service-type
+                   (list
+                    (patchwork-initial-database-setup-service
+                     (patchwork-database-configuration))))))
+
+(define (run-patchwork-test patchwork)
+  "Run tests in %NGINX-OS, which has nginx running and listening on
+HTTP-PORT."
+  (define os
+    (marionette-operating-system
+     (patchwork-os patchwork)
+     #:imported-modules '((gnu services herd)
+                          (guix combinators))))
+
+  (define forwarded-port 8080)
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings `((8080 . ,forwarded-port)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11) (srfi srfi-64)
+                       (gnu build marionette)
+                       (web uri)
+                       (web client)
+                       (web response))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "patchwork")
+
+          (test-assert "patchwork-postgresql-user-and-service started"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'patchwork-postgresql-user-and-database)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((#t) #t)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-assert "httpd running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (start-service 'httpd))
+             marionette))
+
+          (test-equal "http-get"
+            200
+            (let-values
+                (((response text)
+                  (http-get #$(simple-format
+                               #f "http://localhost:~A/" forwarded-port)
+                            #:decode-body? #t)))
+              (response-code response)))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "patchwork-test" test))
+
+(define %test-patchwork
+  (system-test
+   (name "patchwork")
+   (description "Connect to a running Patchwork service.")
+   (value (run-patchwork-test patchwork))))