summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi47
-rw-r--r--gnu/home/services/ssh.scm65
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/bioinformatics.scm331
-rw-r--r--gnu/packages/emacs-xyz.scm57
-rw-r--r--gnu/packages/engineering.scm14
-rw-r--r--gnu/packages/games.scm51
-rw-r--r--gnu/packages/gnome.scm8
-rw-r--r--gnu/packages/guile-xyz.scm6
-rw-r--r--gnu/packages/linux.scm30
-rw-r--r--gnu/packages/lxqt.scm10
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/networking.scm4
-rw-r--r--gnu/packages/parallel.scm29
-rw-r--r--gnu/packages/patches/clog-fix-shared-build.patch85
-rw-r--r--gnu/packages/pretty-print.scm4
-rw-r--r--gnu/packages/python-crypto.scm1
-rw-r--r--gnu/packages/text-editors.scm5
-rw-r--r--gnu/packages/web-browsers.scm94
-rw-r--r--gnu/packages/wm.scm8
-rw-r--r--gnu/services/base.scm134
-rw-r--r--gnu/services/databases.scm14
-rw-r--r--gnu/services/dns.scm1
-rw-r--r--gnu/services/herd.scm12
-rw-r--r--gnu/services/rsync.scm8
-rw-r--r--gnu/tests.scm112
-rw-r--r--gnu/tests/base.scm2
-rw-r--r--gnu/tests/install.scm4
-rw-r--r--guix/packages.scm11
-rw-r--r--tests/guix-archive.sh8
-rw-r--r--tests/guix-build-branch.sh4
-rw-r--r--tests/guix-build.sh22
-rw-r--r--tests/guix-daemon.sh2
-rw-r--r--tests/guix-download.sh10
-rw-r--r--tests/guix-environment-container.sh7
-rw-r--r--tests/guix-environment.sh6
-rw-r--r--tests/guix-gc.sh18
-rw-r--r--tests/guix-git-authenticate.sh8
-rw-r--r--tests/guix-graph.sh6
-rw-r--r--tests/guix-hash.sh11
-rw-r--r--tests/guix-home.sh14
-rw-r--r--tests/guix-pack-relocatable.sh2
-rw-r--r--tests/guix-pack.sh4
-rw-r--r--tests/guix-package-aliases.sh12
-rw-r--r--tests/guix-package-net.sh22
-rw-r--r--tests/guix-package.sh46
-rw-r--r--tests/guix-refresh.sh6
-rw-r--r--tests/guix-shell.sh10
-rw-r--r--tests/guix-style.sh6
-rw-r--r--tests/guix-system.sh2
50 files changed, 884 insertions, 494 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 693313cf94..ad6ce4a210 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -18582,6 +18582,18 @@ Type of the service that runs the syslog daemon, whose value is a
 @code{<syslog-configuration>} object.
 @end defvar
 
+To have a modified @code{syslog-configuration} come into effect after
+reconfiguring your system, the @samp{reload} action should be preferred
+to restarting the service, as many services such as the login manager
+depend on it and would be restarted as well:
+
+@example
+# herd reload syslog
+@end example
+
+which will cause the running @command{syslogd} process to reload its
+configuration.
+
 @deftp {Data Type} syslog-configuration
 Data type representing the configuration of the syslog daemon.
 
@@ -42565,10 +42577,10 @@ Name of this host declaration.
 @item @code{host-name} (type: maybe-string)
 Host name---e.g., @code{"foo.example.org"} or @code{"192.168.1.2"}.
 
-@item @code{address-family} (type: address-family)
+@item @code{address-family} (type: maybe-address-family)
 Address family to use when connecting to this host: one of
-@code{AF_INET} (for IPv4 only), @code{AF_INET6} (for IPv6 only), or
-@code{*unspecified*} (allowing any address family).
+@code{AF_INET} (for IPv4 only), @code{AF_INET6} (for IPv6 only).
+Additionally, the field can be left unset to allow any address family.
 
 @item @code{identity-file} (type: maybe-string)
 The identity file to use---e.g., @code{"/home/charlie/.ssh/id_ed25519"}.
@@ -42594,10 +42606,31 @@ machine.
 @item @code{compression?} (default: @code{#f}) (type: boolean)
 Whether to compress data in transit.
 
-@item @code{proxy-command} (type: maybe-string)
-The command to use to connect to the server.  As an example, a command
-to connect via an HTTP proxy at 192.0.2.0 would be: @code{"nc -X connect
--x 192.0.2.0:8080 %h %p"}.
+@item @code{proxy} (type: maybe-proxy-command-or-jump-list)
+The command to use to connect to the server or a list of SSH hosts to
+jump through before connecting to the server.  The field may be set to either a
+@code{proxy-command} or a list of @code{proxy-jump} records.
+
+As an example, a @code{proxy-command} to connect via an HTTP proxy at 192.0.2.0
+would be constructed with: @code{(proxy-command "nc -X connect -x
+192.0.2.0:8080 %h %p")}.
+
+@deftp {Data Type} proxy-jump
+Available @code{proxy-jump} fields are:
+
+@table @asis
+@item @code{user} (type: maybe-string)
+User name on the remote host.
+
+@item @code{host-name} (type: string)
+Host name---e.g., @code{foo.example.org} or @code{192.168.1.2}.
+
+@item @code{port} (type: maybe-natural-number)
+TCP port number to connect to.
+
+@end table
+
+@end deftp
 
 @item @code{host-key-algorithms} (type: maybe-string-list)
 The list of accepted host key algorithms---e.g.,
diff --git a/gnu/home/services/ssh.scm b/gnu/home/services/ssh.scm
index 01917a29cd..6aeb6ad5a7 100644
--- a/gnu/home/services/ssh.scm
+++ b/gnu/home/services/ssh.scm
@@ -20,6 +20,7 @@
 (define-module (gnu home services ssh)
   #:use-module (guix gexp)
   #:use-module (guix records)
+  #:use-module (guix deprecation)
   #:use-module (guix diagnostics)
   #:use-module (guix i18n)
   #:use-module (gnu services)
@@ -32,6 +33,8 @@
   #:autoload   (gnu packages base) (glibc-utf8-locales)
   #:use-module (gnu packages ssh)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-9 gnu)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
@@ -55,6 +58,12 @@
             openssh-host-host-key-algorithms
             openssh-host-accepted-key-types
             openssh-host-extra-content
+            proxy-jump
+            proxy-jump-host-name
+            proxy-jump-port
+            proxy-jump-user
+            proxy-command
+            proxy-command->string
 
             home-openssh-service-type
             home-ssh-agent-service-type))
@@ -114,6 +123,54 @@
 
 (define-maybe string-list)
 
+(define-record-type <proxy-command>
+  (proxy-command command)
+  proxy-command?
+  (command proxy-command->string))
+
+(set-record-type-printer! <proxy-command>
+  (lambda (obj port)
+    (format port "#<proxy-command ~s>" (proxy-command->string obj))))
+
+(define-configuration/no-serialization proxy-jump
+  (user
+   maybe-string
+   "User name on the remote host.")
+  (host-name
+   (string)
+   "Host name---e.g., @code{foo.example.org} or @code{192.168.1.2}.")
+  (port
+   maybe-natural-number
+   "TCP port number to connect to."))
+
+(define (proxy-jump->string proxy-jump)
+  (match-record proxy-jump <proxy-jump>
+    (host-name user port)
+    (string-append
+      (if (maybe-value-set? user) (string-append user "@") "")
+      host-name
+      (if (maybe-value-set? port) (string-append ":" (number->string port)) ""))))
+
+(define (proxy-command-or-jump-list? x)
+  (or (proxy-command? x)
+      (and (list? x)
+           (every proxy-jump? x))))
+
+(define (serialize-proxy-command-or-jump-list field value)
+  (if (proxy-command? value)
+    (serialize-string 'proxy-command (proxy-command->string value))
+    (serialize-string-list 'proxy-jump (map proxy-jump->string value))))
+
+(define-maybe proxy-command-or-jump-list)
+
+(define (sanitize-proxy-command properties)
+  (lambda (value)
+  (when (maybe-value-set? value)
+    (warn-about-deprecation 'proxy-command properties #:replacement 'proxy))
+  (unless (maybe-string? value)
+    (configuration-field-error (source-properties->location properties) 'proxy-command value))
+  value))
+
 (define-configuration openssh-host
   (name
    (string)
@@ -155,7 +212,13 @@ machine.")
    maybe-string
    "The command to use to connect to the server.  As an example, a command
 to connect via an HTTP proxy at 192.0.2.0 would be: @code{\"nc -X
-connect -x 192.0.2.0:8080 %h %p\"}.")
+connect -x 192.0.2.0:8080 %h %p\"}.  Using 'proxy-command' is deprecated, use
+'proxy' instead."
+   (sanitizer (sanitize-proxy-command (current-source-location))))
+  (proxy
+   maybe-proxy-command-or-jump-list
+   "The command to use to connect to the server or a list of SSH hosts to jump
+through before connecting to the server.")
   (host-key-algorithms
    maybe-string-list
    "The list of accepted host key algorithms---e.g.,
diff --git a/gnu/local.mk b/gnu/local.mk
index b7af7726e8..f0d129b493 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -999,6 +999,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/classpath-aarch64-support.patch		\
   %D%/packages/patches/classpath-miscompilation.patch		\
   %D%/packages/patches/cling-use-shared-library.patch		\
+  %D%/packages/patches/clog-fix-shared-build.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
   %D%/packages/patches/cmake-curl-certificates-3.24.patch	\
   %D%/packages/patches/coda-use-system-libs.patch		\
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index a986e118f8..68c1406fc3 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -2220,167 +2220,179 @@ easy-to-perform steps.")
     (license license:gpl3+)))
 
 (define-public bpp-core
-  ;; The last release was in 2014 and the recommended way to install from source
-  ;; is to clone the git repository, so we do this.
-  ;; http://biopp.univ-montp2.fr/wiki/index.php/Main_Page
-  (let ((commit "7d8bced0d1a87291ea8dd7046b7fb5ff9c35c582"))
-    (package
-      (name "bpp-core")
-      (version (string-append "2.2.0-1." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "http://biopp.univ-montp2.fr/git/bpp-core")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "10djsq5vlnkilv436gnmh4irpk49v29pa69r6xiryg32xmvn909j"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:parallel-build? #f))
-      (home-page "http://biopp.univ-montp2.fr")
-      (synopsis "C++ libraries for Bioinformatics")
-      (description
-       "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
+  (package
+    (name "bpp-core")
+    (version "2.4.1")
+    (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/BioPP/bpp-core")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ma2cl677l7s0n5sffh66cy9lxp5wycm50f121g8rx85p95vkgwv"))))
+    (build-system cmake-build-system)
+    (home-page "https://pbil.univ-lyon1.fr/bpp-doc/bpp-core/html/index.html")
+    (synopsis "C++ libraries for Bioinformatics")
+    (description
+     "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
 analysis, phylogenetics, molecular evolution and population genetics.  It is
 Object Oriented and is designed to be both easy to use and computer efficient.
 Bio++ intends to help programmers to write computer expensive programs, by
 providing them a set of re-usable tools.")
-      (license license:cecill-c))))
+      (license license:cecill-c)))
 
 (define-public bpp-phyl
-  ;; The last release was in 2014 and the recommended way to install from source
-  ;; is to clone the git repository, so we do this.
-  ;; http://biopp.univ-montp2.fr/wiki/index.php/Main_Page
-  (let ((commit "0c07167b629f68b569bf274d1ad0c4af83276ae2"))
-    (package
-      (name "bpp-phyl")
-      (version (string-append "2.2.0-1." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "http://biopp.univ-montp2.fr/git/bpp-phyl")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1ssjgchzwj3iai26kyly7gwkdv8sk59nqhkb1wpap3sf5m6kyllh"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:parallel-build? #f
-         ;; If out-of-source, test data is not copied into the build directory
-         ;; so the tests fail.
-         #:out-of-source? #f))
-      (inputs
-       (list bpp-core bpp-seq))
-      (home-page "http://biopp.univ-montp2.fr")
-      (synopsis "Bio++ phylogenetic Library")
-      (description
-       "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
+  (package
+    (name "bpp-phyl")
+    (version "2.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/BioPP/bpp-phyl")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "192zks6wyk903n06c2lbsscdhkjnfwms8p7jblsmk3lvjhdipb20"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list bpp-core bpp-seq))
+    (home-page "https://pbil.univ-lyon1.fr/bpp-doc/bpp-phyl/html/")
+    (synopsis "Bio++ phylogenetic library")
+    (description
+     "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
 analysis, phylogenetics, molecular evolution and population genetics.  This
 library provides phylogenetics-related modules.")
-      (license license:cecill-c))))
+    (license license:cecill-c)))
+
+(define-public bpp-phyl-omics
+  (package
+    (name "bpp-phyl-omics")
+    (version "2.4.1")
+    (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+            (url "https://github.com/BioPP/bpp-phyl-omics")
+            (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "172psb8njkjwg3cd6gdy5w0mq8f0817v635yw4bk7146aggjzl1h"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:tests? #f)) ; No test provided.
+    (inputs
+     (list bpp-core
+           bpp-phyl
+           bpp-seq
+           bpp-seq-omics))
+    (home-page "https://github.com/BioPP/bpp-phyl-omics")
+    (synopsis "Bio++ phylogenetic library genomics components")
+    (description
+     "This library contains the genomics components of the Bio++ phylogenetics
+library.  It is part of the Bio++ project.")
+    (license license:cecill)))
 
 (define-public bpp-popgen
-  ;; The last release was in 2014 and the recommended way to install from source
-  ;; is to clone the git repository, so we do this.
-  ;; http://biopp.univ-montp2.fr/wiki/index.php/Main_Page
-  (let ((commit "e472bac9b1a148803895d747cd6d0c5904f85d9f"))
-    (package
-      (name "bpp-popgen")
-      (version (string-append "2.2.0-1." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "http://biopp.univ-montp2.fr/git/bpp-popgen")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "0yn82dzn1n5629nzja68xfrhi655709rjanyryb36vzkmymy6dw5"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:parallel-build? #f
-         #:tests? #f)) ; There are no tests.
-      (inputs
-       (list bpp-core bpp-seq))
-      (home-page "http://biopp.univ-montp2.fr")
-      (synopsis "Bio++ population genetics library")
-      (description
-       "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
+  (package
+    (name "bpp-popgen")
+    (version "2.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/BioPP/bpp-popgen")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0bz0fhrq3dri6a0hvfc3zlvrns8mrzzlnicw5pyfa812gc1qwfvh"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:tests? #f)) ; There are no tests.
+    (inputs
+     (list bpp-core bpp-seq))
+    (home-page "https://pbil.univ-lyon1.fr/bpp-doc/bpp-popgen/html/")
+    (synopsis "Bio++ population genetics library")
+    (description
+     "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
 analysis, phylogenetics, molecular evolution and population genetics.  This
 library provides population genetics-related modules.")
-      (license license:cecill-c))))
+    (license license:cecill-c)))
 
 (define-public bpp-seq
-  ;; The last release was in 2014 and the recommended way to install from source
-  ;; is to clone the git repository, so we do this.
-  ;; http://biopp.univ-montp2.fr/wiki/index.php/Main_Page
-  (let ((commit "6cfa07965ce152e5598a89df2fa80a75973bfa33"))
-    (package
-      (name "bpp-seq")
-      (version (string-append "2.2.0-1." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "http://biopp.univ-montp2.fr/git/bpp-seq")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1nys5jq7jqvdg40d91wsmj3q2yzy4276cp7sp44n67p468f27zf2"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:parallel-build? #f
-         ;; If out-of-source, test data is not copied into the build directory
-         ;; so the tests fail.
-         #:out-of-source? #f))
-      (inputs
-       (list bpp-core))
-      (home-page "http://biopp.univ-montp2.fr")
-      (synopsis "Bio++ sequence library")
-      (description
-       "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
+  (package
+    (name "bpp-seq")
+    (version "2.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/BioPP/bpp-seq")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "1mc09g8jswzsa4wgrfv59jxn15ys3q8s0227p1j838wkphlwn2qk"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list bpp-core))
+    (home-page "https://pbil.univ-lyon1.fr/bpp-doc/bpp-seq/html/")
+    (synopsis "Bio++ sequence library")
+    (description
+     "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
 analysis, phylogenetics, molecular evolution and population genetics.  This
 library provides sequence-related modules.")
-      (license license:cecill-c))))
+    (license license:cecill-c)))
+
+(define-public bpp-seq-omics
+  (package
+    (name "bpp-seq-omics")
+    (version "2.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/BioPP/bpp-seq-omics")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "1sc2xdfnfp5a6qihplp49rgrqmj89898avfy9bqaq1g2fajppgjj"))))
+    (build-system cmake-build-system)
+    (inputs
+     (list bpp-core bpp-seq))
+    (home-page "https://github.com/BioPP/bpp-seq-omics")
+    (synopsis "Bio++ sequence library genomics components")
+    (description
+     "This library contains the genomics components of the Bio++ sequence library.
+It is part of the Bio++ project.")
+    (license license:cecill)))
 
 (define-public bppsuite
-  ;; The last release was in 2014 and the recommended way to install from source
-  ;; is to clone the git repository, so we do this.
-  ;; http://biopp.univ-montp2.fr/wiki/index.php/Main_Page
-  (let ((commit "c516147f57aa50961121cd505bed52cd7603698b"))
-    (package
-      (name "bppsuite")
-      (version (string-append "2.2.0-1." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "http://biopp.univ-montp2.fr/git/bppsuite")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1y87pxvw0jxjizhq2dr9g2r91md45k1p9ih2sl1yy1y3p934l2kb"))))
-      (build-system cmake-build-system)
-      (arguments
-       `(#:parallel-build? #f
-         #:tests? #f)) ; There are no tests.
-      (native-inputs
-       (list groff man-db texinfo))
-      (inputs
-       `(("bpp-core" ,bpp-core)
-         ("bpp-seq" ,bpp-seq)
-         ("bpp-phyl" ,bpp-phyl)
-         ("bpp-phyl" ,bpp-popgen)))
-      (home-page "http://biopp.univ-montp2.fr")
-      (synopsis "Bioinformatics tools written with the Bio++ libraries")
-      (description
-       "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
+  (package
+    (name "bppsuite")
+    (version "2.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/BioPP/bppsuite")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1wdwcgczqbc3m116vakvi0129wm3acln3cfc7ivqnalwvi6lrpds"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:tests? #f)) ; There are no tests.
+    (native-inputs
+     (list groff man-db texinfo))
+    (inputs
+     (list bpp-core bpp-seq bpp-phyl bpp-popgen))
+    (home-page "https://github.com/BioPP")
+    (synopsis "Bioinformatics tools written with the Bio++ libraries")
+    (description
+     "Bio++ is a set of C++ libraries for Bioinformatics, including sequence
 analysis, phylogenetics, molecular evolution and population genetics.  This
 package provides command line tools using the Bio++ library.")
-      (license license:cecill-c))))
+    (license license:cecill-c)))
 
 (define-public blast+
   (package
@@ -6021,6 +6033,43 @@ resolution of binding sites through combining the information of both
 sequencing tag position and orientation.")
     (license license:bsd-3)))
 
+(define-public maffilter
+  (package
+    (name "maffilter")
+    (version "1.3.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jydu/maffilter")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "196c16qw82niqqyzi7j1ga1n0zmir73bm26kg04m0i5aq2cpa0ml"))))
+    (build-system cmake-build-system)
+    (arguments (list #:tests? #false)) ;there are none
+    (inputs
+     (list boost
+           bpp-core
+           bpp-phyl
+           bpp-phyl-omics
+           bpp-seq
+           bpp-seq-omics
+           zlib))
+    (home-page "https://jydu.github.io/maffilter/")
+    (synopsis "Multiple alignment format file processor")
+    (description
+     "MafFilter is a program dedicated to the analysis of genome alignments.
+It parses and manipulates @acronym{MAF, multiple alignment format} files as
+well as more simple fasta files.  This package can be used to design a
+pipeline as a series of consecutive filters, each performing a dedicated
+analysis.  Many of the filters are available, from alignment cleaning to
+phylogeny reconstruction and population genetics analysis.  Despite various
+filtering options and format conversion tools, MafFilter can compute a wide
+range of statistics (phylogenetic trees, nucleotide diversity, inferrence of
+selection, etc.).")
+    (license license:gpl3+)))
+
 (define-public mafft
   (package
     (name "mafft")
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 81082ec31d..baa6119078 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -125,6 +125,7 @@
 ;;; Copyright © 2022 Demis Balbach <db@minikn.xyz>
 ;;; Copyright © 2020, 2021, 2022, 2023 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2023 Dominik Delgado Steuter <d@delgado.nrw>
+;;; Copyright © 2023 Juliana Sims <juli@incana.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2935,14 +2936,14 @@ incrementally confined in Isearch manner.")
 (define emacs-emms-print-metadata
   (package
     (name "emacs-emms-print-metadata")
-    (version "14")
+    (version "15")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "emms-" version ".tar"))
        (sha256
-        (base32 "0525vmi397q604z8i35zld3c4fkwbvxwir5lf4f1ji1bbvkzqavc"))))
+        (base32 "0kd9qx93cgcxyqsnbp95xx414s08rd5bb35aif3c7qyab5w05yi6"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -10714,10 +10715,10 @@ them easier to distinguish from other, less important buffers.")
     (license license:expat)))
 
 (define-public emacs-embark
-  (let ((commit "63013c2d3ef4dccc95167218ccbf4f401e489c3e")) ;version bump
+  (let ((commit "c914efe881df2bc6a2bd35cc7ee975d3e9d4a418")) ;version bump
     (package
       (name "emacs-embark")
-      (version "0.21.1")
+      (version "0.22.1")
       (source
        (origin
          (method git-fetch)
@@ -10725,7 +10726,7 @@ them easier to distinguish from other, less important buffers.")
                (url "https://github.com/oantolin/embark")
                (commit commit)))
          (sha256
-          (base32 "14qp46wa1xgmb09jyk9cadj0b3m7bwspqnprk3zbfc6gw1r53235"))
+          (base32 "1l288w27wav0r71hprqi74r77042d1fx3p1zmi05vl6z6230h48b"))
          (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (arguments
@@ -13151,7 +13152,7 @@ with Elfeed.")
 (define-public emacs-elfeed-score
   (package
     (name "emacs-elfeed-score")
-    (version "1.2.4")
+    (version "1.2.5")
     (source
      (origin
        (method git-fetch)
@@ -13160,8 +13161,20 @@ with Elfeed.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0d1yh4wv81n5mnrzdi88z0vbs94m7j3q20r5fc1wk35r4hrl3xqw"))))
+        (base32 "0slbmmcsf5pqbiq3nmna7wx9jvfgdgjp272qdqvmrv99jdj92cq6"))))
     (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? #false                   ;FIXME: How to run tests properly?
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'install 'make-info
+            (lambda _
+              (with-directory-excursion "doc"
+                (invoke "makeinfo" "--no-split"
+                        "-o" "elfeed-score.info" "elfeed-score.texi")))))))
+    (native-inputs
+     (list texinfo))
     (propagated-inputs
      (list emacs-elfeed))
     (home-page "https://github.com/sp1ff/elfeed-score")
@@ -27423,7 +27436,7 @@ targets the Emacs based IDEs (CIDER, ESS, Geiser, Robe, SLIME etc.)")
 (define-public emacs-buttercup
   (package
     (name "emacs-buttercup")
-    (version "1.30")
+    (version "1.31")
     (source
      (origin
        (method git-fetch)
@@ -27433,7 +27446,7 @@ targets the Emacs based IDEs (CIDER, ESS, Geiser, Robe, SLIME etc.)")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1zr1jlfwr8yp9168yvkrhif1mr1r40fr1j1v1iv11ryn2zjcm9yn"))))
+         "1rvc9r6swb74lhzd877jidkkf2cxl5v4zz302j2imqhsbk844qzh"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -32599,7 +32612,7 @@ contributed packages to Telega.")))
 (define-public emacs-doom-modeline
   (package
     (name "emacs-doom-modeline")
-    (version "3.3.2")
+    (version "3.4.0")
     (source
      (origin
        (method git-fetch)
@@ -32607,7 +32620,7 @@ contributed packages to Telega.")))
              (url "https://github.com/seagle0128/doom-modeline")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "1v24hiqs4zbq613vanixgng9cx697di63jpafpmjlsripjfvk1qp"))
+        (base32 "1z5cqn33v7sjihs05ycz1yzi5wcg90yn3cy09qj9g5g8pjs8qdki"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (arguments
@@ -33712,7 +33725,7 @@ launching other commands/applications from within Emacs, similar to the
 (define-public emacs-no-littering
   (package
     (name "emacs-no-littering")
-    (version "1.2.7")
+    (version "1.3.0")
     (source
      (origin
        (method git-fetch)
@@ -33721,8 +33734,10 @@ launching other commands/applications from within Emacs, similar to the
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1grc5fk7ng4d6i8fwfpm3cb2b19s9sbdjbdn8ybchk7cj45kkl24"))))
+        (base32 "1vkypj2mm428kmawxnyaqg3v5xpcs5hkbmyvjkib8ib02psshxd7"))))
     (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-compat))
     (home-page "https://github.com/emacscollective/no-littering")
     (synopsis "Help keep @file{~/.emacs.d/} clean")
     (description "The default paths used to store configuration files and
@@ -36017,6 +36032,22 @@ audio volume via amixer.")
 Fennel code within Emacs.")
       (license license:gpl3+))))
 
+(define-public emacs-gerbil-mode
+  (package
+    (inherit gerbil)
+    (name "emacs-gerbil-mode")
+    (version "1.0")
+    (build-system emacs-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-before 'install 'change-directory
+                          (lambda _
+                            (chdir "etc"))))))
+    (synopsis "Emacs major-mode for editing Gerbil code")
+    (description
+     "Gerbil mode provides font-lock, indentation, navigation, and REPL for
+Gerbil code within Emacs.")))
+
 (define-public emacs-org-modern
   (package
    (name "emacs-org-modern")
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 10684979ad..77e8c76e17 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -984,7 +984,7 @@ Emacs).")
 (define-public kicad
   (package
     (name "kicad")
-    (version "7.0.1")
+    (version "7.0.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -992,7 +992,7 @@ Emacs).")
                     (commit version)))
               (sha256
                (base32
-                "021safxvyq9qzs08jy3jvpazmhvix4kyl05s9y9hwmyzdmdl2smn"))
+                "0san7pjgvd8niwrki722qb6y46r71rlyspqp43pmkiz55dmz52zx"))
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -1092,7 +1092,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1cy9w10wzdjm9z9vzv88ija6l3pp894hwcgz5jggjrnyazhpklvj"))))
+                "1sh970sjvgzrwwjbkgg3ikzka5dfdq66hvkcxfx2dnp7hv0hidc2"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBUILD_FORMATS=html")
@@ -1126,7 +1126,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14c5gci13m30xv0cmic5jxsmfx9lq3fnd8hyq3mmgkrw7443zy30"))))
+                "0aah92rb8yx00z0xwx9z7xn5rrw4cc3z35gr7c0bnb49hiak01jc"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; no tests exist
@@ -1155,7 +1155,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0k0z40wmaq665hjxb6kp1yl3v7clxz49r6ki0chyphsxv1cnixmy"))))
+                "1qrdznfd4a6kzwd4aaijkpyjy0xnrmi66isq9z52652a8s6ja48v"))))
     (synopsis "Official KiCad footprint libraries")
     (description "This package contains the official KiCad footprint libraries.")))
 
@@ -1172,7 +1172,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0nzi7ijfb3rjm98kaa9va2mkh0nfzpq4vfhxkq8j18qhx24h5c8v"))))
+                "1nkk4325jh89vh52ykfnf9pz1k3jk5017gz6r2cia2v4b3jadi31"))))
     (synopsis "Official KiCad 3D model libraries")
     (description "This package contains the official KiCad 3D model libraries.")))
 
@@ -1189,7 +1189,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02i279269mhq7wjhb1yqk90820ncssxl9n7b20qr2r4fmm7jpvxv"))))
+                "1qi20mrsfn4fxmr1fyphmil2i9p2nzmwk5rlfchc5aq2194nj3lq"))))
     (synopsis "Official KiCad project and worksheet templates")
     (description "This package contains the official KiCad project and
 worksheet templates.")))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 9936975ba6..62ee0050fa 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -3706,6 +3706,57 @@ enemies in different game modes such as space ball, death match, team death
 match, cannon keep, and grave-itation pit.")
       (license license:gpl3+))))
 
+(define-public alienblaster
+  (package
+    (name "alienblaster")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.schwardtnet.de/alienblaster/archives/"
+                           "alienblaster-" version ".tgz"))
+       (sha256
+        (base32
+         "104rfsfsv446n4y52p5zw9h8mhgjyrbca8fpyhnxkkasq141a264"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ; no tests
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-sdl-paths
+            (lambda _
+              (let ((share (string-append #$output "/share")))
+                ;; Fix name and append path to "SDL_mixer.h"
+                (substitute* "src/Makefile"
+                  (("GAME_NAME=alienBlaster") "GAME_NAME=alienblaster")
+                  (("SDL_FLAGS=\\$\\(shell sdl-config --cflags\\)" line)
+                   (string-append line " -I"
+                                  #$(this-package-input "sdl-mixer")
+                                  "/include/SDL")))
+                ;; Substitute relative paths in ".cfg" and source/header files
+                (substitute* (find-files "./cfg")
+                  (("(\\./)?images") (string-append share "/images")))
+                (substitute* (list "src/global.h" "src/global.cc")
+                  (("./images") (string-append share "/images"))
+                  (("./sound") (string-append share "/sound"))
+                  (("./cfg") (string-append share "/cfg"))))))
+          (delete 'configure)
+          (replace 'install
+            (lambda _
+              (install-file "alienblaster" (string-append #$output "/bin"))
+              (for-each
+               (lambda (dir)
+                 (copy-recursively dir (string-append #$output "/share/" dir)))
+               '("images" "sound" "cfg")))))))
+    (inputs (list sdl sdl-mixer))
+    (home-page "http://www.schwardtnet.de/alienblaster/")
+    (synopsis "Action-loaded 2D arcade shooter game")
+    (description "Alien Blaster is an action-loaded 2D arcade shooter
+game.  Your mission in the game is simple: stop the invasion of the aliens by
+blasting them.  Simultaneous two-player mode is available.")
+    (license license:gpl2)))
+
 (define glkterm
   (package
    (name "glkterm")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index a30bf4051b..3cc53f5923 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -11706,7 +11706,7 @@ advanced image management tool")
 (define-public terminator
   (package
     (name "terminator")
-    (version "2.1.2")
+    (version "2.1.3")
     (source
      (origin
        (method url-fetch)
@@ -11714,7 +11714,7 @@ advanced image management tool")
                            "releases/download/v" version "/"
                            name "-" version ".tar.gz"))
        (sha256
-        (base32 "10shpn8id7z43d4dpx16x76mgxnk4mr976j5cg28icjiiaidyfc2"))))
+        (base32 "1rbarn9pq3g8k13clxiy0d62g0fxhkg5bcxw2h626wkb7lzr9s8a"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -12984,7 +12984,7 @@ profiler via Sysprof, debugging support, and more.")
 (define-public komikku
   (package
     (name "komikku")
-    (version "1.15.0")
+    (version "1.17.0")
     (source
      (origin
        (method git-fetch)
@@ -12994,7 +12994,7 @@ profiler via Sysprof, debugging support, and more.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0yd4274qxpv0wg1lm6daip2nd135qq07pfl5wrm2rqlzs5mvqs3n"))))
+         "0snb6vdgb3l2mw0kr0yb4zjpq46w56rpi554vqn5ks6qwywvs58g"))))
     (build-system meson-build-system)
     (arguments
      (list
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index fd8fb25da1..ea67deff86 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -733,7 +733,7 @@ you send to a FIFO file.")
 (define-public guile-dsv
   (package
     (name "guile-dsv")
-    (version "0.5.1")
+    (version "0.5.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -742,10 +742,10 @@ you send to a FIFO file.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "10wssilin4qphdmmqmms20bp3cy007kh22l1g45wfka0minmhkgs"))))
+                "056wab749fyabklp4srai72dwzihlm6hkcdy1da7d4gh8iqsyqpi"))))
     (build-system gnu-build-system)
     (native-inputs
-     (list autoconf automake pkg-config texinfo))
+     (list autoconf automake pkg-config texinfo help2man))
     (inputs (list guile-3.0))
     (propagated-inputs (list guile-lib))
     (arguments
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c6fce0992f..56ea676e4a 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -485,22 +485,22 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The current "stable" kernels. That is, the most recently released major
 ;; versions that are still supported upstream.
 
-(define-public linux-libre-6.2-version "6.2.11")
+(define-public linux-libre-6.2-version "6.2.12")
 (define-public linux-libre-6.2-gnu-revision "gnu")
 (define deblob-scripts-6.2
   (linux-libre-deblob-scripts
    linux-libre-6.2-version
    linux-libre-6.2-gnu-revision
    (base32 "15wrksnimwb099qgqc631rp8dgv5b61l6s5kknk23frqdwkp4shp")
-   (base32 "0ir5vvbdh6dly5ld8mfp7285g8k88w5bb32hj4wmgyqsbfqc6rf2")))
+   (base32 "0560xc8l2z79qk2dnv15i0m4igw9mq2ymv2a40nw2z3lcqygcs5x")))
 (define-public linux-libre-6.2-pristine-source
   (let ((version linux-libre-6.2-version)
-        (hash (base32 "0iyx03z58pv1d5nrryjx94k3nxwyvm4b3bim6nawg1qbws26f8qd")))
+        (hash (base32 "1j6cn1ifmcqfqvxp9h10y8yfxi918yzl3yjbf96gmb9p4ysldqf7")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-6.2)))
 
-(define-public linux-libre-6.1-version "6.1.24")
+(define-public linux-libre-6.1-version "6.1.25")
 (define-public linux-libre-6.1-gnu-revision "gnu")
 (define deblob-scripts-6.1
   (linux-libre-deblob-scripts
@@ -510,7 +510,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0cchdhjra74zanyk14brv2l2dvxpg8dn58rn477lgfb44mcnhq33")))
 (define-public linux-libre-6.1-pristine-source
   (let ((version linux-libre-6.1-version)
-        (hash (base32 "0135aj8asplpxqr48hwdmwynx8n8hzhdgh55yl8r0n1kivisgrma")))
+        (hash (base32 "149h95r5msvqah868zd36y92ls9h41cr1rb5vzinl20mxdn46wnb")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-6.1)))
@@ -518,7 +518,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The "longterm" kernels — the older releases with long-term upstream support.
 ;; Here are the support timelines:
 ;; <https://www.kernel.org/category/releases.html>
-(define-public linux-libre-5.15-version "5.15.107")
+(define-public linux-libre-5.15-version "5.15.108")
 (define-public linux-libre-5.15-gnu-revision "gnu")
 (define deblob-scripts-5.15
   (linux-libre-deblob-scripts
@@ -528,12 +528,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "03hwhwbcicwyx5i30d6m715kwgrxz4h21xhk55wnawlk8zhx3r35")))
 (define-public linux-libre-5.15-pristine-source
   (let ((version linux-libre-5.15-version)
-        (hash (base32 "1a5gqpxmzls5mp4a0cw10ldrps4pvbn19nzfri91ys25j1v0wdqr")))
+        (hash (base32 "1fj38bvsyr9g89qr8pcjrp0kaq44g301x46gyjibq73gljnnkswb")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.15)))
 
-(define-public linux-libre-5.10-version "5.10.177")
+(define-public linux-libre-5.10-version "5.10.178")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
@@ -543,12 +543,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1g4vabfswxzf9ahxc06k2ffksf84kcr2csx4m5kx680w0jqqnk80")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "0waml6svj07b7f8yb1kzrflqlf61x4kcqbgsr372s484m3z628lz")))
+        (hash (base32 "1bx8wws9gvksg1c1af29nm03jjz2f5a5sq9hzc00ymjyf7isvkqs")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.240")
+(define-public linux-libre-5.4-version "5.4.241")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
@@ -558,12 +558,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1d6as1yk9svysh07hdybs8glvn8s9f8gwlbjl7f9m920pdam2r60")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "0ihf0rqhx7dav3k3igk29962sscb1xyniy2gx8chyllprr0z126w")))
+        (hash (base32 "0z7api3qcjrd6w7fva7k6fj4zx17mg5ibn28a6qbgy27dyny1h7z")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.280")
+(define-public linux-libre-4.19-version "4.19.281")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
@@ -573,12 +573,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1q0fgpbdwc21wj9wnjjb49dp84ch6ymd5na3iaabadwjs2nmb6bd")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "1xmg9p3ky75n5q894f522s8nwcmbd5c15nmjr0n96m6xzag3kd7w")))
+        (hash (base32 "13nwzsh3h634450k37pxdca5j8vr3qswx7k79bs2999xp2js9pf0")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.312")
+(define-public linux-libre-4.14-version "4.14.313")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
@@ -588,7 +588,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1ccggm19nl7pdcxmsm08fkqy8phz8rqfmww5ypizibdmnrmpn2v9")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "03bwrnm7z8jxxn681dd5jffrj76l14ngkcccfgbg1p4a0471q436")))
+        (hash (base32 "0k2j856niappvkp9m1wxr87xvbwdzdy03mbcj827kmpjd9gdca76")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
diff --git a/gnu/packages/lxqt.scm b/gnu/packages/lxqt.scm
index 8f9a607282..ee6a19f415 100644
--- a/gnu/packages/lxqt.scm
+++ b/gnu/packages/lxqt.scm
@@ -39,7 +39,6 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
-  #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages compton)
@@ -321,8 +320,7 @@ LXQt and the system it's running on.")
            libqtxdg
            polkit-qt
            qtsvg-5
-           qtx11extras
-           tzdata))
+           qtx11extras))
     (native-inputs
      (list lxqt-build-tools qttools-5))
     (arguments
@@ -330,14 +328,12 @@ LXQt and the system it's running on.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-source
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda _
              (substitute* '("lxqt-admin-user/CMakeLists.txt"
                             "lxqt-admin-time/CMakeLists.txt")
                (("DESTINATION \"\\$\\{POLKITQT-1_POLICY_FILES_INSTALL_DIR\\}")
                 "DESTINATION \"share/polkit-1/actions"))
-             (substitute* '("lxqt-admin-time/timeadmindialog.cpp")
-               (("/usr/share/zoneinfo/zone.tab")
-                (search-input-file inputs "share/zoneinfo/zone.tab"))))))))
+             #t)))))
     (home-page "https://lxqt-project.org")
     (synopsis "LXQt system administration tool")
     (description "lxqt-admin is providing two GUI tools to adjust settings of
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index ef45511546..b9b3ecc87e 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -561,7 +561,7 @@ album-experience.")
 (define-public mpdevil
   (package
     (name "mpdevil")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -569,7 +569,7 @@ album-experience.")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "04dzxyv176w5sm4j85j7fbh42nk9wsyz5s005kj9cjwsrzrnxlbk"))))
+               (base32 "0ghmw3xiz567qd1iv1ggkv6zl1jb5d40mz27npk2zvlpikmqpc6c"))))
     (build-system meson-build-system)
     (arguments
      (list
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index df3a5129cb..e456b40a20 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1756,14 +1756,14 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "4.0.4")
+    (version "4.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0jz76ra86gy7r4wwb174lggnl5y29nn68l7ydw1kj1phcijrz854"))))
+        (base32 "0abb36n3li5w22f435k31mvk0sy0f41sxz4fqrl4ksjzjd377dki"))))
     (build-system cmake-build-system)
     (arguments
      (list
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 60bf8409ee..bc3edf9122 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -500,6 +500,35 @@ obtain information about the CPU being used: supported instruction set,
 processor name, cache information, and topology information.")
       (license license:bsd-2))))
 
+(define-public clog
+  (package
+    (inherit cpuinfo) ;distributed with cpuinfo but not built by it
+    (name "clog")
+    (source (origin
+              (inherit (package-source cpuinfo))
+              (patches (search-patches "clog-fix-shared-build.patch"))))
+    (arguments
+     (list #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON")
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'chdir
+                          (lambda _
+                            (chdir "deps/clog"))))))
+    (native-inputs (list googletest))
+    (inputs '())
+    (synopsis "C-style logging library based on printf")
+    (description
+     "This package provides a C-style library for logging errors,
+warnings, information notes, and debug information.  Its features are:
+@itemize
+@item printf-style interface for formatting variadic parameters.
+@item Separate functions for logging errors, warnings, information notes, and
+debug information.
+@item Independent logging settings for different modules.
+@item Logging to logcat on Android and stderr/stdout on other platforms.
+@item Compatible with C99 and C++.
+@item Covered with unit tests.
+@end itemize")))
+
 (define-public psimd
   ;; There is currently no tag in this repo.
   (let ((commit "072586a71b55b7f8c584153d223e95687148a900")
diff --git a/gnu/packages/patches/clog-fix-shared-build.patch b/gnu/packages/patches/clog-fix-shared-build.patch
new file mode 100644
index 0000000000..bf80544b90
--- /dev/null
+++ b/gnu/packages/patches/clog-fix-shared-build.patch
@@ -0,0 +1,85 @@
+Author: Antero Mejr <antero@mailbox.org>
+Notes: Disabled function visibility hacks and googletest download. Enabled
+non-static builds.
+
+diff --git a/deps/clog/CMakeLists.txt b/deps/clog/CMakeLists.txt
+index 083f519..b7b225a 100644
+--- a/deps/clog/CMakeLists.txt
++++ b/deps/clog/CMakeLists.txt
+@@ -38,20 +38,8 @@ SET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps
+ SET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps
+   CACHE PATH "Confu-style dependencies binary directory")
+ 
+-IF(CLOG_BUILD_TESTS)
+-  IF(NOT DEFINED GOOGLETEST_SOURCE_DIR)
+-    MESSAGE(STATUS "Downloading Google Test to ${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest (define GOOGLETEST_SOURCE_DIR to avoid it)")
+-    CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download/CMakeLists.txt")
+-    EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
+-      WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download")
+-    EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
+-      WORKING_DIRECTORY "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest-download")
+-    SET(GOOGLETEST_SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" CACHE STRING "Google Test source directory")
+-  ENDIF()
+-ENDIF()
+-
+ # ---[ clog library
+-ADD_LIBRARY(clog STATIC src/clog.c)
++ADD_LIBRARY(clog src/clog.c)
+ SET_TARGET_PROPERTIES(clog PROPERTIES
+   C_STANDARD 99
+   C_EXTENSIONS NO)
+@@ -74,16 +62,6 @@ INSTALL(TARGETS clog
+ 
+ # ---[ clog tests
+ IF(CLOG_BUILD_TESTS)
+-  # ---[ Build google test
+-  IF(NOT TARGET gtest)
+-    IF(MSVC AND NOT CLOG_RUNTIME_TYPE STREQUAL "static")
+-      SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+-    ENDIF()
+-    ADD_SUBDIRECTORY(
+-      "${GOOGLETEST_SOURCE_DIR}"
+-      "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest")
+-  ENDIF()
+-
+   ADD_EXECUTABLE(clog-test test/clog.cc)
+   SET_TARGET_PROPERTIES(clog-test PROPERTIES
+     CXX_STANDARD 11
+diff --git a/deps/clog/include/clog.h b/deps/clog/include/clog.h
+index 4143761..aa9000f 100644
+--- a/deps/clog/include/clog.h
++++ b/deps/clog/include/clog.h
+@@ -11,16 +11,6 @@
+ #define CLOG_INFO 4
+ #define CLOG_DEBUG 5
+ 
+-#ifndef CLOG_VISIBILITY
+-	#if defined(__ELF__)
+-		#define CLOG_VISIBILITY __attribute__((__visibility__("internal")))
+-	#elif defined(__MACH__)
+-		#define CLOG_VISIBILITY __attribute__((__visibility__("hidden")))
+-	#else
+-		#define CLOG_VISIBILITY
+-	#endif
+-#endif
+-
+ #ifndef CLOG_ARGUMENTS_FORMAT
+ 	#if defined(__GNUC__)
+ 		#define CLOG_ARGUMENTS_FORMAT __attribute__((__format__(__printf__, 1, 2)))
+@@ -33,11 +23,11 @@
+ extern "C" {
+ #endif
+ 
+-CLOG_VISIBILITY void clog_vlog_debug(const char* module, const char* format, va_list args);
+-CLOG_VISIBILITY void clog_vlog_info(const char* module, const char* format, va_list args);
+-CLOG_VISIBILITY void clog_vlog_warning(const char* module, const char* format, va_list args);
+-CLOG_VISIBILITY void clog_vlog_error(const char* module, const char* format, va_list args);
+-CLOG_VISIBILITY void clog_vlog_fatal(const char* module, const char* format, va_list args);
++void clog_vlog_debug(const char* module, const char* format, va_list args);
++void clog_vlog_info(const char* module, const char* format, va_list args);
++void clog_vlog_warning(const char* module, const char* format, va_list args);
++void clog_vlog_error(const char* module, const char* format, va_list args);
++void clog_vlog_fatal(const char* module, const char* format, va_list args);
+ 
+ #define CLOG_DEFINE_LOG_DEBUG(log_debug_function_name, module, level) \
+ 	CLOG_ARGUMENTS_FORMAT \
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 5e4d16e24a..74e51ec61e 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -56,14 +56,14 @@
 (define-public a2ps
   (package
     (name "a2ps")
-    (version "4.15.3")
+    (version "4.15.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/a2ps/a2ps-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1izpmbk3i66g8cn1bd3kdpk72vxn5ggy329xjvag5jsdxgh823nh"))
+                "1mvd41xvcy8vk91nndzifasq600kzlswl1379bhnpn49pa23y1ja"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove timestamp from the installed 'README' file.
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index f265e7cd6e..3e7704bf48 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -1258,6 +1258,7 @@ Password-Authenticated Key Exchange algorithm.")
      (list python-automat
            python-idna
            python-incremental
+           python-pyopenssl
            python-service-identity
            python-twisted
            python-zope-interface))
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index fcb7a8db1d..8714940d1c 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -22,6 +22,7 @@
 ;;; Copyright © 2022 zamfofex <zamfofex@twdb.moe>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2022 Andy Tai <atai@atai.org>
+;;; Copyright © 2023 Eidvilas Markevičius <markeviciuseidvilas@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -173,7 +174,7 @@ based command language.")
 (define-public kakoune
   (package
     (name "kakoune")
-    (version "2021.11.08")
+    (version "2022.10.31")
     (source
      (origin
        (method url-fetch)
@@ -181,7 +182,7 @@ based command language.")
                            "releases/download/v" version "/"
                            "kakoune-" version ".tar.bz2"))
        (sha256
-        (base32 "1x5mvmpf0rgmr2xdw5wjn4hr6qd8yvj0zx588fi324x1knfqhc5a"))))
+        (base32 "12z5wka649xycclbs94bfy2yyln2172dz0zycxsxr384r5i7ncgv"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index f516e975c1..b7965ea670 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -213,65 +213,57 @@ features including, tables, builtin image display, bookmarks, SSL and more.")
 (define-public luakit
   (package
     (name "luakit")
-    (version "2.3")
+    (version "2.3.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/luakit/luakit")
-                     (commit version)))
+                    (url "https://github.com/luakit/luakit")
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1khbn7dpizkznnwkw7rcfhf72dnd1nazk7dwb4rkh9i97b53mf1y"))))
-    (inputs
-     `(("lua-5.1" ,lua-5.1)
-       ("gtk+" ,gtk+)
-       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("glib-networking" ,glib-networking)
-       ("lua5.1-filesystem" ,lua5.1-filesystem)
-       ("luajit" ,luajit)
-       ("webkitgtk" ,webkitgtk-with-libsoup2)
-       ("sqlite" ,sqlite)))
-    (native-inputs
-     (list pkg-config))
+                "19z6idmjz6y7xmjpqgw65mdfi65lyvy06819dj5bb7rad63v5542"))))
     (build-system glib-or-gtk-build-system)
     (arguments
-     `(#:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list
-          "CC=gcc"
-          "LUA_BIN_NAME=lua"
-          "DEVELOPMENT_PATHS=0"
-          (string-append "PREFIX=" out)
-          (string-append "XDGPREFIX=" out "/etc/xdg")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'lfs-workaround
-           (lambda _
-             (setenv "LUA_CPATH"
-                     (string-append
-                      (assoc-ref %build-inputs "lua5.1-filesystem")
-                      "/lib/lua/5.1/?.so;;"))
-             #t))
-         (add-before 'build 'set-version
-           (lambda _
-             (setenv "VERSION_FROM_GIT" ,(package-version this-package))
-             #t))
-         (delete 'configure)
-         (delete 'check)
-         (add-after 'install 'wrap
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((luakit (assoc-ref outputs "out"))
-                    (lua5.1-filesystem (assoc-ref inputs "lua5.1-filesystem") )
-                    (gtk (assoc-ref inputs "gtk+"))
-                    (gtk-share (string-append gtk "/share")))
-               (wrap-program (string-append luakit "/bin/luakit")
-                 `("LUA_CPATH" prefix
-                   (,(string-append lua5.1-filesystem
-                                    "/lib/lua/5.1/?.so;;")))
-                 `("XDG_CONFIG_DIRS" prefix
-                   (,(string-append luakit "/etc/xdg/"))))
-               #t))))))
+     (list
+      #:tests? #false                   ;require un-packaged "luassert"
+      #:test-target "run-tests"
+      #:make-flags
+      #~(list (string-append "CC=" #$(cc-for-target))
+              "LUA_BIN_NAME=lua"
+              "DEVELOPMENT_PATHS=0"
+              (string-append "PREFIX=" #$output)
+              (string-append "XDGPREFIX=" #$output "/etc/xdg"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'lfs-workaround
+            (lambda _
+              (setenv "LUA_CPATH"
+                      (string-append #$(this-package-input "lua5.1-filesystem")
+                                     "/lib/lua/5.1/?.so;;"))))
+          (add-before 'build 'set-version
+            (lambda _
+              (setenv "VERSION_FROM_GIT" #$version)))
+          (delete 'configure)
+          (add-after 'install 'wrap
+            (lambda _
+              (wrap-program (string-append #$output "/bin/luakit")
+                `("LUA_CPATH" prefix
+                  (,(string-append #$(this-package-input "lua5.1-filesystem")
+                                   "/lib/lua/5.1/?.so;;")))
+                `("XDG_CONFIG_DIRS" prefix
+                  (,(string-append #$output "/etc/xdg/")))))))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list glib-networking
+           gsettings-desktop-schemas
+           gtk+
+           lua-5.1
+           lua5.1-filesystem
+           luajit
+           sqlite
+           webkitgtk-with-libsoup2))
     (synopsis "Fast, lightweight, and simple browser based on WebKit")
     (description "Luakit is a fast, lightweight, and simple to use
 micro-browser framework extensible by Lua using the WebKit web content engine
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index cd0c122fca..f1fcc68d5f 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -748,7 +748,7 @@ desktop environment.")
 (define-public icewm
   (package
     (name "icewm")
-    (version "3.3.2")
+    (version "3.3.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -756,7 +756,7 @@ desktop environment.")
                     version "/icewm-" version ".tar.lz"))
               (sha256
                (base32
-                "1mp1xl64sin3d4nkh19qmnic1c9qcwf9v7mkzji76pg3mzd823jg"))))
+                "0wyg7lk65kf03brhzrbk158sr8d5cqny5qcyrwypnzpp0chcff71"))))
     (build-system gnu-build-system)
     (native-inputs (list pkg-config))
     (inputs (list fontconfig
@@ -1884,7 +1884,7 @@ core/thread.")
 (define-public wlr-randr
   (package
     (name "wlr-randr")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
      (origin
        (method git-fetch)
@@ -1893,7 +1893,7 @@ core/thread.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0d44r4schknfc3g09y0kjbhl62zkynv6hi1z4zqc9ic5fhav3r15"))))
+        (base32 "0cj24fb6s7n8nphvhrp8ldrivjdcrjw64i5v9rsfb6z80q4qg548"))))
     (build-system meson-build-system)
     (inputs (list wayland))
     (native-inputs (list pkg-config))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index dfc7571e55..e8eae72aa2 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021 Hui Lu <luhuins@163.com>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 muradm <mail@muradm.net>
 ;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2022 Justin Veilleux <terramorpha@cock.li>
@@ -1428,7 +1428,11 @@ the tty to run, among other things."
     (list (shepherd-service
            (documentation "Run libc's name service cache daemon (nscd).")
            (provision '(nscd))
-           (requirement '(user-processes))
+
+           ;; Logs are written with syslog(3), which writes to /dev/console
+           ;; when nobody's listening--ugly.  Thus, wait for syslogd.
+           (requirement '(user-processes syslogd))
+
            (start #~(make-forkexec-constructor
                      (list #$nscd "-f" #$nscd.conf "--foreground")
 
@@ -1497,31 +1501,36 @@ given @var{config}---an @code{<nscd-configuration>} object.  @xref{Name
 Service Switch}, for an example."
   (service nscd-service-type config))
 
-;; Snippet adapted from the GNU inetutils manual.
+;;; Snippet adapted from the GNU inetutils manual.
 (define %default-syslog.conf
-  (plain-file "syslog.conf" "
-     # Log all error messages, authentication messages of
-     # level notice or higher and anything of level err or
-     # higher to the console.
-     # Don't log private authentication messages!
-     *.alert;auth.notice;authpriv.none      -/dev/console
-
-     # Log anything (except mail) of level info or higher.
-     # Don't log private authentication messages!
-     *.info;mail.none;authpriv.none         -/var/log/messages
-
-     # Log \"debug\"-level entries and nothing else.
-     *.=debug                               -/var/log/debug
-
-     # Same, in a different place.
-     *.info;mail.none;authpriv.none         -/dev/tty12
-
-     # The authpriv file has restricted access.
-     # 'fsync' the file after each line (hence the lack of a leading dash).
-     authpriv.*                              /var/log/secure
-
-     # Log all the mail messages in one place.
-     mail.*                                 -/var/log/maillog
+  (plain-file "syslog.conf" "\
+# See info '(inetutils) syslogd invocation' for the documentation
+# of the syslogd configuration syntax.
+
+# Log all error messages, authentication messages of
+# level notice or higher and anything of level err or
+# higher to the console.
+# Don't log private authentication messages!
+*.alert;auth.notice;authpriv.none      -/dev/console
+
+# Log anything (except mail) of level info or higher.
+# Don't log private authentication messages!
+*.info;mail.none;authpriv.none         -/var/log/messages
+
+# Log \"debug\"-level entries and nothing else.
+*.=debug                               -/var/log/debug
+
+# Same, in a different place.
+*.info;mail.none;authpriv.none         -/dev/tty12
+
+# The authpriv file has restricted access.
+# 'fsync' the file after each line (hence the lack of a leading dash).
+# Also include unprivileged auth logs of info or higher level
+# to conveniently gather the authentication data at the same place.
+authpriv.*;auth.info                    /var/log/secure
+
+# Log all the mail messages in one place.
+mail.*                                 -/var/log/maillog
 "))
 
 (define-record-type* <syslog-configuration>
@@ -1532,30 +1541,57 @@ Service Switch}, for an example."
   (config-file          syslog-configuration-config-file
                         (default %default-syslog.conf)))
 
-(define syslog-service-type
-  (shepherd-service-type
-   'syslog
-   (lambda (config)
-     (define config-file
-       (syslog-configuration-config-file config))
+;;; Note: a static file name is used for syslog.conf so that the reload action
+;;; work as intended.
+(define syslog.conf "/etc/syslog.conf")
 
-     (shepherd-service
-      (documentation "Run the syslog daemon (syslogd).")
-      (provision '(syslogd))
-      (requirement '(user-processes))
-      (actions (list (shepherd-configuration-action config-file)))
-      (start #~(let ((spawn (make-forkexec-constructor
-                             (list #$(syslog-configuration-syslogd config)
-                                   "--rcfile" #$config-file)
-                             #:pid-file "/var/run/syslog.pid")))
-                 (lambda ()
-                   ;; Set the umask such that file permissions are #o640.
-                   (let ((mask (umask #o137))
-                         (pid  (spawn)))
-                     (umask mask)
-                     pid))))
-      (stop #~(make-kill-destructor))))
-   (syslog-configuration)
+(define (syslog-etc configuration)
+  (match-record configuration <syslog-configuration>
+    (config-file)
+    (list `(,(basename syslog.conf) ,config-file))))
+
+(define (syslog-shepherd-service config)
+  (define config-file
+    (syslog-configuration-config-file config))
+
+  (shepherd-service
+   (documentation "Run the syslog daemon (syslogd).")
+   (provision '(syslogd))
+   (requirement '(user-processes))
+   (actions
+    (list (shepherd-configuration-action syslog.conf)
+          (shepherd-action
+           (name 'reload)
+           (documentation "Reload the configuration file from disk.")
+           (procedure
+            #~(lambda (pid)
+                (if pid
+                    (begin
+                      (kill pid SIGHUP)
+                      (display #$(G_ "Service syslog has been asked to \
+reload its settings file.")))
+                    (display #$(G_ "Service syslog is not running."))))))))
+   ;; Note: a static file name is used for syslog.conf so that the reload
+   ;; action work as intended.
+   (start #~(let ((spawn (make-forkexec-constructor
+                          (list #$(syslog-configuration-syslogd config)
+                                #$(string-append "--rcfile=" syslog.conf))
+                          #:pid-file "/var/run/syslog.pid")))
+              (lambda ()
+                ;; Set the umask such that file permissions are #o640.
+                (let ((mask (umask #o137))
+                      (pid  (spawn)))
+                  (umask mask)
+                  pid))))
+   (stop #~(make-kill-destructor))))
+
+(define syslog-service-type
+  (service-type
+   (name 'syslog)
+   (default-value (syslog-configuration))
+   (extensions (list (service-extension shepherd-root-service-type
+                                        (compose list syslog-shepherd-service))
+                     (service-extension etc-service-type syslog-etc)))
    (description "Run the syslog daemon, @command{syslogd}, which is
 responsible for logging system messages.")))
 
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index b7bd1e587e..e8e42d3b7b 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2015, 2016, 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015-2016, 2022-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
@@ -167,7 +167,8 @@ host	all	all	::1/128 	md5"))
 (define-record-type* <postgresql-configuration>
   postgresql-configuration make-postgresql-configuration
   postgresql-configuration?
-  (postgresql         postgresql-configuration-postgresql) ;file-like
+  (postgresql         postgresql-configuration-postgresql ;file-like
+                      (default postgresql-10))
   (port               postgresql-configuration-port
                       (default 5432))
   (locale             postgresql-configuration-locale
@@ -308,11 +309,12 @@ host	all	all	::1/128 	md5"))
                              (call-with-input-file #$pid-file read))
                             (_ #t))))))
        (list (shepherd-service
-              (provision '(postgres))
+              (provision '(postgres postgresql))
               (documentation "Run the PostgreSQL daemon.")
               (requirement '(user-processes loopback syslogd))
               (modules `((ice-9 match)
                          ,@%default-modules))
+              (actions (list (shepherd-configuration-action config-file)))
               (start (action "start"))
               (stop (action "stop"))))))))
 
@@ -329,8 +331,7 @@ host	all	all	::1/128 	md5"))
           (service-extension
            profile-service-type
            (compose list postgresql-configuration-postgresql))))
-   (default-value (postgresql-configuration
-                   (postgresql postgresql-10)))
+   (default-value (postgresql-configuration))
    (description "Run the PostgreSQL database server.")))
 
 (define-deprecated (postgresql-service #:key (postgresql postgresql)
@@ -595,6 +596,8 @@ port=" (number->string port) "
          (provision '(mysql))
          (requirement '(user-processes))
          (documentation "Run the MySQL server.")
+         (actions (list (shepherd-configuration-action
+                         (mysql-configuration-file config))))
          (start (let ((mysql (mysql-configuration-mysql config))
                       (extra-env (mysql-configuration-extra-environment config))
                       (my.cnf (mysql-configuration-file config)))
@@ -752,6 +755,7 @@ port=" (number->string port) "
               (provision '(redis))
               (documentation "Run the Redis daemon.")
               (requirement '(user-processes syslogd))
+              (actions (list (shepherd-configuration-action config-file)))
               (start #~(make-forkexec-constructor
                         '(#$(file-append redis "/bin/redis-server")
                           #$config-file)
diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
index 2ff9f90cd0..f45fc99c69 100644
--- a/gnu/services/dns.scm
+++ b/gnu/services/dns.scm
@@ -622,6 +622,7 @@
             (documentation "Run the Knot DNS daemon.")
             (provision '(knot dns))
             (requirement '(networking))
+            (actions (list (shepherd-configuration-action config-file)))
             (start #~(make-forkexec-constructor
                        (list (string-append #$knot "/sbin/knotd")
                              "-c" #$config-file)))
diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm
index e489ce2b9a..48594015fc 100644
--- a/gnu/services/herd.scm
+++ b/gnu/services/herd.scm
@@ -282,14 +282,10 @@ returns a shepherd <service> object."
                          `(primitive-load ,file))
                        files))))
 
-(define (load-services/safe files)
-  "This is like 'load-services', but make sure only the subset of FILES that
-can be safely reloaded is actually reloaded."
-  (eval-there `(let ((services (map primitive-load ',files)))
-                 ;; Since version 0.5.0 of the Shepherd, registering a service
-                 ;; that has the same name as an already-registered service
-                 ;; makes it a "replacement" of that previous service.
-                 (apply register-services services))))
+(define load-services/safe
+  ;; Deprecated.  It used to behave differently before service replacements
+  ;; were a thing.
+  load-services)
 
 (define* (start-service name #:optional (arguments '()))
   (invoke-action name 'start arguments
diff --git a/gnu/services/rsync.scm b/gnu/services/rsync.scm
index d456911563..aeb4275031 100644
--- a/gnu/services/rsync.scm
+++ b/gnu/services/rsync.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021, 2023 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -225,13 +225,15 @@ please use 'modules' instead~%")))
          (pid-file    (rsync-configuration-pid-file config))
          (port-number (rsync-configuration-port-number config))
          (user        (rsync-configuration-user config))
-         (group       (rsync-configuration-group config)))
+         (group       (rsync-configuration-group config))
+         (config-file (rsync-config-file config)))
     (list (shepherd-service
            (provision '(rsync))
            (documentation "Run rsync daemon.")
+           (actions (list (shepherd-configuration-action config-file)))
            (start #~(make-forkexec-constructor
                      (list (string-append #$rsync "/bin/rsync")
-                           "--config" #$(rsync-config-file config)
+                           "--config" #$config-file
                            "--daemon")
                      #:pid-file #$pid-file
                      #:user #$user
diff --git a/gnu/tests.scm b/gnu/tests.scm
index ca677d315b..96ecb40ea2 100644
--- a/gnu/tests.scm
+++ b/gnu/tests.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016-2020, 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016-2020, 2022-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
@@ -88,6 +88,61 @@
     (with-extensions extensions
       gexp)))
 
+(define (marionette-program device imported-modules extensions)
+  "Return the program that runs the marionette REPL on DEVICE.  Ensure
+IMPORTED-MODULES and EXTENSIONS are accessible from the REPL."
+  (define code
+    (with-imported-modules-and-extensions
+        `((guix build utils)
+          (guix build syscalls)
+          ,@imported-modules)
+        extensions
+      #~(begin
+          (use-modules (ice-9 match)
+                       (ice-9 binary-ports))
+
+          (define (self-quoting? x)
+            (letrec-syntax ((one-of (syntax-rules ()
+                                      ((_) #f)
+                                      ((_ pred rest ...)
+                                       (or (pred x)
+                                           (one-of rest ...))))))
+              (one-of symbol? string? keyword? pair? null? array?
+                      number? boolean? char?)))
+
+          (let ((repl    (open-file #$device "r+0"))
+                (console (open-file "/dev/console" "r+0")))
+            ;; Redirect output to the console.
+            (close-fdes 1)
+            (close-fdes 2)
+            (dup2 (fileno console) 1)
+            (dup2 (fileno console) 2)
+            (close-port console)
+
+            (display 'ready repl)
+            (let loop ()
+              (newline repl)
+
+              (match (read repl)
+                ((? eof-object?)
+                 (primitive-exit 0))
+                (expr
+                 (catch #t
+                   (lambda ()
+                     (let ((result (primitive-eval expr)))
+                       (write (if (self-quoting? result)
+                                  result
+                                  (object->string result))
+                              repl)))
+                   (lambda (key . args)
+                     (print-exception (current-error-port)
+                                      (stack-ref (make-stack #t) 1)
+                                      key args)
+                     (write #f repl)))))
+              (loop))))))
+
+  (program-file "marionette-repl.scm" code))
+
 (define (marionette-shepherd-service config)
   "Return the Shepherd service for the marionette REPL"
   (match config
@@ -101,57 +156,10 @@
 
             (modules '((ice-9 match)
                        (srfi srfi-9 gnu)))
-            (start
-             (with-imported-modules-and-extensions imported-modules extensions
-               #~(lambda ()
-                   (define (self-quoting? x)
-                     (letrec-syntax ((one-of (syntax-rules ()
-                                               ((_) #f)
-                                               ((_ pred rest ...)
-                                                (or (pred x)
-                                                    (one-of rest ...))))))
-                       (one-of symbol? string? keyword? pair? null? array?
-                               number? boolean? char?)))
-
-                   (match (primitive-fork)
-                     (0
-                      (dynamic-wind
-                        (const #t)
-                        (lambda ()
-                          (let ((repl    (open-file #$device "r+0"))
-                                (console (open-file "/dev/console" "r+0")))
-                            ;; Redirect output to the console.
-                            (close-fdes 1)
-                            (close-fdes 2)
-                            (dup2 (fileno console) 1)
-                            (dup2 (fileno console) 2)
-                            (close-port console)
-
-                            (display 'ready repl)
-                            (let loop ()
-                              (newline repl)
-
-                              (match (read repl)
-                                ((? eof-object?)
-                                 (primitive-exit 0))
-                                (expr
-                                 (catch #t
-                                   (lambda ()
-                                     (let ((result (primitive-eval expr)))
-                                       (write (if (self-quoting? result)
-                                                  result
-                                                  (object->string result))
-                                              repl)))
-                                   (lambda (key . args)
-                                     (print-exception (current-error-port)
-                                                      (stack-ref (make-stack #t) 1)
-                                                      key args)
-                                     (write #f repl)))))
-                              (loop))))
-                        (lambda ()
-                          (primitive-exit 1))))
-                     (pid
-                      pid)))))
+            (start #~(make-forkexec-constructor
+                      (list #$(marionette-program device
+                                                  imported-modules
+                                                  extensions))))
             (stop #~(make-kill-destructor)))))))
 
 (define marionette-service-type
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 97edbbc6ad..5584628514 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -148,7 +148,7 @@ Otherwise assume that there is no password for root."
             (marionette-eval
              `(begin
                 (use-modules (gnu services herd))
-                (start 'user-processes)
+                (start-service 'user-processes)
                 ((@@ (gnu services herd) eval-there)
                  '(let ((result (read (current-input-port))))
                     (if (eof-object? result)
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 4e0e274e66..57e9df4421 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
@@ -316,7 +316,7 @@ such as for RAID systems."
             ;; Wait for tty1.
             (marionette-eval '(begin
                                 (use-modules (gnu services herd))
-                                (start 'term-tty1))
+                                (start-service 'term-tty1))
                              marionette)
 
             (when #$(->bool script)
diff --git a/guix/packages.scm b/guix/packages.scm
index bce82ab3a3..e26602d589 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1234,11 +1234,14 @@ input list."
   "Return all source origins associated with PACKAGE; including origins in
 PACKAGE's inputs and patches."
   (define (expand source)
-    (cons
-     source
-     (filter origin? (origin-patches source))))
+    (cons source
+          (filter origin? (origin-patches source))))
 
-  `(,@(or (and=> (package-source package) expand) '())
+  `(,@(match (package-source package)
+        ((? origin? origin)
+         (expand origin))
+        (_
+         '()))
     ,@(filter-map (match-lambda
                    ((_ (? origin? orig) _ ...)
                     orig)
diff --git a/tests/guix-archive.sh b/tests/guix-archive.sh
index 00b87ff0ac..0866b5a4d8 100644
--- a/tests/guix-archive.sh
+++ b/tests/guix-archive.sh
@@ -44,7 +44,7 @@ cmp "$archive" "$archive_alt"
 # Check the exit value upon import.
 guix archive --import < "$archive"
 
-! guix archive something-that-does-not-exist
+guix archive --export something-that-does-not-exist && false
 
 # This one must not be listed as missing.
 guix build guile-bootstrap > "$archive"
@@ -61,7 +61,7 @@ cmp "$archive" "$archive_alt"
 
 # This is not a valid store file name, so an error.
 echo something invalid > "$archive"
-! guix archive --missing < "$archive"
+guix archive --missing < "$archive" && false
 
 # Check '--extract'.
 guile -c "(use-modules (guix serialization))
@@ -77,4 +77,6 @@ guix archive -t < "$archive" | grep "^D /share/guile"
 guix archive -t < "$archive" | grep "^x /bin/guile"
 guix archive -t < "$archive" | grep "^r /share/guile.*/boot-9\.scm"
 
-! echo foo | guix archive --authorize
+echo foo | guix archive --authorize && false
+
+exit 0
diff --git a/tests/guix-build-branch.sh b/tests/guix-build-branch.sh
index 7bf6a318ca..2d3b115e78 100644
--- a/tests/guix-build-branch.sh
+++ b/tests/guix-build-branch.sh
@@ -58,4 +58,6 @@ guix gc -R "$v0_1_0_drv" | grep guile-gcrypt-9e3eacd
 test "$v0_1_0_drv" != "$latest_drv"
 test "$v0_1_0_drv" != "$orig_drv"
 
-! guix build guix --with-commit=guile-gcrypt=000 -d
+guix build guix --with-commit=guile-gcrypt=000 -d && false
+
+exit 0
diff --git a/tests/guix-build.sh b/tests/guix-build.sh
index 9cbf8fe26d..2c59177c86 100644
--- a/tests/guix-build.sh
+++ b/tests/guix-build.sh
@@ -25,7 +25,7 @@
 guix build --version
 
 # Should fail.
-! guix build -e +
+guix build -e + && false
 
 # Source-less packages are accepted; they just return nothing.
 guix build -e '(@ (gnu packages bootstrap) %bootstrap-glibc)' -S
@@ -92,7 +92,7 @@ cat > "$module_dir/foo.scm" <<EOF
 (use-modules (guix))
 ) ;extra closing paren
 EOF
-! guix build -f "$module_dir/foo.scm" 2> "$module_dir/stderr"
+guix build -f "$module_dir/foo.scm" 2> "$module_dir/stderr" && false
 grep "read error" "$module_dir/stderr"
 rm "$module_dir/stderr" "$module_dir/foo.scm"
 
@@ -199,7 +199,7 @@ cat > "$module_dir/foo.scm" <<EOF
     (inputs (quasiquote (("sed" ,sed))))))  ;unbound variable
 EOF
 
-! guix build package-with-something-wrong -n
+guix build package-with-something-wrong -n && false
 guix build package-with-something-wrong -n 2> "$module_dir/err" || true
 grep "unbound" "$module_dir/err"		     # actual error
 grep "forget.*(gnu packages base)" "$module_dir/err" # hint
@@ -240,7 +240,7 @@ cat > "$module_dir/cc-user.scm" <<EOF
 (define-module (cc-user))
 (make-thing 42)
 EOF
-! guix build -f "$module_dir/cc-user.scm" -n 2> "$module_dir/err"
+guix build -f "$module_dir/cc-user.scm" -n 2> "$module_dir/err" && false
 cat "$module_dir/err"
 grep "make-thing.*unbound" "$module_dir/err"		 # actual error
 grep "forget.*(bb-public)" "$module_dir/err"		 # hint
@@ -270,7 +270,7 @@ test "`guix build --log-file guile-bootstrap`" = "$log"
 test "`guix build --log-file $out`" = "$log"
 
 # Should fail because the name/version combination could not be found.
-! guix build hello-0.0.1 -n
+guix build hello-0.0.1 -n && false
 
 # Keep a symlink to the result, registered as a root.
 result="t-result-$$"
@@ -279,7 +279,7 @@ guix build -r "$result"					\
 test -x "$result/bin/guile"
 
 # Should fail, because $result already exists.
-! guix build -r "$result" -e '(@@ (gnu packages bootstrap) %bootstrap-guile)'
+guix build -r "$result" -e '(@@ (gnu packages bootstrap) %bootstrap-guile)' && false
 
 rm -f "$result"
 
@@ -323,7 +323,7 @@ drv2=`guix build hello -d --with-input=gcc=gcc-toolchain`
 test "$drv1" != "$drv2"
 guix gc -R "$drv2" | grep `guix build -d gcc-toolchain`
 
-! guix build guile --with-input=libunistring=something-really-silly
+guix build guile --with-input=libunistring=something-really-silly && false
 
 # Deprecated/superseded packages.
 test "`guix build superseded -d`" = "`guix build bar -d`"
@@ -331,8 +331,8 @@ test "`guix build superseded -d`" = "`guix build bar -d`"
 # Parsing package names and versions.
 guix build -n time		# PASS
 guix build -n time@1.9		# PASS, version found
-! guix build -n time@3.2	# FAIL, version not found
-! guix build -n something-that-will-never-exist # FAIL
+guix build -n time@3.2 && false	# FAIL, version not found
+guix build -n something-that-will-never-exist && false	# FAIL
 
 # Invoking a monadic procedure.
 guix build -e "(begin
@@ -404,4 +404,6 @@ export GUIX_BUILD_OPTIONS
 guix build emacs
 
 GUIX_BUILD_OPTIONS="--something-completely-crazy"
-! guix build emacs
+guix build emacs && false
+
+exit 0
diff --git a/tests/guix-daemon.sh b/tests/guix-daemon.sh
index 4b09c8c162..d85727c955 100644
--- a/tests/guix-daemon.sh
+++ b/tests/guix-daemon.sh
@@ -224,7 +224,7 @@ daemon_pid=$!
 GUIX_DAEMON_SOCKET="guix://$tcp_socket"
 export GUIX_DAEMON_SOCKET
 
-! guix gc
+guix gc && false
 
 unset GUIX_DAEMON_SOCKET
 kill "$daemon_pid"
diff --git a/tests/guix-download.sh b/tests/guix-download.sh
index 5475d43e60..f4cb335eef 100644
--- a/tests/guix-download.sh
+++ b/tests/guix-download.sh
@@ -23,11 +23,11 @@
 guix download --version
 
 # Make sure it fails here.
-! guix download http://does.not/exist
+guix download http://does.not/exist && false
 
-! guix download unknown://some/where;
+guix download unknown://some/where && false
 
-! guix download /does-not-exist
+guix download /does-not-exist && false
 
 # This one should succeed.
 guix download "file://$abs_top_srcdir/README"
@@ -43,4 +43,6 @@ GUIX_DAEMON_SOCKET="/nowhere" guix download -o "$output" \
 cmp "$output" "$abs_top_srcdir/README"
 
 # This one should fail.
-! guix download "file:///does-not-exist" "file://$abs_top_srcdir/README"
+guix download "file:///does-not-exist" "file://$abs_top_srcdir/README" && false
+
+exit 0
diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh
index a30d6b7fb2..a3bc1ab572 100644
--- a/tests/guix-environment-container.sh
+++ b/tests/guix-environment-container.sh
@@ -260,16 +260,15 @@ guix shell --bootstrap guile-bootstrap --container \
      /usr/bin/guile --version
 
 # A dangling symlink causes the command to fail.
-! guix shell --bootstrap -CS /usr/bin/python=bin/python guile-bootstrap -- exit
+guix shell --bootstrap -CS /usr/bin/python=bin/python guile-bootstrap -- exit && false
 
 # An invalid symlink spec causes the command to fail.
-! guix shell --bootstrap -CS bin/guile=/usr/bin/guile guile-bootstrap -- exit
+guix shell --bootstrap -CS bin/guile=/usr/bin/guile guile-bootstrap -- exit && false
 
 # Check whether '--nesting' works.
 guix build hello -d
 env="$(type -P pre-inst-env)"
-if guix shell -C -D guix -- "$env" guix build hello -d # cannot work
-then false; else true; fi
+guix shell -C -D guix -- "$env" guix build hello -d && false # cannot work
 hello_drv="$(guix build hello -d)"
 hello_drv_nested="$(cd "$(dirname env)" && guix shell --bootstrap -CW -D guix -- "$env" guix build hello -d)"
 test "$hello_drv" = "$hello_drv_nested"
diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh
index 95fe95b437..1424ea9a88 100644
--- a/tests/guix-environment.sh
+++ b/tests/guix-environment.sh
@@ -60,7 +60,7 @@ guix environment --bootstrap --ad-hoc guile-bootstrap --pure	\
 grep '^PATH=' "$tmpdir/a"
 grep '^GUIX_TEST_ABC=' "$tmpdir/a"
 grep '^GUIX_TEST_DEF=' "$tmpdir/a"
-! grep '^GUIX_TEST_XYZ=' "$tmpdir/a"
+grep '^GUIX_TEST_XYZ=' "$tmpdir/a" && false
 
 # Make sure the exit value is preserved.
 if guix environment --bootstrap --ad-hoc guile-bootstrap --pure \
@@ -207,7 +207,7 @@ then
     done
 
     # 'make-boot0' itself must not be listed.
-    ! guix gc --references "$profile" | grep make-boot0
+    guix gc --references "$profile" | grep make-boot0 && false
 
     # Make sure that the shell spawned with '--exec' sees the same environment
     # as returned by '--search-paths'.
@@ -224,7 +224,7 @@ then
     test "x$make_boot0_debug" != "x"
 
     # Make sure the "debug" output is not listed.
-    ! guix gc --references "$profile" | grep "$make_boot0_debug"
+    guix gc --references "$profile" | grep "$make_boot0_debug" && false
 
     # Compute the build environment for the initial GNU Make, but add in the
     # bootstrap Guile as an ad-hoc addition.
diff --git a/tests/guix-gc.sh b/tests/guix-gc.sh
index f40619876d..675a13115d 100644
--- a/tests/guix-gc.sh
+++ b/tests/guix-gc.sh
@@ -36,11 +36,11 @@ unset out
 # For some operations, passing extra arguments is an error.
 for option in "" "-C 500M" "--verify" "--optimize" "--list-roots"
 do
-    ! guix gc $option whatever
+    guix gc $option whatever && false
 done
 
 # This should fail.
-! guix gc --verify=foo
+guix gc --verify=foo && false
 
 # Check the references of a .drv.
 drv="`guix build guile-bootstrap -d`"
@@ -51,7 +51,7 @@ guix gc --references "$drv" | grep -e -bash
 guix gc --references "$out"
 guix gc --references "$out/bin/guile"
 
-! guix gc --references /dev/null;
+guix gc --references /dev/null && false
 
 # Check derivers.
 guix gc --derivers "$out" | grep "$drv"
@@ -62,7 +62,7 @@ test -f "$drv"
 
 guix gc --list-dead | grep "$drv"
 guix gc --delete "$drv"
-! test -f "$drv"
+test ! -f "$drv"
 
 # Add a .drv, register it as a root.
 drv="`guix build --root=guix-gc-root lsh -d`"
@@ -71,18 +71,18 @@ test -f "$drv" && test -L guix-gc-root
 guix gc --list-roots | grep "$PWD/guix-gc-root"
 
 guix gc --list-live | grep "$drv"
-! guix gc --delete "$drv";
+guix gc --delete "$drv" && false
 
 rm guix-gc-root
 guix gc --list-dead | grep "$drv"
 guix gc --delete "$drv"
-! test -f "$drv"
+test ! -f "$drv"
 
 # Try a random collection.
 guix gc -C 1KiB
 
 # Check trivial error cases.
-! guix gc --delete /dev/null;
+guix gc --delete /dev/null && false
 
 # Bug #19757
 out="`guix build guile-bootstrap`"
@@ -90,14 +90,14 @@ test -d "$out"
 
 guix gc --delete "$out"
 
-! test -d "$out"
+test ! -d "$out"
 
 out="`guix build guile-bootstrap`"
 test -d "$out"
 
 guix gc --delete "$out/"
 
-! test -d "$out"
+test ! -d "$out"
 
 out="`guix build guile-bootstrap`"
 test -d "$out"
diff --git a/tests/guix-git-authenticate.sh b/tests/guix-git-authenticate.sh
index 2b90d8a4af..ec89f941e6 100644
--- a/tests/guix-git-authenticate.sh
+++ b/tests/guix-git-authenticate.sh
@@ -35,9 +35,9 @@ intro_signer="BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"
 cache_key="test-$$"
 
 # This must fail because the end commit is not a descendant of $intro_commit.
-! guix git authenticate "$intro_commit" "$intro_signer"	\
+guix git authenticate "$intro_commit" "$intro_signer"	\
      --cache-key="$cache_key" --stats			\
-     --end=9549f0283a78fe36f2d4ff2a04ef8ad6b0c02604
+     --end=9549f0283a78fe36f2d4ff2a04ef8ad6b0c02604 && false
 
 # The v1.2.0 commit is a descendant of $intro_commit and it satisfies the
 # authorization invariant.
@@ -59,8 +59,8 @@ guix git authenticate "$intro_commit" "$intro_signer"	\
      --end="$v1_0_0_commit"
 
 # This should fail because these commits lack '.guix-authorizations'.
-! guix git authenticate "$v1_0_0_commit" "$v1_0_0_signer" \
-       --cache-key="$cache_key" --end="$v1_0_1_commit"
+guix git authenticate "$v1_0_0_commit" "$v1_0_0_signer" \
+       --cache-key="$cache_key" --end="$v1_0_1_commit" && false
 
 # This should work thanks to '--historical-authorizations'.
 guix git authenticate "$v1_0_0_commit" "$v1_0_0_signer" 	\
diff --git a/tests/guix-graph.sh b/tests/guix-graph.sh
index e813e01c31..9824c6a65a 100644
--- a/tests/guix-graph.sh
+++ b/tests/guix-graph.sh
@@ -59,7 +59,7 @@ guix graph -t references guile-bootstrap | grep guile-bootstrap
 guix graph -e '(@ (gnu packages bootstrap) %bootstrap-guile)' \
     | grep guile-bootstrap
 
-! guix graph -e +
+guix graph -e + && false
 
 # Try passing store file names.
 
@@ -76,13 +76,13 @@ cmp "$tmpfile1" "$tmpfile2"
 # Try package transformation options.
 guix graph git | grep 'label = "openssl'
 guix graph git --with-input=openssl=libressl | grep 'label = "libressl'
-! guix graph git --with-input=openssl=libressl | grep 'label = "openssl'
+guix graph git --with-input=openssl=libressl | grep 'label = "openssl' && false
 
 # Try --load-path
 guix graph -L $module_dir dummy | grep 'label = "dummy'
 
 # Displaying shortest paths (or lack thereof).
-! guix graph --path emacs vim
+guix graph --path emacs vim && false
 
 path="\
 emacs
diff --git a/tests/guix-hash.sh b/tests/guix-hash.sh
index 8b03c7985d..e260396fd8 100644
--- a/tests/guix-hash.sh
+++ b/tests/guix-hash.sh
@@ -38,12 +38,12 @@ test `guix hash -H sha1 -f base64 /dev/null` = "2jmj7l5rSw0yVb/vlWAYkK/YBwk="
 test "`guix hash /dev/null "$abs_top_srcdir/README"`" = "`guix hash /dev/null ; guix hash "$abs_top_srcdir/README"`"
 
 # Zero files.
-! guix hash
+guix hash && false
 
 # idem as `cat /dev/null | git hash-object --stdin`
 test `guix hash -S git -H sha1 -f hex  /dev/null` = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
 
-! guix hash -H abcd1234 /dev/null
+guix hash -H abcd1234 /dev/null && false
 
 mkdir "$tmpdir"
 echo -n executable > "$tmpdir/exe"
@@ -61,11 +61,11 @@ test `guix hash -r "$tmpdir" 2>/dev/null` = 10k1lw41wyrjf9mxydi0is5nkpynlsvgslin
 test `guix hash -r "$tmpdir" -H sha512 2>/dev/null` = 301ra58c2vahczzxiyfin41mpyb0ljh4dh9zn3ijvwviaw1j40sfzw5skh9x945da88n3785ggifzig7acd6k72h0mpsc20m1f66m9n
 
 # Without '-r', this should fail.
-! guix hash "$tmpdir"
+guix hash "$tmpdir" && false
 
 # This should fail because /dev/null is a character device, which
 # the archive format doesn't support.
-! guix hash -S nar /dev/null
+guix hash -S nar /dev/null && false
 
 # Adding a .git directory
 mkdir "$tmpdir/.git"
@@ -80,5 +80,6 @@ test `guix hash -S nar $tmpdir -x` = 10k1lw41wyrjf9mxydi0is5nkpynlsvgslinics4ppi
 test `guix hash -S git $tmpdir -x` = 1m9yxz99g7askm88h6hzyv4g2bfv57rp5wvwp3iq5ypsplq1xkkk
 
 # Without '-r', this should fail.
-! guix hash "$tmpdir"
+guix hash "$tmpdir" && false
 
+exit 0
diff --git a/tests/guix-home.sh b/tests/guix-home.sh
index 11b068ca43..e9ef76c862 100644
--- a/tests/guix-home.sh
+++ b/tests/guix-home.sh
@@ -109,7 +109,7 @@ EOF
     guix home extension-graph "home.scm" | grep 'label = "home"'
 
     # There are no Shepherd services so the one below must fail.
-    ! guix home shepherd-graph "home.scm"
+    guix home shepherd-graph "home.scm" && false
 
     if container_supported
     then
@@ -118,17 +118,17 @@ EOF
         # TODO: Make container independent from external environment variables.
         SHELL=bash
 	guix home container home.scm -- true
-	! guix home container home.scm -- false
+	guix home container home.scm -- false && false
 	test "$(guix home container home.scm -- echo '$HOME')" = "$HOME"
 	guix home container home.scm -- cat '~/.config/test.conf' | \
 	    grep "the content of"
 	guix home container home.scm -- test -h '~/.bashrc'
 	test "$(guix home container home.scm -- id -u)" = 1000
-	! guix home container home.scm -- test -f '$HOME/sample/home.scm'
+	guix home container home.scm -- test -f '$HOME/sample/home.scm' && false
 	guix home container home.scm --expose="$PWD=$HOME/sample" -- \
 	     test -f '$HOME/sample/home.scm'
-	! guix home container home.scm --expose="$PWD=$HOME/sample" -- \
-	     rm -v '$HOME/sample/home.scm'
+	guix home container home.scm --expose="$PWD=$HOME/sample" -- \
+	     rm -v '$HOME/sample/home.scm' && false
     else
 	echo "'guix home container' test SKIPPED" >&2
     fi
@@ -206,8 +206,8 @@ EOF
 # the NEW content of bashrc-test-config.sh"
 
     # This file must have been removed and not backed up.
-    ! test -e "$HOME/.config/test.conf"
-    ! test -e "$HOME"/*guix-home*backup/.config/test.conf
+    test ! -e "$HOME/.config/test.conf"
+    test ! -e "$HOME"/*guix-home*backup/.config/test.conf
 
     test "$(cat "$(configuration_file)")" == "$(cat home.scm)"
     test "$(canonical_file_name)" == "$(readlink "${HOME}/.guix-home")"
diff --git a/tests/guix-pack-relocatable.sh b/tests/guix-pack-relocatable.sh
index 46120c9ee6..2fc9fde0bd 100644
--- a/tests/guix-pack-relocatable.sh
+++ b/tests/guix-pack-relocatable.sh
@@ -92,7 +92,7 @@ then
     grep 'GNU sed' "$test_directory/output"
 
     # Check whether the exit code is preserved.
-    ! run_without_store "$test_directory/Bin/sed" --does-not-exist
+    run_without_store "$test_directory/Bin/sed" --does-not-exist && false
 
     chmod -Rf +w "$test_directory"; rm -rf "$test_directory"/*
 else
diff --git a/tests/guix-pack.sh b/tests/guix-pack.sh
index a13e0ededf..4042e54aeb 100644
--- a/tests/guix-pack.sh
+++ b/tests/guix-pack.sh
@@ -37,7 +37,7 @@ test_directory="`mktemp -d`"
 trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
 
 # Reject unsuppoted packages.
-! guix pack intelmetool -s armhf-linux -n
+guix pack intelmetool -s armhf-linux -n && false
 
 # Compute the derivation of a pack.
 drv="`guix pack coreutils -d --no-grafts`"
@@ -48,7 +48,7 @@ guix gc -R "$drv" | grep "`guix build coreutils -d --no-grafts`"
 drv="`guix pack idutils -d --no-grafts --target=arm-linux-gnueabihf`"
 guix gc -R "$drv" | \
     grep "`guix build idutils --target=arm-linux-gnueabihf -d --no-grafts`"
-! guix gc -R "$drv" | grep "`guix build idutils -d --no-grafts`"
+guix gc -R "$drv" | grep "`guix build idutils -d --no-grafts`" && false
 
 # Build a tarball with no compression.
 guix pack --compression=none --bootstrap guile-bootstrap
diff --git a/tests/guix-package-aliases.sh b/tests/guix-package-aliases.sh
index 311838b768..4011584078 100644
--- a/tests/guix-package-aliases.sh
+++ b/tests/guix-package-aliases.sh
@@ -36,7 +36,7 @@ guix install --bootstrap guile-bootstrap -p "$profile"
 test -x "$profile/bin/guile"
 
 # Make sure '-r' isn't passed as-is to 'guix package'.
-! guix install -r guile-bootstrap -p "$profile" --bootstrap
+guix install -r guile-bootstrap -p "$profile" --bootstrap && false
 test -x "$profile/bin/guile"
 
 # Use a package transformation option and make sure it's recorded.
@@ -48,16 +48,16 @@ grep "libreoffice=inkscape" "$profile/manifest"
 guix upgrade --version
 guix upgrade -n
 guix upgrade gui.e -n
-! guix upgrade foo bar -n;
+guix upgrade foo bar -n
 
 guix remove --version
 guix remove --bootstrap guile-bootstrap -p "$profile"
-! test -x "$profile/bin/guile"
+test ! -x "$profile/bin/guile"
 test `guix package -p "$profile" -I | wc -l` -eq 0
 
-! guix remove -p "$profile" this-is-not-installed --bootstrap
+guix remove -p "$profile" this-is-not-installed --bootstrap && false
 
-! guix remove -i guile-bootstrap -p "$profile" --bootstrap
+guix remove -i guile-bootstrap -p "$profile" --bootstrap && false
 
 guix search '\<board\>' game | grep '^name: gnubg'
 
@@ -66,7 +66,7 @@ guix show guile
 guix show python@3 | grep "^name: python"
 
 # "python@2" exists but is deprecated; make sure it doesn't show up.
-! guix show python@2
+guix show python@2 && false
 
 # Specifying multiple packages.
 output="`guix show sed grep | grep ^name:`"
diff --git a/tests/guix-package-net.sh b/tests/guix-package-net.sh
index 1cdeff773a..62e17815bf 100644
--- a/tests/guix-package-net.sh
+++ b/tests/guix-package-net.sh
@@ -58,7 +58,7 @@ trap 'rm -f "$profile" "$profile_alt" "$profile.lock" "$profile_alt.lock" "$prof
 
 guix package --bootstrap -p "$profile" -i guile-bootstrap
 test -L "$profile" && test -L "$profile-1-link"
-! test -f "$profile-2-link"
+test ! -f "$profile-2-link"
 test -f "$profile/bin/guile"
 
 boot_make="(@ (guix tests) gnu-make-for-tests)"
@@ -98,13 +98,13 @@ test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \
      = "  guile-bootstrap"
 
 # Exit with 1 when a generation does not exist.
-! guix package -p "$profile" --list-generations=42
-! guix package -p "$profile" --switch-generation=99
+guix package -p "$profile" --list-generations=42 && false
+guix package -p "$profile" --switch-generation=99 && false
 
 # Remove a package.
 guix package --bootstrap -p "$profile" -r "guile-bootstrap"
 test -L "$profile-3-link"
-test -f "$profile/bin/make" && ! test -f "$profile/bin/guile"
+test -f "$profile/bin/make" && test ! -f "$profile/bin/guile"
 
 # Roll back.
 guix package --roll-back -p "$profile"
@@ -112,7 +112,7 @@ test "`readlink_base "$profile"`" = "$profile-2-link"
 test -x "$profile/bin/guile" && test -x "$profile/bin/make"
 guix package --roll-back -p "$profile"
 test "`readlink_base "$profile"`" = "$profile-1-link"
-test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
+test -x "$profile/bin/guile" && test ! -x "$profile/bin/make"
 
 # Switch to the rolled generation and switch back.
 guix package -p "$profile" --switch-generation=2
@@ -124,8 +124,8 @@ test "`readlink_base "$profile"`" = "$profile-1-link"
 for i in `seq 1 3`
 do
     guix package --bootstrap --roll-back -p "$profile"
-    ! test -f "$profile/bin"
-    ! test -f "$profile/lib"
+    test ! -f "$profile/bin"
+    test ! -f "$profile/lib"
     test "`readlink_base "$profile"`" = "$profile-0-link"
 done
 
@@ -135,7 +135,7 @@ test -z "`guix package -p "$profile" -l 0`"
 # Reinstall after roll-back to the empty profile.
 guix package --bootstrap -p "$profile" -e "$boot_make"
 test "`readlink_base "$profile"`" = "$profile-1-link"
-test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
+test -x "$profile/bin/guile" && test ! -x "$profile/bin/make"
 
 # Check that the first generation is the current one.
 test "`guix package -p "$profile" -l 1 | cut -f3 | head -n1`" = "(current)"
@@ -143,7 +143,7 @@ test "`guix package -p "$profile" -l 1 | cut -f3 | head -n1`" = "(current)"
 # Roll-back to generation 0, and install---all at once.
 guix package --bootstrap -p "$profile" --roll-back -i guile-bootstrap
 test "`readlink_base "$profile"`" = "$profile-1-link"
-test -x "$profile/bin/guile" && ! test -x "$profile/bin/make"
+test -x "$profile/bin/guile" && test ! -x "$profile/bin/make"
 
 # Install Make.
 guix package --bootstrap -p "$profile" -e "$boot_make"
@@ -175,7 +175,7 @@ test -z "`guix package -p "$profile" -l 3`"
 rm "$profile"
 guix package --bootstrap -p "$profile" -i guile-bootstrap
 guix package --bootstrap -p "$profile_alt" -i gcc-bootstrap
-! guix package -p "$profile" --search-paths | grep LIBRARY_PATH
+guix package -p "$profile" --search-paths | grep LIBRARY_PATH && false
 guix package -p "$profile" -p "$profile_alt" --search-paths \
      | grep "LIBRARY_PATH.*$profile/lib.$profile_alt/lib"
 
@@ -234,4 +234,4 @@ guix package --bootstrap -e "$boot_make"
 test -f "$HOME/.guix-profile/bin/make"
 
 guix package --bootstrap --roll-back
-! test -f "$HOME/.guix-profile/bin/make"
+test ! -f "$HOME/.guix-profile/bin/make"
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index cc416ec6a1..945d59cdfb 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -37,7 +37,7 @@ rm -f "$profile" "$tmpfile"
 trap 'rm -f "$profile" "$profile.lock" "$profile-"[0-9]* "$tmpfile"; rm -rf "$module_dir" t-home-'"$$" EXIT
 
 # Use `-e' with a non-package expression.
-! guix package --bootstrap -e +
+guix package --bootstrap -e + && false
 
 # Install a store item and make sure the version and output in the manifest
 # are correct.
@@ -57,23 +57,23 @@ guix gc --list-live | grep "`readlink "$profile-1-link"`"
 # Installing the same package a second time does nothing.
 guix package --bootstrap -p "$profile" -i guile-bootstrap
 test -L "$profile" && test -L "$profile-1-link"
-! test -f "$profile-2-link"
+test ! -f "$profile-2-link"
 test -f "$profile/bin/guile"
 
 # Unsupported packages cannot be installed.
-! guix package -e '(begin (use-modules (guix) (gnu packages base)) (package (inherit sed) (supported-systems (list))))' -n
+guix package -e '(begin (use-modules (guix) (gnu packages base)) (package (inherit sed) (supported-systems (list))))' -n && false
 case $(uname -m) in
     x86_64|i[3456]86)
-	! guix package -i novena-eeprom -n
+	guix package -i novena-eeprom -n && false
 	break;;
     *)
-	! guix package -i intelmetool -n
+	guix package -i intelmetool -n && false
 	break;;
 esac
 
 # Collisions are properly flagged (in this case, 'g-wrap' propagates
 # guile@2.2, which conflicts with guile@2.0.)
-! guix package --bootstrap -n -p "$profile" -i g-wrap guile@2.0
+guix package --bootstrap -n -p "$profile" -i g-wrap guile@2.0 && false
 
 guix package --bootstrap -n -p "$profile" -i g-wrap guile@2.0 \
      --allow-collisions
@@ -88,7 +88,7 @@ test "`guix package -p "$profile" --search-paths | wc -l`" = 1  # $PATH
   type -P rm )
 
 # Exit with 1 when a generation does not exist.
-! guix package -p "$profile" --delete-generations=42
+guix package -p "$profile" --delete-generations=42 && false
 
 # Exit with 0 when trying to delete the zeroth generation.
 guix package -p "$profile" --delete-generations=0
@@ -101,12 +101,12 @@ guix package --bootstrap -i "glibc:debug" -p "$profile" -n
 
 # Make sure nonexistent outputs are reported.
 guix package --bootstrap -i "guile-bootstrap:out" -p "$profile" -n
-! guix package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile" -n
-! guix package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile"
+guix package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile" -n && false
+guix package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile" && false
 
 # Make sure we get an error when trying to remove something that's not
 # installed.
-! guix package --bootstrap -r something-not-installed -p "$profile"
+guix package --bootstrap -r something-not-installed -p "$profile" && false
 
 # Check whether `--list-available' returns something sensible.
 guix package -p "$profile" -A 'gui.*e' | grep guile
@@ -118,8 +118,8 @@ guix package --show=guile | grep "^name: guile"
 guix package --show=texlive
 
 # Fail for non-existent packages or package/version pairs.
-! guix package --show=does-not-exist
-! guix package --show=emacs@42
+guix package --show=does-not-exist && false
+guix package --show=emacs@42 && false
 
 # Search.
 LC_MESSAGES=C
@@ -163,19 +163,19 @@ guix package --search="" > /dev/null
 # There's no generation older than 12 months, so the following command should
 # have no effect.
 generation="`readlink_base "$profile"`"
-! guix package -p "$profile" --delete-generations=12m
+guix package -p "$profile" --delete-generations=12m && false
 test "`readlink_base "$profile"`" = "$generation"
 
 # The following command should not delete the current generation, even though
 # it matches the given pattern (see <http://bugs.gnu.org/19978>.)  And since
 # there's nothing else to delete, it should just fail.
 guix package --list-generations -p "$profile"
-! guix package --bootstrap -p "$profile" --delete-generations=1..
+guix package --bootstrap -p "$profile" --delete-generations=1.. && false
 test "`readlink_base "$profile"`" = "$generation"
 
 # Make sure $profile is a GC root at this point.
 real_profile="`readlink -f "$profile"`"
-! guix gc -d "$real_profile"
+guix gc -d "$real_profile" && false
 test -d "$real_profile"
 
 # Now, let's remove all the symlinks to $real_profile, and make sure
@@ -278,22 +278,22 @@ do
     guix gc --list-live | grep "`readlink "$profile_link"`"
 
     guix package --bootstrap --roll-back
-    ! test -f "$HOME/.guix-profile/bin"
-    ! test -f "$HOME/.guix-profile/lib"
+    test ! -f "$HOME/.guix-profile/bin"
+    test ! -f "$HOME/.guix-profile/lib"
     test "`readlink "$default_profile"`" = "`basename $default_profile-0-link`"
 done
 
 # Check whether '-p ~/.guix-profile' makes any difference.
 # See <http://bugs.gnu.org/17939>.
-! test -e "$HOME/.guix-profile-0-link"
-! test -e "$HOME/.guix-profile-1-link"
+test ! -e "$HOME/.guix-profile-0-link"
+test ! -e "$HOME/.guix-profile-1-link"
 guix package --bootstrap -p "$HOME/.guix-profile" -i guile-bootstrap
-! test -e "$HOME/.guix-profile-1-link"
+test ! -e "$HOME/.guix-profile-1-link"
 guix package --bootstrap --roll-back -p "$HOME/.guix-profile"
-! test -e "$HOME/.guix-profile-0-link"
+test ! -e "$HOME/.guix-profile-0-link"
 
 # Extraneous argument.
-! guix package install foo-bar
+guix package install foo-bar && false
 
 # Make sure the "broken pipe" doesn't yield an error.
 # Note: 'pipefail' is a Bash-specific option.
@@ -382,7 +382,7 @@ cat > "$module_dir/package.scm"<<EOF
 
 (define my-package coreutils)   ;returns *unspecified*
 EOF
-! guix package --bootstrap --install-from-file="$module_dir/package.scm"
+guix package --bootstrap --install-from-file="$module_dir/package.scm" && false
 
 rm "$module_dir/package.scm"
 
diff --git a/tests/guix-refresh.sh b/tests/guix-refresh.sh
index c5214e1d6e..691020b031 100644
--- a/tests/guix-refresh.sh
+++ b/tests/guix-refresh.sh
@@ -37,12 +37,12 @@ GUIX_TEST_UPDATER_TARGETS='
    ("the-test-package" "" (("5.5" "file://'$PWD/$module_dir'/source"))))'
 
 # No newer version available.
-! guix refresh -t test idutils
+guix refresh -t test idutils	# XXX: should return non-zero?
 case "$(guix refresh -t test idutils 2>&1)" in
     *"$idutils_version"*"already the latest version"*) true;;
     *) false;;
 esac
-! guix refresh -t test libreoffice
+guix refresh -t test libreoffice # XXX: should return non-zero?
 case "$(guix refresh -t test libreoffice 2>&1)" in
     *"greater than the latest known version"*"1.0"*) true;;
     *) false;;
@@ -100,7 +100,7 @@ grep 'version "5.5"' "$module_dir/sample.scm"
 grep "$(guix hash -H sha256 -f nix-base32 "$module_dir/source")" "$module_dir/sample.scm"
 
 # Specifying a target version.
-! guix refresh -t test guile=2.0.0
+guix refresh -t test guile=2.0.0 # XXX: should return non-zero?
 case "$(guix refresh -t test guile=2.0.0 2>&1)" in
     *"failed to find"*"2.0.0"*) true;;
     *) false;;
diff --git a/tests/guix-shell.sh b/tests/guix-shell.sh
index cb2b53466d..ed368515eb 100644
--- a/tests/guix-shell.sh
+++ b/tests/guix-shell.sh
@@ -33,13 +33,13 @@ export XDG_CONFIG_HOME
 guix shell --bootstrap --pure guile-bootstrap -- guile --version
 
 # '--symlink' can only be used with --container.
-! guix shell --bootstrap guile-bootstrap -S /dummy=bin/guile
+guix shell --bootstrap guile-bootstrap -S /dummy=bin/guile && false
 
 # '--ad-hoc' is a thing of the past.
-! guix shell --ad-hoc guile-bootstrap
+guix shell --ad-hoc guile-bootstrap && false
 
 # Rejecting unsupported packages.
-! guix shell -s armhf-linux intelmetool -n
+guix shell -s armhf-linux intelmetool -n && false
 
 # Test approximately that the child process does not inherit extra file
 # descriptors.  Ideally we'd check there's nothing more than 0, 1, and 2, but
@@ -55,7 +55,7 @@ test "$(echo $fd_list | wc -w)" -le "$(echo $initial_fd_list | wc -w)"
 cat > "$tmpdir/guix.scm" <<EOF
 This is a broken guix.scm file.
 EOF
-! (cd "$tmpdir"; SHELL="$(type -P true)" guix shell --bootstrap 2> "stderr")
+(cd "$tmpdir"; SHELL="$(type -P true)" guix shell --bootstrap 2> "stderr") && false
 grep "not authorized" "$tmpdir/stderr"
 rm "$tmpdir/stderr"
 
@@ -122,7 +122,7 @@ then
     done
 
     # 'make-boot0' itself must not be listed.
-    ! guix gc --references "$profile" | grep make-boot0
+    guix gc --references "$profile" | grep make-boot0 && false
 
     # Honoring the local 'guix.scm' file.
     echo '(@ (guix tests) gnu-make-for-tests)' > "$tmpdir/guix.scm"
diff --git a/tests/guix-style.sh b/tests/guix-style.sh
index 58f953a0ec..2de879d5e3 100644
--- a/tests/guix-style.sh
+++ b/tests/guix-style.sh
@@ -65,7 +65,7 @@ cp "$tmpfile" "$tmpfile.bak"
 initial_hash="$(guix hash "$tmpfile")"
 
 guix style -f "$tmpfile"
-if ! test "$initial_hash" = "$(guix hash "$tmpfile")"
+if test "$initial_hash" != "$(guix hash "$tmpfile")"
 then
     cat "$tmpfile"
     diff -u "$tmpfile.bak" "$tmpfile"
@@ -73,8 +73,8 @@ then
 fi
 
 # Introduce random changes and try again.
-sed -i "$tmpfile" -e's/ +/ /g'
-! test "$initial_hash" = "$(guix hash "$tmpfile")"
+sed -i "$tmpfile" -e's/ \+/ /g'
+test "$initial_hash" != "$(guix hash "$tmpfile")"
 
 guix style -f "$tmpfile"
 test "$initial_hash" = "$(guix hash "$tmpfile")"
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index 1dbd5a0b85..adc0c44a6f 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -318,7 +318,7 @@ cat > "$tmpdir/config.scm" <<EOF
 
 (bad-local-file "whatever.scm")
 EOF
-! guix system build "$tmpdir/config.scm" -n
+guix system build "$tmpdir/config.scm" -n && false
 guix system build "$tmpdir/config.scm" -n 2>&1 | \
     grep "config\.scm:4:2: warning:.*whatever.*relative to current directory"