diff options
Diffstat (limited to 'hyprsunset_qt/config.py')
| -rw-r--r-- | hyprsunset_qt/config.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/hyprsunset_qt/config.py b/hyprsunset_qt/config.py new file mode 100644 index 0000000..c2ef010 --- /dev/null +++ b/hyprsunset_qt/config.py @@ -0,0 +1,40 @@ +"""Parse and serialize hyprsunset.conf profile blocks.""" + +from __future__ import annotations + +import re +from dataclasses import dataclass + +_BLOCK_RE = re.compile(r"profile\s*\{(.*?)\}", re.DOTALL) + + +@dataclass +class Profile: + time: str = "" + identity: bool = False + temperature: int | None = None + gamma: float | None = None + + +def _get(body: str, key: str) -> str | None: + m = re.search(rf"^\s*{key}\s*=\s*(.+?)\s*$", body, re.MULTILINE) + return m.group(1) if m else None + + +def parse_config(text: str) -> list[Profile]: + profiles: list[Profile] = [] + for block in _BLOCK_RE.finditer(text): + body = block.group(1) + time = _get(body, "time") or "" + identity = (_get(body, "identity") or "").lower() == "true" + temp = _get(body, "temperature") + gamma = _get(body, "gamma") + profiles.append( + Profile( + time=time, + identity=identity, + temperature=int(temp) if temp is not None else None, + gamma=float(gamma) if gamma is not None else None, + ) + ) + return profiles |
