summaryrefslogtreecommitdiff
path: root/src/caelestia
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-17 14:03:51 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-17 14:03:51 +1000
commit1ab61223c6acd30dac8151f01b9a5fde5f110034 (patch)
tree85df7ad77b56c8770b3a13c1fbd2a34a5809d01e /src/caelestia
parentwallpaper: fix print command (diff)
downloadcaelestia-cli-1ab61223c6acd30dac8151f01b9a5fde5f110034.tar.gz
caelestia-cli-1ab61223c6acd30dac8151f01b9a5fde5f110034.tar.bz2
caelestia-cli-1ab61223c6acd30dac8151f01b9a5fde5f110034.zip
scheme: dump scheme data when no args to list
Diffstat (limited to 'src/caelestia')
-rw-r--r--src/caelestia/subcommands/scheme.py32
-rw-r--r--src/caelestia/utils/scheme.py20
2 files changed, 46 insertions, 6 deletions
diff --git a/src/caelestia/subcommands/scheme.py b/src/caelestia/subcommands/scheme.py
index b326e5d..24d2af3 100644
--- a/src/caelestia/subcommands/scheme.py
+++ b/src/caelestia/subcommands/scheme.py
@@ -1,6 +1,14 @@
+import json
from argparse import Namespace
-from caelestia.utils.scheme import get_scheme, get_scheme_flavours, get_scheme_modes, get_scheme_names, scheme_variants
+from caelestia.utils.scheme import (
+ Scheme,
+ get_scheme,
+ get_scheme_flavours,
+ get_scheme_modes,
+ get_scheme_names,
+ scheme_variants,
+)
from caelestia.utils.theme import apply_colours
@@ -86,4 +94,24 @@ class List:
else:
print("\n".join(scheme_variants))
else:
- print("No args given. Use --names, --flavours, --modes or --variants to list schemes")
+ current_scheme = get_scheme()
+ schemes = {}
+ for scheme in get_scheme_names():
+ schemes[scheme] = {}
+ for flavour in get_scheme_flavours(scheme):
+ s = Scheme(
+ {
+ "name": scheme,
+ "flavour": flavour,
+ "mode": current_scheme.mode,
+ "variant": current_scheme.variant,
+ "colours": current_scheme.colours,
+ }
+ )
+ modes = get_scheme_modes(scheme, flavour)
+ if s.mode not in modes:
+ s._mode = modes[0]
+ s._update_colours()
+ schemes[scheme][flavour] = s.colours
+
+ print(json.dumps(schemes))
diff --git a/src/caelestia/utils/scheme.py b/src/caelestia/utils/scheme.py
index 3eb5a34..ac52ea7 100644
--- a/src/caelestia/utils/scheme.py
+++ b/src/caelestia/utils/scheme.py
@@ -146,13 +146,13 @@ class Scheme:
def _check_flavour(self) -> None:
global scheme_flavours
scheme_flavours = None
- if self._flavour not in get_scheme_flavours():
+ if self._flavour not in get_scheme_flavours(self.name):
self._flavour = get_scheme_flavours()[0]
def _check_mode(self) -> None:
global scheme_modes
scheme_modes = None
- if self._mode not in get_scheme_modes():
+ if self._mode not in get_scheme_modes(self.name, self.flavour):
self._mode = get_scheme_modes()[0]
def _update_colours(self) -> None:
@@ -223,7 +223,13 @@ def get_scheme_names() -> list[str]:
return scheme_names
-def get_scheme_flavours() -> list[str]:
+def get_scheme_flavours(name: str = None) -> list[str]:
+ if name is not None:
+ if name == "dynamic":
+ return ["default", "alt1", "alt2"]
+ else:
+ return [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
+
global scheme_flavours
if scheme_flavours is None:
@@ -236,7 +242,13 @@ def get_scheme_flavours() -> list[str]:
return scheme_flavours
-def get_scheme_modes() -> list[str]:
+def get_scheme_modes(name: str = None, flavour: str = None) -> list[str]:
+ if name is not None:
+ if name == "dynamic":
+ return ["light", "dark"]
+ else:
+ return [f.stem for f in (scheme_data_dir / name / flavour).iterdir() if f.is_file()]
+
global scheme_modes
if scheme_modes is None: