#!/usr/bin/env bash ######################################################################## # bash_prompt, from @mathiasbynens # slightly modified # https://github.com/mathiasbynens/dotfiles/blob/master/.bash_prompt ######################################################################## if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then export TERM='gnome-256color'; elif infocmp xterm-256color >/dev/null 2>&1; then export TERM='xterm-256color'; 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; echo "${?}")" == '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 the index is up to date. git update-index --really-refresh -q &>/dev/null; # Check for uncommitted changes in the index. # shellcheck disable=SC2091 if ! $(git diff --quiet --ignore-submodules --cached); then s+='+'; fi; # Check for unstaged changes. # shellcheck disable=SC2091 if ! $(git diff-files --quiet --ignore-submodules --); then s+='!'; fi; # Check for untracked files. if [ -n "$(git ls-files --others --exclude-standard)" ]; then s+='?'; fi; # Check for stashed files. # shellcheck disable=SC2091 if $(git rev-parse --verify refs/stash &>/dev/null); then s+='$'; fi; fi; # Get the short symbolic ref. # If HEAD isn’t a symbolic ref, get the short SHA for the latest commit # Otherwise, just give up. branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \ git rev-parse --short HEAD 2> /dev/null || \ echo '(unknown)')"; [ -n "${s}" ] && s=" ${s}"; echo -e "${1}${branchName}${orange}${s}"; else return; fi; } # shellcheck disable=SC2034 if tput setaf 1 &> /dev/null; then tput sgr0; # reset colors bold=$(tput bold); dim=$(tput setaf 8); reset=$(tput sgr0); # Tomorrow colors, taken from https://github.com/Slava/vim-colors-tomorrow/blob/master/colors/tomorrow.vim black=$(tput setaf 236); gray=$(tput setaf 242); blue=$(tput setaf 109); green=$(tput setaf 143); cyan=$(tput setaf 43); orange=$(tput setaf 173); purple=$(tput setaf 125); red=$(tput setaf 167); magenta=$(tput setaf 139); violet=$(tput setaf 139); 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; # Highlight the user name when logged in as root. if [[ "${USER}" == "root" ]]; then userStyle="${red}"; else userStyle="${gray}"; fi; if [[ "${SSH_TTY}" ]]; then PS1="\[\033]0;\W • \h\007\]"; # Set the terminal title PS1+="\n"; PS1+="\[${userStyle}\]\u "; # username PS1+="\[${orange}\]\h \[${reset}\]"; # host else PS1="\[\033]0;\W\007\]"; # Set the terminal title PS1+="\n"; fi; PS1+="\[${cyan}\]\w"; # working directory full path PS1+="\$(prompt_git \" \[${gray}\]\")"; # Git repository details PS1+="\n"; PS1+="\[${white}\]→ \[${reset}\]"; # `→` (and reset color) export PS1; PS2="\[${white}\]→ \[${reset}\]"; export PS2;