From 5857d4a0ed95c108e99bb34804ee94f228ca9f3b Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Thu, 23 Oct 2025 13:49:17 +1100 Subject: [PATCH] feat: Update lockscreen --- .config/hypr/hyprlock.conf | 24 +++++++- .config/hypr/scripts/stats.sh | 111 ++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 1 deletion(-) create mode 100755 .config/hypr/scripts/stats.sh diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf index 19583bc..59ecee7 100644 --- a/.config/hypr/hyprlock.conf +++ b/.config/hypr/hyprlock.conf @@ -44,6 +44,9 @@ label { position = -80, 290 halign = center valign = center + shadow_passes = 3 + shadow_size = 3 + shadow_color = rgba(0, 0, 0, 1) } # Time-Minute @@ -56,18 +59,24 @@ label { position = 0, 170 halign = center valign = center + shadow_passes = 3 + shadow_size = 3 + shadow_color = rgba(0, 0, 0,1) } # Day-Month-Date label { monitor = text = cmd[update:1000] echo -e "$(date +"%d %B")" - color = rgba(255, 255, 255, 100) + color = rgba(255, 255, 255, 1) font_size = 22 font_family = Suisse Int'l Mono position = 20, 92 halign = center valign = center + shadow_passes = 3 + shadow_size = 5 + shadow_color = rgba(0, 0, 0, 1) } # USER AVATAR @@ -126,3 +135,16 @@ label { halign = right valign = bottom } + + +# Stats +label { + monitor = eDP-1 + text = cmd[update:15000] /home/nathan/.config/hypr/scripts/stats.sh + color = rgb(255, 255, 255) + font_size = 10 + font_family = Symbols Nerd Font Mono + position = 10, 10 + halign = left + valign = bottom +} diff --git a/.config/hypr/scripts/stats.sh b/.config/hypr/scripts/stats.sh new file mode 100755 index 0000000..3a3f69b --- /dev/null +++ b/.config/hypr/scripts/stats.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash + +# Get system statistics +CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1) +MEMORY_USAGE=$(free -m | awk 'NR==2{printf "%.0f", $3*100/$2 }') + +CPU_TEMP="" +# Get temp info (CPU temp) +if [ -r /sys/class/thermal/thermal_zone0/temp ]; then + CPU_TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp) + CPU_TEMP_C=$((CPU_TEMP_RAW / 1000)) + CPU_TEMP="  ${CPU_TEMP_C}°C" +fi + + +echo " ${CPU_USAGE}%${CPU_TEMP}  ${MEMORY_USAGE}%" + +# GPU info +GPU_USAGE=$(cat /sys/class/drm/card1/device/gpu_busy_percent) +GPU_VRAM_USED=$(cat /sys/class/drm/card1/device/mem_info_vram_used) +GPU_VRAM_TOTAL=$(cat /sys/class/drm/card1/device/mem_info_vram_total) +GPU_VRAM_USAGE=$((GPU_VRAM_USED * 100 / GPU_VRAM_TOTAL)) + + +echo " ${GPU_USAGE}%  ${GPU_VRAM_USAGE}%" + +# Battery time: find battery device via upower and parse "time to full" / "time to empty" +# fallback to sysfs if upower not available +BAT_PATH="" +if command -v upower >/dev/null 2>&1; then + BAT_PATH=$(upower -e | grep -E "battery|BAT" | head -n1) +fi + +if [ -z "$BAT_PATH" ]; then + # try linux sysfs battery status file + if [ -r /sys/class/power_supply/BAT0/status ]; then + BAT_STATUS_FILE="/sys/class/power_supply/BAT0/status" + else + BAT_STATUS_FILE="" + fi + BATTERY_STATUS="" + if [ -n "$BAT_STATUS_FILE" ]; then + BATTERY_STATUS=$(cat "$BAT_STATUS_FILE") + fi +else + # use upower to read battery properties + BATTERY_STATUS=$(upower -i "$BAT_PATH" | awk -F: '/state:/ {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}') +fi + +if [ "$BATTERY_STATUS" = "charging" ] || [ "$BATTERY_STATUS" = "Charging" ]; then + if [ -n "$BAT_PATH" ]; then + # get everything after the colon and trim + TIME_TO_FULL=$(upower -i "$BAT_PATH" | sed -n 's/^[ \t]*time to full:[ \t]*//Ip') + else + TIME_TO_FULL="" + fi + if [ -n "$TIME_TO_FULL" ]; then + echo " ${TIME_TO_FULL} to full" + else + echo " Charging" + fi +elif [ "$BATTERY_STATUS" = "discharging" ] || [ "$BATTERY_STATUS" = "Discharging" ]; then + if [ -n "$BAT_PATH" ]; then + TIME_TO_EMPTY=$(upower -i "$BAT_PATH" | sed -n 's/^[ \t]*time to empty:[ \t]*//Ip') + else + TIME_TO_EMPTY="" + fi + if [ -n "$TIME_TO_EMPTY" ]; then + echo " ${TIME_TO_EMPTY} to empty" + else + echo " Discharging" + fi +fi + +# Check if internet is up by pinging a reliable host +if ping -c 1 -W 1 woodburn.au > /dev/null 2>&1; then + INTERNET_STATUS="up" +else + INTERNET_STATUS="down" +fi + +# Get WIFI SSID if connected +WIFI_SSID="" +if command -v nmcli >/dev/null 2>&1; then + WIFI_SSID=$(nmcli -t -f active,ssid dev wifi | grep '^yes:' | cut -d: -f2) +fi +if [ -n "$WIFI_SSID" ]; then + echo " SSID: ${WIFI_SSID} (${INTERNET_STATUS})" +else + echo " Internet: ${INTERNET_STATUS}" +fi + +# Get network info for each active interface +for IFACE in $(ls /sys/class/net/ | grep -E '^(en|wl|wg|tailscale|tun)'); do + IFACE_STATE="" + # safe read operstate + if [ -r "/sys/class/net/$IFACE/operstate" ]; then + IFACE_STATE=$(cat "/sys/class/net/$IFACE/operstate") + fi + # show physical interfaces when up, and always show virtual interfaces (tailscale/wg/tun) + if [ "$IFACE_STATE" = "up" ] || [[ "$IFACE" == tailscale* ]] || [[ "$IFACE" == wg* ]] || [[ "$IFACE" == tun* ]]; then + RX_BYTES=$(cat "/sys/class/net/$IFACE/statistics/rx_bytes" 2>/dev/null || echo 0) + TX_BYTES=$(cat "/sys/class/net/$IFACE/statistics/tx_bytes" 2>/dev/null || echo 0) + RX_HR=$(numfmt --to=iec --suffix=B "$RX_BYTES") + TX_HR=$(numfmt --to=iec --suffix=B "$TX_BYTES") + + echo " ${IFACE}: 󰇚 ${RX_HR} 󰕒 ${TX_HR}" + fi +done + +curl https://wttr.in/Canberra\?format\="%l:+%t+UV:+%u" \ No newline at end of file