summary refs log tree commit diff
path: root/gnu/services/science.scm
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2020-06-21 16:20:16 +0300
committerEfraim Flashner <efraim@flashner.co.il>2020-06-28 14:03:03 +0300
commit8f19e63f760fe02f9969225da2f3f3c36801218f (patch)
tree78f934f83d0af23c072ce2da2d17f2c02f9a4d84 /gnu/services/science.scm
parent0dfc4612724f26c67ca0796b3e9ae5a4fca1c2a1 (diff)
downloadguix-8f19e63f760fe02f9969225da2f3f3c36801218f.tar.gz
services: Add rshiny service.
* gnu/services/science.scm: New file.
(<rshiny-configuration>): New record.
(rshiny-shepherd-service-type): New variable.
* doc/guix.texi (Miscellaneous Services): Document it.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
Diffstat (limited to 'gnu/services/science.scm')
-rw-r--r--gnu/services/science.scm57
1 files changed, 57 insertions, 0 deletions
diff --git a/gnu/services/science.scm b/gnu/services/science.scm
new file mode 100644
index 0000000000..94ff0f36f2
--- /dev/null
+++ b/gnu/services/science.scm
@@ -0,0 +1,57 @@
+(define-module (gnu services science)
+  #:export (<rshiny-configuration>
+            rshiny-configuration
+            rshiny-configuration?
+            rshiny-configuration-package
+            rshiny-configuration-binary
+            rshiny-shepherd-service
+            rshiny-service-type))
+
+(use-modules (gnu)
+             (guix records)
+             (ice-9 match))
+(use-service-modules shepherd)
+(use-package-modules cran)
+
+(define-record-type* <rshiny-configuration>
+  rshiny-configuration
+  make-rshiny-configuration
+  rshiny-configuration?
+  (package          rshiny-configuration-package    ; package
+                    (default r-shiny))
+  (binary           rshiny-configuration-binary     ; string
+                    (default "rshiny")))
+
+(define rshiny-shepherd-service
+  (match-lambda
+    (($ <rshiny-configuration> package binary)
+     (list
+       (shepherd-service
+         (documentation (string-append "R-Shiny service for " binary))
+         (provision (list (symbol-append 'rshiny- (string->symbol
+                                                    (string-take binary 9)))))
+         (requirement '(networking))
+         (start
+           #~(exec-command
+               (list
+                 #$(string-append "/run/current-system/profile/bin/" binary))
+               ;#:log-file #$(string-append "/var/log/" binary ".log") ; kills shepherd
+               #:environment-variables
+               (list "R_LIBS_USER=/run/current-system/profile/site-library/")))
+         (stop #~(make-kill-destructor)))))))
+
+(define rshiny-service-type
+  (service-type
+    (name 'rshiny)
+    (extensions
+      (list
+        (service-extension shepherd-root-service-type
+                           rshiny-shepherd-service)
+        (service-extension profile-service-type
+                           ;; We want the package installed so that it
+                           ;; pulls in the propagated inputs as well.
+                           (lambda (config)
+                             (list
+                               (rshiny-configuration-package config))))))
+    (description
+     "Run an R-Shiny webapp as a Guix Service.")))