#!/usr/bin/env bash c_reset='\033[0m' c_bold='\033[1m' c_teal='\033[38;5;116m' c_blue='\033[38;5;110m' c_warning='\033[38;5;216m' c_gray='\033[38;5;243m' c_red='\033[38;5;168m' clear sys_os=$(uname -s 2>/dev/null) sys_env=$(uname -o 2>/dev/null) os_name="Unknown" host_info="Unknown" kernel_ver=$(uname -r 2>/dev/null || echo "Unknown") uptime_val="Unknown" arch_val=$(uname -m 2>/dev/null || echo "Unknown") packages="Unknown" cpu_model="Unknown" cpu_freq="N/A" cpu_cache="Unknown" cpu_cores="Unknown" gpu_info="Unknown" ram_tot="Unknown" ram_use="Unknown" ram_perc="Unknown" swap_tot="Unknown" swap_use="Unknown" swap_perc="Unknown" disk_output="Unknown" load_avg="Unknown" virt_type="Unknown" local_ip="Unknown" last_boot="Unknown" last_shutdown="Unknown" last_login="Unknown" if [ -n "$SSH_TTY" ]; then term_val=$(basename "$SSH_TTY") elif [ -t 1 ]; then term_val=$(tty 2>/dev/null | sed 's|/dev/||') elif [ -n "$TERM" ] && [ "$TERM" != "dumb" ]; then term_val="$TERM" else term_val="Unknown" fi shell_val=$(basename "$SHELL" 2>/dev/null || echo "Unknown") current_year=$(date +%Y) if [ "$sys_env" = "Android" ]; then os_name=$(getprop ro.build.version.release 2>/dev/null) os_name="Android ${os_name}" host_info=$(getprop ro.product.vendor.model 2>/dev/null || getprop ro.product.model 2>/dev/null) uptime_val=$(uptime -p 2>/dev/null | sed 's/up //' || echo "Unknown") pkg_dpkg=$(dpkg-query -f '.\n' -W 2>/dev/null | wc -l) packages="${pkg_dpkg} (termux/apt)" cpu_model=$(getprop ro.soc.model 2>/dev/null || awk -F': ' '/Hardware/ {print $2; exit}' /proc/cpuinfo 2>/dev/null) cpu_cores=$(nproc 2>/dev/null) gpu_info=$(getprop ro.hardware.egl 2>/dev/null || echo "Unknown") ram_tot=$(free 2>/dev/null | awk '/Mem:/ {printf "%.2f GB", $2/1048576}') ram_use=$(free 2>/dev/null | awk '/Mem:/ {printf "%.2f GB", $3/1048576}') ram_perc=$(free 2>/dev/null | awk '/Mem:/ {if ($2>0) printf "%.2f%%", ($3/$2)*100; else print "0.00%"}') disk_output=$(df -k /data 2>/dev/null | awk -v cb="$c_blue" -v cw="$c_warning" -v cr="$c_reset" 'NR==2 { tot=$2/1048576; use=$3/1048576; if ($2>0) perc=($3/$2)*100; else perc=0; printf "%-18s : %s%.2f GB %s(%.2f GB Used, %.2f%%)%s", "Disk (/data)", cb, tot, cw, use, perc, cr; }') load_avg=$(cat /proc/loadavg 2>/dev/null | awk '{print $1", "$2", "$3}') virt_type="Termux Container" local_ip=$(ip -4 route get 8.8.8.8 2>/dev/null | awk 'NR==1 {print $7}' || echo "Unknown") elif echo "$sys_os" | grep -qiE "mingw|msys|cygwin"; then os_name=$(cmd.exe /c ver 2>/dev/null | tr -d '\r\n') host_info=$(hostname 2>/dev/null) uptime_val="Requires WMI/PowerShell" packages="N/A (Windows Native)" cpu_model=$(wmic cpu get name 2>/dev/null | awk 'NR==2 {print}' | tr -d '\r') cpu_cores=$(wmic cpu get NumberOfLogicalProcessors 2>/dev/null | awk 'NR==2 {print}' | tr -d '\r') gpu_info=$(wmic path win32_VideoController get name 2>/dev/null | awk 'NR==2 {print}' | tr -d '\r') disk_output=$(printf "%-18s : %b%s%b" "Disk" "$c_blue" "N/A (Windows Native)" "$c_reset") virt_type="Windows Subsystem" local_ip=$(ipconfig 2>/dev/null | awk '/IPv4/ {print $NF}' | tr -d '\r' | head -n1) else [ -f /etc/os-release ] && os_name=$(grep -E "^PRETTY_NAME=" /etc/os-release | cut -d '"' -f 2) [ -r /sys/devices/virtual/dmi/id/product_name ] && host_info=$(cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null) uptime_val=$(uptime -p 2>/dev/null | sed 's/up //' || echo "Unknown") pkg_dpkg=$(dpkg-query -f '.\n' -W 2>/dev/null | wc -l) pkg_snap=$(snap list 2>/dev/null | awk 'NR>1 {print}' | wc -l) packages="${pkg_dpkg} (dpkg)" [ -n "$pkg_snap" ] && [ "$pkg_snap" -gt 0 ] && packages="${packages}, ${pkg_snap} (snap)" if [ -r /proc/cpuinfo ]; then cpu_model=$(awk -F': ' '/model name/ {print $2; exit}' /proc/cpuinfo) cpu_freq=$(awk -F': ' '/cpu MHz/ {printf "%.0f", $2; exit}' /proc/cpuinfo) cpu_cache=$(awk -F': ' '/cache size/ {print $2; exit}' /proc/cpuinfo) fi cpu_cores=$(nproc 2>/dev/null || echo "Unknown") if command -v lspci >/dev/null 2>&1; then gpu_info=$(lspci 2>/dev/null | grep -Ei 'vga|3d|display' | awk -F': ' '{print $2}' | sed 's/ (rev .*)//' | head -n1) fi [ -z "$gpu_info" ] && gpu_info="Unknown" ram_tot=$(free 2>/dev/null | awk '/Mem:/ {printf "%.2f GB", $2/1048576}') ram_use=$(free 2>/dev/null | awk '/Mem:/ {printf "%.2f GB", $3/1048576}') ram_perc=$(free 2>/dev/null | awk '/Mem:/ {if ($2>0) printf "%.2f%%", ($3/$2)*100; else print "0.00%"}') swap_tot=$(free 2>/dev/null | awk '/Swap:/ {printf "%.2f GB", $2/1048576}') swap_use=$(free 2>/dev/null | awk '/Swap:/ {printf "%.2f GB", $3/1048576}') swap_perc=$(free 2>/dev/null | awk '/Swap:/ {if ($2>0) printf "%.2f%%", ($3/$2)*100; else print "0.00%"}') disk_output=$(df -Pk 2>/dev/null | grep '^/dev/' | grep -v '/loop' | awk -v cb="$c_blue" -v cw="$c_warning" -v cr="$c_reset" '{ tot=$2/1048576; use=$3/1048576; if ($2>0) perc=($3/$2)*100; else perc=0; printf "%-18s : %s%.2f GB %s(%.2f GB Used, %.2f%%)%s\n", "Disk ("$6")", cb, tot, cw, use, perc, cr; }') load_avg=$(cat /proc/loadavg 2>/dev/null | awk '{print $1", "$2", "$3}' || echo "Unknown") virt_type="Dedicated" if command -v systemd-detect-virt >/dev/null 2>&1; then virt_type=$(systemd-detect-virt 2>/dev/null) [ "$virt_type" = "none" ] && virt_type="Dedicated" fi local_ip=$(ip -4 route get 8.8.8.8 2>/dev/null | awk 'NR==1 {print $7}' || echo "Unknown") last_boot=$(uptime -s 2>/dev/null || echo "Unknown") last_shutdown_raw=$(last -x shutdown -n 1 2>/dev/null | grep "^shutdown" | awk '{print $5, $6, $7, $8}') if [ -n "$last_shutdown_raw" ] && [ "$last_shutdown_raw" != "still running" ]; then last_shutdown=$(date -d "$last_shutdown_raw $current_year" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "Unknown") fi last_login_raw=$(last -n 1 -R "$USER" 2>/dev/null | grep "^$USER" | awk '{print $4, $5, $6, $7}') if [ -n "$last_login_raw" ] && [ "$last_login_raw" != "still logged" ]; then last_login=$(date -d "$last_login_raw $current_year" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "Unknown") else last_login="Still Logged In" fi fi if grep -qi "microsoft" /proc/version 2>/dev/null; then virt_type="WSL (Windows Subsystem for Linux)" fi echo printf '%s\n' '-------------- A System Fetch by Domi Adiwijaya ----------------' printf "%-18s : %b%s%b\n" "Version" "${c_red}" "2026-06-26" "${c_reset}" printf "%-18s : %b%s%b\n" "Usage" "${c_red}" "curl -Lso- pfetch.domi.my.id | bash" "${c_reset}" printf "%-18s : %b%s%b\n" "Source Code" "${c_red}" "https://pfetch.domi.my.id" "${c_reset}" printf '%s\n\n' '----------------------------------------------------------------' printf "%-18s : %b%s%b\n" "OS" "${c_blue}" "${os_name:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Host" "${c_blue}" "${host_info:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Architecture" "${c_blue}" "${arch_val:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Kernel" "${c_blue}" "${kernel_ver:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Uptime" "${c_blue}" "${uptime_val:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Packages" "${c_blue}" "${packages:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "CPU" "${c_blue}" "${cpu_model:-Unknown}" "${c_reset}" printf "%-18s : %b%s cores @ %s MHz%b\n" "CPU Cores" "${c_blue}" "${cpu_cores:-Unknown}" "${cpu_freq:-N/A}" "${c_reset}" printf "%-18s : %b%s%b\n" "CPU Cache" "${c_blue}" "${cpu_cache:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "GPU" "${c_blue}" "${gpu_info:-Unknown}" "${c_reset}" printf "%-18s : %b%s ${c_warning}(%s Used, %s)%b\n" "RAM" "${c_blue}" "${ram_tot:-Unknown}" "${ram_use:-Unknown}" "${ram_perc:-Unknown}" "${c_reset}" printf "%-18s : %b%s ${c_warning}(%s Used, %s)%b\n" "Swap" "${c_blue}" "${swap_tot:-Unknown}" "${swap_use:-Unknown}" "${swap_perc:-Unknown}" "${c_reset}" printf "%b\n" "$disk_output" printf "%-18s : %b%s%b\n" "Load Average" "${c_blue}" "${load_avg:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Virtualization" "${c_blue}" "${virt_type:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Shell" "${c_blue}" "${shell_val:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Terminal" "${c_blue}" "${term_val:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Local IP" "${c_blue}" "${local_ip:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Last Boot" "${c_blue}" "${last_boot:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n" "Last Shutdown" "${c_blue}" "${last_shutdown:-Unknown}" "${c_reset}" printf "%-18s : %b%s%b\n\n" "Last Login" "${c_blue}" "${last_login:-Unknown}" "${c_reset}"