Presets added based on JSON colorscheme file. pycache needs fixing.
This commit is contained in:
@@ -1,11 +1,60 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
import typer
|
||||
from zshell.assets.schemes.catppuccin import catppuccin
|
||||
|
||||
from zshell.utils.presets import build_palette, list_presets, load_preset_file
|
||||
|
||||
app = typer.Typer()
|
||||
OUTPUT = Path(os.getenv("HOME", "")) / ".local/state/zshell/scheme.json"
|
||||
|
||||
SCHEMES = catppuccin.variants.flavors
|
||||
|
||||
def _split_preset(value: str) -> tuple[str, str | None, str | None]:
|
||||
parts = value.split(":")
|
||||
if len(parts) == 1:
|
||||
return parts[0], None, None
|
||||
if len(parts) == 3:
|
||||
return parts[0], parts[1], parts[2]
|
||||
raise typer.BadParameter("Preset must be <name> or <name>:<flavor>:<accent>")
|
||||
|
||||
|
||||
@app.command()
|
||||
def set():
|
||||
def list():
|
||||
for preset_name in list_presets():
|
||||
data = load_preset_file(preset_name)
|
||||
flavors = [item["id"] for item in data["variants"]["flavors"]]
|
||||
accents = [item["id"] for item in data["variants"]["accents"]]
|
||||
for flavor in flavors:
|
||||
for accent in accents:
|
||||
typer.echo(f"{preset_name}:{flavor}:{accent}")
|
||||
|
||||
|
||||
@app.command()
|
||||
def set(
|
||||
preset: str = typer.Argument(..., help="Preset in form <name> or <name>:<flavor>:<accent>"),
|
||||
mode: str = typer.Option("dark", help="Mode for preset colors."),
|
||||
):
|
||||
name, flavor, accent = _split_preset(preset)
|
||||
data = load_preset_file(name)
|
||||
|
||||
if flavor is None or accent is None:
|
||||
defaults = data["variants"]["defaults"][mode]
|
||||
flavor = defaults["flavor"]
|
||||
accent = defaults["accent"]
|
||||
|
||||
palette = build_palette(data, flavor, accent, mode)
|
||||
out = {
|
||||
"name": palette.name,
|
||||
"flavor": f"{palette.flavor}:{palette.accent}",
|
||||
"mode": palette.mode,
|
||||
"variant": name,
|
||||
"colors": dict(palette.colors),
|
||||
"seed": int(palette.colors["primary"].lstrip("#"), 16),
|
||||
}
|
||||
|
||||
OUTPUT.parent.mkdir(parents=True, exist_ok=True)
|
||||
OUTPUT.write_text(json.dumps(out, indent=4), encoding="utf-8")
|
||||
typer.echo(f"applied: {name}:{flavor}:{accent}")
|
||||
|
||||
Reference in New Issue
Block a user