diff options
-rw-r--r-- | gn/services/bxd-power-container.scm | 24 | ||||
-rw-r--r-- | gn/services/rshiny.scm | 62 |
2 files changed, 86 insertions, 0 deletions
diff --git a/gn/services/bxd-power-container.scm b/gn/services/bxd-power-container.scm new file mode 100644 index 0000000..5dbef6c --- /dev/null +++ b/gn/services/bxd-power-container.scm @@ -0,0 +1,24 @@ +(define-module (gn services bxd-power-container)) + +(use-modules (gnu) + (gn packages bioinformatics) + (gn services rshiny)) + +(operating-system + (host-name "bxd-power") + (timezone "Etc/UTC") + (locale "en_US.utf8") + + (bootloader (bootloader-configuration + (bootloader grub-bootloader) + (target "does-not-matter"))) + (file-systems %base-file-systems) + ;; No firmware for VMs. + (firmware '()) + ;; We only need a few packages inside the container. + (packages (list coreutils)) + + (services (list (service rshiny-service-type + (rshiny-configuration + (package bxd-power-calculator-app) + (binary "bxd-power-calculator-app")))))) diff --git a/gn/services/rshiny.scm b/gn/services/rshiny.scm new file mode 100644 index 0000000..0a947cb --- /dev/null +++ b/gn/services/rshiny.scm @@ -0,0 +1,62 @@ +(define-module (gn services rshiny) + #: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)) + ;; This one works: + (start + #~(lambda _ + (setenv "R_LIBS_USER" "/run/current-system/profile/site-library/") + (invoke #$(string-append "/run/current-system/profile/bin/" binary)))) + ;; Let's try in a container: + ;(start #~(make-forkexec-constructor/container + ; (list #$(file-append package "/bin/" binary)) + ; #: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 +; (string-append "Run " (rshiny-configuration-package config) ", an R-Shiny +;webapp, as a Guix Service.") + "Run an R-Shiny webapp as a Guix Service."))) |