]> git.phdru.name Git - dotfiles.git/commitdiff
Add .bash_prompt
authorOleg Broytman <phd@phdru.name>
Wed, 24 Feb 2016 10:22:23 +0000 (13:22 +0300)
committerOleg Broytman <phd@phdru.name>
Wed, 24 Feb 2016 10:22:23 +0000 (13:22 +0300)
Downloaded from
https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt

.bash_prompt [new file with mode: 0644]

diff --git a/.bash_prompt b/.bash_prompt
new file mode 100644 (file)
index 0000000..5b5c80f
--- /dev/null
@@ -0,0 +1,146 @@
+#!/bin/bash
+
+# bash_prompt; adapted from
+# https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt
+
+# Example:
+# nicolas@host: ~/.dotfiles on master [+!?$]
+# $
+
+# Screenshot: http://i.imgur.com/DSJ1G.png
+# 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
+
+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
+        tput sgr0 # reset colors
+
+        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)
+        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"
+        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\]@"
+    PS1+="\[$hostStyle\]\h" # host
+    PS1+="\[$reset$white\]: "
+    PS1+="\[$green\]\w" # working directory
+    PS1+="\$(prompt_git \"$white on $cyan\")" # git repository details
+    PS1+="\n"
+    PS1+="\[$reset$white\]\$ \[$reset\]" # $ (and reset color)
+
+    export PS1
+}
+
+set_prompts
+unset set_prompts