(use-modules (guix monads) (guix store) (guix gexp) (guix packages) (guix utils) (gnu packages base)) (define* (%default-environ #:key locale timezone) "Return the default environment variables as a alist." (mlet %store-monad ((tzdir (package-file tzdata "share/zoneinfo"))) (let ((path '("/run/setuid-programs" "$HOME/.guix-profile/bin" "$HOME/.guix-profile/sbin" "/run/current-system/profile/bin" "/run/current-system/profile/sbin")) (infopath '("$HOME/.guix-profile/share/info" "/run/current-system/profile/share/info")) ;; Tell 'modprobe' & co. where to look for modules. (linux-module-directory "/run/booted-system/kernel/lib/modules")) (return `(("LANG" . ,locale) ("TZ" . ,timezone) ("TZDIR" . ,tzdir) ("LINUX_MODULE_DIRECTORY" . ,linux-module-directory) ("PATH" . ,path) ("INFOPATH" . ,infopath)))))) (define (%default-/etc/profile menv) "Return the default /etc/profile." (mlet %store-monad ((env menv)) (define (sh-setenv name value) (format #f "export ~a=~a\n" name (if (list? value) (string-join value ":") value))) (text-file "profile" (apply string-append (map (lambda (e) (sh-setenv (car e) (cdr e))) env))))) (define (%default-/etc/zlogin) "Return the default /etc/zlogin." (text-file "zlogin" "source /etc/profile/n")) (define (%default-/etc/fish/config.fish menv) "Return the default /etc/fish/config.fish." (mlet %store-monad ((env menv)) (define (fish-setenv name value) (format #f " set -gx ~a ~a\n" name (if (list? value) (string-join value " ") value))) (text-file "config.fish" (string-append "if status --is-login\n" (apply string-append (map (lambda (e) (fish-setenv (car e) (cdr e))) env)) "end\n")))) (display (run-with-store (open-connection) (%default-/etc/fish/config.fish (%default-environ #:locale "en_US.utf8" #:timezone "Asia/Shanghai"))))