diff options
author | Franz Geffke <franz@pantherx.org> | 2023-06-25 16:07:34 +0100 |
---|---|---|
committer | Franz Geffke <franz@pantherx.org> | 2023-06-25 16:07:34 +0100 |
commit | 54b4056ac571611892c743b65f4c47dc298c49da (patch) | |
tree | 36e4a84137d2b9bc9a241cf82563da6114bf6189 /px/services/server.scm |
initial commit
Diffstat (limited to 'px/services/server.scm')
-rw-r--r-- | px/services/server.scm | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/px/services/server.scm b/px/services/server.scm new file mode 100644 index 0000000..acb721b --- /dev/null +++ b/px/services/server.scm @@ -0,0 +1,76 @@ +(define-module (px services server) + #:use-module (gnu packages bash) + #:use-module (gnu packages node) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (ice-9 match) + #:export (px-server-launcher-configuration + px-server-launcher-service-type)) + + +;;; +;;; PantherX Server Launcher Service +;;; + +(define-record-type* <px-server-launcher-configuration> + px-server-launcher-configuration make-px-server-launcher-configuration + px-server-launcher-configuration? + (user px-server-launcher-configuration-user + (default "panther")) + (group px-server-launcher-configuration-group + (default "users")) + (executable px-server-launcher-configuration-executable) + (args px-server-launcher-configuration-args + (default '())) + (cwd px-server-launcher-configuration-cwd + (default #f))) + + +(define (px-server-launcher->script config) + (match config + (($ <px-server-launcher-configuration> user group executable args cwd) + (plain-file "px-server-launcher" + (string-append "#!/bin/sh\n\n" + "export PATH=$HOME/.local/bin:$PATH\n" ;; add user installed binaries to PATH + (if cwd (string-append "cd " cwd "\n") "") + "exec " executable " " (string-join args " ") "\n"))))) + + +(define (px-server-launcher-shepherd-service config) + (match config + (($ <px-server-launcher-configuration> user group executable args cwd) + (let* ((home-dir (if (eq? user "root") + "/root" + (string-append "/home/" user))) + (script (px-server-launcher->script config))) + (list (shepherd-service + (provision '(px-server-launcher)) + (documentation "PantherX Server Application Launcher Service") + (requirement '(networking user-processes)) + (one-shot? #t) + (start #~(make-forkexec-constructor + (list (string-append #$bash "/bin/bash") + #$script) + #:user #$user + #:group #$group + #:environment-variables + (cons* (string-append "HOME=" #$home-dir) + (string-append "PATH=/run/current-system/profile/bin") + (string-append "XDG_DATA_HOME=" #$home-dir "/.local/share") + (string-append "XDG_CONFIG_HOME=" #$home-dir "/.config") + "SSL_CERT_DIR=/run/current-system/profile/etc/ssl/certs" + "SSL_CERT_FILE=/run/current-system/profile/etc/ssl/certs/ca-certificates.crt" + (default-environment-variables)) + #:log-file "/var/log/px-server-launcher.log")) + (stop #~(make-kill-destructor)))))))) + + +(define px-server-launcher-service-type + (service-type + (name 'px-server-launcher) + (description "PantherX Server Application Launcher Service") + (extensions (list + (service-extension shepherd-root-service-type + px-server-launcher-shepherd-service))))) |