Files
Modus/modules/about.py
T
2025-07-30 18:44:13 +05:30

130 lines
4.3 KiB
Python

import subprocess
import time
import gi # type: ignore
from fabric.widgets.label import Label
from fabric.widgets.button import Button
from fabric.widgets.box import Box
from utils.wayland import WaylandWindow as Window
from fabric.utils.helpers import exec_shell_command_async, get_relative_path
from gi.repository import Gtk, GdkPixbuf # type: ignore
# from config.c import c
class About(Gtk.Window):
"""About app for envshell"""
def __init__(self):
super().__init__(title="About Menu")
self.set_default_size(250, 335)
self.set_size_request(250, 355)
self.set_resizable(False)
self.set_wmclass("modus-about-menu", "modus-about-menu")
self.set_name("about-menu")
self.set_visible(False)
# Main vertical box
main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
main_box.set_margin_top(20)
main_box.set_margin_bottom(20)
main_box.set_margin_start(20)
main_box.set_margin_end(20)
# About logo
logo_box = Gtk.Box(halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER)
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
get_relative_path("../config/assets/icons/imac.svg"),
158,
108,
preserve_aspect_ratio=True,
)
logo = Gtk.Image.new_from_pixbuf(pixbuf)
logo_box.pack_start(logo, False, False, 0)
# Labels
name_label = Gtk.Label(label="Modus")
date_label = Gtk.Label(label="Modus, 2025")
# Info Section
info_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
info_title_box = Gtk.Box(
orientation=Gtk.Orientation.VERTICAL, valign=Gtk.Align.CENTER
)
info_box_labels = Gtk.Box(
orientation=Gtk.Orientation.VERTICAL, valign=Gtk.Align.CENTER
)
# Titles
info_title_box.pack_start(
Gtk.Label(label="SO", halign=Gtk.Align.END), False, False, 0
)
info_title_box.pack_start(
Gtk.Label(label="Chip", halign=Gtk.Align.END), False, False, 0
)
info_title_box.pack_start(
Gtk.Label(label="Memory", halign=Gtk.Align.END), False, False, 0
)
# Values
so_label = Gtk.Label(
label=subprocess.run(
"cat /etc/*-release | grep '^PRETTY_NAME=' | cut -d '\"' -f 2",
shell=True,
capture_output=True,
text=True,
).stdout.strip(),
halign=Gtk.Align.START,
)
chip_label = Gtk.Label(
label=subprocess.run(
"lscpu | grep 'Model name:' | awk '{print $5}'",
shell=True,
capture_output=True,
text=True,
).stdout.strip(),
halign=Gtk.Align.START,
)
mem_label = Gtk.Label(
label=subprocess.run(
"free -h --giga | grep Mem | tr -s ' ' | cut -d ' ' -f 2",
shell=True,
capture_output=True,
text=True,
).stdout.strip(),
halign=Gtk.Align.START,
)
info_box_labels.pack_start(so_label, False, False, 0)
info_box_labels.pack_start(chip_label, False, False, 0)
info_box_labels.pack_start(mem_label, False, False, 0)
info_box.pack_start(info_title_box, False, False, 10)
info_box.pack_start(info_box_labels, False, False, 10)
# More Info Button
button_box = Gtk.Box(halign=Gtk.Align.CENTER)
more_info_button = Gtk.Button(label="More Info...", name="more-info-button")
more_info_button.connect("clicked", self.open_more_info)
button_box.pack_start(more_info_button, False, False, 0)
# Add everything to the main box
main_box.pack_start(logo_box, False, False, 0)
main_box.pack_start(name_label, False, False, 0)
main_box.pack_start(date_label, False, False, 0)
main_box.pack_start(info_box, False, False, 0)
main_box.pack_start(button_box, False, False, 0)
# Add main box to the window
self.add(main_box)
def open_more_info(self, button):
# exec_shell_command_async(f"xdg-open {c.get_shell_rule('about-more-info')}")
pass
def toggle(self, b):
if self.get_visible():
self.hide()
else:
self.show_all()