This commit is contained in:
Makesesama 2025-05-13 23:07:22 +02:00
parent 72c76c9fda
commit bf3920ad35
5 changed files with 102 additions and 17 deletions

52
bar/config.py Normal file
View File

@ -0,0 +1,52 @@
import yaml
import os
from platformdirs import user_config_dir
import argparse
APP_NAME = "makku_bar"
XDG_CONFIG_HOME = user_config_dir(appname=APP_NAME)
XDG_CONFIG_FILE = os.path.join(XDG_CONFIG_HOME, "config.yaml")
def load_config(config_path=XDG_CONFIG_FILE):
"""Loads configuration from a YAML file."""
if config_path is None:
print("No configuration file path provided or found.")
return None
try:
with open(config_path, "r") as f:
config = yaml.safe_load(f)
return config
except FileNotFoundError:
print(f"Error: Configuration file not found at {config_path}")
return None
except yaml.YAMLError as e:
print(f"Error parsing YAML file '{config_path}': {e}")
return None
except Exception as e:
print(f"An unexpected error occurred loading config file '{config_path}': {e}")
return None
def load_args():
parser = argparse.ArgumentParser(description="makku_bar")
parser.add_argument(
"-c",
"--config",
help="Path to a custom configuration file.",
type=str,
)
args = parser.parse_args()
return args.config
app_config = load_config() if not load_args() else load_config(load_args())
if app_config is None:
raise Exception("Config file missing")
VINYL = app_config.get("vinyl", {"enabled": False})

View File

@ -19,6 +19,8 @@ from fabric.utils import (
)
from fabric.widgets.circularprogressbar import CircularProgressBar
from bar.config import VINYL
class StatusBar(Window):
def __init__(
@ -74,6 +76,8 @@ class StatusBar(Window):
overlays=[self.cpu_progress_bar, self.progress_label],
)
self.player = Player()
self.vinyl = None
if VINYL["enabled"]:
self.vinyl = VinylButton()
self.status_container = Box(
@ -83,15 +87,16 @@ class StatusBar(Window):
children=self.progress_bars_overlay,
)
end_container_children = [
self.vinyl,
self.status_container,
]
end_container_children = []
if self.vinyl:
end_container_children.append(self.vinyl)
if self.system_tray:
end_container_children.append(self.system_tray)
end_container_children.append(self.date_time)
end_container_children.append(self.status_container)
self.children = CenterBox(
name="bar-inner",

View File

@ -47,6 +47,11 @@
pkgs,
...
}:
let
cfg = config.services.makku-bar;
settingsFormat = pkgs.formats.yaml { };
in
{
options.services.makku-bar = {
enable = lib.mkEnableOption "makku-bar status bar";
@ -56,17 +61,34 @@
default = self.packages.${pkgs.system}.default;
description = "The makku-bar package to use.";
};
settings = lib.mkOption {
type = lib.types.submodule {
options = {
vinyl = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
};
};
};
};
};
};
config = lib.mkIf config.services.makku-bar.enable {
systemd.user.services.makku-bar = {
systemd.user.services.makku-bar =
let
configFile = settingsFormat.generate "config.yaml" cfg.settings;
in
{
Unit = {
Description = "Makku Status Bar";
After = [ "graphical-session.target" ];
};
Service = {
ExecStart = "${config.services.makku-bar.package}/bin/bar";
ExecStart = "${config.services.makku-bar.package}/bin/bar --config ${configFile}";
Restart = "on-failure";
};

View File

@ -43,6 +43,8 @@ python3Packages.buildPythonApplication {
dependencies = with python3Packages; [
python-fabric
pywayland
pyyaml
platformdirs
];
doCheck = false;
dontWrapGApps = true;

View File

@ -27,6 +27,8 @@ pkgs.mkShell {
wayland-scanner
wayland
wayland-protocols
playerctl
(python3.withPackages (
ps: with ps; [
setuptools
@ -39,6 +41,8 @@ pkgs.mkShell {
pylsp-mypy
pyls-isort
python-lsp-ruff
pyyaml
platformdirs
]
))
];