diff options
| -rw-r--r-- | .guix-channel | 30 | ||||
| -rw-r--r-- | gn/packages/bioinformatics.scm | 77 | ||||
| -rw-r--r-- | gn/packages/check.scm | 24 | ||||
| -rw-r--r-- | gn/packages/crates-io.scm | 4 | ||||
| -rw-r--r-- | gn/packages/file-systems.scm | 31 | ||||
| -rw-r--r-- | gn/packages/genenetwork.scm | 28 | ||||
| -rw-r--r-- | gn/packages/guile.scm | 99 | ||||
| -rw-r--r-- | gn/packages/java.scm | 1 | ||||
| -rw-r--r-- | gn/packages/machine-learning.scm | 1 | ||||
| -rw-r--r-- | gn/packages/python.scm | 29 | ||||
| -rw-r--r-- | gn/packages/yaj.scm | 1 | ||||
| -rw-r--r-- | gn/services/monitoring.scm | 49 |
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)))) |
