|
| 1 | +#!/bin/sh |
| 2 | + |
| 3 | +## OS/ENVIRONMENT INFO DETECTION |
| 4 | + |
| 5 | +ostype="$(uname)" |
| 6 | +osi="" |
| 7 | + |
| 8 | +distrotype=none |
| 9 | +if command -v getprop > /dev/null; then |
| 10 | + distrotype=android |
| 11 | +fi |
| 12 | +kernel="$(echo $(uname -r) | cut -d'-' -f1-1)" |
| 13 | +case $ostype in |
| 14 | + *"Linux"*) |
| 15 | + if [ $distrotype = android ]; then |
| 16 | + host="$(hostname)" |
| 17 | + USER=${USER:-$(id -un || printf %s "${HOME/*\/}")} |
| 18 | + os="Android $(getprop ro.build.version.release)" |
| 19 | + osi="" |
| 20 | + else |
| 21 | + host="$(cat /proc/sys/kernel/hostname)" |
| 22 | + . /etc/os-release |
| 23 | + if [ -f /bedrock/etc/bedrock-release ]; then |
| 24 | + os="$(brl version)" |
| 25 | + else |
| 26 | + os="${PRETTY_NAME}" |
| 27 | + case $(echo $ID | sed 's/ .*//') in |
| 28 | + debian) osi="";; |
| 29 | + arch) osi="";; |
| 30 | + endeavouros) osi="";; |
| 31 | + fedora) osi="";; |
| 32 | + gentoo) osi="";; |
| 33 | + rhel) osi="";; |
| 34 | + slackware) osi="";; |
| 35 | + void) osi="";; |
| 36 | + alpine) osi="";; |
| 37 | + nixos) osi="";; |
| 38 | + artix) osi="";; |
| 39 | + exherbo) osi="";; |
| 40 | + mageia) osi="";; |
| 41 | + manjaro) osi="";; |
| 42 | + opensuse) osi="";; |
| 43 | + solus) osi="";; |
| 44 | + ubuntu) osi="";; |
| 45 | + mint) osi="";; |
| 46 | + trisquel) osi="";; |
| 47 | + puppy) osi="";; |
| 48 | + coreos) osi="";; |
| 49 | + mx) osi="";; |
| 50 | + vanilla) osi="";; |
| 51 | + pop_os) osi="";; |
| 52 | + raspbian) osi="";; |
| 53 | + *) osi="";; |
| 54 | + esac |
| 55 | + fi |
| 56 | + fi |
| 57 | + shell=${SHELL##*/};; |
| 58 | + *"Darwin"*) |
| 59 | + host="$(hostname -f | sed -e 's/^[^.]*\.//')" |
| 60 | + while IFS='<>' read -r _ _ line _; do |
| 61 | + case $line in |
| 62 | + ProductVersion) |
| 63 | + IFS='<>' read -r _ _ mac_version _ |
| 64 | + break;; |
| 65 | + esac |
| 66 | + done < /System/Library/CoreServices/SystemVersion.plist |
| 67 | + os="macOS ${mac_version}" |
| 68 | + osi="";; |
| 69 | + *"FreeBSD"*) |
| 70 | + host="$(hostname)" |
| 71 | + distrotype=bsd |
| 72 | + os="FreeBSD $(freebsd-version | sed 's/-.*//')" |
| 73 | + osi="";; |
| 74 | + *"OpenBSD"*) |
| 75 | + host="$(hostname)" |
| 76 | + distrotype=bsd |
| 77 | + os="OpenBSD $(uname -r)" |
| 78 | + osi="";; |
| 79 | + *) |
| 80 | + os="Idk" |
| 81 | + host="host" |
| 82 | +esac |
| 83 | + |
| 84 | +## PACKAGE MANAGER AND PACKAGES DETECTION |
| 85 | + |
| 86 | +manager=$(which nix-env pkg yum zypper dnf rpm dpkg-query brew port pacman xbps-query emerge cave apk kiss pmm /usr/sbin/slackpkg bulge yay paru pacstall cpm pmm eopkg 2>/dev/null) |
| 87 | +manager=${manager##*/} |
| 88 | +case $manager in |
| 89 | + cpm) packages="$(cpm C)";; |
| 90 | + brew) packages="$(printf '%s\n' "$(brew --cellar)/"* | wc -l | tr -d '[:space:]')";; |
| 91 | + port) packages="$(port installed | wc -l)";; |
| 92 | + dpkg-query) packages="$(dpkg-query -f '${binary:Package}\n' -W | wc -l)";; |
| 93 | + rpm) packages="$(rpm -qa --last| wc -l)";; |
| 94 | + yum) packages="$(yum list installed | wc -l)";; |
| 95 | + dnf) packages="$(dnf list installed | wc -l)";; |
| 96 | + zypper) packages="$(zypper se | wc -l)";; |
| 97 | + pacman) packages="$(pacman -Q | wc -l)";; |
| 98 | + yay) packages="$(yay -Q | wc -l)";; |
| 99 | + paru) packages="$(paru -Q | wc -l)";; |
| 100 | + pacstall) packages="$(pacstall -L | wc -l)";; |
| 101 | + kiss) packages="$(kiss list | wc -l)";; |
| 102 | + emerge) packages="$(qlist -I | wc -l)";; |
| 103 | + pkg) packages="$(pkg info | wc -l | tr -d ' ')";; |
| 104 | + cave) packages="$(cave show installed-slots | wc -l)";; |
| 105 | + xbps-query) packages="$(xbps-query -l | wc -l)";; |
| 106 | + nix-env) packages="$(nix-store -q --requisites /run/current-system/sw | wc -l)";; |
| 107 | + apk) packages="$(apk list --installed | wc -l)";; |
| 108 | + pmm) packages="$(/bedrock/libexec/pmm pacman pmm -Q 2>/dev/null | wc -l )";; |
| 109 | + eopkg) packages="$(eopkg li | wc -l)";; |
| 110 | + /usr/sbin/slackpkg) packages="$(ls /var/log/packages | wc -l)";; |
| 111 | + bulge) packages="$(bulge list | wc -l)";; |
| 112 | + pkg_info) packages="$(pkg_info -A | wc -l)";; |
| 113 | + *) |
| 114 | + packages="$(ls /usr/bin | wc -l)" |
| 115 | + manager="bin";; |
| 116 | +esac |
| 117 | + |
| 118 | +manager=$(echo $manager | sed "s/-query//; s/\/usr\/.*\///") |
| 119 | + |
| 120 | +## UPTIME DETECTION |
| 121 | + |
| 122 | +if [ $distrotype = android ]; then |
| 123 | + uptime="$(echo $(uptime -p) | cut -c 4-)" |
| 124 | +elif [ $distrotype = bsd ]; then |
| 125 | + uptime="$(uptime | sed -e 's/.* up //; s/, [0-9]* user.*//')" |
| 126 | +else |
| 127 | + case $ostype in |
| 128 | + *"Linux"*) |
| 129 | + IFS=. read -r s _ < /proc/uptime;; |
| 130 | + *) |
| 131 | + s=$(sysctl -n kern.boottime) |
| 132 | + s=${s#*=} |
| 133 | + s=${s%,*} |
| 134 | + s=$(($(date +%s) - s));; |
| 135 | + esac |
| 136 | + d="$((s / 60 / 60 / 24))" |
| 137 | + h="$((s / 60 / 60 % 24))" |
| 138 | + m="$((s / 60 % 60))" |
| 139 | + # Plurals |
| 140 | + [ "$d" -gt 1 ] && dp=s |
| 141 | + [ "$h" -gt 1 ] && hp=s |
| 142 | + [ "$m" -gt 1 ] && mp=s |
| 143 | + [ "$s" -gt 1 ] && sp=s |
| 144 | + # Hide empty fields. |
| 145 | + [ "$d" = 0 ] && d= |
| 146 | + [ "$h" = 0 ] && h= |
| 147 | + [ "$m" = 0 ] && m= |
| 148 | + [ "$m" != "" ] && s= |
| 149 | + # Make the output of uptime smaller. |
| 150 | + [ "$d" ] && uptime="$d day$dp, " |
| 151 | + [ "$h" ] && uptime="$uptime$h hour$hp, " |
| 152 | + [ "$m" ] && uptime="$uptime$m min$mp" |
| 153 | + [ "$s" ] && uptime="$uptime$s sec$sp" |
| 154 | + uptime=${uptime%, } |
| 155 | +fi |
| 156 | + |
| 157 | +## RAM DETECTION |
| 158 | + |
| 159 | +case $ostype in |
| 160 | + *"Linux"*) |
| 161 | + while IFS=':k ' read -r key val _; do |
| 162 | + case $key in |
| 163 | + MemTotal) |
| 164 | + mem_used=$((mem_used + val)) |
| 165 | + mem_full=$val;; |
| 166 | + Shmem) mem_used=$((mem_used + val));; |
| 167 | + MemFree|Buffers|Cached|SReclaimable) mem_used=$((mem_used - val));; |
| 168 | + esac |
| 169 | + done < /proc/meminfo |
| 170 | + mem_used=$((mem_used / 1024)) |
| 171 | + mem_full=$((mem_full / 1024));; |
| 172 | + *"Darwin"*) |
| 173 | + mem_full=$(($(sysctl -n hw.memsize) / 1024 / 1024)) |
| 174 | + while IFS=:. read -r key val; do |
| 175 | + case $key in |
| 176 | + *' wired'*|*' active'*|*' occupied'*) |
| 177 | + mem_used=$((mem_used + ${val:-0}));; |
| 178 | + esac |
| 179 | + done <<-EOF |
| 180 | + $(vm_stat) |
| 181 | + EOF |
| 182 | + |
| 183 | + mem_used=$((mem_used * 4 / 1024));; |
| 184 | + *"BSD"*) |
| 185 | + mem_full=$(($(sysctl -n hw.physmem) / 1024 / 1024)) |
| 186 | + mem_free=$(($(sysctl -n vm.stats.vm.v_free_count) * $(sysctl -n vm.stats.vm.v_page_size) / 1024 / 1024)) |
| 187 | + mem_used=$((mem_full - mem_free));; |
| 188 | + *) |
| 189 | + mem_full="idk" |
| 190 | + mem_used="idk" |
| 191 | +esac |
| 192 | +memstat="${mem_used}/${mem_full} MiB" |
| 193 | +if which expr > /dev/null 2>&1; then |
| 194 | + mempercent="($(expr $(expr ${mem_used} \* 100 / ${mem_full} ))%)" |
| 195 | +fi |
| 196 | + |
| 197 | +## DEFINE COLORS |
| 198 | + |
| 199 | +bold='[1m' |
| 200 | +black='[30m' |
| 201 | +red='[31m' |
| 202 | +green='[32m' |
| 203 | +yellow='[33m' |
| 204 | +blue='[34m' |
| 205 | +magenta='[35m' |
| 206 | +cyan='[36m' |
| 207 | +white='[37m' |
| 208 | +grey='[90m' |
| 209 | +reset='[0m' |
| 210 | +lightG='[38;2;200;200;200m' |
| 211 | + |
| 212 | +## USER VARIABLES -- YOU CAN CHANGE THESE |
| 213 | + |
| 214 | +lc="${reset}${bold}${magenta}" # labels |
| 215 | +nc="${reset}${bold}${yellow}" # user |
| 216 | +hn="${reset}${bold}${blue}" # hostname |
| 217 | +ic="${reset}${green}" # info |
| 218 | +c0="${reset}${grey}" # first color |
| 219 | +c1="${reset}${white}" # second color |
| 220 | +c2="${reset}${yellow}" # third color |
| 221 | +c3="${reset}${cyan}" |
| 222 | + |
| 223 | +## OUTPUT |
| 224 | + |
| 225 | +cat <<EOF |
| 226 | +
|
| 227 | +${c0} ${red}${USER}${c3}@${blue}${yellow}${host}${reset} |
| 228 | +${c0} ___ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ |
| 229 | +${c0} (${c1}.. ${c0}\ ${red}${osi} ${reset}${os}${reset} |
| 230 | +${c0} (${c2}<> ${c0}| ${red} ${reset}${kernel}${reset} |
| 231 | +${c0} /${c1}/ \\ ${c0}\\ ${red} ${reset}${RAM}${memstat} ${mempercent} |
| 232 | +${c0} ( ${c1}| | ${c0}/| ${red} ${reset}${packages} (${manager})${reset} |
| 233 | +${c2} _${c0}/\\ ${c1}__)${c0}/${c2}_${c0}) ${red} ${reset}${uptime}${reset} |
| 234 | +${c2} \/${c0}-____${c2}\/${reset} ${red} ${red} ${yellow} ${magenta} ${blue} ${cyan} ${green} ${reset} |
| 235 | +EOF |
0 commit comments