janneke pushed a commit to branch wip-hurd-vm in repository guix. commit 2cb106f4f2b7bd71aaa1b45ae3b14c62a6bd053e Author: Jan (janneke) Nieuwenhuizen <jann...@gnu.org> AuthorDate: Sun Apr 12 22:17:03 2020 +0200
services: Add `hurd-console-service-type'. * gnu/services/hurd.scm (<hurd-console-configuration>: New record. (hurd-console-shepherd-service): New function. (hurd-console-service-type): New variable. * doc/guix.texi (Hurd Services): Document it. --- doc/guix.texi | 16 ++++++++++++++++ gnu/services/hurd.scm | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 531c020..45bf0a8 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -26000,6 +26000,22 @@ parameters, can be done as follow: @node Hurd Services @subsection Hurd Services +@defvr {Scheme Variable} hurd-console-service-type +This service starts the fancy @code{VGA} console client on the Hurd. + +The service's value is a @code{hurd-console-configuration} record. +@end defvr + +@deftp {Data Type} hurd-console-configuration +This is the data type representing the configuration for the +hurd-console-service. + +@table @asis +@item @code{hurd} (default: @var{hurd}) +The Hurd package to use. +@end table +@end deftp + @deffn {Scheme Procedure} hurd-etc-service @var{os} This service implements a minimal @code{etc-service}, adding some specifics for the Hurd. diff --git a/gnu/services/hurd.scm b/gnu/services/hurd.scm index 6e57b22..27c674c 100644 --- a/gnu/services/hurd.scm +++ b/gnu/services/hurd.scm @@ -18,11 +18,15 @@ (define-module (gnu services hurd) #:use-module (gnu packages admin) + #:use-module (gnu packages hurd) #:use-module (gnu services) + #:use-module (gnu services shepherd) #:use-module (gnu system) #:use-module (guix gexp) #:use-module (guix records) - #:export (hurd-etc-service)) + #:export (hurd-console-configuration + hurd-console-service-type + hurd-etc-service)) ;;; Commentary: ;;; @@ -58,4 +62,41 @@ fi\n")) ("login" ,(file-append hurd "/etc/login")) ("motd" ,(file-append hurd "/etc/motd")))))) +;;; +;;; The Hurd VGA console service. +;;; + +(define-record-type* <hurd-console-configuration> + hurd-console-configuration make-hurd-console-configuration + hurd-console-configuration? + (hurd hurd-console-configuration-hurd ;package + (default hurd))) + +(define (hurd-console-shepherd-service config) + "Return a <shepherd-service> for a Hurd VGA console with CONFIG." + + (define console-command + #~(list + (string-append #$(hurd-console-configuration-hurd config) "/bin/console") + "-c" "/dev/vcs" + "-d" "vga" + "-d" "pc_kbd" + "-d" "generic_speaker")) + + (list (shepherd-service + (documentation "Run the Hurd’s VGA console client.") + (provision '(console)) + (requirement '(user-processes)) + (start #~(make-forkexec-constructor #$console-command)) + (stop #~(make-kill-destructor))))) + +(define hurd-console-service-type + (service-type + (name 'console) + (description "Run the Hurd console client.") + (extensions + (list (service-extension shepherd-root-service-type + hurd-console-shepherd-service))) + (default-value (hurd-console-configuration)))) + ;;; hurd.scm ends here