58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""Tiny user-editable config file: ~/.local/state/astal-menu/config.json.
|
|
|
|
"layouts" narrows/customises the workspace-layout picker in the taskbar panel
|
|
(ui/taskbar.py) on top of what hypr/layouts auto-discovers and writes to
|
|
~/.cache/astal-menu/layouts.json:
|
|
"enabled": list of layout names to offer, in that order (tab order follows
|
|
it) — omit/null to show everything hypr/layouts discovered.
|
|
"overrides": {layout_name: {partial layout spec}} shallow-merged onto the
|
|
discovered spec for that layout — e.g. trim "dirs" to fewer
|
|
directions, or set "fit_method"/"stepper" to false to hide
|
|
those controls for that layout, without touching its .lua file.
|
|
Example:
|
|
"layouts": {
|
|
"enabled": ["scrolling", "master", "monocle"],
|
|
"overrides": {"scrolling": {"dirs": ["down", "right"]}}
|
|
}
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
from paths import CONFIG_FILE, ensure_dirs
|
|
|
|
_DEFAULTS = {"layouts": {"enabled": None, "overrides": {}}}
|
|
|
|
|
|
def _load() -> dict:
|
|
try:
|
|
data = json.loads(CONFIG_FILE.read_text())
|
|
except (FileNotFoundError, json.JSONDecodeError):
|
|
data = {}
|
|
merged = {**_DEFAULTS, **data}
|
|
if not CONFIG_FILE.exists():
|
|
ensure_dirs()
|
|
CONFIG_FILE.write_text(json.dumps(merged, indent=2) + "\n")
|
|
return merged
|
|
|
|
|
|
def apply_layout_config(layouts: list[dict]) -> list[dict]:
|
|
"""Filter/reorder/override the layouts hypr/layouts discovered, per the
|
|
"layouts" config key. `layouts` is the parsed layouts.json (or its
|
|
hardcoded fallback) — see Taskbar._load_layouts."""
|
|
cfg = _load().get("layouts") or {}
|
|
enabled = cfg.get("enabled")
|
|
overrides = cfg.get("overrides") or {}
|
|
|
|
by_name = {ly["name"]: ly for ly in layouts}
|
|
names = enabled if enabled else [ly["name"] for ly in layouts]
|
|
|
|
out = []
|
|
for name in names:
|
|
ly = by_name.get(name)
|
|
if ly is None:
|
|
continue # config names a layout hypr/layouts never discovered
|
|
out.append({**ly, **overrides.get(name, {})})
|
|
return out
|