aboutsummaryrefslogtreecommitdiff
path: root/gnu/system
diff options
context:
space:
mode:
authorLeo Famulari <leo@famulari.name>2017-02-02 10:52:24 -0500
committerLeo Famulari <leo@famulari.name>2017-02-02 10:52:24 -0500
commite8c83d04e176f205b30b3d470f22ee5e1c686331 (patch)
tree30a95626ea31414a6319b93f50eea1e69b87a619 /gnu/system
parentd9b4cbc2a168ca3d248c5abf1f1d14c1808e6a20 (diff)
parentde643f0c15677665acce73db9c28c5488e623633 (diff)
downloadpatches-e8c83d04e176f205b30b3d470f22ee5e1c686331.tar
patches-e8c83d04e176f205b30b3d470f22ee5e1c686331.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu/system')
-rw-r--r--gnu/system/grub.scm4
-rw-r--r--gnu/system/shadow.scm38
2 files changed, 38 insertions, 4 deletions
diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm
index 067b291a5c..7df7d4615a 100644
--- a/gnu/system/grub.scm
+++ b/gnu/system/grub.scm
@@ -94,8 +94,8 @@ denoting a file name."
(define %background-image
(grub-image
(aspect-ratio 4/3)
- (file #~(string-append #$%artwork-repository
- "/grub/GuixSD-fully-black-4-3.svg"))))
+ (file (file-append %artwork-repository
+ "/grub/GuixSD-fully-black-4-3.svg"))))
(define %default-theme
;; Default theme contributed by Felipe López.
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index cfdcf5e136..1acfcc4866 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -21,9 +21,11 @@
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (guix store)
+ #:use-module (guix modules)
#:use-module (guix sets)
#:use-module (guix ui)
#:use-module (gnu services)
+ #:use-module (gnu services shepherd)
#:use-module ((gnu system file-systems)
#:select (%tty-gid))
#:use-module ((gnu packages admin)
@@ -43,6 +45,7 @@
user-account-supplementary-groups
user-account-comment
user-account-home-directory
+ user-account-create-home-directory?
user-account-shell
user-account-system?
@@ -81,7 +84,7 @@
(create-home-directory? user-account-create-home-directory? ;Boolean
(default #t))
(shell user-account-shell ; gexp
- (default #~(string-append #$bash "/bin/bash")))
+ (default (file-append bash "/bin/bash")))
(system? user-account-system? ; Boolean
(default #f)))
@@ -128,7 +131,7 @@
(name "nobody")
(uid 65534)
(group "nogroup")
- (shell #~(string-append #$shadow "/sbin/nologin"))
+ (shell (file-append shadow "/sbin/nologin"))
(home-directory "/nonexistent")
(create-home-directory? #f)
(system? #t))))
@@ -288,6 +291,35 @@ group."
(activate-users+groups (list #$@user-specs)
(list #$@group-specs))))
+(define (account-shepherd-service accounts+groups)
+ "Return a Shepherd service that creates the home directories for the user
+accounts among ACCOUNTS+GROUPS."
+ (define accounts
+ (filter user-account? accounts+groups))
+
+ ;; Create home directories only once 'file-systems' is up. This makes sure
+ ;; they are created in the right place if /home lives on a separate
+ ;; partition.
+ ;;
+ ;; XXX: We arrange for this service to stop right after it's done its job so
+ ;; that 'guix system reconfigure' knows that it can reload it fearlessly
+ ;; (and thus create new home directories). The cost of this hack is that
+ ;; there's a small window during which first-time logins could happen before
+ ;; the home directory has been created.
+ (list (shepherd-service
+ (requirement '(file-systems))
+ (provision '(user-homes))
+ (modules '((gnu build activation)))
+ (start (with-imported-modules (source-module-closure
+ '((gnu build activation)))
+ #~(lambda ()
+ (activate-user-home
+ (list #$@(map user-account->gexp accounts)))
+ #f))) ;stop
+ (stop #~(const #f))
+ (respawn? #f)
+ (documentation "Create user home directories."))))
+
(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."
@@ -327,6 +359,8 @@ the /etc/skel directory for those."
(extensions
(list (service-extension activation-service-type
account-activation)
+ (service-extension shepherd-root-service-type
+ account-shepherd-service)
(service-extension etc-service-type
etc-files)))))