~ruther/guix-local

7ccd471c71d650055e99cd02381bc8dcd86d5313 — Jan (janneke) Nieuwenhuizen 6 years ago f9c0458
services: Add `hurd-getty-service-type'.

* gnu/services/hurd.scm (<hurd-gettty-configuration>): New record.
(hurd-ttys-shepherd-service): New procedure.
(hurd-getty-service-type): New variable.
* doc/guix.texi (Hurd Services): Document it.
2 files changed, 74 insertions(+), 1 deletions(-)

M doc/guix.texi
M gnu/services/hurd.scm
M doc/guix.texi => doc/guix.texi +23 -0
@@ 26059,6 26059,29 @@ The Hurd package to use.
@end table
@end deftp

@defvr {Scheme Variable} hurd-getty-service-type
This service starts a tty using the Hurd @code{getty} program.

The service's value is a @code{hurd-getty-configuration} record.
@end defvr

@deftp {Data Type} hurd-getty-configuration
This is the data type representing the configuration for the
hurd-getty-service.

@table @asis
@item @code{hurd} (default: @var{hurd})
The Hurd package to use.

@item @code{tty}
The name of the console this Getty runs on---e.g., @code{"tty1"}.

@item @code{baud-rate} (default: @code{38400})
An integer specifying the baud rate of the tty.

@end table
@end deftp

@node Miscellaneous Services
@subsection Miscellaneous Services


M gnu/services/hurd.scm => gnu/services/hurd.scm +51 -1
@@ 25,7 25,9 @@
  #:use-module (guix gexp)
  #:use-module (guix records)
  #:export (hurd-console-configuration
            hurd-console-service-type))
            hurd-console-service-type
            hurd-getty-configuration
            hurd-getty-service-type))

;;; Commentary:
;;;


@@ 70,4 72,52 @@
                             hurd-console-shepherd-service)))
   (default-value (hurd-console-configuration))))


;;;
;;; The Hurd getty service.
;;;

(define-record-type* <hurd-getty-configuration>
  hurd-getty-configuration make-hurd-getty-configuration
  hurd-getty-configuration?
  (hurd       hurd-getty-configuration-hurd  ;<package>
              (default hurd))
  (tty        hurd-getty-configuration-tty)  ;string
  (baud-rate  hurd-getty-configuration-baud-rate
              (default 38400)))              ;integer

(define (hurd-getty-shepherd-service config)
  "Return a <shepherd-service> for a Hurd getty with CONFIG."

  (let ((hurd      (hurd-getty-configuration-hurd config))
        (tty       (hurd-getty-configuration-tty config))
        (baud-rate (hurd-getty-configuration-baud-rate config)))

    (define getty-command
      #~(list
         (string-append #$hurd "/libexec/getty")
         #$(number->string baud-rate)
         #$tty))

    (list
     (shepherd-service
      (documentation "Run getty on a tty.")
      (provision (list (string->symbol (string-append "term-" tty))))
      (requirement '(user-processes console))
      (start #~(make-forkexec-constructor #$getty-command))
      (stop  #~(make-kill-destructor))))))

(define hurd-getty-service-type
  (service-type
   (name 'getty)
   (extensions (list (service-extension shepherd-root-service-type
                                        hurd-getty-shepherd-service)))
   (description
    "Provide console login using the Hurd @command{getty} program.")))

(define* (hurd-getty-service config)
  "Return a service to run the Hurd getty according to @var{config}, which
specifies the tty to run, among other things."
  (service hurd-getty-service-type config))

;;; hurd.scm ends here