guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/04: system: Populate /etc/shells from ACCOUNT-SERVICE-TYPE.


From: Ludovic Courtès
Subject: 02/04: system: Populate /etc/shells from ACCOUNT-SERVICE-TYPE.
Date: Tue, 10 Nov 2015 23:39:08 +0000

civodul pushed a commit to branch master
in repository guix.

commit 21059b26b070d6064202272982392a299f09b6e4
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 10 21:23:03 2015 +0100

    system: Populate /etc/shells from ACCOUNT-SERVICE-TYPE.
    
    * gnu/system.scm (user-shells): Remove.
      (operating-system-etc-service): Remove "shells" entry.
      (shells-file): Move to...
    * gnu/system/shadow.scm (shells-file): ... here.  New procedure.
      (etc-skel): Rename to...
      (etc-files): ... this.  Add "shells" entry.
      (account-service-type): Adjust accordingly.
---
 gnu/system.scm        |   28 ----------------------------
 gnu/system/shadow.scm |   30 ++++++++++++++++++++++++++----
 2 files changed, 26 insertions(+), 32 deletions(-)

diff --git a/gnu/system.scm b/gnu/system.scm
index be6b1ac..2755d85 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -403,38 +403,11 @@ settings for 'guix.el' to work out-of-the-box."
                      (chdir #$output)
                      (symlink #$(emacs-site-file) "site-start.el"))))
 
-(define (user-shells os)
-  "Return the list of all the shells used by the accounts of OS.  These may be
-gexps or strings."
-  (map user-account-shell (operating-system-accounts os)))
-
-(define (shells-file shells)
-  "Return a file-like object that builds a shell list for use as /etc/shells
-based on SHELLS.  /etc/shells is used by xterm, polkit, and other programs."
-  (computed-file "shells"
-                 #~(begin
-                     (use-modules (srfi srfi-1))
-
-                     (define shells
-                       (delete-duplicates (list address@hidden)))
-
-                     (call-with-output-file #$output
-                       (lambda (port)
-                         (display "\
-/bin/sh
-/run/current-system/profile/bin/sh
-/run/current-system/profile/bin/bash\n" port)
-                         (for-each (lambda (shell)
-                                     (display shell port)
-                                     (newline port))
-                                   shells))))))
-
 (define* (operating-system-etc-service os)
   "Return a <service> that builds containing the static part of the /etc
 directory."
   (let ((login.defs (plain-file "login.defs" "# Empty for now.\n"))
 
-        (shells     (shells-file (user-shells os)))
         (emacs      (emacs-site-directory))
         (issue      (plain-file "issue" (operating-system-issue os)))
         (nsswitch   (plain-file "nsswitch.conf"
@@ -524,7 +497,6 @@ fi\n")))
        ("login.defs" ,#~#$login.defs)
        ("issue" ,#~#$issue)
        ("nsswitch.conf" ,#~#$nsswitch)
-       ("shells" ,#~#$shells)
        ("profile" ,#~#$profile)
        ("bashrc" ,#~#$bashrc)
        ("hosts" ,#~#$(or (operating-system-hosts-file os)
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index 3f49c1f..7f3a1df 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -280,11 +280,33 @@ group."
       (activate-users+groups (list address@hidden)
                              (list address@hidden))))
 
-(define (etc-skel arguments)
+(define (shells-file shells)
+  "Return a file-like object that builds a shell list for use as /etc/shells
+based on SHELLS.  /etc/shells is used by xterm, polkit, and other programs."
+  (computed-file "shells"
+                 #~(begin
+                     (use-modules (srfi srfi-1))
+
+                     (define shells
+                       (delete-duplicates (list address@hidden)))
+
+                     (call-with-output-file #$output
+                       (lambda (port)
+                         (display "\
+/bin/sh
+/run/current-system/profile/bin/sh
+/run/current-system/profile/bin/bash\n" port)
+                         (for-each (lambda (shell)
+                                     (display shell port)
+                                     (newline port))
+                                   shells))))))
+(define (etc-files arguments)
   "Filter out among ARGUMENTS things corresponding to skeletons, and return
 the /etc/skel directory for those."
-  (let ((skels (filter pair? arguments)))
-    `(("skel" ,(skeleton-directory skels)))))
+  (let ((skels (filter pair? arguments))
+        (users (filter user-account? arguments)))
+    `(("skel" ,(skeleton-directory skels))
+      ("shells" ,(shells-file (map user-account-shell users))))))
 
 (define account-service-type
   (service-type (name 'account)
@@ -298,7 +320,7 @@ the /etc/skel directory for those."
                  (list (service-extension activation-service-type
                                           account-activation)
                        (service-extension etc-service-type
-                                          etc-skel)))))
+                                          etc-files)))))
 
 (define (account-service accounts+groups skeletons)
   "Return a <service> that takes care of user accounts and user groups, with



reply via email to

[Prev in Thread] Current Thread [Next in Thread]