Files
Modus/modules/bar/bar.py
T
2025-02-21 21:03:31 +05:45

133 lines
4.0 KiB
Python

from fabric.hyprland.widgets import Language
from fabric.system_tray.widgets import SystemTray
from fabric.utils import FormattedString, bulk_replace
from fabric.widgets.box import Box
from fabric.widgets.button import Button
from fabric.widgets.centerbox import CenterBox
from fabric.widgets.datetime import DateTime
from fabric.widgets.label import Label
from fabric.widgets.wayland import WaylandWindow as Window
from gi.repository import GLib
from modules.bar.components import (
BatteryLabel,
BluetoothIndicator,
MicrophoneIndicator,
NetworkIndicator,
SystemInfo,
TaskBar,
VolumeIndicator,
workspace,
)
from snippets import MaterialIcon
from services import sc
class Bar(Window):
def __init__(self):
self.workspaces = Button(child=workspace, name="workspaces")
self.language = Language(
formatter=FormattedString(
"{replace_lang(language)}",
replace_lang=lambda lang: bulk_replace(
lang,
(r".*Eng.*", r".*Nep.*"),
("en", "np"),
regex=True,
),
),
)
self.recording_indicator = Button(
name="recording-indicator",
child=MaterialIcon("stop_circle", 16),
visible=False,
on_clicked=lambda *_: sc.screencast_stop(),
)
sc.connect(
"recording", lambda _, status: self.on_recording_status_change(status)
)
self.date_time = DateTime(formatters=["%-I:%M 󰧞 %a %d %b"], name="datetime")
self.battery = BatteryLabel(name="battery")
self.volume = VolumeIndicator()
self.bluetooth = BluetoothIndicator()
self.network = NetworkIndicator()
self.microphone = MicrophoneIndicator()
self.taskbar = TaskBar()
self.info = SystemInfo()
self.tray = SystemTray(name="tray", icon_size=16, spacing=4)
self.launcher = Button(
name="logo",
child=Label(name="logo-name", label="󰣇 󰫿󰫰󰫵"),
on_clicked=lambda *_: GLib.spawn_command_line_async(
"fabric-cli exec modus 'launcher.open(\"launcher\")'"
),
)
self.applets = Box(
name="applets",
spacing=4,
orientation="h",
children=[
self.language,
self.bluetooth,
self.network,
self.volume,
self.microphone,
],
)
self.bar = CenterBox(
name="bar",
start_children=Box(
name="start-container",
spacing=8,
orientation="h",
children=[
self.launcher,
self.workspaces,
self.info,
],
),
center_children=Box(
name="center-container",
spacing=8,
orientation="h",
children=self.taskbar,
),
end_children=Box(
name="end-container",
spacing=8,
orientation="h",
children=[
self.recording_indicator,
self.tray,
self.battery,
self.applets,
self.date_time,
],
),
)
super().__init__(
layer="top",
anchor="left bottom right",
exclusivity="auto",
visible=True,
child=self.bar,
)
self.hidden = False
def on_recording_status_change(self, status):
print(f"Recording status changed: {status}")
self.recording_indicator.set_visible(status)
def toggle_hidden(self):
self.hidden = not self.hidden
if self.hidden:
self.bar.add_style_class("hidden")
else:
self.bar.remove_style_class("hidden")