about summary refs log tree commit diff
path: root/gn
diff options
context:
space:
mode:
Diffstat (limited to 'gn')
-rw-r--r--gn/deploy/machines/myserver.scm2
-rw-r--r--gn/deploy/octopus.scm2
-rw-r--r--gn/packages/bioinformatics.scm107
-rw-r--r--gn/packages/bnw.scm1
-rw-r--r--gn/packages/check.scm61
-rw-r--r--gn/packages/cran.scm3
-rw-r--r--gn/packages/crates-io.scm10
-rw-r--r--gn/packages/databases.scm12
-rw-r--r--gn/packages/dlang.scm2
-rw-r--r--gn/packages/edash.scm9
-rw-r--r--gn/packages/emacs-xyz.scm2
-rw-r--r--gn/packages/fpga.scm2
-rw-r--r--gn/packages/genecup.scm18
-rw-r--r--gn/packages/genenetwork.scm93
-rw-r--r--gn/packages/guile.scm126
-rw-r--r--gn/packages/java.scm2
-rw-r--r--gn/packages/javascript.scm153
-rw-r--r--gn/packages/julia.scm47
-rw-r--r--gn/packages/jupyterhub.scm2
-rw-r--r--gn/packages/machine-learning.scm176
-rw-r--r--gn/packages/pangenome.scm2
-rw-r--r--gn/packages/patches/python-unittest2-python3-compat.patch46
-rw-r--r--gn/packages/patches/python-unittest2-remove-argparse.patch11
-rw-r--r--gn/packages/python-web.scm41
-rw-r--r--gn/packages/python.scm38
-rw-r--r--gn/packages/ruby.scm278
-rw-r--r--gn/packages/sambamba.scm2
-rw-r--r--gn/packages/statistics.scm133
-rw-r--r--gn/packages/virtualization.scm3
-rw-r--r--gn/packages/yaj.scm4
-rw-r--r--gn/past/genenetwork1.scm2
-rw-r--r--gn/services/bnw-container.scm2
-rw-r--r--gn/services/databases.scm5
-rw-r--r--gn/services/discourse.scm5
-rw-r--r--gn/services/genecup-container.scm3
-rw-r--r--gn/services/gitea-container.scm2
-rw-r--r--gn/services/monitoring.scm49
-rw-r--r--gn/services/pluto.scm3
38 files changed, 1248 insertions, 211 deletions
diff --git a/gn/deploy/machines/myserver.scm b/gn/deploy/machines/myserver.scm
index 11ffcd1..9a8bedf 100644
--- a/gn/deploy/machines/myserver.scm
+++ b/gn/deploy/machines/myserver.scm
@@ -51,7 +51,7 @@
 
   ;; Add services to the baseline: a DHCP client and
   ;; an SSH server with nginx
-  (services (append (list (service dhcp-client-service-type)
+  (services (append (list (service dhcp-service-type)
                           (service openssh-service-type
                                    (openssh-configuration
                                     ; (authorized-keys
diff --git a/gn/deploy/octopus.scm b/gn/deploy/octopus.scm
index 32a0495..fc631b8 100644
--- a/gn/deploy/octopus.scm
+++ b/gn/deploy/octopus.scm
@@ -154,7 +154,7 @@
                          (run-mfsmetalogger-service? #t)
                          ))
 
-              (service dhcp-client-service-type)
+              (service dhcp-service-type)
               (service openntpd-service-type))
             %base-services))
 
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index 4a85cff..fb2ee18 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -41,9 +41,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages cran)
-  #:use-module (gnu packages crates-compression)
-  #:use-module (gnu packages crates-io)
-  #:use-module (gnu packages crates-graphics)
+  #:use-module (past-crates packages crates-io)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages datastructures)
@@ -74,13 +72,16 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
-  #:use-module ((gnu packages python-xyz) #:hide (python2-six))
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
@@ -2980,6 +2981,76 @@ to the user.")
                  "http://www.kentinformatics.com/index.html"
                  "Free for universities and non-profit institutions.")))))
 
+(define htslib-1.14
+  (package/inherit htslib
+    (version "1.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/htslib/releases/download/"
+                    version "/htslib-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0pwk8yhhvb85mi1d2qhwsb4samc3rmbcrq7b1s0jz0glaa7in8pd"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments htslib)
+       ((#:configure-flags cf #~'())
+        #~(delete "--with-external-htscodecs" #$cf))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs htslib)
+       (delete "htscodecs")))))
+
+(define-public pbbam
+  (package
+    (name "pbbam")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/PacificBiosciences/pbbam")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1iyazi3l7dswpfxh39k5j7ydi0ywja0579xz3r6l9kkwz2n1z6dc"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Disable this test.  I tried fixing it by including
+             ;; optional_io.hpp, but there's a type error.
+             (substitute* "tests/src/meson.build"
+               (("'test_ReadGroupInfo.cpp',") ""))
+             #;
+             (substitute* "include/pbbam/ReadGroupInfo.h"
+               (("#include <boost/optional.hpp>" m)
+                (string-append m "\n#include <boost/optional/optional_io.hpp>")))
+             (substitute* '("tests/scripts/cram/_test.py"
+                            "tests/scripts/cram/_main.py")
+               (("'/bin/sh'")
+                (string-append "'" (which "sh") "'"))))))))
+    ;; These libraries are listed as "Required" in the pkg-config file.
+    (propagated-inputs
+     (list htslib-1.14 pbcopper zlib))
+    (inputs
+     (list boost samtools))
+    (native-inputs
+     (list googletest
+           pkg-config
+           python-wrapper)) ;for tests
+    (home-page "https://github.com/PacificBiosciences/pbbam")
+    (synopsis "Work with PacBio BAM files")
+    (description
+     "The pbbam software package provides components to create, query, and
+edit PacBio BAM files and associated indices.  These components include a core
+C++ library, bindings for additional languages, and command-line utilities.
+This library is not intended to be used as a general-purpose BAM utility - all
+input and output BAMs must adhere to the PacBio BAM format specification.
+Non-PacBio BAMs will cause exceptions to be thrown.")
+    (license license:bsd-3)))
+
 (define-public bam2fastx
   (package
     (name "bam2fastx")
@@ -4502,6 +4573,8 @@ automatically vectorize for different architectures without adapting the code.")
         (base32
          "1vhqy8licl2pkzar4aag0q5fhnb3fdch8acyjh9445ia42z01z9c"))))
     (build-system r-build-system)
+    (arguments
+     (list #:tests? #f))  ;; tests fail and seem to require data
     (propagated-inputs
      (list r-rcpp
 	   r-rcpparmadillo))
@@ -4600,6 +4673,32 @@ interface to the basic htslib.  It can be easily included in a C++
 program for scripting high-performance genomic analyses.")
     (license license:asl2.0)))
 
+(define-public r-genio
+  (package
+    (name "r-genio")
+    (version "1.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "genio" version))
+       (sha256
+        (base32 "0izx8yv8mvnfxdqnqpnp2ldw1hzs6ggxi7jgmjlgxkgmm4vngbgl"))))
+    (properties `((upstream-name . "genio")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-dplyr r-rcpp r-readr r-tibble))
+    (native-inputs (list r-knitr r-testthat))
+    (home-page "https://github.com/OchoaLab/genio")
+    (synopsis "Genetics Input/Output Functions")
+    (description "@code{r-genio} implements readers and writers for file formats
+associated with genetics data.  Reading and writing Plink BED/BIM/FAM
+and GCTA binary GRM formats is fully supported, including a
+lightning-fast BED reader and writer implementations.  Other functions
+are readr wrappers that are more constrained, user-friendly, and
+efficient for these particular applications; handles Plink and
+Eigenstrat tables (FAM, BIM, IND, and SNP files).  There are also make
+functions for FAM and BIM tables with default values to go with
+simulated genotype data.")
+    (license license:gpl3)))
 
 (define-public r-stitch
   (package
diff --git a/gn/packages/bnw.scm b/gn/packages/bnw.scm
index 1e2c86e..a609905 100644
--- a/gn/packages/bnw.scm
+++ b/gn/packages/bnw.scm
@@ -8,6 +8,7 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-science)
   #:use-module (gnu packages statistics)
   #:use-module (gn packages javascript)
   #:use-module (gn packages web))
diff --git a/gn/packages/check.scm b/gn/packages/check.scm
new file mode 100644
index 0000000..960e78e
--- /dev/null
+++ b/gn/packages/check.scm
@@ -0,0 +1,61 @@
+(define-module (gn packages check)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system python)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (past packages python27))
+
+(define-public python-nosexcover
+  (package
+    (name "python-nosexcover")
+    (version "1.0.11")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "nosexcover" version))
+              (sha256
+               (base32
+                "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-coverage python-nose))
+    (home-page "https://github.com/cmheisel/nose-xcover")
+    (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
+    (description "Nose-xcover is a companion to the built-in
+@code{nose.plugins.cover}.  This plugin will write out an XML coverage report
+to a file named coverage.xml.
+
+It will honor all the options you pass to the Nose coverage plugin,
+especially -cover-package.")
+    (license license:expat)))
+
+(define-public python-unittest2
+  (package
+    (name "python-unittest2")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "unittest2" version))
+       (patches
+        (search-patches "python-unittest2-python3-compat.patch"
+                        "python-unittest2-remove-argparse.patch"))
+       (sha256
+        (base32
+         "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "-m" "unittest2" "discover" "--verbose")))))))
+    (propagated-inputs
+     (list python-six python-traceback2))
+    (home-page "https://pypi.org/project/unittest2/")
+    (synopsis "Python unit testing library")
+    (description
+     "Unittest2 is a replacement for the unittest module in the Python
+standard library.")
+    (license license:psfl)))
diff --git a/gn/packages/cran.scm b/gn/packages/cran.scm
index 6a2a4ea..34e781c 100644
--- a/gn/packages/cran.scm
+++ b/gn/packages/cran.scm
@@ -4,7 +4,8 @@
   #:use-module (guix download)
   #:use-module (guix build-system r)
   #:use-module (gnu packages)
-  #:use-module (gnu packages statistics))
+  #:use-module (gnu packages statistics)
+  #:use-module (gnu packages cran))
 
 (define-public r-tictoc
   (package
diff --git a/gn/packages/crates-io.scm b/gn/packages/crates-io.scm
index 92969fd..ea87358 100644
--- a/gn/packages/crates-io.scm
+++ b/gn/packages/crates-io.scm
@@ -5,11 +5,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system cargo)
-  #:use-module (gnu packages crates-check)
-  #:use-module (gnu packages crates-compression)
-  #:use-module (gnu packages crates-graphics)
-  #:use-module (gnu packages crates-io)
-  #:use-module (gnu packages crates-windows)
+  #:use-module (past-crates packages crates-io)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages python))
 
@@ -690,7 +686,7 @@ or any combination.")
     (license license:gpl3+)))
 
 (define-public gn-rust-correlation
-  (let ((commit "d7b1fd65814511890a4e606e6e610379b6d89393")
+  (let ((commit "48604d86471df965f189e46580578b24191add0e")
         (revision "0"))
     (package
       (name "gn-rust-correlation")
@@ -703,7 +699,7 @@ or any combination.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1z5p9pjja6a697l558axnp1hr5376b6ng3yl3vxcp2h1skfrykvq"))))
+          (base32 "1x7zz0ldf9bmb4lmj3yrhbgcqanc64pl03dimrx5aw7cap006pjw"))))
       (build-system cargo-build-system)
       (native-inputs (list gsl))
       (arguments
diff --git a/gn/packages/databases.scm b/gn/packages/databases.scm
index 93280c2..20ea612 100644
--- a/gn/packages/databases.scm
+++ b/gn/packages/databases.scm
@@ -136,3 +136,15 @@
       (inputs
        `(("zlib" ,zlib)
          ,@(package-inputs base))))))
+
+
+(define-public python-mysqlclient-2.2.7
+  (package
+    (inherit python-mysqlclient)
+    (version "2.2.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mysqlclient" version))
+       (sha256
+        (base32 "0i9q2vj6rb4w2iggk0mcp9jla2rm91sx7jcrgv7grm8njjsj5bi4"))))))
diff --git a/gn/packages/dlang.scm b/gn/packages/dlang.scm
index 5cab985..a7d76a2 100644
--- a/gn/packages/dlang.scm
+++ b/gn/packages/dlang.scm
@@ -103,7 +103,7 @@ std.algorithm.endsWith(tzName, \"/leapseconds\"))")))))))
        ("tzdata" ,tzdata)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("llvm" ,llvm-6)
+     `(("llvm" ,llvm-12)
        ("python-wrapper" ,python-wrapper)
        ("unzip" ,unzip)
        ("phobos-src"
diff --git a/gn/packages/edash.scm b/gn/packages/edash.scm
index ac88e22..42da046 100644
--- a/gn/packages/edash.scm
+++ b/gn/packages/edash.scm
@@ -18,7 +18,8 @@
   #:use-module (gnu packages check)
   #:use-module (gn packages web)
   #:use-module (gnu packages sqlite)
-  #:use-module (gn packages python))
+  #:use-module (gn packages python)
+  #:use-module (past packages python27))
 
 (define-public python-s3transfer-0.1.13
   (package
@@ -271,8 +272,7 @@ necessary.")
        ("python-pyyaml" ,python-pyyaml)
        ("python-pytest-cov" ,python-pytest-cov)
        ("python-jsonschema" ,python-jsonschema)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-pytest-pycodestyle" ,python-pytest-pycodestyle)
 ;;       ("python-pytest-flakes" ,python-pytest-flakes)
        ))
     (arguments `(#:tests? #f))
@@ -303,8 +303,7 @@ with the Specification.")
        ("python-pyflakes" ,python-pyflakes)
        ("python-flake8" ,python-flake8)
        ("python-pytest-cov" ,python-pytest-cov)
-       ("python-pytest-pep8" ,python-pytest-pep8)
-       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-pytest-pycodestyle" ,python-pytest-pycodestyle)
 ;;       ("python-pytest-flakes" ,python-pytest-flakes)
        ))
     (arguments `(#:tests? #f))
diff --git a/gn/packages/emacs-xyz.scm b/gn/packages/emacs-xyz.scm
index 6d1e525..e524358 100644
--- a/gn/packages/emacs-xyz.scm
+++ b/gn/packages/emacs-xyz.scm
@@ -8,6 +8,7 @@
   #:use-module (guix build emacs-utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
+  #:use-module (gnu packages emacs-build)
   #:use-module (gnu packages emacs-xyz)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rust-apps)
@@ -20,6 +21,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages emacs-build)
   #:use-module (ice-9 match))
 
 (define-public emacs-trident-mode
diff --git a/gn/packages/fpga.scm b/gn/packages/fpga.scm
index 654b71d..b8c3537 100644
--- a/gn/packages/fpga.scm
+++ b/gn/packages/fpga.scm
@@ -1,5 +1,5 @@
 (define-module (gn packages fpga)
-  #:use-module (gnu packages fpga)
+  #:use-module (gnu packages electronics)
   #:use-module (guix git-download)
   #:use-module (guix packages))
 
diff --git a/gn/packages/genecup.scm b/gn/packages/genecup.scm
index 868bfff..88e0879 100644
--- a/gn/packages/genecup.scm
+++ b/gn/packages/genecup.scm
@@ -20,7 +20,8 @@
   #:use-module (gn packages javascript)
   #:use-module (gn packages machine-learning)
   #:use-module (gn packages python)
-  #:use-module (gn packages web))
+  #:use-module (gn packages web)
+  #:use-module (gn packages machine-learning))
 
 (define use-corrected-inputs
   (package-input-rewriting/spec
@@ -29,19 +30,6 @@
     `(("tensorflow" . ,(const tensorflow-native))
       ("python-h5py" . ,(const python-h5py-2)))))
 
-(define-public python-keras-no-tests
-  (hidden-package
-    (package
-      (inherit python-keras)
-      (source
-        (origin
-          (inherit (package-source python-keras))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments python-keras)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (delete 'check))))))))
-
 
 (define-public hrdp-project
   (package
@@ -249,7 +237,7 @@ if __name__ == '__main__':
        ("python-nltk" ,python-nltk)
        ("python-pandas" ,python-pandas)
        ("python-regex" ,python-regex)
-       ("tensorflow" ,tensorflow)))
+       ("tensorflow" ,tensorflow-lite)))
     (native-inputs
      `(("bootstrap" ,web-bootstrap)
        ("cytoscape" ,javascript-cytoscape-3.17)
diff --git a/gn/packages/genenetwork.scm b/gn/packages/genenetwork.scm
index 8d8c4df..f8db089 100644
--- a/gn/packages/genenetwork.scm
+++ b/gn/packages/genenetwork.scm
@@ -19,12 +19,12 @@
   #:use-module (guix packages)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages certs)
+  #:use-module ((gnu packages nss) #:select (nss-certs))
   #:use-module (gnu packages bioconductor)
   #:use-module (gnu packages bioinformatics)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cran)
-  #:use-module (gnu packages crates-io)
+  #:use-module (past-crates packages crates-io)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages ghostscript)
@@ -40,6 +40,7 @@
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages python-science)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages scheme)
@@ -58,12 +59,12 @@
   #:use-module (gn packages python)
   #:use-module (gn packages statistics)
   #:use-module (gn packages web)
-  #:use-module (gn packages python-web)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:use-module (gn packages databases))
 
 
 (define-public rust-qtlreaper
-  (let ((commit "2e7fed6d45b0b602d80fa2a55835f96ef1cba9e3")
+  (let ((commit "4dafa7289432d10685b6b235e3552ac3d681bb03")
         (revision "1"))
     (package
       (name "rust-qtlreaper")
@@ -72,12 +73,12 @@
         (origin
           (method git-fetch)
           (uri (git-reference
-                 (url "https://github.com/chfi/rust-qtlreaper.git")
+                 (url "https://github.com/genenetwork/rust-qtlreaper.git")
                  (commit commit)))
           (file-name (git-file-name name version))
           (sha256
            (base32
-            "0h70aalsplmc6xn1w7ha102n3bsi3gqkbnbrjvjm2za37c07gv0g"))))
+            "1p7dmxh43ly0k7q6va0lzisqnk1i7af3dy5aw1sr4y5s7z0h6i0y"))))
       (build-system cargo-build-system)
       (arguments
        `(#:cargo-inputs
@@ -101,7 +102,7 @@
                        (("-0.3223330030526561") "-0.32233300305265566"))
                      (assoc-ref %standard-phases 'check)))
                #t)))))
-      (home-page "https://github.com/chfi/rust-qtlreaper")
+      (home-page "https://github.com/genenetwork/rust-qtlreaper")
       (synopsis "Reimplementation of genenetwork/QTLReaper in Rust")
       (description "Reimplementation of genenetwork/QTLReaper in Rust")
       (license #f))))
@@ -116,7 +117,7 @@
       ((#:tests? _ #f) #f)))))
 
 (define-public genenetwork3
-  (let ((commit "82885f945499415b00b4ef2ee2a5464ea13fb8fb")
+  (let ((commit "e6c44577b2489f7b1523cb6a5fd332015bde25c5")
         (revision "5"))
     (package
       (name "genenetwork3")
@@ -130,7 +131,7 @@
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "06020m1pv2p2hd1wbsinbapy54670xfp85yspi4nm555g3hjiv5f"))))
+           "0i2n46lg73w06dfqcs4sxvwwfdxa0536gv95ism85h4j3dm9vzhz"))))
       (inputs
        (list python-click))
       (native-inputs
@@ -146,15 +147,15 @@
              nss-certs
              gemma-wrapper
              gn-rust-correlation
+             gunicorn
              python-argon2-cffi
              python-authlib
-             python-bcrypt ;; Replace use of bcrypt with argon
              python-biopython
              python-email-validator
              python-flask
              python-flask-cors
              python-lmdb
-             python-mysqlclient
+             python-mysqlclient-2.2.7
              python-numpy
              python-pandas
              python-pingouin-without-tests
@@ -168,6 +169,7 @@
              python-scikit-learn
              python-scipy
              python-sparqlwrapper
+	     python-structlog
              python-wrapper
              python-xapian-bindings
              r
@@ -178,6 +180,7 @@
              r-rjson
              r-stringi
              r-wgcna
+	     r-thor
              rust-qtlreaper))
       (build-system python-build-system)
       (arguments
@@ -224,7 +227,7 @@ storage.")
     (license license:bsd-3)))
 
 (define-public genenetwork2
-  (let ((commit "b39bc1111414aca5025ccab9006e1a740d9a07a3")
+  (let ((commit "5e596f0814b4cad57a847fae03df2867b6327653")
         (revision "4"))
     (package
       (name "genenetwork2")
@@ -237,7 +240,7 @@ storage.")
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "06y9y4nvar26vmrf0qh9i4q6z241v5gdxw7yqhqq8zkzqcxcz9ab"))))
+                  "1arnq4b7c6i6fnvfim3yyghrvr0ncjdp1a4ix1hgj9bz2r9vxnzi"))))
       (native-inputs
        (list graphviz))
       (propagated-inputs
@@ -326,7 +329,7 @@ storage.")
              python-lxml
              python-markdown
              python-mypy
-             python-mysqlclient
+             python-mysqlclient-2.2.7
              python-numpy
              python-pandas
              python-pylint
@@ -336,13 +339,15 @@ storage.")
              python-rdflib
              python-redis
              python-requests
-             python-rpy2
+             ;; python-rpy2 ; restore once python-rpy2 dependencies get upstream
+             python-rpy2-patched ; remove this once python-rpy2 is fixed upstream
              python-scipy
              python-setuptools
              python-simplejson
              python-wrapper
              python-xlsxwriter
 	     python-pillow-9
+	     python-structlog
              r
              r-ctl
              r-qtl
@@ -375,21 +380,6 @@ storage.")
                        (("\\./gn2/wqflask/static/gif/error")
                         (string-append (site-packages inputs outputs)
                                        "/gn2/wqflask/static/gif/error")))))
-                 (add-after 'unpack 'fix-paths-scripts
-                   (lambda _
-                     (substitute* "bin/genenetwork2"
-                       (("/usr/bin/env") (which "env"))
-                       (("python ") (string-append (which "python3") " "))
-                       (("readlink") (which "readlink"))
-                       (("dirname") (which "dirname"))
-                       (("basename") (which "basename"))
-                       (("cat") (which "cat"))
-                       (("echo") (which "echo"))
-                       (("redis-server") (which "redis-server"))
-                       (("git") (which "git"))
-                       (("grep") (which "grep"))
-                       (("rm") (which "rm"))
-                       (("which") (which "which")))))
                  (add-before 'install 'fix-paths
                    (lambda* (#:key inputs #:allow-other-keys)
                      (let* ((plink2cmd (string-append (assoc-ref inputs "plink-ng-gn") "/bin/plink2"))
@@ -468,7 +458,7 @@ storage.")
      ))))))
 
 (define-public gn-uploader
-  (let ((commit "18a4c8c743fec10f1a1eacf1cb72443a98733e8c")
+  (let ((commit "c4494da2e81780bbeeac8936d1fe1aede01cf73c")
        (version "0.1.1"))
     (package
      (name "gn-uploader")
@@ -483,21 +473,22 @@ storage.")
        (hash
        (content-hash
         (base32
-         "0bddfx8m6hg2pfid9r9lh08g7h1vk50i7zxz6afmwbgy5zx3p0jb")))))
+         "0fhhpvxaj0anh21pqabikv5wmd1cj3nx2j1bcd9ld8q3ykmm8a9s")))))
      (build-system python-build-system)
      (arguments
       (list
        #:phases
        #~(modify-phases %standard-phases
-                       (replace 'check
-                                (lambda* (#:key tests? #:allow-other-keys)
-                                        (when tests?
-                                          (invoke "pytest" "-m" "unit_test")))))))
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "pytest" "-m" "unit_test" "-n" "auto")))))))
      (native-inputs
       (list python-mypy
             python-pylint
             python-pytest
-            python-hypothesis))
+            python-hypothesis
+            python-pytest-xdist))
      (propagated-inputs
       (list gn-libs
             gunicorn
@@ -509,7 +500,7 @@ storage.")
             python-authlib
             python-pymonad
             python-jsonpickle
-            python-mysqlclient
+            python-mysqlclient-2.2.7
             ;;python-flask-session
             temporary-python-flask-session
             web-bootstrap-5
@@ -518,7 +509,8 @@ storage.")
             javascript-datatables-select
             javascript-datatables-buttons-3
             javascript-datatables-scroller-2
-            node-resumablejs))
+            node-resumablejs
+            rust-qtlreaper))
      (synopsis "GeneNetwork Quality Control Application")
      (description
       "gn-uploader is a service allowing upload of new data into GeneNetwork,
@@ -528,7 +520,7 @@ storage.")
      (license license:agpl3+))))
 
 (define-public gn-auth
-  (let ((commit "5cad25d44bc789e3f7de417cbe3b40b5073d2294")
+  (let ((commit "9839e5bf35bd7be158b35fa98a734f7a3473688d")
         (revision "01"))
     (package
       (name "gn-auth")
@@ -543,7 +535,7 @@ storage.")
          (hash
           (content-hash
            (base32
-            "1qvpn2f55z51g9y5rpszipjz4pk5h6g8fjxshc36fxjn298p3g7v")))))
+            "1lsi7z8hvpdqgcsx3zc5ip701xka9s75c7r4pjlby2ryjc0gw83d")))))
       (build-system python-build-system)
       (arguments
        (list
@@ -552,14 +544,15 @@ storage.")
             (replace 'check
               (lambda* (#:key tests? #:allow-other-keys)
                 (when tests?
-                  (invoke "pytest" "-k" "unit_test")))))))
+                  (invoke "pytest" "-m" "unit_test" "-n" "auto")))))))
       (native-inputs
        (list python-hypothesis
              python-mypy
              python-mypy-extensions
              python-pylint
              python-pytest
-             python-pytest-mock))
+             python-pytest-mock
+             python-pytest-xdist))
       (propagated-inputs
        (list gn-libs
              gunicorn
@@ -570,9 +563,10 @@ storage.")
              python-email-validator
              python-flask
              python-flask-cors
-             python-mysqlclient
+             python-mysqlclient-2.2.7
              python-pymonad
              python-redis
+	     python-structlog
              yoyo-migrations))
       (home-page "https://github.com/genenetwork/gn-auth")
       (synopsis "Authentication and Authorisation server for GeneNetwork services")
@@ -581,8 +575,8 @@ storage.")
 
 
 (define-public gn-libs
-  (let ((commit "44a251732b980b699e2ea00fb9405db39bb6e08f")
-        (revision "01"))
+  (let ((commit "9422e39e5b79a4aaca7dc368368d39141a0242b7")
+        (revision "02"))
     (package
       (name "gn-libs")
       (version (git-version "0.0.0" revision commit))
@@ -596,7 +590,7 @@ storage.")
          (hash
           (content-hash
            (base32
-            "1ccl4dq386knn0lr5j1f12gqxnm1kiwhal662g0i3j4yj0s56pzf")))))
+            "03i1kj7jbmlkjs61a9fb4j3s78p4d5lmd8lqnfsv42wxwwyvsm8p")))))
       (build-system pyproject-build-system)
       (arguments
        (list
@@ -616,7 +610,8 @@ storage.")
        (list python-authlib
              python-pymonad
              python-requests
-             python-mysqlclient))
+	     python-structlog
+             python-mysqlclient-2.2.7))
       (home-page "https://github.com/genenetwork/gn-libs")
       (synopsis "Tools/utilities for GeneNetwork projects.")
       (description "A collection of tools and utilities used across multiple
diff --git a/gn/packages/guile.scm b/gn/packages/guile.scm
index 3587b00..8341e74 100644
--- a/gn/packages/guile.scm
+++ b/gn/packages/guile.scm
@@ -17,9 +17,10 @@
   #:use-module (gnu packages package-management)
   #:use-module ((gnu packages bash) #:select (bash-minimal))
   #:use-module ((gnu packages bioinformatics) #:select (gemma))
-  #:use-module ((gnu packages certs) #:select (nss-certs))
+  #:use-module ((gnu packages nss) #:select (nss-certs))
+  #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
   #:use-module ((gnu packages guile) #:select (guile-json-4 guile-3.0 guile-2.2 guile-readline))
-  #:use-module ((gnu packages guile-xyz) #:select (guile-dbi guile-dbd-mysql guile-fibers guile-redis guile-hashing guile-commonmark guile-lmdb guile-lib))
+  #:use-module ((gnu packages guile-xyz) #:select (guile-dbi guile-dbd-mysql guile-fibers guile-redis guile-hashing guile-commonmark guile-lmdb guile-lib guile-uuid))
   #:use-module ((gnu packages parallel) #:select (parallel))
   #:use-module ((gnu packages perl) #:select (perl))
   #:use-module ((gnu packages tls) #:select (guile-gnutls openssl)))
@@ -119,7 +120,7 @@ for MySQL.")
     (license license:gpl2+)))
 
 (define-public gn-guile
-  (let ((commit "169d26710c978484f8e9464a95be6eaa47fa704e")
+  (let ((commit "454244b774ece37f04f146c74353ea4ec35d43e1")
 	(revision "0"))
     (package
       (name "gn-guile")
@@ -132,7 +133,7 @@ for MySQL.")
 		(file-name (string-append name "-" version))
 		(sha256
 		 (base32
-                  "10f6icsg9ifyvmg544xqb1ggzzvd4hdbbni7vhlz9xj5vyf9bih2"))))
+                  "1n1zjpwfksq8bf42d7xr7lnblgsbqc0yszkbid253s943fyxzhfn"))))
       (build-system guile-build-system)
       (native-inputs (list guile-3.0))
       (propagated-inputs
@@ -197,25 +198,40 @@ for MySQL.")
 					   guile-redis
 					   guile-hashing
 					   guile-json-4))
+		       (scm-dev-path
+			(cons*
+			 "./"
+			 (map (lambda (x) (string-append x scm-dir))
+			      guile-inputs)))
 		       (scm-path
 			(map (lambda (x) (string-append x scm-dir))
 			     (cons* out guile-inputs)))
                        (go-dir (string-append "/lib/guile/" effective
                                               "/site-ccache/"))
+		       (go-dev-path
+			(map (lambda (x) (string-append x go-dir))
+			     guile-inputs))
 		       (go-path
 			(map (lambda (x) (string-append x go-dir))
 			     (cons* out guile-inputs))))
 		  (mkdir-p "bin")
 		  (copy-file "gn-guile.sh" "bin/gn-guile")
+		  (copy-file "gn-guile.sh" "bin/gn-guile-dev")
 		  (copy-file "scripts/lmdb-publishdata-export.scm"
 			     "bin/lmdb-publishdata-export")
 		  (substitute* "bin/gn-guile"
 			       (("@SHELL@") bash)
 			       (("guile") guile)
 			       (("web/webserver.scm") webserver))
+		  (substitute* "bin/gn-guile-dev"
+		    (("@SHELL@") bash)
+		    (("guile") guile)
+		    (("web/webserver.scm") "./web/webserver.scm"))
 		  (chmod "bin/gn-guile" #o755)
+		  (chmod "bin/gn-guile-dev" #o755)
 		  (chmod "bin/lmdb-publishdata-export" #o755)
 		  (install-file "bin/gn-guile" bin)
+		  (install-file "bin/gn-guile-dev" bin)
 		  (install-file "bin/lmdb-publishdata-export" bin)
 		  (wrap-script
 		   (string-append out "/bin/gn-guile")
@@ -223,6 +239,12 @@ for MySQL.")
                    `("GUILE_AUTO_COMPILE" ":" = ("0"))
                    `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))
+		  (wrap-script
+		   (string-append out "/bin/gn-guile-dev")
+                   `("PATH" ":" prefix ,path)
+                   `("GUILE_AUTO_COMPILE" ":" = ("0"))
+                   `("GUILE_LOAD_PATH" ":" prefix ,scm-dev-path)
+                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-dev-path))
 		  (wrap-program
 		   (string-append out "/bin/lmdb-publishdata-export")
                    `("PATH" ":" prefix ,path)
@@ -233,3 +255,99 @@ for MySQL.")
       (synopsis "Next generation GN code in guile")
       (description "Use of guile.")
       (license license:gpl3))))
+
+(define-public guile-sheepdog
+  (let ((commit "1426617d58f305a4126bb867202843e8cf7dd4b2")
+	(revision "0"))
+    (package
+     (name "guile-sheepdog")
+     (version "0.0.0")
+     (source (origin
+	      (method git-fetch)
+	      (uri (git-reference
+		    (url "https://github.com/BonfaceKilz/guile-sheepdog.git")
+		    (commit commit)))
+	      (file-name (string-append name "-" version))
+	      (sha256
+	       (base32
+                "1z0xzg11p75s2hk312akxlg2h5278w2abma27dhzjf981g3lcqvr"))))
+     (build-system guile-build-system)
+     (native-inputs (list guile-3.0))
+     (propagated-inputs
+      (list bash-minimal guile-3.0 guile-uuid guile-hashing guile-fibers guile-json-4 guile-gcrypt guile-gnutls guile-redis))
+     (arguments
+      (list
+       #:not-compiled-file-regexp "(guix|guix/.*)[.]scm$"
+       #:modules '((srfi srfi-1)
+		   (ice-9 popen)
+		   (guix build guile-build-system)
+		   (guix build utils))
+       #:phases
+       #~(modify-phases %standard-phases
+			(add-before 'build 'remove-conf
+				    (lambda* _
+				      (delete-file "conf.example.scm")))
+			(add-after 'build 'install-script
+				   (lambda* _
+				     (let* ((bash #$(this-package-input "bash-minimal"))
+					    (bash (string-append bash "/bin/bash"))
+					    (guile #$(this-package-input "guile"))
+					    (guile (string-append guile "/bin/guile"))
+					    (build-guile #$(this-package-native-input "guile"))
+					    (build-guile (string-append build-guile "/bin/guile"))
+					    (guile-uuid #$(this-package-input "guile-uuid"))
+					    (guile-gnutls #$(this-package-input "guile-gnutls"))
+					    (guile-hashing #$(this-package-input "guile-hashing"))
+					    (guile-fibers #$(this-package-input "guile-fibers"))
+					    (guile-redis #$(this-package-input "guile-redis"))
+					    (guile-json-4 #$(this-package-input "guile-json"))
+					    (guile-gcrypt #$(this-package-input "guile-gcrypt"))
+					    (guile-lib #$(this-package-input "guile-lib"))
+					    (out #$output)
+					    (bin (string-append out "/bin"))
+					    (effective (read
+							(open-pipe* OPEN_READ
+								    build-guile "-c"
+								    "(write (effective-version))")))
+					    (path (list (string-append guile "/bin")))
+					    (guile-sheepdog (string-append
+							     out
+							     "/share/guile/site/"
+							     effective
+							     "/gn-monitor.scm"))
+					    (scm-dir (string-append "/share/guile/site/" effective))
+					    (guile-inputs (list guile-fibers
+								guile-hashing
+								guile-uuid
+								guile-gnutls
+								guile-gcrypt
+								guile-redis
+								guile-json-4))
+					    (scm-path
+					     (cons*
+					      scm-dir
+					      (map (lambda (x) (string-append x scm-dir))
+						   (cons* out guile-inputs))))
+					    (go-dir (string-append "/lib/guile/" effective
+								   "/site-ccache/"))
+					    (go-path
+					     (map (lambda (x) (string-append x go-dir))
+						  (cons* out guile-inputs))))
+				       (mkdir-p "bin")
+				       (copy-file "sheepdog.sh" "bin/guile-sheepdog")
+				       (substitute* "bin/guile-sheepdog"
+						    (("@SHELL@") bash)
+						    (("guile") guile)
+						    (("gn-monitor.scm") guile-sheepdog))
+				       (chmod "bin/guile-sheepdog" #o755)
+				       (install-file "bin/guile-sheepdog" bin)
+				       (wrap-script
+					(string-append out "/bin/guile-sheepdog")
+					`("PATH" ":" prefix ,path)
+					`("GUILE_AUTO_COMPILE" ":" = ("0"))
+					`("GUILE_LOAD_PATH" ":" prefix ,scm-path)
+					`("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))))))))
+     (home-page "https://github.com/BonfaceKilz/guile-sheepdog.git")
+     (synopsis "Genenetwork monitoring tool")
+     (description "Genenetwork monitoring tool")
+     (license license:gpl3))))
diff --git a/gn/packages/java.scm b/gn/packages/java.scm
index f39c5c7..2a3b07b 100644
--- a/gn/packages/java.scm
+++ b/gn/packages/java.scm
@@ -30,7 +30,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bioinformatics)
-  #:use-module (gnu packages certs)
+  #:use-module ((gnu packages nss) #:select (nss-certs))
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages gcc)
diff --git a/gn/packages/javascript.scm b/gn/packages/javascript.scm
index e4bf803..059999b 100644
--- a/gn/packages/javascript.scm
+++ b/gn/packages/javascript.scm
@@ -595,24 +595,29 @@ tables with minimal effort.  This package comes with Bootstrap5 integration
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://cdn.jsdelivr.net/npm/xterm@" version
-                           "/lib/xterm.min.js"))
-       (file-name (string-append "xterm.min" version ".js"))
+       (uri
+        (string-append "https://registry.npmjs.org/xterm/-/xterm-"
+                       version
+                       ".tgz"))
        (sha256
-        (base32 "0pb5f3rjbpg7zz1zkd72vkwsma3pnj07mq46jj95yghy48dx67gw"))))
-    (build-system trivial-build-system)
+        (base32 "11db21afvny4m8ar40jpbc5wb5kgx4wqcbha0w2ixbr8p1l82lhz"))))
+    (build-system minify-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder (begin
-		   (use-modules (guix build utils))
-		   (let* ((out (assoc-ref %outputs "out"))
-			  (targetdir (string-append
-				      out
-				      "/share/genenetwork2/javascript/xterm"))
-			  (source (assoc-ref %build-inputs "source")))
-		     (mkdir-p targetdir)
-		     (copy-file source
-				(string-append targetdir "/xterm.min.js"))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'build) ; xterm.js is already minified
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; copy the minified files
+             (let* ((source (getcwd))
+                    (out (assoc-ref outputs "out"))
+                    (js (string-append out "/share/genenetwork2/javascript/xterm")))
+               (mkdir-p js)
+               (for-each
+                (lambda (filename)
+                  (install-file filename js))
+                (append
+                 (find-files (string-append source "/lib"))))))))))
     (native-inputs `(("source" ,source)))
     (home-page "https://xtermjs.org/")
     (synopsis
@@ -629,23 +634,37 @@ tables with minimal effort.  This package comes with Bootstrap5 integration
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://cdn.jsdelivr.net/npm/xterm@" version
-                           "/css/xterm.min.css"))
-       (file-name (string-append "xterm.min" version ".css"))
+       (uri
+        (string-append "https://registry.npmjs.org/xterm/-/xterm-"
+                       version
+                       ".tgz"))
        (sha256
-        (base32 "0qhfll6g9vfamicw6kccmdgzrz6m7jz97whydwbzj10qsyv8npr7"))))
+        (base32 "11db21afvny4m8ar40jpbc5wb5kgx4wqcbha0w2ixbr8p1l82lhz"))))
+    (build-system minify-build-system)
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder (begin
-		   (use-modules (guix build utils))
-		   (let* ((out (assoc-ref %outputs "out"))
-			  (targetdir (string-append
-				      out
-				      "/share/genenetwork2/javascript/xterm"))
-			  (source (assoc-ref %build-inputs "source")))
-		     (mkdir-p targetdir)
-		     (copy-file source
-				(string-append targetdir "/xterm.min.css"))))))
+     `(#:javascript-files (list "css/xterm.css")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'rename-minified-css
+           (lambda* _
+             (for-each
+              (lambda (file)
+                (let* ((path-length (string-length file))
+                       (ext-length (string-length ".css.min.js")))
+                  (copy-recursively file
+                                    (string-replace file ".min.css" (- path-length ext-length)))))
+              (find-files (string-append (getcwd) "/guix/build")
+                          "\\.css\\.min\\.js$"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (js (string-append out "/share/genenetwork2/javascript/xterm")))
+               (mkdir-p js)
+               (for-each
+                (lambda (file)
+                  (install-file file js))
+                (find-files (string-append (getcwd) "/guix/build")
+                            "\\.min\\.css$"))))))))
     (native-inputs `(("source" ,source)))
     (synopsis "Style sheets for xtermjs")
     (description "Style sheets for xtermjs")
@@ -2224,35 +2243,53 @@ vector graphics.")
     "A low-level markdown compiler for parsing markdown without caching or blocking for long periods of time.")
    (license license:expat)))
 
+
 (define-public javascript-marked-highlight
   (package
-   (name "javascript-marked-highlight")
-   (version "2.0.6")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (string-append "https://cdn.jsdelivr.net/npm/marked-highlight@" version "/lib/index.umd.min.js"))
-     (sha256
-      (base32
-       "087qcy77fm3r7dl6w0mxsqygmdpimrmksw78r4wkkkjdx9x9dshf"))))
-   (build-system trivial-build-system)
-   (arguments
-    `(#:modules ((guix build utils))
-      #:builder
-      (begin
-	(use-modules (guix build utils))
-	(let* ((out (assoc-ref %outputs "out"))
-	       (targetdir
-		(string-append out "/share/genenetwork2/javascript/marked"))
-	       (source (assoc-ref %build-inputs "source")))
-	  (mkdir-p targetdir)
-	  (copy-file source (string-append targetdir "/marked-highlight.js"))))))
-   (native-inputs `(("source" ,source)))
-   (home-page "https://github.com/markedjs/marked-highlight")
-   (synopsis "Highlight code blocks.")
-   (description
-    "Add code highlighting to marked.")
-   (license license:expat)))
+    (name "javascript-marked-highlight")
+    (version "2.0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/markedjs/marked-highlight/archive/refs/tags/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "14pvaknic0pwh1ll7i0z66mi2gviww35palmk03xidyywlbvwklr"))))
+    (build-system minify-build-system)
+    (arguments
+     `(#:javascript-files (list "src/index.js")
+       #:phases (modify-phases %standard-phases
+                  (add-before 'install 'rename-minified-js
+                    (lambda* _
+                      (for-each (lambda (file)
+                                  ;; rename to "marked-highlight.js"
+                                  (copy-recursively file
+                                                    (string-append (dirname
+                                                                    file)
+                                                     "/marked-highlight.js")))
+                                (find-files (string-append (getcwd)
+                                                           "/guix/build")
+                                            "\\.min\\.js$"))))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (use-modules (guix build utils))
+                      (let* ((out (assoc-ref outputs "out"))
+                             (targetdir (string-append out
+                                         "/share/genenetwork2/javascript/marked")))
+                        (mkdir-p targetdir)
+                        (for-each (lambda (file)
+                                    (install-file file targetdir))
+                                  (find-files (string-append (getcwd)
+                                                             "/guix/build")
+                                              "marked-highlight\\.js$"))))))))
+    (home-page "https://github.com/markedjs/marked-highlight")
+    (synopsis "Code highlighting extension for Marked")
+    (description
+     "This package provides a plugin for the Marked Markdown parser that adds
+syntax highlighting support for fenced code blocks.")
+    (license license:expat)))
+
 
 (define-public javascript-ace
   (package
diff --git a/gn/packages/julia.scm b/gn/packages/julia.scm
index a00244f..0557dfc 100644
--- a/gn/packages/julia.scm
+++ b/gn/packages/julia.scm
@@ -2784,3 +2784,50 @@ that still support Julia versions older than 1.6.")
     (synopsis "binary provider for Julia")
     (description "Packages are installed to a @code{Prefix}; a folder that acts similar to the @code{/usr/local} directory on Unix-like systems, containing a @code{bin} folder for binaries, a @code{lib} folder for libraries, etc... @code{Prefix} objects can have tarballs @code{install()}'ed within them, @code{uninstall()}'ed from them, etc...")
     (license license:expat)))
+
+(define-public julia-progressmeter
+  (package
+    (name "julia-progressmeter")
+    (version "1.11.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/timholy/ProgressMeter.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0mgsq5ynqd35yldmafmbcmch0xdjqyga4wb1lllqfffsipj8ki4k"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/timholy/ProgressMeter.jl")
+    (synopsis "Progress meter for long-running computations")
+    (description "@code{julia-progressmeter} provides a progress meter
+for long-running computations.")
+    (license license:expat)))
+
+(define-public julia-jwas
+  (package
+    (name "julia-jwas")
+    (version "1.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/reworkhow/JWAS.jl")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0mbs8h98bb503x0k3xf4n11h8lwnnyz9y757b8dgx888jf1firv1"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-csv
+           julia-dataframes
+           julia-distributions
+           julia-forwarddiff
+           julia-progressmeter))
+    (home-page "https://github.com/reworkhow/JWAS.jl")
+    (synopsis "Julia whole-genome analysis library")
+    (description "@code{julia-jwas} is an open-source software tool
+ written in Julia for Bayesian multiple regression methods applied to
+genomic prediction and genome-wide association studies.")
+    (license license:gpl2)))
diff --git a/gn/packages/jupyterhub.scm b/gn/packages/jupyterhub.scm
index 322999b..2779d3e 100644
--- a/gn/packages/jupyterhub.scm
+++ b/gn/packages/jupyterhub.scm
@@ -7,6 +7,7 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages docker)
+  #:use-module (gnu packages jupyter)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages monitoring)
@@ -16,6 +17,7 @@
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages jupyter)
   #:use-module (gnu packages rpc)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages time)
diff --git a/gn/packages/machine-learning.scm b/gn/packages/machine-learning.scm
index 8f9f1f0..541b3b6 100644
--- a/gn/packages/machine-learning.scm
+++ b/gn/packages/machine-learning.scm
@@ -2,14 +2,24 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
-  #:use-module (gnu packages machine-learning))
+  #:use-module (gnu packages machine-learning)
+  #:use-module (guix download)
+  #:use-module (guix build-system python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages python-science)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages python-check)
+  #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages python-web)
+  #:use-module (past packages python27))
 
 (define-public tensorflow-native
   (package
-    (inherit tensorflow)
+    (inherit tensorflow-lite)
     (name "tensorflow-native")
     (arguments
-     (substitute-keyword-arguments (package-arguments tensorflow)
+     (substitute-keyword-arguments (package-arguments tensorflow-lite)
        ((#:substitutable? _ #f) #f)
        ((#:configure-flags flags)
         `(cons
@@ -19,3 +29,163 @@
 
 (define-public tensowflow-native-instead-of-tensorflow
   (package-input-rewriting/spec `(("tensorflow" . ,(const tensorflow-native)))))
+
+
+(define-public python-keras-applications
+  (package
+    (name "python-keras-applications")
+    (version "1.0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Keras_Applications" version))
+       (sha256
+        (base32
+         "1rcz31ca4axa6kzhjx4lwqxbg4wvlljkj8qj9a7p9sfd5fhzjyam"))))
+    (build-system python-build-system)
+    ;; The tests require Keras, but this package is needed to build Keras.
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     (list python-h5py python-numpy))
+    (native-inputs
+     (list python-pytest python-pytest-cov
+           python-pytest-xdist))
+    (home-page "https://github.com/keras-team/keras-applications")
+    (synopsis "Reference implementations of popular deep learning models")
+    (description
+     "This package provides reference implementations of popular deep learning
+models for use with the Keras deep learning framework.")
+    (license license:expat)))
+
+
+(define-public python-keras-preprocessing
+  (package
+    (name "python-keras-preprocessing")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Keras_Preprocessing" version))
+       (sha256
+        (base32
+         "1r98nm4k1svsqjyaqkfk23i31bl1kcfcyp7094yyj3c43phfp3as"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-numpy python-six))
+    (native-inputs
+     (list python-pandas
+           python-pillow
+           python-pytest
+           python-pytest-cov
+           python-pytest-xdist
+           tensorflow-lite))
+    (home-page "https://github.com/keras-team/keras-preprocessing/")
+    (synopsis "Data preprocessing and augmentation for deep learning models")
+    (description
+     "Keras Preprocessing is the data preprocessing and data augmentation
+module of the Keras deep learning library.  It provides utilities for working
+with image data, text data, and sequence data.")
+    (license license:expat)))
+
+
+(define-public python-keras-no-tests
+  (package
+    (name "python-keras-no-tests")
+    (version "2.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Keras" version))
+       (sha256
+        (base32
+         "1k68xd8n2y9ldijggjc8nn4d6d1axw0p98gfb0fmm8h641vl679j"))
+       (modules '((guix build utils)))
+       (snippet
+        '(substitute* '("keras/callbacks/callbacks.py"
+                        "keras/engine/training_utils.py"
+                        "keras/engine/training.py"
+                        "keras/engine/training_generator.py"
+                        "keras/utils/generic_utils.py")
+           (("from collections import Iterable")
+            "from collections.abc import Iterable")
+           (("collections.Container")
+            "collections.abc.Container")
+           (("collections.Mapping")
+            "collections.abc.Mapping")
+           (("collections.Sequence")
+            "collections.abc.Sequence")))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'tf-compatibility
+           (lambda _
+             (substitute* "keras/backend/tensorflow_backend.py"
+               (("^get_graph = .*")
+                "get_graph = tf.get_default_graph")
+               (("tf.compat.v1.nn.fused_batch_norm")
+                "tf.nn.fused_batch_norm")
+               ;; categorical_crossentropy does not support axis
+               (("from_logits=from_logits, axis=axis")
+                "from_logits=from_logits")
+               ;; dropout accepts a level number, not a named rate argument.
+               (("dropout\\(x, rate=level,")
+                "dropout(x, level,")
+               (("return x.shape.rank")
+                "return len(x.shape)"))))
+         (add-after 'unpack 'hdf5-compatibility
+           (lambda _
+             ;; The truth value of an array with more than one element is ambiguous.
+             (substitute* "tests/keras/utils/io_utils_test.py"
+               ((" *assert .* == \\[b'(asd|efg).*") ""))
+             (substitute* "tests/test_model_saving.py"
+               (("h5py.File\\('does not matter',")
+                "h5py.File('does not matter', 'w',"))
+             (substitute* "keras/utils/io_utils.py"
+               (("h5py.File\\('in-memory-h5py', driver='core', backing_store=False\\)")
+                "h5py.File('in-memory-h5py', 'w', driver='core', backing_store=False)")
+               (("h5file.fid.get_file_image")
+                "h5file.id.get_file_image"))
+             (substitute* "keras/engine/saving.py"
+               (("\\.decode\\('utf-?8'\\)") ""))))
+         (add-after 'unpack 'delete-unavailable-backends
+           (lambda _
+             (delete-file "keras/backend/theano_backend.py")
+             (delete-file "keras/backend/cntk_backend.py")))
+         (delete 'check))))
+    (propagated-inputs
+     (list python-h5py
+           python-keras-applications
+           python-keras-preprocessing
+           python-numpy
+           python-pydot
+           python-pyyaml
+           python-scipy
+           python-six
+           tensorflow-lite
+           graphviz))
+    (native-inputs
+     (list python-flaky
+           python-markdown
+           python-pandas
+           python-pytest
+           python-pytest-cov
+           python-pytest-timeout
+           python-pytest-xdist
+           python-pyux
+           python-sphinx
+           python-requests))
+    (home-page "https://keras.io/")
+    (synopsis "High-level deep learning framework")
+    (description "Keras is a high-level neural networks API, written in Python
+and capable of running on top of TensorFlow.  It was developed with a focus on
+enabling fast experimentation.  Use Keras if you need a deep learning library
+that:
+@itemize
+@item Allows for easy and fast prototyping (through user friendliness,
+  modularity, and extensibility).
+@item Supports both convolutional networks and recurrent networks, as well as
+  combinations of the two.
+@item Runs seamlessly on CPU and GPU.
+@end itemize\n")
+    (license license:expat)))
diff --git a/gn/packages/pangenome.scm b/gn/packages/pangenome.scm
index c66b594..5c5ef00 100644
--- a/gn/packages/pangenome.scm
+++ b/gn/packages/pangenome.scm
@@ -5,7 +5,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system cargo)
-  #:use-module (gnu packages crates-io)
+  #:use-module (past-crates packages crates-io)
   #:use-module (gn packages crates-io))
 
 
diff --git a/gn/packages/patches/python-unittest2-python3-compat.patch b/gn/packages/patches/python-unittest2-python3-compat.patch
new file mode 100644
index 0000000..68fbcca
--- /dev/null
+++ b/gn/packages/patches/python-unittest2-python3-compat.patch
@@ -0,0 +1,46 @@
+Skip tests that fail with newer versions of Python.
+
+Patch copied from Gentoo:
+
+https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-python/unittest2/files/unittest2-1.1.0-python3.5-test.patch
+
+diff --git a/unittest2/test/test_loader.py b/unittest2/test/test_loader.py
+index 683f662..347eea5 100644
+--- a/unittest2/test/test_loader.py
++++ b/unittest2/test/test_loader.py
+@@ -509,6 +509,7 @@ class Test_TestLoader(unittest2.TestCase):
+     #
+     # What happens when an impossible name is given, relative to the provided
+     # `module`?
++    @unittest.skipIf(sys.version_info[:2] >= (3, 5), "python 3.5 has problems here")
+     def test_loadTestsFromName__relative_malformed_name(self):
+         loader = unittest.TestLoader()
+ 
+@@ -811,6 +812,7 @@ class Test_TestLoader(unittest2.TestCase):
+     # TestCase or TestSuite instance."
+     #
+     # What happens when presented with an impossible module name?
++    @unittest.skipIf(sys.version_info[:2] >= (3, 5), "python 3.5 has problems here")
+     def test_loadTestsFromNames__malformed_name(self):
+         loader = unittest2.TestLoader()
+ 
+@@ -918,6 +920,7 @@ class Test_TestLoader(unittest2.TestCase):
+     # "The method optionally resolves name relative to the given module"
+     #
+     # What happens when presented with an impossible attribute name?
++    @unittest.skipIf(sys.version_info[:2] >= (3, 5), "python 3.5 has problems here")
+     def test_loadTestsFromNames__relative_malformed_name(self):
+         loader = unittest.TestLoader()
+ 
+diff --git a/unittest2/compatibility.py b/unittest2/compatibility.py
+index 9e5f1a5..2d20c19 100644
+--- a/unittest2/compatibility.py
++++ b/unittest2/compatibility.py
+@@ -140,6 +140,6 @@ except ImportError:
+ ###  ChainMap (helper for configparser and string.Template)
+ ########################################################################
+ 
+-class ChainMap(collections.MutableMapping):
++class ChainMap(collections.abc.MutableMapping):
+     ''' A ChainMap groups multiple dicts (or other mappings) together
+     to create a single, updateable view.
diff --git a/gn/packages/patches/python-unittest2-remove-argparse.patch b/gn/packages/patches/python-unittest2-remove-argparse.patch
new file mode 100644
index 0000000..c967387
--- /dev/null
+++ b/gn/packages/patches/python-unittest2-remove-argparse.patch
@@ -0,0 +1,11 @@
+--- a/setup.py	2017-09-12 01:22:06.273997788 +0200
++++ b/setup.py	2017-09-12 01:22:14.297918757 +0200
+@@ -57,7 +57,7 @@
+ # Both install and setup requires - because we read VERSION from within the
+ # package, and the package also exports all the APIs.
+ # six for compat helpers
+-REQUIRES = ['argparse', 'six>=1.4', 'traceback2'],
++REQUIRES = ['six>=1.4', 'traceback2'],
+ 
+ params = dict(
+     name=NAME,
diff --git a/gn/packages/python-web.scm b/gn/packages/python-web.scm
deleted file mode 100644
index e0bfacf..0000000
--- a/gn/packages/python-web.scm
+++ /dev/null
@@ -1,41 +0,0 @@
-(define-module (gn packages python-web)
-  ;; core guix packages
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system python)
-  #:use-module ((guix licenses) #:prefix license:)
-  ;; packages modules
-  #:use-module (gnu packages django)
-  #:use-module (gnu packages databases)
-  #:use-module (gnu packages python-web)
-  #:use-module (gnu packages python-crypto))
-
-(define-public python-authlib
-  (package
-    (name "python-authlib")
-    (version "1.5.0")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "authlib" version))
-              (sha256
-               (base32 "08slfa8qm4ycjpwp8qcmixl59kw2k5bpp89rmhrab1b4h27vvn4g"))))
-    (build-system python-build-system)
-    (native-inputs
-     (list python-httpx
-	   python-flask
-	   python-django
-	   python-werkzeug
-	   python-starlette
-	   python-sqlalchemy
-	   python-pycryptodomex))
-    (propagated-inputs
-     (list python-cryptography))
-    (arguments `(#:tests? #f)) ;; temporarily deactivate tests
-    (home-page "https://authlib.org/")
-    (synopsis
-     "The ultimate Python library in building OAuth and OpenID Connect servers and clients.")
-    (description
-     "The ultimate Python library in building OAuth and OpenID Connect servers and
-clients. It is designed from low level specifications implementations to high
-level frameworks integrations, to meet the needs of everyone.")
-    (license license:bsd-3)))
diff --git a/gn/packages/python.scm b/gn/packages/python.scm
index 7cb5d77..e429058 100644
--- a/gn/packages/python.scm
+++ b/gn/packages/python.scm
@@ -3,11 +3,13 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cran)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages jupyter)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
@@ -22,7 +24,9 @@
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
-  #:use-module ((gnu packages python-xyz) #:hide (python2-six))
+  #:use-module (gnu packages jupyter)
+  #:use-module (gnu packages cran)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages serialization)
@@ -38,7 +42,8 @@
   #:use-module (guix utils)
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:use-module (gn packages check))
 
 (define-public python-rpy2-2.9
   (package
@@ -2019,3 +2024,32 @@ a general image processing tool.")
     (license (license:x11-style
               "http://www.pythonware.com/products/pil/license.htm"
               "The PIL Software License"))))
+
+(define-public python-misaka
+  (package
+    (name "python-misaka")
+    (version "2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "misaka" version))
+       (sha256
+        (base32
+         "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
+    (build-system python-build-system)
+    (arguments
+     `(;; Line 37 of setup.py calls self.run_command('develop')
+       ;; in the 'check' phase. This command seems to be trying
+       ;; to write to
+       ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
+       ;; for which it does not have the permission to write.
+       #:tests? #f))
+    (propagated-inputs
+     (list python-cffi))
+    (home-page "https://github.com/FSX/misaka")
+    (synopsis "Python binding for Hoedown")
+    (description
+     "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
+     library written in C.  It features a fast HTML renderer and functionality to make custom
+     renderers (e.g. man pages or LaTeX).")
+    (license license:expat)))
diff --git a/gn/packages/ruby.scm b/gn/packages/ruby.scm
index befb550..4b5d903 100644
--- a/gn/packages/ruby.scm
+++ b/gn/packages/ruby.scm
@@ -29,7 +29,11 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages ragel)
   #:use-module (gnu packages rails)
+  #:use-module (gnu packages rdf)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (guix packages)
@@ -5972,16 +5976,16 @@ Simple gem that adds various color methods to String class, and can be used as f
     "http://github.com/pjotrp/regressiontest")
   (license license:expat)))
 
-(define-public ruby-lmdb
+(define-public ruby-lmdb ; note you may need to explicitly use ruby@3.3.8 to run the extension - the guix default
   (package
    (name "ruby-lmdb")
-   (version "0.6.1")
+   (version "0.6.5")
    (source (origin
             (method url-fetch)
             (uri (rubygems-uri "lmdb" version))
             (sha256
              (base32
-              "0yzlf56ynj545ln5dxl422rpi8r6h11cr6rag5hk2qpbkzs6l9c2"))))
+              "094vwmp97av17k9sf8f42i308240a8aikbp3hf1f8wabcy7c7ar2"))))
    (build-system ruby-build-system)
    (inputs
     (list lmdb))
@@ -5996,4 +6000,270 @@ Simple gem that adds various color methods to String class, and can be used as f
    (synopsis "lmdb is a Ruby binding to OpenLDAP Lightning MDB.")
    (description "lmdb is a Ruby binding to OpenLDAP Lightning MDB.")
    (home-page "https://github.com/doriantaylor/rb-lmdb")
-   (license license:expat)))
+   (license license:expat))) ;; note that all these license statements need to be checked!
+
+
+(define-public ruby-unicode-types
+  (package
+    (name "ruby-unicode-types")
+    (version "1.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "unicode-types" version))
+       (sha256
+        (base32 "1mif6v3wlfpb69scikpv7i4zq9rhj19px23iym6j8m3wnnh7d2wi"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (synopsis
+     "[Unicode 16.0.0] Determines the very basic type of codepoints (one of: Graphic, Format, Control, Private-use, Surrogate, Noncharacter, Reserved)")
+    (description
+     "[Unicode 16.0.0] Determines the very basic type of codepoints (one of: Graphic,
+Format, Control, Private-use, Surrogate, Noncharacter, Reserved).")
+    (home-page "https://github.com/janlelis/unicode-types")
+    (license license:expat)))
+
+(define-public ruby-sxp
+  (package
+    (name "ruby-sxp")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sxp" version))
+       (sha256
+        (base32 "08a7ha191gdc1n1pwaqgsx133wy1p1g4fchkhr5gx0jannx1p5vr"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (propagated-inputs (list ruby-matrix ruby-rdf))
+    (synopsis
+     "Universal S-expression parser with specific support for Common Lisp, Scheme, and RDF/SPARQL")
+    (description
+     "Universal S-expression parser with specific support for Common Lisp, Scheme, and
+RDF/SPARQL.")
+    (home-page "https://github.com/dryruby/sxp")
+    (license license:expat)))
+
+(define-public ruby-scanf
+  (package
+    (name "ruby-scanf")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "scanf" version))
+       (sha256
+        (base32 "000vxsci3zq8m1wl7mmppj7sarznrqlm6v2x2hdfmbxcwpvvfgak"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (synopsis "scanf is an implementation of the C function scanf(3).")
+    (description "scanf is an implementation of the C function scanf(3).")
+    (home-page "https://github.com/ruby/scanf")
+    (license license:expat)))
+
+(define-public ruby-ebnf
+  (package
+    (name "ruby-ebnf")
+    (version "2.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ebnf" version))
+       (sha256
+        (base32 "0gpnphpp7qcdjh9vrj8bfrb3k54lq7pk7p23w92wr1d8r8ba6ip7"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (propagated-inputs (list ruby-base64
+                             ruby-htmlentities
+                             ruby-rdf
+                             ruby-scanf
+                             ruby-sxp
+                             ruby-unicode-types))
+    (synopsis
+     "EBNF is a Ruby parser for W3C EBNF and a parser generator for PEG and LL(1). Also includes parsing modes for ISO EBNF and ABNF.")
+    (description
+     "EBNF is a Ruby parser for W3C EBNF and a parser generator for PEG and LL(1).
+Also includes parsing modes for ISO EBNF and ABNF.")
+    (home-page "https://github.com/dryruby/ebnf")
+    (license license:expat)))
+
+(define-public ruby-bigdecimal
+  (package
+    (name "ruby-bigdecimal")
+    (version "3.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bigdecimal" version))
+       (sha256
+        (base32 "1p2szbr4jdvmwaaj2kxlbv1rp0m6ycbgfyp0kjkkkswmniv5y21r"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (synopsis
+     "This library provides arbitrary-precision decimal floating-point number class.")
+    (description
+     "This library provides arbitrary-precision decimal floating-point number class.")
+    (home-page "https://github.com/ruby/bigdecimal")
+    (license license:expat)))
+
+(define-public ruby-rdf-turtle
+  (package
+    (name "ruby-rdf-turtle")
+    (version "3.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rdf-turtle" version))
+       (sha256
+        (base32 "0irnlxnrkdqsk5wkjj51rwyj59lcj4j8y24s9yxplbksjy4vxwxs"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (propagated-inputs (list ruby-base64 ruby-bigdecimal ruby-ebnf ruby-rdf))
+    (synopsis
+     "RDF::Turtle is an Turtle reader/writer for the RDF.rb library suite.")
+    (description
+     "RDF::Turtle is an Turtle reader/writer for the RDF.rb library suite.")
+    (home-page "https://github.com/ruby-rdf/rdf-turtle")
+    (license license:unlicense)))
+
+(define-public ruby-readline
+  (package
+    (name "ruby-readline")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "readline" version))
+       (sha256
+        (base32 "0shxkj3kbwl43rpg490k826ibdcwpxiymhvjnsc85fg2ggqywf31"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (propagated-inputs (list ruby-reline))
+    (synopsis
+     "This is just a loader for \"readline\". If Ruby has the \"readline-ext\" gem
+that is a native extension, this gem will load it. If Ruby does not have
+the \"readline-ext\" gem this gem will load \"reline\", a library that is
+compatible with the \"readline-ext\" gem and implemented in pure Ruby.
+")
+    (description
+     "This is just a loader for \"readline\".  If Ruby has the \"readline-ext\" gem that
+is a native extension, this gem will load it.  If Ruby does not have the
+\"readline-ext\" gem this gem will load \"reline\", a library that is compatible
+with the \"readline-ext\" gem and implemented in pure Ruby.")
+    (home-page "https://github.com/ruby/readline")
+    (license license:expat)))
+
+(define-public ruby-ostruct
+  (package
+    (name "ruby-ostruct")
+    (version "0.6.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ostruct" version))
+       (sha256
+        (base32 "04nrir9wdpc4izqwqbysxyly8y7hsfr4fsv69rw91lfi9d5fv8lm"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (synopsis "Class to build custom data structures, similar to a Hash.")
+    (description "Class to build custom data structures, similar to a Hash.")
+    (home-page "https://github.com/ruby/ostruct")
+    (license license:expat)))
+
+(define-public ruby-logger
+  (package
+    (name "ruby-logger")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "logger" version))
+       (sha256
+        (base32 "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (synopsis "Provides a simple logging utility for outputting messages.")
+    (description
+     "This package provides a simple logging utility for outputting messages.")
+    (home-page "https://github.com/ruby/logger")
+    (license license:expat)))
+
+(define-public ruby-bcp47-spec
+  (package
+    (name "ruby-bcp47-spec")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bcp47_spec" version))
+       (sha256
+        (base32 "043qld01c163yc7fxlar3046dac2833rlcg44jbbs9n1jvgjxmiz"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))
+    (synopsis "A subset of the BCP 47 spec.")
+    (description "This package provides a subset of the BCP 47 spec.")
+    (home-page "https://github.com/dadah89/bcp47_spec")
+    (license license:expat)))
+
+(define-public ruby-rdf
+  (package
+    (name "ruby-rdf")
+    (version "3.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rdf" version))
+       (sha256
+        (base32 "1har1346p7jwrs89d5w1gv98jk2nh3cwkdyvkzm2nkjv3s1a0zx7"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-bcp47-spec
+                             ruby-bigdecimal
+                             ruby-link-header
+                             ruby-logger
+                             ruby-ostruct
+                             ruby-readline))
+    (arguments
+     `(#:tests? #f))
+    (synopsis
+     "RDF.rb is a pure-Ruby library for working with Resource Description Framework (RDF) data.")
+    (description
+     "RDF.rb is a pure-Ruby library for working with Resource Description Framework
+(RDF) data.")
+    (home-page "https://github.com/ruby-rdf/rdf")
+    (license license:unlicense)))
+
+(define-public ruby-rdf-raptor
+  (let ((commit "6392cea"))
+  (package
+    (name "ruby-rdf-raptor")
+    (version "3.3.0")
+    (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/ruby-rdf/rdf-raptor")
+                   (commit commit)))
+             (file-name (string-append name "-" version "-checkout"))
+             (sha256
+              (base32
+            "1mqdddn8s3j0j7gqw0v34jw5cxg2mkka1x9fx46vy38v15m8bbn1"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-ffi ruby-rdf raptor2))
+    (arguments
+     `(#:tests? #f))
+    (synopsis
+     "RDF.rb plugin for parsing/serializing NTriples, RDF/XML, Turtle and RDFa data using the Raptor RDF Parser library.")
+    (description
+     "RDF.rb plugin for parsing/serializing NTriples, RDF/XML, Turtle and RDFa data
+using the Raptor RDF Parser library.")
+    (home-page "https://github.com/ruby-rdf/rdf-raptor")
+    (license license:unlicense))))
diff --git a/gn/packages/sambamba.scm b/gn/packages/sambamba.scm
index dd8fbfa..e5623d4 100644
--- a/gn/packages/sambamba.scm
+++ b/gn/packages/sambamba.scm
@@ -89,7 +89,7 @@ data.  It also provides the @command{bgzip}, @command{htsfile}, and
        ))
       (native-inputs
        `(("ldc" ,ldc)
-         ("shunit2-old" ,shunit2-old)
+         ;; ("shunit2-old" ,shunit2-old) disable for a bit
          ("coreutils" ,coreutils) ; for env
          ("perl" ,perl) ; Needed for building htslib
          ("ruby" ,ruby) ; Needed for building htslib
diff --git a/gn/packages/statistics.scm b/gn/packages/statistics.scm
index e0edd52..8e8483a 100644
--- a/gn/packages/statistics.scm
+++ b/gn/packages/statistics.scm
@@ -14,7 +14,18 @@
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages statistics)
-  #:use-module (past packages python27))
+  #:use-module (gnu packages cran)
+  #:use-module (past packages python27)
+
+  ;; for python-rpy2 and dependencies
+  #:use-module (gnu packages python-build)
+  #:use-module (guix build-system pyproject); python-rpy2-rinterface
+  #:use-module (gnu packages libffi); python-rpy2-rinterface
+  #:use-module (gnu packages check); python-rpy2-rinterface
+  #:use-module (gnu packages compression); python-rpy2-rinterface
+  #:use-module (gnu packages icu4c); python-rpy2-rinterface
+  #:use-module (gnu packages time); python-rpy2-robjects
+  #:use-module (guix gexp))
 
 (define-public r-hmisc-3
   (package
@@ -149,3 +160,123 @@ traits (CTL).  The additional correlation information obtained can be
 combined with QTL information to perform de novo reconstruction of
 interaction networks.")
     (license license:gpl3)))
+
+
+(define-public python-rpy2-rinterface
+  (package
+    (name "python-rpy2-rinterface")
+    (version "3.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "rpy2_rinterface" version))
+       (sha256
+        (base32 "1hjnc4143dvcrp9m4vnxm4fs2ahiagp5lklsqp1nki341kh0samn"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-cffi
+                             python-packaging
+                             ;;python-backports-zoneinfo ; needed for python_version<3.9
+                             r-minimal))
+    (native-inputs (list zlib
+                         icu4c
+                         libdeflate
+                         python-cffi
+                         python-coverage
+                         python-packaging
+                         python-pytest
+                         python-pytest-cov
+                         python-setuptools
+                         python-wheel
+                         r-survival))
+    (home-page "https://rpy2.github.io/")
+    (synopsis "Low-level interface from Python to the R")
+    (description "Low-level interface for rpy2. rpy2 is an interface to R
+ running embedded in a Python process.")
+    (license license:gpl2)))
+
+
+(define-public python-rpy2-robjects
+  (package
+    (name "python-rpy2-robjects")
+    (version "3.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "rpy2_robjects" version))
+       (sha256
+        (base32 "0yn4nq26na9hzlm08vsxr050ls5nmngpyma49fpfwc9mhxc7njlk"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-jinja2
+                             python-packaging
+                             python-rpy2-rinterface
+                             ;;python-backports-zoneinfo; needed for python_version<3.9
+                             python-tzlocal))
+    (native-inputs (list python-coverage
+                         python-ipython
+                         python-numpy
+                         python-packaging
+                         python-pandas
+                         python-pytest
+                         python-pytest-cov
+                         python-setuptools
+                         python-wheel))
+    (home-page #f)
+    (synopsis "Python interface to the R language (embedded R)")
+    (description "Python interface to the R language (embedded R).")
+    (license #f)))
+
+
+(define-public python-rpy2-patched
+  ;; TODO: Delete this after python-rpy2 is fixed upstream.
+  (package
+    (inherit python-rpy2)
+    (name "python-rpy2")
+    (version "3.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "rpy2" version))
+       (sha256
+        (base32 "1l3paflfc2wczjms9ghaklg4bxg0c2cqh4anvlskpl4id9vsakhp"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs python-rpy2)
+       (prepend r-minimal)
+       (prepend python-rpy2-rinterface)
+       (prepend python-rpy2-robjects)))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'fix-license-metadata
+            (lambda* _
+              ;; Remove one field
+              (substitute* "./pyproject.toml"
+                (("license = \"GPL-2.0-or-later\"\n")
+                 "")
+                ;; update remaining field to acceptable PEP 621 format
+                (("^license-files = .*$")
+                 "license = {file = \"LICENSE\"}\n"))))
+          (delete 'check))))))
+
+
+(define-public r-thor
+  (package
+    (name "r-thor")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "thor" version))
+       (sha256
+        (base32 "1g9204n6khm1k9ifwlmhbycfp996k5c2zpcmk2aqd95iqafpaw4g"))))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-r6" ,r-r6)
+                         ("r-storr" ,r-storr)))
+    (native-inputs (list r-testthat r-knitr))
+    (home-page "https://github.com/richfitz/thor")
+    (synopsis "R binding for the ‘Lightning’ database (LMDB) ")
+    (description
+     "This package is an  R interface to LMDB.
+ LMDB is an embedded transactional key-value store and this package provides R mappings to it.
+ It wraps the entire LMDB interface, except for support for duplicated keys.")
+    (license license:openldap2.8)))
diff --git a/gn/packages/virtualization.scm b/gn/packages/virtualization.scm
index e0eb016..22753f8 100644
--- a/gn/packages/virtualization.scm
+++ b/gn/packages/virtualization.scm
@@ -16,7 +16,8 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-xyz))
+  #:use-module (gnu packages python-xyz)
+  #:use-module (past packages python27))
 
 (define-public gem5
   (package
diff --git a/gn/packages/yaj.scm b/gn/packages/yaj.scm
index c36a6cc..aa5a0eb 100644
--- a/gn/packages/yaj.scm
+++ b/gn/packages/yaj.scm
@@ -5,6 +5,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
+  #:use-module (gn packages python)
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -12,7 +13,8 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages web)
-  #:use-module (gn packages web))
+  #:use-module (gn packages web)
+  #:use-module (gn packages check))
 
 (define-public python-elasticsearch
   (package
diff --git a/gn/past/genenetwork1.scm b/gn/past/genenetwork1.scm
index 717aff6..ff5c7a4 100644
--- a/gn/past/genenetwork1.scm
+++ b/gn/past/genenetwork1.scm
@@ -21,7 +21,7 @@
   #:use-module (gnu packages bootstrap)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cran)
-  #:use-module (gnu packages crates-io)
+  #:use-module (past-crates packages crates-io)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages ghostscript)
diff --git a/gn/services/bnw-container.scm b/gn/services/bnw-container.scm
index 4309f75..723e063 100644
--- a/gn/services/bnw-container.scm
+++ b/gn/services/bnw-container.scm
@@ -84,7 +84,7 @@
   ;; We don't need any packages inside the container.
   (packages (list coreutils))
 
-  (services (list (service dhcp-client-service-type)
+  (services (list (service dhcp-service-type)
                   (service bnw-service-type
                            ;; The following is for testing:
                            ;(bnw-configuration
diff --git a/gn/services/databases.scm b/gn/services/databases.scm
index 4cbbb5e..fbdf39e 100644
--- a/gn/services/databases.scm
+++ b/gn/services/databases.scm
@@ -54,6 +54,8 @@
                  (default "/var/lib/virtuoso/virtuoso.lck"))
   (transaction-file virtuoso-configuration-transaction-file
                     (default "/var/lib/virtuoso/virtuoso.trx"))
+  (error-log-file virtuoso-configuration-error-log-file
+                  (default "/var/lib/virtuoso/virtuoso-errors.log"))
   (syslog virtuoso-configuration-syslog
           (default "0")))
 
@@ -116,10 +118,11 @@
                                       #$(virtuoso-configuration-http-server-ip config)
                                       #$(virtuoso-configuration-http-server-port config)))
                             (format port
-                                    "[Database]~%DatabaseFile = ~a~%LockFile = ~a~%TransactionFile = ~a~%Syslog = ~a~%"
+                                    "[Database]~%DatabaseFile = ~a~%LockFile = ~a~%TransactionFile = ~a~%ErrorLogFile = ~a~%Syslog = ~a~%"
                                     #$(virtuoso-configuration-database-file config)
                                     #$(virtuoso-configuration-lock-file config)
                                     #$(virtuoso-configuration-transaction-file config)
+                                    #$(virtuoso-configuration-error-log-file config)
                                     #$(virtuoso-configuration-syslog config))))))
              #:directory #$(virtuoso-configuration-state-directory config)
              #:user "virtuoso"
diff --git a/gn/services/discourse.scm b/gn/services/discourse.scm
index 0074c7b..feebb98 100644
--- a/gn/services/discourse.scm
+++ b/gn/services/discourse.scm
@@ -4,7 +4,8 @@
              (gn packages ruby)
              (guix modules)
              (guix records)
-             (ice-9 match))
+             (ice-9 match)
+             (gnu packages ruby-check))
 (use-service-modules networking shepherd web)
 (use-package-modules node ruby)
 
@@ -120,7 +121,7 @@
               (list node)
               %base-packages))
 
-  (services (list (service dhcp-client-service-type)
+  (services (list (service dhcp-service-type)
                   (service discourse-service-type
                            ;; The following is for testing:
                            ;(discourse-configuration
diff --git a/gn/services/genecup-container.scm b/gn/services/genecup-container.scm
index 42ad097..d61ed80 100644
--- a/gn/services/genecup-container.scm
+++ b/gn/services/genecup-container.scm
@@ -6,7 +6,8 @@
              (guix modules)
              (guix packages)
              (guix records)
-             (ice-9 match))
+             (ice-9 match)
+             ((gnu packages nss) #:select (nss-certs)))
 (use-service-modules shepherd)
 (use-package-modules certs compression)
 
diff --git a/gn/services/gitea-container.scm b/gn/services/gitea-container.scm
index 5e707ec..397e6fb 100644
--- a/gn/services/gitea-container.scm
+++ b/gn/services/gitea-container.scm
@@ -90,5 +90,5 @@
                   (id 998))
                 %base-groups))
 
-  (services (list (service dhcp-client-service-type)
+  (services (list (service dhcp-service-type)
                   (service gitea-service-type))))
diff --git a/gn/services/monitoring.scm b/gn/services/monitoring.scm
new file mode 100644
index 0000000..9475d31
--- /dev/null
+++ b/gn/services/monitoring.scm
@@ -0,0 +1,49 @@
+(define-module (gn services monitoring)
+  #:use-module (gnu)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services databases)
+  #:use-module ((gn packages guile) #:select (guile-sheepdog))
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:use-module (ice-9 match)
+  #:export (guile-sheepdog-configuration
+	    guile-sheepdog-configuration?
+	    guile-sheepdog-configuration-settings-file
+	    guile-sheepdog-configuration-package
+	    guile-sheepdog-service-type))
+
+(define-record-type* <guile-sheepdog-configuration>
+  guile-sheepdog-configuration
+  make-guile-sheepdog-configuration
+  guile-sheepdog-configuration?
+  (settings-file guile-sheepdog-configuration-settings-file
+		 (default "/etc/conn.scm"))
+  (package guile-sheepdog-configuration-package (default guile-sheepdog)))
+
+(define (guile-sheepdog-gexp config)
+  (match-record config <guile-sheepdog-configuration> (settings-file package)
+    (program-file
+     "guile-sheepdog"
+     (with-imported-modules '((guix build utils))
+       #~(begin
+	   (use-modules (guix build utils))
+	   (invoke #$(file-append package "/bin/guile-sheepdog") #$settings-file))))))
+
+(define (guile-sheepdog-shepherd-service config)
+  (shepherd-service
+      (documentation "Run Sheepdog")
+      (provision '(guile-sheepdog))
+      (requirement '(networking redis))
+      (start #~(make-forkexec-constructor
+		(list #$(guile-sheepdog-gexp config))
+		#:log-file "/var/log/sheepdog.log"))
+      (stop #~(make-kill-destructor))))
+
+(define guile-sheepdog-service-type
+  (service-type
+   (name 'guile-sheepdog)
+   (description "Run sheepdog monitor")
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             (compose list guile-sheepdog-shepherd-service))))
+   (default-value (guile-sheepdog-configuration))))
diff --git a/gn/services/pluto.scm b/gn/services/pluto.scm
index 420e2cf..c6dc40f 100644
--- a/gn/services/pluto.scm
+++ b/gn/services/pluto.scm
@@ -4,7 +4,8 @@
              (gn packages julia)
              (guix modules)
              (guix records)
-             (ice-9 match))
+             (ice-9 match)
+             ((gnu packages nss) #:select (nss-certs)))
 (use-service-modules shepherd)
 (use-package-modules
   admin