* gnu/services/base.scm (<kmscon-configuration>, kmscon-shepherd-service, kmscon-service-type, kmscon-service): New variables. --- gnu/services/base.scm | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+)
diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 99a6759..efd72c7 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -39,6 +39,7 @@ #:use-module (gnu packages package-management) #:use-module (gnu packages ssh) #:use-module (gnu packages lsof) + #:use-module (gnu packages terminals) #:use-module ((gnu build file-systems) #:select (mount-flags->bit-mask)) #:use-module (guix gexp) @@ -116,6 +117,12 @@ rngd-configuration? rngd-service-type rngd-service + + kmscon-configuration + kmscon-configuration? + kmscon-service-type + kmscon-service + pam-limits-service-type pam-limits-service @@ -1449,6 +1456,52 @@ This service is not part of @var{%base-services}." (service gpm-service-type (gpm-configuration (gpm gpm) (options options)))) +(define-record-type* <kmscon-configuration> + kmscon-configuration make-kmscon-configuration + kmscon-configuration? + (kmscon kmscon-configuration-kmscon + (default kmscon)) + (vt kmscon-configuration-vt) + (login-program kmscon-configuration-login-program + (default #~(string-append #$shadow "/bin/login"))) + (login-arguments kmscon-configuration-login-arguments + (default '("-p"))) + (hwaccel? kmscon-configuration-hwaccel? + (default #f))) ; #t causes failure + +(define (kmscon-shepherd-service config) + "Return a <shepherd-service> for kmscon with CONFIG." + (let ((kmscon (kmscon-configuration-kmscon config)) + (vt (kmscon-configuration-vt config)) + (login-program (kmscon-configuration-login-program config)) + (login-arguments (kmscon-configuration-login-arguments config)) + (hwaccel? (kmscon-configuration-hwaccel? config))) + + (define kmscon-command + #~(list + (string-append #$kmscon "/bin/kmscon") "--login" + "--vt" #$vt + #$@(if hwaccel? '("--hwaccel") '()) + "--" #$login-program #$@login-arguments)) + + (list (shepherd-service + (documentation "kmscon virtual terminal") + (requirement '(user-processes udev)) + (provision (list (symbol-append 'term- (string->symbol vt)))) + (start #~(make-forkexec-constructor #$kmscon-command)) + (stop #~(make-kill-destructor)))))) + +(define kmscon-service-type + (service-type (name 'kmscon) + (extensions + (list (service-extension shepherd-root-service-type + kmscon-shepherd-service))))) + +(define* (kmscon-service config) + "Run the @command{kmscon} daemon from @var{kmscon} to start a virtual +terminal." + (service kmscon-service-type config)) + (define %base-services ;; Convenience variable holding the basic services. -- 2.9.0