#!/bin/sh
# luisfetch — a tiny, dependency-free system info tool for LuisOS.
# POSIX sh; works on Alpine/busybox. Part of the LuisHae family.
# https://luisfetch.pages.dev

if [ -t 1 ] && [ "$1" != "--no-color" ]; then
  P='\033[38;2;160;110;245m'; P2='\033[38;2;126;74;214m'
  T='\033[38;2;239;235;245m'; M='\033[38;2;150;145;165m'
  B='\033[1m'; R='\033[0m'
else
  P=''; P2=''; T=''; M=''; B=''; R=''
fi

. /etc/os-release 2>/dev/null
osname="${PRETTY_NAME:-${NAME:-LuisOS}}"
host="$(cat /proc/sys/kernel/hostname 2>/dev/null || hostname 2>/dev/null)"
usr="${USER:-$(id -un 2>/dev/null)}"
kern="$(uname -r) $(uname -m)"

if [ -r /proc/uptime ]; then
  up=$(awk '{s=int($1);d=int(s/86400);h=int((s%86400)/3600);m=int((s%3600)/60);
    o="";if(d>0)o=o d"d ";if(h>0)o=o h"h ";print o m"m"}' /proc/uptime)
fi
if command -v apk >/dev/null 2>&1; then
  pkgs="$(apk info 2>/dev/null | wc -l | tr -d ' ') (apk)"
else pkgs="$(command -v dpkg >/dev/null 2>&1 && dpkg -l 2>/dev/null | grep -c ^ii || echo '?')"; fi
if command -v flatpak >/dev/null 2>&1; then
  fp="$(flatpak list --app 2>/dev/null | wc -l | tr -d ' ')"
  [ "${fp:-0}" -gt 0 ] 2>/dev/null && pkgs="$pkgs, $fp (flatpak)"
fi
shell="$(basename "${SHELL:-sh}")"
de="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION:-KDE Plasma}}"
term="${TERM_PROGRAM:-${TERMINAL:-$TERM}}"
cpu="$(awk -F: '/model name/{print $2;exit}' /proc/cpuinfo 2>/dev/null | sed 's/^ *//;s/  */ /g')"
cores="$(grep -c ^processor /proc/cpuinfo 2>/dev/null)"
[ -n "$cores" ] && [ -n "$cpu" ] && cpu="$cpu ($cores)"
[ -r /proc/meminfo ] && mem=$(awk '/MemTotal/{t=$2}/MemAvailable/{a=$2}END{printf "%d / %d MiB",(t-a)/1024,t/1024}' /proc/meminfo)

# ---- logo rows (ASCII, single-byte so padding is exact) ----
LW=13
L1="   #######"
L2="  ##     ##"
L3=" ##  ###  ##"
L4=" ##  #o#  ##"
L5=" ##  ###  ##"
L6="  ##     ##"
L7="   #######"
L8=""
L9=""; L10=""; L11=""; L12=""

# ---- info rows ----
kv() { printf "${P}${B}%s${R}${M}:${R} ${T}%s${R}" "$1" "$2"; }
I1="$(printf "${T}${B}%s${R}${M}@${R}${T}${B}%s${R}" "$usr" "$host")"
I2="${M}$(printf '%*s' 25 '' | tr ' ' '-')${R}"
I3="$(kv 'OS      ' "$osname")"
I4="$(kv 'Kernel  ' "$kern")"
I5="$(kv 'Uptime  ' "${up:-?}")"
I6="$(kv 'Packages' "$pkgs")"
I7="$(kv 'Shell   ' "$shell")"
I8="$(kv 'DE      ' "$de")"
I9="$(kv 'Terminal' "${term:-?}")"
I10="$(kv 'CPU     ' "${cpu:-unknown}")"
I11="$(kv 'Memory  ' "${mem:-unknown}")"
pal=""; for c in 1 2 3 4 5 6; do pal="$pal\033[48;5;$((c+53))m  \033[0m"; done
I12="$pal"

printf "\n"
n=1
while [ $n -le 12 ]; do
  eval "lg=\$L$n; inf=\$I$n"
  printf "${P}${B}%-${LW}s${R}%b\n" "$lg" "$inf"
  n=$((n+1))
done
printf "\n"
