Alex Kost <alez...@gmail.com> writes: > 宋文武 (2015-12-02 16:38 +0300) wrote: > >> +(define (environment-variables->environment-file vars) >> + "Return a file for pam_env(8) that contains environment variables VARS." >> + (apply mixed-text-file "environment" >> + (fold-right (lambda (pair result) >> + (cons* (car pair) "=" (cdr pair) "\n" result)) >> + '() vars))) > > Hm, car and cdr. Wouldn't it be clearer to do it like this: > > (map (match-lambda > ((name . value) > (string-append name "=" value "\n"))) > vars) Yes, match-lambda is more clear, thanks! (I have to use list instead of string-append so that gexps can work)
Updated:
>From 0ce1986d4cfca3d40bed4aaf93942cf9caaefb60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzs...@gmail.com> Date: Wed, 2 Dec 2015 19:59:29 +0800 Subject: [PATCH] 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. --- gnu/services/base.scm | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index c242c7d..a86e8e0 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <l...@gnu.org> ;;; Copyright © 2015 Alex Kost <alez...@gmail.com> ;;; Copyright © 2015 Mark H Weaver <m...@netris.org> +;;; Copyright © 2015 Sou Bunnbu <iyzs...@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 @@ -368,6 +371,39 @@ stopped before 'kill' is called." ;;; +;;; 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. ;;; -- 2.5.0