Source code for ebenezer.rofi.powermenu.main

#!/usr/bin/env python3

import importlib.resources as pkg_resources
import subprocess

from ebenezer.rofi.modals.confirm import confirm_cmd


def _rofi_command(theme, prompt, message=None):
    command = ["rofi", "-theme", theme, "-dmenu", "-p", prompt]
    if message:
        command.extend(["-mesg", message])
    return command


def _confirm_cmd() -> bool:
    return confirm_cmd("Confirmation", "Are you sure?")


def _confirm_exit() -> bool:
    return _confirm_cmd()


def _shutdown():
    if _confirm_exit():
        subprocess.run(["systemctl", "poweroff"])


def _reboot():
    if _confirm_exit():
        subprocess.run(["systemctl", "reboot"])


def _suspend():
    subprocess.run(["amixer", "set", "Master", "mute"])
    subprocess.run(["systemctl", "suspend"])


def _lock_screen():
    _close_rofi()
    subprocess.Popen(["ebenezer", "ui", "lock"])


def _logout():
    return subprocess.Popen(["qtile", "cmd-obj", "-o", "cmd", "-f", "shutdown"])


def _close_rofi():
    subprocess.run(["pkill", "^rofi"])
    subprocess.run(["sleep", "0.5"])


[docs] def main(): uptime = ( subprocess.run(["uptime", "-p"], stdout=subprocess.PIPE) .stdout.decode("utf-8") .strip() .replace("up ", "") ) rofi_theme = pkg_resources.files("ebenezer.rofi.powermenu").joinpath( "powermenu.rasi" ) rofi_cmd = _rofi_command(rofi_theme, f"Uptime: {uptime}") options = { "󰐥": _shutdown, "": _reboot, "": _lock_screen, "": _suspend, "󰍃": _logout, } chosen = ( subprocess.run( rofi_cmd, input="\n".join(options.keys()).encode(), stdout=subprocess.PIPE, ) .stdout.decode("utf-8") .strip() ) if chosen in options: options[chosen.strip()]() else: print("⚠️ Oh no! Invalid choice.")
if __name__ == "__main__": main()