From ba883f2719b26d041556488a1cddf6a715a8dcd0 Mon Sep 17 00:00:00 2001 From: satr14 Date: Wed, 18 Mar 2026 17:44:23 +0700 Subject: [PATCH] Add fetch.sh --- fetch.sh | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 fetch.sh diff --git a/fetch.sh b/fetch.sh new file mode 100644 index 0000000..59417d6 --- /dev/null +++ b/fetch.sh @@ -0,0 +1,221 @@ +#! /bin/sh + +# curl -fsSL fetch.satr14.my.id | sh -s -- color + +os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + echo $NAME + elif [ -d /system/app ] && [ -d /system/priv-app ]; then + echo "Android $(getprop ro.build.version.release)" + else + echo "N/A" + fi +} + +kernel() { + uname -rm +} + +machine() { + NAME=$(cat /sys/devices/virtual/dmi/id/product_name) + VERSION=$(cat /sys/devices/virtual/dmi/id/product_version) + MODEL=$(cat /sys/firmware/devicetree/base/model) + if [ -n "$MODEL" ] || [ -n "$VERSION" ] || [ -n "$NAME" ]; then + echo "$NAME $VERSION $MODEL" | awk '{$1=$1};1' | tr -s ' ' + else + echo "N/A" + fi +} + +up() { + OUT=$(cut -d ' ' -f 1 /proc/uptime) + if [ -n "$OUT" ]; then + echo "$OUT seconds" + else + echo "N/A" + fi +} + +desktop() { + for var in "XDG_CURRENT_DESKTOP" "DESKTOP_SESSION" "XDG_SESSION_DESKTOP" "CURRENT_DESKTOP" "SESSION_DESKTOP"; do + DE=$(eval "echo \$$var") + if [ -n "$DE" ]; then + echo "$DE" + return 0 + fi + done + echo "N/A" +} + +shell() { + if [ -n "$SHELL" ]; then + echo "$SHELL" + else + echo "N/A" + fi +} + +resolution() { + if [ -n "$(command -v xrandr)" ]; then + RES="$(xrandr | awk '/\*/ {print $1}')" + if [ -n "$RES" ]; then + echo $RES + else + echo "N/A" + fi + else + echo "N/A" + fi +} + +pkgs() { + OUTPUT="" + + if [ -f /bin/dpkg ]; then + DPKG="$(dpkg --get-selections | wc -l)" + OUTPUT="${OUTPUT}dpkg($DPKG) " + fi + + if [ -f /bin/flatpak ]; then + FLATPAK="$(flatpak list | wc -l)" + OUTPUT="${OUTPUT}flatpak($FLATPAK) " + fi + + if [ -f /bin/pacman ]; then + PACMAN="$(pacman -Qq | wc -l)" + OUTPUT="${OUTPUT}pacman($PACMAN) " + fi + + if [ -f /var/lib/rpm ]; then + RPM="$(rpm -qa | wc -l)" + OUTPUT="${OUTPUT}rpm($RPM) " + fi + + if [ -f /bin/snap ]; then + SNAP="$(snap list | wc -l)" + OUTPUT="${OUTPUT}snap($SNAP) " + fi + + if [ -f /bin/xbps-install ]; then + XBPS="$(xbps-query -l | wc -l)" + OUTPUT="${OUTPUT}xbps($XBPS) " + fi + + if [ -f /run/current-system/sw/bin/nix-store ]; then + NIX="$(nix-store -q --requisites /run/current-system/sw | wc -l)" + OUTPUT="${OUTPUT}nix($NIX) " + fi + + if [ -n "$OUTPUT" ]; then + echo $OUTPUT + else + echo "N/A" + fi +} + +cpu() { + CPU=$(awk -F ': ' '/model name/ {print $2}' /proc/cpuinfo | head -n1) + if [ -n "$CPU" ]; then + echo "$CPU ($(nproc)/$(nproc --all))" + else + echo "N/A" + fi +} + +gpu() { + GPU=$(lspci | grep -E 'VGA|3D' | cut -d ':' -f3) + if [ -n "$GPU" ]; then + echo $GPU + else + echo "N/A" + fi +} + +mem() { + TOTAL=$(grep "MemTotal:" /proc/meminfo | awk '{print $2}') + FREE=$(grep "MemFree:" /proc/meminfo | awk '{print $2}') + + USED_MIB=$(( (TOTAL - FREE) / 1024 )) + TOTAL_MIB=$(( TOTAL / 1024 )) + + PERCENT=$(( (USED_MIB * 100) / (TOTAL / 1024) )) + + echo "${USED_MIB}MiB of ${TOTAL_MIB}MiB ($PERCENT%)" +} + +disk() { + df -h / | awk 'NR==2 {printf "%.2fGiB of %.2fGiB (%s, /)\n", $3, $2, $5}' +} + +log() { + VAL=$(eval $2) + if [ -n "$VAL" ] && [ ! "$VAL" = "N/A" ]; then + printf "$OPTIONS" "$1"; echo "$VAL" + return 0 + else + return 1 + fi +} + +main() { + COLOR_KEY="94" + COLOR_VALUE="97" + COLOR_COLON="33" + COLOR_IDENT="32" + COLOR_AT="37" + + R="" + OPTIONS_HEAD="%-12s %s@%s\n" + OPTIONS="%-10s : " + + L_VALUE="" + while getopts "cs:l:" opt; do + case $opt in + c) + R="\033[0m" + OPTIONS_HEAD="%-12s \033[${COLOR_IDENT}m%s$R\033[${COLOR_AT}m@$R\033[${COLOR_IDENT}m%s$R\n" + OPTIONS="$R\033[${COLOR_KEY}m%-10s$R \033[${COLOR_COLON}m:$R\033[${COLOR_VALUE}m " + ;; + l) + $OPTARG + ;; + *) + echo "Usage: $0 [-c] [-l value]" + exit 1 + ;; + esac + done + + HOSTNAME=${HOSTNAME:-${hostname:-$(hostname)}} + USERNAME=${USER:-$(id -un)} + if [ -f /proc/sys/kernel/hostname ]; then + HOSTNAME=$(cat /proc/sys/kernel/hostname) + elif [ -f /etc/hostname ]; then + HOSTNAME=$(< /etc/hostname) + fi + printf "$OPTIONS_HEAD" "" ${USERNAME:-"user"} ${HOSTNAME:-"host"} + + ANY_OUTPUT=0 + if log "Distro" "os"; then ANY_OUTPUT=1; fi + if log "Kernel" "kernel"; then ANY_OUTPUT=1; fi + if log "Machine" "machine"; then ANY_OUTPUT=1; fi + if log "Uptime" "up"; then ANY_OUTPUT=1; fi + [ $ANY_OUTPUT -eq 1 ] && echo + + ANY_OUTPUT=0 + if log "Desktop" "desktop"; then ANY_OUTPUT=1; fi + if log "Shell" "shell"; then ANY_OUTPUT=1; fi + if log "Resolution" "resolution"; then ANY_OUTPUT=1; fi + if log "Packages" "pkgs"; then ANY_OUTPUT=1; fi + [ $ANY_OUTPUT -eq 1 ] && echo + + ANY_OUTPUT=0 + if log "CPU" "cpu"; then ANY_OUTPUT=1; fi + if log "GPU" "gpu"; then ANY_OUTPUT=1; fi + if log "Memory" "mem"; then ANY_OUTPUT=1; fi + if log "Disk" "disk"; then ANY_OUTPUT=1; fi + printf "$R" +} + +main $1 2> /dev/null