Dotfiles/rice-bowl/resources/scripts/nerdfetch

182 lines
5.2 KiB
Text
Raw Normal View History

2023-02-03 18:12:16 +00:00
#!/bin/sh
## OS/ENVIRONMENT INFO DETECTION
ostype="$(uname)"
linuxtype=none
if command -v getprop > /dev/null; then
linuxtype=android
fi
kernel="$(echo $(uname -r) | cut -d'-' -f1-1)"
case $ostype in
"Linux"*)
if [ $linuxtype = android ]; then
host="$(hostname)"
USER=${USER:-$(id -un || printf %s "${HOME/*\/}")}
os="Android $(getprop ro.build.version.release)"
else
host="$(cat /proc/sys/kernel/hostname)"
. /etc/os-release
if [ -f /bedrock/etc/bedrock-release ]; then
os="$(brl version)"
else
os="${PRETTY_NAME}"
fi
fi
shell=${SHELL##*/};;
"Darwin"*)
host="$(hostname -f | sed -e 's/^[^.]*\.//')"
while IFS='<>' read -r _ _ line _; do
case $line in
ProductVersion)
IFS='<>' read -r _ _ mac_version _
break;;
esac
done < /System/Library/CoreServices/SystemVersion.plist
os="macOS ${mac_version}";;
*)
os="Idk"
host="host"
esac
## PACKAGE MANAGER AND PACKAGES DETECTION
manager=$(which nix-env pkg yum zypper dnf rpm apt brew port pacman xbps-query emerge cave apk kiss pmm /usr/sbin/slackpkg bulge yay paru pacstall cpm pmm eopkg 2>/dev/null)
manager=${manager##*/}
case $manager in
cpm) packages="$(cpm C)";;
brew) packages="$(printf '%s\n' "$(brew --cellar)/"* | wc -l | tr -d '[:space:]')";;
port) packages="$(port installed | wc -l)";;
apt) packages="$(dpkg-query -f '${binary:Package}\n' -W | wc -l)";;
#rpm) packages="$(rpm -qa --last| wc -l)";;
yum) packages="$(yum list installed | wc -l)";;
#dnf) packages="$(dnf list installed | wc -l)";;
zypper) packages="$(zypper se | wc -l)";;
pacman) packages="$(pacman -Q | wc -l)";;
yay) packages="$(yay -Q | wc -l)";;
paru) packages="$(paru -Q | wc -l)";;
pacstall) packages="$(pacstall -L | wc -l)";;
kiss) packages="$(kiss list | wc -l)";;
emerge) packages="$(qlist -I | wc -l)";;
pkg) packages="$(pkg info | wc -l | tr -d ' ')";;
cave) packages="$(cave show installed-slots | wc -l)";;
xbps-query) packages="$(xbps-query -l | wc -l)";;
nix-env) packages="$(nix-store -q --requisites /run/current-system/sw | wc -l)";;
apk) packages="$(apk list --installed | wc -l)";;
pmm) packages="$(/bedrock/libexec/pmm pacman pmm -Q 2>/dev/null | wc -l )";;
eopkg) packages="$(eopkg li | wc -l)";;
/usr/sbin/slackpkg) packages="$(ls /var/log/packages | wc -l)";;
bulge) packages="$(bulge list | wc -l)";;
*)
packages="$(ls /usr/bin | wc -l)"
manager="bin";;
esac
## UPTIME DETECTION
if [ $linuxtype = android ]; then
uptime="$(echo $(uptime -p) | cut -c 4-)"
else
case $ostype in
"Linux")
IFS=. read -r s _ < /proc/uptime;;
*)
s=$(sysctl -n kern.boottime)
s=${s#*=}
s=${s%,*}
s=$(($(date +%s) - s));;
esac
d="$((s / 60 / 60 / 24))"
h="$((s / 60 / 60 % 24))"
m="$((s / 60 % 60))"
# Plurals
[ "$d" -gt 1 ] && dp=s
[ "$h" -gt 1 ] && hp=s
[ "$m" -gt 1 ] && mp=s
[ "$s" -gt 1 ] && sp=s
# Hide empty fields.
[ "$d" = 0 ] && d=
[ "$h" = 0 ] && h=
[ "$m" = 0 ] && m=
[ "$m" != "" ] && s=
# Make the output of uptime smaller.
[ "$d" ] && uptime="$d day$dp, "
[ "$h" ] && uptime="$uptime$h hour$hp, "
[ "$m" ] && uptime="$uptime$m min$mp"
[ "$s" ] && uptime="$uptime$s sec$sp"
uptime=${uptime%, }
fi
## RAM DETECTION
case $ostype in
"Linux")
while IFS=':k ' read -r key val _; do
case $key in
MemTotal)
mem_used=$((mem_used + val))
mem_full=$val;;
Shmem) mem_used=$((mem_used + val));;
MemFree|Buffers|Cached|SReclaimable) mem_used=$((mem_used - val));;
esac
done < /proc/meminfo
mem_used=$((mem_used / 1024))
mem_full=$((mem_full / 1024));;
"Darwin"*)
mem_full=$(($(sysctl -n hw.memsize) / 1024 / 1024))
while IFS=:. read -r key val; do
case $key in
*' wired'*|*' active'*|*' occupied'*)
mem_used=$((mem_used + ${val:-0}));;
esac
done <<-EOF
$(vm_stat)
EOF
mem_used=$((mem_used * 4 / 1024));;
*)
mem_full="idk"
mem_used="idk"
esac
memstat="${mem_used}/${mem_full} MB"
if which expr > /dev/null 2>&1; then
mempercent="($(expr $(expr ${mem_used} \* 100 / ${mem_full} ))%)"
fi
## DEFINE COLORS
bold=''
black=''
red=''
green=''
yellow=''
blue=''
magenta=''
cyan=''
white=''
grey=''
reset=''
## USER VARIABLES -- YOU CAN CHANGE THESE
lc="${reset}${bold}${magenta}" # labels
nc="${reset}${bold}${yellow}" # user
hn="${reset}${bold}${blue}" # hostname
ic="${reset}${green}" # info
c0="${reset}${grey}" # first color
c1="${reset}${white}" # second color
c2="${reset}${yellow}" # third color
## OUTPUT
cat <<EOF
${c0} ___ ${nc}${USER}${red}@${reset}${hn}${host}${reset}
${c0} (${c1}.. ${c0}\ ${lc} ${ic}${os}${reset}
${c0} (${c2}<> ${c0}| ${lc} ${ic}${kernel}${reset}
${c0} /${c1}/ \\ ${c0}\\ ${lc} ${ic}${RAM}${memstat} ${mempercent}
${c0} ( ${c1}| | ${c0}/| ${lc} ${ic}${packages} (${manager})${reset}
${c2} _${c0}/\\ ${c1}__)${c0}/${c2}_${c0}) ${lc} ${ic}${uptime}${reset}
${c2} \/${c0}-____${c2}\/${reset} ${lc} ${red}███${green}███${yellow}███${blue}███${magenta}███${cyan}███${reset}
EOF