diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-11-10 21:23:03 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-11-11 00:37:50 +0100 |
commit | 21059b26b070d6064202272982392a299f09b6e4 (patch) | |
tree | bfce015366cfa65f0b248c6a638792ddfb0a8982 /gnu/system | |
parent | ba583bd2ce887cdd8b99ea55c15b57c5209e4b58 (diff) |
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.
Diffstat (limited to 'gnu/system')
-rw-r--r-- | gnu/system/shadow.scm | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 3f49c1fc9f..7f3a1dfac2 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -280,11 +280,33 @@ group." (activate-users+groups (list #$@user-specs) (list #$@group-specs)))) -(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 #$@shells))) + + (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 |