#!/usr/bin/env python3 # FWS — menu d'alimentation (verrouiller / déconnexion / suspendre / # redémarrer / éteindre). Bouton de la barre ou Super+X. Universel : # • Hyprland (Wayland) → wofi, verrouillage hyprlock, sortie hyprctl. # • i3 (X11) → rofi, verrouillage i3lock, sortie i3-msg exit. # Aucune dépendance hors python3 + wofi/rofi (déjà là avec le bureau). import os import subprocess import sys _WOFI_STYLE = "/usr/local/share/fws/wofi-style.css" _HYPR = bool(os.environ.get("HYPRLAND_INSTANCE_SIGNATURE")) # (libellé affiché, commande shell). L'icône Nerd Font aide au repérage. if _HYPR: _lock = "hyprlock" _logout = "hyprctl dispatch exit" else: _lock = "i3lock -c 1e1e2e" _logout = "i3-msg exit" _ITEMS = [ ("󰌾 Verrouiller", _lock), ("󰗽 Déconnexion", _logout), ("󰤄 Suspendre", "systemctl suspend"), ("󰜉 Redémarrer", "systemctl reboot"), ("󰐥 Éteindre", "systemctl poweroff"), ] def _menu(entries): text = "\n".join(entries) if _HYPR: cmd = ["wofi", "--dmenu", "--prompt", "Alimentation", "--width", "300", "--height", "260", "--cache-file", "/dev/null"] if os.path.exists(_WOFI_STYLE): cmd += ["--style", _WOFI_STYLE] else: cmd = ["rofi", "-dmenu", "-i", "-p", "Alimentation", "-no-custom", "-theme-str", "window { width: 300px; } listview { lines: 5; }"] out = subprocess.run(cmd, input=text, text=True, capture_output=True, check=False) return out.stdout.strip() def main(): choice = _menu([label for label, _ in _ITEMS]) if not choice: return 0 for label, command in _ITEMS: if label == choice: subprocess.Popen(["sh", "-c", command]) # noqa: S603,S607 break return 0 if __name__ == "__main__": sys.exit(main())