zshsrc + zshenv: support hostnamectl iff hostname isn't present
[grml-etc-core.git] / etc / zsh / zshenv
index ab5c0fd..9b70921 100644 (file)
@@ -3,7 +3,6 @@
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Sam Mai 17 22:52:27 CEST 2008 [mika]
 ################################################################################
 # This file is sourced on all invocations of the shell.
 # It is the 1st file zsh reads; it's read for every shell,
 # Global Order: zshenv, zprofile, zshrc, zlogin
 ################################################################################
 
-# support ${HOME}/.zshenv:
-if [[ -z "$ALREADY_SOURCED_ZSHENV" ]] ; then
-   export ALREADY_SOURCED_ZSHENV=1
-fi
-
 # language settings (read in /etc/environment before /etc/default/locale as
 # the latter one is the default on Debian nowadays)
 # no xsource() here because it's only created in zshrc! (which is good)
 [[ -r /etc/environment ]] && source /etc/environment
 
 # set environment variables (important for autologin on tty)
-export HOSTNAME=${HOSTNAME:-$(hostname)}
+if [ -n "${HOSTNAME}" ] ; then
+  export HOSTNAME="${HOSTNAME}"
+elif [[ -x $(which hostname) ]] ; then
+  export HOSTNAME="$(hostname)"
+elif [[ -x $(which hostnamectl) ]] ; then
+  export HOSTNAME="$(hostnamectl --static)"
+fi
 
 # make sure /usr/bin/id is available
 if [[ -x /usr/bin/id ]] ; then
@@ -49,58 +49,81 @@ if [[ -f /etc/grml_cd ]] ; then
     fi
 fi
 
-# set $PATH
+## set $PATH
 # gentoo users have to source /etc/profile.env
 if [[ -r /etc/gentoo-release ]] ; then
-
     [[ -r /etc/profile.env ]] && source /etc/profile.env
+fi
 
-    if (( EUID != 0 )); then
-        PATH="$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/games:/usr/NX/bin:$PATH"
-    else
-        PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/NX/bin:$PATH"
-    fi
-else
-# support extra software in special directory outside of squashfs environment in live-cd mode
-    if [[ -f /etc/grml_cd ]] ; then
-       [[ -r /cdrom/addons ]]      && ADDONS=':/cdrom/addons'
-       [[ -r /live/image/addons ]] && ADDONS=':/live/image/addons'
-       [[ -r /etc/grml/my_path ]]  && ADDONS=":$(cat /etc/grml/my_path)"
-    fi
-
-    if (( EUID != 0 )); then
-        PATH="$HOME/bin:/bin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/games:/usr/NX/bin$ADDONS"
-    else
-        PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/NX/bin$ADDONS"
-    fi
+# support extra scripts/software in special directory outside of squashfs environment in live mode
+if [[ -f /etc/grml_cd ]] ; then
+  [[ -r /run/live/medium/scripts ]] && ADDONS='/run/live/medium/scripts'
+  [[ -r /etc/grml/my_path ]] && ADDONS="$(cat /etc/grml/my_path)"
 fi
 
 # Solaris
 case $(uname 2>/dev/null) in
   SunOS)
-     PATH="/usr/bin:/usr/sbin:/usr/ccs/bin:/opt/SUNWspro/bin:/usr/ucb:/usr/sfw/bin:/usr/gnu/bin:/usr/openwin/bin:/opt/csw/bin:/opt/swf/bin:/sbin:/usr/sbin:~/bin"
-     # LD_LIBRARY_PATH="/opt/csw/lib:/opt/sfw/lib:/usr/lib:/usr/local/lib:/usr/ccs/lib:/usr/openwin/lib:/usr/ucb/lib"
-     # MANPATH="$MANPATH:/opt/csw/man:/usr/man:/usr/share/man:/usr/local/man:/opt/sfw/man"
+    path=(
+      /usr/bin
+      /usr/sbin
+      /usr/ccs/bin
+      /opt/SUNWspro/bin
+      /usr/ucb
+      /usr/sfw/bin
+      /usr/gnu/bin
+      /usr/openwin/bin
+      /opt/csw/bin
+      /sbin
+      ~/bin
+    )
 esac
 
+# generic $PATH handling
+if (( EUID != 0 )); then
+  path=(
+    $HOME/bin
+    /usr/local/bin
+    /usr/bin
+    /bin
+    /usr/local/sbin
+    /usr/sbin
+    /sbin
+    /usr/local/games
+    /usr/games
+    "${ADDONS}"
+    "${path[@]}"
+  )
+else
+  path=(
+    $HOME/bin
+    /usr/local/sbin
+    /usr/local/bin
+    /sbin
+    /bin
+    /usr/sbin
+    /usr/bin
+    "${ADDONS}"
+    "${path[@]}"
+  )
+fi
+
+# remove empty components to avoid '::' ending up + resulting in './' being in $PATH
+path=( "${path[@]:#}" )
+
+typeset -U path
+
 # less (:=pager) options:
 #  export LESS=C
-if [[ -x /usr/bin/lesspipe.sh ]] ; then
-    export LESSOPEN="|lesspipe.sh %s"
-elif [[ -x /usr/bin/lesspipe ]] ; then
+typeset -a lp; lp=( ${^path}/lesspipe(N) )
+if (( $#lp > 0 )) && [[ -x $lp[1] ]] ; then
     export LESSOPEN="|lesspipe %s"
+elif [[ -x /usr/bin/lesspipe.sh ]] ; then
+    export LESSOPEN="|lesspipe.sh %s"
 fi
-export READNULLCMD=${PAGER:-/usr/bin/pager}
+unset lp
 
-# support termcap colors when using PAGER=less:
-# TODO: move these to zshrc, they are only relevant in interactive shells
-export LESS_TERMCAP_mb=$'\E[01;31m'
-export LESS_TERMCAP_md=$'\E[01;31m'
-export LESS_TERMCAP_me=$'\E[0m'
-export LESS_TERMCAP_se=$'\E[0m'
-export LESS_TERMCAP_so=$'\E[01;44;33m'
-export LESS_TERMCAP_ue=$'\E[0m'
-export LESS_TERMCAP_us=$'\E[01;32m'
+export READNULLCMD=${PAGER:-/usr/bin/pager}
 
 # allow zeroconf for distcc
 export DISTCC_HOSTS="+zeroconf"