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

View File

@ -47,6 +47,11 @@
pkgs, pkgs,
... ...
}: }:
let
cfg = config.services.makku-bar;
settingsFormat = pkgs.formats.yaml { };
in
{ {
options.services.makku-bar = { options.services.makku-bar = {
enable = lib.mkEnableOption "makku-bar status bar"; enable = lib.mkEnableOption "makku-bar status bar";
@ -56,24 +61,41 @@
default = self.packages.${pkgs.system}.default; default = self.packages.${pkgs.system}.default;
description = "The makku-bar package to use."; 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 { config = lib.mkIf config.services.makku-bar.enable {
systemd.user.services.makku-bar = { systemd.user.services.makku-bar =
Unit = { let
Description = "Makku Status Bar"; configFile = settingsFormat.generate "config.yaml" cfg.settings;
After = [ "graphical-session.target" ]; in
}; {
Unit = {
Description = "Makku Status Bar";
After = [ "graphical-session.target" ];
};
Service = { Service = {
ExecStart = "${config.services.makku-bar.package}/bin/bar"; ExecStart = "${config.services.makku-bar.package}/bin/bar --config ${configFile}";
Restart = "on-failure"; Restart = "on-failure";
}; };
Install = { Install = {
WantedBy = [ "default.target" ]; WantedBy = [ "default.target" ];
};
}; };
};
}; };
}; };
}; };

View File

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

View File

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