Skip to content

v0.3.0

Choose a tag to compare

@BlueManCZ BlueManCZ released this 15 May 20:45
· 4 commits to main since this release
bd9dbe7

Added

  • Lua-mode bridgeHyprlandState 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

  • BREAKINGOptionInfo 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.
  • BREAKINGAnimations.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.
  • BREAKINGANIM_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.