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.scm319
-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.scm40
-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.scm145
-rw-r--r--gn/packages/guile.scm72
-rw-r--r--gn/packages/java.scm1
-rw-r--r--gn/packages/javascript.scm359
-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.scm40
-rw-r--r--gn/packages/python.scm81
-rw-r--r--gn/packages/r-shiny.scm47
-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/web.scm20
-rw-r--r--gn/packages/yaj.scm3
-rw-r--r--gn/past/genenetwork1.scm2
-rw-r--r--gn/services/bnw-container.scm2
-rw-r--r--gn/services/databases.scm11
-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/pluto.scm3
39 files changed, 1598 insertions, 371 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 3f89abe..e6ca5db 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -41,8 +41,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages cran)
-  #: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)
@@ -55,6 +54,7 @@
   #:use-module (gnu packages graph)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
@@ -74,11 +74,13 @@
   #:use-module (gnu packages python-build)
   #: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)
@@ -2163,6 +2165,7 @@ suitable for long reads, but works also well with short reads.")
     (build-system cmake-build-system)
     (arguments
      (list
+       #:tests? #f  ;; FIXME: tests are broken
        #:phases
        #~(modify-phases %standard-phases
            (add-after 'unpack 'use-gnuinstalldirs-macros
@@ -2337,14 +2340,14 @@ in-memory footprint at the cost of packing and unpacking.")
 (define-public vg
   (package
     (name "vg")
-    (version "1.61.0")
+    (version "1.65.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "https://github.com/vgteam/vg/releases/download/v"
                             version "/vg-v" version ".tar.gz"))
         (sha256
-         (base32 "1yb8ffqq65ma5di42qlj483x42viq5j4xyyg3vpww60gm15n1yxx"))
+         (base32 "022wiz0rs1x90nk9zaxcf8szhma8kzygnbfhciq9166kjysd0pc6"))
         (snippet
          #~(begin
              (use-modules (guix build utils))
@@ -2504,8 +2507,11 @@ in-memory footprint at the cost of packing and unpacking.")
                 (substitute* "Makefile"
                   ((".*test-docs.*") "")))))
           (add-after 'build 'build-manpages
-            (lambda* (#:key inputs #:allow-other-keys)
-              (invoke "make" "man")))
+            (lambda* (#:key make-flags #:allow-other-keys)
+              ;; vg is not in PATH. Replace it with full path.
+              (substitute* "doc/vgmanmd.py"
+                (("'vg'") "'./bin/vg'"))
+              (apply invoke "make" "man" make-flags)))
           (replace 'install
             (lambda* (#:key outputs #:allow-other-keys)
               (let ((out (assoc-ref outputs "out")))
@@ -2525,9 +2531,11 @@ in-memory footprint at the cost of packing and unpacking.")
              bash-tap
              bc
              cmake-minimal
+             ghc-pandoc
              jq
              perl
              pkg-config
+             python
              samtools
              util-linux
              which
@@ -2580,121 +2588,159 @@ multiple sequence alignment.")
         license:zlib    ; deps/sonLib/externalTools/cutest
         license:boost1.0)))) ; catch.hpp
 
+(define-public wfmash-0.14
+  (package
+    (inherit wfmash)
+    (version "0.14.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/waveygang/wfmash/releases/download/v"
+                           version "/wfmash-v" version ".tar.gz"))
+       (sha256
+        (base32
+         "1mk3jschn3hdr45glds65g3hxk7v6nc3plkvxmfbd5pr4kyzlf13"))
+       (snippet
+        #~(begin
+            (use-modules (guix build utils))
+            ;; Unbundle atomic-queue.
+            (delete-file-recursively "src/common/atomic_queue")
+            (substitute* "src/align/include/computeAlignments.hpp"
+              (("\"common/atomic_queue/atomic_queue.h\"")
+               "<atomic_queue/atomic_queue.h>"))
+            ;; Remove compiler optimizations.
+            (substitute* (find-files "." "CMakeLists\\.txt")
+              (("-march=native ") ""))))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments wfmash)
+       ((#:tests? tests? #f) #f)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (replace 'build-check-prerequisites
+              (lambda _
+                (let ((wfa2-lib #$(string-append "../wfmash-v"
+                                                 version
+                                                 "/src/common/wflign/deps/WFA2-lib")))
+                  (substitute* (string-append wfa2-lib "/Makefile")
+                    ;; Remove architecture-specific flags.
+                    (("-march=x86-64-v3") ""))
+                  (substitute* (string-append wfa2-lib "/tests/wfa.utest.sh")
+                    ;; Fix time command.
+                    (("\\\\time -v") "time"))
+                  ;; Build wfa2-lib.
+                  (invoke "make" "-C" wfa2-lib
+                          #$(string-append "CC=" (cc-for-target))))))))))
+    (inputs
+     (modify-inputs (package-inputs wfmash)
+       (prepend jemalloc)
+       (delete "libdeflate")))))
+
 (define-public pggb
-  (let ((commit "9ebff27320382e470ed38a85b4448402e1e7c353")
-        (revision "1"))
-    (package
-      (name "pggb")
-      (version (git-version "0.5.1" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/pangenome/pggb")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32 "0rgpj52q3ai7f1saqbilgx5gz4f403x3427wq649qwv84ivmi1sf"))))
-      (build-system copy-build-system)
-      (arguments
-       (list
-         #:install-plan
-         #~'(("pggb" "bin/")
-             ("partition-before-pggb" "bin/")
-             ("scripts/" "bin/")
-             ("scripts" "bin/scripts"))
-         #:phases
-         #~(modify-phases %standard-phases
-             (add-after 'unpack 'force-python3
-               (lambda _
-                 (substitute* (find-files "scripts" "\\.py$")
-                   (("/usr/bin/python") "/usr/bin/python3"))))
-             (add-before 'install 'patch-and-wrap-scripts
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (substitute* "scripts/vcf_preprocess.sh"
-                   (("bcftools ")
-                    (string-append (search-input-file inputs "/bin/bcftools") " ")))
-                 (wrap-script "scripts/net2communities.py"
-                   `("GUIX_PYTHONPATH" ":" prefix
-                     (,(getenv "GUIX_PYTHONPATH"))))))
-             (add-after 'install 'wrap-scripts
-               (lambda* (#:key inputs outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "out")))
-                   (for-each
-                     (lambda (file)
-                       (wrap-script file
-                         `("R_LIBS_SITE" ":" prefix
-                           (,(getenv "R_LIBS_SITE")))
-                         `("PATH" ":" prefix
-                           ,(map (lambda (input) (string-append input "/bin"))
-                                 '#$(map (lambda (label)
-                                           (or (this-package-input (string-append label "-hwcaps"))
-                                               (this-package-input label)))
-                                         (list "bc"
-                                               "bcftools"
-                                               "bedtools"
-                                               "gfaffix"
-                                               "htslib"
-                                               "fastix"
-                                               "multiqc"
-                                               "mummer"
-                                               "odgi"
-                                               "pafplot"
-                                               "parallel"
-                                               "pigz"
-                                               "python"
-                                               "r-data-table"
-                                               "r-minimal"
-                                               "rtg-tools"
-                                               "samtools"
-                                               "seqwish"
-                                               "smoothxg"
-                                               "time"
-                                               "vcfbub"
-                                               "vcflib"
-                                               "vg"
-                                               "wfmash"))))))
-                          (list (string-append out "/bin/pggb")
-                                (string-append out "/bin/partition-before-pggb")
-                                (string-append out "/bin/gfa2evaluation.sh")
-                                (string-append out "/bin/scripts/gfa2evaluation.sh"))))))
-             (add-after 'install 'substitute-file-paths
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let ((out (assoc-ref outputs "out")))
-                   (substitute* (string-append out "/bin/gfa2evaluation.sh")
-                     (("/usr/local/bin/vcf_preprocess.sh")
-                      (string-append out "/bin/vcf_preprocess.sh"))
-                     (("/usr/local/bin/nucmer2vcf.R")
-                      (string-append out "/bin/nucmer2vcf.R")))))))))
-      (inputs
-       (list bc
-             bcftools
-             bedtools
-             gfaffix
-             guile-3.0      ; for wrap-script
-             htslib         ; tabix
-             fastix
-             multiqc
-             mummer
-             odgi
-             pafplot
-             parallel
-             pigz
-             python
-             python-igraph
-             r-data-table
-             r-minimal
-             rtg-tools
-             samtools
-             seqwish
-             smoothxg
-             time
-             vcfbub
-             vcflib
-             vg
-             wfmash))
-      (home-page "https://doi.org/10.1101/2023.04.05.535718")
-      (synopsis "PanGenome Graph Builder")
-      (description "@command{pggb} builds
+  (package
+    (name "pggb")
+    (version "0.7.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pangenome/pggb")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1k3ffl5h5jqnz9k9y5cjqr8z6hh0gyjfj4szggz11lncp5wkskgv"))))
+    (build-system copy-build-system)
+    (arguments
+     (list
+      #:install-plan
+      #~'(("pggb" "bin/")
+          ("partition-before-pggb" "bin/")
+          ("scripts/" "bin/")
+          ("scripts" "bin/scripts"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'force-python3
+            (lambda _
+              (substitute* (find-files "scripts" "\\.py$")
+                (("/usr/bin/python") "/usr/bin/python3"))))
+          (add-before 'install 'patch-and-wrap-scripts
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "scripts/vcf_preprocess.sh"
+                (("bcftools ")
+                 (string-append (search-input-file inputs "/bin/bcftools") " ")))
+              (wrap-script "scripts/net2communities.py"
+                           `("GUIX_PYTHONPATH" ":" prefix
+                             (,(getenv "GUIX_PYTHONPATH"))))))
+          (add-after 'install 'wrap-scripts
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (for-each
+                 (lambda (file)
+                   (wrap-script file
+                                `("R_LIBS_SITE" ":" prefix
+                                  (,(getenv "R_LIBS_SITE")))
+                                `("PATH" ":" prefix
+                                  ,(map (lambda (input) (string-append input "/bin"))
+                                        '#$(map (lambda (label)
+                                                  (or (this-package-input (string-append label "-hwcaps"))
+                                                      (this-package-input label)))
+                                                (list "bc"
+                                                      "bcftools"
+                                                      "bedtools"
+                                                      "gfaffix"
+                                                      "htslib"
+                                                      "multiqc"
+                                                      "odgi"
+                                                      "parallel"
+                                                      "pigz"
+                                                      "python"
+                                                      "r-data-table"
+                                                      "r-minimal"
+                                                      "rtg-tools"
+                                                      "samtools"
+                                                      "seqwish"
+                                                      "smoothxg"
+                                                      "time"
+                                                      "vcfbub"
+                                                      "vg"
+                                                      "wfmash"))))))
+                 (list (string-append out "/bin/pggb")
+                       (string-append out "/bin/partition-before-pggb")
+                       (string-append out "/bin/gfa2evaluation.sh")
+                       (string-append out "/bin/scripts/gfa2evaluation.sh"))))))
+          (add-after 'install 'substitute-file-paths
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (substitute* (string-append out "/bin/gfa2evaluation.sh")
+                  (("/usr/local/bin/vcf_preprocess.sh")
+                   (string-append out "/bin/vcf_preprocess.sh"))
+                  (("/usr/local/bin/nucmer2vcf.R")
+                   (string-append out "/bin/nucmer2vcf.R")))))))))
+    (inputs
+     (list bc
+           bcftools
+           bedtools
+           gfaffix
+           guile-3.0                    ; for wrap-script
+           htslib                       ; tabix
+           multiqc
+           odgi
+           parallel
+           pigz
+           python
+           python-igraph
+           r-data-table
+           r-minimal
+           rtg-tools
+           samtools
+           seqwish
+           smoothxg
+           time
+           vcfbub
+           vg
+           wfmash-0.14))
+    (home-page "https://doi.org/10.1101/2023.04.05.535718")
+    (synopsis "PanGenome Graph Builder")
+    (description "@command{pggb} builds
 @url{https://doi.org/10.1146%2Fannurev-genom-120219-080406, pangenome}
 @url{https://doi.org/10.1038/nbt.4227, variation graphs} from a set of input
 sequences.
@@ -2719,7 +2765,7 @@ such as the @url{https://github.com/vgteam/vg, vg} and
 @command{pggb} has been tested at scale in the @acronym{Human Pangenome
 Reference Consortium, HPRC} as a method to build a graph from the
 @url{https://doi.org/10.1101/2022.07.09.499321, draft human pangenome}.")
-      (license license:expat))))
+    (license license:expat)))
 
 (define use-glibc-hwcaps
   (package-input-rewriting/spec
@@ -4445,7 +4491,7 @@ automatically vectorize for different architectures without adapting the code.")
 
 (define-public r-rrbgen
   (package
-    (name "r-stitch")
+    (name "r-rrbgen")
     (version "0.0.6")
     (source
      (origin
@@ -4554,6 +4600,33 @@ 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
     (name "r-stitch")
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 4cebb33..23182a2 100644
--- a/gn/packages/crates-io.scm
+++ b/gn/packages/crates-io.scm
@@ -5,9 +5,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system cargo)
-  #: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))
 
@@ -17,7 +15,7 @@
     (version "0.12.2")
     (source (origin
               (method url-fetch)
-              (uri (crate-uri "assert-cmd" version))
+              (uri (crate-uri "assert_cmd" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
@@ -688,32 +686,28 @@ or any combination.")
     (license license:gpl3+)))
 
 (define-public gn-rust-correlation
-  (let ((commit "a22381e9830bac9a6848449279d258397217e251")
+  (let ((commit "d7b1fd65814511890a4e606e6e610379b6d89393")
         (revision "0"))
     (package
       (name "gn-rust-correlation")
       (version (git-version "0.1.4" revision commit))
       (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/Alexanderlacuna/correlation_rust.git")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "1cb197p8zmgxymzs9b7bygs0kg67809z6gc2svza909sxr9ac5ps"))))
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Alexanderlacuna/correlation_rust.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1z5p9pjja6a697l558axnp1hr5376b6ng3yl3vxcp2h1skfrykvq"))))
       (build-system cargo-build-system)
-      (native-inputs
-       (list gsl))
+      (native-inputs (list gsl))
       (arguments
-       `(#:cargo-inputs 
-         (("rust-serde" ,rust-serde-1)
-	  ("rust-serde-json" ,rust-serde-json-1)
-	  ("GSL" ,rust-gsl)
-	  ("rust-assert-approx-eq"  ,rust-assert-approx-eq-1))
-	 #:cargo-development-inputs
-	 (("rust-criterion" ,rust-criterion-0.3))))
+       `(#:cargo-inputs (("rust-serde" ,rust-serde-1)
+                         ("rust-serde-json" ,rust-serde-json-1)
+                         ("GSL" ,rust-gsl)
+                         ("rust-assert-approx-eq" ,rust-assert-approx-eq-1))
+         #:cargo-development-inputs (("rust-criterion" ,rust-criterion-0.3))))
       (home-page "https://github.com/Alexanderlacuna/correlation_rust")
       (synopsis "Re-implementation of genenetwork/correlation in Rust")
       (description "Re-implementation of genenetwork/correlation in Rust")
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 4dcb8f9..d7ec822 100644
--- a/gn/packages/genenetwork.scm
+++ b/gn/packages/genenetwork.scm
@@ -20,11 +20,12 @@
   #: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 +41,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)
@@ -49,6 +51,7 @@
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages serialization)
   #:use-module (gn packages bioinformatics)
   #:use-module (gn packages crates-io)
   #:use-module (gn packages gemma)
@@ -57,8 +60,8 @@
   #: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
@@ -115,7 +118,7 @@
       ((#:tests? _ #f) #f)))))
 
 (define-public genenetwork3
-  (let ((commit "f9f752152e9e00dbfb756d8a08c10e1892685104")
+  (let ((commit "d24ffc9afa92c7d938813ee6745f8d43ac88a0a8")
         (revision "5"))
     (package
       (name "genenetwork3")
@@ -129,7 +132,7 @@
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1ggc597xqj280qdp5gzlk745ldgx54k5sgn1w865ini6ph3i18zr"))))
+           "19lnwrb30hz3wp2nh09fvvpd75jig5gy5vjfzw3m9k9bvd6ac9f4"))))
       (inputs
        (list python-click))
       (native-inputs
@@ -138,20 +141,22 @@
              python-mypy-extensions
              python-pylint))
       (propagated-inputs
-       (list csvdiff
+       (list gn-libs
+             csvdiff
+	     coreutils-minimal
              diffutils
              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
@@ -175,6 +180,7 @@
              r-rjson
              r-stringi
              r-wgcna
+	     r-thor
              rust-qtlreaper))
       (build-system python-build-system)
       (arguments
@@ -189,8 +195,39 @@
       (description "GeneNetwork3 API for data science and machine learning.")
       (license license:agpl3+))))
 
+
+(define-public temporary-python-flask-session
+  ;; This is a stop-gap to get the applications building with the guix channel
+  ;; set to 61428cc.
+  ;; Remove this as soon as the applications are building with mainline
+  ;; python-flask-session.
+  (package
+    (name "temporary-python-flask-session")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flask_session" version))
+       (sha256
+        (base32
+         "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
+    (build-system pyproject-build-system)
+    (arguments
+     '(#:tests? #f)) ; Tests require the various storage backends to be present
+    (inputs
+     (list python-flit-core))
+    (propagated-inputs
+     (list python-cachelib python-flask python-msgspec))
+    (home-page "https://github.com/fengsp/flask-session")
+    (synopsis "Adds server-side session support to your Flask application")
+    (description
+     "Flask-Session is an extension for Flask that adds support for
+Server-side sessions, with a variety of different backends for session
+storage.")
+    (license license:bsd-3)))
+
 (define-public genenetwork2
-  (let ((commit "a08d76600b46968131b51ca6880c348262947119")
+  (let ((commit "3afc2ee31654776c5ae0defb7f65efcc2f462f80")
         (revision "4"))
     (package
       (name "genenetwork2")
@@ -203,7 +240,7 @@
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "0818642y05jk4662jx5w6cc611k92zwhdqbnrs3sjs2ryqhjwdc8"))))
+                  "1l60gav2fq2apcl32da1i383xbnyll3sznj36jhirfshmdcq68sq"))))
       (native-inputs
        (list graphviz))
       (propagated-inputs
@@ -265,6 +302,8 @@
              javascript-uikit
              javascript-underscore-string
              javascript-zxcvbn
+	     javascript-xterm
+	     javascript-xterm-style
              js-jstat
              js-md5
              js-parsley
@@ -282,17 +321,17 @@
              python-cssselect
              python-flask
              python-flask-debugtoolbar
-             python-flask-session
+             ;;python-flask-session
+             temporary-python-flask-session
              python-htmlgen
              python-ijson
              python-jinja2
              python-lxml
              python-markdown
              python-mypy
-             python-mysqlclient
+             python-mysqlclient-2.2.7
              python-numpy
              python-pandas
-             python-pillow
              python-pylint
              python-pymonad
              python-pytest
@@ -300,13 +339,14 @@
              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-sqlalchemy
              python-wrapper
              python-xlsxwriter
+	     python-pillow-9
              r
              r-ctl
              r-qtl
@@ -314,8 +354,6 @@
              redis
              rust-qtlreaper
              which
-             ; javascript-xterm -- disabled until we know what to do with it, not working on production
-             ; javascript-xterm-style
              ; javascript-xterm-addon-fit
              ))
       (inputs
@@ -341,21 +379,6 @@
                        (("\\./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"))
@@ -434,8 +457,8 @@
      ))))))
 
 (define-public gn-uploader
-  (let ((commit "60fde66e02dba842b20fa126ff3b2ed9ec2638e6")
-       (version "0.0.1"))
+  (let ((commit "ea7d74dd341da50c1956ce59d5c788525893b0bf")
+       (version "0.1.1"))
     (package
      (name "gn-uploader")
      (version (string-append version "-" (string-take commit 8)))
@@ -445,38 +468,46 @@
        (uri (git-reference
             (url "https://git.genenetwork.org/gn-uploader")
             (commit commit)))
+       (file-name (git-file-name name version))
        (hash
        (content-hash
         (base32
-         "1q04viyf7d0q30k3424hrzsh9wxhhgs7hywlhzl3m68jki4zq1i7")))))
+         "07wi288y0sbmvr7lv6ns69mj4h1r8h73dkglqdf4szvqlyr078ld")))))
      (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
             nss-certs
+            python-lxml
             python-redis
             python-flask
             python-pyyaml
             python-authlib
             python-pymonad
             python-jsonpickle
-            python-mysqlclient
-            python-flask-session
-            javascript-jquery
-            javascript-bootstrap
+            python-mysqlclient-2.2.7
+            ;;python-flask-session
+            temporary-python-flask-session
+            web-bootstrap-5
+            javascript-jquery-1
+            javascript-datatables-bootstrap5
+            javascript-datatables-select
+            javascript-datatables-buttons-3
+            javascript-datatables-scroller-2
             node-resumablejs))
      (synopsis "GeneNetwork Quality Control Application")
      (description
@@ -487,7 +518,7 @@
      (license license:agpl3+))))
 
 (define-public gn-auth
-  (let ((commit "346217b95a4aac17a5c7ac05c00d1205fa1855c5")
+  (let ((commit "9839e5bf35bd7be158b35fa98a734f7a3473688d")
         (revision "01"))
     (package
       (name "gn-auth")
@@ -498,10 +529,11 @@
          (uri (git-reference
                (url "https://git.genenetwork.org/gn-auth")
                (commit commit)))
+         (file-name (git-file-name name version))
          (hash
           (content-hash
            (base32
-            "0nyxml3s778zaq3r0r9z5d7010hmbzvlwdbm5xnmrzc0xlx223g3")))))
+            "1lsi7z8hvpdqgcsx3zc5ip701xka9s75c7r4pjlby2ryjc0gw83d")))))
       (build-system python-build-system)
       (arguments
        (list
@@ -510,14 +542,15 @@
             (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
@@ -528,7 +561,7 @@
              python-email-validator
              python-flask
              python-flask-cors
-             python-mysqlclient
+             python-mysqlclient-2.2.7
              python-pymonad
              python-redis
              yoyo-migrations))
@@ -539,8 +572,8 @@
 
 
 (define-public gn-libs
-  (let ((commit "66bac3df1748ff263c991e121b3ce80599807998")
-        (revision "01"))
+  (let ((commit "894021d27da14bfb0bf286e188a36741bc475906")
+        (revision "02"))
     (package
       (name "gn-libs")
       (version (git-version "0.0.0" revision commit))
@@ -550,10 +583,11 @@
          (uri (git-reference
                (url "https://git.genenetwork.org/gn-libs")
                (commit commit)))
+         (file-name (git-file-name name version))
          (hash
           (content-hash
            (base32
-            "11qpz6x4hgi13j1wznlxyl9fxh1la4f3s9vand34zmxk1diqisbb")))))
+            "0ysj8cs259naa0s6s0gr8149qj6zra3iq0n1fspq3bw0ij54wf8i")))))
       (build-system pyproject-build-system)
       (arguments
        (list
@@ -565,12 +599,15 @@
                   (invoke "pytest" "-k" "unit_test")))))))
       (native-inputs
        (list python-mypy
+             python-wheel
              python-pylint
-             python-pytest))
+             python-pytest
+             python-setuptools))
       (propagated-inputs
        (list python-authlib
              python-pymonad
-             python-mysqlclient))
+             python-requests
+             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 2b6bc5b..815df1f 100644
--- a/gn/packages/guile.scm
+++ b/gn/packages/guile.scm
@@ -11,14 +11,15 @@
   #:use-module ((gnu packages compression) #:select (zlib))
   #:use-module ((gnu packages perl) #:select (perl))
   #:use-module ((gnu packages texinfo) #:select (texinfo))
+  #:use-module ((gnu packages version-control) #:select (git-minimal))
   #:use-module (guix utils)
   #:use-module (gnu packages build-tools)
   #: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 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))
+  #: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 parallel) #:select (parallel))
   #:use-module ((gnu packages perl) #:select (perl))
   #:use-module ((gnu packages tls) #:select (guile-gnutls openssl)))
@@ -42,9 +43,9 @@
     (arguments
      `(#:modules (((guix build guile-build-system)
                    #:select (target-guile-effective-version))
-                  ,@%gnu-build-system-modules)
+                  ,@%default-gnu-imported-modules)
        #:imported-modules ((guix build guile-build-system)
-                           ,@%gnu-build-system-modules)
+                           ,@%default-gnu-imported-modules)
        #:configure-flags
        (list (string-append
               "--with-guile-site-dir=" %output "/share/guile/site/"
@@ -118,7 +119,7 @@ for MySQL.")
     (license license:gpl2+)))
 
 (define-public gn-guile
-  (let ((commit "99cf7800246f6af0df8407f7595641933891ad85")
+  (let ((commit "454244b774ece37f04f146c74353ea4ec35d43e1")
 	(revision "0"))
     (package
       (name "gn-guile")
@@ -131,13 +132,13 @@ for MySQL.")
 		(file-name (string-append name "-" version))
 		(sha256
 		 (base32
-                  "0sxg3cd69g2sik1x4di20b4da2qn64d82ikmfkas5w2x1nq3r6pj"))))
+                  "1n1zjpwfksq8bf42d7xr7lnblgsbqc0yszkbid253s943fyxzhfn"))))
       (build-system guile-build-system)
       (native-inputs (list guile-3.0))
-      (inputs
+      (propagated-inputs
        (list guile-3.0 guile3-dbi guile3-dbd-mysql guile-fibers guile-gnutls guile-readline
 	     guile-commonmark guile-redis openssl nss-certs gemma parallel guile-hashing
-	     guile-json-4 bash-minimal))
+	     guile-json-4 bash-minimal git-minimal guile-lmdb guile-lib))
       (arguments
        (list
 	#:not-compiled-file-regexp "(guix|guix/.*)[.]scm$"
@@ -147,6 +148,12 @@ for MySQL.")
 		    (guix build utils))
 	#:phases
 	#~(modify-phases %standard-phases
+	    (add-after 'unpack 'patch-git
+	      (lambda* (#:key inputs #:allow-other-keys)
+		(let ((git (assoc-ref inputs "git-minimal")))
+		  (substitute* "web/view/markdown.scm"
+		    (("\"git\"") (string-append "\"" git "/bin/git" "\""))
+		    (("git -C") (string-append git "/bin/git -C"))))))
 	    (add-after 'build 'install-script
 	      (lambda* _
 		(let* ((bash #$(this-package-input "bash-minimal"))
@@ -164,6 +171,8 @@ for MySQL.")
 		       (guile-redis #$(this-package-input "guile-redis"))
 		       (guile-hashing #$(this-package-input "guile-hashing"))
 		       (guile-json-4 #$(this-package-input "guile-json"))
+		       (guile-lmdb #$(this-package-input "guile-lmdb"))
+		       (guile-lib #$(this-package-input "guile-lib"))
 		       (out #$output)
 		       (bin (string-append out "/bin"))
 		       (effective (read
@@ -179,6 +188,8 @@ for MySQL.")
                        (scm-dir (string-append "/share/guile/site/" effective))
 		       (guile-inputs (list guile3-dbi
 					   guile3-dbd-mysql
+					   guile-lmdb
+					   guile-lib
 					   guile-fibers
 					   guile-gnutls
 					   guile-readline
@@ -186,28 +197,59 @@ 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)
+			       (("@SHELL@") bash)
+			       (("guile") guile)
+			       (("web/webserver.scm") webserver))
+		  (substitute* "bin/gn-guile-dev"
+		    (("@SHELL@") bash)
 		    (("guile") guile)
-		    (("web/webserver.scm") webserver))
+		    (("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")
+                   `("PATH" ":" prefix ,path)
+                   `("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")
-                    `("PATH" ":" prefix ,path)
-                    `("GUILE_AUTO_COMPILE" ":" = ("0"))
-                    `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
-                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))))))))
+		   (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)
+                   `("GUILE_AUTO_COMPILE" ":" = ("0"))
+                   `("GUILE_LOAD_PATH" ":" prefix ,scm-path)
+                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))))))))
       (home-page "https://git.genenetwork.com/gn-guile")
       (synopsis "Next generation GN code in guile")
       (description "Use of guile.")
diff --git a/gn/packages/java.scm b/gn/packages/java.scm
index f39c5c7..fe63083 100644
--- a/gn/packages/java.scm
+++ b/gn/packages/java.scm
@@ -31,6 +31,7 @@
   #: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 a70dccd..059999b 100644
--- a/gn/packages/javascript.scm
+++ b/gn/packages/javascript.scm
@@ -373,6 +373,107 @@ Javascript library, adding sorting, paging and filtering abilities to plain HTML
 tables with minimal effort.")
     (license license:expat)))
 
+
+(define-public javascript-datatables-2.2.2
+  (package
+    (name "javascript-datatables-2.2.2")
+    (version "2.2.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/DataTables/Dist-DataTables.git")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1pzpkpybcf9p81j8afyhrmq11l9lskzxhikdv7h7sb55vx98xn9s"))))
+    (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/DataTables"))
+                (source (assoc-ref %build-inputs "source")))
+           (copy-recursively source targetdir)))))
+    (propagated-inputs (list javascript-jquery-1))
+    (home-page "https://www.datatables.net/")
+    (synopsis "Tables plug-in for jQuery")
+    (description "DataTables is a table enhancing plug-in for the jQuery
+Javascript library, adding sorting, paging and filtering abilities to plain HTML
+tables with minimal effort.")
+    (license license:expat)))
+
+(define-public javascript-datatables-2.2 javascript-datatables-2.2.2)
+
+(define-public javascript-datatables-2 javascript-datatables-2.2)
+
+(define-public javascript-datatables-bootstrap5
+  (package
+    (name "javascript-datatables-bootstrap5")
+    (version "2.2.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/DataTables/Dist-DataTables-Bootstrap5.git")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0hx4m0fs0qkb73f1h3z4436dq8agrm67nib2lzac7pn8hfl09lll"))))
+    (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/DataTables"))
+                (source (assoc-ref %build-inputs "source")))
+           (copy-recursively source targetdir)))))
+    (propagated-inputs (list javascript-jquery-1))
+    (home-page "https://www.datatables.net/")
+    (synopsis "Tables plug-in for jQuery")
+    (description "DataTables is a table enhancing plug-in for the jQuery
+Javascript library, adding sorting, paging and filtering abilities to plain HTML
+tables with minimal effort.  This package comes with Bootstrap5 integration
+ files for styling.")
+    (license license:expat)))
+
+(define-public javascript-datatables-select
+  (package
+    (name "javascript-datatables-select")
+    (version "3.0.0") ; November 12, 2024
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/DataTables/Dist-DataTables-Select.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "15czp4fhvijwc9jl961nmn8ad6ms30p3c8dgpda7l542aadca45x"))))
+    (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/DataTablesExtensions/select/"))
+                (source (assoc-ref %build-inputs "source")))
+           (copy-recursively source targetdir)))))
+    (propagated-inputs (list javascript-datatables-2))
+    (home-page "https://datatables.net/extensions/select/")
+    (synopsis "Select adds item selection capabilities to a DataTable.")
+    (description "Select adds item selection capabilities to a DataTable.  Items
+ can be rows, columns or cells, which can be selected independently, or together.
+  Item selection can be particularly useful in interactive tables where users
+ can perform some action on the table, such as editing rows or marking items to
+ perform an action on.")
+    (license license:expat)))
+
 (define-public javascript-datatables-scroller-style
   (package
     (name "javascript-datatables-scroller-style")
@@ -402,6 +503,32 @@ tables with minimal effort.")
     (description "Scroller is a virtual rendering plug-in for DataTables which allows large datasets to be drawn on screen very quickly. Virtual rendering means is that only the visible portion of the table is drawn, while the scrolling container gives the visual impression that the whole table is visible, allowing excellent browser performance.")
     (license license:expat)))
 
+
+(define-public javascript-datatables-scroller-style-2.4.3
+  (package
+    (inherit javascript-datatables-scroller-style)
+    (name "javascript-datatables-scroller-style-2.4.3")
+    (version "2.4.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/DataTables/Dist-DataTables-Scroller-DataTables.git")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1b7m8xwbr05hglfy00kzv1vmqvvp9y8n1kyb3ka95gf7sllihhf9"))))
+    (propagated-inputs
+     (modify-inputs
+      (package-propagated-inputs javascript-datatables-scroller-style)
+      (delete "javascript-datatables")))))
+
+(define-public javascript-datatables-scroller-style-2.4
+  javascript-datatables-scroller-style-2.4.3)
+
+(define-public javascript-datatables-scroller-style-2
+  javascript-datatables-scroller-style-2.4)
+
 (define-public javascript-datatables-scroller
   (package
     (name "javascript-datatables-scroller")
@@ -434,34 +561,67 @@ tables with minimal effort.")
     (license license:expat)))
 
 
+(define-public javascript-datatables-scroller-2.4.3
+  (package
+    (inherit javascript-datatables-scroller)
+    (name "javascript-datatables-scroller-2.4.3")
+    (version "2.4.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/DataTables/Dist-DataTables-Scroller.git")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0ziwnwc0xbf8rsm6ibikc3a49hyq18l8ya0wmrwyba24pixhajxn"))))
+    (propagated-inputs
+     (modify-inputs
+      (package-propagated-inputs javascript-datatables-scroller-style)
+      (delete "javascript-datatables")
+      (delete "javascript-datatables-scroller-style")))))
+
+(define-public javascript-datatables-scroller-2.4
+  javascript-datatables-scroller-2.4.3)
+
+(define-public javascript-datatables-scroller-2
+  javascript-datatables-scroller-2.4)
+
+
 (define-public javascript-xterm
   (package
     (name "javascript-xterm")
-    (version "4.9.0") ; Jan 08 2021
+    (version "5.3.0") ; Feb 18 2024
     (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
-         "1ipk8l837pinl9151qcb39hfrjy5d7zzyf19nsfhv4wgavy8fcar"))))
-    (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"))))))
-    (propagated-inputs `(("source" ,source)))
+     `(#: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 "Javascript library that allows apps to bring fully-featured terminals in browsers.")
+    (synopsis
+     "Javascript library that allows apps to bring fully-featured terminals in browsers.")
     (description
      "Xterm.js is a front-end component written in TypeScript that lets applications bring fully-featured terminals to their users in the browser. It's used by popular projects such as VS Code, Hyper and Theia.")
     (license license:expat)))
@@ -470,27 +630,41 @@ tables with minimal effort.")
   (package
     (inherit javascript-xterm)
     (name "javascript-xterm-style")
-    (version "4.9.0") ; Jan 08 2021
+    (version "5.3.0") ; Feb 18 2024
     (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
-         "0nc7ysmfngzy1q1x4sasgnd5x91pqc00lgkajynz2gdan1rwsfk3"))))
+        (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")
@@ -555,6 +729,30 @@ tables with minimal effort.")
     (description "The Buttons extension for DataTables provides a common set of options, API methods and styling to display buttons on a page that will interact with a DataTable. It also provides plug-ins for file export (HTML5 and Flash), print view and column visibility. Other libraries, such as Editor and Select also provide buttons specific to their use cases.")
     (license license:expat)))
 
+(define-public javascript-datatables-buttons-3.2.2
+  (package
+    (inherit javascript-datatables-buttons)
+    (name "javascript-datatables-buttons-3.2.2")
+    (version "3.2.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/DataTables/Dist-DataTables-Buttons.git")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1186xxj6yhjqh0p13nczj25pc3c15n1f5nirl6fy649rhp4q26xc"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs javascript-datatables-buttons)
+       (delete "javascript-datatables")))))
+
+(define-public javascript-datatables-buttons-3.2
+  javascript-datatables-buttons-3.2.2)
+
+(define-public javascript-datatables-buttons-3
+  javascript-datatables-buttons-3.2)
+
 (define-public javascript-datatables-buttons-styles
   (package
     (name "javascript-datatables-buttons-styles")
@@ -867,6 +1065,25 @@ visualization components and a data-driven approach to DOM manipulation.")
                (dist (string-append source "/dist")))
           (copy-recursively dist targetdir)))))))
 
+(define-public javascript-jquery-1.12.4
+  (package
+    (inherit javascript-jquery)
+    (name "javascript-jquery-1.12.4")
+    (version "1.12.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jquery/jquery.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "02qgvwsyvvr6liijj1xyypq02svbwjlk8m9yr9dgd4hzfs50rlhq"))))))
+
+(define-public javascript-jquery-1.12 javascript-jquery-1.12.4)
+
+(define-public javascript-jquery-1 javascript-jquery-1.12)
+
 (define-public javascript-d3js-4
   (package
     (inherit javascript-d3js)
@@ -2026,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 88478a5..0000000
--- a/gn/packages/python-web.scm
+++ /dev/null
@@ -1,40 +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.2.0")
-   (source (origin
-            (method url-fetch)
-            (uri (pypi-uri "Authlib" version))
-            (sha256
-             (base32
-              "178ycfypdv1hy4zjm09rmysxakmwch2n6a5wypwmx4d5hc4fi8sg"))))
-   (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 e7cfdd7..54d45a4 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
@@ -1703,19 +1708,26 @@ window to get to RStudio for example.")
 (define-public python-flask-debugtoolbar
   (package
     (name "python-flask-debugtoolbar")
-    (version "0.11.0")
+    (version "0.16.0")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "Flask-DebugToolbar" version))
+       (uri (string-append
+	     "https://github.com/pallets-eco/flask-debugtoolbar/archive/refs/tags/"
+	     version
+	     ".tar.gz"))
        (sha256
         (base32
-         "1d5asdnk8bmh6m46pzg3i7677cjgdm9mlm3wcpk19q7dak9pjkiw"))))
-    (build-system python-build-system)
+         "1qk8kga6gjlwc0c0hr1i500rhm1qfa4gqq3djy40j95fiz1idkgy"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (propagated-inputs
      `(("python-blinker" ,python-blinker)
        ("python-flask" ,python-flask)
+       ("python-flit-core" ,python-flit-core)
        ("python-itsdangerous" ,python-itsdangerous)
+       ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)
        ("python-werkzeug" ,python-werkzeug)))
     (home-page
      "https://flask-debugtoolbar.readthedocs.io/")
@@ -1955,3 +1967,60 @@ and messages in larger desktop or server-based applications.")
 implementation of the built-in float which supports formatted output with
 SI (decimal) and IEC (binary) prefixes.")
     (license license:mpl2.0)))
+
+
+(define-public python-pillow-9
+  (package
+    (name "python-pillow-9")
+    (version "9.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Pillow" version))
+       (sha256
+        (base32 "011wgm1mssjchpva9wsi2a07im9czyjvik137xlp5f0g7vykdrkm"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   (delete-file-recursively "src/thirdparty")))
+       (patches (search-patches "python-pillow-CVE-2022-45199.patch"
+                                ;; Included in 10.1.0.
+                                "python-pillow-use-zlib-1.3.patch"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest))
+    (inputs (list freetype
+                  lcms
+                  libjpeg-turbo
+                  libtiff
+                  libwebp
+                  openjpeg
+                  zlib))
+    (propagated-inputs (list python-olefile))
+    (arguments
+     `(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-ldconfig
+                    (lambda _
+                      (substitute* "setup.py"
+                        (("\\['/sbin/ldconfig', '-p'\\]")
+                         "['true']"))))
+                  (replace 'check
+                    (lambda* (#:key outputs inputs tests? #:allow-other-keys)
+                      (when tests?
+                        (setenv "HOME"
+                                (getcwd))
+                        (add-installed-pythonpath inputs outputs)
+                        (invoke "python" "selftest.py" "--installed")
+                        (invoke "python" "-m" "pytest" "-vv")))))))
+    (home-page "https://python-pillow.org")
+    (synopsis "Fork of the Python Imaging Library")
+    (description
+     "The Python Imaging Library adds image processing capabilities to your
+Python interpreter.  This library provides extensive file format support, an
+efficient internal representation, and fairly powerful image processing
+capabilities.  The core image library is designed for fast access to data
+stored in a few basic pixel formats.  It should provide a solid foundation for
+a general image processing tool.")
+    (properties `((cpe-name . "pillow")))
+    (license (license:x11-style
+              "http://www.pythonware.com/products/pil/license.htm"
+              "The PIL Software License"))))
diff --git a/gn/packages/r-shiny.scm b/gn/packages/r-shiny.scm
index 898ee72..c2e61a6 100644
--- a/gn/packages/r-shiny.scm
+++ b/gn/packages/r-shiny.scm
@@ -1,6 +1,10 @@
 (define-module (gn packages r-shiny)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix download)
+  #:use-module (guix build-system r)
   #:use-module (guix packages)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages bioconductor)
   #:use-module (gnu packages cran)
   #:use-module (gnu packages javascript))
 
@@ -12,3 +16,46 @@
 
 (define-public js-es5-shim-2
   (deprecated-package "js-es5-shim" js-es5-shim))
+
+
+(define-public r-runit
+  (package
+    (name "r-runit")
+    (version "0.4.33")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "RUnit" version))
+       (sha256
+        (base32 "0pybwvd57vf71vvlxdrynw5n6s5gnbqnwvq0qpd395ggqypwb95j"))))
+    (properties `((upstream-name . "RUnit")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/package=RUnit")
+    (synopsis "R Unit Test Framework")
+    (description
+     "R functions implementing a standard Unit Testing framework, with additional code
+inspection and report generation tools.")
+    (license license:gpl2)))
+
+(define-public r-org-rn-eg-db ; used by jumpshiny service
+  (package
+    (name "r-org-rn-eg-db")
+    (version "3.20.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "org.Rn.eg.db" version 'annotation))
+              (sha256
+               (base32
+                "009c22ry5nnklzdc5dywnf8lq41cj3141yr5vw1kgifys6lanj01"))))
+    (properties
+     `((upstream-name . "org.Rn.eg.db")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotationdbi))
+    (native-inputs (list r-runit))
+    (home-page "https://www.bioconductor.org/packages/org.Rn.eg.db/")
+    (synopsis "Genome wide annotation for Rat")
+    (description
+     "This package provides mappings from Entrez gene identifiers to various
+annotations for the genome of the rat.")
+    (license license:artistic2.0)))
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/web.scm b/gn/packages/web.scm
index 9290a64..734cbe1 100644
--- a/gn/packages/web.scm
+++ b/gn/packages/web.scm
@@ -76,6 +76,26 @@ entire app with our Sass variables and mixins, responsive grid system,
 extensive prebuilt components, and powerful plugins built on jQuery.")
     (license license:expat)))
 
+(define-public web-bootstrap-5.3.3
+  (package
+    (inherit web-bootstrap)
+    (name "web-bootstrap-5.3.3")
+    (version "5.3.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/twbs/bootstrap.git")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1zzfmvfps13329wyqlf453rvzfxq9zl4jva83jw695bacfdmax9c"))))
+    (native-inputs (list source))))
+
+(define-public web-bootstrap-5.3 web-bootstrap-5.3.3)
+
+(define-public web-bootstrap-5 web-bootstrap-5.3)
+
 (define-public web-bootstrap-3
   (package
     (inherit web-bootstrap)
diff --git a/gn/packages/yaj.scm b/gn/packages/yaj.scm
index c36a6cc..bdd417d 100644
--- a/gn/packages/yaj.scm
+++ b/gn/packages/yaj.scm
@@ -12,7 +12,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 91ac166..fbdf39e 100644
--- a/gn/services/databases.scm
+++ b/gn/services/databases.scm
@@ -34,7 +34,7 @@
   (server-port virtuoso-configuration-server-port
                (default 1111))
   (dirs-allowed virtuoso-dirs-allowed
-                (default "/var/genenetwork/virtuoso-data"))
+                (default (list "/var/genenetwork/virtuoso-data")))
   (number-of-buffers virtuoso-configuration-number-of-buffers
                      (default #f))
   (maximum-dirty-buffers virtuoso-configuration-maximum-dirty-buffers
@@ -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")))
 
@@ -100,9 +102,9 @@
                               (format port "ServerPort = ~a:~a~%"
                                       #$(virtuoso-configuration-server-ip config)
                                       #$(virtuoso-configuration-server-port config)))
-                            (when #$(virtuoso-dirs-allowed config)
+                            (when #$(>= (length (virtuoso-dirs-allowed config)) 1)
                                   (format port "DirsAllowed = ~a~%"
-                                          #$(virtuoso-dirs-allowed config)))
+                                          #$(string-join (virtuoso-dirs-allowed config) ",")))
                             (when #$(virtuoso-configuration-number-of-buffers config)
                                   (format port "NumberOfBuffers = ~a~%"
                                           #$(virtuoso-configuration-number-of-buffers config)))
@@ -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/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