Package: guix-patches;
Reported by: Andrew Tropin <andrew <at> trop.in>
Date: Tue, 31 Aug 2021 09:31:01 UTC
Severity: normal
Tags: patch
Done: Oleg Pykhalov <go.wigust <at> gmail.com>
Bug is archived. No further changes may be made.
Message #34 received at 50296-done <at> debbugs.gnu.org (full text, mbox):
From: Andrew Tropin <andrew <at> trop.in> To: Oleg Pykhalov <go.wigust <at> gmail.com> Cc: 50296-done <at> debbugs.gnu.org Subject: Re: [bug#50296] [PATCH 0/2] Add 'guix home' command. Date: Tue, 31 Aug 2021 15:47:03 +0300
[Message part 1 (text/plain, inline)]
On 2021-08-31 14:46, Andrew Tropin wrote: > On 2021-08-31 14:13, Oleg Pykhalov wrote: > >> Hi Andrew, >> >> Andrew Tropin <andrew <at> trop.in> writes: >> >>> Command and subbcommands allowing to manage home environment with guix. >>> >>> Andrew Tropin (2): >>> scripts: Add 'guix home'. >>> scripts: home: Add import subcommand. >>> >>> Makefile.am | 3 + >>> guix/scripts/home.scm | 512 +++++++++++++++++++++++++++++++++++ >>> guix/scripts/home/import.scm | 241 +++++++++++++++++ >>> 3 files changed, 756 insertions(+) >>> create mode 100644 guix/scripts/home.scm >>> create mode 100644 guix/scripts/home/import.scm >> >> I applied your patches and also fixed a typo in >> gnu/home-services/xdg.scm file, which I noticed during Geiser entering >> (guix scripts home) module about missing ‘home-services-utils’, which >> should be ‘home-services utils’. >> > > In rde we have home-services-utils, during recent refactoring I took > parts of it and split into home-services utils and home-services > configure modules. For some reason I missed that xdg still uses it and > I didn't get rid of this import, I'll update xdg module and send patches > for it, thank you for noticing the issue. > The functions from home-services-utils used by xdg now in home-services utils:
[0002-home-services-configuration-Add-generic-serialize-al.patch (text/x-patch, inline)]
From efd3ea79905c12e2c1c594fa6b54cf62d741f92f Mon Sep 17 00:00:00 2001 From: Andrew Tropin <andrew <at> trop.in> Date: Tue, 31 Aug 2021 15:40:07 +0300 Subject: [PATCH 2/2] home-services: configuration: Add generic-serialize-alist. * gnu/home-services/configuration.scm (generic-serialize-alist) (generic-serialize-alist-entry): New variables. --- gnu/home-services/configuration.scm | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/gnu/home-services/configuration.scm b/gnu/home-services/configuration.scm index 039877b5c1..3698006c37 100644 --- a/gnu/home-services/configuration.scm +++ b/gnu/home-services/configuration.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2021 Andrew Tropin <andrew <at> trop.in> +;;; Copyright © 2021 Xinglu Chen <public <at> yoctocell.xyz> ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,6 +21,8 @@ #:use-module (gnu services configuration) #:use-module (guix gexp) #:use-module (srfi srfi-1) + #:use-module (ice-9 curried-definitions) + #:use-module (ice-9 match) #:export (filter-configuration-fields @@ -31,7 +34,9 @@ string-or-gexp? serialize-string-or-gexp text-config? - serialize-text-config)) + serialize-text-config + generic-serialize-alist-entry + generic-serialize-alist)) (define* (filter-configuration-fields configuration-fields fields #:optional negate?) @@ -79,3 +84,24 @@ the list result in @code{#t} when applying PRED? on them." (and (list? config) (every string-or-gexp? config))) (define (serialize-text-config field-name val) #~(string-append #$@(interpose val "\n" 'suffix))) + +(define ((generic-serialize-alist-entry serialize-field) entry) + "Apply the SERIALIZE-FIELD procedure on the field and value of ENTRY." + (match entry + ((field . val) (serialize-field field val)))) + +(define (generic-serialize-alist combine serialize-field fields) + "Generate a configuration from an association list FIELDS. + +SERIALIZE-FIELD is a procedure that takes two arguments, it will be +applied on the fields and values of FIELDS using the +@code{generic-serialize-alist-entry} procedure. + +COMBINE is a procedure that takes one or more arguments and combines +all the alist entries into one value, @code{string-append} or +@code{append} are usually good candidates for this. + +See the @code{serialize-alist} procedure in `@code{(gnu home-services +version-control}' for an example usage.)}" + (apply combine + (map (generic-serialize-alist-entry serialize-field) fields))) -- 2.33.0
[Message part 3 (text/plain, inline)]
> >> >> Pushed to wip-guix-home. >> >> Also, I tried to use guix home for the first time as documented at site >> [1], and got an error: >> --8<---------------cut here---------------start------------->8--- >> (string-append #f "/" "profile/share/fonts") >> In procedure string-append: Wrong type (expecting string): #f >> --8<---------------cut here---------------end--------------->8--- >> >> [1] https://guix-home.trop.in/Declaring-the-Home-Environment.html >> >> >> The following text in the message is only about the error. >> >> oleg <at> guixsd ~/src/guix-wip-guix-home$ mkdir /tmp/guix >> >> oleg <at> guixsd ~/src/guix-wip-guix-home$ guix pull --url=file:///home/oleg/src/guix-wip-guix-home --branch=wip-guix-home -p /tmp/guix/guix >> >> ~/.local/share/chezmoi/dotfiles/guixsd/home.scm: >> --8<---------------cut here---------------start------------->8--- >> (use-modules (gnu home) >> (gnu home-services) >> ;; (gnu home-services ssh) >> (gnu home-services shells) >> ;; (gnu home-services files) >> (gnu services) >> (gnu packages admin) >> (guix gexp) >> >> (ice-9 rdelim)) >> >> (define %home >> (and=> (getenv "HOME") >> (lambda (home) >> home))) >> >> (define .bash_profile >> (string-append %home "/.local/share/chezmoi/dot_bash_profile")) >> >> (home-environment >> >> ;; (packages (list htop)) >> >> (services >> (list >> >> (service home-bash-service-type >> (home-bash-configuration >> (guix-defaults? #t) >> (bash-profile >> (list >> (with-input-from-file .bash_profile read-string))))) >> >> ;; XXX: missing home-files-service-type >> ;; (simple-service 'test-config >> ;; home-files-service-type >> ;; (list `("config/test.conf" >> ;; ,(plain-file "tmp-file.txt" >> ;; "the content of ~/.config/test.conf")))) >> >> ;; XXX: missing home-ssh-configuration >> ;; (service home-ssh-service-type >> ;; (home-ssh-configuration >> ;; (extra-config >> ;; (list >> ;; (ssh-host "savannah" >> ;; '((compression . #f))))))) >> >> ))) >> --8<---------------cut here---------------end--------------->8--- >> >> My first guix home reconfigure launch: >> --8<---------------cut here---------------start------------->8--- >> oleg <at> guixsd ~/src/guix-wip-guix-home$ /tmp/guix/guix/bin/guix home reconfigure ~/.local/share/chezmoi/dotfiles/guixsd/home.scm >> /gnu/store/xl4igqm0jjy7gfbganz9061ivdgzfpdk-home >> New symlinks to home-environment will be created soon. >> All conflicting files will go to /home/oleg/1630407324-guix-home-legacy-configs-backup. >> >> Skipping /home/oleg/.config (directory already exists)... done >> Creating /home/oleg/.config/fontconfig... done >> Symlinking /home/oleg/.config/fontconfig/fonts.conf -> /gnu/store/phj2z2iiqdhryfy7mqral0b9qz3hlva6-fonts.conf... done >> Backing up /home/oleg/.bashrc... done >> Symlinking /home/oleg/.bashrc -> /gnu/store/513j2xkszmcmv7fiawh59mr0i1fmin55-bashrc... done >> Symlinking /home/oleg/.profile -> /gnu/store/fxbppk3pqzdi3zzy0xl5vg1ir6c5jzq5-shell-profile... done >> Backing up /home/oleg/.bash_profile... done >> Symlinking /home/oleg/.bash_profile -> /gnu/store/2c3yva8vj5ikb0gspmjvzw0r9g9i1cxc-bash_profile... done >> done >> Finished updating symlinks. >> >> Backtrace: >> In guix/ui.scm: >> 2185:7 19 (run-guix . _) >> 2148:10 18 (run-guix-command _ . _) >> In ice-9/boot-9.scm: >> 1752:10 17 (with-exception-handler _ _ #:unwind? _ # _) >> In guix/status.scm: >> 820:3 16 (_) >> 800:4 15 (call-with-status-report _ _) >> In guix/scripts/home.scm: >> 214:4 14 (_) >> In ice-9/boot-9.scm: >> 1752:10 13 (with-exception-handler _ _ #:unwind? _ # _) >> In guix/store.scm: >> 658:37 12 (thunk) >> 1320:8 11 (call-with-build-handler _ _) >> 1320:8 10 (call-with-build-handler #<procedure 7f5d757319c0 at g…> …) >> 2108:24 9 (run-with-store #<store-connection 256.99 7f5d77fb3550> …) >> In guix/scripts/home.scm: >> 169:15 8 (_ _) >> In unknown file: >> 7 (primitive-load "/gnu/store/xl4igqm0jjy7gfbganz9061ivdg…") >> In ice-9/eval.scm: >> 619:8 6 (_ #(#(#(#(#(#(#(#(#(#(#<…> …) …) …) …) …) …) …) …) …) …)) >> 626:19 5 (_ #(#(#(#(#(#(#(#(#(#(#<…> …) …) …) …) …) …) …) …) …) …)) >> In srfi/srfi-1.scm: >> 586:17 4 (map1 (("profile/share/fonts" (system* "/gnu/stor…" …)))) >> In ice-9/eval.scm: >> 293:34 3 (_ #(#(#<directory (guile-user) 7f5d87ca3c80> #<va…>) #)) >> In unknown file: >> 2 (string-append #f "/" "profile/share/fonts") >> In ice-9/boot-9.scm: >> 1685:16 1 (raise-exception _ #:continuable? _) >> 1685:16 0 (raise-exception _ #:continuable? _) >> >> ice-9/boot-9.scm:1685:16: In procedure raise-exception: >> In procedure string-append: Wrong type (expecting string): #f > > run-on-change service doesn't handle the case, where the previous > generation doesn't exists. Fix should be pretty simple, will send a > patch once it done. Thank you for catching this) > The fix:
[0001-home-services-run-on-change-Handle-first-generation-.patch (text/x-patch, inline)]
From a07541380d412b33c504e5811776062af4e38582 Mon Sep 17 00:00:00 2001 From: Andrew Tropin <andrew <at> trop.in> Date: Tue, 31 Aug 2021 15:24:25 +0300 Subject: [PATCH 1/2] home-services: run-on-change: Handle first generation case. --- gnu/home-services.scm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gnu/home-services.scm b/gnu/home-services.scm index 2a773496f0..5608c65175 100644 --- a/gnu/home-services.scm +++ b/gnu/home-services.scm @@ -448,13 +448,14 @@ with one gexp, but many times, and all gexps must be idempotent."))) (if any-changes? (cadr x) ""))) '#$pattern-gexp-tuples)) - (if #$eval-gexps? + (if (and #$eval-gexps? (getenv "GUIX_OLD_HOME")) (begin (display "Evaling on-change gexps.\n\n") (for-each primitive-eval expressions-to-eval) (display "On-change gexps evaluation finished.\n\n")) (display "\ -On-change gexps won't evaluated, disabled by service configuration.\n")))) +On-change gexps won't evaluated, disabled by service configuration or +there are no previos generations.\n")))) (define home-run-on-change-service-type (service-type (name 'home-run-on-change) -- 2.33.0
[Message part 5 (text/plain, inline)]
> >> --8<---------------cut here---------------end--------------->8--- >> >> I skipped the error and tried to configure Bash more: >> --8<---------------cut here---------------start------------->8--- >> (define .bashrc >> (string-append %home "/.local/share/chezmoi/dot_bashrc")) >> >> ;; ... >> >> (home-bash-configuration >> ;; ... >> (bashrc >> (list >> (with-input-from-file .bashrc read-string)))) >> --8<---------------cut here---------------end--------------->8--- >> >> Another launch, no errors this time: >> --8<---------------cut here---------------start------------->8--- >> oleg <at> guixsd ~/src/guix-wip-guix-home$ /tmp/guix/guix/bin/guix home reconfigure ~/.local/share/chezmoi/dotfiles/guixsd/home.scm >> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0% >> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 100.0% >> The following derivations will be built: >> /gnu/store/fn1hzpyic1k32pamyf45vwa0x3lw046g-home.drv >> /gnu/store/akdwz30lx0widqvyqmnkya45cb78f74d-files.drv >> /gnu/store/xcvi7n1l0fvsm099x2vyg6xci0qkayzp-bashrc.drv >> /gnu/store/pm1gw2xakkqj0zxsbbq0jnwgv3v95ajj-provenance.drv >> building /gnu/store/pm1gw2xakkqj0zxsbbq0jnwgv3v95ajj-provenance.drv... >> successfully built /gnu/store/pm1gw2xakkqj0zxsbbq0jnwgv3v95ajj-provenance.drv >> building /gnu/store/xcvi7n1l0fvsm099x2vyg6xci0qkayzp-bashrc.drv... >> successfully built /gnu/store/xcvi7n1l0fvsm099x2vyg6xci0qkayzp-bashrc.drv >> building /gnu/store/akdwz30lx0widqvyqmnkya45cb78f74d-files.drv... >> successfully built /gnu/store/akdwz30lx0widqvyqmnkya45cb78f74d-files.drv >> building /gnu/store/fn1hzpyic1k32pamyf45vwa0x3lw046g-home.drv... >> successfully built /gnu/store/fn1hzpyic1k32pamyf45vwa0x3lw046g-home.drv >> /gnu/store/1y84hzz1m1c3jw03n2g8hn9wwyxngab3-home >> Cleaning up symlinks from previous home-environment. >> >> Removing /home/oleg/.config/fontconfig/fonts.conf... done >> Removing /home/oleg/.config/fontconfig... done >> Skipping /home/oleg/.config (not an empty directory)... done >> Removing /home/oleg/.bashrc... done >> Removing /home/oleg/.profile... done >> Removing /home/oleg/.bash_profile... done >> Cleanup finished. >> >> New symlinks to home-environment will be created soon. >> All conflicting files will go to /home/oleg/1630407412-guix-home-legacy-configs-backup. >> >> Skipping /home/oleg/.config (directory already exists)... done >> Creating /home/oleg/.config/fontconfig... done >> Symlinking /home/oleg/.config/fontconfig/fonts.conf -> /gnu/store/phj2z2iiqdhryfy7mqral0b9qz3hlva6-fonts.conf... done >> Symlinking /home/oleg/.bashrc -> /gnu/store/lf51wflmvx91m2jx8hx3j34qs9x1k153-bashrc... done >> Symlinking /home/oleg/.profile -> /gnu/store/fxbppk3pqzdi3zzy0xl5vg1ir6c5jzq5-shell-profile... done >> Symlinking /home/oleg/.bash_profile -> /gnu/store/2c3yva8vj5ikb0gspmjvzw0r9g9i1cxc-bash_profile... done >> done >> Finished updating symlinks. >> >> Comparing /gnu/store/xl4igqm0jjy7gfbganz9061ivdgzfpdk-home/profile/share/fonts and >> /gnu/store/1y84hzz1m1c3jw03n2g8hn9wwyxngab3-home/profile/share/fonts... done (same) >> Evaling on-change gexps. >> >> On-change gexps evaluation finished. >> --8<---------------cut here---------------end--------------->8--- >> >> Oleg.
[signature.asc (application/pgp-signature, inline)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.