226 lines
5.8 KiB
Bash
226 lines
5.8 KiB
Bash
#!/usr/bin/env bash
|
||
|
||
THEME_PROMPT_HOST='\H'
|
||
#SCM_THEME_PROMPT_DIRTY=' ×'
|
||
SCM_THEME_PROMPT_DIRTY=' ※'
|
||
SCM_THEME_PROMPT_CLEAN=' ✓'
|
||
SCM_THEME_PROMPT_PREFIX=' |'
|
||
SCM_THEME_PROMPT_SUFFIX='|'
|
||
|
||
SCM_GIT='git'
|
||
SCM_GIT_CHAR='±'
|
||
|
||
SCM_HG='hg'
|
||
SCM_HG_CHAR='Ħ'
|
||
|
||
SCM_SVN='svn'
|
||
SCM_SVN_CHAR='ϟ'
|
||
|
||
SCM_NONE='NONE'
|
||
SCM_NONE_CHAR='○'
|
||
|
||
RVM_THEME_PROMPT_PREFIX=' |'
|
||
RVM_THEME_PROMPT_SUFFIX='|'
|
||
|
||
VIRTUALENV_THEME_PROMPT_PREFIX=' |'
|
||
VIRTUALENV_THEME_PROMPT_SUFFIX='|'
|
||
|
||
RBENV_THEME_PROMPT_PREFIX=' |'
|
||
RBENV_THEME_PROMPT_SUFFIX='|'
|
||
|
||
RBFU_THEME_PROMPT_PREFIX=' |'
|
||
RBFU_THEME_PROMPT_SUFFIX='|'
|
||
|
||
function scm {
|
||
if [[ -f .git/HEAD ]]; then SCM=$SCM_GIT
|
||
elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$SCM_GIT
|
||
elif [[ -d .hg ]]; then SCM=$SCM_HG
|
||
elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$SCM_HG
|
||
elif [[ -d .svn ]]; then SCM=$SCM_SVN
|
||
else SCM=$SCM_NONE
|
||
fi
|
||
}
|
||
|
||
function scm_prompt_char {
|
||
if [[ -z $SCM ]]; then scm; fi
|
||
if [[ $SCM == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR
|
||
elif [[ $SCM == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR
|
||
elif [[ $SCM == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR
|
||
else SCM_CHAR=$SCM_NONE_CHAR
|
||
fi
|
||
}
|
||
|
||
function scm_prompt_vars {
|
||
scm
|
||
scm_prompt_char
|
||
SCM_DIRTY=0
|
||
SCM_STATE=''
|
||
[[ $SCM == $SCM_GIT ]] && git_prompt_vars && return
|
||
[[ $SCM == $SCM_HG ]] && hg_prompt_vars && return
|
||
[[ $SCM == $SCM_SVN ]] && svn_prompt_vars && return
|
||
}
|
||
|
||
function scm_prompt_info {
|
||
scm
|
||
scm_prompt_char
|
||
SCM_DIRTY=0
|
||
SCM_STATE=''
|
||
[[ $SCM == $SCM_GIT ]] && git_prompt_info && return
|
||
[[ $SCM == $SCM_HG ]] && hg_prompt_info && return
|
||
[[ $SCM == $SCM_SVN ]] && svn_prompt_info && return
|
||
}
|
||
|
||
function git_prompt_vars {
|
||
if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
|
||
SCM_DIRTY=1
|
||
SCM_STATE=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||
else
|
||
SCM_DIRTY=0
|
||
SCM_STATE=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||
fi
|
||
SCM_PREFIX=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||
SCM_SUFFIX=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||
local ref=$(git symbolic-ref HEAD 2> /dev/null)
|
||
SCM_BRANCH=${ref#refs/heads/}
|
||
SCM_CHANGE=$(git rev-parse HEAD 2>/dev/null)
|
||
}
|
||
|
||
function svn_prompt_vars {
|
||
if [[ -n $(svn status 2> /dev/null) ]]; then
|
||
SCM_DIRTY=1
|
||
SCM_STATE=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||
else
|
||
SCM_DIRTY=0
|
||
SCM_STATE=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||
fi
|
||
SCM_PREFIX=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||
SCM_SUFFIX=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||
SCM_BRANCH=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
|
||
SCM_CHANGE=$(svn info 2> /dev/null | sed -ne 's#^Revision: ##p' )
|
||
}
|
||
|
||
function hg_prompt_vars {
|
||
if [[ -n $(hg status 2> /dev/null) ]]; then
|
||
SCM_DIRTY=1
|
||
SCM_STATE=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
|
||
else
|
||
SCM_DIRTY=0
|
||
SCM_STATE=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
|
||
fi
|
||
SCM_PREFIX=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
|
||
SCM_SUFFIX=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
|
||
SCM_BRANCH=$(hg summary 2> /dev/null | grep branch | awk '{print $2}')
|
||
SCM_CHANGE=$(hg summary 2> /dev/null | grep parent | awk '{print $2}')
|
||
}
|
||
|
||
function rvm_version_prompt {
|
||
if which rvm &> /dev/null; then
|
||
rvm=$(rvm tools identifier) || return
|
||
echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
|
||
fi
|
||
}
|
||
|
||
function rbenv_version_prompt {
|
||
if which rbenv &> /dev/null; then
|
||
rbenv=$(rbenv version-name) || return
|
||
echo -e "$RBENV_THEME_PROMPT_PREFIX$rbenv$RBENV_THEME_PROMPT_SUFFIX"
|
||
fi
|
||
}
|
||
|
||
function rbfu_version_prompt {
|
||
if [[ $RBFU_RUBY_VERSION ]]; then
|
||
echo -e "${RBFU_THEME_PROMPT_PREFIX}${RBFU_RUBY_VERSION}${RBFU_THEME_PROMPT_SUFFIX}"
|
||
fi
|
||
}
|
||
|
||
function ruby_version_prompt {
|
||
echo -e "$(rbfu_version_prompt)$(rbenv_version_prompt)$(rvm_version_prompt)"
|
||
}
|
||
|
||
function virtualenv_prompt {
|
||
if which virtualenv &> /dev/null; then
|
||
virtualenv=$([ ! -z "$VIRTUAL_ENV" ] && echo "`basename $VIRTUAL_ENV`") || return
|
||
echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
|
||
fi
|
||
}
|
||
|
||
# conditional colors
|
||
function user_type_color_prompt {
|
||
if [ ${UID} -eq 0 ] ; then
|
||
if [ "${USER}" == "${LOGNAME}" ]; then
|
||
if [[ ${SUDO_USER} ]]; then
|
||
echo -e "$bold_red"
|
||
else
|
||
echo -e "$red"
|
||
fi
|
||
else
|
||
echo -e "$yellow"
|
||
fi
|
||
else
|
||
if [ ${USER} == ${LOGNAME} ]; then
|
||
echo -e "$green"
|
||
else
|
||
echo -e "$orange"
|
||
fi
|
||
fi
|
||
}
|
||
|
||
function host_connection_color_prompt {
|
||
if [[ ${SSH_CLIENT} ]] || [[ ${SSH2_CLIENT} ]]; then
|
||
SSH_FLAG=1
|
||
fi
|
||
if [[ ${SSH_FLAG} -eq 1 ]]; then
|
||
echo -e "$cyan"
|
||
elif [[ -n ${SESS_SRC} ]]; then
|
||
if [[ "${SESS_SRC}" = "(:0.0)" ]]; then
|
||
echo -e "$green"
|
||
else
|
||
local parent_process=$(cat /proc/${PPID}/cmdline)
|
||
if [[ "$parent_process" = "in.rlogind*" ]]; then
|
||
echo -e "$orange"
|
||
elif [[ "$parent_process" = "in.telnetd*" ]]; then
|
||
echo -e "$yellow"
|
||
else
|
||
echo -e "$bold_red"
|
||
fi
|
||
fi
|
||
elif [[ "${SESS_SRC}" = "" ]]; then
|
||
echo -e "$green"
|
||
else
|
||
echo -e "$red"
|
||
fi
|
||
}
|
||
|
||
function writeable_path_color_prompt {
|
||
if [[ -w $PWD ]]; then
|
||
echo -e "$green"
|
||
else
|
||
echo -e "$red"
|
||
fi
|
||
}
|
||
|
||
# backwards-compatibility
|
||
function git_prompt_info {
|
||
git_prompt_vars
|
||
echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
|
||
}
|
||
|
||
function svn_prompt_info {
|
||
svn_prompt_vars
|
||
echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
|
||
}
|
||
|
||
function hg_prompt_info() {
|
||
hg_prompt_vars
|
||
echo -e "$SCM_PREFIX$SCM_BRANCH:${SCM_CHANGE#*:}$SCM_STATE$SCM_SUFFIX"
|
||
}
|
||
|
||
function scm_char {
|
||
scm_prompt_char
|
||
echo -e "$SCM_CHAR"
|
||
}
|
||
|
||
function prompt_char {
|
||
scm_char
|
||
}
|