]> git.zndr.dk Git - dotfiles.git/commitdiff
Update PS1 prompt
authorJannik Zander <jannikz@gmail.com>
Mon, 23 May 2016 16:36:23 +0000 (18:36 +0200)
committerJannik Zander <jannikz@gmail.com>
Mon, 23 May 2016 16:36:23 +0000 (18:36 +0200)
.config/profile/rc/prompt.sh
.profile

index 80bb47ccacbe2d67bfa38c2d9d03c83df9abe7e9..b1d54f86a35e63374a2066eeb57d646350fa22b8 100644 (file)
-# Bash git prompt solarized
+#!/bin/bash
 
-if [ ! -f "${HOME}/.config/profile/rc/git-prompt.sh" ]; then
-  URL="https://raw.githubusercontent.com/git/git/master/contrib/completion"
-  curl "${URL}/git-prompt.sh" -L -s -o ~/.config/profile/rc/git-prompt.sh
-fi
+# bash_prompt
 
-[ -f ${HOME}/.config/profile/rc/git-prompt.sh ] && . ${HOME}/.config/profile/rc/git-prompt.sh
+# iTerm2 prefs: import Solarized theme (disable bright colors for bold text)
+# Color ref: http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim
+# More tips: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
 
 if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
-        export TERM='gnome-256color';
+  export TERM='gnome-256color';
 elif infocmp xterm-256color >/dev/null 2>&1; then
-        export TERM='xterm-256color';
+  export TERM='xterm-256color';
 fi;
 
-if tput setaf 1 &> /dev/null; then
-  tput sgr0; # reset colors
-  bold=$(tput bold);
-  reset=$(tput sgr0);
-  black=$(tput setaf 0);
-  blue=$(tput setaf 33);
-  cyan=$(tput setaf 37);
-  green=$(tput setaf 64);
-  orange=$(tput setaf 166);
-  purple=$(tput setaf 125);
-  red=$(tput setaf 124);
-  violet=$(tput setaf 61);
-  white=$(tput setaf 15);
-  yellow=$(tput setaf 136);
-else
-  bold='';
-  reset="\e[0m";
-  black="\e[1;30m";
-  blue="\e[1;34m";
-  cyan="\e[1;36m";
-  green="\e[1;32m";
-  orange="\e[1;33m";
-  purple="\e[1;35m";
-  red="\e[1;31m";
-  violet="\e[1;35m";
-  white="\e[1;37m";
-  yellow="\e[1;33m";
-fi;
+if [ ! -f "${HOME}/.config/profile/rc/git-prompt.sh" ]; then
+  URL="https://raw.githubusercontent.com/git/git/master/contrib/completion"
+  curl "${URL}/git-prompt.sh" -L -s -o "${HOME}/.config/profile/rc/git-prompt.sh"
+fi
 
-# Highlight the user name when logged in as root.
-if [[ "${USER}" == "root" ]]; then
-  userStyle="${red}";
-else
-  userStyle="${orange}";
-fi;
+if [ -f "${HOME}/.config/profile/rc/git-prompt.sh" ]; then
+  . ${HOME}/.config/profile/rc/git-prompt.sh
+  # Enabling any of these options will slow down the prompt
+  export GIT_PS1_SHOWDIRTYSTATE=1
+  export GIT_PS1_SHOWSTASHSTATE=1
+  export GIT_PS1_SHOWUNTRACKEDFILES=1
+  export GIT_PS1_SHOWUPSTREAM="auto"
+  export GIT_PS1_STATESEPARATOR=" ["
+
+fi
+
+prompt_git() {
+  local s=""
+  local branchName=""
+
+  # check if the current directory is in a git repository
+  if [ $(git rev-parse --is-inside-work-tree &>/dev/null; printf "%s" $?) == 0 ]; then
+
+    # check if the current directory is in .git before running git checks
+    if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == "false" ]; then
+
+      # ensure index is up to date
+      git update-index --really-refresh  -q &>/dev/null
+
+      # check for uncommitted changes in the index
+      if ! $(git diff --quiet --ignore-submodules --cached); then
+        s="$s+";
+      fi
+
+      # check for unstaged changes
+      if ! $(git diff-files --quiet --ignore-submodules --); then
+        s="$s!";
+      fi
+
+      # check for untracked files
+      if [ -n "$(git ls-files --others --exclude-standard)" ]; then
+        s="$s?";
+      fi
+
+      # check for stashed files
+      if $(git rev-parse --verify refs/stash &>/dev/null); then
+        s="$s$";
+      fi
+
+    fi
+
+    # get the short symbolic ref
+    # if HEAD isn't a symbolic ref, get the short SHA
+    # otherwise, just give up
+    branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \
+                  git rev-parse --short HEAD 2> /dev/null || \
+                  printf "(unknown)")"
+
+    [ -n "$s" ] && s=" [$s]"
+
+    printf "%s" "$1$branchName$s"
+  else
+    return
+  fi
+}
+
+
+set_prompts() {
+  local black=""
+  local blue=""
+  local bold=""
+  local cyan=""
+  local green=""
+  local orange=""
+  local purple=""
+  local red=""
+  local reset=""
+  local white=""
+  local yellow=""
+
+  local hostStyle=""
+  local userStyle=""
+
+  if [ -x /usr/bin/tput ] && tput setaf 1 >& /dev/null; then
+    bold=$(tput bold)
+    reset=$(tput sgr0)
+
+    # Solarized colors
+    # (https://github.com/altercation/solarized/tree/master/iterm2-colors-solarized#the-values)
+    black=$(tput setaf 0)
+    blue=$(tput setaf 33)
+    cyan=$(tput setaf 37)
+    green=$(tput setaf 64)
+    orange=$(tput setaf 166)
+    purple=$(tput setaf 125)
+    red=$(tput setaf 124)
+    violet=$(tput setaf 61)
+    white=$(tput setaf 15)
+    yellow=$(tput setaf 136)
+  else
+    bold=""
+    reset="\e[0m"
+
+    black="\e[1;30m"
+    blue="\e[1;34m"
+    cyan="\e[1;36m"
+    green="\e[1;32m"
+    orange="\e[1;33m"
+    purple="\e[1;35m"
+    red="\e[1;31m"
+    violet="\e[1;35m"
+    white="\e[1;37m"
+    yellow="\e[1;33m"
+  fi
+
+  # build the prompt
+
+  # logged in as root
+  if [[ "$USER" == "root" ]]; then
+      userStyle="\[$bold$red\]"
+  else
+      userStyle="\[$orange\]"
+  fi
+
+  # connected via ssh
+  if [[ "$SSH_TTY" ]]; then
+      hostStyle="\[$bold$red\]"
+  else
+      hostStyle="\[$yellow\]"
+  fi
+
+  # Set the terminal title to the current working directory.
+  PS1="\[\033]0;\w\007\]"
+
+  PS1+="\n" # newline
+  PS1+="\[$userStyle\]\u" # username
+  PS1+="\[$reset$white\] at "
+  PS1+="\[$hostStyle\]\h" # host
+  PS1+="\[$reset$white\] in "
+  PS1+="\[$green\]\w" # working directory
+  #PS1+="\$(prompt_git \"$white on $cyan\")" # git repository details
+  PS1+="$(__git_ps1 ' \[${white}\]on \[${cyan}\]%s]')";  # on branch
+  PS1+="\n"
+  PS1+="\[$reset$white\]\$ \[$reset\]" # $ (and reset color)
+
+  export PS1
+
+  PS2="\[${yellow}\]→ " # `→`
+  PS2+="\[${reset}\]" # reset color
+
+  export PS2;
+}
 
-# Highlight the hostname when connected via SSH.
-if [[ "${SSH_TTY}" ]]; then
-  hostStyle="${bold}${red}";
-else
-  hostStyle="${yellow}";
-fi;
 
-# Enabling any of these options will slow down the prompt
-export GIT_PS1_SHOWDIRTYSTATE=1
-export GIT_PS1_SHOWSTASHSTATE=1
-export GIT_PS1_SHOWUNTRACKEDFILES=1
-export GIT_PS1_SHOWUPSTREAM=1
-
-# Set git prompt
-# Set the terminal title to the current working directory.
-PS1='\[\033]0;\w\007\]';
-PS1+='\[${bold}\]';
-PS1+='\r'; # newline
-PS1+='\[${userStyle}\]\u '; # username
-PS1+='\[${white}\]at ';
-PS1+='\[${hostStyle}\]\h '; # at host
-PS1+='\[${white}\]in ';
-PS1+='\[${green}\]\w '; # in working directory
-PS1+="$(__git_ps1 '\[${white}\]on \[${violet}\]%s\[${blue}\]')";  # on branch
-PS1+='\n'; # newline
-PS1+='\[${white}\]\$ '; # `$`
-PS1+='\[${reset}\]'; # reset color
-export PS1;
-
-PS2='\[${yellow}\]→ '; # `→`
-PS2+='\[${reset}\]'; # reset color
-export PS2;
+set_prompts
+unset set_prompts
index 6edc4e0c56dfe3b9ef18d931f8b3a49a540b683b..c1ae363e078b257d24d9807611d6a9879f356cc9 100644 (file)
--- a/.profile
+++ b/.profile
@@ -12,6 +12,6 @@ if [ -n "${BASH_VERSION}" ]; then
 fi
 
 # set path, environment, prompt etc
-for file in ${HOME}/.config/profile/rc/*; do
+for file in ${HOME}/.config/profile/rc/*.sh; do
   [ -f "$file" ] && . "$file";
 done;