about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gn/packages/bioinformatics.scm620
-rw-r--r--gn/packages/check.scm53
-rw-r--r--gn/packages/file-systems.scm31
-rw-r--r--gn/packages/jupyterhub.scm2
-rw-r--r--gn/packages/machine-learning.scm2
-rw-r--r--gn/packages/python-build.scm68
-rw-r--r--gn/packages/python-xyz.scm136
-rw-r--r--gn/packages/python.scm30
-rw-r--r--gn/packages/r-shiny.scm306
-rw-r--r--gn/packages/rust-crates.scm525
-rw-r--r--gn/packages/twint.scm44
-rw-r--r--gn/packages/virtualization.scm1
-rw-r--r--gn/services/jumpsem-container.scm27
-rw-r--r--gn/services/jumpshiny-container.scm25
-rw-r--r--vcflib-use-system-fastahack-smithwaterman.patch107
15 files changed, 1822 insertions, 155 deletions
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index f7b70e2..2037d3b 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -15,6 +15,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system ocaml)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system r)
   #:use-module (guix build-system trivial)
@@ -92,6 +93,7 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages vim)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages zig)
   #:use-module (past packages python27))
 
 (define-public contra
@@ -573,7 +575,7 @@ reads.")
 (define-public gfaffix
   (package
     (name "gfaffix")
-    (version "0.1.5")
+    (version "0.2.1")
     (source
       (origin
         (method git-fetch)
@@ -582,20 +584,12 @@ reads.")
                (commit version)))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "181jxl8ldj39jgscyqzhz4l4k5kxj1j9hvzi8dxj59h2zzznb0kb"))))
+         (base32 "0yn8i70ww3x544qm4fwr33vklsxf3fvivpfpv46prkfz9hsmd9ps"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:install-source? #f
-       #:cargo-inputs
-       (("rust-clap" ,rust-clap-3)
-        ("rust-rustc-hash" ,rust-rustc-hash-1)
-        ("rust-regex" ,rust-regex-1)
-        ("rust-handlegraph" ,rust-handlegraph-0.7.0-alpha.9)
-        ("rust-gfa" ,rust-gfa-0.10)
-        ("rust-quick-csv", rust-quick-csv-0.1)
-        ("rust-rayon" ,rust-rayon-1)
-        ("rust-log" ,rust-log-0.4)
-        ("rust-env-logger" ,rust-env-logger-0.7))))
+     `(#:install-source? #f))
+    (inputs (cargo-inputs 'gfaffix
+                          #:module '(gn packages rust-crates)))
     (home-page "https://github.com/marschall-lab/GFAffix")
     (synopsis "Identify walk-preserving shared affixes in variation graphs")
     (description
@@ -1968,27 +1962,15 @@ here}.")
 (define-public mummer
   (package
     (name "mummer")
-    (version "4.0.0rc1")
+    (version "4.0.1")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "https://github.com/mummer4/mummer/releases/"
                             "download/v" version "/mummer-" version ".tar.gz"))
         (sha256
-         (base32 "07bxw1vax1sai3g5xjn6sqngddlbnlabpqy373vw4fb55pdnl045"))))
+         (base32 "0gix9qay0bcv515q9xag9arhq3wal77vf5g5whiy7cm004ksw85w"))))
     (build-system gnu-build-system)
-    (arguments
-     (list
-       #:phases
-       #~(modify-phases %standard-phases
-           (add-after 'configure 'skip-test_md5-tests
-             (lambda _
-               ;; There seems to be a bug with how these tests are called.
-               (substitute* "Makefile"
-                 (("tests/mummer.sh") "")
-                 (("tests/nucmer.sh") "")
-                 (("tests/genome.sh") "")
-                 (("tests/sam.sh") "")))))))
     (inputs
      (list gnuplot
            perl))
@@ -2338,6 +2320,79 @@ in-memory footprint at the cost of packing and unpacking.")
                             odgi-x86-64-v4)))
     (properties `((tunable? . #f)))))
 
+;; new wfa2-lib v2.3.6 with cstdint fix, pkg-config and tests 
+(define-public wfa2-lib
+  (package
+    (name "wfa2-lib")
+    (version "2.3.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/smarco/WFA2-lib")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0hfgq09r0ndrsa2jwy9wkg8p7xzgvclbj5ysp73bawwkgwpgfhy4"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     (list pkg-config time)) ; time for testing
+    (arguments
+     (list
+      #:configure-flags
+      #~(list "-DCMAKE_BUILD_TYPE=RelWithDebInfo")))
+    (home-page "https://github.com/smarco/WFA2-lib")
+    (synopsis "Wavefront alignment algorithm library")
+    (description "The wavefront alignment (WFA) algorithm is an exact
+gap-affine algorithm that takes advantage of homologous regions between the
+sequences to accelerate the alignment process.")
+    (properties '((tunable? . #t)))
+    (license license:expat)))
+
+(define-public vcflib
+  (package
+    (name "vcflib")
+    (version "1.0.15")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/vcflib/vcflib")
+                    (commit (string-append "v" version))
+                    (recursive? #t)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "04gwnwvr10z6kc0f4n25a5dhw4jl4i2mqfxyy1kxmqbl1dw1b20k"))
+              (patches
+               (list (search-patch "vcflib-use-system-fastahack-smithwaterman.patch")))))
+    (build-system cmake-build-system)
+    (inputs
+     (list
+       fastahack
+       htslib
+       pandoc ; for man pages
+       perl
+       python
+       python-pytest
+       pybind11
+       ruby ; for man pages
+       smithwaterman
+       tabixpp
+       time ; for tests
+       wfa2-lib
+       xz
+       zig-0.15)) ; older versions of zig will not work
+    (native-inputs
+     (list pkg-config))
+    (home-page "https://github.com/vcflib/vcflib/")
+    (synopsis "Library for parsing and manipulating VCF files")
+    (description "Vcflib provides methods to manipulate and interpret
+sequence variation as it can be described by VCF.  It is both an API for parsing
+and operating on records of genomic variation as it can be described by the VCF
+format, and a collection of command-line utilities for executing complex
+manipulations on VCF files.")
+    (license license:expat)))
+
 (define-public vg
   (package
     (name "vg")
@@ -2589,52 +2644,189 @@ multiple sequence alignment.")
         license:zlib    ; deps/sonLib/externalTools/cutest
         license:boost1.0)))) ; catch.hpp
 
-(define-public wfmash-0.14
+(define-public vg-gn
   (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 ") ""))))))
+    (inherit vg)
+    (name "vg-gn")
     (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))))))))))
+     (list
+      #:make-flags
+      #~(list (string-append "CC=" #$(cc-for-target))
+              (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (add-after 'unpack 'patch-source
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Add subdirectory include paths for system packages
+              (let ((extra-includes
+                     (string-join
+                      (list (search-input-directory inputs "/include/vcflib")
+                            (search-input-directory inputs "/include/fastahack")
+                            (search-input-directory inputs "/include/cairo")
+                            (search-input-directory inputs "/include/raptor2"))
+                      ":")))
+                (setenv "CPLUS_INCLUDE_PATH"
+                        (string-append extra-includes
+                                       ":" (or (getenv "CPLUS_INCLUDE_PATH") "")))
+                (setenv "C_INCLUDE_PATH"
+                        (string-append extra-includes
+                                       ":" (or (getenv "C_INCLUDE_PATH") ""))))
+              (substitute* "Makefile"
+                ;; PKG_CONFIG_DEPS - use external vcflib and fastahack
+                (("cairo libzstd")
+                 "cairo htslib libzstd libdw libelf protobuf raptor2 sdsl-lite tabixpp vcflib fastahack libdeflate")
+
+                (("-Wl,-B.*") "\n")
+
+                (("\\$\\(CWD\\)/\\$\\(LIB_DIR\\)/libtabixpp\\.a") "$(LIB_DIR)/libtabixpp.a")
+                ((" \\$\\(LIB_DIR\\)/libtabixpp\\.a")
+                 (string-append " " (search-input-file inputs "/lib/libtabixpp.so")))
+                (("\\$\\(LIB_DIR\\)/pkgconfig/tabixpp\\.pc")
+                 (string-append " " (search-input-file inputs "/lib/pkgconfig/tabixpp.pc")))
+
+                (("\\$\\(CWD\\)/\\$\\(LIB_DIR\\)/libhts\\.a") "$(LIB_DIR)/libhts.a")
+                ((" \\$\\(LIB_DIR\\)/libhts\\.a")
+                 (string-append " " (search-input-file inputs "/lib/libhts.so")))
+                (("\\$\\(LIB_DIR\\)/pkgconfig/htslib\\.pc")
+                 (string-append " " (search-input-file inputs "/lib/pkgconfig/htslib.pc")))
+
+                (("\\$\\(CWD\\)/\\$\\(LIB_DIR\\)/libdeflate\\.a") "$(LIB_DIR)/libdeflate.a")
+                ((" \\$\\(LIB_DIR\\)/libdeflate\\.a")
+                 (string-append " " (search-input-file inputs "/lib/libdeflate.so")))
+
+                ;; Use external vcflib
+                ((" \\$\\(LIB_DIR\\)/libvcflib.a")
+                 (string-append " " (search-input-file inputs "/lib/libvcflib.so")))
+                ((" \\$\\(BIN_DIR\\)/vcf2tsv")
+                 (string-append " " (search-input-file inputs "/bin/vcf2tsv")))
+
+                ((" \\$\\(FASTAHACK_DIR\\)/fastahack")
+                 (string-append " " (search-input-file inputs "/bin/fastahack")))
+                (("\\+= \\$\\(OBJ_DIR\\)/Fasta\\.o") "+=")
+                ;; Add fastahack to linker flags
+                (("-lvcflib") "-lvcflib -lfastahack -lsmithwaterman -lcairo")
+
+                ((" \\$\\(LIB_DIR\\)/libsnappy.a")
+                 (string-append " " (search-input-file inputs "/lib/libsnappy.so")))
+
+                (("-ldwfl -ldw -ldwelf -lelf -lebl") "-ldw -lelf")
+                ((" \\$\\(LIB_DIR\\)/libelf.a")
+                 (string-append " " (search-input-file inputs "/lib/libelf.so")))
+                ((" \\$\\(LIB_DIR\\)/libdw.a")
+                 (string-append " " (search-input-file inputs "/lib/libdw.so")))
+
+                ((" \\$\\(LIB_DIR\\)/%divsufsort.a")
+                 (string-append " " (dirname
+                                     (search-input-file inputs "/lib/libdivsufsort.so"))
+                                "%divsufsort.so"))
+                ((" \\$\\(LIB_DIR\\)/libdivsufsort.a")
+                 (string-append " " (search-input-file inputs "/lib/libdivsufsort.so")))
+                ((" \\$\\(LIB_DIR\\)/%divsufsort64.a")
+                 (string-append " " (dirname
+                                     (search-input-file inputs "/lib/libdivsufsort64.so"))
+                                "%divsufsort64.so"))
+                ((" \\$\\(LIB_DIR\\)/libdivsufsort64.a")
+                 (string-append " " (search-input-file inputs "/lib/libdivsufsort64.so")))
+
+                ((" \\$\\(LIB_DIR\\)/libjemalloc.a")
+                 (string-append " " (search-input-file inputs "/lib/libjemalloc.a")))
+
+                ((" \\$\\(INC_DIR\\)/sparsehash")
+                 (string-append " " (search-input-directory inputs "/include/sparsehash")))
+
+                ((" \\$\\(INC_DIR\\)/raptor2")
+                 (string-append " " (search-input-directory inputs "/include/raptor2")))
+                ((" \\$\\(LIB_DIR\\)/libraptor2.a")
+                 (string-append " " (search-input-file inputs "/lib/libraptor2.so")))
+                ((" \\$\\(BIN_DIR\\)/rapper")
+                 (string-append " " (search-input-file inputs "/bin/rapper"))))
+              (mkdir "deps/libbdsg/bdsg/obj")
+              (mkdir "deps/libbdsg/lib")
+              (substitute* "deps/libbdsg/Makefile"
+                (("\\[ ! -e \\$\\(OBJ_DIR\\) \\][^\n]*") "")
+                (("\\[ ! -e \\$\\(LIB_DIR\\) \\][^\n]*") ""))))
+          (add-after 'unpack 'link-with-some-shared-libraries
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* '("deps/mmmultimap/CMakeLists.txt"
+                             "deps/xg/CMakeLists.txt"
+                             "deps/xg/deps/mmmulti/CMakeLists.txt")
+                (("\".*libsdsl\\.a\"") "\"-lsdsl\"")
+                (("\".*libdivsufsort\\.a\"") "\"-ldivsufsort\"")
+                (("\".*libdivsufsort64\\.a\"") "\"-ldivsufsort64\"")
+                (("\\$\\{sdsl-lite_INCLUDE\\}")
+                 (search-input-directory inputs "/include/sdsl"))
+                (("\\$\\{sdsl-lite-divsufsort_INCLUDE\\}")
+                 (dirname
+                  (search-input-file inputs "/include/divsufsort.h"))))))
+          (add-after 'unpack 'dont-build-shared-vgio
+            (lambda _
+              (substitute* "deps/libvgio/CMakeLists.txt"
+                (("TARGETS vgio vgio_static") "TARGETS vgio_static"))))
+          (add-after 'unpack 'adjust-tests
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((bash-tap (assoc-ref inputs "bash-tap")))
+                (substitute* (find-files "test/t")
+                  (("BASH_TAP_ROOT.*")
+                   (string-append "BASH_TAP_ROOT=" bash-tap "/bin\n"))
+                  ((".*bash-tap-bootstrap")
+                   (string-append ". " bash-tap "/bin/bash-tap-bootstrap")))
+                (substitute* "test/t/02_vg_construct.t"
+                  (("../deps/fastahack/fastahack") (which "fastahack"))
+                  (("../bin/vcf2tsv") "bin/vcf2tsv"))
+                (substitute* "test/t/02_vg_construct.t"
+                  ((".*self-inconsistent.*") "is $(true) \"\" \"\"\n"))
+                (substitute* "test/t/07_vg_map.t"
+                  (("identity\\) 1 \"") "identity) 1.0 \""))
+                (substitute* '("test/t/07_vg_map.t"
+                               "test/t/33_vg_mpmap.t")
+                  ((".*node id.*") "is $(true) \"\" \"\"\n"))
+                (substitute* "test/t/48_vg_convert.t"
+                  (("true \"vg.*") "true \"true\"\n"))
+                (substitute* "test/t/50_vg_giraffe.t"
+                  ((".*A long read can.*") "is $(true) \"\" \"\"\n")
+                  ((".*A long read has.*") "is $(true) \"\" \"\"\n")
+                  ((".*Long read minimizer.*") "is $(true) \"\" \"\"\n"))
+                (substitute* "Makefile"
+                  ((".*test-docs.*") "")))))
+          (add-after 'build 'build-manpages
+            (lambda* (#:key make-flags #:allow-other-keys)
+              (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")))
+                (install-file "bin/vg" (string-append out "/bin"))
+                (install-file "lib/libhandlegraph.so" (string-append out "/lib"))
+                (for-each
+                 (lambda (file)
+                   (install-file file (string-append out "/share/man/man1")))
+                 (find-files "doc/man" "\\.1$"))))))
+      #:tests? #f))
     (inputs
-     (modify-inputs (package-inputs wfmash)
-       (prepend jemalloc)
-       (delete "libdeflate")))))
+     (list boost
+           cairo
+           curl
+           elfutils
+           fastahack
+           htslib
+           jansson
+           jemalloc
+           libdeflate
+           libdivsufsort
+           ncurses
+           openmpi
+           protobuf
+           raptor2
+           sdsl-lite
+           smithwaterman
+           snappy
+           sparsehash
+           tabixpp
+           vcflib
+           zlib
+           (list zstd "lib")))))
 
 (define-public pggb
   (package
@@ -2702,7 +2894,7 @@ multiple sequence alignment.")
                                                       "smoothxg"
                                                       "time"
                                                       "vcfbub"
-                                                      "vg"
+                                                      "vg-gn"
                                                       "wfmash"))))))
                  (list (string-append out "/bin/pggb")
                        (string-append out "/bin/partition-before-pggb")
@@ -2737,8 +2929,8 @@ multiple sequence alignment.")
            smoothxg
            time
            vcfbub
-           vg
-           wfmash-0.14))
+           vg-gn
+           wfmash))
     (home-page "https://doi.org/10.1101/2023.04.05.535718")
     (synopsis "PanGenome Graph Builder")
     (description "@command{pggb} builds
@@ -4486,80 +4678,6 @@ invariant (monomorphic) sites, which are essential for the correct computation
 of π and dxy in the face of missing data (i.e. always).")
     (license license:expat)))
 
-(define-public wfa2-lib
-  (let ((commit "af6be887614e8bb4e2b6e8c4e500705a978bd513")     ; 14 April 2022
-        (revision "1"))
-    (package
-      (name "wfa2-lib")
-      (version (git-version "2.1" revision commit))     ; As seen in ./VERSION
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/smarco/WFA2-lib")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32 "09gsmks4dzmfscklb60m6gcsvsd9r6jywf10633dpcsfsdcvmzaw"))
-                (snippet
-                 #~(begin
-                     (use-modules ((guix build utils)))
-                     (substitute* "Makefile"
-                       (("^CC=") "CC:=")
-                       (("^CPP=") "CPP:=")
-                       (("-march=native") ""))))))
-      (build-system gnu-build-system)
-      (arguments
-       (list
-         #:tests? #f            ; No tests.
-         #:parallel-build? #f   ; Race condition in Makefile.
-         #:modules '((guix build gnu-build-system)
-                     (guix build utils)
-                     (srfi srfi-26))
-         #:make-flags
-         #~(list (string-append "CC=" #$(cc-for-target))
-                 (string-append "CPP=" #$(cxx-for-target)))
-         #:phases
-         #~(modify-phases %standard-phases
-             (delete 'configure)        ; No configure script.
-             ;; -flto breaks align_benchmark.
-             (replace 'build
-               (lambda* (#:key (make-flags '()) #:allow-other-keys)
-                 (apply invoke "make" "all" make-flags)))
-             (replace 'install
-               (lambda _
-                 (for-each
-                   (cut install-file <> (string-append #$output "/bin"))
-                   (find-files "bin"))
-                 (for-each
-                   (cut install-file <> (string-append #$output "/lib"))
-                   (find-files "lib"))
-                 (for-each
-                   (lambda (file)
-                     (mkdir-p (string-append #$output "/include/wfa2-lib/" (dirname file)))
-                     (copy-file file (string-append #$output "/include/wfa2-lib/" file)))
-                   (find-files "." "\\.(h|hpp)$")))))))
-      (home-page "https://github.com/smarco/WFA2-lib")
-      (synopsis "Wavefront alignment algorithm library")
-      (description "The @acronym{wavefront alignment, WFA} algorithm is an exact
-gap-affine algorithm that takes advantage of homologous regions between the
-sequences to accelerate the alignment process.  Unlike to traditional dynamic
-programming algorithms that run in quadratic time, the WFA runs in time
-@code{O(ns+s^2)}, proportional to the sequence length @code{n} and the alignment
-score @code{s}, using @code{O(s^2)} memory.  Moreover, the WFA algorithm
-exhibits simple computational patterns that the modern compilers can
-automatically vectorize for different architectures without adapting the code.")
-      (properties '((tunable? . #t)))
-      (license license:expat))))
-
-(define-public wfa2-lib-static
-  (package
-    (inherit (static-package wfa2-lib))
-    (name "wfa2-lib-static")
-    (arguments
-     (substitute-keyword-arguments (package-arguments wfa2-lib)
-       ((#:make-flags flags ''())
-        #~(cons "CC_FLAGS+=-static" #$flags))))))
-
 (define-public r-rrbgen
   (package
     (name "r-rrbgen")
@@ -4785,3 +4903,211 @@ reads, and it is one of the best haplotype-resolved assemblers for the
 trio-binning assembly given parental short reads.  For a human genome,
 hifiasm can produce the telomere-to-telomere assembly in one day.")
     (license license:expat)))
+
+(define-public parasail
+  (package
+   (name "parasail")
+   (version "2.6.2")
+   (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "https://github.com/jeffdaily/parasail")
+                  (commit (string-append "v" version))))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32
+              "0pnw8x266b4qggv9hn4sng9z6zcq0rg7h6slcq3ka3snybzn61r8"))))
+   (build-system gnu-build-system)
+   (arguments
+    (list #:phases
+          #~(modify-phases %standard-phases
+              (add-after 'unpack 'patch-tests
+                (lambda _
+                  (substitute* "tests/test_verify_traces.c"
+                    (("ref_trace_table = parasail")
+                     "ref_trace_table = (int8_t*)parasail")
+                    ((", trace_table,")
+                     ", (int8_t*)trace_table,")))))))
+   (native-inputs
+    (list autoconf
+          automake
+          libtool))
+   (home-page "https://github.com/jeffdaily/parasail")
+   (synopsis "Pairwise sequence alignment library")
+   (description "parasail is a SIMD C (C99) library containing
+implementations of the Smith-Waterman (local),
+Needleman-Wunsch (global), and various semi-global pairwise sequence
+alignment algorithms.  Here, semi-global means insertions before the
+start or after the end of either the query or target sequence are
+optionally not penalized.  parasail implements most known algorithms
+for vectorized pairwise sequence alignment, including diagonal
+[Wozniak, 1997], blocked [Rognes and Seeberg, 2000], striped [Farrar,
+2007], and prefix scan [Daily, 2015].  Therefore, parasail is a
+reference implementation for these algorithms in addition to providing
+an implementation of the best-performing algorithm(s) to date on
+today's most advanced CPUs.")
+   (license license:bsd-2)))
+
+(define-public python-parasail
+  (package
+   (name "python-parasail")
+   (version "1.3.4")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (pypi-uri "parasail" version))
+     (sha256
+      (base32 "03qvnswvzv6pv5lzlnd05rbjphhl29qiasbyvnpmmvz3z9fh79yn"))))
+   (build-system pyproject-build-system)
+   (arguments
+    (list #:test-backend #~'unittest
+          #:phases
+          #~(modify-phases %standard-phases
+              (add-after 'unpack 'insert-libparasail
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (copy-file (search-input-file inputs "/lib/libparasail.so")
+                             "parasail/libparasail.so"))))))
+   (inputs
+    (list parasail))
+   (native-inputs
+    (list python-setuptools python-wheel))
+   (propagated-inputs
+    (list python-numpy))
+   (home-page "https://github.com/jeffdaily/parasail-python")
+   (synopsis "Parasail Python bindings")
+   (description "This package provides Python bindings for the
+parasail C library.")
+   (license license:bsd-2)))
+
+(define-public liftoff
+  (package
+    (name "liftoff")
+    (version "1.6.3")
+    (source
+     ;; The PyPI tarball is missing the tests.
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/agshumate/Liftoff")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "18840vdv75nsq0fw5hzvrp7l0k6ciamlzkhgxxhnjh23ghih71dx"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-version-requirements
+                 (lambda _
+                   (substitute* "setup.py"
+                     (("==") ">=")))))))
+    (inputs
+     (list python-biopython
+           python-gffutils
+           python-interlap
+           python-networkx
+           python-numpy
+           python-parasail
+           python-pyfaidx
+           python-pysam
+           python-ujson))
+    (native-inputs
+     (list minimap2
+           python-pytest
+           python-setuptools
+           python-wheel))
+    (home-page "https://github.com/ashumate/Liftoff")
+    (synopsis "GFF3/GTF lift over pipeline")
+    (description "Liftoff is a tool that accurately maps annotations
+in GFF or GTF between assemblies of the same, or closely-related
+species.  Unlike current coordinate lift-over tools which require a
+pre-generated “chain” file as input, Liftoff is a standalone tool that
+takes two genome assemblies and a reference annotation as input and
+outputs an annotation of the target genome.  Liftoff uses minimap2 to
+align the gene sequences from a reference genome to the target genome.
+Rather than aligning whole genomes, aligning only the gene sequences
+allows genes to be lifted over even if there are many structural
+differences between the two genomes.  For each gene, Liftoff finds the
+alignments of the exons that maximize sequence identity while
+preserving the transcript and gene structure.  If two genes incorrectly
+map to overlapping loci, Liftoff determines which gene is most-likely
+mis-mapped, and attempts to re-map it.  Liftoff can also find
+additional gene copies present in the target assembly that are not
+annotated in the reference.")
+    (license license:gpl3+)))
+
+(define-public r-gggenes
+  (package
+    (name "r-gggenes")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "gggenes" version))
+       (sha256
+        (base32 "0400qhppx8kg70f6bbya3k6lhdgjj3dllgfgg6s509kbp5qsjbcd"))))
+    (properties `((upstream-name . "gggenes")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-cli r-ggfittext r-ggplot2 r-lifecycle r-rlang))
+    (native-inputs (list r-knitr r-spelling r-testthat))
+    (home-page "https://wilkox.org/gggenes/")
+    (synopsis "Draw Gene Arrow Maps in 'ggplot2'")
+    (description
+     "This package provides a ggplot2 extension for drawing gene arrow maps.")
+    (license license:gpl2)))
+
+
+(define-public r-dendextendrcpp
+  (package
+    (name "r-dendextendrcpp")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/talgalili/dendextendRcpp/archive/refs/tags/"
+			   version version ".tar.gz"))
+       (sha256
+        (base32
+         "1vhqy8licl2pkzar4aag0q5fhnb3fdch8acyjh9445ia42z01z9c"))))
+    (build-system r-build-system)
+    (arguments
+     (list #:tests? #f))  ;; tests fail and seem to require data
+    (propagated-inputs
+     (list r-rcpp
+	   r-rcpparmadillo))
+    (home-page "https://github.com/talgalili/dendextendRcpp")
+    (synopsis "A dendrogram object in R are is a list structure with attributes in its nodes and leaves.")
+    (description "A dendrogram object in R are is a list structure with attributes in its nodes and leaves.")
+    (license license:gpl3)))
+
+(define-public r-dendextend
+  (package
+    (name "r-dendextend")
+    (version "1.19.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "dendextend" version))
+       (sha256
+        (base32 "0097bmdv960khjkf3gvbdrazx4ns8i9221m9h68vnq541h61ag5y"))))
+    (properties `((upstream-name . "dendextend")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-ggplot2 r-magrittr r-viridis))
+    (native-inputs (list r-ape
+                         r-cluster
+                         r-data-table
+                         r-dendextendrcpp
+                         r-fpc
+                         r-knitr
+                         r-pvclust
+                         r-testthat))
+    (home-page "https://talgalili.github.io/dendextend/")
+    (synopsis "Extending 'dendrogram' Functionality in R")
+    (description
+     "Offers a set of functions for extending dendrogram objects in R, letting you
+visualize and compare trees of hierarchical clusterings'.  You can (1) Adjust a
+tree's graphical parameters - the color, size, type, etc of its branches, nodes
+and labels. (2) Visually and statistically compare different dendrograms to one
+another.")
+    (license (list license:gpl2 license:gpl3))))
diff --git a/gn/packages/check.scm b/gn/packages/check.scm
index 960e78e..01f1508 100644
--- a/gn/packages/check.scm
+++ b/gn/packages/check.scm
@@ -1,9 +1,12 @@
 (define-module (gn packages check)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
   #:use-module (past packages python27))
 
@@ -30,6 +33,34 @@ It will honor all the options you pass to the Nose coverage plugin,
 especially -cover-package.")
     (license license:expat)))
 
+(define-public python-traceback2
+  (package
+    (name "python-traceback2")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "traceback2" version))
+       (sha256
+        (base32
+         "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
+    (build-system python-build-system)
+    (arguments
+     `(;; python-traceback2 and python-unittest2 depend on one another.
+       #:tests? #f))
+    (native-inputs
+     (list python-pbr))
+    (propagated-inputs
+     (list python-linecache2 python-six))
+    (home-page
+     "https://github.com/testing-cabal/traceback2")
+    (synopsis "Backports of the traceback module")
+    (description
+     "This module provides a standard interface to extract, format and print
+stack traces of Python programs.  It exactly mimics the behavior of the Python
+interpreter when it prints a stack trace.")
+    (license license:psfl)))
+
 (define-public python-unittest2
   (package
     (name "python-unittest2")
@@ -59,3 +90,25 @@ especially -cover-package.")
      "Unittest2 is a replacement for the unittest module in the Python
 standard library.")
     (license license:psfl)))
+
+(define-public python-pyux
+  (package
+    (name "python-pyux")
+    (version "0.0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyux" version))
+       (sha256
+        (base32
+         "1i17xh4dy238ibrjdgh8vn78fk5q6dj37mcznpvdfzidj57js7ca"))))
+    (build-system pyproject-build-system)
+    (arguments
+     `(#:tests? #f))                  ;the mini test suite fails
+    (native-inputs
+     (list python-pytest python-setuptools))
+    (home-page "https://github.com/farizrahman4u/pyux")
+    (synopsis "Utility to check API integrity in Python libraries")
+    (description "The pyux utility detects API changes in Python
+libraries.")
+    (license license:expat)))
diff --git a/gn/packages/file-systems.scm b/gn/packages/file-systems.scm
index bf92ed9..1610a76 100644
--- a/gn/packages/file-systems.scm
+++ b/gn/packages/file-systems.scm
@@ -5,6 +5,10 @@
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -15,6 +19,33 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python))
 
+(define-public moosefs
+  (package
+    (name "moosefs")
+    (version "4.58.3")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/moosefs/moosefs")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "163x7ziamqy79xaiy5fhr8afbj65ssnyqki5v6wxanciwczw4jcl"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list
+       autoconf automake fuse libpcap zlib python libtool))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://moosefs.com/")
+    (synopsis "Distributed, scalable, fault-tolerant, highly available file system")
+    (description
+     "MooseFS is a Petabyte Open Source Network Distributed File System. It is easy to deploy and maintain, highly reliable, fault tolerant, highly performing, easily scalable and POSIX compliant.")
+    (license (list license:asl2.0   ; external/crcutil
+                   license:gpl2+))))
+
 (define-public lizardfs
   (package
     (name "lizardfs")
diff --git a/gn/packages/jupyterhub.scm b/gn/packages/jupyterhub.scm
index 2779d3e..165bb8a 100644
--- a/gn/packages/jupyterhub.scm
+++ b/gn/packages/jupyterhub.scm
@@ -213,7 +213,7 @@ libraries into this environment without any specialized knowledge.")
        ("python-etcd3" ,python-etcd3)
        ("python-aiohttp" ,python-aiohttp)
        ("python-passlib" ,python-passlib)
-       ("python-consul" ,python-consul)
+       ("python-py-consul" ,python-py-consul)
        ("python-toml" ,python-toml)
        ("python-escapism" ,python-escapism)))
     (native-inputs
diff --git a/gn/packages/machine-learning.scm b/gn/packages/machine-learning.scm
index 541b3b6..d302150 100644
--- a/gn/packages/machine-learning.scm
+++ b/gn/packages/machine-learning.scm
@@ -5,10 +5,12 @@
   #:use-module (gnu packages machine-learning)
   #:use-module (guix download)
   #:use-module (guix build-system python)
+  #:use-module (gn packages check)
   #: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-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages python-web)
diff --git a/gn/packages/python-build.scm b/gn/packages/python-build.scm
new file mode 100644
index 0000000..445a674
--- /dev/null
+++ b/gn/packages/python-build.scm
@@ -0,0 +1,68 @@
+(define-module (gn packages python-build)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system python)
+ #:use-module (guix build-system pyproject)
+ #:use-module ((guix licenses) #:prefix license:)
+
+ #:use-module (gnu packages check)
+ #:use-module (gnu packages rust-apps)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages python-check)
+ #:use-module (gnu packages python-build))
+
+(define-public python-build
+  (package
+    (name "python-build")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/pypa/build")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "107hhzjrlj56gshcyalf4laf741swmmaznlz0xcfv8rvpwa81mm2"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list uv
+           python-tox
+           python-pip
+           python-wheel
+           python-tomli
+           python-pytest
+           python-filelock
+           python-colorama
+           python-flit-core
+           python-packaging
+           python-pytest-cov
+           python-setuptools
+           python-virtualenv
+           python-pytest-mock
+           python-pytest-xdist
+           python-pyproject-hooks
+           python-importlib-metadata
+           python-pytest-rerunfailures))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'set-env
+                 (lambda _
+                   ;; When running tests, things fail because HOME=/homeless-shelter.
+                   (setenv "HOME" "/tmp")))
+               (add-before 'check 'patch-tests
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "tests/test_env.py"
+	             ((", path=sysconfig.get_path\\(\"scripts\"\\)") "")))))
+
+           ;; Cheat by deactivating tests for now.
+           #:tests? #f))
+    (home-page "https://build.pypa.io/")
+    (synopsis "A simple, correct Python packaging build frontend")
+    (description "A simple, correct Python packaging build frontend.
+ build manages pyproject.toml-based builds, invoking build-backend hooks as
+ appropriate to build a distribution package. It is a simple build tool and does
+ not perform any dependency management.")
+    (license license:expat)))
diff --git a/gn/packages/python-xyz.scm b/gn/packages/python-xyz.scm
new file mode 100644
index 0000000..1e85111
--- /dev/null
+++ b/gn/packages/python-xyz.scm
@@ -0,0 +1,136 @@
+(define-module (gn packages python-xyz)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system pyproject)
+  #:use-module ((guix licenses) #:prefix license:)
+
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages sphinx)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages python-check)
+  #:use-module (gnu packages python-build))
+
+(define-public python-mslex
+  (package
+    (name "python-mslex")
+    (version "1.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/smoofra/mslex")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1k7p2yzsiga39kmcp440mgxlgsahg01il7jrbr8mc94k60wzmgdy"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-setuptools python-wheel))
+    (inputs (list python-tox
+                  python-trio
+                  python-tqdm
+                  python-twine
+                  python-black
+                  python-flake8
+                  python-sphinx
+                  python-pytest
+                  python-watchdog
+                  python-coverage
+                  python-bump2version
+                  python-types-setuptools))
+    (home-page "https://github.com/smoofra/mslex")
+    (synopsis "shlex for windows")
+    (description "shlex for windows.")
+    (license license:asl2.0)))
+
+
+(define-public python-oslex
+  (package
+    (name "python-oslex")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "oslex" version))
+       (sha256
+        (base32 "0bazd0vk2lzsk7cwgl2m669m6dqqhh4l0d6sn2yaiwjxqy1cvm0y"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-mslex))
+    (native-inputs (list python-hatchling))
+    (home-page "https://github.com/petamas/oslex")
+    (synopsis "OS-independent wrapper for shlex and mslex")
+    (description "OS-independent wrapper for shlex and mslex.")
+    (license license:expat)))
+
+
+(define-public python-annotated-doc
+  (package
+    (name "python-annotated-doc")
+    (version "0.0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fastapi/annotated-doc")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pdm-backend))
+    (home-page "https://github.com/fastapi/annotated-doc")
+    (synopsis
+     "Document parameters, class attributes, return types, and variables inline, with Annotated.")
+    (description
+     "Document parameters, class attributes, return types, and variables inline, with
+Annotated.")
+    (license license:expat)))
+
+
+(define-public python-backoff
+  (package
+    (name "python-backoff")
+    (version "2.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/litl/backoff")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0cpfd8fdznwlxrjpwy10pl4bj9q393ys1vj90nvsrhwakqcdiil3"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pytest
+                         python-requests
+                         python-responses
+                         python-poetry-core
+                         python-pytest-asyncio-0.21))
+    (home-page "https://github.com/litl/backoff")
+    (synopsis "Function decoration for backoff and retry")
+    (description "Function decoration for backoff and retry.")
+    (license license:expat)))
+
+
+(define-public python-typing-inspection
+  (package
+    (name "python-typing-inspection")
+    (version "0.4.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/pydantic/typing-inspection")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-typing-extensions))
+    (native-inputs (list python-hatchling))
+    (home-page "https://github.com/pydantic/typing-inspection")
+    (synopsis "Runtime typing introspection tools")
+    (description "Runtime typing introspection tools.")
+    (license license:expat)))
diff --git a/gn/packages/python.scm b/gn/packages/python.scm
index e429058..2b25775 100644
--- a/gn/packages/python.scm
+++ b/gn/packages/python.scm
@@ -870,16 +870,36 @@ spreadsheets without the need for COM objects.")
     (description "Extensions to the standard Python datetime module")
     (license license:bsd-3)))
 
-(define-public python-pyshex
+(define-public python-cfgraph
   (package
-    (name "python-pyshex")
-    (version "0.7.14")
+    (name "python-cfgraph")
+    (version "0.2.1")
     (source
       (origin
         (method url-fetch)
-        (uri (pypi-uri "PyShEx" version))
+        (uri (pypi-uri "CFGraph" version))
         (sha256
-         (base32 "1fy664bh6hpmr4cf49fwwxng36kv7s6b2986hbv0cqcypc4ri2cs"))))
+         (base32
+          "0x7yz0lvqb6mkhl5fbml27sppmscgpf8v2ism9jzzf0h982ffzxm"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-rdflib))
+    (home-page "https://github.com/hsolbrig/CFGraph")
+    (synopsis "RDF Collections flattener for rdflib")
+    (description
+     "This package contains RDF Collections flattener for @code{rdflib}.")
+    (license license:asl2.0)))
+
+(define-public python-pyshex
+  (package
+    (name "python-pyshex")
+    (version "0.7.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "PyShEx" version))
+       (sha256
+        (base32 "1fy664bh6hpmr4cf49fwwxng36kv7s6b2986hbv0cqcypc4ri2cs"))))
     (arguments
      '(#:tests? #f          ; Tests try to use the internet.
        #:phases
diff --git a/gn/packages/r-shiny.scm b/gn/packages/r-shiny.scm
index c2e61a6..1ac73b6 100644
--- a/gn/packages/r-shiny.scm
+++ b/gn/packages/r-shiny.scm
@@ -1,12 +1,16 @@
 (define-module (gn packages r-shiny)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module (guix build-system r)
+  #:use-module (guix build-system trivial)
   #: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))
+  #:use-module (gnu packages javascript)
+  #:use-module (gnu packages statistics))
 
 (define-public r-shiny-gn
   (deprecated-package "r-shiny-gn" r-shiny))
@@ -59,3 +63,301 @@ inspection and report generation tools.")
      "This package provides mappings from Entrez gene identifiers to various
 annotations for the genome of the rat.")
     (license license:artistic2.0)))
+
+(define-public r-shinytoastr
+  (package
+    (name "r-shinytoastr")
+    (version "2.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "shinytoastr" version))
+       (sha256
+        (base32 "1zcf4ya9anlq6n97iq0b86ybcqbbd2h66vrr41m80zvlkav3z46z"))))
+    (properties `((upstream-name . "shinytoastr")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-shiny))
+    (home-page "https://github.com/gaborcsardi/shinytoastr")
+    (synopsis "Notifications from Shiny")
+    (description "Browser notifications in Shiny apps, using toastr.")
+    (license license:expat)))
+
+(define-public r-spscomps
+  (package
+    (name "r-spscomps")
+    (version "0.3.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "spsComps" version))
+       (sha256
+        (base32 "1l69yigdabwwsixk364jvmc1c5nc8d4djc77cf0jlzshhdsjbqx8"))))
+    (properties `((upstream-name . "spsComps")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-assertthat
+                             r-crayon
+                             r-glue
+                             r-htmltools
+                             r-magrittr
+                             r-r6
+                             r-shiny
+                             r-shinyace
+                             r-shinytoastr
+                             r-stringr))
+    (home-page "https://github.com/lz100/spsComps")
+    (synopsis "systemPipeShiny UI and Server Components")
+    (description
+     "UI and server components from the systemPipeShiny framework for use
+in Shiny applications.")
+    (license license:gpl3+)))
+
+(define-public r-scatterd3
+  (package
+    (name "r-scatterd3")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "scatterD3" version))
+       (sha256
+        (base32 "187jq1y5va5npsmpkfyi6mhgynq956590q4z8v1ibadsrcldw34m"))))
+    (properties `((upstream-name . "scatterD3")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-digest r-ellipse r-htmlwidgets))
+    (native-inputs (list r-knitr))
+    (home-page "https://juba.github.io/scatterD3/")
+    (synopsis "D3 JavaScript Scatterplot from R")
+    (description
+     "Creates D3 JavaScript scatterplots from R with interactive features:
+panning, zooming, tooltips, etc.")
+    (license license:gpl3+)))
+
+(define-public r-shinywidgets
+  (package
+    (name "r-shinywidgets")
+    (version "0.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "shinyWidgets" version))
+       (sha256
+        (base32 "118yqylidnlc1ixwang4bvhyy3hjmsimkcv1cz73s8wsj45hmyzb"))))
+    (properties `((upstream-name . "shinyWidgets")))
+    (build-system r-build-system)
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list r-bslib
+                             r-htmltools
+                             r-jsonlite
+                             r-rlang
+                             r-sass
+                             r-shiny))
+    (home-page "https://github.com/dreamRs/shinyWidgets")
+    (synopsis "Custom Inputs Widgets for Shiny")
+    (description
+     "Collection of custom input controls and user interface components for
+Shiny applications.")
+    (license license:gpl3)))
+
+(define-public jumpshiny
+  (let ((commit "3489f3265a2eca45c9b6d251013b313bf55f975d")
+        (revision "1"))
+    (package
+      (name "jumpshiny")
+      (version (git-version "0.0.0" revision commit))
+      (source (local-file "/fast/pjotr/tmp/claude/factory/jumpshiny"
+                          "jumpshiny-checkout"
+                          #:recursive? #t
+                          #:select? (git-predicate
+                                     "/fast/pjotr/tmp/claude/factory/jumpshiny")))
+      (build-system trivial-build-system)
+      (arguments
+       (list #:modules '((guix build utils))
+             #:builder
+             #~(begin
+                 (use-modules (guix build utils))
+                 (let* ((source    (assoc-ref %build-inputs "source"))
+                        (targetdir (string-append #$output "/share/" #$name))
+                        (app       (string-append #$output "/bin/" #$name))
+                        (Rbin      (search-input-file %build-inputs "/bin/Rscript")))
+                   (copy-recursively source targetdir)
+                   (mkdir-p (string-append #$output "/bin"))
+                   (call-with-output-file app
+                     (lambda (port)
+                       (format port
+                               "#!~a
+library(shiny)
+setwd(\"~a\")
+options(shiny.maxRequestSize = 60*1024^2)
+runApp(launch.browser=0, port=3978)~%\n"
+                               Rbin targetdir)))
+                   (chmod app #o555)))))
+      (propagated-inputs
+       (list r
+             ;; Core shiny
+             r-shiny
+             r-shinycssloaders
+             r-shinybs
+             r-shinyjs
+             r-shinythemes
+             r-shinydashboard
+             r-shinywidgets
+             r-fresh
+             ;; Data processing
+             r-dplyr
+             r-tidyr
+             r-tidyverse
+             r-data-table
+             r-plyr
+             r-readxl
+             r-writexl
+             r-devtools
+             r-pacman
+             ;; Visualization
+             r-ggplot2
+             r-plotly
+             r-heatmaply
+             r-gplots
+             r-scatterd3
+             r-rcolorbrewer
+             r-pheatmap
+             r-complexheatmap
+             r-circlize
+             ;; Stats and bioinformatics
+             r-limma
+             r-cluster
+             r-clusterprofiler
+             r-enrichplot
+             r-wgcna
+             r-annotate
+             r-org-hs-eg-db
+             r-org-mm-eg-db
+             r-org-rn-eg-db
+             r-igraph
+             r-visnetwork
+             ;; Utilities
+             r-dt
+             r-markdown
+             r-bookdown
+             r-scales
+             r-curl
+             r-glue
+             r-spscomps
+             r-ggnewscale
+             r-stringr
+             r-zoo
+             r-officer
+             r-r-utils
+             r-mass
+             r-knitr
+             r-rmarkdown))
+      (home-page "https://git.genenetwork.org/jumpshiny/")
+      (synopsis "JUMPshiny - proteomics data analysis Shiny app")
+      (description
+       "JUMPshiny is an R Shiny application for proteomics data analysis,
+including data import, batch normalization, differential expression,
+enrichment analysis, and network analysis with WGCNA.")
+      (license license:gpl3+))))
+
+(define-public r-efatools
+  (package
+    (name "r-efatools")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "EFAtools" version))
+       (sha256
+        (base32 "0x2c1a1fwa79pdam2day57rpcyxf195a4kqsnwzr2xh6x1fjrnad"))))
+    (properties `((upstream-name . "EFAtools")))
+    (build-system r-build-system)
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list r-checkmate
+                             r-cli
+                             r-crayon
+                             r-dplyr
+                             r-future
+                             r-future-apply
+                             r-ggplot2
+                             r-gparotation
+                             r-lavaan
+                             r-magrittr
+                             r-progress
+                             r-progressr
+                             r-psych
+                             r-rcpp
+                             r-rcpparmadillo
+                             r-rlang
+                             r-stringr
+                             r-tibble
+                             r-tidyr
+                             r-viridislite))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/mdsteiner/EFAtools")
+    (synopsis "Fast and flexible exploratory factor analysis tools")
+    (description
+     "Functions to perform exploratory factor analysis (EFA) procedures and
+compare their solutions.")
+    (license license:gpl3)))
+
+(define-public jumpsem-web
+  (let ((commit "a134ab0b10f3d2393ca19870e154ab8bafd45757")
+        (revision "1"))
+    (package
+      (name "jumpsem-web")
+      (version (git-version "0.0.0" revision commit))
+      (source (local-file "/fast/pjotr/tmp/claude/factory/jumpsem_web"
+                          "jumpsem-web-checkout"
+                          #:recursive? #t))
+      (build-system trivial-build-system)
+      (arguments
+       (list #:modules '((guix build utils))
+             #:builder
+             #~(begin
+                 (use-modules (guix build utils))
+                 (let* ((source    (assoc-ref %build-inputs "source"))
+                        (targetdir (string-append #$output "/share/" #$name))
+                        (app       (string-append #$output "/bin/" #$name))
+                        (Rbin      (search-input-file %build-inputs "/bin/Rscript")))
+                   (copy-recursively source targetdir)
+                   (mkdir-p (string-append #$output "/bin"))
+                   (call-with-output-file app
+                     (lambda (port)
+                       (format port
+                               "#!~a
+library(shiny)
+setwd(\"~a\")
+options(shiny.maxRequestSize = 500*1024^2)
+runApp(launch.browser=0, port=3979)~%\n"
+                               Rbin targetdir)))
+                   (chmod app #o555)))))
+      (propagated-inputs
+       (list r
+             r-shiny
+             r-shinycssloaders
+             r-shinybs
+             r-shinyjs
+             r-shinywidgets
+             r-shinydashboard
+             r-dplyr
+             r-tidyr
+             r-tidyverse
+             r-data-table
+             r-devtools
+             r-pacman
+             r-ggplot2
+             r-plotly
+             r-heatmaply
+             r-gplots
+             r-rcolorbrewer
+             r-scales
+             r-markdown
+             r-dt
+             r-lavaan
+             r-efatools
+             r-rcpparmadillo))
+      (home-page "https://git.genenetwork.org/jumpsem_web/")
+      (synopsis "JUMPsem - structural equation modeling web app")
+      (description
+       "JUMPsem is an R Shiny application for kinase activity inference
+using structural equation modeling on post-translational modification data.")
+      (license license:gpl3+))))
diff --git a/gn/packages/rust-crates.scm b/gn/packages/rust-crates.scm
new file mode 100644
index 0000000..e9945aa
--- /dev/null
+++ b/gn/packages/rust-crates.scm
@@ -0,0 +1,525 @@
+(define-module (gn packages rust-crates)
+  #:use-module (guix build-system cargo)
+  #:export (lookup-cargo-inputs))
+
+(define rust-adler2-2.0.1
+  (crate-source "adler2" "2.0.1"
+                "1ymy18s9hs7ya1pjc9864l30wk8p2qfqdi7mhhcc5nfakxbij09j"))
+
+(define rust-aho-corasick-1.1.4
+  (crate-source "aho-corasick" "1.1.4"
+                "00a32wb2h07im3skkikc495jvncf62jl6s96vwc7bhi70h9imlyx"))
+
+(define rust-anstream-0.6.21
+  (crate-source "anstream" "0.6.21"
+                "0jjgixms4qjj58dzr846h2s29p8w7ynwr9b9x6246m1pwy0v5ma3"))
+
+(define rust-anstyle-1.0.13
+  (crate-source "anstyle" "1.0.13"
+                "0y2ynjqajpny6q0amvfzzgw0gfw3l47z85km4gvx87vg02lcr4ji"))
+
+(define rust-anstyle-parse-0.2.7
+  (crate-source "anstyle-parse" "0.2.7"
+                "1hhmkkfr95d462b3zf6yl2vfzdqfy5726ya572wwg8ha9y148xjf"))
+
+(define rust-anstyle-query-1.1.5
+  (crate-source "anstyle-query" "1.1.5"
+                "1p6shfpnbghs6jsa0vnqd8bb8gd7pjd0jr7w0j8jikakzmr8zi20"))
+
+(define rust-anstyle-wincon-3.0.11
+  (crate-source "anstyle-wincon" "3.0.11"
+                "0zblannm70sk3xny337mz7c6d8q8i24vhbqi42ld8v7q1wjnl7i9"))
+
+(define rust-anyhow-1.0.101
+  (crate-source "anyhow" "1.0.101"
+                "1skmg90fnjnlgs3vl7bksw7036d3rqwqj20n2fxd2ppg67p0y3jz"))
+
+(define rust-arrayvec-0.5.2
+  (crate-source "arrayvec" "0.5.2"
+                "12q6hn01x5435bprwlb7w9m7817dyfq55yrl4psygr78bp32zdi3"))
+
+(define rust-autocfg-1.5.0
+  (crate-source "autocfg" "1.5.0"
+                "1s77f98id9l4af4alklmzq46f21c980v13z2r1pcxx6bqgw0d1n0"))
+
+(define rust-bitflags-1.3.2
+  (crate-source "bitflags" "1.3.2"
+                "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy"))
+
+(define rust-bitflags-2.11.0
+  (crate-source "bitflags" "2.11.0"
+                "1bwjibwry5nfwsfm9kjg2dqx5n5nja9xymwbfl6svnn8jsz6ff44"))
+
+(define rust-boomphf-0.5.9
+  (crate-source "boomphf" "0.5.9"
+                "0braniw72g9yq5006sfgc1g8d4317bb524c694jw6nggizrvg3sf"))
+
+(define rust-bstr-0.2.17
+  (crate-source "bstr" "0.2.17"
+                "08rjbhysy6gg27db2h3pnhvr2mlr5vkj797i9625kwg8hgrnjdds"))
+
+(define rust-bytemuck-1.25.0
+  (crate-source "bytemuck" "1.25.0"
+                "1v1z32igg9zq49phb3fra0ax5r2inf3aw473vldnm886sx5vdvy8"))
+
+(define rust-bytemuck-derive-1.10.2
+  (crate-source "bytemuck_derive" "1.10.2"
+                "1zvmjmw1sdmx9znzm4dpbb2yvz9vyim8w6gp4z256l46qqdvvazr"))
+
+(define rust-byteorder-1.5.0
+  (crate-source "byteorder" "1.5.0"
+                "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"))
+
+(define rust-cc-1.2.56
+  (crate-source "cc" "1.2.56"
+                "1chvh9g2izhqad7vzy4cc7xpdljdvqpsr6x6hv1hmyqv3mlkbgxf"))
+
+(define rust-cfg-if-1.0.4
+  (crate-source "cfg-if" "1.0.4"
+                "008q28ajc546z5p2hcwdnckmg0hia7rnx52fni04bwqkzyrghc4k"))
+
+(define rust-clap-4.5.59
+  (crate-source "clap" "4.5.59"
+                "16b4kgj909yyshz9kj7nkalbyi46yz1lrhqha54wbbn32x6zgjn5"))
+
+(define rust-clap-builder-4.5.59
+  (crate-source "clap_builder" "4.5.59"
+                "094fc76nsq3v52r1a9rbwix22cqnda8p2wr2a24j302v0r2sl39p"))
+
+(define rust-clap-derive-4.5.55
+  (crate-source "clap_derive" "4.5.55"
+                "1r949xis3jmhzh387smd70vc8a3b9734ck3g5ahg59a63bd969x9"))
+
+(define rust-clap-lex-1.0.0
+  (crate-source "clap_lex" "1.0.0"
+                "0c8888qi1l9sayqlv666h8s0yxn2qc6jr88v1zagk43mpjjjx0is"))
+
+(define rust-colorchoice-1.0.4
+  (crate-source "colorchoice" "1.0.4"
+                "0x8ymkz1xr77rcj1cfanhf416pc4v681gmkc9dzb3jqja7f62nxh"))
+
+(define rust-crc32fast-1.5.0
+  (crate-source "crc32fast" "1.5.0"
+                "04d51liy8rbssra92p0qnwjw8i9rm9c4m3bwy19wjamz1k4w30cl"))
+
+(define rust-crossbeam-channel-0.5.15
+  (crate-source "crossbeam-channel" "0.5.15"
+                "1cicd9ins0fkpfgvz9vhz3m9rpkh6n8d3437c3wnfsdkd3wgif42"))
+
+(define rust-crossbeam-deque-0.8.6
+  (crate-source "crossbeam-deque" "0.8.6"
+                "0l9f1saqp1gn5qy0rxvkmz4m6n7fc0b3dbm6q1r5pmgpnyvi3lcx"))
+
+(define rust-crossbeam-epoch-0.9.18
+  (crate-source "crossbeam-epoch" "0.9.18"
+                "03j2np8llwf376m3fxqx859mgp9f83hj1w34153c7a9c7i5ar0jv"))
+
+(define rust-crossbeam-utils-0.8.21
+  (crate-source "crossbeam-utils" "0.8.21"
+                "0a3aa2bmc8q35fb67432w16wvi54sfmb69rk9h5bhd18vw0c99fh"))
+
+(define rust-either-1.15.0
+  (crate-source "either" "1.15.0"
+                "069p1fknsmzn9llaizh77kip0pqmcwpdsykv2x30xpjyija5gis8"))
+
+(define rust-env-filter-1.0.0
+  (crate-source "env_filter" "1.0.0"
+                "13rhwy5arjn626a0z3hvvkpf9w9pnll14c35vscyqx3jwp43q73s"))
+
+(define rust-env-logger-0.11.9
+  (crate-source "env_logger" "0.11.9"
+                "13913sqpnhv741z5ixmcy5j3nnml53gmsllnhajjkx2ili7fxnmj"))
+
+(define rust-equivalent-1.0.2
+  (crate-source "equivalent" "1.0.2"
+                "03swzqznragy8n0x31lqc78g2af054jwivp7lkrbrc0khz74lyl7"))
+
+(define rust-errno-0.3.14
+  (crate-source "errno" "0.3.14"
+                "1szgccmh8vgryqyadg8xd58mnwwicf39zmin3bsn63df2wbbgjir"))
+
+(define rust-find-msvc-tools-0.1.9
+  (crate-source "find-msvc-tools" "0.1.9"
+                "10nmi0qdskq6l7zwxw5g56xny7hb624iki1c39d907qmfh3vrbjv"))
+
+(define rust-flate2-1.1.9
+  (crate-source "flate2" "1.1.9"
+                "0g2pb7cxnzcbzrj8bw4v6gpqqp21aycmf6d84rzb6j748qkvlgw4"))
+
+(define rust-fnv-1.0.7
+  (crate-source "fnv" "1.0.7"
+                "1hc2mcqha06aibcaza94vbi81j6pr9a1bbxrxjfhc91zin8yr7iz"))
+
+(define rust-gfa-0.10.1
+  (crate-source "gfa" "0.10.1"
+                "1x996rpfnflgi2j4dgaj5sdxdbf24zfm9d2ha0zy8aid0cd60cln"))
+
+(define rust-handlegraph-0.7.0-alpha.9
+  (crate-source "handlegraph" "0.7.0-alpha.9"
+                "1frlcdwhycjvizb0gfb0v36vxjdi0jxagl2l2v6dzdjxpaawv9rs"))
+
+(define rust-hashbrown-0.16.1
+  (crate-source "hashbrown" "0.16.1"
+                "004i3njw38ji3bzdp9z178ba9x3k0c1pgy8x69pj7yfppv4iq7c4"))
+
+(define rust-heck-0.5.0
+  (crate-source "heck" "0.5.0"
+                "1sjmpsdl8czyh9ywl3qcsfsq9a307dg4ni2vnlwgnzzqhc4y0113"))
+
+(define rust-indexmap-2.13.0
+  (crate-source "indexmap" "2.13.0"
+                "05qh5c4h2hrnyypphxpwflk45syqbzvqsvvyxg43mp576w2ff53p"))
+
+(define rust-is-terminal-polyfill-1.70.2
+  (crate-source "is_terminal_polyfill" "1.70.2"
+                "15anlc47sbz0jfs9q8fhwf0h3vs2w4imc030shdnq54sny5i7jx6"))
+
+(define rust-jiff-0.2.20
+  (crate-source "jiff" "0.2.20"
+                "0hv59kcqj5sc0jgk4q7yrq5dp8yb3qlan98qk3s36sq9ribc6ry8"))
+
+(define rust-jiff-static-0.2.20
+  (crate-source "jiff-static" "0.2.20"
+                "1rcvbp9aj8ll4ljxcgzq4l2h9idmkb0v6mdvf3r3i5r64m1np57p"))
+
+(define rust-lazy-static-1.5.0
+  (crate-source "lazy_static" "1.5.0"
+                "1zk6dqqni0193xg6iijh7i3i44sryglwgvx20spdvwk3r6sbrlmv"))
+
+(define rust-lexical-core-0.7.6
+  (crate-source "lexical-core" "0.7.6"
+                "1zjzab1fnaw4kj6ixyrskp4dyz761gdcab07m4bkvlk1l4mcc1v6"))
+
+(define rust-libc-0.2.182
+  (crate-source "libc" "0.2.182"
+                "04k1w1mq9f4cxv520dbr5xw1i7xkbc9fcrvaggyjy25jdkdvl038"))
+
+(define rust-libz-sys-1.1.23
+  ;; TODO: Check bundled sources.
+  (crate-source "libz-sys" "1.1.23"
+                "1xy0l46gmhfyk28r9pm7njl0h7dh8l2vpiqw67kn043pyfxiil8m"))
+
+(define rust-linux-raw-sys-0.11.0
+  ;; TODO: Check bundled sources.
+  (crate-source "linux-raw-sys" "0.11.0"
+                "0fghx0nn8nvbz5yzgizfcwd6ap2pislp68j8c1bwyr6sacxkq7fz"))
+
+(define rust-log-0.4.29
+  (crate-source "log" "0.4.29"
+                "15q8j9c8g5zpkcw0hnd6cf2z7fxqnvsjh3rw5mv5q10r83i34l2y"))
+
+(define rust-memchr-2.8.0
+  (crate-source "memchr" "2.8.0"
+                "0y9zzxcqxvdqg6wyag7vc3h0blhdn7hkq164bxyx2vph8zs5ijpq"))
+
+(define rust-memmap-0.7.0
+  (crate-source "memmap" "0.7.0"
+                "0ns7kkd1h4pijdkwfvw4qlbbmqmlmzwlq3g2676dcl5vwyazv1b5"))
+
+(define rust-miniz-oxide-0.8.9
+  (crate-source "miniz_oxide" "0.8.9"
+                "05k3pdg8bjjzayq3rf0qhpirq9k37pxnasfn4arbs17phqn6m9qz"))
+
+(define rust-nom-5.1.3
+  (crate-source "nom" "5.1.3"
+                "0jyxc4d3pih60pp8hvzpg5ajh16s273cpnsdpzp04qv7g8w9m588"))
+
+(define rust-num-traits-0.2.19
+  (crate-source "num-traits" "0.2.19"
+                "0h984rhdkkqd4ny9cif7y2azl3xdfb7768hb9irhpsch4q3gq787"))
+
+(define rust-once-cell-polyfill-1.70.2
+  (crate-source "once_cell_polyfill" "1.70.2"
+                "1zmla628f0sk3fhjdjqzgxhalr2xrfna958s632z65bjsfv8ljrq"))
+
+(define rust-pkg-config-0.3.32
+  (crate-source "pkg-config" "0.3.32"
+                "0k4h3gnzs94sjb2ix6jyksacs52cf1fanpwsmlhjnwrdnp8dppby"))
+
+(define rust-portable-atomic-1.13.1
+  (crate-source "portable-atomic" "1.13.1"
+                "0j8vlar3n5acyigq8q6f4wjx3k3s5yz0rlpqrv76j73gi5qr8fn3"))
+
+(define rust-portable-atomic-util-0.2.5
+  (crate-source "portable-atomic-util" "0.2.5"
+                "1xcm0ia8756k6hdgafx4g3lx3fw0hvz2zqswq7c2sy58gxnvk7bs"))
+
+(define rust-proc-macro2-1.0.106
+  (crate-source "proc-macro2" "1.0.106"
+                "0d09nczyaj67x4ihqr5p7gxbkz38gxhk4asc0k8q23g9n85hzl4g"))
+
+(define rust-quote-1.0.44
+  (crate-source "quote" "1.0.44"
+                "1r7c7hxl66vz3q9qizgjhy77pdrrypqgk4ghc7260xvvfb7ypci1"))
+
+(define rust-rand-core-0.6.4
+  (crate-source "rand_core" "0.6.4"
+                "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc"))
+
+(define rust-rayon-1.11.0
+  (crate-source "rayon" "1.11.0"
+                "13x5fxb7rn4j2yw0cr26n7782jkc7rjzmdkg42qxk3xz0p8033rn"))
+
+(define rust-rayon-core-1.13.0
+  (crate-source "rayon-core" "1.13.0"
+                "14dbr0sq83a6lf1rfjq5xdpk5r6zgzvmzs5j6110vlv2007qpq92"))
+
+(define rust-regex-1.12.3
+  (crate-source "regex" "1.12.3"
+                "0xp2q0x7ybmpa5zlgaz00p8zswcirj9h8nry3rxxsdwi9fhm81z1"))
+
+(define rust-regex-automata-0.1.10
+  (crate-source "regex-automata" "0.1.10"
+                "0ci1hvbzhrfby5fdpf4ganhf7kla58acad9i1ff1p34dzdrhs8vc"))
+
+(define rust-regex-automata-0.4.14
+  (crate-source "regex-automata" "0.4.14"
+                "13xf7hhn4qmgfh784llcp2kzrvljd13lb2b1ca0mwnf15w9d87bf"))
+
+(define rust-regex-syntax-0.8.9
+  (crate-source "regex-syntax" "0.8.9"
+                "0k0a47r1rcl794wj8a948niakbg081s5pp5nlgcbmmr2iy3qfs59"))
+
+(define rust-rustc-hash-2.1.1
+  (crate-source "rustc-hash" "2.1.1"
+                "03gz5lvd9ghcwsal022cgkq67dmimcgdjghfb5yb5d352ga06xrm"))
+
+(define rust-rustix-1.1.3
+  (crate-source "rustix" "1.1.3"
+                "0d0z2zcw4rwzni1hm8snw8xdxwwrij336m31c4ghq66cghj9wv0l"))
+
+(define rust-ryu-1.0.23
+  (crate-source "ryu" "1.0.23"
+                "0zs70sg00l2fb9jwrf6cbkdyscjs53anrvai2hf7npyyfi5blx4p"))
+
+(define rust-serde-core-1.0.228
+  (crate-source "serde_core" "1.0.228"
+                "1bb7id2xwx8izq50098s5j2sqrrvk31jbbrjqygyan6ask3qbls1"))
+
+(define rust-serde-derive-1.0.228
+  (crate-source "serde_derive" "1.0.228"
+                "0y8xm7fvmr2kjcd029g9fijpndh8csv5m20g4bd76w8qschg4h6m"))
+
+(define rust-shlex-1.3.0
+  (crate-source "shlex" "1.3.0"
+                "0r1y6bv26c1scpxvhg2cabimrmwgbp4p3wy6syj9n0c4s3q2znhg"))
+
+(define rust-simd-adler32-0.3.8
+  (crate-source "simd-adler32" "0.3.8"
+                "18lx2gdgislabbvlgw5q3j5ssrr77v8kmkrxaanp3liimp2sc873"))
+
+(define rust-static-assertions-1.1.0
+  (crate-source "static_assertions" "1.1.0"
+                "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"))
+
+(define rust-strsim-0.11.1
+  (crate-source "strsim" "0.11.1"
+                "0kzvqlw8hxqb7y598w1s0hxlnmi84sg5vsipp3yg5na5d1rvba3x"))
+
+(define rust-succinct-0.5.2
+  (crate-source "succinct" "0.5.2"
+                "0654c9gq50x7djyf25zbzz3d2pc4x3z21wmjj3qbr6d9h4hbd63p"))
+
+(define rust-syn-2.0.116
+  (crate-source "syn" "2.0.116"
+                "1jv9pk48qmhn6yrdfl3lngy5i74wg7gcx13gfhvm4s8q0p3j9x1x"))
+
+(define rust-terminal-size-0.4.3
+  (crate-source "terminal_size" "0.4.3"
+                "1l7cicmz49c0cyskfp5a389rsai649xi7y032v73475ikjbwpf30"))
+
+(define rust-unicode-ident-1.0.24
+  (crate-source "unicode-ident" "1.0.24"
+                "0xfs8y1g7syl2iykji8zk5hgfi5jw819f5zsrbaxmlzwsly33r76"))
+
+(define rust-utf8parse-0.2.2
+  (crate-source "utf8parse" "0.2.2"
+                "088807qwjq46azicqwbhlmzwrbkz7l4hpw43sdkdyyk524vdxaq6"))
+
+(define rust-vcpkg-0.2.15
+  (crate-source "vcpkg" "0.2.15"
+                "09i4nf5y8lig6xgj3f7fyrvzd3nlaw4znrihw8psidvv5yk4xkdc"))
+
+(define rust-version-check-0.9.5
+  (crate-source "version_check" "0.9.5"
+                "0nhhi4i5x89gm911azqbn7avs9mdacw2i3vcz3cnmz3mv4rqz4hb"))
+
+(define rust-winapi-0.3.9
+  (crate-source "winapi" "0.3.9"
+                "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw"))
+
+(define rust-winapi-i686-pc-windows-gnu-0.4.0
+  (crate-source "winapi-i686-pc-windows-gnu" "0.4.0"
+                "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-winapi-x86-64-pc-windows-gnu-0.4.0
+  (crate-source "winapi-x86_64-pc-windows-gnu" "0.4.0"
+                "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-aarch64-gnullvm-0.53.1
+  (crate-source "windows_aarch64_gnullvm" "0.53.1"
+                "0lqvdm510mka9w26vmga7hbkmrw9glzc90l4gya5qbxlm1pl3n59"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-aarch64-msvc-0.53.1
+  (crate-source "windows_aarch64_msvc" "0.53.1"
+                "01jh2adlwx043rji888b22whx4bm8alrk3khjpik5xn20kl85mxr"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-i686-gnu-0.53.1
+  (crate-source "windows_i686_gnu" "0.53.1"
+                "18wkcm82ldyg4figcsidzwbg1pqd49jpm98crfz0j7nqd6h6s3ln"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-i686-gnullvm-0.53.1
+  (crate-source "windows_i686_gnullvm" "0.53.1"
+                "030qaxqc4salz6l4immfb6sykc6gmhyir9wzn2w8mxj8038mjwzs"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-i686-msvc-0.53.1
+  (crate-source "windows_i686_msvc" "0.53.1"
+                "1hi6scw3mn2pbdl30ji5i4y8vvspb9b66l98kkz350pig58wfyhy"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-link-0.2.1
+  (crate-source "windows-link" "0.2.1"
+                "1rag186yfr3xx7piv5rg8b6im2dwcf8zldiflvb22xbzwli5507h"))
+
+(define rust-windows-sys-0.60.2
+  ;; TODO: Check bundled sources.
+  (crate-source "windows-sys" "0.60.2"
+                "1jrbc615ihqnhjhxplr2kw7rasrskv9wj3lr80hgfd42sbj01xgj"))
+
+(define rust-windows-sys-0.61.2
+  ;; TODO: Check bundled sources.
+  (crate-source "windows-sys" "0.61.2"
+                "1z7k3y9b6b5h52kid57lvmvm05362zv1v8w0gc7xyv5xphlp44xf"))
+
+(define rust-windows-targets-0.53.5
+  (crate-source "windows-targets" "0.53.5"
+                "1wv9j2gv3l6wj3gkw5j1kr6ymb5q6dfc42yvydjhv3mqa7szjia9"))
+
+(define rust-windows-x86-64-gnu-0.53.1
+  (crate-source "windows_x86_64_gnu" "0.53.1"
+                "16d4yiysmfdlsrghndr97y57gh3kljkwhfdbcs05m1jasz6l4f4w"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-x86-64-gnullvm-0.53.1
+  (crate-source "windows_x86_64_gnullvm" "0.53.1"
+                "1qbspgv4g3q0vygkg8rnql5c6z3caqv38japiynyivh75ng1gyhg"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-windows-x86-64-msvc-0.53.1
+  (crate-source "windows_x86_64_msvc" "0.53.1"
+                "0l6npq76vlq4ksn4bwsncpr8508mk0gmznm6wnhjg95d19gzzfyn"
+                #:snippet '(delete-file-recursively "lib")))
+
+(define rust-wyhash-0.5.0
+  (crate-source "wyhash" "0.5.0"
+                "15f26hvx6nyp4d6iswha7rm3psidxa2k2iab1f1aqgsyq9iy3xms"))
+
+(define-cargo-inputs lookup-cargo-inputs
+                     (gfaffix =>
+                              (list rust-adler2-2.0.1
+                                    rust-aho-corasick-1.1.4
+                                    rust-anstream-0.6.21
+                                    rust-anstyle-1.0.13
+                                    rust-anstyle-parse-0.2.7
+                                    rust-anstyle-query-1.1.5
+                                    rust-anstyle-wincon-3.0.11
+                                    rust-anyhow-1.0.101
+                                    rust-arrayvec-0.5.2
+                                    rust-autocfg-1.5.0
+                                    rust-bitflags-1.3.2
+                                    rust-bitflags-2.11.0
+                                    rust-boomphf-0.5.9
+                                    rust-bstr-0.2.17
+                                    rust-bytemuck-1.25.0
+                                    rust-bytemuck-derive-1.10.2
+                                    rust-byteorder-1.5.0
+                                    rust-cc-1.2.56
+                                    rust-cfg-if-1.0.4
+                                    rust-clap-4.5.59
+                                    rust-clap-builder-4.5.59
+                                    rust-clap-derive-4.5.55
+                                    rust-clap-lex-1.0.0
+                                    rust-colorchoice-1.0.4
+                                    rust-crc32fast-1.5.0
+                                    rust-crossbeam-channel-0.5.15
+                                    rust-crossbeam-deque-0.8.6
+                                    rust-crossbeam-epoch-0.9.18
+                                    rust-crossbeam-utils-0.8.21
+                                    rust-either-1.15.0
+                                    rust-env-filter-1.0.0
+                                    rust-env-logger-0.11.9
+                                    rust-equivalent-1.0.2
+                                    rust-errno-0.3.14
+                                    rust-find-msvc-tools-0.1.9
+                                    rust-flate2-1.1.9
+                                    rust-fnv-1.0.7
+                                    rust-gfa-0.10.1
+                                    rust-handlegraph-0.7.0-alpha.9
+                                    rust-hashbrown-0.16.1
+                                    rust-heck-0.5.0
+                                    rust-indexmap-2.13.0
+                                    rust-is-terminal-polyfill-1.70.2
+                                    rust-jiff-0.2.20
+                                    rust-jiff-static-0.2.20
+                                    rust-lazy-static-1.5.0
+                                    rust-lexical-core-0.7.6
+                                    rust-libc-0.2.182
+                                    rust-libz-sys-1.1.23
+                                    rust-linux-raw-sys-0.11.0
+                                    rust-log-0.4.29
+                                    rust-memchr-2.8.0
+                                    rust-memmap-0.7.0
+                                    rust-miniz-oxide-0.8.9
+                                    rust-nom-5.1.3
+                                    rust-num-traits-0.2.19
+                                    rust-once-cell-polyfill-1.70.2
+                                    rust-pkg-config-0.3.32
+                                    rust-portable-atomic-1.13.1
+                                    rust-portable-atomic-util-0.2.5
+                                    rust-proc-macro2-1.0.106
+                                    rust-quote-1.0.44
+                                    rust-rand-core-0.6.4
+                                    rust-rayon-1.11.0
+                                    rust-rayon-core-1.13.0
+                                    rust-regex-1.12.3
+                                    rust-regex-automata-0.1.10
+                                    rust-regex-automata-0.4.14
+                                    rust-regex-syntax-0.8.9
+                                    rust-rustc-hash-2.1.1
+                                    rust-rustix-1.1.3
+                                    rust-ryu-1.0.23
+                                    rust-serde-core-1.0.228
+                                    rust-serde-derive-1.0.228
+                                    rust-shlex-1.3.0
+                                    rust-simd-adler32-0.3.8
+                                    rust-static-assertions-1.1.0
+                                    rust-strsim-0.11.1
+                                    rust-succinct-0.5.2
+                                    rust-syn-2.0.116
+                                    rust-terminal-size-0.4.3
+                                    rust-unicode-ident-1.0.24
+                                    rust-utf8parse-0.2.2
+                                    rust-vcpkg-0.2.15
+                                    rust-version-check-0.9.5
+                                    rust-winapi-0.3.9
+                                    rust-winapi-i686-pc-windows-gnu-0.4.0
+                                    rust-winapi-x86-64-pc-windows-gnu-0.4.0
+                                    rust-windows-link-0.2.1
+                                    rust-windows-sys-0.60.2
+                                    rust-windows-sys-0.61.2
+                                    rust-windows-targets-0.53.5
+                                    rust-windows-aarch64-gnullvm-0.53.1
+                                    rust-windows-aarch64-msvc-0.53.1
+                                    rust-windows-i686-gnu-0.53.1
+                                    rust-windows-i686-gnullvm-0.53.1
+                                    rust-windows-i686-msvc-0.53.1
+                                    rust-windows-x86-64-gnu-0.53.1
+                                    rust-windows-x86-64-gnullvm-0.53.1
+                                    rust-windows-x86-64-msvc-0.53.1
+                                    rust-wyhash-0.5.0)))
diff --git a/gn/packages/twint.scm b/gn/packages/twint.scm
index b61b6ca..f665003 100644
--- a/gn/packages/twint.scm
+++ b/gn/packages/twint.scm
@@ -1,13 +1,16 @@
 (define-module (gn packages twint)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (gnu packages check)
   #:use-module (gnu packages geo)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
@@ -104,6 +107,47 @@
      "cChardet is high speed universal character encoding detector.")
     (license #f)))
 
+(define-public python-curio
+  (package
+    (name "python-curio")
+    (version "1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "curio" version))
+       (sha256
+        (base32 "0isj3jl5mx6m25nr1f7r91hfaydhkvmks9p85dyvl5h2n9nmhajn"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      #~(list ;; AttributeError: 'NoneType' object has no attribute
+         ;; 'terminate'
+         "--deselect=tests/test_workers.py::test_exception"
+         ;; Tries to open an outgoing connection.
+         "--deselect=tests/test_network.py::test_ssl_outgoing"
+         ;; This test fails since Python 3.9.9, see
+         ;; <https://github.com/dabeaz/curio/issues/347>.
+         ;; AttributeError: 'NoneType' object has no attribute
+         ;; 'terminate'
+         "--deselect=tests/test_workers.py::test_worker_timeout"
+         ;; AttributeError: 'NoneType' object has no attribute
+         ;; 'terminate'
+         "--deselect=tests/test_workers.py::test_bad_cpu"
+         "--deselect=tests/test_workers.py::test_cpu"
+         "--deselect=tests/test_workers.py::test_worker_cancel")))
+    (native-inputs
+     (list python-pytest
+           python-setuptools
+           python-wheel))
+    (home-page "https://github.com/dabeaz/curio")
+    (synopsis "Coroutine-based library for concurrent Python")
+    (description
+     "Curio is a coroutine-based library for concurrent Python systems
+programming.  It provides standard programming abstractions such as as
+tasks, sockets, files, locks, and queues.")
+    (license license:bsd-3)))
+
 ;; TODO: Upstream
 (define-public python-socks
   (package
diff --git a/gn/packages/virtualization.scm b/gn/packages/virtualization.scm
index 22753f8..b176ec7 100644
--- a/gn/packages/virtualization.scm
+++ b/gn/packages/virtualization.scm
@@ -16,6 +16,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (past packages python27))
 
diff --git a/gn/services/jumpsem-container.scm b/gn/services/jumpsem-container.scm
new file mode 100644
index 0000000..934507e
--- /dev/null
+++ b/gn/services/jumpsem-container.scm
@@ -0,0 +1,27 @@
+(define-module (gn services jumpsem-container))
+
+(use-modules (gnu)
+             (gn packages r-shiny)
+             (gn services rshiny))
+(use-service-modules networking)
+(use-package-modules base)
+
+(operating-system
+  (host-name "jumpsem")
+  (timezone "Etc/UTC")
+  (locale "en_US.utf8")
+
+  (bootloader (bootloader-configuration
+               (bootloader grub-bootloader)
+               (targets '("does-not-matter"))))
+  (file-systems %base-file-systems)
+  (firmware '())
+  (packages (list coreutils))
+
+  (services (list (service dhcpcd-service-type)
+                  (service rshiny-service-type
+                           (rshiny-configuration
+                             (package jumpsem-web)
+                             (binary "jumpsem-web"))))))
+
+;; guix system container -L guix-bioinformatics guix-bioinformatics/gn/services/jumpsem-container.scm --network
diff --git a/gn/services/jumpshiny-container.scm b/gn/services/jumpshiny-container.scm
new file mode 100644
index 0000000..effcf23
--- /dev/null
+++ b/gn/services/jumpshiny-container.scm
@@ -0,0 +1,25 @@
+(define-module (gn services jumpshiny-container))
+
+(use-modules (gnu)
+             (gn packages r-shiny)
+             (gn services rshiny))
+(use-package-modules base bash)
+
+(operating-system
+  (host-name "jumpshiny")
+  (timezone "Etc/UTC")
+  (locale "en_US.utf8")
+
+  (bootloader (bootloader-configuration
+               (bootloader grub-bootloader)
+               (targets '("does-not-matter"))))
+  (file-systems %base-file-systems)
+  (firmware '())
+  (packages (list coreutils bash))
+
+  (services (list (service rshiny-service-type
+                           (rshiny-configuration
+                             (package jumpshiny)
+                             (binary "jumpshiny"))))))
+
+;; guix system container -L guix-bioinformatics guix-bioinformatics/gn/services/jumpshiny-container.scm --network
diff --git a/vcflib-use-system-fastahack-smithwaterman.patch b/vcflib-use-system-fastahack-smithwaterman.patch
new file mode 100644
index 0000000..91f372c
--- /dev/null
+++ b/vcflib-use-system-fastahack-smithwaterman.patch
@@ -0,0 +1,107 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index af3fe67..f237563 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -63,8 +63,10 @@ set_package_properties(ZLIB PROPERTIES TYPE REQUIRED)
+ find_package(Threads)
+ set_package_properties(Threads PROPERTIES TYPE REQUIRED)
+ 
+-pkg_check_modules(htslib IMPORTED_TARGET htslib)   # Optionally builds from contrib/
+-pkg_check_modules(tabixpp IMPORTED_TARGET tabixpp) # Optionally builds from contrib/
++pkg_check_modules(htslib IMPORTED_TARGET htslib)           # Optionally builds from contrib/
++pkg_check_modules(tabixpp IMPORTED_TARGET tabixpp)         # Optionally builds from contrib/
++pkg_check_modules(fastahack IMPORTED_TARGET fastahack)     # Optionally builds from contrib/
++pkg_check_modules(smithwaterman IMPORTED_TARGET smithwaterman) # Optionally builds from contrib/
+ 
+ # ---- Build switches
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${ipo_supported})
+@@ -113,12 +115,20 @@ endif(ZIG)
+ # ---- Include files
+ 
+ include_directories(include)
+-include_directories(contrib/fastahack)
+ include_directories(contrib/intervaltree)
+-include_directories(contrib/smithwaterman)
+ include_directories(contrib/filevercmp)
+ include_directories(contrib/c-progress-bar)
+ 
++if(NOT fastahack_FOUND)
++  message(STATUS "Using included fastahack")
++  include_directories(contrib/fastahack)
++endif()
++
++if(NOT smithwaterman_FOUND)
++  message(STATUS "Using included smithwaterman")
++  include_directories(contrib/smithwaterman)
++endif()
++
+ if(NOT htslib_FOUND)
+   message(STATUS "Using included htslib")
+   include(FindCURL) # for htslib
+@@ -142,11 +152,19 @@ endif()
+ file(GLOB INCLUDES
+   src/*.h*
+   contrib/intervaltree/*.h*
+-  contrib/smithwaterman/*.h*
+-  contrib/fastahack/*.h*
+   contrib/filevercmp/*.h*
+   )
+ 
++if(NOT fastahack_FOUND)
++  file(GLOB FASTAHACK_INCLUDES contrib/fastahack/*.h*)
++  list(APPEND INCLUDES ${FASTAHACK_INCLUDES})
++endif()
++
++if(NOT smithwaterman_FOUND)
++  file(GLOB SW_INCLUDES contrib/smithwaterman/*.h*)
++  list(APPEND INCLUDES ${SW_INCLUDES})
++endif()
++
+ set(vcfwfa_SOURCE
+     src/legacy.cpp # introduces a WFA dependency
+     src/vcf-wfa.cpp
+@@ -170,16 +188,24 @@ set(vcflib_SOURCE
+     src/LeftAlign.cpp
+     src/cigar.cpp
+     src/allele.cpp
+-    contrib/fastahack/Fasta.cpp
++    contrib/fsom/fsom.c
++    contrib/filevercmp/filevercmp.c
++    contrib/c-progress-bar/progress.c
++)
++
++if(NOT fastahack_FOUND)
++  list(APPEND vcflib_SOURCE contrib/fastahack/Fasta.cpp)
++endif()
++
++if(NOT smithwaterman_FOUND)
++  list(APPEND vcflib_SOURCE
+     contrib/smithwaterman/SmithWatermanGotoh.cpp
+     contrib/smithwaterman/Repeats.cpp
+     contrib/smithwaterman/IndelAllele.cpp
+     contrib/smithwaterman/disorder.cpp
+     contrib/smithwaterman/LeftAlign.cpp
+-    contrib/fsom/fsom.c
+-    contrib/filevercmp/filevercmp.c
+-    contrib/c-progress-bar/progress.c
+-)
++  )
++endif()
+ 
+ if (tabixpp_LOCAL) # add the tabixpp source file
+     list(APPEND vcflib_SOURCE ${tabixpp_SOURCE})
+@@ -440,6 +466,14 @@ if (NOT tabixpp_LOCAL)
+   target_link_libraries(vcflib PkgConfig::tabixpp)
+ endif()
+ 
++if(fastahack_FOUND)
++  target_link_libraries(vcflib PkgConfig::fastahack)
++endif()
++
++if(smithwaterman_FOUND)
++  target_link_libraries(vcflib PkgConfig::smithwaterman)
++endif()
++
+ if(OPENMP)
+   target_link_libraries(vcflib OpenMP::OpenMP_CXX)
+ endif()