zshrc: New prompt: Provide fallback in case promptinit fails
[grml-etc-core.git] / etc / zsh / zshrc
index cfb1b97..7e2e53a 100644 (file)
@@ -1540,20 +1540,43 @@ if zrcautoload promptinit && promptinit 2>/dev/null ; then
         add-zsh-hook precmd battery
     fi
     if [[ "$TERM" == dumb ]] ; then
+        zstyle ":prompt:grml(|-large|-chroot):*:items:grml-chroot" pre ''
+        zstyle ":prompt:grml(|-large|-chroot):*:items:grml-chroot" post ' '
         for i in rc user path jobs history date time shell-level; do
             zstyle ":prompt:grml(|-large|-chroot):*:items:$i" pre ''
-            zstyle ':prompt:grml(|-large|-chroot):*:items:$i' post ''
+            zstyle ":prompt:grml(|-large|-chroot):*:items:$i" post ''
         done
         unset i
         zstyle ':prompt:grml(|-large|-chroot):right:setup' use-rprompt false
-    elif (( EUID != 0 )); then
+    elif (( EUID == 0 )); then
         zstyle ':prompt:grml(|-large|-chroot):*:items:user' pre '%F{red}'
     fi
+
+    # Finally enable one of the prompts.
+    if [[ -n $GRML_CHROOT ]]; then
+        prompt grml-chroot
+    elif [[ $GRMLPROMPT -gt 0 ]]; then
+        prompt grml-large
+    else
+        prompt grml
+    fi
 else
     print 'Notice: no promptinit available :('
-fi
 
-setopt prompt_subst
+    # Support a fallback, in case promptsys isn't available.
+    setopt prompt_subst
+
+    precmd() { (( ${+functions[vcs_info]} )) && vcs_info; }
+
+    p0="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}"
+    p1="${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< "'${vcs_info_msg_0_}'"%# "
+    if (( EUID == 0 )); then
+        PROMPT="${BLUE}${p0}${RED}${p1}"
+    else
+        PROMPT="${RED}${p0}${BLUE}${p1}"
+    fi
+    unset p0 p1
+fi
 
 # make sure to use right prompt only when not running a command
 is41 && setopt transient_rprompt