dotfiles/misc/bin/lkfetch
2025-02-07 15:18:20 -05:00

153 lines
4.5 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#colors
#bold="(tput bold)"
magenta="\033[1;35m"
green="\033[1;32m"
white="\033[1;37m"
blue="\033[1;34m"
red="\033[1;31m"
black="\033[1;40;30m"
yellow="\033[1;33m"
cyan="\033[1;36m"
reset="\033[0m"
bgyellow="\033[1;43;33m"
bgwhite="\033[1;47;37m"
c0=${reset}
c1=${magenta}
c2=${green}
c3=${white}
c4=${blue}
c5=${red}
c6=${yellow}
c7=${cyan}
c8=${black}
c9=${bgyellow}
c10=${bgwhite}
# Get the kernel
# This will decide the further actionsvand command usages as bsd and gnu tools even with same name are DIFFERENT.
kernel=$(uname -o)
# Get the init
get_init() {
if pidof -q systemd; then
echo 'systemd'
elif [ -f '/sbin/openrc' ]; then
echo 'openrc'
elif [ -f '/sbin/dinit' ]; then
echo 'dinit'
else
cut -d ' ' -f 1 /proc/1/comm
fi
}
# Get count of packages installed
get_pkg_count() {
package_managers=('xbps-install' 'apk' 'port' 'apt' 'pacman' 'nix' 'dnf' 'rpm' 'emerge' 'eopkg')
for package_manager in "${package_managers[@]}"; do
if command -v "$package_manager" 2>/dev/null >&2; then
case "$package_manager" in
xbps-install) xbps-query -l | wc -l ;;
apk) apk search | wc -l ;;
apt) if [ "$kernel" != "Darwin" ]; then
echo $(($(apt list --installed 2>/dev/null | wc -l) - 1))
else
echo 0
fi
;;
pacman) pacman -Q | wc -l ;;
nix) nix-env -qa --installed '*' | wc -l ;;
dnf) dnf list installed | wc -l ;;
rpm) rpm -qa | wc -l ;;
emerge) qlist -I | wc -l ;;
port) port installed 2>/dev/null | wc -l | awk 'NR==1{print $1}' ;;
eopkg) eopkg li | wc -l ;;
esac
# if a package manager is found return from the function
return
fi
done
echo 0
}
# Get package information formatted
get_package_info() {
pkg_count=$(get_pkg_count)
if [ "$pkg_count" -ne 0 ]; then
echo -n "$pkg_count"
else
echo "Unknown"
fi
}
# Get distro name
distro() {
awk -F '"' '/PRETTY_NAME/ { print $2 }' /etc/os-release
}
# Get root partition space used
root_storage() {
df -h --output=used,size / | awk 'NR == 2 { print $1" / "$2 }'
}
home_storage() {
if mountpoint -q "/home"; then
df -h --output=used,size /home | awk 'NR == 2 { print $1" / "$2 }'
fi
}
# Get Memory usage
mem() {
free --mega | awk 'NR == 2 { print $3" / "$2" MB" }'
}
# Get uptime
get_uptime() {
uptime -p | sed 's/up//'
}
# Get DE/WM
# Reference: https://github.com/unixporn/robbb/blob/master/fetcher.sh
get_de_wm() {
wm="${XDG_CURRENT_DESKTOP#*:}"
[ "$wm" ] || wm="$DESKTOP_SESSION"
# for most WMs
[ ! "$wm" ] && [ "$DISPLAY" ] && command -v xprop >/dev/null && {
id=$(xprop -root -notype _NET_SUPPORTING_WM_CHECK 2>/dev/null)
id=${id##* }
wm=$(xprop -id "$id" -notype -len 100 -f _NET_WM_NAME 8t 2>/dev/null | grep '^_NET_WM_NAME' | cut -d\" -f 2)
}
# for non-EWMH WMs
[ ! "$wm" ] || [ "$wm" = "LG3D" ] && {
wms=('sway' 'kiwmi' 'wayfire' 'sowm' 'catwm' 'fvwm' 'dwm' '2bwm' 'monsterwm' 'tinywm' 'xmonad')
for current_wm in "${wms[@]}"; do
if pgrep -x "$current_wm" 2>/dev/null >&2; then
wm="${current_wm}";
break
fi
done
}
echo "${wm:-unknown}"
}
echo -e " ┏━━━━━━━━━━━━━━━━━━━━━━┓"
echo -e "${c7}f${c4}e${c5}t${c6}${c7}c${c1}h${c0} ${c6}${c0} ${c7}${c0} ${c5}${c0}"
echo -e " ┣━━━━━━━━━━━━━━━━━━━━━━┫ ${c1}━━━${c2}━━━${c3}━━━${c4}━━━${c5}━━━${c6}━━━${c7}━━━"
echo -e " ${c0} ┃ ┃ ${c1}os${c3} $(distro)"
echo -e "${c3}${c8}_${c3}${c0}${c2}ker${c3} $(uname -r)"
echo -e "${c8}${c0}${c9}oo${c0}${c8}|${c0}${c7}pkgs${c3} $(get_package_info)"
echo -e "${c8}/${c0}${c10}${c0}${c8}'\'${c0}${c5}sh${c3} ${SHELL##*/} ${c6}󰮯 ${c6}${c2}󰊠 ${c2}${c4}󰊠 ${c4}${c5}󰊠 ${c5}${c7}󰊠 ${c7}"
echo -e " ${c0}${c9}(${c0}${c8}\_;/${c0}${c9})${c0}${c1}ram${c3} $(mem)"
echo -e "${c0}${c2}init${c3} $(get_init)"
echo -e " ┃ I ${c1}${c0} Arch ┃ ${c7}de/wm${c3} $(get_de_wm)"
echo -e " ┃ ┃ ${c5}up${c3} $(get_uptime)"
echo -e " ┃ ┃ ${c1}root${c3} $(root_storage)"
echo -e " ┃ ┃ ${c1}home${c3} $(home_storage)"
echo -e " ┗━━━━━━━━━━━━━━━━━━━━━━┛ ${c1}━━━${c2}━━━${c3}━━━${c4}━━━${c5}━━━${c6}━━━${c7}━━━"
echo -e " "