137 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
# inspired from: https://raw.githubusercontent.com/necolas/dotfiles/master/shell/bash_prompt
 | 
						|
 | 
						|
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
 |