From 3f0b01e793f11f2d027a023dcd065728dc2e8ae6 Mon Sep 17 00:00:00 2001 From: TrudeEH Date: Mon, 31 Mar 2025 17:09:07 +0100 Subject: [PATCH] Add fetch script --- scripts/fetch | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100755 scripts/fetch diff --git a/scripts/fetch b/scripts/fetch new file mode 100755 index 00000000..b15476fe --- /dev/null +++ b/scripts/fetch @@ -0,0 +1,127 @@ +#!/bin/bash +# Basic System Information Script + +RED="\e[31m" +GREEN="\e[32m" +YELLOW="\e[33m" +MAGENTA="\e[35m" +CYAN="\e[36m" +BOLD="\e[1m" +ENDCOLOR="\e[0m" + +# User and host info +echo -e "${BOLD}${MAGENTA}${USER}@$(hostname)${ENDCOLOR}" +echo "---------" + +# OS and architecture +OS=$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '"') +ARCH=$(uname -m) +echo -e "${CYAN}OS:${ENDCOLOR} $OS $ARCH" + +# Host Model +HOST_MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null) +echo -e "${CYAN}Host:${ENDCOLOR} ${HOST_MODEL}" + +# Kernel version +echo -e "${CYAN}Kernel:${ENDCOLOR} Linux $(uname -r)" + +# Uptime in human-readable format +UPTIME=$(uptime -p | sed 's/up //') +echo -e "${CYAN}Uptime:${ENDCOLOR} $UPTIME" + +# Package counts: dpkg and flatpak +PKG_COUNT=$(dpkg-query -f '${binary:Package}\n' -W 2>/dev/null | wc -l) +FLAT_COUNT=$(flatpak list 2>/dev/null | wc -l) +echo -e "${CYAN}Packages:${ENDCOLOR} ${PKG_COUNT} (dpkg), ${FLAT_COUNT} (flatpak)" + +# Shell and version +BASH_VER=$(bash --version | head -n1 | awk '{print $4}' | cut -d'(' -f1) +echo -e "${CYAN}Shell:${ENDCOLOR} bash ${BASH_VER}" + +# Desktop Environment +DE=${XDG_CURRENT_DESKTOP:-"Unknown"} +echo -e "${CYAN}DE:${ENDCOLOR} $DE" + +# CPU model from /proc/cpuinfo +CPU=$(awk -F: '/model name/ {print $2; exit}' /proc/cpuinfo | sed 's/^[ \t]*//') +echo -e "${CYAN}CPU:${ENDCOLOR} $CPU" + +# GPU information extracted via lspci +GPU=$(lspci | grep -i 'vga\|3d' | head -n1 | cut -d: -f3 | sed 's/^[ \t]*//') +echo -e "${CYAN}GPU:${ENDCOLOR} $GPU" + +# Memory usage: show used, total, and percentage used with conditional coloring +mem_info=$(free | awk '/Mem:/ {print $2, $3}') +read total used <<<"$mem_info" +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}') +echo -e "${CYAN}Memory:${ENDCOLOR} ${mem_used} / ${mem_total} (${percent_color}${percent}%${ENDCOLOR})" + +# Swap usage (used/total) +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 + +echo -e "${CYAN}Swap:${ENDCOLOR} ${swap_used} / ${swap_total} (${swap_perc_color}${swap_perc}%${ENDCOLOR})" + +# Root disk usage without repeating filesystem label +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 +echo -e "${CYAN}Disk (/):${ENDCOLOR} ${root_used} / ${root_total} (${root_color}${root_percent}%${ENDCOLOR})" + +# /home disk usage without duplicating the label +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 + echo -e "${CYAN}Disk (/home):${ENDCOLOR} ${home_used} / ${home_total} (${home_color}${home_percent}%${ENDCOLOR})" +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) + echo -e "${CYAN}Local IP ($PRIMARY_IFACE):${ENDCOLOR} ${LOCAL_IP}" +else + echo -e "${RED}Local IP:${ENDCOLOR} Unable to determine primary network interface." +fi + +# Current locale setting +LOCALE=$(locale | awk -F= '/^LANG=/{print $2; exit}') +echo -e "${CYAN}Locale:${ENDCOLOR} $LOCALE"