(define-module (gnu services spice) #:use-module (gnu packages spice) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (guix gexp) #:use-module (guix records) #:export (spice-vdagent-configuration spice-vdagent-configuration? spice-vdagent-service-type spice-vdagent-service)) (define-record-type* spice-vdagent-configuration make-spice-vdagent-configuration spice-vdagent-configuration? (spice-vdagent spice-vdagent-configuration-spice-vdagent (default spice-vdagent))) (define (spice-vdagent-activation config) "Return the activation gexp for CONFIG." #~(mkdir-p "/var/run/spice-vdagentd")) (define (spice-vdagent-shepherd-service config) "Return a for spice-vdagentd with CONFIG." (define spice-vdagent (spice-vdagent-configuration-spice-vdagent config)) (define spice-vdagentd-command (list #~(string-append #$spice-vdagent "/sbin/spice-vdagentd") "-x")) (list (shepherd-service (documentation "Spice vdagentd service") (requirement '(udev)) (provision '(spice-vdagentd)) (start #~(make-forkexec-constructor #$@spice-vdagentd-command)) (stop #~(make-kill-destructor))))) (define spice-vdagent-service-type (service-type (name 'spice-vdagent) (extensions (list (service-extension shepherd-root-service-type spice-vdagent-shepherd-service) (service-extension activation-service-type spice-vdagent-activation) (service-extension profile-service-type (compose list spice-vdagent-configuration-spice-vdagent)))))) (define* (spice-vdagent-service #:optional (config (spice-vdagent-configuration))) "Start the @command{vdagentd} and @command{vdagent} deamons from @var{spice-vdagent} to enable guest window resizing and clipboard sharing." (service spice-vdagent-service-type config))