#!/bin/sh # Basic System Information Script RED="\e[31m" GREEN="\e[32m" YELLOW="\e[33m" MAGENTA="\e[35m" CYAN="\e[36m" BOLD="\e[1m" NC="\e[0m" # User and host info printf "%b\n" "${BOLD}${MAGENTA}${USER}@$(hostname)${NC}" printf "%b\n" "---------" # OS and architecture OS=$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '"') ARCH=$(uname -m) printf "%b\n" "${CYAN}OS:${NC} $OS $ARCH" # Kernel version printf "%b\n" "${CYAN}Kernel:${NC} Linux $(uname -r)" # Uptime UPTIME=$(uptime -p | sed 's/up //') printf "%b\n" "${CYAN}Uptime:${NC} $UPTIME" # Package counts: detect package manager and count packages if command -v pacman >/dev/null 2>&1; then # Arch Linux - count pacman and AUR packages PKG_COUNT=$(pacman -Q 2>/dev/null | wc -l) AUR_COUNT=$(pacman -Qm 2>/dev/null | wc -l) FLAT_COUNT=$(flatpak list 2>/dev/null | wc -l) printf "%b\n" "${CYAN}Packages:${NC} ${PKG_COUNT} (pacman), ${AUR_COUNT} (AUR), ${FLAT_COUNT} (flatpak)" elif command -v dpkg >/dev/null 2>&1; then # Debian/Ubuntu - count dpkg packages PKG_COUNT=$(dpkg-query -f '${binary:Package}\n' -W 2>/dev/null | wc -l) FLAT_COUNT=$(flatpak list 2>/dev/null | wc -l) printf "%b\n" "${CYAN}Packages:${NC} ${PKG_COUNT} (dpkg), ${FLAT_COUNT} (flatpak)" else # Fallback - just count flatpak FLAT_COUNT=$(flatpak list 2>/dev/null | wc -l) printf "%b\n" "${CYAN}Packages:${NC} ${FLAT_COUNT} (flatpak)" fi # Shell and version BASH_VER=$(bash --version | head -n1 | awk '{print $4}' | cut -d'(' -f1) printf "%b\n" "${CYAN}Shell:${NC} bash ${BASH_VER}" # Desktop Environment DE=${XDG_CURRENT_DESKTOP:-"Unknown"} printf "%b\n" "${CYAN}DE:${NC} $DE" # Motherboard Model BOARD_NAME=$(cat /sys/devices/virtual/dmi/id/board_name 2>/dev/null) printf "%b\n" "${CYAN}Motherboard:${NC} ${BOARD_NAME}" # CPU model from /proc/cpuinfo CPU=$(awk -F: '/model name/ {print $2; exit}' /proc/cpuinfo | sed 's/^[ \t]*//') printf "%b\n" "${CYAN}CPU:${NC} $CPU" # GPU info GPU=$(lspci | grep -i 'vga\|3d' | head -n1 | cut -d: -f3 | sed 's/^[ \t]*//') printf "%b\n" "${CYAN}GPU:${NC} $GPU" # Memory usage mem_info=$(free | awk '/Mem:/ {print $2, $3}') set -- $mem_info total=$1 used=$2 percent=$(awk "BEGIN {printf \"%.0f\", ($used/$total)*100}") if [ "$percent" -le 60 ]; then percent_color=$GREEN elif [ "$percent" -le 80 ]; then percent_color=$YELLOW else percent_color=$RED fi mem_total=$(free -h | awk '/Mem:/ {print $2}') mem_used=$(free -h | awk '/Mem:/ {print $3}') printf "%b\n" "${CYAN}Memory:${NC} ${mem_used} / ${mem_total} (${percent_color}${percent}%${NC})" # Swap usage swap_used=$(free -h | awk '/Swap/ {print $3}') swap_total=$(free -h | awk '/Swap/ {print $2}') swap_perc=$(free | awk '/Swap/ {if($2>0){printf("%.0f", ($3/$2)*100)} else {print "0"}}') if [ "$swap_perc" -le 60 ]; then swap_perc_color=$GREEN elif [ "$swap_perc" -le 80 ]; then swap_perc_color=$YELLOW else swap_perc_color=$RED fi printf "%b\n" "${CYAN}Swap:${NC} ${swap_used} / ${swap_total} (${swap_perc_color}${swap_perc}%${NC})" # Root disk usage root_line=$(df -h / | awk 'NR==2') root_used=$(echo "$root_line" | awk '{print $3}') root_total=$(echo "$root_line" | awk '{print $2}') root_percent=$(echo "$root_line" | awk '{gsub("%","",$5); print $5}') if [ "$root_percent" -le 60 ]; then root_color=$GREEN elif [ "$root_percent" -le 80 ]; then root_color=$YELLOW else root_color=$RED fi printf "%b\n" "${CYAN}Disk (/):${NC} ${root_used} / ${root_total} (${root_color}${root_percent}%${NC})" # /home disk usage home_line=$(df -h /home 2>/dev/null | awk 'NR==2') if [ -n "$home_line" ]; then home_used=$(echo "$home_line" | awk '{print $3}') home_total=$(echo "$home_line" | awk '{print $2}') home_percent=$(echo "$home_line" | awk '{gsub("%","",$5); print $5}') if [ "$home_percent" -le 60 ]; then home_color=$GREEN elif [ "$home_percent" -le 80 ]; then home_color=$YELLOW else home_color=$RED fi printf "%b\n" "${CYAN}Disk (/home):${NC} ${home_used} / ${home_total} (${home_color}${home_percent}%${NC})" fi # Determine the primary network interface used for internet access PRIMARY_IFACE=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $5; exit}') if [ -n "$PRIMARY_IFACE" ]; then LOCAL_IP=$(ip addr show "$PRIMARY_IFACE" | awk '/inet / {print $2}' | cut -d'/' -f1) printf "%b\n" "${CYAN}Local IP ($PRIMARY_IFACE):${NC} ${LOCAL_IP}" else printf "%b\n" "${RED}Local IP:${NC} Unable to determine primary network interface." fi # Current locale setting LOCALE=$(locale | awk -F= '/^LANG=/{print $2; exit}') printf "%b\n" "${CYAN}Locale:${NC} $LOCALE"