over-env/bash-init

78 lines
3 KiB
Bash
Executable file

#! /bin/bash
# *very* dirty, but this inferior excuse for a shell deserves nothing better
OVER_PROMPT_CFG="/etc/over/prompt.cfg"
if [ -a "$OVER_PROMPT_CFG" ]; then
source "$OVER_PROMPT_CFG"
fi
function precmd()
{
EXITUS=$?
RAW_DATA="$(/usr/share/over-prompt/data $OVER_PROMPT_OPTS)"
if [ $EXITUS = 0 ]; then
CROSS="|CYAN|\\$|NONE|"
else
CROSS="|RED|${EXITUS}|NONE|:|RED|\\$|NONE|"
fi
if [ $EUID = 0 ]; then
USER_PART="|RED|\\u|NONE|"
else
USER_PART="|GREEN|\\u|NONE|"
fi
home_len=${#HOME}
if [ "${PWD:0:$home_len}" = "$HOME" ]; then
pwd="~${PWD:$home_len}"
else
pwd="$PWD"
fi
if [ -n "$RAW_DATA" ]; then
LOGIN_PART="${RAW_DATA%:::*}"
STATS_PART="[ ${RAW_DATA#*:::} "
pwd_len=${#pwd}
user_len=${#USER}
host_len=${#HOSTNAME}
win_len=${#WINDOW}
STATS_PART_="$(echo ${STATS_PART}|sed 's/|[A-Z]*|//g')"
stats_len=${#STATS_PART_}
max_pwd_len=$((${COLUMNS}-${user_len}-${host_len}-${win_len}-${stats_len}-5))
# 1 kB of spaces... that should be enough. DIRTY, YEAH!
spaces=" "
padding=""
if [ ${pwd_len} -gt ${max_pwd_len} ]; then
pwd="<${pwd:(($pwd_len - $max_pwd_len)):$pwd_len}"
elif [ ${pwd_len} -lt ${max_pwd_len} ]; then
padto=$((${max_pwd_len} - ${pwd_len} + 1))
padding="${spaces:0:$padto}"
fi
PS1="${USER_PART}@${LOGIN_PART} ${padding}${STATS_PART}\n$CROSS "
else
PS1="${USER_PART}@|HOST| |CWD| [|RFLASH|data gathering error|NONE|]\n$CROSS "
fi
PS1="${PS1//|NONE|/\[\033[0m\]}"
PS1="${PS1//|RED|/\[\033[1;31m\]}"
PS1="${PS1//|RFLASH|/\[\033[5;31m\]}"
PS1="${PS1//|GREEN|/\[\033[1;32m\]}"
PS1="${PS1//|DARKGREEN|/\[\033[0;32m\]}"
PS1="${PS1//|BLUE|/\[\033[1;34m\]}"
PS1="${PS1//|YELLOW|/\[\033[1;33m\]}"
PS1="${PS1//|CYAN|/\[\033[1;36m\]}"
PS1="${PS1//|HOST|/$HOSTNAME}"
PS1="${PS1//|TTY|/$WINDOW}"
PS1="${PS1//|CWD|/$pwd}"
unset -v LOGIN_PART STATS_PART pwd_len user_len host_len win_len STATS_PART_ stats_len max_pwd_len spaces padding pwd padto padding
}
PROMPT_COMMAND="precmd"
unset OVER_PROMPT_CFG