Fellas, I'm at my wit's end with this one. I'm trying to set a general rule for window opacity in sway, and then have a few programs excepted from it.
Back on i3
with picom
, I could do this pretty easily by setting activeOpacity
to 0.9, for example, and then specifying additional opacityRules
like this:
"100:class_g = 'mpv'"
"100:class_g = 'Brave-browser'"
Likewise, hyprland
's window rules made it pretty easy to override the general opacity rules as well.
I can't seem to get this on sway
, though; if I set it up like this:
[app_id=".*"] opacity 0.85
[app_id="brave-browser"] opacity set 1
[app_id="librewolf"] opacity 1
it simply sets everything to 0.85.
Currently, I have this:
[app_id="^(?!mpv$|brave-browser$).*$"] opacity 0.85
[app_id="brave-browser"] opacity set 1
[app_id="mpv"] opacity 1
but it is still exhibiting the same behavior (except mpv
also seems to totally disregard any opacity rules whatsoever).
Any help is greatly appreciated---I haven't been able to find anyone else asking or talking about what seems to me like pretty basic functionality.
UPDATE:
Months later, I have it working—it seems my regex was incorrect. Indeed, you cannot apply opacity rules twice (once with a wildcard, and again for specific windows after), so the way to do it is with a regex like this:
for_window {
[app_id="^(?!brave-browser$)(?!mpv$).*"] opacity 0.8
}
Running:
swaymsg for_window "[app_id=mpv] opacity 0.5"
Works as expected on my end, are you missing just executing
for_window
?Note, you can also add multiple rules in the same execution, e.g.
for_window { [app_id=mpv] opacity 0.85 [app_id=LibreWolf] opacity 0.85 }
Also, note that
app_id
of LibreWolf is capitalized in that manner. You can get that information [app_id, shell etc] by runningswaymsg -t get_tree
I guess I should have written the post a bit more clearly. I’ve got the
for_window
part, it’s just that after I set the opacity for all windowsapp_id=.*
, the following lines of the config cannot override that for the specific windows I want different opacities for.