#!/bin/bash # CACHE FILE PATH CACHE_FILE="/tmp/eww_laptop_info_cache.json" FALLBACK_LOGO="${HOME}/.config/eww/assets/brand.png" LOGO_CACHE_DIR="${HOME}/.cache/eww/logos" # --- 1. CEK CACHE UTAMA (FAST PATH) --- if [ -s "$CACHE_FILE" ]; then cat "$CACHE_FILE" exit 0 fi # --- 2. JIKA CACHE KOSONG, JALANKAN DETEKSI (HEAVY PATH) --- # Bagian ini hanya jalan 1x setelah laptop nyala. get_brand() { local vendor=$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null | tr '[:upper:]' '[:lower:]') case "$vendor" in *lenovo*) echo "lenovo" ;; *asus*) echo "asus" ;; *dell*) echo "dell" ;; *hp*|*hewlett*) echo "hp" ;; *acer*) echo "acer" ;; *msi*) echo "msi" ;; *apple*) echo "apple" ;; *samsung*) echo "samsung" ;; *toshiba*) echo "toshiba" ;; *sony*) echo "sony" ;; *razer*) echo "razer" ;; *gigabyte*) echo "gigabyte" ;; *framework*) echo "framework" ;; *) echo "unknown" ;; esac } get_logo_path() { local brand=$1 local domain="" mkdir -p "$LOGO_CACHE_DIR" local logo_file="${LOGO_CACHE_DIR}/${brand}.png" # Cek cache logo if [ -f "$logo_file" ] && [ -s "$logo_file" ]; then echo "$logo_file" return fi # Mapping domain case "$brand" in lenovo) domain="lenovo.com" ;; asus) domain="asus.com" ;; dell) domain="dell.com" ;; hp) domain="hp.com" ;; acer) domain="acer.com" ;; msi) domain="msi.com" ;; apple) domain="apple.com" ;; samsung) domain="samsung.com" ;; toshiba) domain="toshiba.com" ;; sony) domain="sony.com" ;; razer) domain="razer.com" ;; gigabyte) domain="gigabyte.com" ;; framework) domain="frame.work" ;; *) domain="" ;; esac # Download Async (Background) if [ -n "$domain" ]; then ( logo_url="https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https%3A%2F%2F${domain}&size=128" curl -s -m 10 -o "$logo_file" "$logo_url" 2>/dev/null ) & fi echo "$FALLBACK_LOGO" } get_model() { local model=$(cat /sys/class/dmi/id/product_name 2>/dev/null) if [ -z "$model" ] || [[ "$model" == *"System Product"* ]]; then model=$(cat /sys/class/dmi/id/board_name 2>/dev/null) fi echo "${model:-Unknown}" } get_cpu() { lscpu | grep "Model name" | cut -d':' -f2 | sed -e 's/(R)//g' -e 's/(TM)//g' -e 's/CPU //g' -e 's/Core //g' | xargs } get_gpu() { lspci | grep -i 'vga\|3d\|display' | cut -d':' -f3 | head -n1 | sed -e 's/Corporation //g' -e 's/\[.*\]//g' | xargs } get_ram() { free -h | awk '/^Mem:/ {print $2}' } get_disk() { local disk=$(df -h / | awk 'NR==2 {print $2}') local disk_type="SSD" if [ -f "/sys/block/sda/queue/rotational" ]; then [ "$(cat /sys/block/sda/queue/rotational)" -eq 1 ] && disk_type="HDD" fi echo "${disk} ${disk_type}" } # --- GENERATE DATA --- BRAND=$(get_brand) LOGO_PATH=$(get_logo_path "$BRAND") MODEL=$(get_model) CPU=$(get_cpu) GPU=$(get_gpu) RAM=$(get_ram) DISK=$(get_disk) # --- SAVE TO JSON CACHE --- # Kita simpan output json ke variabel dulu JSON_OUTPUT=$(jq -n \ --arg brand "$BRAND" \ --arg logo_path "$LOGO_PATH" \ --arg model "$MODEL" \ --arg cpu "$CPU" \ --arg gpu "$GPU" \ --arg ram "$RAM" \ --arg disk "$DISK" \ '{ brand: $brand, logo_path: $logo_path, model: $model, cpu: $cpu, gpu: $gpu, ram: $ram, disk: $disk }') # Tulis ke file cache echo "$JSON_OUTPUT" > "$CACHE_FILE" # Print ke stdout untuk Eww echo "$JSON_OUTPUT"