You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lua-mode bridge — HyprlandState transparently routes live-apply, dispatch, and submap setup through hyprctl eval when Hyprland 0.55.0+ runs with configProvider: lua. Detection is lazy via is_live_lua_mode() and re-probes on reconnect().
HyprlandState.define_submap(name, binds) — atomic submap registration that abstracts over Hyprlang's stateful submap=… / bind=… / submap=reset sequence (now sent as one batch) and Lua's declarative hl.define_submap(…, function() … end). Empty binds raises CommandError in both modes.
Support for cssgap / font_weight schema types.
Gradient IPC field rename — accepts both 0.54.x's "custom" and 0.55+'s "gradient".
Changed
BREAKING — OptionInfo has been removed. HyprlandState.inspect() now returns hyprland_schema.HyprOption directly; OptionInfo.validate() moved onto HyprOption.validate() upstream. Update imports from hyprland_state.OptionInfo to hyprland_schema.HyprOption.
BREAKING — Animations.apply(), Animations.preview(), and Animations.define_bezier() no longer swallow hyprland_socket.HyprlandError — they now propagate it, matching HyprlandState.apply()'s failure mode. Callers that relied on the False return for IPC rejection need an except HyprlandError.
BREAKING — ANIM_FLAT, ANIM_CHILDREN, Animations.tree, Animations.names, and Animations.get_children() now return tuples instead of lists, completing the immutable-tree migration started in 0.2.0.
_normalize_gradient_string moved to hyprland_config.normalize_gradient_string — the transform belongs with the config-string parser, not the state library.
HyprlandState.reload_config() now uses hyprland_config.load_any() so Lua entrypoints (hyprland.lua) reload correctly alongside Hyprlang configs.
Fixed
HyprlandState.save() short-circuits when nothing is pending — no disk write, no compositor reload, returns [].
HyprlandState.save(path=...) now reports [Path(path)] as the written file instead of dirty_files(), which could include paths that weren't actually written when an explicit override was used.