mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-16 05:49:59 -05:00
refactor: add get_config func
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
import json
|
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -9,7 +8,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from caelestia.utils import hypr
|
from caelestia.utils import hypr
|
||||||
from caelestia.utils.notify import close_notification, notify
|
from caelestia.utils.notify import close_notification, notify
|
||||||
from caelestia.utils.paths import recording_notif_path, recording_path, recordings_dir, user_config_path
|
from caelestia.utils.paths import get_config, recording_notif_path, recording_path, recordings_dir
|
||||||
|
|
||||||
RECORDER = "gpu-screen-recorder"
|
RECORDER = "gpu-screen-recorder"
|
||||||
|
|
||||||
@@ -65,12 +64,10 @@ class Command:
|
|||||||
if self.args.sound:
|
if self.args.sound:
|
||||||
args += ["-a", "default_output"]
|
args += ["-a", "default_output"]
|
||||||
|
|
||||||
|
config = get_config()
|
||||||
try:
|
try:
|
||||||
config = json.loads(user_config_path.read_text())
|
|
||||||
if "record" in config and "extraArgs" in config["record"]:
|
if "record" in config and "extraArgs" in config["record"]:
|
||||||
args += config["record"]["extraArgs"]
|
args += config["record"]["extraArgs"]
|
||||||
except (json.JSONDecodeError, FileNotFoundError):
|
|
||||||
pass
|
|
||||||
except TypeError as e:
|
except TypeError as e:
|
||||||
raise ValueError(f"Config option 'record.extraArgs' should be an array: {e}")
|
raise ValueError(f"Config option 'record.extraArgs' should be an array: {e}")
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from typing import Any, Dict, Optional
|
|||||||
|
|
||||||
from caelestia.utils import hypr
|
from caelestia.utils import hypr
|
||||||
from caelestia.utils.io import log_message
|
from caelestia.utils.io import log_message
|
||||||
from caelestia.utils.paths import user_config_path
|
from caelestia.utils.paths import get_config
|
||||||
|
|
||||||
|
|
||||||
class WindowRule:
|
class WindowRule:
|
||||||
@@ -52,8 +52,8 @@ class Command:
|
|||||||
WindowRule("^[Pp]icture(-| )in(-| )[Pp]icture$", "titleRegex", "", "", ["pip"]),
|
WindowRule("^[Pp]icture(-| )in(-| )[Pp]icture$", "titleRegex", "", "", ["pip"]),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
config = get_config()
|
||||||
try:
|
try:
|
||||||
config = json.loads(user_config_path.read_text())
|
|
||||||
if "resizer" in config and "rules" in config["resizer"]:
|
if "resizer" in config and "rules" in config["resizer"]:
|
||||||
rules = []
|
rules = []
|
||||||
for rule_config in config["resizer"]["rules"]:
|
for rule_config in config["resizer"]["rules"]:
|
||||||
@@ -67,7 +67,7 @@ class Command:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
return rules
|
return rules
|
||||||
except (json.JSONDecodeError, KeyError):
|
except KeyError:
|
||||||
log_message("ERROR: invalid config")
|
log_message("ERROR: invalid config")
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from collections import ChainMap
|
|||||||
from typing import Any, Callable, cast
|
from typing import Any, Callable, cast
|
||||||
|
|
||||||
from caelestia.utils import hypr
|
from caelestia.utils import hypr
|
||||||
from caelestia.utils.paths import user_config_path
|
from caelestia.utils.paths import get_config
|
||||||
|
|
||||||
|
|
||||||
def is_subset(superset, subset):
|
def is_subset(superset, subset):
|
||||||
@@ -103,8 +103,8 @@ class Command:
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
self.cfg = DeepChainMap(json.loads(user_config_path.read_text())["toggles"], self.cfg)
|
self.cfg = DeepChainMap(get_config()["toggles"], self.cfg)
|
||||||
except (FileNotFoundError, json.JSONDecodeError, KeyError):
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import tempfile
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
from caelestia.utils.io import warn
|
||||||
|
|
||||||
config_dir: Path = Path(os.getenv("XDG_CONFIG_HOME", Path.home() / ".config"))
|
config_dir: Path = Path(os.getenv("XDG_CONFIG_HOME", Path.home() / ".config"))
|
||||||
data_dir: Path = Path(os.getenv("XDG_DATA_HOME", Path.home() / ".local/share"))
|
data_dir: Path = Path(os.getenv("XDG_DATA_HOME", Path.home() / ".local/share"))
|
||||||
state_dir: Path = Path(os.getenv("XDG_STATE_HOME", Path.home() / ".local/state"))
|
state_dir: Path = Path(os.getenv("XDG_STATE_HOME", Path.home() / ".local/state"))
|
||||||
@@ -67,3 +69,13 @@ def atomic_write(path: Path, content: str) -> None:
|
|||||||
|
|
||||||
def atomic_dump(path: Path, content: dict[str, Any]) -> None:
|
def atomic_dump(path: Path, content: dict[str, Any]) -> None:
|
||||||
atomic_write(path, json.dumps(content))
|
atomic_write(path, json.dumps(content))
|
||||||
|
|
||||||
|
|
||||||
|
def get_config() -> dict[str, Any]:
|
||||||
|
try:
|
||||||
|
return json.loads(user_config_path.read_text())
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
warn("failed to parse config, invalid JSON")
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
return {}
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ from caelestia.utils.paths import (
|
|||||||
c_state_dir,
|
c_state_dir,
|
||||||
config_dir,
|
config_dir,
|
||||||
data_dir,
|
data_dir,
|
||||||
|
get_config,
|
||||||
templates_dir,
|
templates_dir,
|
||||||
theme_dir,
|
theme_dir,
|
||||||
user_config_path,
|
|
||||||
user_templates_dir,
|
user_templates_dir,
|
||||||
)
|
)
|
||||||
from caelestia.utils.scheme import get_scheme
|
from caelestia.utils.scheme import get_scheme
|
||||||
@@ -417,10 +417,7 @@ def apply_colours(colours: dict[str, str], mode: str) -> None:
|
|||||||
except BlockingIOError:
|
except BlockingIOError:
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
cfg = get_config().get("theme", {})
|
||||||
cfg = json.loads(user_config_path.read_text())["theme"]
|
|
||||||
except (FileNotFoundError, json.JSONDecodeError, KeyError):
|
|
||||||
cfg = {}
|
|
||||||
|
|
||||||
def check(key: str) -> bool:
|
def check(key: str) -> bool:
|
||||||
return cfg[key] if key in cfg else True
|
return cfg[key] if key in cfg else True
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from caelestia.utils.material import get_colours_for_image
|
|||||||
from caelestia.utils.colourfulness import get_variant
|
from caelestia.utils.colourfulness import get_variant
|
||||||
from caelestia.utils.paths import (
|
from caelestia.utils.paths import (
|
||||||
compute_hash,
|
compute_hash,
|
||||||
user_config_path,
|
get_config,
|
||||||
wallpaper_link_path,
|
wallpaper_link_path,
|
||||||
wallpaper_path_path,
|
wallpaper_path_path,
|
||||||
wallpaper_thumbnail_path,
|
wallpaper_thumbnail_path,
|
||||||
@@ -186,26 +186,23 @@ def set_wallpaper(wall: Path, no_smart: bool) -> None:
|
|||||||
apply_colours(scheme.colours, scheme.mode)
|
apply_colours(scheme.colours, scheme.mode)
|
||||||
|
|
||||||
# Run custom post-hook if configured
|
# Run custom post-hook if configured
|
||||||
try:
|
cfg = get_config().get("wallpaper", {})
|
||||||
cfg = json.loads(user_config_path.read_text()).get("wallpaper", {})
|
if post_hook := cfg.get("postHook"):
|
||||||
if post_hook := cfg.get("postHook"):
|
subprocess.run(
|
||||||
subprocess.run(
|
post_hook,
|
||||||
post_hook,
|
shell=True,
|
||||||
shell=True,
|
env={
|
||||||
env={
|
**os.environ,
|
||||||
**os.environ,
|
"WALLPAPER_PATH": str(wall),
|
||||||
"WALLPAPER_PATH": str(wall),
|
"SCHEME_NAME": scheme.name,
|
||||||
"SCHEME_NAME": scheme.name,
|
"SCHEME_FLAVOUR": scheme.flavour,
|
||||||
"SCHEME_FLAVOUR": scheme.flavour,
|
"SCHEME_MODE": scheme.mode,
|
||||||
"SCHEME_MODE": scheme.mode,
|
"SCHEME_VARIANT": scheme.variant,
|
||||||
"SCHEME_VARIANT": scheme.variant,
|
"SCHEME_COLOURS": json.dumps(scheme.colours),
|
||||||
"SCHEME_COLOURS": json.dumps(scheme.colours),
|
"THUMBNAIL_PATH": str(thumb),
|
||||||
"THUMBNAIL_PATH": str(thumb),
|
},
|
||||||
},
|
stderr=subprocess.DEVNULL,
|
||||||
stderr=subprocess.DEVNULL,
|
)
|
||||||
)
|
|
||||||
except (FileNotFoundError, json.JSONDecodeError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def set_random(args: Namespace) -> None:
|
def set_random(args: Namespace) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user