-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.bash_prompt
137 lines (122 loc) ยท 5.99 KB
/
.bash_prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# shellcheck shell=bash
# shellcheck disable=SC2312
# Print UTF-8 char?
__ps1_utf8(){
case "${TERM}" in
*color)
echo "${1}";;
*)
echo "${2}";;
esac
}
# Print UTF-8 time char?
__ps1_utf8time(){
case "${TERM}" in
*color)
case "${1}:${2}" in
01:[0-2][0-9]) echo "๐";; 01:[3-5][0-9]) echo "๐";;
02:[0-2][0-9]) echo "๐";; 02:[3-5][0-9]) echo "๐";;
03:[0-2][0-9]) echo "๐";; 03:[3-5][0-9]) echo "๐";;
04:[0-2][0-9]) echo "๐";; 04:[3-5][0-9]) echo "๐";;
05:[0-2][0-9]) echo "๐";; 05:[3-5][0-9]) echo "๐ ";;
06:[0-2][0-9]) echo "๐";; 06:[3-5][0-9]) echo "๐ก";;
07:[0-2][0-9]) echo "๐";; 07:[3-5][0-9]) echo "๐ข";;
08:[0-2][0-9]) echo "๐";; 08:[3-5][0-9]) echo "๐ฃ";;
09:[0-2][0-9]) echo "๐";; 09:[3-5][0-9]) echo "๐ค";;
10:[0-2][0-9]) echo "๐";; 10:[3-5][0-9]) echo "๐ฅ";;
11:[0-2][0-9]) echo "๐";; 11:[3-5][0-9]) echo "๐ฆ";;
12:[0-2][0-9]) echo "๐";; 12:[3-5][0-9]) echo "๐ง";;
*) ;;
esac
;;
*) ;;
esac
}
__ps1_color_wrap_non_printing(){
local ESC; ESC=$(echo -e '\033')
local SOH; SOH=$(echo -e '\001')
local STX; STX=$(echo -e '\002')
local REGEX; REGEX=${ESC}'\[[[:digit:];]*m'
local REPLACE; REPLACE=${SOH}'&'${STX}
sed "s/${REGEX}/${REPLACE}/g"
}
# Get tty
__ps1_tty(){ tty | cut -c 6-; }
# Uptime
__ps1_uptime(){
PS1_upsecs=$(awk '{print $1}' /proc/uptime | awk -F . '{print $1}')
date -ud @"${PS1_upsecs}" +$((PS1_upsecs/3600/24))d%H:%M
}
# Dir stats
__ps1_dirSize(){ sed -n 1p <<< "${PS1_dirList}" | awk '{print $2}'; }
__ps1_files(){ \grep "^-" <<< "${PS1_dirList}" | awk '{print $9}' | \grep -cv "^\."; }
__ps1_hiddenFiles(){ \grep "^-" <<< "${PS1_dirList}" | awk '{print $9}' | \grep -c "^\."; }
__ps1_execs(){ \grep -c "^-..x" <<< "${PS1_dirList}"; }
__ps1_dirs(){ \grep "^d" <<< "${PS1_dirList}" | awk '{print $9}' | \grep -cv "^\."; }
__ps1_hiddenDirs(){ \grep "^d" <<< "${PS1_dirList}" | awk '{print $9}' | \grep -c "^\."; }
__ps1_links(){ \grep -c "^l" <<< "${PS1_dirList}"; }
__ps1_spec(){ \grep -c "^[bcps]" <<< "${PS1_dirList}"; }
# Calculate padding
__pad(){
local len pad
if [[ "${1}" = 1_L1 ]]; then len="$(wc -m <<< "${PS1_L1@P}")"
else len="$(wc -m <<< "${PS1_L2@P}")"; fi
if [[ "${TERM}" = *color ]];
then if [[ "${1}" = 1_L1 ]]; then pad=$((COLUMNS-len-3))
else pad=$((COLUMNS-len-6)); fi
else pad=$((COLUMNS-len)); fi
printf %"${pad}"s | sed 's/ /โ/g'
}
# Set the title of a terminal emulator to include the command being executed
__ps1_preCommand(){
case "${TERM}" in
xterm*|rxvt*)
local pwd='~'
[[ "${PWD}" != "${HOME}" ]] && pwd=${PWD/#${HOME}\//\~\/}
pwd="${pwd//[[:cntrl:]]}"
echo -ne "\033]0;${USER}@${HOSTNAME%%.*}($(__ps1_tty)):${pwd} (${BASH_COMMAND})\007"
;;
*) ;;
esac
}
trap "__ps1_preCommand" DEBUG
case "${TERM}" in
*color) PS1_color=yes; PS1_lc_opts=( -v 0.1 -h 0.1 -b -f );;
linux) PS1_color=yes; PS1_lc_opts=( -x -f );;
*) ;;
esac
PS1_Op="$(__ps1_utf8 โช '[')"
PS1_Cl="$(__ps1_utf8 โซ ']')"
__prompt_command(){
local PS1_dirList PS1_exit PS1_L0 PS1_L1 PS1_L2 PS1_L3
# Save last exit code
PS1_exit=$?
# Get dir listing
PS1_dirList=$(\ls -Al --si)
PS1_L1=" โโ${PS1_Op}Exit ${PS1_exit}${PS1_Cl}โโ${PS1_Op}\u($(__ps1_utf8 ๐ป)$(__ps1_tty))@\h($(__ps1_utf8 โก)$(__ps1_uptime))${PS1_Cl}โโโก$(__ps1_utf8 ๐ฅ \*)โ"
PS1_L1+="$(__pad 1_L1)โ\n"
PS1_L2="โโ${PS1_Op}\!:\#${PS1_Cl}โโ${PS1_Op}$(jobs -r | wc -l)$(__ps1_utf8 ๐ R)/$(jobs -s | wc -l)$(__ps1_utf8 ๐ค S)${PS1_Cl}โโ${PS1_Op}$(__ps1_utf8 ๐)\W($(__ps1_dirSize)B $(__ps1_utf8 ๐ -)$(__ps1_files).$(__ps1_hiddenFiles) $(__ps1_utf8 ๐พ x)$(__ps1_execs) $(__ps1_utf8 ๐ d)$(__ps1_dirs).$(__ps1_hiddenDirs) $(__ps1_utf8 ๐ l)$(__ps1_links) $(__ps1_utf8 '๐จ๏ธ ' s)$(__ps1_spec))${PS1_Cl}"
PS1_L2+="$(__pad 1_L2)โ\n"
PS1_L3="โโฆโ$(__ps1_utf8 โฎ \>)$(__ps1_utf8 ๐ฒ \$) "
# shellcheck disable=SC2016
case "${PS1_color}" in
yes) if [[ "${TERM}" = *color ]]; then
PS0='$(lolcat-c '${PS1_lc_opts[*]}' <<< "โพโจโโโโโคProgram running $(__ps1_utf8 "๐๏ธ ")\d $(__ps1_utf8time "$(date +"%I")" "$(date +"%M")")\D{}โ$(printf %$((COLUMNS-52))s | sed "s/ /โ/g")โฎ")'
PS1_L0='$(lolcat-c '${PS1_lc_opts[*]}' <<< "โพโฅโโโโโคProgram finished $(__ps1_utf8 "๐๏ธ ")\d $(__ps1_utf8time "$(date +"%I")" "$(date +"%M")")\D{}โ$(printf %$((COLUMNS-52))s | sed "s/ /โ/g")โฏ")'
else
PS0='$(lolcat-c '${PS1_lc_opts[*]}' <<< "โพโจโโโโโคProgram running \d \D{}โ$(printf %$((COLUMNS-48))s | sed "s/ /โ/g")โฎ")'
PS1_L0='$(lolcat-c '${PS1_lc_opts[*]}' <<< "โพโฅโโโโโคProgram finished \d \D{}โ$(printf %$((COLUMNS-48))s | sed "s/ /โ/g")โฏ")'; fi
PS1='$(lolcat-c '${PS1_lc_opts[*]}' <<< "'${PS1_L0}${PS1_L1}${PS1_L2}${PS1_L3}'" | sed -z "s/\(.*\)\\n/\1/" | __ps1_color_wrap_non_printing)'
PS2="$(lolcat-c "${PS1_lc_opts[@]}" <<< " โ โโโ$(__ps1_utf8 โฎ \>) " | sed -z "s/\(.*\)\\n/\1/" | __ps1_color_wrap_non_printing)";;
*) if [[ "${TERM}" = *color ]]; then
PS0="โพโจโโโโโคProgram running $(__ps1_utf8 "๐๏ธ ")\d $(__ps1_utf8time "$(date +"%I")" "$(date +"%M")")\D{}โ$(printf %$((COLUMNS-52))s | sed "s/ /โ/g")โฎ"
PS1_L0="โพโฅโโโโโคProgram finished $(__ps1_utf8 "๐๏ธ ")\d $(__ps1_utf8time "$(date +"%I")" "$(date +"%M")")\D{}โ$(printf %$((COLUMNS-52))s | sed "s/ /โ/g")โฏ"
else
# shellcheck disable=SC2034
PS0="โพโจโโโโโคProgram running \d \D{}โ$(printf %$((COLUMNS-48))s | sed "s/ /โ/g")โฎ"
PS1_L0="โพโฅโโโโโคProgram finished \d \D{}โ$(printf %$((COLUMNS-48))s | sed "s/ /โ/g")โฏ"; fi
PS1="${PS1_L0}${PS1_L1}${PS1_L2}${PS1_L3}"
PS2=" โ โโโ$(__ps1_utf8 โฎ \>) ";;
esac
}
PROMPT_COMMAND="__prompt_command${PROMPT_COMMAND:+"; ${PROMPT_COMMAND}"}"