about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.guix-channel30
-rw-r--r--gn/packages/bioinformatics.scm77
-rw-r--r--gn/packages/check.scm24
-rw-r--r--gn/packages/crates-io.scm4
-rw-r--r--gn/packages/file-systems.scm31
-rw-r--r--gn/packages/genenetwork.scm28
-rw-r--r--gn/packages/guile.scm99
-rw-r--r--gn/packages/java.scm1
-rw-r--r--gn/packages/machine-learning.scm1
-rw-r--r--gn/packages/python.scm29
-rw-r--r--gn/packages/yaj.scm1
-rw-r--r--gn/services/monitoring.scm49
12 files changed, 335 insertions, 39 deletions
diff --git a/.guix-channel b/.guix-channel
index 456ed73..7a4ee1b 100644
--- a/.guix-channel
+++ b/.guix-channel
@@ -2,19 +2,9 @@
  (version 0)
  (dependencies
   (channel
-   (name guix-past)
-   (url "https://codeberg.org/guix-science/guix-past")
-   (introduction
-    (channel-introduction
-     (version 0)
-     (commit "c3bc94ee752ec545e39c1b8a29f739405767b51c")
-     (signer
-      "3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5"))))
-  (channel
    (name guix)
    (url "https://codeberg.org/guix/guix")
    (branch "master")
-   (commit "0a4740705090acc4c8a10d4f53afc58c9f62e980")
    (introduction
     (channel-introduction
      (version 0)
@@ -22,23 +12,21 @@
      (signer
       "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"))))
   (channel
-   (name guix-rust-past-crates)
-   (url "https://codeberg.org/guix/guix-rust-past-crates.git")
-   (branch "trunk")
+   (name guix-past)
+   (url "https://codeberg.org/guix-science/guix-past")
    (introduction
     (channel-introduction
      (version 0)
-     (commit "b8b7ffbd1cec9f56f93fae4da3a74163bbc9c570")
+     (commit "c3bc94ee752ec545e39c1b8a29f739405767b51c")
      (signer
-      "F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"))))
+      "3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5"))))
   (channel
-   (name 'guix-forge)
-   (url "https://git.systemreboot.net/guix-forge/")
-   (branch "main")
-   (commit "e43fd9a4d73654d3876e2c698af7da89f3408f89")
+   (name guix-rust-past-crates)
+   (url "https://codeberg.org/guix/guix-rust-past-crates.git")
+   (branch "trunk")
    (introduction
     (channel-introduction
      (version 0)
-     (commit "0432e37b20dd678a02efee21adf0b9525a670310")
+     (commit "1db24ca92c28255b28076792b93d533eabb3dc6a")
      (signer
-      "7F73 0343 F2F0 9F3C 77BF  79D3 2E25 EE8B 6180 2BB3"))))))
+      "F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"))))))
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index e6ca5db..f7b70e2 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -72,6 +72,7 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -1813,14 +1814,14 @@ dictionaries to record a queryable version of the graph.")
 (define-public smoothxg
   (package
     (name "smoothxg")
-    (version "0.8.0")
+    (version "0.8.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/pangenome/smoothxg"
                                  "/releases/download/v" version
                                  "/smoothxg-v" version ".tar.gz"))
              (sha256
-              (base32 "1gl4dskj81hlma7wsjrwwg77hgzk7dc9iaqqnf2wzrf2f4ll1cdj"))
+              (base32 "1hqaa6l904zl01rsmw5vzx2kvcncl97i5kln850snywyv33skxp6"))
              (snippet
               #~(begin
                   (use-modules (guix build utils))
@@ -2980,6 +2981,76 @@ to the user.")
                  "http://www.kentinformatics.com/index.html"
                  "Free for universities and non-profit institutions.")))))
 
+(define htslib-1.14
+  (package/inherit htslib
+    (version "1.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/htslib/releases/download/"
+                    version "/htslib-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0pwk8yhhvb85mi1d2qhwsb4samc3rmbcrq7b1s0jz0glaa7in8pd"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments htslib)
+       ((#:configure-flags cf #~'())
+        #~(delete "--with-external-htscodecs" #$cf))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs htslib)
+       (delete "htscodecs")))))
+
+(define-public pbbam
+  (package
+    (name "pbbam")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/PacificBiosciences/pbbam")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1iyazi3l7dswpfxh39k5j7ydi0ywja0579xz3r6l9kkwz2n1z6dc"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Disable this test.  I tried fixing it by including
+             ;; optional_io.hpp, but there's a type error.
+             (substitute* "tests/src/meson.build"
+               (("'test_ReadGroupInfo.cpp',") ""))
+             #;
+             (substitute* "include/pbbam/ReadGroupInfo.h"
+               (("#include <boost/optional.hpp>" m)
+                (string-append m "\n#include <boost/optional/optional_io.hpp>")))
+             (substitute* '("tests/scripts/cram/_test.py"
+                            "tests/scripts/cram/_main.py")
+               (("'/bin/sh'")
+                (string-append "'" (which "sh") "'"))))))))
+    ;; These libraries are listed as "Required" in the pkg-config file.
+    (propagated-inputs
+     (list htslib-1.14 pbcopper zlib))
+    (inputs
+     (list boost samtools))
+    (native-inputs
+     (list googletest
+           pkg-config
+           python-wrapper)) ;for tests
+    (home-page "https://github.com/PacificBiosciences/pbbam")
+    (synopsis "Work with PacBio BAM files")
+    (description
+     "The pbbam software package provides components to create, query, and
+edit PacBio BAM files and associated indices.  These components include a core
+C++ library, bindings for additional languages, and command-line utilities.
+This library is not intended to be used as a general-purpose BAM utility - all
+input and output BAMs must adhere to the PacBio BAM format specification.
+Non-PacBio BAMs will cause exceptions to be thrown.")
+    (license license:bsd-3)))
+
 (define-public bam2fastx
   (package
     (name "bam2fastx")
@@ -4502,6 +4573,8 @@ automatically vectorize for different architectures without adapting the code.")
         (base32
          "1vhqy8licl2pkzar4aag0q5fhnb3fdch8acyjh9445ia42z01z9c"))))
     (build-system r-build-system)
+    (arguments
+     (list #:tests? #f))  ;; tests fail and seem to require data
     (propagated-inputs
      (list r-rcpp
 	   r-rcpparmadillo))
diff --git a/gn/packages/check.scm b/gn/packages/check.scm
index 960e78e..b3964fb 100644
--- a/gn/packages/check.scm
+++ b/gn/packages/check.scm
@@ -1,9 +1,11 @@
 (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-xyz)
   #:use-module (past packages python27))
 
@@ -59,3 +61,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/crates-io.scm b/gn/packages/crates-io.scm
index 23182a2..ea87358 100644
--- a/gn/packages/crates-io.scm
+++ b/gn/packages/crates-io.scm
@@ -686,7 +686,7 @@ or any combination.")
     (license license:gpl3+)))
 
 (define-public gn-rust-correlation
-  (let ((commit "d7b1fd65814511890a4e606e6e610379b6d89393")
+  (let ((commit "48604d86471df965f189e46580578b24191add0e")
         (revision "0"))
     (package
       (name "gn-rust-correlation")
@@ -699,7 +699,7 @@ or any combination.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1z5p9pjja6a697l558axnp1hr5376b6ng3yl3vxcp2h1skfrykvq"))))
+          (base32 "1x7zz0ldf9bmb4lmj3yrhbgcqanc64pl03dimrx5aw7cap006pjw"))))
       (build-system cargo-build-system)
       (native-inputs (list gsl))
       (arguments
diff --git a/gn/packages/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/genenetwork.scm b/gn/packages/genenetwork.scm
index 1d22a59..f8db089 100644
--- a/gn/packages/genenetwork.scm
+++ b/gn/packages/genenetwork.scm
@@ -19,7 +19,6 @@
   #:use-module (guix packages)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages certs)
   #:use-module ((gnu packages nss) #:select (nss-certs))
   #:use-module (gnu packages bioconductor)
   #:use-module (gnu packages bioinformatics)
@@ -65,7 +64,7 @@
 
 
 (define-public rust-qtlreaper
-  (let ((commit "2e7fed6d45b0b602d80fa2a55835f96ef1cba9e3")
+  (let ((commit "4dafa7289432d10685b6b235e3552ac3d681bb03")
         (revision "1"))
     (package
       (name "rust-qtlreaper")
@@ -74,12 +73,12 @@
         (origin
           (method git-fetch)
           (uri (git-reference
-                 (url "https://github.com/chfi/rust-qtlreaper.git")
+                 (url "https://github.com/genenetwork/rust-qtlreaper.git")
                  (commit commit)))
           (file-name (git-file-name name version))
           (sha256
            (base32
-            "0h70aalsplmc6xn1w7ha102n3bsi3gqkbnbrjvjm2za37c07gv0g"))))
+            "1p7dmxh43ly0k7q6va0lzisqnk1i7af3dy5aw1sr4y5s7z0h6i0y"))))
       (build-system cargo-build-system)
       (arguments
        `(#:cargo-inputs
@@ -103,7 +102,7 @@
                        (("-0.3223330030526561") "-0.32233300305265566"))
                      (assoc-ref %standard-phases 'check)))
                #t)))))
-      (home-page "https://github.com/chfi/rust-qtlreaper")
+      (home-page "https://github.com/genenetwork/rust-qtlreaper")
       (synopsis "Reimplementation of genenetwork/QTLReaper in Rust")
       (description "Reimplementation of genenetwork/QTLReaper in Rust")
       (license #f))))
@@ -118,7 +117,7 @@
       ((#:tests? _ #f) #f)))))
 
 (define-public genenetwork3
-  (let ((commit "019282e64fb401f7a6823f3c8914d1d6e5ad0233")
+  (let ((commit "e6c44577b2489f7b1523cb6a5fd332015bde25c5")
         (revision "5"))
     (package
       (name "genenetwork3")
@@ -132,7 +131,7 @@
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1rr2y4i93kpc998a123d32yaakqmqiv5b7n4xva01j6jfqjsgw9s"))))
+           "0i2n46lg73w06dfqcs4sxvwwfdxa0536gv95ism85h4j3dm9vzhz"))))
       (inputs
        (list python-click))
       (native-inputs
@@ -170,6 +169,7 @@
              python-scikit-learn
              python-scipy
              python-sparqlwrapper
+	     python-structlog
              python-wrapper
              python-xapian-bindings
              r
@@ -227,7 +227,7 @@ storage.")
     (license license:bsd-3)))
 
 (define-public genenetwork2
-  (let ((commit "e2f9e829bffcbffc5934e6b11685e5631fd7a001")
+  (let ((commit "5e596f0814b4cad57a847fae03df2867b6327653")
         (revision "4"))
     (package
       (name "genenetwork2")
@@ -240,7 +240,7 @@ storage.")
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "13bcq0ya9sjpf3lx2gdzwsm0ya3y0l4qq48198bqinjbh6avqq1f"))))
+                  "1arnq4b7c6i6fnvfim3yyghrvr0ncjdp1a4ix1hgj9bz2r9vxnzi"))))
       (native-inputs
        (list graphviz))
       (propagated-inputs
@@ -347,6 +347,7 @@ storage.")
              python-wrapper
              python-xlsxwriter
 	     python-pillow-9
+	     python-structlog
              r
              r-ctl
              r-qtl
@@ -508,7 +509,8 @@ storage.")
             javascript-datatables-select
             javascript-datatables-buttons-3
             javascript-datatables-scroller-2
-            node-resumablejs))
+            node-resumablejs
+            rust-qtlreaper))
      (synopsis "GeneNetwork Quality Control Application")
      (description
       "gn-uploader is a service allowing upload of new data into GeneNetwork,
@@ -564,6 +566,7 @@ storage.")
              python-mysqlclient-2.2.7
              python-pymonad
              python-redis
+	     python-structlog
              yoyo-migrations))
       (home-page "https://github.com/genenetwork/gn-auth")
       (synopsis "Authentication and Authorisation server for GeneNetwork services")
@@ -572,7 +575,7 @@ storage.")
 
 
 (define-public gn-libs
-  (let ((commit "894021d27da14bfb0bf286e188a36741bc475906")
+  (let ((commit "9422e39e5b79a4aaca7dc368368d39141a0242b7")
         (revision "02"))
     (package
       (name "gn-libs")
@@ -587,7 +590,7 @@ storage.")
          (hash
           (content-hash
            (base32
-            "0ysj8cs259naa0s6s0gr8149qj6zra3iq0n1fspq3bw0ij54wf8i")))))
+            "03i1kj7jbmlkjs61a9fb4j3s78p4d5lmd8lqnfsv42wxwwyvsm8p")))))
       (build-system pyproject-build-system)
       (arguments
        (list
@@ -607,6 +610,7 @@ storage.")
        (list python-authlib
              python-pymonad
              python-requests
+	     python-structlog
              python-mysqlclient-2.2.7))
       (home-page "https://github.com/genenetwork/gn-libs")
       (synopsis "Tools/utilities for GeneNetwork projects.")
diff --git a/gn/packages/guile.scm b/gn/packages/guile.scm
index 815df1f..8341e74 100644
--- a/gn/packages/guile.scm
+++ b/gn/packages/guile.scm
@@ -18,8 +18,9 @@
   #:use-module ((gnu packages bash) #:select (bash-minimal))
   #:use-module ((gnu packages bioinformatics) #:select (gemma))
   #:use-module ((gnu packages nss) #:select (nss-certs))
+  #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
   #:use-module ((gnu packages guile) #:select (guile-json-4 guile-3.0 guile-2.2 guile-readline))
-  #:use-module ((gnu packages guile-xyz) #:select (guile-dbi guile-dbd-mysql guile-fibers guile-redis guile-hashing guile-commonmark guile-lmdb guile-lib))
+  #:use-module ((gnu packages guile-xyz) #:select (guile-dbi guile-dbd-mysql guile-fibers guile-redis guile-hashing guile-commonmark guile-lmdb guile-lib guile-uuid))
   #:use-module ((gnu packages parallel) #:select (parallel))
   #:use-module ((gnu packages perl) #:select (perl))
   #:use-module ((gnu packages tls) #:select (guile-gnutls openssl)))
@@ -254,3 +255,99 @@ for MySQL.")
       (synopsis "Next generation GN code in guile")
       (description "Use of guile.")
       (license license:gpl3))))
+
+(define-public guile-sheepdog
+  (let ((commit "1426617d58f305a4126bb867202843e8cf7dd4b2")
+	(revision "0"))
+    (package
+     (name "guile-sheepdog")
+     (version "0.0.0")
+     (source (origin
+	      (method git-fetch)
+	      (uri (git-reference
+		    (url "https://github.com/BonfaceKilz/guile-sheepdog.git")
+		    (commit commit)))
+	      (file-name (string-append name "-" version))
+	      (sha256
+	       (base32
+                "1z0xzg11p75s2hk312akxlg2h5278w2abma27dhzjf981g3lcqvr"))))
+     (build-system guile-build-system)
+     (native-inputs (list guile-3.0))
+     (propagated-inputs
+      (list bash-minimal guile-3.0 guile-uuid guile-hashing guile-fibers guile-json-4 guile-gcrypt guile-gnutls guile-redis))
+     (arguments
+      (list
+       #:not-compiled-file-regexp "(guix|guix/.*)[.]scm$"
+       #:modules '((srfi srfi-1)
+		   (ice-9 popen)
+		   (guix build guile-build-system)
+		   (guix build utils))
+       #:phases
+       #~(modify-phases %standard-phases
+			(add-before 'build 'remove-conf
+				    (lambda* _
+				      (delete-file "conf.example.scm")))
+			(add-after 'build 'install-script
+				   (lambda* _
+				     (let* ((bash #$(this-package-input "bash-minimal"))
+					    (bash (string-append bash "/bin/bash"))
+					    (guile #$(this-package-input "guile"))
+					    (guile (string-append guile "/bin/guile"))
+					    (build-guile #$(this-package-native-input "guile"))
+					    (build-guile (string-append build-guile "/bin/guile"))
+					    (guile-uuid #$(this-package-input "guile-uuid"))
+					    (guile-gnutls #$(this-package-input "guile-gnutls"))
+					    (guile-hashing #$(this-package-input "guile-hashing"))
+					    (guile-fibers #$(this-package-input "guile-fibers"))
+					    (guile-redis #$(this-package-input "guile-redis"))
+					    (guile-json-4 #$(this-package-input "guile-json"))
+					    (guile-gcrypt #$(this-package-input "guile-gcrypt"))
+					    (guile-lib #$(this-package-input "guile-lib"))
+					    (out #$output)
+					    (bin (string-append out "/bin"))
+					    (effective (read
+							(open-pipe* OPEN_READ
+								    build-guile "-c"
+								    "(write (effective-version))")))
+					    (path (list (string-append guile "/bin")))
+					    (guile-sheepdog (string-append
+							     out
+							     "/share/guile/site/"
+							     effective
+							     "/gn-monitor.scm"))
+					    (scm-dir (string-append "/share/guile/site/" effective))
+					    (guile-inputs (list guile-fibers
+								guile-hashing
+								guile-uuid
+								guile-gnutls
+								guile-gcrypt
+								guile-redis
+								guile-json-4))
+					    (scm-path
+					     (cons*
+					      scm-dir
+					      (map (lambda (x) (string-append x scm-dir))
+						   (cons* out guile-inputs))))
+					    (go-dir (string-append "/lib/guile/" effective
+								   "/site-ccache/"))
+					    (go-path
+					     (map (lambda (x) (string-append x go-dir))
+						  (cons* out guile-inputs))))
+				       (mkdir-p "bin")
+				       (copy-file "sheepdog.sh" "bin/guile-sheepdog")
+				       (substitute* "bin/guile-sheepdog"
+						    (("@SHELL@") bash)
+						    (("guile") guile)
+						    (("gn-monitor.scm") guile-sheepdog))
+				       (chmod "bin/guile-sheepdog" #o755)
+				       (install-file "bin/guile-sheepdog" bin)
+				       (wrap-script
+					(string-append out "/bin/guile-sheepdog")
+					`("PATH" ":" prefix ,path)
+					`("GUILE_AUTO_COMPILE" ":" = ("0"))
+					`("GUILE_LOAD_PATH" ":" prefix ,scm-path)
+					`("GUILE_LOAD_COMPILED_PATH" ":" prefix ,go-path))))))))
+     (home-page "https://github.com/BonfaceKilz/guile-sheepdog.git")
+     (synopsis "Genenetwork monitoring tool")
+     (description "Genenetwork monitoring tool")
+     (license license:gpl3))))
diff --git a/gn/packages/java.scm b/gn/packages/java.scm
index fe63083..2a3b07b 100644
--- a/gn/packages/java.scm
+++ b/gn/packages/java.scm
@@ -30,7 +30,6 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bioinformatics)
-  #:use-module (gnu packages certs)
   #:use-module ((gnu packages nss) #:select (nss-certs))
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
diff --git a/gn/packages/machine-learning.scm b/gn/packages/machine-learning.scm
index 541b3b6..842a642 100644
--- a/gn/packages/machine-learning.scm
+++ b/gn/packages/machine-learning.scm
@@ -5,6 +5,7 @@
   #: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)
diff --git a/gn/packages/python.scm b/gn/packages/python.scm
index 54d45a4..e429058 100644
--- a/gn/packages/python.scm
+++ b/gn/packages/python.scm
@@ -2024,3 +2024,32 @@ a general image processing tool.")
     (license (license:x11-style
               "http://www.pythonware.com/products/pil/license.htm"
               "The PIL Software License"))))
+
+(define-public python-misaka
+  (package
+    (name "python-misaka")
+    (version "2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "misaka" version))
+       (sha256
+        (base32
+         "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
+    (build-system python-build-system)
+    (arguments
+     `(;; Line 37 of setup.py calls self.run_command('develop')
+       ;; in the 'check' phase. This command seems to be trying
+       ;; to write to
+       ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
+       ;; for which it does not have the permission to write.
+       #:tests? #f))
+    (propagated-inputs
+     (list python-cffi))
+    (home-page "https://github.com/FSX/misaka")
+    (synopsis "Python binding for Hoedown")
+    (description
+     "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
+     library written in C.  It features a fast HTML renderer and functionality to make custom
+     renderers (e.g. man pages or LaTeX).")
+    (license license:expat)))
diff --git a/gn/packages/yaj.scm b/gn/packages/yaj.scm
index bdd417d..aa5a0eb 100644
--- a/gn/packages/yaj.scm
+++ b/gn/packages/yaj.scm
@@ -5,6 +5,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
+  #:use-module (gn packages python)
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
diff --git a/gn/services/monitoring.scm b/gn/services/monitoring.scm
new file mode 100644
index 0000000..9475d31
--- /dev/null
+++ b/gn/services/monitoring.scm
@@ -0,0 +1,49 @@
+(define-module (gn services monitoring)
+  #:use-module (gnu)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services databases)
+  #:use-module ((gn packages guile) #:select (guile-sheepdog))
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:use-module (ice-9 match)
+  #:export (guile-sheepdog-configuration
+	    guile-sheepdog-configuration?
+	    guile-sheepdog-configuration-settings-file
+	    guile-sheepdog-configuration-package
+	    guile-sheepdog-service-type))
+
+(define-record-type* <guile-sheepdog-configuration>
+  guile-sheepdog-configuration
+  make-guile-sheepdog-configuration
+  guile-sheepdog-configuration?
+  (settings-file guile-sheepdog-configuration-settings-file
+		 (default "/etc/conn.scm"))
+  (package guile-sheepdog-configuration-package (default guile-sheepdog)))
+
+(define (guile-sheepdog-gexp config)
+  (match-record config <guile-sheepdog-configuration> (settings-file package)
+    (program-file
+     "guile-sheepdog"
+     (with-imported-modules '((guix build utils))
+       #~(begin
+	   (use-modules (guix build utils))
+	   (invoke #$(file-append package "/bin/guile-sheepdog") #$settings-file))))))
+
+(define (guile-sheepdog-shepherd-service config)
+  (shepherd-service
+      (documentation "Run Sheepdog")
+      (provision '(guile-sheepdog))
+      (requirement '(networking redis))
+      (start #~(make-forkexec-constructor
+		(list #$(guile-sheepdog-gexp config))
+		#:log-file "/var/log/sheepdog.log"))
+      (stop #~(make-kill-destructor))))
+
+(define guile-sheepdog-service-type
+  (service-type
+   (name 'guile-sheepdog)
+   (description "Run sheepdog monitor")
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             (compose list guile-sheepdog-shepherd-service))))
+   (default-value (guile-sheepdog-configuration))))