Files
dotfiles/ignis/modules/control_center/widgets/user.py
T
2025-03-31 20:14:11 +02:00

72 lines
2.3 KiB
Python

import os
from ignis.widgets import Widget
from ignis.utils import Utils
from ignis.app import IgnisApp
from ignis.services.fetch import FetchService
from user_options import user_options
fetch = FetchService.get_default()
app = IgnisApp.get_default()
def format_uptime(value: tuple[int, int, int, int]) -> str:
days, hours, minutes, seconds = value
if days:
return f"up {days:02}:{hours:02}:{minutes:02}"
else:
return f"up {hours:02}:{minutes:02}"
class User(Widget.Box):
def __init__(self):
user_image = Widget.Picture(
image=user_options.user.bind(
"avatar",
lambda value: "user-info" if not os.path.exists(value) else value,
),
width=44,
height=44,
content_fit="cover",
style="border-radius: 10rem;",
)
username = Widget.Box(
child=[
Widget.Label(
label=os.getenv("USER"), css_classes=["user-name"], halign="start"
),
Widget.Label(
label=Utils.Poll(
timeout=60 * 1000, callback=lambda x: fetch.uptime
).bind("output", lambda value: format_uptime(value)),
halign="start",
css_classes=["user-name-secondary"],
),
],
vertical=True,
css_classes=["user-name-box"],
)
settings_button = Widget.Button(
child=Widget.Icon(image="emblem-system-symbolic", pixel_size=20),
halign="end",
hexpand=True,
css_classes=["user-settings", "unset"],
on_click=lambda x: self.__on_settings_button_click(),
)
power_button = Widget.Button(
child=Widget.Icon(image="system-shutdown-symbolic", pixel_size=20),
halign="end",
css_classes=["user-power", "unset"],
on_click=lambda x: app.toggle_window("ignis_POWERMENU"),
)
super().__init__(
child=[user_image, username, settings_button, power_button],
css_classes=["user"],
)
def __on_settings_button_click(self) -> None:
window = app.get_window("ignis_SETTINGS")
window.visible = not window.visible # type: ignore