diff options
Diffstat (limited to 'core/app_settings.py')
| -rw-r--r-- | core/app_settings.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/core/app_settings.py b/core/app_settings.py new file mode 100644 index 0000000..e8bc7ae --- /dev/null +++ b/core/app_settings.py @@ -0,0 +1,53 @@ +""" +core/app_settings.py + +Platform-aware persistence for application settings. + +Stored independently of profiles so they survive profile switches and +reflect per-computer preferences (theme, font, paths, etc.). + +Locations: + Windows : %APPDATA%/labUI/settings.json + macOS : ~/Library/Application Support/labUI/settings.json + Linux : $XDG_CONFIG_HOME/labUI/settings.json (default ~/.config/labUI/) +""" + +import json +import os +import sys +from pathlib import Path + + +def _settings_path() -> Path: + if sys.platform == "win32": + base = Path(os.environ.get("APPDATA", Path.home())) + elif sys.platform == "darwin": + base = Path.home() / "Library" / "Application Support" + else: + base = Path(os.environ.get("XDG_CONFIG_HOME", Path.home() / ".config")) + return base / "labUI" / "settings.json" + + +SETTINGS_PATH = _settings_path() + + +def load_settings(defaults: dict) -> dict: + """Return defaults merged with any saved settings. Never raises.""" + cfg = dict(defaults) + try: + if SETTINGS_PATH.exists(): + with open(SETTINGS_PATH) as f: + cfg.update(json.load(f)) + except Exception: + pass + return cfg + + +def save_settings(cfg: dict) -> None: + """Persist cfg to disk. Never raises.""" + try: + SETTINGS_PATH.parent.mkdir(parents=True, exist_ok=True) + with open(SETTINGS_PATH, "w") as f: + json.dump(cfg, f, indent=2) + except Exception: + pass |
