* gnu/services/authentication.scm (fprintd-configuration) (nslcd-configuration): Substitute file-like objects for package ones. * gnu/services/cgit.scm (cgit-configuration, opaque-cgit-configuration): Likewise. * gnu/services/cups.scm (package-list?, cups-configuration): Likewise. * gnu/services/dns.scm (verify-knot-configuration) (ddclient-configuration): Likewise. * gnu/services/docker.scm (docker-configuration): Likewise. * gnu/services/file-sharing.scm (transmission-daemon-configuration): Likewise. * gnu/services/getmail.scm (getmail-configuration): Likewise. * gnu/services/mail.scm (dovecot-configuration) (opaque-dovecot-configuration): Likewise. * gnu/services/messaging.scm (prosody-configuration) (opaque-prosody-configuration): Likewise. * gnu/services/monitoring.scm (zabbix-server-configuration) (zabbix-agent-configuration): Likewise. * gnu/services/networking.scm (opendht-configuration): Likewise. * gnu/services/pm.scm (tlp-configuration): Likewise. * gnu/services/telephony.scm (jami-configuration): Likewise. * gnu/services/virtualization.scm (libvirt-configuration) (qemu-guest-agent-configuration): Likewise. * gnu/services/vpn.scm (openvpn-client-configuration): Likewise.
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
;;; GNU Guix --- Functional package management for GNU
 | 
						|
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 | 
						|
;;;
 | 
						|
;;; This file is part of GNU Guix.
 | 
						|
;;;
 | 
						|
;;; GNU Guix is free software; you can redistribute it and/or modify it
 | 
						|
;;; under the terms of the GNU General Public License as published by
 | 
						|
;;; the Free Software Foundation; either version 3 of the License, or (at
 | 
						|
;;; your option) any later version.
 | 
						|
;;;
 | 
						|
;;; GNU Guix is distributed in the hope that it will be useful, but
 | 
						|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
;;; GNU General Public License for more details.
 | 
						|
;;;
 | 
						|
;;; You should have received a copy of the GNU General Public License
 | 
						|
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
(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    ; file-like
 | 
						|
                    (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.")))
 |