Programador de apagado automático para CachyOS / Omarchy usando systemd user timers y una TUI con Python + Textual.
Ejecuta systemctl poweroff de forma limpia en el momento programado.
Controles del selector:
- ↑ / ↓ — cambiar el valor del campo activo
- ← / → — cambiar de campo (año, mes, día, hora, minuto)
- Tab — ir a los botones Programar / Volver
- CachyOS / Linux con systemd
- Python 3.10+
systemctl --userhabilitadonotify-send(opcional, para notificaciones gráficas)
cd ~/D-SSD/personal/projects/powerDesktop
chmod +x install.sh uninstall.sh
./install.shEsto:
- Crea un venv en
.venv/e instalatextual - Crea el comando global
Desktop(dispatcher paraDesktop shutdown alarm) - Agrega
~/.local/binal PATH en fish si hace falta
Reabrí la terminal o ejecutá:
fish_add_path ~/.local/binDesktop shutdown alarm| Opción | Acción |
|---|---|
| 30 minutos / 1 hora / 2 horas | Apagado rápido con timer relativo |
| Elegir fecha y hora | Formato YYYY-MM-DD HH:MM |
| Ver apagado programado | Muestra fecha, restante y estado |
| Cancelar apagado | Elimina solo los timers de esta app |
| Salir | Cierra la TUI |
- ↑ / ↓ — moverse en el menú
- Enter — seleccionar
- q — salir
Crea unidades de usuario en ~/.config/systemd/user/:
power-scheduler-shutdown.service→ ejecuta/usr/bin/systemctl poweroffpower-scheduler-shutdown.timer→ dispara el servicio
El estado (fecha programada, tiempo restante) se guarda en:
~/.local/share/powerDesktop/scheduled.json
Solo puede existir un apagado programado a la vez. Si intentás crear otro, la app te avisa y permite reemplazar.
# 1. Abrir la TUI
Desktop shutdown alarm
# 2. Programar apagado de prueba (ej. 30 min) y verificar timer
systemctl --user list-timers | grep power-scheduler
# 3. Ver estado persistido
cat ~/.local/share/powerDesktop/scheduled.json
# 4. Cancelar desde la TUI o manualmente
systemctl --user disable --now power-scheduler-shutdown.timer- Abrí con
Desktop shutdown alarm - Elegí una hora 2 minutos en el futuro con "Elegir fecha y hora"
- Verificá con "Ver apagado programado"
- Cancelá antes de que expire
cd ~/D-SSD/personal/projects/powerDesktop
./uninstall.sh
rm -rf .venv # opcional: eliminar entorno virtualOpcional: borrar el directorio del proyecto.
rm -rf ~/D-SSD/personal/projects/powerDesktoppowerDesktop/
├── docs/
│ └── screenshots/ # Capturas para el README
├── main.py # Entry point y chequeo de dependencias
├── systemd.py # Creación/gestión de timers systemd
├── tui.py # Interfaz Textual
├── config.py # Constantes y rutas
├── requirements.txt
├── install.sh
├── uninstall.sh
└── README.md
systemctl poweroffrequiere permisos de apagado (polkit). En sesión gráfica local de Omarchy suele funcionar sin sudo.- Para timers sin sesión activa:
sudo loginctl enable-linger $USER - Las notificaciones usan
notify-sendal programar o cancelar. - El instalador usa un venv local (
.venv/) para evitar conflictos con PEP 668 / Homebrew Python.

