Hyprland version
Hyprland 0.55.1 built from branch v0.55.1 at commit a47147bc095e5b3be3eb8bd04f0ac242b968cd4d clean ([gha] Nix: update inputs).
Date: Wed May 13 22:55:46 2026
Tag: v0.55.1, commits: 7311
Libraries:
Hyprgraphics: built against 0.5.1, system has 0.5.1
Hyprutils: built against 0.13.1, system has 0.13.1
Hyprcursor: built against 0.1.13, system has 0.1.13
Hyprlang: built against 0.6.8, system has 0.6.8
Aquamarine: built against 0.11.0, system has 0.11.0
Version ABI string: a47147bc095e5b3be3eb8bd04f0ac242b968cd4d_aq_0.11_hu_0.13_hg_0.5_hc_0.1_hlg_0.6
no flags were set
Since migrating from hyprland.conf to hyprland.lua, my old runtime decoration scripts stopped working correctly.
I used to dynamically change blur passes and active opacity during runtime, for example:
- cycling through different blur strengths
- temporarily disabling transparency when I want to focus
Previously, this worked perfectly with commands like:
hyprctl keyword decoration:blur:passes $new_blur
After switching to the Lua config system, this no longer behaves correctly.
I am still very new to both Hyprland and Lua, so I tried implementing the logic directly inside a Lua module:
local decoration_functions = {}
function decoration_functions.cycle_blur()
local current = hl.get_config("decoration:blur:passes")
local next_val = (current % 4) + 1
hl.config({
decoration = {
blur = {
passes = next_val
}
}
})
end
function decoration_functions.toggle_opacity()
local current = hl.get_config("decoration:active_opacity")
if current >= 1.0 then
hl.config({
decoration = {
active_opacity = 0.8,
fullscreen_opacity = 0.8
}
})
else
hl.config({
decoration = {
active_opacity = 1.0,
fullscreen_opacity = 1.0
}
})
end
end
return decoration_functions
The strange thing is:
hyprctl -j getoptionshows the updated values correctly- opacity changes only become visible after resizing a window or switching workspaces
- blur changes never become visible, even though
getoptionreports the correct value
I also discovered that adding this to my decorations.lua partially helped:
hl.config({
blur = {
new_optimizations = false
}
})
After disabling new_optimizations, blur changes sometimes become visible after resizing windows or changing workspaces, but the behavior is still buggy and inconsistent.
So my questions are:
- Is runtime updating of decorations currently supported properly with
hyprland.lua? - Am I using
hl.config()incorrectly? - Is there some way to force a redraw/re-render after changing decoration values?
- Or is this currently a limitation/bug in Hyprland?
I assume I cannot be the only person wanting dynamic runtime decoration changes.
Thanks a lot in advance!
— michi_wtr