On 2022-08-01 12:08, Ludovic Courtès wrote: > Hi, > > Andrew Tropin skribis: > >> From d08ed8de3ead1a704a96e0e6673dffb62f859597 Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin >> Date: Thu, 21 Jul 2022 15:24:32 +0300 >> Subject: [PATCH 1/2] home: xdg: Use closures in activation scripts. >> >> * gnu/home/services/xdg.scm (ensure-xdg-base-dirs-on-activation, >> home-xdg-user-directories-files-service): Use closures in activation scripts. > > [...] > >> (define (ensure-xdg-base-dirs-on-activation config) >> - #~(map (lambda (xdg-base-dir-variable) >> - ((@@ (guix build utils) mkdir-p) >> - (getenv >> - xdg-base-dir-variable))) >> - '#$(map (lambda (field) >> - (format >> - #f "XDG_~a" >> - (object->snake-case-string >> - (configuration-field-name field) 'upper))) >> - home-xdg-base-directories-configuration-fields))) >> + (with-imported-modules '((guix build utils)) >> + #~(map (lambda (xdg-base-dir-variable) >> + ((@ (guix build utils) mkdir-p) > > This change doesn’t hurt but it’s apparently unnecessary. At least it removes the usage of @@ :) > >> + (with-imported-modules `((guix build utils) >> + ,@(source-module-closure >> + '((ice-9 string-fun)))) > > However this one is incorrect as it would lead (ice-9 string-fun) from > the host Guile to be imported into the build environment, thereby making > the result dependent on the version of Guile that is used “outside” (you > may have seen a warning like “importing (ice-9 string-fun) from the > host”.) Why so? I expected modules closure to be compiled on build side and provided to activation script via preset load-path. BTW, I don't see this warning. > >> From da332f8272ea3c240fc4e3664051da3b3a4e18c6 Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin >> Date: Thu, 21 Jul 2022 17:06:24 +0300 >> Subject: [PATCH 2/2] home: xdg: Skip mkdir XDG_RUNTIME_DIR in activation >> script. >> >> * gnu/home/services/xdg.scm (ensure-xdg-base-dirs-on-activation): Skip mkdir >> XDG_RUNTIME_DIR in activation script. >> --- >> gnu/home/services/xdg.scm | 19 ++++++++++++------- >> 1 file changed, 12 insertions(+), 7 deletions(-) >> >> diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm >> index 5a41dc4994..541f64a379 100644 >> --- a/gnu/home/services/xdg.scm >> +++ b/gnu/home/services/xdg.scm >> @@ -109,13 +109,18 @@ (define (ensure-xdg-base-dirs-on-activation config) >> (with-imported-modules '((guix build utils)) >> #~(map (lambda (xdg-base-dir-variable) >> ((@ (guix build utils) mkdir-p) >> - (getenv >> - xdg-base-dir-variable))) >> - '#$(map (lambda (field) >> - (format >> - #f "XDG_~a" >> - (object->snake-case-string >> - (configuration-field-name field) 'upper))) >> + (getenv xdg-base-dir-variable))) >> + '#$(filter-map >> + (lambda (field) >> + (let ((env-var-name >> + (format >> + #f "XDG_~a" >> + (object->snake-case-string >> + (configuration-field-name field) 'upper)))) >> + ;; XDG_RUNTIME_DIR shouldn't be created during activation >> + ;; and will be provided by elogind or other service. >> + (and (not (string=? "XDG_RUNTIME_DIR" env-var-name)) >> + env-var-name))) >> home-xdg-base-directories-configuration-fields)))) >> >> (define (last-extension-or-cfg config extensions) > > I tweaked that accordingly (patch attached), but that leads to a test > failure in ‘tests/guix-home.sh’ because there’s a warning about > XDG_RUNTIME_DIR not existing that goes to standard output of ‘guix home > container’: > > --8<---------------cut here---------------start------------->8--- > + guix home container home.scm -- false > XDG_RUNTIME_DIR doesn't exists, on-first-login script > won't execute anything. You can check if xdg runtime directory exists, > XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the > script by running '$HOME/.guix-home/on-first-login'++ guix home container home.scm -- echo '$HOME' > guix home: warning: only 4.1 GiB of free space available on /gnu/store > hint: Consider deleting old profile generations and collecting garbage, along > these lines: > > guix gc --delete-generations=1m > > + test 'XDG_RUNTIME_DIR doesn'\''t exists, on-first-login script > won'\''t execute anything. You can check if xdg runtime directory exists, > XDG_RUNTIME_DIR variable is set to appropriate value and manually execute the > script by running '\''$HOME/.guix-home/on-first-login'\''/home/ludo' = /home/ludo > --8<---------------cut here---------------end--------------->8--- > > Thoughts? Hm, I tried with both your and my patches, but I don't get a test fail. --8<---------------cut here---------------start------------->8--- make check TESTS="tests/guix-home.sh" make check-recursive make[1]: Entering directory '/home/bob/work/gnu/guix' Making check in po/guix make[2]: Entering directory '/home/bob/work/gnu/guix/po/guix' make[2]: Nothing to be done for 'check'. make[2]: Leaving directory '/home/bob/work/gnu/guix/po/guix' Making check in po/packages make[2]: Entering directory '/home/bob/work/gnu/guix/po/packages' make[2]: Nothing to be done for 'check'. make[2]: Leaving directory '/home/bob/work/gnu/guix/po/packages' make[2]: Entering directory '/home/bob/work/gnu/guix' Compiling Scheme modules... Compiling Scheme modules... Compiling Scheme modules... Compiling Scheme modules... make check-TESTS check-local make[3]: Entering directory '/home/bob/work/gnu/guix' make[4]: Entering directory '/home/bob/work/gnu/guix' PASS: tests/guix-home.sh ============================================================================ Testsuite summary for GNU Guix 1.3.0.22216-446db ============================================================================ # TOTAL: 1 # PASS: 1 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ============================================================================ make[4]: Leaving directory '/home/bob/work/gnu/guix' make[3]: Nothing to be done for 'check-local'. make[3]: Leaving directory '/home/bob/work/gnu/guix' make[2]: Leaving directory '/home/bob/work/gnu/guix' make[1]: Leaving directory '/home/bob/work/gnu/guix' Compilation finished at Mon Aug 1 15:42:20 --8<---------------cut here---------------end--------------->8--- The same with guix home container. --8<---------------cut here---------------start------------->8--- guix home container ~/tmp/he.scm -- false WARNING: (guile-user): imported module (guix build utils) overrides core binding `delete' Symlinking /home/bob/.profile -> /gnu/store/dann7r1095xll0kji5yl0ql07096rc8j-shell-profile... done Symlinking /home/bob/.bash_profile -> /gnu/store/q0i9j1fbxwdr7sqin1hi16zhir8b4qwd-bash_profile... done Symlinking /home/bob/.bashrc -> /gnu/store/0hblljbzbbrbawhcv2hlz14narb78s2m-bashrc... done Symlinking /home/bob/.config/fontconfig/fonts.conf -> /gnu/store/4261pxafny0g2myhh9yj1771ry7k05lc-fonts.conf... done done Finished updating symlinks. Comparing /gnu/store/non-existing-generation/profile/share/fonts and /gnu/store/f2bc4zy8hqv3in72yg4kxdxppigfafn1-home/profile/share/fonts... done (same) Evaluating on-change gexps. On-change gexps evaluation finished. --8<---------------cut here---------------end--------------->8--- -- Best regards, Andrew Tropin