darkrc/shell/prompt

152 lines
3.3 KiB
Plaintext

rlevel() {
if [ -n "$RANGER_LEVEL" ]
then if [ "$RANGER_LEVEL" -gt 1 ] && [ ! -z "$3" ]
then
/bin/echo -ne "$1$3$RANGER_LEVEL "
else
/bin/echo -ne "$1 "
fi
fi
if [ -n "$VIM_LEVEL" ]
then if [ "$VIM_LEVEL" -gt 1 ] && [ ! -z "$3" ]
then
/bin/echo -ne "$2$3$VIM_LEVEL "
else
/bin/echo -ne "$2 "
fi
fi
}
numjobs() {
jobs=$(jobs | wc -l)
if [ $jobs -gt 1 ] && [ ! -z "$2" ]
then echo "$1$2$jobs "
elif [ $jobs -gt 0 ]
then echo "$1 "
fi
}
git__fetch() {
if [ -f "$1/.git" ]
then dir="$(cat $top/.git | sed -e 's/^gitdir: //')"
else dir="$1/.git"
fi
if [ -n "$SHELL_AUTOFETCH_TIMEOUT" ]; then
timeout=$SHELL_AUTOFETCH_TIMEOUT
else
timeout=60
fi
if [ -f "$dir/FETCH_HEAD" ]; then
diff=$(($(date +%s) - $(stat -c %Y $dir/FETCH_HEAD)))
else
diff=9999
fi
if [ "$diff" -gt "$timeout" ]
then run=1
else run=0
fi
if [ "$run" -gt 0 ]; then
touch $dir/FETCH_HEAD
nohup git fetch > /dev/null 2>&1 &
fi
echo $run
}
gitprompt () {
top=$(timeout 1 git rev-parse --show-toplevel 2>/dev/null)
if [ -n "$top" ]
then
if [ "$SHELL_AUTOFETCH_TIMEOUT" -gt 0 ]; then
autofetch=$(git__fetch $top)
f=$((2-$autofetch))
else
f=3
fi
git_status=$(timeout 1 git status --short 2>/dev/null)
git_branch=$(git branch | grep -Po '(?<=\* )[[:alnum:]_.-]*')
modif=$(echo "$git_status" | grep -Po '^\s*M' | wc -l)
untracked=$(echo "$git_status" | grep -Po '^\?\?' | wc -l)
added=$(echo "$git_status" | grep -Po '^\s*[A]' | wc -l)
deleted=$(echo "$git_status" | grep -Po '^\s*[D]' | wc -l)
renamed=$(echo "$git_status" | grep -Eo '^\s*R' | wc -l)
stat=$(git branch -vv | grep -P '^\*' | grep -Po '\[.*\]')
ahead=$(echo $stat | grep -Po '(?<=ahead )\d*')
behind=$(echo $stat | grep -Po '(?<=behind )\d*')
gray='\033[00;37m'
blue='\033[01;34m'
yellow='\033[01;33m'
red='\033[01;31m'
green='\033[01;32m'
purple='\033[01;35m'
/bin/echo -ne "\033[00;3${f}mδ\033[00;33m "
/bin/echo -ne "${purple}$(basename $top) "
# BRANCH
if [ -z "$git_branch" ]
then
head=$(git rev-parse --short HEAD 2>&1)
if [ "$(echo "$head" | grep '^fatal')" ]
then
git_branch='{no commits}'
else
git_branch='#'"$head"
fi
fi
if [ "$git_branch" = 'master' ]
then
/bin/echo -ne "$blue"
elif [ "$git_branch" = 'main' ]
then
/bin/echo -ne "$blue"
elif [ $(echo "$git_branch" | grep '^#' ) ]
then
/bin/echo -ne "$red"
else
/bin/echo -ne "$yellow"
fi
/bin/echo -ne "$git_branch\033[00;36m"
# SYNC
if [ -z "$ahead" ] && [ -z "$behind" ]
then
/bin/echo -ne "" # Nothing to do here
elif [ -z "$ahead" ]
then
/bin/echo -ne " ${yellow}↓${behind}"
elif [ -z "$behind" ]
then
/bin/echo -ne " ${green}↑${ahead}"
else
/bin/echo -ne " ${red}↓${behind}${red}↑${ahead}"
fi
# CHANGES
if [ "$modif" = 0 ]
then
/bin/echo -ne # "${gray}:\033[01;36m$modif" # No modified files
else
/bin/echo -ne " \033[01;36m≠$modif" # Modified files
fi
if [ "$added" -ne 0 ]
then
/bin/echo -ne " ${purple}+$added"
fi
if [ "$deleted" -ne 0 ]
then
/bin/echo -ne " ${red}-$deleted"
fi
if [ "$renamed" -ne 0 ]
then
/bin/echo -ne " ${purple}~$renamed"
fi
if [ "$untracked" -ne 0 ]
then
/bin/echo -ne " ${yellow}+$untracked"
fi
/bin/echo -ne "\033[00m"
else
exit 1
fi
}