-
Notifications
You must be signed in to change notification settings - Fork 1
/
motd.sh
executable file
·128 lines (100 loc) · 3.5 KB
/
motd.sh
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
#!/bin/bash
clear
function color (){
echo "\e[$1m$2\e[0m"
}
function extend (){
local str="$1"
let spaces=60-${#1}
while [ $spaces -gt 0 ]; do
str="$str "
let spaces=spaces-1
done
echo "$str"
}
function center (){
local str="$1"
let spacesLeft=(78-${#1})/2
let spacesRight=78-spacesLeft-${#1}
while [ $spacesLeft -gt 0 ]; do
str=" $str"
let spacesLeft=spacesLeft-1
done
while [ $spacesRight -gt 0 ]; do
str="$str "
let spacesRight=spacesRight-1
done
echo "$str"
}
function sec2time (){
local input=$1
if [ $input -lt 60 ]; then
echo "$input seconds"
else
((days=input/86400))
((input=input%86400))
((hours=input/3600))
((input=input%3600))
((mins=input/60))
local daysPlural="s"
local hoursPlural="s"
local minsPlural="s"
if [ $days -eq 1 ]; then
daysPlural=""
fi
if [ $hours -eq 1 ]; then
hoursPlural=""
fi
if [ $mins -eq 1 ]; then
minsPlural=""
fi
echo "$days day$daysPlural, $hours hour$hoursPlural, $mins minute$minsPlural"
fi
}
borderColor=35
headerLeafColor=32
headerRaspberryColor=31
greetingsColor=36
statsLabelColor=33
borderLine="━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
borderTopLine=$(color $borderColor "┏$borderLine┓")
borderBottomLine=$(color $borderColor "┗$borderLine┛")
borderBar=$(color $borderColor "┃")
borderEmptyLine="$borderBar $borderBar"
# Header
host=$(hostname)
me=$(whoami)
# Greetings
greetings="$borderBar$(color $greetingsColor "$(center "Welcome back, $me!")")$borderBar\n"
greetings="$greetings$borderBar$(color $greetingsColor "$(center "$(hostname)")")$borderBar\n"
greetings="$greetings$borderBar$(color $greetingsColor "$(center "$(date +"%A, %d %B %Y, %T")")")$borderBar"
# System information
read loginFrom loginIP loginDate <<< $(last $me --time-format iso -2 | awk 'NR==2 { print $2,$3,$4 }')
# TTY login
if [[ $loginDate == - ]]; then
loginDate=$loginIP
loginIP=$loginFrom
fi
if [[ $loginDate == *T* ]]; then
login="$(date -d $loginDate +"%A, %d %B %Y, %T") ($loginIP)"
else
# Not enough logins
login="None"
fi
label1="$(extend "$login")"
label1="$borderBar $(color $statsLabelColor "Last Login....:") $label1$borderBar"
uptime="$(sec2time $(cut -d "." -f 1 /proc/uptime))"
uptime="$uptime ($(date -d "@"$(grep btime /proc/stat | cut -d " " -f 2) +"%d-%m-%Y %H:%M:%S"))"
label2="$(extend "$uptime")"
label2="$borderBar $(color $statsLabelColor "Uptime........:") $label2$borderBar"
label3="$(extend "$(free -m | awk 'NR==2 { printf "Total: %sMB, Used: %sMB, Free: %sMB",$2,$3,$4; }')")"
label3="$borderBar $(color $statsLabelColor "Memory........:") $label3$borderBar"
label4="$(extend "$(df -h ~ | awk 'NR==2 { printf "Total: %sB, Used: %sB, Free: %sB",$2,$3,$4; }')")"
label4="$borderBar $(color $statsLabelColor "Home space....:") $label4$borderBar"
label5="$(extend "$(ip addr show wlan0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1)")"
label5="$borderBar $(color $statsLabelColor "System IP.....:") $label5$borderBar"
stats="$label1\n$label2\n$label3\n$label4\n$label5"
# Print motd
echo -e “$art\n”
echo -e "$borderTopLine$header\n$borderEmptyLine\n$greetings\n$borderEmptyLine\n$stats\n$borderEmptyLine\n$borderBottomLine"
echo -e "\n\n"