89 lines
2.8 KiB
Python
89 lines
2.8 KiB
Python
import yaml
|
|
import os
|
|
from platformdirs import user_config_dir
|
|
import argparse
|
|
|
|
|
|
APP_NAME = "sims"
|
|
|
|
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="sims")
|
|
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", {"enable": False})
|
|
BATTERY = app_config.get("battery", {"enable": False})
|
|
WINDOW_TITLE = app_config.get("window_title", {"enable": True})
|
|
STYLIX = app_config.get("stylix", {"enable": False})
|
|
CALENDAR = app_config.get("calendar", {"enable": True, "khal_path": "khal"})
|
|
NOTMUCH = app_config.get("notmuch", {"enable": True, "notmuch_path": "notmuch", "emacsclient_command": "emacsclient", "saved_searches": []})
|
|
NOTMUCH.setdefault("saved_searches", [])
|
|
SCREENREC = app_config.get("screenrec", {
|
|
"enable": False,
|
|
"output_dir": "~/Videos/wl-screenrec",
|
|
})
|
|
POWER = app_config.get("power", {
|
|
"lock_command": ["waylock"],
|
|
})
|
|
NOTIFICATIONS = app_config.get("notifications", {
|
|
"enable": False,
|
|
"anchor": "top center",
|
|
"margin": "8px",
|
|
"width": 360,
|
|
"timeout_ms": 10_000,
|
|
"history_size": 50,
|
|
"image_max_px": 128,
|
|
"center_width": 380,
|
|
})
|
|
BAR_HEIGHT = app_config.get("height", 40)
|
|
LOG_LEVEL = app_config.get("logLevel", "WARNING")
|
|
DEV = app_config.get("dev", False)
|
|
BUDDY = app_config.get("buddy", {"enable": False})
|
|
ORG = app_config.get("org", {"enable": False})
|
|
ORG.setdefault("paths", [])
|
|
ORG.setdefault("todo_keywords", ["TODO", "NEXT", "IN-PROGRESS"])
|
|
ORG.setdefault("done_keywords", ["DONE", "CANCELLED"])
|
|
ORG.setdefault("counted_states", ["TODO", "NEXT", "IN-PROGRESS"])
|
|
ORG.setdefault("update_interval", 60_000)
|
|
ORG.setdefault("emacsclient_command", "emacsclient")
|
|
ORG.setdefault("dropdown_width", 420)
|
|
ORG.setdefault("dropdown_height", 480)
|