Files
dotfiles/.local/bin/myfetch.sh
T
2025-11-07 23:38:44 -05:00

63 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Colors
cyan=$'\e[1;36m'; green=$'\e[1;32m'; red=$'\e[1;31m'
magenta=$'\e[1;35m'; blue=$'\e[1;34m'
reset=$'\e[0m'
# Box drawing chars (UTF-8 fallback safe)
tl="╭"; tr="╮"; bl="╰"; br="╯"; h="─"; v="│"
if ! locale charmap 2>/dev/null | grep -qi 'utf'; then
tl="+"; tr="+"; bl="+"; br="+"; h="-"; v="|"
fi
# Strip ANSI escapes
strip_colors() { printf '%s' "$1" | sed -r 's/\x1B\[[0-9;]*[mK]//g'; }
# System age
sys_age=$(( ( $(date +%s) - $(stat -c %W / 2>/dev/null || echo 0) ) / 86400 ))
# Packages
pkg_count=$(find /var/db/pkg -mindepth 2 -maxdepth 2 -type d 2>/dev/null | wc -l)
# --- Define lines (easy to add new ones) ---
lines=(
"${green}Age${reset}: ${sys_age} days"
"${magenta}Pkgs${reset}: ${pkg_count}"
)
# --- Compute max width ---
maxlen=0
for l in "${lines[@]}"; do
stripped=$(strip_colors "$l")
slen=${#stripped}
((slen > maxlen)) && maxlen=$slen
done
# --- Borders ---
hline=$(printf "%${maxlen}s" "" | sed "s/ /$h/g")
printf '%s%s%s\n' "$tl" "$hline" "$tr"
for l in "${lines[@]}"; do
# split into label and value at first colon
label="${l%%:*}:" # label including colon
value="${l#*: }" # everything after colon + space
# strip colors for length calculation
stripped_label=$(strip_colors "$label")
stripped_value=$(strip_colors "$value")
# compute padding: value is right-aligned
label_len=${#stripped_label}
value_len=${#stripped_value}
pad=$((maxlen - label_len - value_len))
# print line: label left, pad spaces, value right
printf '%s%s%*s%s%s\n' "$v" "$label" "$pad" "" "$value" "$v"
done
# --- Bottom ---
printf '%s%s%s\n' "$bl" "$hline" "$br"