summaryrefslogtreecommitdiffstats
path: root/hyprsunset_qt
diff options
context:
space:
mode:
Diffstat (limited to 'hyprsunset_qt')
-rw-r--r--hyprsunset_qt/config.py40
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