Skip to content

Instantly share code, notes, and snippets.

@rs4231199
Created January 4, 2022 15:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rs4231199/06be7de6e9c29f8627f8cc0b45700f77 to your computer and use it in GitHub Desktop.
Save rs4231199/06be7de6e9c29f8627f8cc0b45700f77 to your computer and use it in GitHub Desktop.
nerdfetch with disk usage
#!/bin/sh
## OS/ENVIRONMENT INFO DETECTION
ostype="$(uname)"
if command -v getprop > /dev/null; then
linuxtype=android
else
linuxtype=none
fi
kernel="$(echo $(uname -r) | cut -d'-' -f1-1)"
case $ostype in
"Linux"*)
if [ $linuxtype = android ]; then
host=$(hostname)
USER=$(bash -c 'echo $USERNAME')
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 xbps-query emerge cave apk kiss pmm /usr/sbin/slackpkg bulge yay pacman paru 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)";;
kiss) packages="$(kiss list | wc -l)";;
pkg|emerge) packages="$(qlist -I | wc -l)";;
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 dc > /dev/null 2>&1; then
mempercent="($(echo 100 ${mem_used} \* ${mem_full} / p | dc)%)"
fi
## Disk Usage
IFS=$'\n' read -d "" -ra disks <<< "$(df -P -h /)"
disk=${disks[1]}
IFS=" " read -ra disk_info <<< "$disk"
disk_perc=${disk_info[-2]/\%}
diskstat="${disk_info[-4]/i}/${disk_info[-5]/i}${disk_perc:+ ($disk_perc%)}"
## 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}${packages} (${manager})${reset}
${c0} ( ${c1}| | ${c0}/| ${lc} ${ic}${uptime}${reset}
${c2} _${c0}/\\ ${c1}__)${c0}/${c2}_${c0}) ${lc} ${ic}${RAM}${memstat} ${mempercent}
${c2} \/${c0}-____${c2}\/${reset} ${lc} ${ic}${diskstat}${reset}
EOF
# ${c2} \/${c0}-____${c2}\/${reset} ${lc} ${red}███${green}███${yellow}███${blue}███${magenta}███${cyan}███${reset}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment