diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-09 20:50:59 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-09 20:50:59 +1000 |
| commit | 3110197e423b2248a0304e5f714463bbef9fd61c (patch) | |
| tree | b59a7713c20288fae5dd615b3f2bcc6e431722fa /src/data.py | |
| parent | install: add imagemagick dep to shell (diff) | |
| download | caelestia-cli-3110197e423b2248a0304e5f714463bbef9fd61c.tar.gz caelestia-cli-3110197e423b2248a0304e5f714463bbef9fd61c.tar.bz2 caelestia-cli-3110197e423b2248a0304e5f714463bbef9fd61c.zip | |
feat: create parser
Diffstat (limited to 'src/data.py')
| -rw-r--r-- | src/data.py | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/data.py b/src/data.py new file mode 100644 index 0000000..f5fbe6e --- /dev/null +++ b/src/data.py @@ -0,0 +1,120 @@ +import os +from pathlib import Path + +config_dir = Path(os.getenv("XDG_CONFIG_HOME", Path.home() / ".config")) +data_dir = Path(os.getenv("XDG_DATA_HOME", Path.home() / ".local/share")) +state_dir = Path(os.getenv("XDG_STATE_HOME", Path.home() / ".local/state")) + +c_config_dir = config_dir / "caelestia" +c_data_dir = data_dir / "caelestia" +c_state_dir = state_dir / "caelestia" + +scheme_name_path = c_state_dir / "scheme/name.txt" +scheme_flavour_path = c_state_dir / "scheme/flavour.txt" +scheme_colours_path = c_state_dir / "scheme/colours.txt" +scheme_mode_path = c_state_dir / "scheme/mode.txt" +scheme_variant_path = c_state_dir / "scheme/variant.txt" + +scheme_data_path = Path(__file__).parent.parent / "data/schemes" + +scheme_variants = [ + "tonalspot", + "vibrant", + "expressive", + "fidelity", + "fruitsalad", + "monochrome", + "neutral", + "rainbow", + "content", +] + +scheme_names: list[str] = None +scheme_flavours: list[str] = None +scheme_modes: list[str] = None + +scheme_name: str = None +scheme_flavour: str = None +scheme_colours: dict[str, str] = None +scheme_mode: str = None +scheme_variant: str = None + + +def get_scheme_path() -> Path: + return (scheme_data_path / get_scheme_name() / get_scheme_flavour() / get_scheme_mode()).with_suffix(".txt") + + +def get_scheme_names() -> list[str]: + global scheme_names + + if scheme_names is None: + scheme_names = [f.name for f in scheme_data_path.iterdir() if f.is_dir()] + + return scheme_names + + +def get_scheme_flavours() -> list[str]: + global scheme_flavours + + if scheme_flavours is None: + scheme_flavours = [f.name for f in (scheme_data_path / get_scheme_name()).iterdir() if f.is_dir()] + + return scheme_flavours + + +def get_scheme_modes() -> list[str]: + global scheme_modes + + if scheme_modes is None: + scheme_modes = [ + f.stem for f in (scheme_data_path / get_scheme_name() / get_scheme_flavour()).iterdir() if f.is_file() + ] + + return scheme_modes + + +def get_scheme_name() -> str: + global scheme_name + + if scheme_name is None: + scheme_name = scheme_name_path.read_text().strip() if scheme_name_path.exists() else "catppuccin" + + return scheme_name + + +def get_scheme_flavour() -> str: + global scheme_flavour + + if scheme_flavour is None: + scheme_flavour = scheme_flavour_path.read_text().strip() if scheme_flavour_path.exists() else "mocha" + + return scheme_flavour + + +def get_scheme_colours() -> dict[str, str]: + global scheme_colours + + if scheme_colours is None: + scheme_colours = { + k.strip(): v.strip() for k, v in (line.split(" ") for line in get_scheme_path().read_text().split("\n")) + } + + return scheme_colours + + +def get_scheme_mode() -> str: + global scheme_mode + + if scheme_mode is None: + scheme_mode = scheme_mode_path.read_text().strip() if scheme_mode_path.exists() else "dark" + + return scheme_mode + + +def get_scheme_variant() -> str: + global scheme_variant + + if scheme_variant is None: + scheme_variant = scheme_variant_path.read_text().strip() if scheme_variant_path.exists() else "tonalspot" + + return scheme_variant |