mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-05 14:59:29 -05:00
feat: add dynamic hard flavour
Someone requested idk who tho
This commit is contained in:
@@ -31,7 +31,7 @@ def get_colours_for_image(image: Path | str = wallpaper_thumbnail_path, scheme=N
|
|||||||
scheme = get_scheme()
|
scheme = get_scheme()
|
||||||
|
|
||||||
cache_base = scheme_cache_dir / compute_hash(image)
|
cache_base = scheme_cache_dir / compute_hash(image)
|
||||||
cache = (cache_base / scheme.variant / scheme.mode).with_suffix(".json")
|
cache = (cache_base / scheme.variant / scheme.flavour / scheme.mode).with_suffix(".json")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with cache.open("r") as f:
|
with cache.open("r") as f:
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ def lighten(colour: Hct, amount: float) -> Hct:
|
|||||||
|
|
||||||
def darken(colour: Hct, amount: float) -> Hct:
|
def darken(colour: Hct, amount: float) -> Hct:
|
||||||
diff = colour.tone * amount
|
diff = colour.tone * amount
|
||||||
return Hct.from_hct(colour.hue, colour.chroma + diff / 5, colour.tone - diff)
|
return Hct.from_hct(colour.hue, colour.chroma - diff / 5, colour.tone - diff)
|
||||||
|
|
||||||
|
|
||||||
def get_scheme(scheme: str) -> DynamicScheme:
|
def get_scheme(scheme: str) -> DynamicScheme:
|
||||||
@@ -216,6 +216,12 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
|
|||||||
for name, hct in colours.items():
|
for name, hct in colours.items():
|
||||||
colours[name].chroma -= 15
|
colours[name].chroma -= 15
|
||||||
|
|
||||||
|
# Darken surfaces for hard flavour
|
||||||
|
if scheme.flavour == "hard":
|
||||||
|
for colour in "background", *(k for k in colours.keys() if k.startswith("surface")):
|
||||||
|
colours[colour] = lighten(colours[colour], 0.4) if light else darken(colours[colour], 0.8)
|
||||||
|
colours["term0"] = lighten(colours["term0"], 0.4) if light else darken(colours["term0"], 0.9)
|
||||||
|
|
||||||
# FIXME: deprecated stuff
|
# FIXME: deprecated stuff
|
||||||
colours["text"] = colours["onBackground"]
|
colours["text"] = colours["onBackground"]
|
||||||
colours["subtext1"] = colours["onSurfaceVariant"]
|
colours["subtext1"] = colours["onSurfaceVariant"]
|
||||||
@@ -230,6 +236,18 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
|
|||||||
colours["mantle"] = darken(colours["surface"], 0.03)
|
colours["mantle"] = darken(colours["surface"], 0.03)
|
||||||
colours["crust"] = darken(colours["surface"], 0.05)
|
colours["crust"] = darken(colours["surface"], 0.05)
|
||||||
|
|
||||||
|
# More darkening if hard flavour
|
||||||
|
if scheme.flavour == "hard":
|
||||||
|
for colour in "base", "mantle", "crust":
|
||||||
|
colours[colour] = lighten(colours[colour], 0.4) if light else darken(colours[colour], 0.9)
|
||||||
|
for i in range(3):
|
||||||
|
colours[f"overlay{i}"] = (
|
||||||
|
lighten(colours[f"overlay{i}"], 0.4) if light else darken(colours[f"overlay{i}"], 0.8)
|
||||||
|
)
|
||||||
|
colours[f"surface{i}"] = (
|
||||||
|
lighten(colours[f"surface{i}"], 0.4) if light else darken(colours[f"surface{i}"], 0.8)
|
||||||
|
)
|
||||||
|
|
||||||
# For debugging
|
# For debugging
|
||||||
# print("\n".join(["{}: \x1b[48;2;{};{};{}m \x1b[0m".format(n, *c.to_rgba()[:3]) for n, c in colours.items()]))
|
# print("\n".join(["{}: \x1b[48;2;{};{};{}m \x1b[0m".format(n, *c.to_rgba()[:3]) for n, c in colours.items()]))
|
||||||
|
|
||||||
|
|||||||
@@ -229,7 +229,9 @@ def get_scheme_flavours(name: str = None) -> list[str]:
|
|||||||
if name is None:
|
if name is None:
|
||||||
name = get_scheme().name
|
name = get_scheme().name
|
||||||
|
|
||||||
return ["default"] if name == "dynamic" else [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
|
return (
|
||||||
|
["default", "hard"] if name == "dynamic" else [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_scheme_modes(name: str = None, flavour: str = None) -> list[str]:
|
def get_scheme_modes(name: str = None, flavour: str = None) -> list[str]:
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ def get_colours_for_wall(wall: Path | str, no_smart: bool) -> None:
|
|||||||
scheme = Scheme(
|
scheme = Scheme(
|
||||||
{
|
{
|
||||||
"name": name,
|
"name": name,
|
||||||
"flavour": "default",
|
"flavour": scheme.flavour,
|
||||||
"mode": smart_opts["mode"],
|
"mode": smart_opts["mode"],
|
||||||
"variant": smart_opts["variant"],
|
"variant": smart_opts["variant"],
|
||||||
"colours": scheme.colours,
|
"colours": scheme.colours,
|
||||||
@@ -115,7 +115,7 @@ def get_colours_for_wall(wall: Path | str, no_smart: bool) -> None:
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
"name": name,
|
"name": name,
|
||||||
"flavour": "default",
|
"flavour": scheme.flavour,
|
||||||
"mode": scheme.mode,
|
"mode": scheme.mode,
|
||||||
"variant": scheme.variant,
|
"variant": scheme.variant,
|
||||||
"colours": get_colours_for_image(get_thumb(wall, cache), scheme),
|
"colours": get_colours_for_image(get_thumb(wall, cache), scheme),
|
||||||
|
|||||||
Reference in New Issue
Block a user