71 lines
2.1 KiB
Text
71 lines
2.1 KiB
Text
vscripts="${HOME}/vscripts"
|
|
[[ -d ${vscripts} && ${PATH} != *${vscripts}* ]] && export PATH=${PATH}:${vscripts}
|
|
|
|
completion_path='/usr/share/bash-completion/bash_completion'
|
|
[[ -r "${completion_path}" ]] && . "${completion_path}"
|
|
|
|
# because fuck you thats' why
|
|
fuck() { echo 'no, fuck you'; }
|
|
|
|
# some cool git stuff
|
|
gdiff() { /usr/bin/git diff --color "$@"; }
|
|
|
|
gdf()
|
|
{
|
|
local fancydiff='/usr/bin/diff-so-fancy'
|
|
local githighlight='/usr/share/git/diff-highlight/diff-highlight'
|
|
if [[ -x ${fancydiff} ]]; then
|
|
gdiff "$@" | ${fancydiff} | less --tabs=4 -RSFX
|
|
elif [[ -x ${githighlight} ]]; then
|
|
gdiff "$@" | ${githighlight} | less --tabs=4 -RSFX
|
|
else
|
|
gdiff "$@"
|
|
fi
|
|
}
|
|
|
|
git_prompt()
|
|
{
|
|
# FIXME:
|
|
# upon the first traverse into the git repository, we always get staged
|
|
# count instead of unstaged, that is weird
|
|
prompt_command
|
|
if ! raw_status="$(git status --porcelain -bu 2>/dev/null)"; then
|
|
return
|
|
fi
|
|
git_status=''
|
|
staged_count=0
|
|
unstaged_count=0
|
|
untracked_count=0
|
|
unmerged_count=0
|
|
|
|
while read line; do
|
|
if [[ "${line:0:2}" == '##' ]]; then
|
|
read branch_info <<< "${line:3}"
|
|
fi
|
|
[[ "${line:0:2}" =~ .[MD] ]] && (( unstaged_count++ ))
|
|
[[ "${line:0:2}" =~ [MDARC]. ]] && (( staged_count++ ))
|
|
[[ "${line:0:2}" == '??' ]] && (( untracked_count++ ))
|
|
[[ "${line:0:2}" =~ (U[ADU]|A[AU]|D[DU]) ]] && (( unmerged_count++ ))
|
|
done <<< "${raw_status}"
|
|
|
|
(( $unstaged_count > 0 )) && git_status+="${pmagenta}~${unstaged_count}"
|
|
(( $staged_count > 0 )) && git_status+="${pyellow}+${staged_count}"
|
|
(( $untracked_count > 0 )) && git_status+="${pcyan}?${untracked_count}"
|
|
(( $unmerged_count > 0 )) && git_status+="${pred}!${unmerged_count}"
|
|
[[ -z "${git_status}" ]] && git_status='.'
|
|
|
|
full_status="{ ${pblue}${branch_info}${preset} | ${git_status}${preset} }"
|
|
IFS="$ifs_temp"
|
|
PS1="${ps_line1} ${full_status}\n${ps_line2}"
|
|
}
|
|
|
|
gitmode()
|
|
{
|
|
if [[ -n "${OLD_PROMPT}" ]]; then
|
|
PROMPT_COMMAND=${OLD_PROMPT}
|
|
unset OLD_PROMPT
|
|
else
|
|
OLD_PROMPT=${PROMPT_COMMAND}
|
|
PROMPT_COMMAND=git_prompt
|
|
fi
|
|
}
|