Re: use zsh as login shell

2014-12-05 Thread 宋文武
Here are my new patches:
Yeh, just add ~/.zshrc to source /etc/profie is enough.

From 42ccd7a445c9676db6d2c7b2b0583db45be245aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= iyzs...@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

From 043e4d9b6743654e048d3495cb5bfa592d17e6c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= iyzs...@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)
   

Re: use zsh as login shell

2014-12-05 Thread Ludovic Courtès
Mark H Weaver m...@netris.org skribis:

 l...@gnu.org (Ludovic Courtès) writes:

 宋文武 iyzs...@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’.



Re: use zsh as login shell

2014-12-04 Thread Mark H Weaver
l...@gnu.org (Ludovic Courtès) writes:

 宋文武 iyzs...@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



Re: use zsh as login shell

2014-12-02 Thread 宋文武
Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@gmail.com skribis:

 Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@gmail.com skribis:

 Ludovic Courtès l...@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:
From 1e400957b29a47f63548df39b36a7c0f1d8a37d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= iyzs...@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 71b..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 

Re: use zsh as login shell

2014-12-01 Thread Ludovic Courtès
宋文武 iyzs...@gmail.com skribis:

 Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@gmail.com skribis:

 Ludovic Courtès l...@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’.



Re: use zsh as login shell

2014-11-28 Thread 宋文武
Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@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’.



Re: use zsh as login shell

2014-11-28 Thread 宋文武
Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@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’.



Re: use zsh as login shell

2014-11-28 Thread Ludovic Courtès
宋文武 iyzs...@gmail.com skribis:

 Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@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’.



Re: use zsh as login shell

2014-11-28 Thread 宋文武
Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@gmail.com skribis:

 Ludovic Courtès l...@gnu.org writes:

 宋文武 iyzs...@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’.



use zsh as login shell

2014-11-27 Thread 宋文武
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).




Re: use zsh as login shell

2014-11-27 Thread Ludovic Courtès
宋文武 iyzs...@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’.