diff --git a/motd.sh b/motd.sh index 40e7659..d6d19d6 100755 --- a/motd.sh +++ b/motd.sh @@ -4,26 +4,34 @@ echo -e "$(date)" echo -e - ### Hostname ### -echo -e "$(/usr/bin/env figlet -w $(tput cols) "$(hostname)" | /usr/bin/env lolcat -f -F 0.05 -S $(echo $((0x$(hostname | md5sum | cut -c 1-10))) | cut -c 2-5))" - +seed=$(echo $((0x$(hostname | md5sum | cut -c 1-10))) | cut -c 2-5) +echo -e "$(/usr/bin/env figlet -w $(tput cols) "$(hostname)" | /usr/bin/env lolcat -f -F 0.05 -S $seed)" echo -e - ### System info ### -echo -e "$(cat /etc/*release | grep PRETTY_NAME | cut -d = -f 2- | sed 's/\"//g') | Kernel: $(uname -r) -Uptime: $(uptime -p | sed 's/up //')" +echo -e "$(cat /etc/*release | grep PRETTY_NAME | cut -d = -f 2- | sed 's/\"//g') | Kernel: $(uname -r)" +echo -e "Uptime: $(uptime -p | sed 's/up //')" +echo -e - -### Services ### -# set column width -COLUMNS=1 -# colors +### Colors ### +white="\e[39m" green="\e[1;32m" red="\e[1;31m" +magenta="\e[1;35m" +lightgreen="\e[1;92m" +lightred="\e[1;91m" +yellow="\e[1;33m" +lightyellow="\e[1;93m" +dim="\e[2m" +bold="\e[1m" undim="\e[0m" +graybg="\e[40m" +redbg="\e[41m" +greenbg="\e[42m" + +### Services ### services=($(cat /.motd.services)) # sort services #IFS=$'\n' services=($(sort <<<"${services[*]}")) @@ -34,73 +42,65 @@ service_status=() for service in "${services[@]}"; do service_status+=($(systemctl is-active "$service")) done - -out="" +out=" SERVICE,STATUS\n" +out+="${bold}[SYSTEMD]${undim}\n" for i in "${!services[@]}"; do # color green if service is active, else red if [[ "${service_status[$i]}" == "active" ]]; then - out+="${services[$i]}:,${green}${service_status[$i]}${undim}," + out+=" - ${services[$i]},${green}${service_status[$i]}${undim}\n" else - out+="${services[$i]}:,${red}${service_status[$i]}${undim}," - fi - # insert \n every $COLUMNS column - if [ $((($i+1) % $COLUMNS)) -eq 0 ]; then - out+="\n" + out+=" ${redbg}/!\\\\${undim} - ${services[$i]},${red}${service_status[$i]}${undim}\n" fi done -out+="\n" - -printf "\nServices:\n" -printf "$out" | column -ts $',' | sed -e 's/^/ /' ### Docker ### +out+="${bold}[DOCKER]${undim}\n" containers=($(docker ps --format "{{.Image}}/{{.Names}}")) container_statuses=($(docker ps --format "{{.State}}")) -out="" +docker_out=" [root]\n" for i in ${!containers[@]}; do if [[ "${container_statuses[$i]}" == "running" ]]; then - out+="${containers[$i]}:,${green}${container_statuses[$i]}${undim}," + docker_out+=" - ${containers[$i]},${green}${container_statuses[$i]}${undim}\n" else - out+="${containers[$i]}:,${red}${container_statuses[$i]}${undim}," + docker_out+=" ${redbg}/!\\\\${undim} - ${containers[$i]},${red}${container_statuses[$i]}${undim}\n" fi - out+="\n" done -printf "\nDocker:\n" -printf "$out" | column -ts $',' | sed -e 's/^/ /' +docker_out+=" [rootless]\n" rootless_users=($(cat /.motd.users)) for user in ${rootless_users[@]}; do + + if sudo test ! -e /run/user/$(id -u $user)/docker.sock; then + docker_out+=" ${redbg}/!\\\\${undim} - $user,${red}! Docker not running !${undim}\n" + continue + fi + containers=($(sudo -n DOCKER_HOST=unix:///run/user/$(id -u $user)/docker.sock docker ps --format "{{.Image}}/{{.Names}}")) container_statuses=($(sudo -n DOCKER_HOST=unix:///run/user/$(id -u $user)/docker.sock docker ps --format "{{.State}}")) - out="" + if [ ${#containers[@]} -eq 0 ]; then + docker_out+=" ${redbg}/!\\\\${undim} - $user,${red}! No container !${undim}\n" + continue + fi + + docker_out+=" - $user\n" for i in ${!containers[@]}; do if [[ "${container_statuses[$i]}" == "running" ]]; then - out+="${containers[$i]}:,${green}${container_statuses[$i]}${undim}," + docker_out+=" - ${containers[$i]},${green}${container_statuses[$i]}${undim}\n" else - out+="${containers[$i]}:,${red}${container_statuses[$i]}${undim}," + docker_out+=" ${redbg}/!\\\\${undim} - ${containers[$i]},${red}${container_statuses[$i]}${undim}\n" fi - out+="\n" done - printf "\nDocker > $user:\n" - printf "$out" | column -ts $',' | sed -e 's/^/ /' done +out+=$docker_out + +printf "$out" | column -ts $',' -o " " +echo -e ### Disk space ### # config max_usage=80 bar_width=50 -# colors -white="\e[39m" -green="\e[1;32m" -red="\e[1;31m" -magenta="\e[1;35m" -lightgreen="\e[1;92m" -lightred="\e[1;91m" -yellow="\e[1;33m" -lightyellow="\e[1;93m" -dim="\e[2m" -undim="\e[0m" # disk usage: ignore zfs, squashfs & tmpfs DISKS=$(df -H -x squashfs -x tmpfs -x devtmpfs -x zfs --output=target,pcent,size,used | tail -n+2)" 0 0 0 -" @@ -120,7 +120,7 @@ if test $(command -v zfs); then DISKS+="$name $pcent% $gfxsize $gfxused $usedsnappercent $useddspercent $usedchildpercent x$compressratio\n" done <<< $(zfs list -H -p -d 0 -o name,available,used,usedsnap,usedds,usedchild,compressratio) fi -printf "\nDisk usage:\n" +printf "${bold}[DISK USAGE]${undim}\n" while read line; do if [ -z "$line" ]; then @@ -189,16 +189,15 @@ while read line; do bar+="${undim}]" # print usage line & bar - echo "${line}" | awk '{ printf("%-19scompratio %+5s %+4s/%+4s [%+3s]\n", $1, $8, $4, $3, $2); }' | sed -e 's/^/ /' - echo -e "${bar}" | sed -e 's/^/ /' + echo -e "${line}" | awk '{ printf(" %-19scompratio %+5s %+4s/%+4s [%+3s]\n", $1, $8, $4, $3, $2); }' + if [ "${usage}" -ge "${max_usage}" ]; then + echo -en " ${redbg}/!\\\\${undim} " + else + echo -en " " + fi + echo -e "${bar}" done <<< $(echo -e "$DISKS") - - -### Welcome message ### -LAST_LOGIN=$(last -w --time-format iso | grep $(whoami) | head -2 | tail -1) echo -e -echo -e "Welcome to $(hostname), $(whoami)! -Last login: $(echo "$LAST_LOGIN" | awk '{for(i=4;i<=NF;i++) print $i}' | paste -sd ' ') from $(echo "$LAST_LOGIN" | awk '{print $3}')" ### ZFS available space warning ### if test $(command -v zfs); then @@ -211,7 +210,13 @@ if test $(command -v zfs); then percentage=$(echo "scale=2;$avail/($used+$avail)*100" | bc) if (( $(echo "$percentage < 20" | bc -l) )); then - echo -e "${red}Warning! ${white}$name ${undim}only has ${percentage}% capacity left" + echo -e " ${redbg}/!\\\\${undim} ${bold}$name ${undim}only has ${percentage}% capacity left" fi done <<< $(echo -e "$POOLS") fi +echo -e + +### Welcome message ### +LAST_LOGIN=$(last -w --time-format full | grep $(whoami) | head -2 | tail -1) +echo -e " Welcome to $(hostname | /usr/bin/env lolcat -f -F 0.05 -S $seed), ${green}$(whoami)${undim}!" +echo -e " Last login: ${bold}$(echo "$LAST_LOGIN" | awk '{print $3}')${undim} | [$(echo "$LAST_LOGIN" | awk '{for(i=4;i<=NF;i++) print $i}' | paste -sd ' ')]"