Message ID | 87wms5e6ym.fsf@yoga.mail-host-address-is-not-set |
---|---|
State | New |
Headers | show |
Series | [bug#68589] Add guix-home-service-type | expand |
Hi Lars, Lars Rustand <rustand.lars@gmail.com> skribis: > Hoping to upstream this nice service from RDE. This service allows to > embed a home environment in a operating-system declaration. > > Original source: https://git.sr.ht/~abcdw/rde/tree/master/item/src/gnu/services/home.scm > > Change-Id: I42976cae9dd1580dc07dc866cd851294c7921725 This would be much welcome! > +++ b/gnu/services/home.scm > @@ -0,0 +1,47 @@ > +(define-module (gnu services home) Could you add a header similar to that found in other files? Since this is copied from rde, make sure to preserve their copyright notices. > +(define (guix-home-shepherd-service config) > + (map > + (lambda (x) > + (let ((user (car x)) > + (he (cdr x))) In Guix we’d use ‘match’ instead of ‘car’ + ‘cdr’: https://guix.gnu.org/manual/devel/en/html_node/Data-Types-and-Pattern-Matching.html But perhaps we could just as well define a <guix-home-configuration> record or similar? > +(define (guix-home-gc-roots config) > + (map cdr config)) Unused. > +(define guix-home-service-type > + (service-type > + (name 'guix-home) > + (description "Setups home-environments specified in the value.") “Sets up Guix Home for the specified user accounts.” > + (extensions (list (service-extension > + shepherd-root-service-type > + guix-home-shepherd-service))) > + ;; (compose append) > + ;; (extend append) Why comment it out? Also make sure to register the file in ‘gnu/local.mk’. Last, we usually require a test for system services; you can find them in gnu/tests/*.scm. Could you try and write one? It would check for instance that the user’s shepherd is indeed started. Could you send an updated patch? Thanks, Ludo’.
Hi all, I accidentally submitted a patch very similar to this one at https://issues.guix.gnu.org/69781. FYI in case anyone winds up iterating on this version of the patch. Not sure how to merge debbugs issues. I did implement most of the feedback mentioned in this issue and resolved a couple of other problems.
Hi, Richard Sent <richard@freakingpenguin.com> skribis: > I accidentally submitted a patch very similar to this one at > https://issues.guix.gnu.org/69781. FYI in case anyone winds up iterating > on this version of the patch. > > Not sure how to merge debbugs issues. I did implement most of the > feedback mentioned in this issue and resolved a couple of other > problems. Oops indeed. Lars, I’m closing this issue, but please let us know if you have suggestions! Ludo’.
diff --git a/gnu/services/home.scm b/gnu/services/home.scm new file mode 100644 index 0000000000..868eafbec8 --- /dev/null +++ b/gnu/services/home.scm @@ -0,0 +1,47 @@ +(define-module (gnu services home) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix records) + + #:export (guix-home-service-type)) + + +(define (guix-home-shepherd-service config) + (map + (lambda (x) + (let ((user (car x)) + (he (cdr x))) + (shepherd-service + (documentation "Activate Guix Home.") + ;; Originally requirement was user-homes, but for recently it stopped + ;; working, seems like it was executed too early and didn't work, so + ;; we switched to term-tty1. + (requirement '(term-tty1)) + (provision (list (symbol-append 'guix-home- (string->symbol user)))) + (one-shot? #t) + (auto-start? #t) + (start #~(make-forkexec-constructor + '(#$(file-append he "/activate")) + #:user #$user + #:environment-variables + (list (string-append "HOME=" (passwd:dir (getpw #$user)))) + #:group (group:name (getgrgid (passwd:gid (getpw #$user)))))) + (stop #~(make-kill-destructor))))) + config)) + +(define (guix-home-gc-roots config) + (map cdr config)) + +(define guix-home-service-type + (service-type + (name 'guix-home) + (description "Setups home-environments specified in the value.") + (extensions (list (service-extension + shepherd-root-service-type + guix-home-shepherd-service))) + ;; (compose append) + ;; (extend append) + (default-value '())))