* use zsh as login shell @ 2014-11-27 15:58 宋文武 2014-11-27 20:15 ` Ludovic Courtès 2014-12-05 13:57 ` 宋文武 0 siblings, 2 replies; 18+ messages in thread From: 宋文武 @ 2014-11-27 15:58 UTC (permalink / raw) To: guix-devel Currently, zsh doesn't work out of box. IMO, we should use `/etc/environment' for system variables: LANG=en_US.UTF-8 PATH=/run/current-system/profile/bin:/run/setuid-programs And add `pam_env.so' to /etc/pam.d/login, to make tty login work. With `/etc/profile', `/etc/zlogin' just: source /etc/environment to make `bash -l' and `zsh -l' work. And `~/.bash_profile', `~/.zlogin' for user variables: [[ $- == *i* ]] && source ~/.bashrc # only for bash export PATH=$PATH:$HOME/.guix-profile/bin Use `~/.bashrc', `~/.zshrc' for interactive settings: PS1='$ ' alias ls='ls -p --color' # $(guix package --search-paths)? Note: non-login interactive should inherit env from parent, eg: `env -i $(which bash)' spawn a shell with no PATH (what I expect). ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-27 15:58 use zsh as login shell 宋文武 @ 2014-11-27 20:15 ` Ludovic Courtès 2014-11-28 15:06 ` 宋文武 2014-11-28 15:11 ` use zsh " 宋文武 2014-12-05 13:57 ` 宋文武 1 sibling, 2 replies; 18+ messages in thread From: Ludovic Courtès @ 2014-11-27 20:15 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel 宋文武 <iyzsong@gmail.com> skribis: > Currently, zsh doesn't work out of box. On the standalone system, right? > IMO, we should use `/etc/environment' for system variables: > LANG=en_US.UTF-8 > PATH=/run/current-system/profile/bin:/run/setuid-programs > And add `pam_env.so' to /etc/pam.d/login, to make tty login work. > > With `/etc/profile', `/etc/zlogin' just: > source /etc/environment > to make `bash -l' and `zsh -l' work. Is ‘pam env’ needed at all if /etc/profile and /etc/zlogin are provided anyway? > And `~/.bash_profile', `~/.zlogin' for user variables: > [[ $- == *i* ]] && source ~/.bashrc # only for bash > > export PATH=$PATH:$HOME/.guix-profile/bin OK. It would be best to have $HOME/.guix-profile/bin in PATH installed by /etc/{profile,zlogin}, though, so that it works out of the box. > Use `~/.bashrc', `~/.zshrc' for interactive settings: > PS1='$ ' > alias ls='ls -p --color' > # $(guix package --search-paths)? OK. Thanks for the very good summary! I never had this clear an understanding of all this. Would you like to submit a patch? The relevant parts are in (gnu system) for /etc/profile, in (gnu system shadow) for the .bashrc template, and in (gnu services base) for the PAM settings of the ‘login’ command. Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-27 20:15 ` Ludovic Courtès @ 2014-11-28 15:06 ` 宋文武 2014-11-28 22:26 ` Ludovic Courtès 2014-11-28 15:11 ` use zsh " 宋文武 1 sibling, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-11-28 15:06 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Ludovic Courtès <ludo@gnu.org> writes: > 宋文武 <iyzsong@gmail.com> skribis: > >> Currently, zsh doesn't work out of box. > > On the standalone system, right? Yes. > >> IMO, we should use `/etc/environment' for system variables: >> LANG=en_US.UTF-8 >> PATH=/run/current-system/profile/bin:/run/setuid-programs >> And add `pam_env.so' to /etc/pam.d/login, to make tty login work. >> >> With `/etc/profile', `/etc/zlogin' just: >> source /etc/environment >> to make `bash -l' and `zsh -l' work. > > Is ‘pam env’ needed at all if /etc/profile and /etc/zlogin are provided > anyway? Yes, it's redundant. Now I think the better way is just provide /etc/environment. then `bash -l' would take ~/.bash_profile and ~/.profile. We can have a default ~/.bash_profile like: source /etc/environment export PATH=$PATH:$HOME/.guix-profile/bin And install skeletons only when needed by using: (operating-system (skeletons (list bash-profile))) WDYT? > >> And `~/.bash_profile', `~/.zlogin' for user variables: >> [[ $- == *i* ]] && source ~/.bashrc # only for bash >> >> export PATH=$PATH:$HOME/.guix-profile/bin > > OK. It would be best to have $HOME/.guix-profile/bin in PATH installed > by /etc/{profile,zlogin}, though, so that it works out of the box. > >> Use `~/.bashrc', `~/.zshrc' for interactive settings: >> PS1='$ ' >> alias ls='ls -p --color' >> # $(guix package --search-paths)? > > OK. > > Thanks for the very good summary! I never had this clear an > understanding of all this. In fact, I'm confused about this even now :) > > Would you like to submit a patch? The relevant parts are in (gnu > system) for /etc/profile, in (gnu system shadow) for the .bashrc > template, and in (gnu services base) for the PAM settings of the ‘login’ > command. Sure, I'll try to write a patch, thanks for the direction. > > Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-28 15:06 ` 宋文武 @ 2014-11-28 22:26 ` Ludovic Courtès 2014-11-29 3:24 ` 宋文武 0 siblings, 1 reply; 18+ messages in thread From: Ludovic Courtès @ 2014-11-28 22:26 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel 宋文武 <iyzsong@gmail.com> skribis: > Ludovic Courtès <ludo@gnu.org> writes: > >> 宋文武 <iyzsong@gmail.com> skribis: [...] >>> IMO, we should use `/etc/environment' for system variables: >>> LANG=en_US.UTF-8 >>> PATH=/run/current-system/profile/bin:/run/setuid-programs >>> And add `pam_env.so' to /etc/pam.d/login, to make tty login work. >>> >>> With `/etc/profile', `/etc/zlogin' just: >>> source /etc/environment >>> to make `bash -l' and `zsh -l' work. >> >> Is ‘pam env’ needed at all if /etc/profile and /etc/zlogin are provided >> anyway? > Yes, it's redundant. > Now I think the better way is just provide /etc/environment. > then `bash -l' would take ~/.bash_profile and ~/.profile. > We can have a default ~/.bash_profile like: > source /etc/environment > export PATH=$PATH:$HOME/.guix-profile/bin Currently, the .bashrc skeleton sources /etc/profile. So, instead of what you suggest, what about having: 1. /etc/profile and /etc/zlogin (?) both source /etc/environment, which uses plain Bourne syntax. 2. PATH is defined in /etc/environment and includes ~/.guix-profile/bin. 3. The skeleton for ~/.bash_profile sources /etc/profile, /etc/bashrc, and ~/.bashrc. 4. The definition of PS1 is moved from /etc/profile to /etc/bashrc. 5. The skeleton for ~/.bashrc sources /etc/bashrc. ? (I was reading the Bash manual to make sure (info "(bash) Bash Startup Files"), and as an exercise, I’ve cleaned up my own ~/.bashrc and ~/.bash_profile accordingly, which fixes the issue I reported a couple of weeks ago regarding ‘guix environment’.) Thanks, Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-28 22:26 ` Ludovic Courtès @ 2014-11-29 3:24 ` 宋文武 2014-12-01 12:57 ` Ludovic Courtès 0 siblings, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-11-29 3:24 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Ludovic Courtès <ludo@gnu.org> writes: > 宋文武 <iyzsong@gmail.com> skribis: > >> Ludovic Courtès <ludo@gnu.org> writes: >> >>> 宋文武 <iyzsong@gmail.com> skribis: > > [...] > >>>> IMO, we should use `/etc/environment' for system variables: >>>> LANG=en_US.UTF-8 >>>> PATH=/run/current-system/profile/bin:/run/setuid-programs >>>> And add `pam_env.so' to /etc/pam.d/login, to make tty login work. >>>> >>>> With `/etc/profile', `/etc/zlogin' just: >>>> source /etc/environment >>>> to make `bash -l' and `zsh -l' work. >>> >>> Is ‘pam env’ needed at all if /etc/profile and /etc/zlogin are provided >>> anyway? >> Yes, it's redundant. >> Now I think the better way is just provide /etc/environment. >> then `bash -l' would take ~/.bash_profile and ~/.profile. >> We can have a default ~/.bash_profile like: >> source /etc/environment >> export PATH=$PATH:$HOME/.guix-profile/bin > > Currently, the .bashrc skeleton sources /etc/profile. > > So, instead of what you suggest, what about having: > > 1. /etc/profile and /etc/zlogin (?) both source /etc/environment, > which uses plain Bourne syntax. > > 2. PATH is defined in /etc/environment and includes > ~/.guix-profile/bin. /etc/environment is defined by pam_env to be a simple KEY=VAL file, with no support for varibales substitute. If we do not use pam_env (linux specified?), I think we should let /etc/zlogin source /etc/profile instead. And we don't want /etc/zlogin when not using zsh at all, IIUC while skeletons is configurable at the top os-expr, /etc/zlogin is not. > > 3. The skeleton for ~/.bash_profile sources /etc/profile, /etc/bashrc, > and ~/.bashrc. > > 4. The definition of PS1 is moved from /etc/profile to /etc/bashrc. > > 5. The skeleton for ~/.bashrc sources /etc/bashrc. It seem too much, what I suggested is: for login, su (pam_env): /etc/environment for login shell: ~/.bash_profile, ~/.zlogin for interactive: ~/.bashrc, ~/.zshrc skeletons only installed when needed :) > > ? > > (I was reading the Bash manual to make sure (info "(bash) Bash Startup > Files"), and as an exercise, I’ve cleaned up my own ~/.bashrc and > ~/.bash_profile accordingly, which fixes the issue I reported a couple > of weeks ago regarding ‘guix environment’.) > > Thanks, > Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-29 3:24 ` 宋文武 @ 2014-12-01 12:57 ` Ludovic Courtès 2014-12-02 14:43 ` 宋文武 0 siblings, 1 reply; 18+ messages in thread From: Ludovic Courtès @ 2014-12-01 12:57 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel 宋文武 <iyzsong@gmail.com> skribis: > Ludovic Courtès <ludo@gnu.org> writes: > >> 宋文武 <iyzsong@gmail.com> skribis: >> >>> Ludovic Courtès <ludo@gnu.org> writes: [...] >> So, instead of what you suggest, what about having: >> >> 1. /etc/profile and /etc/zlogin (?) both source /etc/environment, >> which uses plain Bourne syntax. >> >> 2. PATH is defined in /etc/environment and includes >> ~/.guix-profile/bin. > /etc/environment is defined by pam_env to be a simple KEY=VAL file, with no > support for varibales substitute. If we do not use pam_env (linux specified?), > I think we should let /etc/zlogin source /etc/profile instead. Yes, but they would contain almost the same lines, right? To what extent is zsh Bourne- or Bash-compatible? Does ‘export foo=bar’ work for zsh? If it does, let’s just keep /etc/profile, and use it for both zsh and Bash. > And we don't want /etc/zlogin when not using zsh at all, > IIUC while skeletons is configurable at the top os-expr, /etc/zlogin is > not. It’s OK to have a 2-KiB /etc/zlogin, even when one doesn’t use zsh. >> 3. The skeleton for ~/.bash_profile sources /etc/profile, /etc/bashrc, >> and ~/.bashrc. >> >> 4. The definition of PS1 is moved from /etc/profile to /etc/bashrc. >> >> 5. The skeleton for ~/.bashrc sources /etc/bashrc. > It seem too much, what I suggested is: > for login, su (pam_env): /etc/environment > for login shell: ~/.bash_profile, ~/.zlogin > for interactive: ~/.bashrc, ~/.zshrc > skeletons only installed when needed :) As a first step, what about always installing the skeletons? Then we can see whether/how to refine that. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-12-01 12:57 ` Ludovic Courtès @ 2014-12-02 14:43 ` 宋文武 2014-12-04 23:10 ` Ludovic Courtès 0 siblings, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-12-02 14:43 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1923 bytes --] Ludovic Courtès <ludo@gnu.org> writes: > 宋文武 <iyzsong@gmail.com> skribis: > >> Ludovic Courtès <ludo@gnu.org> writes: >> >>> 宋文武 <iyzsong@gmail.com> skribis: >>> >>>> Ludovic Courtès <ludo@gnu.org> writes: > > [...] > >>> So, instead of what you suggest, what about having: >>> >>> 1. /etc/profile and /etc/zlogin (?) both source /etc/environment, >>> which uses plain Bourne syntax. >>> >>> 2. PATH is defined in /etc/environment and includes >>> ~/.guix-profile/bin. >> /etc/environment is defined by pam_env to be a simple KEY=VAL file, with no >> support for varibales substitute. If we do not use pam_env (linux specified?), >> I think we should let /etc/zlogin source /etc/profile instead. > > Yes, but they would contain almost the same lines, right? To what > extent is zsh Bourne- or Bash-compatible? Does ‘export foo=bar’ work > for zsh? It does. > > If it does, let’s just keep /etc/profile, and use it for both zsh and > Bash. > >> And we don't want /etc/zlogin when not using zsh at all, >> IIUC while skeletons is configurable at the top os-expr, /etc/zlogin is >> not. > > It’s OK to have a 2-KiB /etc/zlogin, even when one doesn’t use zsh. > >>> 3. The skeleton for ~/.bash_profile sources /etc/profile, /etc/bashrc, >>> and ~/.bashrc. >>> >>> 4. The definition of PS1 is moved from /etc/profile to /etc/bashrc. >>> >>> 5. The skeleton for ~/.bashrc sources /etc/bashrc. >> It seem too much, what I suggested is: >> for login, su (pam_env): /etc/environment >> for login shell: ~/.bash_profile, ~/.zlogin >> for interactive: ~/.bashrc, ~/.zshrc >> skeletons only installed when needed :) > > As a first step, what about always installing the skeletons? Then we > can see whether/how to refine that. No problem. > > Thanks, > Ludo’. And this is what I have so far: [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-gnu-Add-etc-environment.patch --] [-- Type: text/x-patch, Size: 8033 bytes --] From 1e400957b29a47f63548df39b36a7c0f1d8a37d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> Date: Tue, 2 Dec 2014 21:40:52 +0800 Subject: [PATCH] gnu: Add /etc/environment. * gnu/system.scm (default-/etc/environment): New procedure. (etc-directory)[profile]: Remove it. (etc-directory)[environment]: Add it. * gnu/system/linux.scm (unix-pam-service): Add #:readenv? parameter. * gnu/services/base.scm (mingetty-service): Pass #t as #:readenv? to unix-pam-service. * gnu/system/shadow.scm (default-skeletons): Add .bash_profile. Adjust .bashrc. --- gnu/services/base.scm | 3 ++- gnu/system.scm | 40 ++++++++++++++++++++-------------------- gnu/system/linux.scm | 26 ++++++++++++++++---------- gnu/system/shadow.scm | 18 +++++++++++++++--- 4 files changed, 53 insertions(+), 34 deletions(-) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 712222b..b8dedd7 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -372,7 +372,8 @@ the ``message of the day''." ;; duplicates are removed. (list (unix-pam-service "login" #:allow-empty-passwords? allow-empty-passwords? - #:motd motd))))))) + #:motd motd + #:readenv? #t))))))) (define* (nscd-service #:key (glibc (canonical-package glibc))) "Return a service that runs libc's name service cache daemon (nscd)." diff --git a/gnu/system.scm b/gnu/system.scm index 731f9de..b0cf59f 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -351,6 +351,21 @@ This is the GNU system. Welcome.\n") "Return the default /etc/hosts file." (text-file "hosts" (local-host-aliases host-name))) +(define* (default-/etc/environment #:key locale timezone) + "Return the default /etc/environment file." + (let* ((profile "/run/current-system/profile") + (path (string-join (list "/run/setuid-programs" + (string-append profile "/bin") + (string-append profile "/sbin")) + ":"))) + (text-file* "environment" "\ +LANG=" locale " +TZ=" timezone " +TZDIR=" tzdata "/share/zoneinfo +LINUX_MODULE_DIRECTORY=/run/booted-system/kernel/lib/modules +PATH=" path " +INFOPATH=/run/current-system/profile/share/info\n"))) + (define* (etc-directory #:key (locale "C") (timezone "Europe/Paris") (issue "Hello!\n") @@ -375,25 +390,10 @@ This is the GNU system. Welcome.\n") (nsswitch (text-file "nsswitch.conf" "hosts: files dns\n")) - ;; TODO: Generate bashrc from packages' search-paths. - (bashrc (text-file* "bashrc" " -export PS1='\\u@\\h \\w\\$ ' - -export LC_ALL=\"" locale "\" -export TZ=\"" timezone "\" -export TZDIR=\"" tzdata "/share/zoneinfo\" - -# Tell 'modprobe' & co. where to look for modules. -export LINUX_MODULE_DIRECTORY=/run/booted-system/kernel/lib/modules - -export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin -export PATH=/run/setuid-programs:/run/current-system/profile/sbin:$PATH -export CPATH=$HOME/.guix-profile/include:" profile "/include -export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib -export INFOPATH=$HOME/.guix-profile/share/info:/run/current-system/profile/share/info -alias ls='ls -p --color' -alias ll='ls -l' -")) + ;; Default system-wide environment varibales. + (environment (default-/etc/environment #:locale locale + #:timezone timezone)) + (skel (skeleton-directory skeletons))) (file-union "etc" `(("services" ,#~(string-append #$net-base "/etc/services")) @@ -405,7 +405,7 @@ alias ll='ls -l' ("nsswitch.conf" ,#~#$nsswitch) ("skel" ,#~#$skel) ("shells" ,#~#$shells) - ("profile" ,#~#$bashrc) + ("environment" ,#~#$environment) ("hosts" ,#~#$hosts-file) ("localtime" ,#~(string-append #$tzdata "/share/zoneinfo/" #$timezone)) diff --git a/gnu/system/linux.scm b/gnu/system/linux.scm index 8cddedf..f479251 100644 --- a/gnu/system/linux.scm +++ b/gnu/system/linux.scm @@ -127,10 +127,11 @@ dumped in /etc/pam.d/NAME, where NAME is the name of SERVICE." (let ((unix (pam-entry (control "required") (module "pam_unix.so")))) - (lambda* (name #:key allow-empty-passwords? motd) + (lambda* (name #:key allow-empty-passwords? motd readenv?) "Return a standard Unix-style PAM service for NAME. When ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords. When MOTD is true, it -should be the name of a file used as the message-of-the-day." +should be the name of a file used as the message-of-the-day. When READENV? is +true, honor system-wide environment variables." ;; See <http://www.linux-pam.org/Linux-PAM-html/sag-configuration-example.html>. (let ((name* name)) (pam-service @@ -143,14 +144,19 @@ should be the name of a file used as the message-of-the-day." (arguments '("nullok"))) unix))) (password (list unix)) - (session (if motd - (list unix - (pam-entry - (control "optional") - (module "pam_motd.so") - (arguments - (list #~(string-append "motd=" #$motd))))) - (list unix)))))))) + (session (let ((motd-entry + (if motd + (pam-entry + (control "optional") + (module "pam_motd.so") + (arguments + (list #~(string-append "motd=" #$motd)))))) + (env-entry + (if readenv? + (pam-entry + (control "required") + (module "pam_env.so"))))) + (filter pam-entry? (list unix motd-entry env-entry))))))))) (define (rootok-pam-service command) "Return a PAM service for COMMAND such that 'root' does not need to diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 6970021..926c385 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -115,9 +115,20 @@ (copy-file (car (find-files #$guile-wm "wm-init-sample.scm")) #$output))) - (mlet %store-monad ((bashrc (text-file "bashrc" "\ -# Allow non-login shells such as an xterm to get things right. -test -f /etc/profile && source /etc/profile\n")) + (mlet %store-monad ((bash-profile (text-file "bash_profile" "\ +# honor ~/.bashrc if the shell is interactive +[[ $- == *i* ]] && source ~/.bashrc + +# load system-wide environment varibales +source /etc/environment + +# common varibales for user profile +export PATH=$HOME/.guix-profile/bin:$HOME/.guix-profile/sbin:$PATH +export INFOPATH=$HOME/.guix-profile/share/info:$INFOPATH\n")) + (bashrc (text-file "bashrc" "\ +PS1='\\u@\\h \\w\\$ ' +alias ls='ls -p --color' +alias ll='ls -l'\n")) (guile-wm (gexp->derivation "guile-wm" copy-guile-wm #:modules '((guix build utils)))) @@ -128,6 +139,7 @@ XTerm*metaSendsEscape: true\n")) # Tell GDB where to look for separate debugging files. set debug-file-directory ~/.guix-profile/lib/debug\n"))) (return `((".bashrc" ,bashrc) + (".bash_profile" ,bash-profile) (".Xdefaults" ,xdefaults) (".guile-wm" ,guile-wm) (".gdbinit" ,gdbinit))))) -- 2.1.2 [-- Attachment #3: Type: text/plain, Size: 64 bytes --] It only work when just one mingeety-service is enabled. Why :? ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-12-02 14:43 ` 宋文武 @ 2014-12-04 23:10 ` Ludovic Courtès 2014-12-05 5:11 ` Mark H Weaver 2014-12-05 11:21 ` 宋文武 0 siblings, 2 replies; 18+ messages in thread From: Ludovic Courtès @ 2014-12-04 23:10 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel 宋文武 <iyzsong@gmail.com> skribis: > Ludovic Courtès <ludo@gnu.org> writes: > >> 宋文武 <iyzsong@gmail.com> skribis: [...] >>>> 3. The skeleton for ~/.bash_profile sources /etc/profile, /etc/bashrc, >>>> and ~/.bashrc. >>>> >>>> 4. The definition of PS1 is moved from /etc/profile to /etc/bashrc. >>>> >>>> 5. The skeleton for ~/.bashrc sources /etc/bashrc. >>> It seem too much, what I suggested is: >>> for login, su (pam_env): /etc/environment >>> for login shell: ~/.bash_profile, ~/.zlogin >>> for interactive: ~/.bashrc, ~/.zshrc >>> skeletons only installed when needed :) >> >> As a first step, what about always installing the skeletons? Then we >> can see whether/how to refine that. [...] > From 1e400957b29a47f63548df39b36a7c0f1d8a37d9 Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> > Date: Tue, 2 Dec 2014 21:40:52 +0800 > Subject: [PATCH] gnu: Add /etc/environment. > > * gnu/system.scm (default-/etc/environment): New procedure. > (etc-directory)[profile]: Remove it. > (etc-directory)[environment]: Add it. > * gnu/system/linux.scm (unix-pam-service): Add #:readenv? parameter. > * gnu/services/base.scm (mingetty-service): Pass #t as #:readenv? > to unix-pam-service. > * gnu/system/shadow.scm (default-skeletons): Add .bash_profile. Adjust .bashrc. So you ended up choosing pam_env? I thought we had concluded that it wasn’t needed, no? If it can be avoided, it’s better to do so, IMO. > + (mlet %store-monad ((bash-profile (text-file "bash_profile" "\ > +# honor ~/.bashrc if the shell is interactive > +[[ $- == *i* ]] && source ~/.bashrc I don’t think the test is needed, because ~/.bash_profile is only read by interactive Bash. > +# load system-wide environment varibales > +source /etc/environment > + > +# common varibales for user profile > +export PATH=$HOME/.guix-profile/bin:$HOME/.guix-profile/sbin:$PATH > +export INFOPATH=$HOME/.guix-profile/share/info:$INFOPATH\n")) > + (bashrc (text-file "bashrc" "\ > +PS1='\\u@\\h \\w\\$ ' I think PS1 should go to /etc/profile. WDYT? Thanks! Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-12-04 23:10 ` Ludovic Courtès @ 2014-12-05 5:11 ` Mark H Weaver 2014-12-05 18:54 ` Ludovic Courtès 2014-12-05 11:21 ` 宋文武 1 sibling, 1 reply; 18+ messages in thread From: Mark H Weaver @ 2014-12-05 5:11 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel ludo@gnu.org (Ludovic Courtès) writes: > 宋文武 <iyzsong@gmail.com> skribis: > >> + (mlet %store-monad ((bash-profile (text-file "bash_profile" "\ >> +# honor ~/.bashrc if the shell is interactive >> +[[ $- == *i* ]] && source ~/.bashrc > > I don’t think the test is needed, because ~/.bash_profile is only read > by interactive Bash. Indeed. However, it would be good to check if ~/.bashrc exists. Section 6.2 of the Bash manual suggests this: if [ -f ~/.bashrc ]; then . ~/.bashrc; fi >> +# load system-wide environment varibales >> +source /etc/environment >> + >> +# common varibales for user profile >> +export PATH=$HOME/.guix-profile/bin:$HOME/.guix-profile/sbin:$PATH >> +export INFOPATH=$HOME/.guix-profile/share/info:$INFOPATH\n")) >> + (bashrc (text-file "bashrc" "\ >> +PS1='\\u@\\h \\w\\$ ' > > I think PS1 should go to /etc/profile. WDYT? I agree with 宋文武 that the PS1 setting belongs in the default ~/.bashrc skeleton. I would prefer to keep settings like this, that are purely a matter of personal taste, out of system-wide files. Also, /etc/profile is read by other shells, and I don't know that the syntax above is portable. Regards, Mark ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-12-05 5:11 ` Mark H Weaver @ 2014-12-05 18:54 ` Ludovic Courtès 0 siblings, 0 replies; 18+ messages in thread From: Ludovic Courtès @ 2014-12-05 18:54 UTC (permalink / raw) To: Mark H Weaver; +Cc: guix-devel Mark H Weaver <mhw@netris.org> skribis: > ludo@gnu.org (Ludovic Courtès) writes: > >> 宋文武 <iyzsong@gmail.com> skribis: >> >>> + (mlet %store-monad ((bash-profile (text-file "bash_profile" "\ >>> +# honor ~/.bashrc if the shell is interactive >>> +[[ $- == *i* ]] && source ~/.bashrc >> >> I don’t think the test is needed, because ~/.bash_profile is only read >> by interactive Bash. > > Indeed. However, it would be good to check if ~/.bashrc exists. > Section 6.2 of the Bash manual suggests this: > > if [ -f ~/.bashrc ]; then . ~/.bashrc; fi Yes. >>> +# load system-wide environment varibales >>> +source /etc/environment >>> + >>> +# common varibales for user profile >>> +export PATH=$HOME/.guix-profile/bin:$HOME/.guix-profile/sbin:$PATH >>> +export INFOPATH=$HOME/.guix-profile/share/info:$INFOPATH\n")) >>> + (bashrc (text-file "bashrc" "\ >>> +PS1='\\u@\\h \\w\\$ ' >> >> I think PS1 should go to /etc/profile. WDYT? > > I agree with 宋文武 that the PS1 setting belongs in the default > ~/.bashrc skeleton. I would prefer to keep settings like this, that are > purely a matter of personal taste, out of system-wide files. Also, > /etc/profile is read by other shells, and I don't know that the syntax > above is portable. OK, that makes sense to me. Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-12-04 23:10 ` Ludovic Courtès 2014-12-05 5:11 ` Mark H Weaver @ 2014-12-05 11:21 ` 宋文武 2014-12-06 8:04 ` use zsh and fish " 宋文武 1 sibling, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-12-05 11:21 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Ludovic Courtès <ludo@gnu.org> writes: > 宋文武 <iyzsong@gmail.com> skribis: > >> Ludovic Courtès <ludo@gnu.org> writes: >> >>> 宋文武 <iyzsong@gmail.com> skribis: > > [...] > >>>>> 3. The skeleton for ~/.bash_profile sources /etc/profile, /etc/bashrc, >>>>> and ~/.bashrc. >>>>> >>>>> 4. The definition of PS1 is moved from /etc/profile to /etc/bashrc. >>>>> >>>>> 5. The skeleton for ~/.bashrc sources /etc/bashrc. >>>> It seem too much, what I suggested is: >>>> for login, su (pam_env): /etc/environment >>>> for login shell: ~/.bash_profile, ~/.zlogin >>>> for interactive: ~/.bashrc, ~/.zshrc >>>> skeletons only installed when needed :) >>> >>> As a first step, what about always installing the skeletons? Then we >>> can see whether/how to refine that. > > [...] > >> From 1e400957b29a47f63548df39b36a7c0f1d8a37d9 Mon Sep 17 00:00:00 2001 >> From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> >> Date: Tue, 2 Dec 2014 21:40:52 +0800 >> Subject: [PATCH] gnu: Add /etc/environment. >> >> * gnu/system.scm (default-/etc/environment): New procedure. >> (etc-directory)[profile]: Remove it. >> (etc-directory)[environment]: Add it. >> * gnu/system/linux.scm (unix-pam-service): Add #:readenv? parameter. >> * gnu/services/base.scm (mingetty-service): Pass #t as #:readenv? >> to unix-pam-service. >> * gnu/system/shadow.scm (default-skeletons): Add .bash_profile. Adjust .bashrc. > > So you ended up choosing pam_env? I thought we had concluded that it > wasn’t needed, no? If it can be avoided, it’s better to do so, IMO. Ok, I'll take this approach this weekend :) > >> + (mlet %store-monad ((bash-profile (text-file "bash_profile" "\ >> +# honor ~/.bashrc if the shell is interactive >> +[[ $- == *i* ]] && source ~/.bashrc > > I don’t think the test is needed, because ~/.bash_profile is only read > by interactive Bash. Yes, I'll do what Mark H Weaver suggest. > >> +# load system-wide environment varibales >> +source /etc/environment >> + >> +# common varibales for user profile >> +export PATH=$HOME/.guix-profile/bin:$HOME/.guix-profile/sbin:$PATH >> +export INFOPATH=$HOME/.guix-profile/share/info:$INFOPATH\n")) >> + (bashrc (text-file "bashrc" "\ >> +PS1='\\u@\\h \\w\\$ ' > > I think PS1 should go to /etc/profile. WDYT? +1 for Mark. > > Thanks! > > Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* use zsh and fish as login shell 2014-12-05 11:21 ` 宋文武 @ 2014-12-06 8:04 ` 宋文武 2014-12-06 15:09 ` Ludovic Courtès 0 siblings, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-12-06 8:04 UTC (permalink / raw) To: guix-devel [-- Attachment #1: Type: text/plain, Size: 317 bytes --] My previous patches for bash/zsh did not put fish into consider. It's not POSIX-compliant, I have to generate a different config file. Gentoo/Exherho create different files for differnt shells, eg: /etc/profile.env for sh /etc/profile.csh for csh both comming from /etc/env.d. So, I could do something similar: [-- Attachment #2: env.scm --] [-- Type: text/plain, Size: 2605 bytes --] (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")))) [-- Attachment #3: Type: text/plain, Size: 101 bytes --] WDYT? Since I'm new to Guile, please don't be hesitate to correct me (style, name, etc..). Thanks! ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh and fish as login shell 2014-12-06 8:04 ` use zsh and fish " 宋文武 @ 2014-12-06 15:09 ` Ludovic Courtès 0 siblings, 0 replies; 18+ messages in thread From: Ludovic Courtès @ 2014-12-06 15:09 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel 宋文武 <iyzsong@gmail.com> skribis: > My previous patches for bash/zsh did not put fish into consider. > It's not POSIX-compliant, I have to generate a different config file. > > Gentoo/Exherho create different files for differnt shells, eg: > /etc/profile.env for sh > /etc/profile.csh for csh It seems that /etc/profile is the standard name for Bourne shells, so I would leave it under that name. OK for /etc/profile.csh. > both comming from /etc/env.d. I don’t see a need to an /etc/env.d directory. What about finalizing your previous patch, taking into account Mark’s comments and mine, and then discussing Fish/csh support separately? That would be easier for me. Thanks! Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-27 20:15 ` Ludovic Courtès 2014-11-28 15:06 ` 宋文武 @ 2014-11-28 15:11 ` 宋文武 1 sibling, 0 replies; 18+ messages in thread From: 宋文武 @ 2014-11-28 15:11 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Ludovic Courtès <ludo@gnu.org> writes: > 宋文武 <iyzsong@gmail.com> skribis: > >> Currently, zsh doesn't work out of box. > > On the standalone system, right? Yes. > >> IMO, we should use `/etc/environment' for system variables: >> LANG=en_US.UTF-8 >> PATH=/run/current-system/profile/bin:/run/setuid-programs >> And add `pam_env.so' to /etc/pam.d/login, to make tty login work. >> >> With `/etc/profile', `/etc/zlogin' just: >> source /etc/environment >> to make `bash -l' and `zsh -l' work. > > Is ‘pam env’ needed at all if /etc/profile and /etc/zlogin are provided > anyway? Yes, it's redundant. Now I think the better way is just provide /etc/environment. then `bash -l' would take ~/.bash_profile and ~/.profile. We can have a default ~/.bash_profile like: source /etc/environment export PATH=$PATH:$HOME/.guix-profile/bin And install skeletons only when needed by using: (operating-system (skeletons (list bash-profile))) WDYT? > >> And `~/.bash_profile', `~/.zlogin' for user variables: >> [[ $- == *i* ]] && source ~/.bashrc # only for bash >> >> export PATH=$PATH:$HOME/.guix-profile/bin > > OK. It would be best to have $HOME/.guix-profile/bin in PATH installed > by /etc/{profile,zlogin}, though, so that it works out of the box. > >> Use `~/.bashrc', `~/.zshrc' for interactive settings: >> PS1='$ ' >> alias ls='ls -p --color' >> # $(guix package --search-paths)? > > OK. > > Thanks for the very good summary! I never had this clear an > understanding of all this. In fact, I'm confused about this even now :) > > Would you like to submit a patch? The relevant parts are in (gnu > system) for /etc/profile, in (gnu system shadow) for the .bashrc > template, and in (gnu services base) for the PAM settings of the ‘login’ > command. Sure, I'll try to write a patch, thanks for the direction. > > Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: use zsh as login shell 2014-11-27 15:58 use zsh as login shell 宋文武 2014-11-27 20:15 ` Ludovic Courtès @ 2014-12-05 13:57 ` 宋文武 2014-12-06 22:35 ` /etc/profile and .zshrc skeleton Ludovic Courtès 1 sibling, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-12-05 13:57 UTC (permalink / raw) To: guix-devel [-- Attachment #1: Type: text/plain, Size: 82 bytes --] Here are my new patches: Yeh, just add ~/.zshrc to source /etc/profie is enough. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-system-Cleanup-bash-startup-files.patch --] [-- Type: text/x-patch, Size: 3730 bytes --] From 42ccd7a445c9676db6d2c7b2b0583db45be245aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> Date: Fri, 5 Dec 2014 20:01:07 +0800 Subject: [PATCH 1/2] system: Cleanup bash startup files. * gnu/system.scm (etc-directory) (bashrc): Rename to (profile). 'CPATH', 'LIBRARY_PATH': Remove. 'PS1', 'alias ls', 'alias ll': Move to ... * gnu/system/shadow.scm (default-skeletons): (.bashrc): ... here. Don't source /etc/profile. (.bash_profile): New skeleton. --- gnu/system.scm | 13 ++++--------- gnu/system/shadow.scm | 13 +++++++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gnu/system.scm b/gnu/system.scm index e1ed1a2..a851ff2 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -384,10 +384,9 @@ This is the GNU system. Welcome.\n") (nsswitch (text-file "nsswitch.conf" "hosts: files dns\n")) - ;; TODO: Generate bashrc from packages' search-paths. - (bashrc (text-file* "bashrc" " -export PS1='\\u@\\h \\w\\$ ' - + ;; Startup file for POSIX-compliant login shells, which set system-wide + ;; environment variables. + (profile (text-file* "profile" "\ export LC_ALL=\"" locale "\" export TZ=\"" timezone "\" export TZDIR=\"" tzdata "/share/zoneinfo\" @@ -397,11 +396,7 @@ export LINUX_MODULE_DIRECTORY=/run/booted-system/kernel/lib/modules export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin export PATH=/run/setuid-programs:/run/current-system/profile/sbin:$PATH -export CPATH=$HOME/.guix-profile/include:" profile "/include -export LIBRARY_PATH=$HOME/.guix-profile/lib:" profile "/lib export INFOPATH=$HOME/.guix-profile/share/info:/run/current-system/profile/share/info -alias ls='ls -p --color' -alias ll='ls -l' ")) (skel (skeleton-directory skeletons))) (file-union "etc" @@ -414,7 +409,7 @@ alias ll='ls -l' ("nsswitch.conf" ,#~#$nsswitch) ("skel" ,#~#$skel) ("shells" ,#~#$shells) - ("profile" ,#~#$bashrc) + ("profile" ,#~#$profile) ("hosts" ,#~#$hosts-file) ("localtime" ,#~(string-append #$tzdata "/share/zoneinfo/" #$timezone)) diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 6970021..4a2322b 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -115,9 +115,13 @@ (copy-file (car (find-files #$guile-wm "wm-init-sample.scm")) #$output))) - (mlet %store-monad ((bashrc (text-file "bashrc" "\ -# Allow non-login shells such as an xterm to get things right. -test -f /etc/profile && source /etc/profile\n")) + (mlet %store-monad ((profile (text-file "bash_profile" "\ +# Honor per-interactive-shell startup file +if [ -f ~/.bashrc ]; then . ~/.bashrc; fi\n")) + (bashrc (text-file "bashrc" "\ +PS1='\\u@\\h \\w\\$ ' +alias ls='ls -p --color' +alias ll='ls -l'\n")) (guile-wm (gexp->derivation "guile-wm" copy-guile-wm #:modules '((guix build utils)))) @@ -127,7 +131,8 @@ XTerm*metaSendsEscape: true\n")) (gdbinit (text-file "gdbinit" "\ # Tell GDB where to look for separate debugging files. set debug-file-directory ~/.guix-profile/lib/debug\n"))) - (return `((".bashrc" ,bashrc) + (return `((".bash_profile" ,profile) + (".bashrc" ,bashrc) (".Xdefaults" ,xdefaults) (".guile-wm" ,guile-wm) (".gdbinit" ,gdbinit))))) -- 2.1.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-system-Add-skeleton-.zshrc.patch --] [-- Type: text/x-patch, Size: 1324 bytes --] From 043e4d9b6743654e048d3495cb5bfa592d17e6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> Date: Fri, 5 Dec 2014 21:17:49 +0800 Subject: [PATCH 2/2] system: Add skeleton '.zshrc'. * gnu/system/shadow.scm (default-skeletons): Add .zshrc. --- gnu/system/shadow.scm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 4a2322b..a0b9f56 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -122,6 +122,9 @@ if [ -f ~/.bashrc ]; then . ~/.bashrc; fi\n")) PS1='\\u@\\h \\w\\$ ' alias ls='ls -p --color' alias ll='ls -l'\n")) + (zshrc (text-file "zshrc" "\ +# Honor system-wide environment variables +source /etc/profile\n")) (guile-wm (gexp->derivation "guile-wm" copy-guile-wm #:modules '((guix build utils)))) @@ -133,6 +136,7 @@ XTerm*metaSendsEscape: true\n")) set debug-file-directory ~/.guix-profile/lib/debug\n"))) (return `((".bash_profile" ,profile) (".bashrc" ,bashrc) + (".zshrc" ,zshrc) (".Xdefaults" ,xdefaults) (".guile-wm" ,guile-wm) (".gdbinit" ,gdbinit))))) -- 2.1.2 [-- Attachment #4: Type: text/plain, Size: 284 bytes --] I find `su` to bash will give a non-useable shell with PATH set to '/sbin:/bin:/usr/sbin:/usr/bin'. This is because su/pam reset the PATH to this default value. To solve this, we can add /etc/environment and use pam_env.so for su. (imo not worth it :) `su -l` and `sudo` work fine. ^ permalink raw reply related [flat|nested] 18+ messages in thread
* /etc/profile and .zshrc skeleton 2014-12-05 13:57 ` 宋文武 @ 2014-12-06 22:35 ` Ludovic Courtès 2014-12-07 4:06 ` 宋文武 0 siblings, 1 reply; 18+ messages in thread From: Ludovic Courtès @ 2014-12-06 22:35 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel (I think I had overlooked this email earlier today, sorry for the confusion.) 宋文武 <iyzsong@gmail.com> skribis: > From 42ccd7a445c9676db6d2c7b2b0583db45be245aa Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> > Date: Fri, 5 Dec 2014 20:01:07 +0800 > Subject: [PATCH 1/2] system: Cleanup bash startup files. > > * gnu/system.scm (etc-directory) (bashrc): Rename to (profile). > 'CPATH', 'LIBRARY_PATH': Remove. > 'PS1', 'alias ls', 'alias ll': Move to ... > * gnu/system/shadow.scm (default-skeletons): > (.bashrc): ... here. Don't source /etc/profile. > (.bash_profile): New skeleton. One last thing: I think CPATH and LIBRARY_PATH (and eventually additional search path variables) should remain in /etc/profile. WDYT? > From 043e4d9b6743654e048d3495cb5bfa592d17e6c4 Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> > Date: Fri, 5 Dec 2014 21:17:49 +0800 > Subject: [PATCH 2/2] system: Add skeleton '.zshrc'. > > * gnu/system/shadow.scm (default-skeletons): Add .zshrc. OK. Ludo’. PS: In the future it may be easier for review to have one thread per patch, as per ‘git send-email’. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: /etc/profile and .zshrc skeleton 2014-12-06 22:35 ` /etc/profile and .zshrc skeleton Ludovic Courtès @ 2014-12-07 4:06 ` 宋文武 2014-12-07 20:35 ` Ludovic Courtès 0 siblings, 1 reply; 18+ messages in thread From: 宋文武 @ 2014-12-07 4:06 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel Ludovic Courtès <ludo@gnu.org> writes: > (I think I had overlooked this email earlier today, sorry for the > confusion.) Sorry for my mess. > > 宋文武 <iyzsong@gmail.com> skribis: > >> From 42ccd7a445c9676db6d2c7b2b0583db45be245aa Mon Sep 17 00:00:00 2001 >> From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> >> Date: Fri, 5 Dec 2014 20:01:07 +0800 >> Subject: [PATCH 1/2] system: Cleanup bash startup files. >> >> * gnu/system.scm (etc-directory) (bashrc): Rename to (profile). >> 'CPATH', 'LIBRARY_PATH': Remove. >> 'PS1', 'alias ls', 'alias ll': Move to ... >> * gnu/system/shadow.scm (default-skeletons): >> (.bashrc): ... here. Don't source /etc/profile. >> (.bash_profile): New skeleton. > > One last thing: I think CPATH and LIBRARY_PATH (and eventually > additional search path variables) should remain in /etc/profile. I'll prefer use `guix environment' for dev, just install applications to profile. > > WDYT? > >> From 043e4d9b6743654e048d3495cb5bfa592d17e6c4 Mon Sep 17 00:00:00 2001 >> From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@gmail.com> >> Date: Fri, 5 Dec 2014 21:17:49 +0800 >> Subject: [PATCH 2/2] system: Add skeleton '.zshrc'. >> >> * gnu/system/shadow.scm (default-skeletons): Add .zshrc. Ah, this should be ~/.zlogin. > > OK. > > Ludo’. > > PS: In the future it may be easier for review to have one thread per > patch, as per ‘git send-email’. Ok, I just wait for the msmtp to use git send-email :) ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: /etc/profile and .zshrc skeleton 2014-12-07 4:06 ` 宋文武 @ 2014-12-07 20:35 ` Ludovic Courtès 0 siblings, 0 replies; 18+ messages in thread From: Ludovic Courtès @ 2014-12-07 20:35 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel 宋文武 <iyzsong@gmail.com> skribis: > Ludovic Courtès <ludo@gnu.org> writes: >> One last thing: I think CPATH and LIBRARY_PATH (and eventually >> additional search path variables) should remain in /etc/profile. > I'll prefer use `guix environment' for dev, just install applications to > profile. I agree that ‘guix environment’ is usually the preferred approach. Yet, I thought it may be better to keep the other approach working out of the box by default, to avoid unnecessary user frustration. Thinking more, there are a number of other search path environment variables that would be candidate for /etc/profile: GUILE_LOAD_PATH, PKG_CONFIG_PATH, MANPATH, PERL5LIB, etc. But perhaps some of them are better left handled by the user? How would we draw the line between those that /etc/profile defines by default, and those that users have to define by themselves? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2014-12-07 20:36 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-11-27 15:58 use zsh as login shell 宋文武 2014-11-27 20:15 ` Ludovic Courtès 2014-11-28 15:06 ` 宋文武 2014-11-28 22:26 ` Ludovic Courtès 2014-11-29 3:24 ` 宋文武 2014-12-01 12:57 ` Ludovic Courtès 2014-12-02 14:43 ` 宋文武 2014-12-04 23:10 ` Ludovic Courtès 2014-12-05 5:11 ` Mark H Weaver 2014-12-05 18:54 ` Ludovic Courtès 2014-12-05 11:21 ` 宋文武 2014-12-06 8:04 ` use zsh and fish " 宋文武 2014-12-06 15:09 ` Ludovic Courtès 2014-11-28 15:11 ` use zsh " 宋文武 2014-12-05 13:57 ` 宋文武 2014-12-06 22:35 ` /etc/profile and .zshrc skeleton Ludovic Courtès 2014-12-07 4:06 ` 宋文武 2014-12-07 20:35 ` Ludovic Courtès
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.