summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/build/vm.scm19
-rw-r--r--gnu/installer.scm14
-rw-r--r--gnu/installer/keymap.scm10
-rw-r--r--gnu/installer/newt/keymap.scm82
-rw-r--r--gnu/installer/record.scm3
-rw-r--r--gnu/installer/tests.scm9
-rw-r--r--gnu/installer/utils.scm5
-rw-r--r--gnu/local.mk9
-rw-r--r--gnu/packages/audio.scm36
-rw-r--r--gnu/packages/backup.scm16
-rw-r--r--gnu/packages/bioinformatics.scm2
-rw-r--r--gnu/packages/cdrom.scm20
-rw-r--r--gnu/packages/cpp.scm10
-rw-r--r--gnu/packages/cran.scm5
-rw-r--r--gnu/packages/cross-base.scm5
-rw-r--r--gnu/packages/databases.scm28
-rw-r--r--gnu/packages/disk.scm50
-rw-r--r--gnu/packages/distributed.scm4
-rw-r--r--gnu/packages/emacs-xyz.scm107
-rw-r--r--gnu/packages/finance.scm39
-rw-r--r--gnu/packages/games.scm116
-rw-r--r--gnu/packages/graphics.scm56
-rw-r--r--gnu/packages/ham-radio.scm308
-rw-r--r--gnu/packages/haskell-apps.scm2
-rw-r--r--gnu/packages/haskell-xyz.scm2
-rw-r--r--gnu/packages/image-viewers.scm125
-rw-r--r--gnu/packages/kde-pim.scm2
-rw-r--r--gnu/packages/linux.scm12
-rw-r--r--gnu/packages/music.scm5
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/ntp.scm70
-rw-r--r--gnu/packages/patches/akonadi-not-relocatable.patch (renamed from gnu/packages/patches/akonadi-Revert-Make-installation-properly-relo.patch)0
-rw-r--r--gnu/packages/patches/binutils-mingw-w64-deterministic.patch (renamed from gnu/packages/patches/binutils-mingw-w64-reproducible-import-libraries.patch)0
-rw-r--r--gnu/packages/patches/binutils-mingw-w64-timestamp.patch (renamed from gnu/packages/patches/binutils-mingw-w64-specify-timestamp.patch)0
-rw-r--r--gnu/packages/patches/kmscon-runtime-keymap-switch.patch27
-rw-r--r--gnu/packages/patches/sdl-pango-header-guard.patch (renamed from gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapTo.patch)0
-rw-r--r--gnu/packages/python-science.scm3
-rw-r--r--gnu/packages/python-xyz.scm107
-rw-r--r--gnu/packages/sdl.scm14
-rw-r--r--gnu/packages/ssh.scm14
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/xfce.scm4
-rw-r--r--gnu/services/desktop.scm3
-rw-r--r--gnu/services/web.scm4
-rw-r--r--gnu/system/vm.scm37
-rw-r--r--gnu/tests/install.scm9
-rw-r--r--gnu/tests/networking.scm3
47 files changed, 1119 insertions, 285 deletions
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
index 79eed48c1f..9caa110463 100644
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -533,6 +534,24 @@ GRUB configuration and OS-DRV as the stuff in it."
                 ;; Set all timestamps to 1.
                 "-volume_date" "all_file_dates" "=1"
 
+                ;; ‘zisofs’ compression reduces the total image size by ~60%.
+                "-zisofs" "level=9:block_size=128k" ; highest compression
+                ;; It's transparent to our Linux-Libre kernel but not to GRUB.
+                ;; Don't compress the kernel, initrd, and other files read by
+                ;; grub.cfg, as well as common already-compressed file names.
+                "-find" "/" "-type" "f"
+                ;; XXX Even after "--" above, and despite documentation claiming
+                ;; otherwise, "-or" is stolen by grub-mkrescue which then chokes
+                ;; on it (as ‘-o …’) and dies.  Don't use "-or".
+                "-not" "-wholename" "/boot/*"
+                "-not" "-wholename" "/System/*"
+                "-not" "-name" "unicode.pf2"
+                "-not" "-name" "bzImage"
+                "-not" "-name" "*.gz"   ; initrd & all man pages
+                "-not" "-name" "*.png"  ; includes grub-image.png
+                "-exec" "set_filter" "--zisofs"
+                "--"
+
                 "-volid" (string-upcase volume-id)
                 (if volume-uuid
                     `("-volume_date" "uuid"
diff --git a/gnu/installer.scm b/gnu/installer.scm
index 1060611672..8fbfc29261 100644
--- a/gnu/installer.scm
+++ b/gnu/installer.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -170,9 +171,9 @@ been performed at build time."
 (define apply-keymap
   ;; Apply the specified keymap. Use the default keyboard model.
   #~(match-lambda
-      ((layout variant)
+      ((layout variant options)
        (kmscon-update-keymap (default-keyboard-model)
-                             layout variant))))
+                             layout variant options))))
 
 (define* (compute-keymap-step context)
   "Return a gexp that runs the keymap-page of INSTALLER and install the
@@ -235,12 +236,13 @@ selected keymap."
 
          ;; The installer runs in a kmscon virtual terminal where loadkeys
          ;; won't work. kmscon uses libxkbcommon as a backend for keyboard
-         ;; input. It is possible to update kmscon current keymap by sending it
-         ;; a keyboard model, layout and variant, in a somehow similar way as
-         ;; what is done with setxkbmap utility.
+         ;; input. It is possible to update kmscon current keymap by sending
+         ;; it a keyboard model, layout, variant and options, in a somehow
+         ;; similar way as what is done with setxkbmap utility.
          ;;
          ;; So ask for a keyboard model, layout and variant to update the
-         ;; current kmscon keymap.
+         ;; current kmscon keymap.  For non-Latin layouts, we add an
+         ;; appropriate second layout and toggle via Alt+Shift.
          (installer-step
           (id 'keymap)
           (description (G_ "Keyboard mapping selection"))
diff --git a/gnu/installer/keymap.scm b/gnu/installer/keymap.scm
index df9fc5e441..c42b308009 100644
--- a/gnu/installer/keymap.scm
+++ b/gnu/installer/keymap.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -154,8 +155,8 @@ Configuration Database, describing possible XKB configurations."
       ((models layouts)
        (values models layouts)))))
 
-(define (kmscon-update-keymap model layout variant)
-  "Update kmscon keymap with the provided MODEL, LAYOUT and VARIANT."
+(define (kmscon-update-keymap model layout variant options)
+  "Update kmscon keymap with the provided MODEL, LAYOUT, VARIANT and OPTIONS."
   (and=>
    (getenv "KEYMAP_UPDATE")
    (lambda (keymap-file)
@@ -174,5 +175,8 @@ Configuration Database, describing possible XKB configurations."
          (format port layout)
          (put-u8 port 0)
 
-         (format port variant)
+         (format port (or variant ""))
+         (put-u8 port 0)
+
+         (format port (or options ""))
          (put-u8 port 0))))))
diff --git a/gnu/installer/newt/keymap.scm b/gnu/installer/newt/keymap.scm
index 8625afaa03..1b3af2f158 100644
--- a/gnu/installer/newt/keymap.scm
+++ b/gnu/installer/newt/keymap.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,10 +41,12 @@
      #:info-text
      (case context
        ((param) (G_ "Please choose your keyboard layout. \
-It will only be used during the installation process."))
+It will only be used during the installation process. \
+Non-Latin layouts can be toggled with Alt+Shift."))
        (else (G_ "Please choose your keyboard layout. \
 It will be used during the install process, and for the installed system. \
-You can switch to different layout at any time from the parameters menu.")))
+Non-Latin layouts can be toggled with Alt+Shift. You can switch to a \
+different layout at any time from the parameters menu.")))
      #:listbox-items layouts
      #:listbox-item->text layout->text
      #:sort-listbox-items? #f
@@ -101,21 +104,66 @@ You can switch to different layout at any time from the parameters menu.")))
       (append (sort main layout<?)
               (sort others layout<?)))))
 
+(define (add-empty-variant variants)
+  "Prepend #f to VARIANTS so the user has the option to select no variant.
+The resulting layout may be different from all other variants (e.g. for
+Azerbaijani)."
+  (cons #f variants))
+
 (define (sort-variants variants)
   "Sort VARIANTS list by putting the international variant ahead and return it."
   (call-with-values
       (lambda ()
         (partition
          (lambda (variant)
-           (let ((name (x11-keymap-variant-name variant)))
-             (string=? name "altgr-intl")))
+           (and variant
+                (let ((name (x11-keymap-variant-name variant)))
+                  (string=? name "altgr-intl"))))
          variants))
     (cut append <> <>)))
 
+(define %non-latin-layouts
+  ;; List of keyboard layouts marked as $nonlatin in xkeyboard-config.
+  ;; See comments in xkeyboard-config file /share/X11/xkb/rules/base.
+  ;; We ignore layouts that support Latin input: "kr"
+  '("am" "ara" "ben" "bd" "bg" "bt" "by" "cs" "deva" "ge" "gh"
+    "gr" "guj" "guru" "il" "in" "ir" "iku" "jp" "kan" "kh"
+    "la" "lao" "lk" "mk" "mm" "mn" "mv" "mal" "olck" "ori" "pk"
+    "ru" "scc" "sy" "syr" "tel" "th" "tj" "tam" "ua" "uz"
+    ;; The list from xkeyboard-config is incomplete.  Add more layouts when
+    ;; noticed:
+    "et" "kz"))
+
+(define %non-latin-variants
+  '("cyrillic"))
+
+(define %latin-layout+variants
+  ;; These layout+variant combinations are Latin after all.
+  '(("ir" "ku")))
+
+(define (toggleable-latin-layout layout variant)
+  "If LAYOUT is a non-Latin layout, return a new combined layout,
+a variant, and options that allow the user to switch between the
+non-Latin and the Latin layout.  Otherwise, return LAYOUT, VARIANT,
+and #f."
+  (if (and (not (equal? variant "latin"))
+           (not (member (list layout variant) %latin-layout+variants))
+           (or (member layout %non-latin-layouts)
+               (member variant %non-latin-variants)))
+      (let ((latin-layout (if (equal? variant "azerty") "fr" "us")))
+        (list
+         (string-append layout "," latin-layout)
+         ;; Comma to use variant only for non-Latin:
+         (and variant (string-append variant ","))
+         "grp:alt_shift_toggle"))
+      (list layout variant #f)))
+
 (define* (run-keymap-page layouts #:key (context #f))
   "Run a page asking the user to select a keyboard layout and variant. LAYOUTS
-is a list of supported X11-KEYMAP-LAYOUT. Return a list of two elements, the
-names of the selected keyboard layout and variant."
+is a list of supported X11-KEYMAP-LAYOUT.  For non-Latin keyboard layouts, a
+second layout and toggle options will be added automatically.  Return a list
+of three elements, the names of the selected keyboard layout, variant and
+options."
   (define keymap-steps
     (list
      (installer-step
@@ -139,10 +187,14 @@ names of the selected keyboard layout and variant."
            ;; Return #f if the layout does not have any variant.
            (and (not (null? variants))
                 (run-variant-page
-                 (sort-variants variants)
+                 (sort-variants (add-empty-variant variants))
                  (lambda (variant)
-                   (gettext (x11-keymap-variant-description variant)
-                            "xkeyboard-config"))))))))))
+                   (if variant
+                       (gettext (x11-keymap-variant-description variant)
+                                "xkeyboard-config")
+                       ;; Text to opt for no variant at all:
+                       (gettext (x11-keymap-layout-description layout)
+                                "xkeyboard-config")))))))))))
 
   (define (format-result result)
     (let ((layout (x11-keymap-layout-name
@@ -151,14 +203,20 @@ names of the selected keyboard layout and variant."
                           (lambda (variant)
                             (gettext (x11-keymap-variant-name variant)
                                      "xkeyboard-config")))))
-      (list layout (or variant ""))))
+      (toggleable-latin-layout layout variant)))
   (format-result
    (run-installer-steps #:steps keymap-steps)))
 
 (define (keyboard-layout->configuration keymap)
   "Return the operating system configuration snippet to install KEYMAP."
   (match keymap
-    ((name "")
+    ((name #f "grp:alt_shift_toggle")
+     `((keyboard-layout (keyboard-layout ,name
+                                         #:options '("grp:alt_shift_toggle")))))
+    ((name #f _)
      `((keyboard-layout (keyboard-layout ,name))))
-    ((name variant)
+    ((name variant "grp:alt_shift_toggle")
+     `((keyboard-layout (keyboard-layout ,name ,variant
+                                         #:options '("grp:alt_shift_toggle")))))
+    ((name variant _)
      `((keyboard-layout (keyboard-layout ,name ,variant))))))
diff --git a/gnu/installer/record.scm b/gnu/installer/record.scm
index 7bc22e90e0..6ebd87f6a6 100644
--- a/gnu/installer/record.scm
+++ b/gnu/installer/record.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -63,7 +64,7 @@
   (exit-error installer-exit-error)
   ;; procedure void -> void
   (final-page installer-final-page)
-  ;; procedure (layouts context) -> (list layout variant)
+  ;; procedure (layouts context) -> (list layout variant options)
   (keymap-page installer-keymap-page)
   ;; procedure: (#:key supported-locales iso639-languages iso3166-territories)
   ;; -> glibc-locale
diff --git a/gnu/installer/tests.scm b/gnu/installer/tests.scm
index 8ae80e4d7e..58bf0a2700 100644
--- a/gnu/installer/tests.scm
+++ b/gnu/installer/tests.scm
@@ -296,8 +296,13 @@ file, actually starting the installation process."
          encrypted
          not-encrypted))
     ((list-selection (title "Disk") (multiple-choices? #f)
-                     (items (,disk _ ...)))
-     disk)
+                     (items (,disks ...)))
+     ;; When running the installation from an ISO image, the CD/DVD drive
+     ;; shows up in the list.  Avoid it.
+     (find (lambda (disk)
+             (not (or (string-contains disk "DVD")
+                      (string-contains disk "CD-ROM"))))
+           disks))
 
     ;; The "Partition table" dialog pops up only if there's not already a
     ;; partition table.
diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm
index 0a91ae1e4a..5f8fe8ca01 100644
--- a/gnu/installer/utils.scm
+++ b/gnu/installer/utils.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -93,7 +93,8 @@ COMMAND exited successfully, #f otherwise."
           (setenv "LC_ALL" locale)
           (setenv "LANGUAGE"
                   (string-take locale
-                               (string-index locale #\_))))))
+                               (or (string-index locale #\_)
+                                   (string-length locale)))))))
 
   (guard (c ((invoke-error? c)
              (newline)
diff --git a/gnu/local.mk b/gnu/local.mk
index b10c856721..e7e5d00baf 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -569,6 +569,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/getmail.scm				\
   %D%/services/guix.scm			\
   %D%/services/kerberos.scm			\
+  %D%/services/linux.scm			\
   %D%/services/lirc.scm				\
   %D%/services/virtualization.scm		\
   %D%/services/mail.scm				\
@@ -726,7 +727,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/aegisub-make43.patch			\
   %D%/packages/patches/agg-am_c_prototype.patch			\
   %D%/packages/patches/akonadi-paths.patch		\
-  %D%/packages/patches/akonadi-Revert-Make-installation-properly-relo.patch \
+  %D%/packages/patches/akonadi-not-relocatable.patch		\
   %D%/packages/patches/akonadi-timestamps.patch		\
   %D%/packages/patches/allegro-mesa-18.2.5-and-later.patch	\
   %D%/packages/patches/amule-crypto-6.patch			\
@@ -776,8 +777,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/bidiv-update-fribidi.patch		\
   %D%/packages/patches/binutils-boot-2.20.1a.patch		\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
-  %D%/packages/patches/binutils-mingw-w64-specify-timestamp.patch \
-  %D%/packages/patches/binutils-mingw-w64-reproducible-import-libraries.patch \
+  %D%/packages/patches/binutils-mingw-w64-timestamp.patch	\
+  %D%/packages/patches/binutils-mingw-w64-deterministic.patch	\
   %D%/packages/patches/blender-2.79-newer-ffmpeg.patch		\
   %D%/packages/patches/blender-2.79-python-3.7-fix.patch	\
   %D%/packages/patches/bluez-CVE-2020-0556.patch		\
@@ -1303,7 +1304,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/sdl-pango-api_additions.patch		\
   %D%/packages/patches/sdl-pango-blit_overflow.patch		\
   %D%/packages/patches/sdl-pango-fillrect_crash.patch		\
-  %D%/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapTo.patch	\
+  %D%/packages/patches/sdl-pango-header-guard.patch		\
   %D%/packages/patches/sdl-pango-matrix_declarations.patch	\
   %D%/packages/patches/sdl-pango-sans-serif.patch		\
   %D%/packages/patches/patchutils-test-perms.patch		\
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index c7f55bb07e..65d467ad63 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -29,6 +29,7 @@
 ;;; Copyright © 2019 Hartmt Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -99,6 +100,7 @@
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages linphone)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages valgrind)
   #:use-module (gnu packages video)
   #:use-module (gnu packages vim) ;xxd
   #:use-module (gnu packages webkit)
@@ -4199,3 +4201,37 @@ minimum.")
      `(("librsvg" ,librsvg)
        ,@(package-inputs ztoolkit)))
     (synopsis "ZToolkit with SVG support")))
+
+(define-public codec2
+  (package
+    (name "codec2")
+    (version "0.9.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/drowe67/codec2.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1jpvr7bra8srz8jvnlbmhf8andbaavq5v01qjnp2f61za93rzwba"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("bc" ,bc)
+       ("octave" ,octave)
+       ("valgrind" ,valgrind)))
+    (arguments
+     `(#:tests? #f ; TODO: Fix tests (paths, graphic toolkit, octave modules).
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-test-environment
+           (lambda _
+             (setenv "HOME" "/tmp")
+             #t)))))
+    (synopsis "Speech codec")
+    (description
+     "Codec 2 is a speech codec designed for communications quality speech
+between 700 and 3200 bit/s.  The main application is low bandwidth HF/VHF
+digital radio.")
+    (home-page "https://www.rowetel.com/?page_id=452")
+    (license license:lgpl2.1)))
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 6b680d818b..97c7be48ca 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
@@ -990,15 +990,25 @@ precious backup space.
 (define-public burp
   (package
     (name "burp")
-    (version "2.3.20")
+    (version "2.3.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/burp/burp-" version
                                   "/burp-" version ".tar.bz2"))
               (sha256
                (base32
-                "0dm2y76z7pg17kfv6ahmh4mf2r3pg7mlwd69lvmjwssnd9vs1nn5"))))
+                "0dmahqx8ldqdrx9b47r7ag3m801n7h3kclcqja1cc1jzhfhfq27w"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'extend-test-time-outs
+           ;; The defaults are far too low for busy boxes & spinning storage.
+           (lambda _
+             (substitute* (find-files "utest" "\\.c$")
+               (("(tcase_set_timeout\\(tc_core,)[ 0-9]*(\\);.*)$" _ prefix suffix)
+                (string-append prefix " 3600" suffix "\n")))
+             #t)))))
     (inputs
      `(("librsync" ,librsync)
        ("openssl" ,openssl)
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index f1f6a3eb6d..4c3d2b793b 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -13173,7 +13173,7 @@ version does count multisplits.")
                 ((or (string-prefix? "armhf" system)
                      (string-prefix? "aarch64" system))
                  "arm_neon=1")
-                (_ "sse2only=1"))))
+                (else "sse2only=1"))))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index cdc98d9b76..e1cded55e2 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
@@ -66,6 +66,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages image)
   #:use-module (gnu packages photo)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages video)
   #:use-module (gnu packages wget)
   #:use-module (gnu packages xiph))
@@ -156,6 +157,7 @@ libcdio.")
   (package
     (name "xorriso")
     (version "1.5.2")
+    (outputs '("out" "gui"))
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/xorriso/xorriso-"
@@ -172,10 +174,26 @@ libcdio.")
              (let* ((out (assoc-ref outputs "out"))
                     (out-bin (string-append out "/bin")))
                (install-file "frontend/grub-mkrescue-sed.sh" out-bin)
+               #t)))
+         (add-after 'install 'move-gui-to-separate-output
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (gui (assoc-ref outputs "gui")))
+               (for-each
+                 (lambda (file)
+                   (mkdir-p (string-append gui (dirname file)))
+                   (rename-file (string-append out file)
+                                (string-append gui file)))
+                 (list "/bin/xorriso-tcltk"
+                       "/share/info/xorriso-tcltk.info"
+                       "/share/man/man1/xorriso-tcltk.1"))
+               (wrap-program (string-append gui "/bin/xorriso-tcltk")
+                 `("PATH" ":" prefix (,(string-append out "/bin"))))
                #t))))))
     (inputs
      `(("acl" ,acl)
        ("readline" ,readline)
+       ("tk" ,tk)
        ("zlib" ,zlib)))
     (home-page "https://www.gnu.org/software/xorriso/")
     (synopsis "Create, manipulate, burn ISO-9660 file systems")
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 84a7e68b88..2248ebfc4b 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -47,18 +47,18 @@
 (define-public libzen
   (package
     (name "libzen")
-    (version "0.4.37")
+    (version "0.4.38")
     (source (origin
               (method url-fetch)
               ;; Warning: This source has proved unreliable 1 time at least.
               ;; Consider an alternate source or report upstream if this
               ;; happens again.
               (uri (string-append "https://mediaarea.net/download/source/"
-                                  name "/" version "/"
-                                  name "_" version ".tar.bz2"))
+                                  "libzen/" version "/"
+                                  "libzen_" version ".tar.bz2"))
               (sha256
                (base32
-                "1dkqbgabzpa6bd7dkqrvd35sdxrhr6qxalb88f3dw0afk65xqb0k"))))
+                "1nkygc17sndznpcf71fdrhwpm8z9a3hc9csqlafwswh49axhfkjr"))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -66,7 +66,7 @@
     (build-system gnu-build-system)
     (arguments
      '(#:phases
-       ;; build scripts not in root of archive
+       ;; The build scripts are not at the root of the archive.
        (modify-phases %standard-phases
          (add-after 'unpack 'pre-configure
            (lambda _
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 2bf94eb8da..59bfd8833a 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -1905,14 +1905,13 @@ multi-dimensional data.")
 (define-public r-powerlaw
   (package
     (name "r-powerlaw")
-    (version "0.70.2")
+    (version "0.70.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "poweRlaw" version))
        (sha256
-        (base32
-         "1asr6ikr7hmj78jyg8r1gwvcjg14addkxdiz92nh06lv71a183r4"))))
+        (base32 "19zah9mx93az5lh9vicn3c8q1xb12g0w46dh5p901fbyimc32vwk"))))
     (properties `((upstream-name . "poweRlaw")))
     (build-system r-build-system)
     (propagated-inputs
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 58e3f774df..df4570dafc 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -102,9 +102,8 @@
                  ((target-mingw? target)
                   (package-with-extra-patches
                    binutils
-                   (search-patches
-                    "binutils-mingw-w64-specify-timestamp.patch"
-                    "binutils-mingw-w64-reproducible-import-libraries.patch")))
+                   (search-patches "binutils-mingw-w64-timestamp.patch"
+                                   "binutils-mingw-w64-deterministic.patch")))
                  (else binutils))
            target)))
 
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index f6c5ec90d7..8e61c4afd2 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -225,15 +225,15 @@ standard Go idioms.")
 (define-public ephemeralpg
   (package
     (name "ephemeralpg")
-    (version "2.8")
+    (version "2.9")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "http://eradman.com/ephemeralpg/code/ephemeralpg-"
+             "https://eradman.com/ephemeralpg/code/ephemeralpg-"
              version ".tar.gz"))
        (sha256
-        (base32 "1dpfxsd8a52psx3zlfbqkw53m35w28qwyb87a8anz143x6gnkkr4"))))
+        (base32 "1ghp3kya4lxvfwz3c022cx9vqf55jbf9sjw60bxjcb5sszklyc89"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list "CC=gcc"
@@ -243,20 +243,7 @@ standard Go idioms.")
          (delete 'configure)
          (replace 'check
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; The intention for one test is to test without PostgreSQL on
-             ;; the $PATH, so replace the test $PATH with just the util-linux
-             ;; bin, which contains getopt. It will hopefully be possible to
-             ;; remove this for releases after 2.8.
-             (substitute* "test.rb"
-               (("/bin:/usr/bin")
-                (string-append (assoc-ref inputs "util-linux")
-                               "/bin")))
-             ;; Set the LC_ALL=C as some tests use sort, and the locale
-             ;; affects the order. It will hopefully be possible to remove
-             ;; this for releases after 2.8.
-             (setenv "LC_ALL" "C")
-             (invoke "ruby" "test.rb")
-             #t))
+             (invoke "ruby" "test.rb")))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -266,15 +253,16 @@ standard Go idioms.")
                                     "/bin")
                     ,(string-append (assoc-ref inputs "postgresql")
                                     "/bin")
-                    ;; For getsocket
+                    ;; For getsocket.
                     ,(string-append out "/bin")))))
              #t)))))
     (inputs
      `(("postgresql" ,postgresql)
        ("util-linux" ,util-linux)))
     (native-inputs
-     `(("ruby" ,ruby)))
-    (home-page "http://eradman.com/ephemeralpg/")
+     `(("ruby" ,ruby)
+       ("which" ,which)))
+    (home-page "https://eradman.com/ephemeralpg/")
     (synopsis "Run temporary PostgreSQL databases")
     (description
      "@code{pg_tmp} creates temporary PostgreSQL databases, suitable for tasks
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 07ea1c93cd..756c9ad2af 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Pkill -9 <pkill9@runbox.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,10 +47,12 @@
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages linux)
@@ -70,6 +73,7 @@
   #:use-module (gnu packages w3m)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system python)
@@ -858,3 +862,49 @@ written in Go.  It is heavily inspired by ranger with some missing and
 extra features.  Some of the missing features are deliberately omitted
 since they are better handled by external tools.")
     (license license:expat)))
+
+(define-public xfe
+  (package
+    (name "xfe")
+    (version "1.43.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://sourceforge.net/projects/xfe/files/xfe/"
+                       version
+                       "/xfe-" version ".tar.gz"))
+       (sha256
+        (base32 "1fl51k5jm2vrfc2g66agbikzirmp0yb0lqhmsssixfb4mky3hpzs"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fox" ,fox)
+       ("freetype" ,freetype)
+       ("x11" ,libx11)
+       ("xcb" ,libxcb)
+       ("xcb-util" ,xcb-util)
+       ("xft" ,libxft)
+       ("xrandr" ,libxrandr)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-xferc-path
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (xferc   (string-append out "/share/xfe/xferc")))
+               (substitute* "src/XFileExplorer.cpp"
+                 (("/usr/share/xfe/xferc") xferc))
+               #t))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list (string-append "BASH_COMPLETION_DIR=" out
+                              "/share/bash-completion/completions")))))
+    (synopsis "File Manager for X-Based Graphical Systems")
+    (description"XFE (X File Explorer) is a file manager for X.  It is based on
+the popular but discontinued, X Win Commander.  It aims to be the file manager
+of choice for all light thinking Unix addicts!")
+    (home-page "http://roland65.free.fr/xfe/")
+    (license license:gpl2+)))
diff --git a/gnu/packages/distributed.scm b/gnu/packages/distributed.scm
index e1e6636219..d861484d22 100644
--- a/gnu/packages/distributed.scm
+++ b/gnu/packages/distributed.scm
@@ -44,7 +44,7 @@
 (define-public boinc-client
   (package
     (name "boinc-client")
-    (version "7.16.5")
+    (version "7.16.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -55,7 +55,7 @@
               (file-name (git-file-name "boinc" version))
               (sha256
                (base32
-                "107rpw9qd5x4pyxm9jd1lqxva5nxwb01dm5h61d6msv2vgiy0r8n"))))
+                "00xpzxxnki9hsf2vg9p67dk9ilw9ychpgm09fp3c41zyylb33ml5"))))
     (build-system gnu-build-system)
     (arguments '(#:configure-flags '("--disable-server")))
     (inputs `(("openssl" ,openssl)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 58999d6611..1d530573a5 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -5976,33 +5976,30 @@ windows.")
     (license license:gpl3+)))
 
 (define-public emacs-ace-window
-  ;; last release version is from 2015
-  (let ((commit "a5344925e399e1f015721cda6cf5db03c90ab87a")
-        (revision "1"))
-    (package
-      (name "emacs-ace-window")
-      (version (git-version "0.9.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/abo-abo/ace-window.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "18jm8gfgnf6ja9aarws5650lw2zfi3wdwc5j8r5ijn5fcqhfy7rc"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-avy" ,emacs-avy)))
-      (home-page "https://github.com/abo-abo/ace-window")
-      (synopsis "Quickly switch windows in Emacs")
-      (description
-       "@code{ace-window} is meant to replace @code{other-window}.
+  (package
+    (name "emacs-ace-window")
+    (version "0.10.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/abo-abo/ace-window.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0f3r40d5yxp2pm2j0nn86s29nqj8py0jxjbj50v4ci3hsd92d8jl"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-avy" ,emacs-avy)))
+    (home-page "https://github.com/abo-abo/ace-window")
+    (synopsis "Quickly switch windows in Emacs")
+    (description
+     "@code{ace-window} is meant to replace @code{other-window}.
 In fact, when there are only two windows present, @code{other-window} is
 called.  If there are more, each window will have its first character
 highlighted.  Pressing that character will switch to that window.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-iedit
   ;; Last release version was in 2016.
@@ -8406,24 +8403,23 @@ distribution, primarily targeting Clojure users")
 (define-public emacs-orgalist
   (package
     (name "emacs-orgalist")
-    (version "1.11")
+    (version "1.12")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "orgalist-" version ".el"))
        (sha256
-        (base32
-         "0zbqkk540rax32s8szp5zgz3a02zw88fc1dmjmyw6h3ls04m91kl"))))
+        (base32 "1hwm7j0hbv2pg9w885ky1c9qga3grcfq8v216jv2ivkw8xzavysd"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/orgalist.html")
     (synopsis "Manage Org-like lists in non-Org buffers")
-    (description "Write Org mode's plain lists in non-Org buffers.  More
-specifically, Orgalist supports the syntax of Org mode for numbered,
-unnumbered, description items, checkboxes, and counter cookies.
+    (description "Orgalist writes and manages Org mode's plain lists in
+non-Org buffers.  More specifically, it supports the syntax of Org mode for
+numbered, unnumbered, description items, checkboxes, and counter cookies.
 
-The library also implements radio lists, i.e., lists written in Org
-syntax later translated into the host format, e.g., LaTeX or HTML.")
+The library also implements radio lists, i.e., lists written in Org syntax
+later translated into the host format, e.g., LaTeX or HTML.")
     (license license:gpl3+)))
 
 (define-public emacs-writegood-mode
@@ -9178,6 +9174,31 @@ above over the network.")
 in Org buffers and displays matching entries.")
     (license license:gpl3+)))
 
+(define-public emacs-dired-git-info
+  ;; Upstream has no proper release.  The base version is extracted from the
+  ;; "Version" keyword in the main file.
+  (let ((commit "91d57e3a4c5104c66a3abc18e281ee55e8979176")
+        (revision "0"))
+    (package
+      (name "emacs-dired-git-info")
+      (version (git-version "0.3.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/clemera/dired-git-info")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1dr4iv95s4barxxj56znqkl9z0lg5jw731jmjr01s6vn8ar69gik"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/clemera/dired-git-info/")
+      (synopsis "Show git info in Emacs Dired")
+      (description "This Emacs package provides a minor mode which shows git
+information inside the Dired buffer.")
+      (license license:gpl3+))))
+
 (define-public emacs-dired-toggle-sudo
   (package
     (name "emacs-dired-toggle-sudo")
@@ -9202,6 +9223,28 @@ in Org buffers and displays matching entries.")
 @code{sudo} privileges.")
     (license license:wtfpl2)))
 
+(define-public emacs-diredfl
+  (package
+    (name "emacs-diredfl")
+    (version "0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/purcell/diredfl")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1zb2lz7rp58zqvpniqcsmqabi7nqg2d8bfd0hgmq68bn2hd25b5z"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/purcell/diredfl/")
+    (synopsis "Extra Emacs font lock rules for a more colourful Dired")
+    (description "This library enables additional font locking in Dired mode.
+This is adapted from the extra font lock rules provided by Drew Adams' Dired+
+package.")
+    (license license:gpl3+)))
+
 (define-public emacs-memoize
   (package
     (name "emacs-memoize")
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index ea1fcbe9d4..c639a9a562 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2019 Sebastian Schott <sschott@mailbox.org>
 ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2020 Christopher Lemmer Webber <cwebber@dustycloud.org>
+;;; Copyright © 2020 Tom Zander <tomz@freedommail.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1401,6 +1402,44 @@ electronic cash system.  This package provides a command line client and
 a Qt GUI.")
     (license license:expat)))
 
+(define-public fulcrum
+  (package
+    (name "fulcrum")
+    (version "1.0.5b")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://gitlab.com/FloweeTheHub/fulcrum/-/archive/v"
+                           version "/fulcrum-v" version ".tar.gz"))
+       (sha256
+        (base32 "1c1hkik8avill8ha33g76rk4b03j5ac8wiml69q4jav7a63ywgfy"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Call qmake instead of configure to create a Makefile.
+         (replace 'configure
+           (lambda _
+             (invoke
+              "qmake"
+              (string-append "PREFIX=" %output)
+              "features="))))))
+    (native-inputs
+     `(("qttools" ,qttools)))
+    (inputs
+     `(("python" ,python)
+       ("qtbase" ,qtbase)
+       ("rocksdb" ,rocksdb)
+       ("zlib" ,zlib)))
+    (home-page "https://gitlab.com/FloweeTheHub/fulcrum/")
+    (synopsis "Fast and nimble SPV server for Bitcoin Cash")
+    (description
+     "Flowee Fulcrum is a server that is the back-end for @acronym{SPV,
+Simplified Payment Verification} wallets, it provides the full API for those
+walets in a fast and small server.  The full data is stored in a full node,
+like Flowee the Hub, which Fulcrum connects to over RPC.")
+    (license license:gpl3+)))
+
 (define-public beancount
   (package
     (name "beancount")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 7b22dfc052..e66db17d93 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -398,61 +398,61 @@ canyons and wait for the long I-shaped block to clear four rows at a time.")
     (license license:gpl3+)))
 
 (define-public cataclysm-dda
-  (let ((commit "9c732a5de48928691ab863d3ab275ca7b0e522fc"))
-    (package
-      (name "cataclysm-dda")
-      (version "0.D")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/CleverRaven/Cataclysm-DDA.git")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "00zzhx1mh1qjq668cga5nbrxp2qk6b82j5ak65skhgnlr6ii4ysc"))
-                (file-name (git-file-name name version))))
-      (build-system gnu-build-system)
-      (arguments
-       '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
-                            "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
-                            "LOCALIZE=1" "LANGUAGES=all")
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)
-           (add-after 'build 'build-tiles
-             (lambda* (#:key make-flags outputs #:allow-other-keys)
-               ;; Change prefix directory and enable tile graphics and sound.
-               (apply invoke "make" "TILES=1" "SOUND=1"
-                      (string-append "PREFIX="
-                                     (assoc-ref outputs "tiles"))
-                      (cdr make-flags))))
-           (add-after 'install 'install-tiles
-             (lambda* (#:key make-flags outputs #:allow-other-keys)
-               (apply invoke "make" "install" "TILES=1" "SOUND=1"
-                      (string-append "PREFIX="
-                                     (assoc-ref outputs "tiles"))
-                      (cdr make-flags)))))
-         ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
-         ;;       input in order to support tests.
-         #:tests? #f))
-      (outputs '("out"
-                 "tiles")) ; For tile graphics and sound support.
-      (native-inputs
-       `(("gettext" ,gettext-minimal)
-         ("pkg-config" ,pkg-config)))
-      (inputs
-       `(("freetype" ,freetype)
-         ("libogg" ,libogg)
-         ("libvorbis" ,libvorbis)
-         ("ncurses" ,ncurses)
-         ("sdl2" ,sdl2)
-         ("sdl2-image" ,sdl2-image)
-         ("sdl2-ttf" ,sdl2-ttf)
-         ("sdl2-mixer" ,sdl2-mixer)))
-      (home-page "https://cataclysmdda.org/")
-      (synopsis "Survival horror roguelike video game")
-      (description
-       "Cataclysm: Dark Days Ahead (or \"DDA\" for short) is a roguelike set
+  (package
+    (name "cataclysm-dda")
+    (version "0.E")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/CleverRaven/Cataclysm-DDA.git")
+             (commit version)))
+       (sha256
+        (base32 "0pbi0fw37zimzdklfj58s1ql0wlqq7dy6idkcsib3hn910ajaxan"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags
+       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
+             "LOCALIZE=1" "LANGUAGES=all")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'build 'build-tiles
+           (lambda* (#:key make-flags outputs #:allow-other-keys)
+             ;; Change prefix directory and enable tile graphics and sound.
+             (apply invoke "make" "TILES=1" "SOUND=1"
+                    (string-append "PREFIX="
+                                   (assoc-ref outputs "tiles"))
+                    (cdr make-flags))))
+         (add-after 'install 'install-tiles
+           (lambda* (#:key make-flags outputs #:allow-other-keys)
+             (apply invoke "make" "install" "TILES=1" "SOUND=1"
+                    (string-append "PREFIX="
+                                   (assoc-ref outputs "tiles"))
+                    (cdr make-flags)))))
+       ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
+       ;;       input in order to support tests.
+       #:tests? #f))
+    (outputs '("out"
+               "tiles"))                ;for tile graphics and sound support
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("freetype" ,freetype)
+       ("libogg" ,libogg)
+       ("libvorbis" ,libvorbis)
+       ("ncurses" ,ncurses)
+       ("sdl2" ,sdl2)
+       ("sdl2-image" ,sdl2-image)
+       ("sdl2-ttf" ,sdl2-ttf)
+       ("sdl2-mixer" ,sdl2-mixer)))
+    (home-page "https://cataclysmdda.org/")
+    (synopsis "Survival horror roguelike video game")
+    (description
+     "Cataclysm: Dark Days Ahead (or \"DDA\" for short) is a roguelike set
 in a post-apocalyptic world.  Struggle to survive in a harsh, persistent,
 procedurally generated world.  Scavenge the remnants of a dead civilization
 for food, equipment, or, if you are lucky, a vehicle with a full tank of gas
@@ -460,7 +460,7 @@ to get you out of Dodge.  Fight to defeat or escape from a wide variety of
 powerful monstrosities, from zombies to giant insects to killer robots and
 things far stranger and deadlier, and against the others like yourself, that
 want what you have.")
-      (license license:cc-by-sa3.0))))
+    (license license:cc-by-sa3.0)))
 
 (define-public corsix-th
   (package
@@ -6066,7 +6066,7 @@ affect gameplay).")
   (package
     (inherit chocolate-doom)
     (name "crispy-doom")
-    (version "5.7.1")
+    (version "5.7.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6074,7 +6074,7 @@ affect gameplay).")
                     (commit (string-append "crispy-doom-" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "1gqivy4pxasy7phyznixsagylf9f70bk33b0knpfzzlks6cc6zzj"))))
+               (base32 "002aqbgsksrgzqridwdlkrjincaxh0dkvwlrbb8d2f3kwk7lj4fq"))))
     (native-inputs
      (append
       (package-native-inputs chocolate-doom)
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 7f56d26804..16ab9d20a4 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -87,6 +88,61 @@
   #:use-module (guix packages)
   #:use-module (guix utils))
 
+(define-public fox
+  (package
+    (name "fox")
+    (version "1.6.57")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://fox-toolkit.org/ftp/fox-" version ".tar.gz"))
+       (sha256
+        (base32 "08w98m6wjadraw1pi13igzagly4b2nfa57kdqdnkjfhgkvg1bvv5"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda _
+             (substitute* "configure"
+               (("-I/usr/include/freetype2")
+                (string-append "-I"
+                               (string-append
+                                (assoc-ref %build-inputs "freetype")
+                                "/include/freetype2"))))
+             #t)))))
+    (native-inputs
+     `(("doxygen" ,doxygen)))
+    (inputs
+     `(("bzip2" ,lbzip2)
+       ("freetype" ,freetype)
+       ("gl" ,mesa)
+       ("glu" ,glu)
+       ("jpeg" ,libjpeg-turbo)
+       ("png" ,libpng)
+       ("tiff" ,libtiff)
+       ("x11" ,libx11)
+       ("xcursor" ,libxcursor)
+       ("xext" ,libxext)
+       ("xfixes" ,libxfixes)
+       ("xft" ,libxft)
+       ("xinput" ,libxi)
+       ("xrandr" ,libxrandr)
+       ("xrender" ,libxrender)
+       ("xshm" ,libxshmfence)
+       ("zlib" ,zlib)))
+    (synopsis "Widget Toolkit for building GUI")
+    (description"FOX (Free Objects for X) is a C++ based Toolkit for developing
+Graphical User Interfaces easily and effectively.   It offers a wide, and
+growing, collection of Controls, and provides state of the art facilities such
+as drag and drop, selection, as well as OpenGL widgets for 3D graphical
+manipulation.  FOX also implements icons, images, and user-convenience features
+such as status line help, and tooltips.  Tooltips may even be used for 3D
+objects!")
+    (home-page "http://www.fox-toolkit.org")
+    (license license:lgpl2.1+)))
+
 (define-public blender
   (package
     (name "blender")
diff --git a/gnu/packages/ham-radio.scm b/gnu/packages/ham-radio.scm
index 376191af54..56a9719414 100644
--- a/gnu/packages/ham-radio.scm
+++ b/gnu/packages/ham-radio.scm
@@ -1,6 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019, 2020 Evan Straw <evan.straw99@gmail.com>
+;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2020 Charlie Ritter <chewzerita@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,20 +25,43 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libusb)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages logging)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages multiprecision)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages sdr)
+  #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages swig)
+  #:use-module (gnu packages tex)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system python))
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system qt))
 
 (define-public rtl-sdr
   (package
@@ -176,3 +202,283 @@ with the rtl_fm tool, or any other @dfn{software-defined radio} (SDR) via
 csdr, for example.  It can also decode raw ASCII bitstream, the hex format
 used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
     (license license:expat)))
+
+(define-public gnuradio
+  (package
+    (name "gnuradio")
+    (version "3.8.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gnuradio.org/releases/gnuradio/"
+                           "gnuradio-" version ".tar.xz"))
+       (sha256
+        (base32 "0aw55gf5549b0fz2qdi7vplcmaf92bj34h40s34b2ycnqasv900r"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("git" ,git-minimal)
+       ("ghostscript" ,ghostscript)
+       ("orc" ,orc)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("python-cheetah" ,python-cheetah)
+       ("python-mako" ,python-mako)
+       ("python-pyzmq" ,python-pyzmq)
+       ("python-scipy" ,python-scipy)
+       ("python-sphinx" ,python-sphinx)
+       ("swig" ,swig)
+       ("texlive" ,(texlive-union (list texlive-amsfonts
+                                        texlive-latex-amsmath
+                                        ;; TODO: Add newunicodechar.
+                                        texlive-latex-graphics)))
+       ("xorg-server" ,xorg-server-for-tests)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("boost" ,boost)
+       ("cairo" ,cairo)
+       ("codec2" ,codec2)
+       ("cppzmq" ,cppzmq)
+       ("fftwf" ,fftwf)
+       ("gmp" ,gmp)
+       ("gsl" ,gsl)
+       ("gsm" ,gsm)
+       ("gtk+" ,gtk+)
+       ("jack" ,jack-1)
+       ("log4cpp" ,log4cpp)
+       ("pango" ,pango)
+       ("portaudio" ,portaudio)
+       ("python-click" ,python-click)
+       ("python-click-plugins" ,python-click-plugins)
+       ("python-lxml" ,python-lxml)
+       ("python-numpy" ,python-numpy)
+       ("python-pycairo" ,python-pycairo)
+       ("python-pygobject" ,python-pygobject)
+       ("python-pyqt" ,python-pyqt)
+       ("python-pyyaml" ,python-pyyaml)
+       ("qtbase" ,qtbase)
+       ("qwt" ,qwt)
+       ("zeromq" ,zeromq)))
+    (arguments
+     `(#:modules ((guix build cmake-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+                  ((guix build python-build-system) #:prefix python:)
+                  (guix build utils)
+                  (ice-9 match))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build glib-or-gtk-build-system)
+                           (guix build python-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((qwt (assoc-ref inputs "qwt")))
+               (substitute* "cmake/Modules/FindQwt.cmake"
+                 (("/usr/include")
+                  (string-append qwt "/include"))
+                 (("/usr/lib")
+                  (string-append qwt "/lib"))
+                 (("qwt6-\\$\\{QWT_QT_VERSION\\}")
+                  "qwt")))
+             (substitute* "cmake/Modules/GrPython.cmake"
+               (("dist-packages")
+                "site-packages"))
+             (substitute* '("gr-vocoder/swig/vocoder_swig.i"
+                            "gr-vocoder/include/gnuradio/vocoder/codec2.h"
+                            "gr-vocoder/include/gnuradio/vocoder/freedv_api.h")
+               (("<codec2/")
+                "<"))
+             #t))
+         (add-before 'check 'set-test-environment
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "HOME" "/tmp")
+             (system (string-append (assoc-ref inputs "xorg-server")
+                                    "/bin/Xvfb :1 &"))
+             (setenv "DISPLAY" ":1")
+             #t))
+         (add-after 'install 'wrap-python
+           (assoc-ref python:%standard-phases 'wrap))
+         (add-after 'wrap-python 'wrap-glib-or-gtk
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
+         (add-after 'wrap-glib-or-gtk 'wrap-with-GI_TYPELIB_PATH
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (paths (map (match-lambda
+                                 ((output . directory)
+                                  (let ((girepodir (string-append
+                                                    directory
+                                                    "/lib/girepository-1.0")))
+                                    (if (file-exists? girepodir)
+                                        girepodir
+                                        #f))))
+                               inputs)))
+               (wrap-program (string-append out "/bin/gnuradio-companion")
+                 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths))))
+             #t)))))
+    (synopsis "Toolkit for software-defined radios")
+    (description
+     "GNU Radio is a development toolkit that provides signal processing blocks
+to implement software radios.  It can be used with external RF hardware to
+create software-defined radios, or without hardware in a simulation-like
+environment.")
+    (home-page "https://www.gnuradio.org")
+    (license license:gpl3+)))
+
+(define-public gnuradio-osmosdr
+  (package
+    (name "gnuradio-osmosdr")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.osmocom.org/gr-osmosdr")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1rdx7fa0xiq0qmgrrbby7z1bblmqhl9qh9jqpsznzxkx91f17ypd"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("git" ,git-minimal)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("python-mako" ,python-mako)
+       ("python-six" ,python-six)
+       ("swig" ,swig)))
+    (inputs
+     `(("boost" ,boost)
+       ("fftwf" ,fftwf)
+       ("gmp" ,gmp)
+       ("gnuradio" ,gnuradio)
+       ("log4cpp" ,log4cpp)
+       ;; TODO: Add more drivers.
+       ("rtl-sdr" ,rtl-sdr)))
+    (synopsis "GNU Radio block for interfacing with various radio hardware")
+    (description "This is a block for GNU Radio allowing to use a common API
+to access different radio hardware.")
+    (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
+    (license license:gpl3+)))
+
+(define-public libosmo-dsp
+  (package
+    (name "libosmo-dsp")
+    (version "0.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.osmocom.org/libosmo-dsp")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "00plihnpym1gkfpflah8il9463qxzm9kx2f07jyvbkszpj8viq5g"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("bash-minimal" ,bash-minimal)
+       ("doxygen" ,doxygen)
+       ("git" ,git-minimal)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("texlive" ,(texlive-union (list texlive-amsfonts
+                                        texlive-latex-amsmath
+                                        ;; TODO: Add newunicodechar.
+                                        texlive-latex-graphics)))))
+    (inputs
+     `(("fftwf" ,fftwf)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "git-version-gen"
+               (("/bin/sh")
+                (string-append (assoc-ref inputs "bash")
+                               "/bin/bash")))
+             #t)))))
+    (synopsis "DSP primitives for SDR")
+    (description
+     "This a C-language library for common DSP (Digital Signal Processing)
+primitives for SDR (Software Defined Radio).")
+    (home-page "https://osmocom.org/projects/libosmo-dsp")
+    (license license:gpl2+)))
+
+(define-public gnuradio-iqbalance
+  (package
+    (name "gnuradio-iqbalance")
+    (version "0.38.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.osmocom.org/gr-iqbal")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ksagwz05p3b0702q7ljq7013xmp0ijp30my9z6s3p7ja8dj42s3"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("python-numpy" ,python-numpy)
+       ("python-six" ,python-six)
+       ("swig" ,swig)))
+    (inputs
+     `(("boost" ,boost)
+       ("fftwf" ,fftwf)
+       ("gmp" ,gmp)
+       ("gnuradio" ,gnuradio)
+       ("libosmo-dsp" ,libosmo-dsp)
+       ("log4cpp" ,log4cpp)))
+    (synopsis "GNU Radio block to correct IQ imbalance")
+    (description
+     "This is a GNU Radio block to correct IQ imbalance in quadrature
+receivers.  It's composed of two main block:
+@itemize
+@item Fix: Given a phase and amplitude error, it will correct a complex signal.
+@item Optimize: Attempts to auto-detect the phase and amplitude error to feed
+to the fix block above.
+@end itemize")
+    (home-page "https://git.osmocom.org/gr-iqbal/")
+    (license license:gpl3+)))
+
+(define-public gqrx
+  (package
+    (name "gqrx")
+    (version "2.12.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/csete/gqrx.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "00alf3q6y313xpx6p7v43vqsphd2x4am4q362lw21bcy9wc4jidw"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("boost" ,boost)
+       ("fftwf" ,fftwf)
+       ("gmp" ,gmp)
+       ("gnuradio" ,gnuradio)
+       ("gnuradio-iqbalance" ,gnuradio-iqbalance)
+       ("gnuradio-osmosdr" ,gnuradio-osmosdr)
+       ("jack" ,jack-1)
+       ("log4cpp" ,log4cpp)
+       ("portaudio" ,portaudio)
+       ("pulseaudio" ,pulseaudio)
+       ("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)))
+    (arguments
+     `(#:tests? #f)) ; No tests
+    (synopsis "Software defined radio receiver")
+    (description "Gqrx is a software defined radio (SDR) receiver implemented
+using GNU Radio and the Qt GUI toolkit.")
+    (home-page "https://gqrx.dk/")
+    (license license:gpl3+)))
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index c6821daf00..d12d113945 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -746,7 +746,7 @@ too slow and you'll get wound up in the scroll and crushed.")
        ("ghc-diff" ,ghc-diff)
        ("ghc-quickcheck" ,ghc-quickcheck)
        ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
-    (home-page "https://github.com/koalaman/shellcheck")
+    (home-page "https://www.shellcheck.net/")
     (synopsis "Static analysis for shell scripts")
     (description "@code{shellcheck} provides static analysis for
 @command{bash} and @command{sh} shell scripts.
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 5dc9f705cc..d22a08e7fb 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9745,7 +9745,7 @@ Haskell library @code{regex-base}.")
     (build-system haskell-build-system)
     (inputs
      `(("ghc-regex-base" ,ghc-regex-base)))
-    (home-page "https://github.com/ChrisKuklewicz/regex-tdfa")
+    (home-page "https://github.com/haskell-hvr/regex-tdfa")
     (synopsis "POSIX extended regular expressions in Haskell.")
     (description
      "Regex-tdfa is a pure Haskell regular expression library implementing POSIX
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 5b037012d9..b8b32de867 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Peng Mei Yu <pengmeiyu@riseup.net>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
+;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system meson)
@@ -419,44 +421,95 @@ imaging.  It supports several HDR and LDR image formats, and it can:
     (license license:gpl2+)))
 
 ;; CBR and RAR are currently unsupported, due to non-free dependencies.
-;; For optional PDF support, you can install the mupdf package.
 (define-public mcomix
-  (package
-    (name "mcomix")
-    (version "1.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://sourceforge/mcomix/MComix-" version
-                           "/mcomix-" version ".tar.bz2"))
-       (sha256
-        (base32
-         "0fzsf9pklhfs1rzwzj64c0v30b74nk94p93h371rpg45qnfiahvy"))))
-    (build-system python-build-system)
-    (inputs
-     `(("p7zip" ,p7zip)
-       ("python2-pillow" ,python2-pillow)
-       ("python2-pygtk" ,python2-pygtk)))
-    (arguments
-     ;; Python 2.5 or newer (Python 3 and up is not supported)
-     `(#:python ,python-2
-       #:tests? #f ; there are no tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'configure
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((p7zip (assoc-ref inputs "p7zip")))
-               ;; insert absolute path to 7z executable
-               (substitute* "mcomix/archive/sevenzip_external.py"
-                 (("_7z_executable = -1")
-                  (string-append "_7z_executable = u'" p7zip "/bin/7z'"))))
-             #t)))))
-    (home-page "https://sourceforge.net/p/mcomix/wiki/Home/")
-    (synopsis "Image viewer for comics")
-    (description "MComix is a customizable image viewer that specializes as
+  ;; Official mcomix hasn't been updated since 2016, it's broken with
+  ;; python-pillow 6+ and only supports Python 2.  We use fork instead.
+  (let ((commit "fea55a7a9369569eefed72209eed830409c4af98"))
+    (package
+      (name "mcomix")
+      (version (git-version "1.2.1" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/multiSnow/mcomix3")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "05zl0dkjwbdcm2zlk4nz9w33amlqj8pbf32a8ymshc2356fqhhi5"))))
+      (build-system python-build-system)
+      (inputs
+       `(("p7zip" ,p7zip)
+         ("python-pillow" ,python-pillow)
+         ("python-pygobject" ,python-pygobject)
+         ("python-pycairo" ,python-pycairo)))
+      (arguments
+       `(#:tests? #f                    ; FIXME: How do we run tests?
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'configure
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((p7zip (assoc-ref inputs "p7zip")))
+                 ;; insert absolute path to 7z executable
+                 (substitute* "mcomix/mcomix/archive/sevenzip_external.py"
+                   (("_7z_executable = -1")
+                    (string-append "_7z_executable = u'" p7zip "/bin/7z'"))))
+               #t))
+           (replace 'build
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (pyver ,(version-major+minor (package-version python)))
+                      (lib (string-append out "/lib/python" pyver)))
+                 (invoke (which "python") "installer.py" "--srcdir=mcomix"
+                         (string-append "--target=" lib))
+                 (rename-file (string-append lib "/mcomix")
+                              (string-append lib "/site-packages"))
+                 #t)))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (share (string-append out "/share"))
+                      (bin (string-append out "/bin"))
+                      (pyver ,(version-major+minor (package-version python)))
+                      (lib (string-append out "/lib/python" pyver "/site-packages")))
+                 (mkdir-p bin)
+                 (rename-file (string-append lib "/mcomixstarter.py")
+                              (string-append bin "/mcomix"))
+                 (rename-file (string-append lib "/comicthumb.py")
+                              (string-append bin "/comicthumb"))
+                 (install-file "mime/mcomix.desktop"
+                               (string-append share "/applications"))
+                 (install-file "mime/mcomix.appdata.xml"
+                               (string-append share "/metainfo"))
+                 (install-file "mime/mcomix.xml"
+                               (string-append share "/mime/packages"))
+                 (install-file "mime/comicthumb.thumbnailer"
+                               (string-append share "/thumbnailers"))
+                 (install-file "man/mcomix.1" (string-append share "/man/man1"))
+                 (install-file "man/comicthumb.1" (string-append share "/man/man1"))
+                 (for-each
+                  (lambda (size)
+                    (install-file
+                     (format #f "mcomix/mcomix/images/~sx~s/mcomix.png" size size)
+                     (format #f "~a/icons/hicolor/~sx~s/apps/" share size size))
+                    (for-each
+                     (lambda (ext)
+                       (install-file
+                        (format #f "mime/icons/~sx~s/application-x-~a.png" size size ext)
+                        (format #f "~a/icons/hicolor/~sx~s/mimetypes/"
+                                share size size)))
+                     '("cb7" "cbr" "cbt" "cbz")))
+                  '(16 22 24 32 48))
+                 #t))))))
+      (home-page "https://sourceforge.net/p/mcomix/wiki/Home/")
+      (synopsis "Image viewer for comics")
+      (description "MComix is a customizable image viewer that specializes as
 a comic and manga reader.  It supports a variety of container formats
-including CBZ, CB7, CBT, LHA.")
-    (license license:gpl2+)))
+including CBZ, CB7, CBT, LHA.
+
+For PDF support, install the @emph{mupdf} package.")
+      (license license:gpl2+))))
 
 (define-public qview
   (package
diff --git a/gnu/packages/kde-pim.scm b/gnu/packages/kde-pim.scm
index 1b99ae1de4..fea6dd3068 100644
--- a/gnu/packages/kde-pim.scm
+++ b/gnu/packages/kde-pim.scm
@@ -53,7 +53,7 @@
        (patches (search-patches
                  "akonadi-paths.patch"
                  "akonadi-timestamps.patch"
-                 "akonadi-Revert-Make-installation-properly-relo.patch"))))
+                 "akonadi-not-relocatable.patch"))))
     (build-system qt-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index fa47789d5c..886b67d580 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -369,18 +369,18 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
     (sha256 hash)))
 
 
-(define-public linux-libre-5.6-version "5.6.2")
+(define-public linux-libre-5.6-version "5.6.3")
 (define-public linux-libre-5.6-pristine-source
   (let ((version linux-libre-5.6-version)
-        (hash (base32 "1fdmcx5fk9wq9yx6vvnw76nvdysbvm83cik1dj1d67lw6bc92k9d")))
+        (hash (base32 "1ajh1iw3bplm6ckcycg45wfmmqkvfiqmh6i3m1895dfapfd6h4qx")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.6)))
 
-(define-public linux-libre-5.4-version "5.4.30")
+(define-public linux-libre-5.4-version "5.4.31")
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "1vwx6j87pkfyq68chng1hy0c85hpc2byabiv1pcikrmw07vpip8i")))
+        (hash (base32 "1svf4wf4j1vqhdpgx63ry4c99fc54d9nfi4d1xm7z209z3w86451")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
@@ -4391,7 +4391,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "5.4.1")
+    (version "5.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -4399,7 +4399,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "0scxg9p6z0wss92gmv5a8yxdmr8x449kb5v3bfnvs26n92r7zq7k"))))
+                "0srg276yccfmqz0skmmga3vbqx4wiqsk1l6h86n6ryhxa9viqcm1"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of the binaries in "out"
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 783cceec48..41f323ee78 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -26,6 +26,7 @@
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
 ;;; Copyright © 2019, 2020 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2671,7 +2672,7 @@ tune-in sender list from @url{http://opml.radiotime.com}.")
 (define-public pianobar
   (package
     (name "pianobar")
-    (version "2019.02.14")
+    (version "2020.04.05")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2680,7 +2681,7 @@ tune-in sender list from @url{http://opml.radiotime.com}.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1bfabkj3m9kmhxl64w4azmi0xf7w52fmqfbw2ag28hbb5yy01k1m"))))
+                "1gq8kpks6nychqz4gf0rpy7mrhz5vjw48a60x56j6y9flmazmypw"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index bdc73a91f7..099a953989 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -30,13 +30,13 @@
 (define-public nano
   (package
     (name "nano")
-    (version "4.9")
+    (version "4.9.2")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/nano/nano-" version ".tar.xz"))
       (sha256
-       (base32 "19ik88b3g0d9xwav4hkai2h1acmjy5fdnh21gdc1mjq5s4lrff8f"))))
+       (base32 "1xifbn1xaklrrf7knxvqif0hy0wgnas7w0wfggay5kifjkm5x8nq"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index dfcdb58de4..e37bf30a7d 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -28,7 +28,9 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages nettle)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages tls)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
@@ -38,6 +40,70 @@
   #:use-module (guix utils)
   #:use-module (srfi srfi-1))
 
+(define-public chrony
+  (package
+    (name "chrony")
+    (version "3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://download.tuxfamily.org/chrony/"
+                           "chrony-" version ".tar.gz"))
+       (sha256
+        (base32 "1d9r2dhslll4kzdmxrj0qfgwq1b30d4l3s5cwr8yr93029dpj0jf"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:modules ((srfi srfi-26)
+                  (guix build utils)
+                  (guix build gnu-build-system))
+       #:configure-flags
+       (list "--enable-scfilter"
+             "--with-sendmail=sendmail"
+             "--with-user=chrony")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'stay-inside-out
+           ;; Simply setting CHRONYVARDIR to something nonsensical at install
+           ;; time would result in nonsense file names in man pages.
+           (lambda _
+             (substitute* "Makefile.in"
+               (("mkdir -p \\$\\(DESTDIR\\)\\$\\(CHRONYVARDIR\\)") ":"))
+             #t))
+         (add-after 'install 'install-more-documentation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/" ,name "-" ,version)))
+               (for-each (cut install-file <> doc)
+                         (list "README" "FAQ"))
+               (copy-recursively "examples" (string-append doc "/examples"))
+               #t))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libcap" ,libcap)
+       ("libseccomp" ,libseccomp)
+       ("nettle" ,nettle)))
+    (home-page "https://chrony.tuxfamily.org/")
+    (synopsis "System clock synchronisation service that speaks NTP")
+    (description
+     "Chrony keeps your system time accurate.  It synchronises your computer's
+clock with @acronym{NTP, Network Time Protocol} servers, reference clocks such
+as GPS receivers, or even manual input of the correct time from a wristwatch.
+
+Chrony will determine the rate at which the computer gains or loses time, and
+compensate for it.  It can also operate as an NTPv4 (RFC 5905) server and peer
+to tell time to other computers on the network.
+
+It's designed to perform well even under adverse conditions: congested
+networks, unreliable clocks drifting with changes in temperature, and devices
+or virtual machines that are frequently turned off and connect to the Internet
+for only a few minutes at a time.
+
+Typical accuracy when synchronised over the Internet is several milliseconds.
+On a local network this can reach tens of microseconds.  With hardware
+time-stamping or reference clock, sub-microsecond accuracy is possible.")
+    (license l:gpl2)))
+
 (define-public ntp
   (package
    (name "ntp")
@@ -103,7 +169,7 @@ computers over a network.")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "mirror://openbsd/OpenNTPD/" name "-" version ".tar.gz"))
+                    "mirror://openbsd/OpenNTPD/openntpd-" version ".tar.gz"))
               (sha256
                (base32
                 "0fn12i4kzsi0zkr4qp3dp9bycmirnfapajqvdfx02zhr4hanj0kv"))))
diff --git a/gnu/packages/patches/akonadi-Revert-Make-installation-properly-relo.patch b/gnu/packages/patches/akonadi-not-relocatable.patch
index c3964c5c05..c3964c5c05 100644
--- a/gnu/packages/patches/akonadi-Revert-Make-installation-properly-relo.patch
+++ b/gnu/packages/patches/akonadi-not-relocatable.patch
diff --git a/gnu/packages/patches/binutils-mingw-w64-reproducible-import-libraries.patch b/gnu/packages/patches/binutils-mingw-w64-deterministic.patch
index 3e48b87935..3e48b87935 100644
--- a/gnu/packages/patches/binutils-mingw-w64-reproducible-import-libraries.patch
+++ b/gnu/packages/patches/binutils-mingw-w64-deterministic.patch
diff --git a/gnu/packages/patches/binutils-mingw-w64-specify-timestamp.patch b/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
index b785043b62..b785043b62 100644
--- a/gnu/packages/patches/binutils-mingw-w64-specify-timestamp.patch
+++ b/gnu/packages/patches/binutils-mingw-w64-timestamp.patch
diff --git a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
index 656c76fa40..deb5688daf 100644
--- a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
+++ b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
@@ -1,14 +1,5 @@
-From 360d44d67e7be46108bec982ff2e79b89f04a9a3 Mon Sep 17 00:00:00 2001
-From: Mathieu Othacehe <m.othacehe@gmail.com>
-Date: Thu, 15 Nov 2018 14:34:40 +0900
-Subject: [PATCH] add runtime keymap switch support.
-
----
- src/pty.c                  | 23 ++++++++++-
- src/uterm_input.c          |  2 +
- src/uterm_input_internal.h |  5 +++
- src/uterm_input_uxkb.c     | 83 ++++++++++++++++++++++++++++++++++++++
- 4 files changed, 111 insertions(+), 2 deletions(-)
+By Mathieu Othacehe <m.othacehe@gmail.com>.
+Modified by Florian Pelz <pelzflorian@pelzflorian.de>.
 
 diff --git a/src/pty.c b/src/pty.c
 index 1443f4a..f64cb5b 100644
@@ -124,7 +115,7 @@ index 04e6cc9..ec44459 100644
  		     uint16_t key_state,
  		     uint16_t code);
 diff --git a/src/uterm_input_uxkb.c b/src/uterm_input_uxkb.c
-index 925c755..4760972 100644
+index 925c755..5d5c22e 100644
 --- a/src/uterm_input_uxkb.c
 +++ b/src/uterm_input_uxkb.c
 @@ -31,6 +31,9 @@
@@ -137,7 +128,7 @@ index 925c755..4760972 100644
  #include <xkbcommon/xkbcommon.h>
  #include "shl_hook.h"
  #include "shl_llog.h"
-@@ -178,6 +181,86 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data)
+@@ -178,6 +181,87 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data)
  	shl_hook_call(dev->input->hook, dev->input, &dev->repeat_event);
  }
  
@@ -145,11 +136,11 @@ index 925c755..4760972 100644
 +{
 +	struct uterm_input_dev *dev = data;
 +	char in;
-+	char keymap[3][255];
++	char keymap[4][255];
 +	int pos = 0;
 +	int curr_keymap = 0;
 +	int ret;
-+	char *model, *layout, *variant;
++	char *model, *layout, *variant, *options;
 +
 +	if (!(mask & EV_READABLE))
 +		return;
@@ -159,6 +150,7 @@ index 925c755..4760972 100644
 +	model = keymap[0];
 +	layout = keymap[1];
 +	variant = keymap[2];
++	options = keymap[3];
 +
 +	do {
 +	  ret = read(dev->rupdate_fd, &in, sizeof(in));
@@ -175,7 +167,7 @@ index 925c755..4760972 100644
 +
 +	llog_info(dev->input, "HANDLER CALLED %s|%s|%s\n",
 +		  model, layout, variant);
-+	uxkb_desc_init(dev->input, model, layout, variant, NULL, NULL);
++	uxkb_desc_init(dev->input, model, layout, variant, options, NULL);
 +
 +	dev->state = xkb_state_new(dev->input->keymap);
 +	if (!dev->state) {
@@ -224,6 +216,3 @@ index 925c755..4760972 100644
  int uxkb_dev_init(struct uterm_input_dev *dev)
  {
  	int ret;
--- 
-2.17.1
-
diff --git a/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapTo.patch b/gnu/packages/patches/sdl-pango-header-guard.patch
index 3d4b10cc10..3d4b10cc10 100644
--- a/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapTo.patch
+++ b/gnu/packages/patches/sdl-pango-header-guard.patch
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 4b3db6d5e0..530a2478f3 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -195,9 +195,6 @@ routines such as routines for numerical integration and optimization.")
      "Scikit-image is a collection of algorithms for image processing.")
     (license license:bsd-3)))
 
-(define-public python2-scikit-image
-  (package-with-python2 python-scikit-image))
-
 (define-public python-pandas
   (package
     (name "python-pandas")
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index b26399c646..e9284d9342 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2015, 2016, 2020 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
@@ -982,8 +982,17 @@ to rebuild the original object tree.
 
 Because only safe literals are encoded, it is safe to send serpent data to
 other machines, such as over the network.")
+    (properties `((python2-variant . ,(delay python2-serpent))))
     (license license:expat)))
 
+(define-public python2-serpent
+  (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       `(("python-enum34" ,python2-enum34)
+         ,@(package-propagated-inputs base))))))
+
 (define-public python-setuptools
   (package
     (name "python-setuptools")
@@ -6805,14 +6814,14 @@ of the structure, dynamics, and functions of complex networks.")
 (define-public python-datrie
   (package
     (name "python-datrie")
-    (version "0.8")
+    (version "0.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "datrie" version))
        (sha256
         (base32
-         "0338r8xgmpy78556jhms0h6qkvyjr10p8bpgdvcpqzm9lrmxmmdx"))))
+         "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-cython" ,python-cython)
@@ -17222,26 +17231,35 @@ pure-Python.")
 (define-public python-cloudpickle
   (package
     (name "python-cloudpickle")
-    (version "0.6.1")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cloudpickle" version))
        (sha256
         (base32
-         "1wdw89mlm7fqa3fm3ymskx05jrys66n8m1z1a8s0mss0799ahsgi"))))
+         "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
     (build-system python-build-system)
-    ;; FIXME: there are 5 errors in 122 tests:
-    ;; ERROR: test_function_pickle_compat_0_4_0 (tests.cloudpickle_test.CloudPickleTest)
-    ;; ERROR: test_function_pickle_compat_0_4_1 (tests.cloudpickle_test.CloudPickleTest)
-    ;; ERROR: test_function_pickle_compat_0_4_0 (tests.cloudpickle_test.Protocol2CloudPickleTest)
-    ;; ERROR: test_function_pickle_compat_0_4_1 (tests.cloudpickle_test.Protocol2CloudPickleTest)
-    ;; ERROR: test_temp_file (tests.cloudpickle_file_test.CloudPickleFileTests)
-    ;; TypeError: cannot serialize '_io.BufferedRandom' object
-    (arguments '(#:tests? #f))
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-before 'check 'do-not-override-PYTHONPATH
+                    (lambda _
+                      ;; Append to PYTHONPATH instead of overriding it so
+                      ;; that dependencies from Guix can be found.
+                      (substitute* "tests/testutils.py"
+                        (("env\\['PYTHONPATH'\\] = pythonpath")
+                         "env['PYTHONPATH'] += os.pathsep + pythonpath"))
+                      #t))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (if tests?
+                          (invoke "pytest" "-s" "-vv")
+                          (format #t "test suite not run~%"))
+                      #t)))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
+     `(;; For tests.
+       ("python-psutil" ,python-psutil)
+       ("python-pytest" ,python-pytest)
        ("python-tornado" ,python-tornado)))
     (home-page "https://github.com/cloudpipe/cloudpickle")
     (synopsis "Extended pickling support for Python objects")
@@ -17251,10 +17269,19 @@ supported by the default pickle module from the Python standard library.  It
 is especially useful for cluster computing where Python expressions are
 shipped over the network to execute on remote hosts, possibly close to the
 data.")
+    (properties `((python2-variant . ,(delay python2-cloudpickle))))
     (license license:bsd-3)))
 
 (define-public python2-cloudpickle
-  (package-with-python2 python-cloudpickle))
+  (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("python-mock" ,python2-mock)
+         ,@(package-native-inputs base)))
+      (propagated-inputs
+       `(("python-futures" ,python2-futures)
+         ,@(package-propagated-inputs base))))))
 
 (define-public python-locket
   (package
@@ -17365,13 +17392,13 @@ decisions with any given backend.")
 (define-public python-dask
   (package
     (name "python-dask")
-    (version "2.9.0")
+    (version "2.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "dask" version))
        (sha256
-        (base32 "1w1hqr8vyx6ygwflj2737dcy0mmgvrc0s602gnny8pzlcbs9m76b"))))
+        (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -18836,6 +18863,29 @@ dedicated platform.  The tool proposes a unified interface for any format and
 an upload option to send your work back to the platform.")
     (license license:gpl3+)))
 
+(define-public python-titlecase
+  (package
+    (name "python-titlecase")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "titlecase" version))
+       (sha256
+        (base32
+         "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (home-page "https://github.com/ppannuto/python-titlecase")
+    (synopsis "Capitalize strings similar to book titles")
+    (description
+     "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
+It capitalizes (predominantly English) strings in a way that is similar to
+book titles, using the New York Times Manual of Style to leave certain words
+lowercase.")
+    (license license:expat)))
+
 (define-public python-pypng
   (package
     (name "python-pypng")
@@ -19559,3 +19609,24 @@ an identity provider.  The distribution contains examples of both.
 This package was originally written to work in a WSGI environment, but
 there are extensions that allow you to use it with other frameworks.")
     (license license:asl2.0)))
+
+(define-public python-click-plugins
+  (package
+    (name "python-click-plugins")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "click-plugins" version))
+       (sha256
+        (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (propagated-inputs
+     `(("python-click" ,python-click)))
+    (synopsis "Extension for Click to register external CLI commands")
+    (description "This package provides n extension module for Click to
+register external CLI commands via setuptools entry-points.")
+    (home-page "https://github.com/click-contrib/click-plugins")
+    (license license:bsd-3)))
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 6f634f78cc..6d91727809 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -339,14 +339,12 @@ SDL.")
              "SDL_Pango-" version  ".tar.gz"))
        (sha256
         (base32 "197baw1dsg0p4pljs5k0fshbyki00r4l49m1drlpqw6ggawx6xbz"))
-       (patches
-        (search-patches
-         "sdl-pango-api_additions.patch"
-         "sdl-pango-blit_overflow.patch"
-         "sdl-pango-fillrect_crash.patch"
-         "sdl-pango-fix-explicit-SDLPango_CopyFTBitmapTo.patch"
-         "sdl-pango-matrix_declarations.patch"
-         "sdl-pango-sans-serif.patch"))))
+       (patches (search-patches "sdl-pango-api_additions.patch"
+                                "sdl-pango-blit_overflow.patch"
+                                "sdl-pango-fillrect_crash.patch"
+                                "sdl-pango-header-guard.patch"
+                                "sdl-pango-matrix_declarations.patch"
+                                "sdl-pango-sans-serif.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--disable-static")
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index bfcf3d39ef..506ea06bc8 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -72,7 +72,7 @@
 (define-public libssh
   (package
     (name "libssh")
-    (version "0.9.3")
+    (version "0.9.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -80,7 +80,7 @@
                      (commit (string-append "libssh-" version))))
               (sha256
                (base32
-                "175i3xybg69d5lb078334v6dd3njm743kww8f67ix9w33969rmzf"))
+                "0qr4vi3k1wv69c95d9j26fiv78pzyksaq8ccd76b8nxar5z1fbj6"))
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
@@ -415,10 +415,10 @@ authentication scheme.")
     (home-page "https://mosh.org/")
     (synopsis "Remote shell tolerant to intermittent connectivity")
     (description
-     "Remote terminal application that allows roaming, supports intermittent
-connectivity, and provides intelligent local echo and line editing of user
-keystrokes.  Mosh is a replacement for SSH.  It's more robust and responsive,
-especially over Wi-Fi, cellular, and long-distance links.")
+     "Mosh is a remote terminal application that allows client roaming, supports
+intermittent connectivity, and provides intelligent local echo and line editing
+of user keystrokes.  It's a replacement for SSH that's more robust and
+responsive, especially over Wi-Fi, cellular, and long-distance links.")
     (license license:gpl3+)))
 
 (define-public et
@@ -448,7 +448,7 @@ especially over Wi-Fi, cellular, and long-distance links.")
 without interrupting the session.  Unlike SSH sessions, ET sessions will
 survive even network outages and IP changes.  ET uses a custom protocol over
 TCP, not the SSH protocol.")
-    (home-page "https://mistertea.github.io/EternalTCP/")
+    (home-page "https://eternalterminal.dev/")
     (license license:asl2.0)))
 
 (define-public dropbear
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 16fd93415b..287211777f 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -214,14 +214,14 @@ old-fashioned output methods with powerful ascii-art renderer.")
 (define-public celluloid
   (package
     (name "celluloid")
-    (version "0.18")
+    (version "0.19")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/celluloid-player/celluloid/releases"
                            "/download/v" version "/celluloid-" version ".tar.xz"))
        (sha256
-        (base32 "0gmscx9zb8ppfjlnmgbcmhknhawa05sdhxi7dv5wjapjq0glq481"))))
+        (base32 "1s3qkism96gi44incvsb6rqg255qcvjvw61ya7nw30md0sapj4sl"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("intltool" ,intltool)
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 87c2ae7718..f13a3fd253 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -854,7 +854,7 @@ on your desktop.")
        ("shared-mime-info"     ,shared-mime-info)
        ("thunar"               ,thunar)
        ("thunar-volman"        ,thunar-volman)
-       ("tumlber"              ,tumbler)
+       ("tumbler"              ,tumbler)
        ("xfce4-appfinder"      ,xfce4-appfinder)
        ("xfce4-panel"          ,xfce4-panel)
        ("xfce4-power-manager"  ,xfce4-power-manager)
@@ -868,7 +868,7 @@ on your desktop.")
        ("xfce4-battery-plugin"    ,xfce4-battery-plugin)
        ("xfce4-clipman-plugin"    ,xfce4-clipman-plugin)
        ("xfce4-pulseaudio-plugin" ,xfce4-pulseaudio-plugin)
-       ("xfce4-xkb-plugin" ,xfce4-xkb-plugin)))
+       ("xfce4-xkb-plugin"        ,xfce4-xkb-plugin)))
     (native-search-paths
      ;; For finding panel plugins.
      (package-native-search-paths xfce4-panel))
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 7300ff5f4a..8663243256 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017, 2019 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2019 David Wilson <david@daviwil.com>
+;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -892,7 +893,7 @@ rules.")
 (define-record-type* <gnome-desktop-configuration> gnome-desktop-configuration
   make-gnome-desktop-configuration
   gnome-desktop-configuration?
-  (gnome-package gnome-package (default gnome)))
+  (gnome gnome-package (default gnome)))
 
 (define (gnome-polkit-settings config)
   "Return the list of GNOME dependencies that provide polkit actions and
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 9ae84ddbc4..dcbe6ee16f 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
 ;;; Copyright © 2017, 2018, 2019 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2019, 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -652,8 +652,8 @@ of index files."
            "user nginx nginx;\n"
            "pid " run-directory "/pid;\n"
            "error_log " log-directory "/error.log info;\n"
-           (map emit-global-directive global-directives)
            (map emit-load-module modules)
+           (map emit-global-directive global-directives)
            "http {\n"
            "    client_body_temp_path " run-directory "/client_body_temp;\n"
            "    proxy_temp_path " run-directory "/proxy_temp;\n"
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index c6ec25a895..04d84b5220 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -158,7 +158,9 @@
                                              (references-graphs #f)
                                              (memory-size 256)
                                              (disk-image-format "qcow2")
-                                             (disk-image-size 'guess))
+                                             (disk-image-size 'guess)
+
+                                             (substitutable? #t))
   "Evaluate EXP in a QEMU virtual machine running LINUX with INITRD (a
 derivation).  The virtual machine runs with MEMORY-SIZE MiB of memory.  In the
 virtual machine, EXP has access to FILE-SYSTEMS, which, by default, includes a
@@ -175,7 +177,10 @@ based on the size of the closure of REFERENCES-GRAPHS.
 
 When REFERENCES-GRAPHS is true, it must be a list of file name/store path
 pairs, as for `derivation'.  The files containing the reference graphs are
-made available under the /xchg CIFS share."
+made available under the /xchg CIFS share.
+
+SUBSTITUTABLE? determines whether the returned derivation should be marked as
+substitutable."
   (define user-builder
     (program-file "builder-in-linux-vm" exp))
 
@@ -257,7 +262,8 @@ made available under the /xchg CIFS share."
                       #:target target
                       #:env-vars env-vars
                       #:guile-for-build guile-for-build
-                      #:references-graphs references-graphs)))
+                      #:references-graphs references-graphs
+                      #:substitutable? substitutable?)))
 
 (define (has-guix-service-type? os)
   "Return true if OS contains a service of the type GUIX-SERVICE-TYPE."
@@ -277,7 +283,8 @@ made available under the /xchg CIFS share."
                         bootloader
                         (register-closures? (has-guix-service-type? os))
                         (inputs '())
-                        (grub-mkrescue-environment '()))
+                        (grub-mkrescue-environment '())
+                        (substitutable? #t))
   "Return a bootable, stand-alone iso9660 image.
 
 INPUTS is a list of inputs (as for packages)."
@@ -348,6 +355,7 @@ INPUTS is a list of inputs (as for packages)."
    #:make-disk-image? #f
    #:single-file-output? #t
    #:references-graphs inputs
+   #:substitutable? substitutable?
 
    ;; Xorriso seems to be quite memory-hungry, so increase the VM's RAM size.
    #:memory-size 512))
@@ -367,7 +375,8 @@ INPUTS is a list of inputs (as for packages)."
                      bootloader
                      (register-closures? (has-guix-service-type? os))
                      (inputs '())
-                     copy-inputs?)
+                     copy-inputs?
+                     (substitutable? #t))
   "Return a bootable, stand-alone QEMU image of type DISK-IMAGE-FORMAT (e.g.,
 'qcow2' or 'raw'), with a root partition of type FILE-SYSTEM-TYPE.
 Optionally, FILE-SYSTEM-LABEL can be specified as the volume name for the root
@@ -495,7 +504,8 @@ system."
    #:make-disk-image? #t
    #:disk-image-size disk-image-size
    #:disk-image-format disk-image-format
-   #:references-graphs inputs))
+   #:references-graphs inputs
+   #:substitutable? substitutable?))
 
 (define* (system-docker-image os
                               #:key
@@ -650,11 +660,15 @@ TYPE (one of 'iso9660 or 'dce).  Return a UUID object."
                             (name "disk-image")
                             (file-system-type "ext4")
                             (disk-image-size (* 900 (expt 2 20)))
-                            (volatile? #t))
+                            (volatile? #t)
+                            (substitutable? #t))
   "Return the derivation of a disk image of DISK-IMAGE-SIZE bytes of the
 system described by OS.  Said image can be copied on a USB stick as is.  When
 VOLATILE? is true, the root file system is made volatile; this is useful
-to USB sticks meant to be read-only."
+to USB sticks meant to be read-only.
+
+SUBSTITUTABLE? determines whether the returned derivation should be marked as
+substitutable."
   (define normalize-label
     ;; ISO labels are all-caps (case-insensitive), but since
     ;; 'find-partition-by-label' is case-sensitive, make it all-caps here.
@@ -723,7 +737,8 @@ to USB sticks meant to be read-only."
                        #:inputs `(("system" ,os)
                                   ("bootcfg" ,bootcfg))
                        #:grub-mkrescue-environment
-                       '(("MKRESCUE_SED_MODE" . "mbr_hfs")))
+                       '(("MKRESCUE_SED_MODE" . "mbr_hfs"))
+                       #:substitutable? substitutable?)
         (qemu-image #:name name
                     #:os os
                     #:bootcfg-drv bootcfg
@@ -736,7 +751,8 @@ to USB sticks meant to be read-only."
                     #:file-system-uuid uuid
                     #:copy-inputs? #t
                     #:inputs `(("system" ,os)
-                               ("bootcfg" ,bootcfg))))))
+                               ("bootcfg" ,bootcfg))
+                    #:substitutable? substitutable?))))
 
 (define* (system-qemu-image os
                             #:key
@@ -925,6 +941,7 @@ with '-virtfs' options for the host file systems listed in SHARED-FS."
             '())
 
      "-no-reboot"
+     "-nic" "user,model=virtio-net-pci"
      "-object" "rng-random,filename=/dev/urandom,id=guixsd-vm-rng"
      "-device" "virtio-rng-pci,rng=guixsd-vm-rng"
 
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index b0b40f2764..713e03194b 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -232,7 +232,9 @@ packages defined in installation-os."
                                  os (list target))
                                 #:disk-image-size install-size
                                 #:file-system-type
-                                installation-disk-image-file-system-type)))
+                                installation-disk-image-file-system-type
+                                ;; Don't provide substitutes; too big.
+                                #:substitutable? #f)))
     (define install
       (with-imported-modules '((guix build utils)
                                (gnu build marionette))
@@ -296,7 +298,8 @@ packages defined in installation-os."
               (exit #$(and gui-test
                            (gui-test #~marionette)))))))
 
-    (gexp->derivation "installation" install)))
+    (gexp->derivation "installation" install
+                      #:substitutable? #f)))      ;too big
 
 (define* (qemu-command/writable-image image #:key (memory-size 256))
   "Return as a monadic value the command to run QEMU on a writable copy of
@@ -1122,6 +1125,8 @@ build (current-guix) and then store a couple of full system images.")
                                #:os installation-os-for-gui-tests
                                #:install-size install-size
                                #:target-size target-size
+                               #:installation-disk-image-file-system-type
+                               "iso9660"
                                #:gui-test
                                (lambda (marionette)
                                  (gui-test-program
diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm
index e90b247883..ca18b2f452 100644
--- a/gnu/tests/networking.scm
+++ b/gnu/tests/networking.scm
@@ -205,7 +205,8 @@ port 7, and a dict service on port 2628."
           ;; Make sure the bridge is created.
           (test-assert "br0 exists"
             (marionette-eval
-             '(zero? (system* "ovs-vsctl" "br-exists" "br0"))
+             '(zero? (system* #$(file-append openvswitch "/bin/ovs-vsctl")
+                              "br-exists" "br0"))
              marionette))
 
           ;; Make sure eth0 is connected to the bridge.