174 lines
5.4 KiB
Bash
174 lines
5.4 KiB
Bash
# Normal Colors
|
|
Black='\e[0;30m' # Black
|
|
Red='\e[0;31m' # Red
|
|
Green='\e[0;32m' # Green
|
|
Yellow='\e[0;33m' # Yellow
|
|
Blue='\e[0;34m' # Blue
|
|
Purple='\e[0;35m' # Purple
|
|
Cyan='\e[0;36m' # Cyan
|
|
White='\e[0;37m' # White
|
|
|
|
# Bold
|
|
BBlack='\e[1;30m' # Black
|
|
BRed='\e[1;31m' # Red
|
|
BGreen='\e[1;32m' # Green
|
|
BYellow='\e[1;33m' # Yellow
|
|
BBlue='\e[1;34m' # Blue
|
|
BPurple='\e[1;35m' # Purple
|
|
BCyan='\e[1;36m' # Cyan
|
|
BWhite='\e[1;37m' # White
|
|
|
|
# Background
|
|
On_Black='\e[40m' # Black
|
|
On_Red='\e[41m' # Red
|
|
On_Green='\e[42m' # Green
|
|
On_Yellow='\e[43m' # Yellow
|
|
On_Blue='\e[44m' # Blue
|
|
On_Purple='\e[45m' # Purple
|
|
On_Cyan='\e[46m' # Cyan
|
|
On_White='\e[47m' # White
|
|
|
|
NC="\e[m" # Color Reset
|
|
#-------------------------------------------------------------
|
|
# Shell Prompt - for many examples, see:
|
|
# http://www.debian-administration.org/articles/205
|
|
# http://www.askapache.com/linux/bash-power-prompt.html
|
|
# http://tldp.org/HOWTO/Bash-Prompt-HOWTO
|
|
# https://github.com/nojhan/liquidprompt
|
|
#-------------------------------------------------------------
|
|
# Current Format: [TIME USER@HOST PWD] >
|
|
# TIME:
|
|
# Green == machine load is low
|
|
# Orange == machine load is medium
|
|
# Red == machine load is high
|
|
# ALERT == machine load is very high
|
|
# USER:
|
|
# Cyan == normal user
|
|
# Orange == SU to user
|
|
# Red == root
|
|
# HOST:
|
|
# Cyan == local session
|
|
# Green == secured remote connection (via ssh)
|
|
# Red == unsecured remote connection
|
|
# PWD:
|
|
# Green == more than 10% free disk space
|
|
# Orange == less than 10% free disk space
|
|
# ALERT == less than 5% free disk space
|
|
# Red == current user does not have write privileges
|
|
# Cyan == current filesystem is size zero (like /proc)
|
|
# >:
|
|
# White == no background or suspended jobs in this shell
|
|
# Cyan == at least one background job in this shell
|
|
# Orange == at least one suspended job in this shell
|
|
#
|
|
# Command is added to the history file each time you hit enter,
|
|
# so it's available to all shells (using 'history -a').
|
|
|
|
|
|
# Test connection type:
|
|
if [ -n "${SSH_CONNECTION}" ]; then
|
|
CNX="\e[3"$(hostname | md5sum | cut -c 1)"m"
|
|
#CNX="\e["$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')"m"
|
|
#CNX=${Green} # Connected on remote machine, via ssh (good).
|
|
elif [[ "${DISPLAY%%:0*}" != "" ]]; then
|
|
CNX=${ALERT} # Connected on remote machine, not via ssh (bad).
|
|
else
|
|
CNX=${BCyan} # Connected on local machine.
|
|
fi
|
|
|
|
# Test user type:
|
|
if [[ ${USER} == "root" ]]; then
|
|
SU=${Red} # User is root.
|
|
elif [[ ${USER} != $(logname) ]]; then
|
|
SU=${BRed} # User is not login user.
|
|
else
|
|
SU=${BCyan} # User is normal (well ... most of us are).
|
|
fi
|
|
|
|
|
|
|
|
NCPU=$(grep -c 'processor' /proc/cpuinfo) # Number of CPUs
|
|
SLOAD=$(( 100*${NCPU} )) # Small load
|
|
MLOAD=$(( 200*${NCPU} )) # Medium load
|
|
XLOAD=$(( 400*${NCPU} )) # Xlarge load
|
|
|
|
|
|
# Returns system load as percentage, i.e., '40' rather than '0.40)'.
|
|
function load()
|
|
{
|
|
local SYSLOAD=$(cut -d " " -f1 /proc/loadavg | tr -d '.')
|
|
# System load of the current host.
|
|
echo $((10#$SYSLOAD)) # Convert to decimal.
|
|
}
|
|
|
|
# Returns a color indicating system load.
|
|
function load_color()
|
|
{
|
|
local SYSLOAD=$(load)
|
|
if [ ${SYSLOAD} -gt ${XLOAD} ]; then
|
|
echo -en ${ALERT}
|
|
elif [ ${SYSLOAD} -gt ${MLOAD} ]; then
|
|
echo -en ${Red}
|
|
elif [ ${SYSLOAD} -gt ${SLOAD} ]; then
|
|
echo -en ${BRed}
|
|
else
|
|
echo -en ${Green}
|
|
fi
|
|
}
|
|
|
|
# Returns a color according to free disk space in $PWD.
|
|
function disk_color()
|
|
{
|
|
if [ ! -w "${PWD}" ] ; then
|
|
echo -en ${Red}
|
|
# No 'write' privilege in the current directory.
|
|
elif [ -s "${PWD}" ] ; then
|
|
local used=$(command df -P "$PWD" |
|
|
awk 'END {print $5} {sub(/%/,"")}')
|
|
if [ ${used} -gt 95 ]; then
|
|
echo -en ${ALERT} # Disk almost full (>95%).
|
|
elif [ ${used} -gt 90 ]; then
|
|
echo -en ${BRed} # Free disk space almost gone.
|
|
else
|
|
echo -en ${Green} # Free disk space is ok.
|
|
fi
|
|
else
|
|
echo -en ${Cyan}
|
|
# Current directory is size '0' (like /proc, /sys etc).
|
|
fi
|
|
}
|
|
|
|
# Returns a color according to running/suspended jobs.
|
|
function job_color()
|
|
{
|
|
if [ $(jobs -s | wc -l) -gt "0" ]; then
|
|
echo -en ${BRed}
|
|
elif [ $(jobs -r | wc -l) -gt "0" ] ; then
|
|
echo -en ${BCyan}
|
|
fi
|
|
}
|
|
|
|
# Adds some text in the terminal frame (if applicable).
|
|
|
|
|
|
# Now we construct the prompt.
|
|
PROMPT_COMMAND="history -a"
|
|
case ${TERM} in
|
|
*term | rxvt | linux)
|
|
PS1="\[\$(load_color)\][\A\[${NC}\] "
|
|
# Time of day (with load info):
|
|
PS1="\[\$(load_color)\][\A\[${NC}\] "
|
|
# User@Host (with connection type info):
|
|
PS1=${PS1}"\[${SU}\]\u\[${NC}\]@\[${CNX}\]\h\[${NC}\] "
|
|
# PWD (with 'disk space' info):
|
|
PS1=${PS1}"\[\$(disk_color)\]\W]\[${NC}\] "
|
|
# Prompt (with 'job' info):
|
|
PS1=${PS1}"\[\$(job_color)\]>\[${NC}\] "
|
|
# Set title of current xterm:
|
|
PS1=${PS1}"\[\e]0;[\u@\h] \w\a\]"
|
|
;;
|
|
*)
|
|
PS1="(\A \u@\h \W) > " # --> PS1="(\A \u@\h \w) > "
|
|
# --> Shows full pathname of current dir.
|
|
;;
|
|
esac
|