services: Add 'session-environment-service'.

* gnu/services/base.scm (session-environment-service): New procedure.
(session-environment-service-type): New variable.
(environment-variables->environment-file): New procedure.
This commit is contained in:
宋文武 2015-12-02 19:59:29 +08:00
parent 2aacd9179c
commit e10964efd2

@ -2,6 +2,7 @@
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -48,6 +49,8 @@
device-mapping-service
swap-service
user-processes-service
session-environment-service
session-environment-service-type
host-name-service
console-keymap-service
console-font-service
@ -366,6 +369,39 @@ stopped before 'kill' is called."
(service user-processes-service-type
(list file-systems grace-delay)))
;;;
;;; System-wide environment variables.
;;;
(define (environment-variables->environment-file vars)
"Return a file for pam_env(8) that contains environment variables VARS."
(apply mixed-text-file "environment"
(append-map (match-lambda
((key . value)
(list key "=" value "\n")))
vars)))
(define session-environment-service-type
(service-type
(name 'session-environment)
(extensions
(list (service-extension
etc-service-type
(lambda (vars)
(list `("environment"
,(environment-variables->environment-file vars)))))))
(compose concatenate)
(extend append)))
(define (session-environment-service vars)
"Return a service that builds the @file{/etc/environment}, which can be read
by PAM-aware applications to set environment variables for sessions.
VARS should be an association list in which both the keys and the values are
strings or string-valued gexps."
(service session-environment-service-type vars))
;;;
;;; Console & co.