genmon is a plugin for xfce and there are a lot of scripts in the web try this in puppy with xfce
you will need some deps like terminess nerd fonts (free font)
and hdsentinel
Code: Select all
#!/bin/bash
# Variables para la información del panel y del tooltip
INFO=""
# Obtener la fecha y hora actual
d=$(date +"%I:%M %p %d %b %Y")
# Aplicar la fuente "Terminess Nerd Font" y ajustar el tamaño
d_formatted="<span foreground='#AC507D'> </span><span foreground='#35C5B9'>$d</span>"
# Obtener el día actual
current_day=$(date +"%e") # Día actual con espacio inicial si es necesario
# Generar el calendario y ajustar manualmente las columnas para consistencia
t=$(cal | awk -v day="$current_day" '
{
for (i = 1; i <= NF; i++) {
if ($i == day) {
$i = "<span foreground=\"#35C5B9\"><b>" $i "</b></span>";
}
}
print $0;
}')
# Aplicar la fuente "Terminess Nerd Font" y un tamaño más grande al calendario
t="<span font_family='Terminess Nerd Font' font_size='16000'>$t</span>"
# Crear la información del panel y la salida genmon
INFO="<txt>$d_formatted</txt>"
echo -e "${INFO}"
echo "<txtclick>set-time-for-puppy</txtclick>"
echo "<tool>$t</tool>"
calendar.sh
panel= the date
tooltip= calendar
onclick= set-time-for-puppy
Code: Select all
#!/usr/bin/env bash
# Dependencies: bash>=3.2, coreutils, gawk, grep, sed, btop
# CPU usage percentage for all logical CPUs
CPU_USAGE=$(grep 'cpu ' /proc/stat | awk -v FS=" " '{usage=($2+$4)*100/($2+$4+$5); printf "%.1f %%", usage}')
# Tooltip
MORE_INFO="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' weight='bold'>"
MORE_INFO+="┌ $(grep 'model name' /proc/cpuinfo | cut -f2 -d ':' | sed -n 1p | sed -e 's/^[ \t]*//')\n" # CPU vendor, model, clock
STEP=0 # To generate CPU numbers (e.g., CPU0, CPU1...)
for CPU in $(awk '/MHz/ {print $4}' /proc/cpuinfo); do
MORE_INFO+="├─ CPU ${STEP}: ${CPU} MHz\n"
let STEP+=1
done
MORE_INFO+="</span>"
MORE_INFO+="</tool>"
# Panel
INFO="<txt>"
INFO+="<span foreground='#8F7BB9'> </span><span foreground='#35C5B9'>${CPU_USAGE} </span>"
INFO+="</txt>"
INFO+="<txtclick>xfce4-terminal --geometry=90x24 -e btop</txtclick>"
# Panel Print
echo -e "${INFO}"
# Tooltip Print
echo -e "${MORE_INFO}"
cpu.sh
panel=percent for cpu
tooltip=cores info
onclick=btop
Code: Select all
#!/usr/bin/env bash
# Obtener la dirección IPv4 local de la interfaz activa (ajustando el comando)
LOCAL_IP=$(ip -4 addr show scope global | grep inet | awk '{print $2}' | cut -d'/' -f1 | head -n 1)
# Obtener la dirección IPv4 pública (externa) usando un servicio web
EXTERNAL_IP=$(curl -s https://ifconfig.me)
# Validar si las IPs fueron obtenidas correctamente
if [[ -z "$LOCAL_IP" ]]; then
LOCAL_IP="No disponible"
fi
if [[ -z "$EXTERNAL_IP" ]]; then
EXTERNAL_IP="No disponible"
fi
# Información adicional en el tooltip
MORE_INFO="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>"
MORE_INFO+="┌ Dirección IPv4 Local: $LOCAL_IP\n"
MORE_INFO+="├ Dirección IPv4 Pública: $EXTERNAL_IP\n"
MORE_INFO+="├ Kernel: $(uname -r)\n"
MORE_INFO+="└ Hostname: $(hostname)"
MORE_INFO+="</span>"
MORE_INFO+="</tool>"
# Panel (muestra la dirección IPv4 local)
INFO="<txt><span foreground='#DAB45D'> </span><span foreground='#35C5B9'>${LOCAL_IP}</span></txt>"
# Panel Print
echo -e "${INFO}"
# Tooltip Print
echo -e "${MORE_INFO}"
ip.sh
panel=local ip
tooltip=local, external ip, host and kernel
onclick=none
Code: Select all
#!/bin/bash
# Definimos los puntos de montaje
MOUNT_POINT1="/initrd/mnt/dev_save"
MOUNT_POINT2="/initrd/pup_rw"
# Variables para la información del panel y del tooltip
INFO=""
MORE_INFO=""
# Función para obtener información de almacenamiento
get_storage_info() {
local mount_point=$1
if [ -d "$mount_point" ]; then
local total_size=$(df -B1 "$mount_point" | awk 'NR==2 {printf "%.2f", $2 / 1073741824}') # Convertimos a GB
local used_space=$(df -B1 "$mount_point" | awk 'NR==2 {printf "%.2f", $3 / 1073741824}')
local free_space=$(df -B1 "$mount_point" | awk 'NR==2 {printf "%.2f", $4 / 1073741824}')
# Cambiar la descripción del punto de montaje en el tooltip
local description=""
case "$mount_point" in
"$MOUNT_POINT1")
description="Pupsave"
;;
"$MOUNT_POINT2")
description="Running in live mode"
;;
*)
description="$mount_point"
;;
esac
# Información del Tooltip con Pango Markup
MORE_INFO+="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>"
MORE_INFO+="┌ $description\n"
MORE_INFO+="├─ Total: ${total_size} GB\n"
MORE_INFO+="├─ Used: ${used_space} GB\n"
MORE_INFO+="└─ Free: ${free_space} GB\n"
MORE_INFO+="</span>"
MORE_INFO+="</tool>"
# Información del Panel
INFO="<txt>"
INFO+="<span foreground='#ADD387'> </span><span foreground='#35C5B9'>${used_space} G / ${total_size} G</span>"
echo "<txtclick>pmount</txtclick>"
INFO+="</txt>"
else
INFO="<txt>N/A</txt>"
MORE_INFO="<tool><span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>No hay datos disponibles para ${mount_point}</span></tool>"
fi
}
# Verificar los puntos de montaje y obtener información
if [ -d "$MOUNT_POINT1" ]; then
get_storage_info "$MOUNT_POINT1"
elif [ -d "$MOUNT_POINT2" ];then
get_storage_info "$MOUNT_POINT2"
else
INFO="<txt>No hay puntos de montaje disponibles.</txt>"
MORE_INFO="<tool><span font_family='Terminess Nerd Font' font_size='18000'>No hay puntos de montaje disponibles.</span></tool>"
fi
# Panel Print (una sola línea)
echo -e "${INFO}"
# Tooltip Print (detallado)
echo -e "${MORE_INFO}"
space-save.sh
panel=used space in live mode or pupsave
tooltip=total, used and free
onclick=pmount
Code: Select all
#!/usr/bin/env bash
# Dependencies: bash>=3.2, coreutils, file, gawk
# Calcular valores generales de RAM
readonly TOTAL=$(free -b | awk '/^[Mm]em/ {printf "%.2f", $2 / (1024^3)}')
readonly USED=$(free -b | awk '/^[Mm]em/ {printf "%.2f", $3 / (1024^3)}')
readonly FREE=$(free -b | awk '/^[Mm]em/ {printf "%.2f", $4 / (1024^3)}')
# Calcular valores generales de SWAP
readonly SWAP_TOTAL=$(free -b | awk '/^Swap/ {printf "%.2f", $2 / (1024^3)}')
readonly SWAP_USED=$(free -b | awk '/^Swap/ {printf "%.2f", $3 / (1024^3)}')
readonly SWAP_FREE=$(free -b | awk '/^Swap/ {printf "%.2f", $4 / (1024^3)}')
# Inicializar variable para todos los bancos
BANKS_INFO=""
# Extraer información de módulos RAM
dmidecode -t memory | awk -F': ' '
/Bank Locator:/ { bank=$2; if (bank == "") bank="No especificado" }
/Size:/ { size=$2; if ($2 ~ "No Module Installed") size="No instalado" }
/Type:/ && !/Correction/ { type=$2; if (type == "") type="Desconocido" }
/Speed:/ && $2 ~ /^[0-9]+/ { speed=$2 " MT/s"; gsub("MT/s", "MHz", speed) }
/Manufacturer:/ { manufacturer=$2; if (manufacturer == "") manufacturer="No especificado" }
/^[[:space:]]*$/ {
# Solo agregar bancos que tienen todos los datos relevantes (evita bancos vacíos)
if (bank != "" && size != "" && size != "No instalado" && type != "" && speed != "" && manufacturer != "") {
printf "┌ Banco %s:\n├─ Capacidad: %s\n├─ Tipo: %s\n├─ Frecuencia: %s\n└─ Marca: %s\n\n", bank, size, type, speed, manufacturer >> "/tmp/banks_info"
}
bank=""; size=""; type=""; speed=""; manufacturer="" # Limpiar variables para el siguiente módulo
}
'
# Leer la información acumulada de los bancos
if [ -f /tmp/banks_info ]; then
BANKS_INFO=$(cat /tmp/banks_info)
rm /tmp/banks_info
else
BANKS_INFO="No se encontró información de los bancos de memoria o no hay RAM instalada."
fi
# Construir el panel
INFO="<txt>"
INFO+="<span foreground='#EF936B'> </span><span foreground='#35C5B9'>${USED} G / ${TOTAL} G</span>"
INFO+="</txt>"
# Construir el tooltip
MORE_INFO="<tool>"
MORE_INFO+="<span font_family='Terminess Nerd Font' font_size='16000' font_weight='bold'>"
MORE_INFO+=" RAM \n"
MORE_INFO+="${BANKS_INFO}\n\n"
MORE_INFO+="┌ Total RAM: ${TOTAL} GB\n"
MORE_INFO+="├─ RAM Usada: ${USED} GB\n"
MORE_INFO+="└─ RAM Libre: ${FREE} GB\n"
MORE_INFO+="\n┌ SWAP\n"
MORE_INFO+="├─ Total SWAP: ${SWAP_TOTAL} GB\n"
MORE_INFO+="├─ SWAP Usada: ${SWAP_USED} GB\n"
MORE_INFO+="└─ SWAP Libre: ${SWAP_FREE} GB\n"
MORE_INFO+="</span>"
MORE_INFO+="</tool>"
# Panel Print
echo -e "${INFO}"
# Tooltip Print
echo -e "${MORE_INFO}"
memory.sh
panel=ram used and total
tooltip=some ram details, size, brand, slots, used, free, and total ram
onclick=none
Code: Select all
#!/bin/bash
# Ruta al binario de hdsentinel
HDSENTINEL_CMD="/bin/hdsentinel"
# Archivo temporal para almacenar la salida completa de hdsentinel
TEMP_LOG="/tmp/hdsentinel_report.log"
# Comprobar si hdsentinel está instalado
if ! [ -x "$HDSENTINEL_CMD" ]; then
echo "<txt>Error</txt>"
echo "<tool>hdsentinel no está instalado o no es ejecutable.</tool>"
exit 1
fi
# Generar el reporte de hdsentinel en un archivo temporal
"$HDSENTINEL_CMD" > "$TEMP_LOG"
# Función para extraer información de un dispositivo del archivo temporal
extract_disk_info_from_log() {
local DEVICE=$1
# Localizar datos específicos del dispositivo
local HDD_DATA=$(grep -A 12 -i "$DEVICE" "$TEMP_LOG")
# Extraer información relevante con grep y sed
local MODEL=$(echo "$HDD_DATA" | grep -i "Model ID" | sed 's/.*Model ID *: //')
local SERIAL=$(echo "$HDD_DATA" | grep -i "Serial No" | sed 's/.*Serial No *: //')
local TEMP=$(echo "$HDD_DATA" | grep -i "Temperature" | sed 's/.*Temperature *: //; s/°C//')
local HEALTH=$(echo "$HDD_DATA" | grep -i "Health" | sed 's/.*Health *: //; s/%//')
local POWER_ON_TIME=$(echo "$HDD_DATA" | grep -i "Power on time" | sed 's/.*Power on time *: //')
local SIZE=$(echo "$HDD_DATA" | grep -i "HDD Size" | sed 's/.*HDD Size *: //; s/ MB//')
local TOTAL_WRITTEN=$(echo "$HDD_DATA" | grep -i "Total written" | sed 's/.*Total written *: //')
# Determinar tipo (HDD, SSD, NVMe)
local TYPE=$(echo "$HDD_DATA" | grep -qi "NVMe" && echo "NVMe" || \
(echo "$HDD_DATA" | grep -qi "USB/ATA" && echo "HDD" || echo "SSD"))
# Validar datos faltantes
[ -z "$MODEL" ] && MODEL="No disponible"
[ -z "$SERIAL" ] && SERIAL="No disponible"
[ -z "$TEMP" ] && TEMP="No disponible"
[ -z "$HEALTH" ] && HEALTH="No disponible"
[ -z "$POWER_ON_TIME" ] && POWER_ON_TIME="No disponible"
[ -z "$SIZE" ] && SIZE="No disponible"
[ -z "$TOTAL_WRITTEN" ] && TOTAL_WRITTEN="No disponible"
[ -z "$TYPE" ] && TYPE="No disponible"
# Retornar resultados
echo "$MODEL|$SERIAL|$TEMP|$HEALTH|$POWER_ON_TIME|$SIZE|$TOTAL_WRITTEN|$TYPE"
}
# Función para excluir dispositivos USB del panel pero no del tooltip
should_exclude_from_panel() {
local MODEL=$1
local DEVICE=$2
# Verificar si el dispositivo tiene modelo Kingston o es USB
if [[ "$MODEL" =~ [Kk]ingston.*[Dd]ata[Tt]raveler ]] || udevadm info --query=property --name="/dev/$DEVICE" | grep -q "ID_BUS=usb"; then
return 0 # Excluir del panel pero permitir tooltip
fi
return 1 # No excluir
}
# Filtrar dispositivos conectados dinámicamente, incluyendo NVMe
DEVICES=$(lsblk -dno NAME,TYPE | awk '$2 == "disk" {print $1}'; ls /dev/nvme* | awk -F'/' '{print $3}' | sort -u)
# Preparar salida
PANEL_OUTPUT=""
TOOLTIP_OUTPUT=""
for DEVICE in $DEVICES; do
if grep -iq "$DEVICE" "$TEMP_LOG"; then
DISK_INFO=$(extract_disk_info_from_log "$DEVICE")
IFS="|" read -r MODEL SERIAL TEMP HEALTH POWER_ON_TIME SIZE TOTAL_WRITTEN TYPE <<< "$DISK_INFO"
# Verificar si se debe excluir del panel
if should_exclude_from_panel "$MODEL" "$DEVICE"; then
# Incluir en el tooltip aunque no aparezca en el panel
TOOLTIP_OUTPUT+="┌ Información del Dispositivo USB ($DEVICE)
├ Modelo: $MODEL
├ Serial: $SERIAL
├ Salud: $HEALTH%
├ Temperatura: $TEMP°C
├ Tiempo encendido: $POWER_ON_TIME
├ Tamaño: $SIZE MB
├ Total escrito: $TOTAL_WRITTEN
└ Tipo: USB
"
continue # Saltar del panel
fi
# Agregar información al panel y al tooltip
PANEL_OUTPUT+="<span foreground='yellow'> $DEVICE:</span><span foreground='#35C5B9'> </span><span foreground='orange'>$HEALTH% $TEMP°C </span>|"
TOOLTIP_OUTPUT+="┌ Información del Disco ($DEVICE)
├ Modelo: $MODEL
├ Serial: $SERIAL
├ Salud: $HEALTH%
├ Temperatura: $TEMP°C
├ Tiempo encendido: $POWER_ON_TIME
├ Tamaño: $SIZE MB
├ Total escrito: $TOTAL_WRITTEN
└ Tipo: $TYPE
"
fi
done
# Validar si hay datos para mostrar
if [ -z "$PANEL_OUTPUT" ]; then
echo "<txt>Error: No se detectaron discos</txt>"
echo "<tool>No se encontraron discos disponibles para analizar.</tool>"
else
# Mostrar salida en el panel
echo "<txt>${PANEL_OUTPUT::-1}</txt>"
# Mostrar tooltip con detalles
echo "<tool>"
echo "<span font_family='Terminess Nerd Font' font_size='16000' weight='bold'>$TOOLTIP_OUTPUT</span>"
echo "</tool>"
fi
# Limpiar archivo temporal
rm -f "$TEMP_LOG"
hdsentinel.sh
panel=disk health, and temp
tooltip=detail disk info, size, type, health etc
onclick=none
some script could fail, need to test more, enjoy