Re: use zsh as login shell

2014-12-05 Thread Ludovic Courtès
Mark H Weaver  skribis:

> l...@gnu.org (Ludovic Courtès) writes:
>
>> 宋文武  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-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?= 
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?= 
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" ,x

Re: use zsh as login shell

2014-12-05 Thread 宋文武
Ludovic Courtès  writes:

> 宋文武  skribis:
>
>> Ludovic Courtès  writes:
>>
>>> 宋文武  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?= 
>> 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’.



Re: use zsh as login shell

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

> 宋文武  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-04 Thread Ludovic Courtès
宋文武  skribis:

> Ludovic Courtès  writes:
>
>> 宋文武  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?= 
> 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’.



Re: use zsh as login shell

2014-12-02 Thread 宋文武
Ludovic Courtès  writes:

> 宋文武  skribis:
>
>> Ludovic Courtès  writes:
>>
>>> 宋文武  skribis:
>>>
 Ludovic Courtès  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?= 
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 "/includ

Re: use zsh as login shell

2014-12-01 Thread Ludovic Courtès
宋文武  skribis:

> Ludovic Courtès  writes:
>
>> 宋文武  skribis:
>>
>>> Ludovic Courtès  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  writes:

> 宋文武  skribis:
>
>> Ludovic Courtès  writes:
>>
>>> 宋文武  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’.



Re: use zsh as login shell

2014-11-28 Thread Ludovic Courtès
宋文武  skribis:

> Ludovic Courtès  writes:
>
>> 宋文武  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  writes:

> 宋文武  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  writes:

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



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).