I was reading about that weird i3bar quirk where the tray’s opacity will always be 00 when i3bar is called with transparency. Which is aesthetically cringe-worthy to look at; almost enough to want to stop using it.

A cool workaround I heard about was to create a separate bar for the tray, and then create a shortcut to display it. You can then make that bar completely opaque, or completely transparent; either way it is consistent. Regardless of aesthetics, this is also really helpful to reduce tray icon clutter.

I couldn’t find any resources on how to do it, but after some finagling I got it to work.

First off, number all of your bars with unique ids.

If two separate bars with separate ids are displayed on the same monitor, the bar with the higher number displays the furthest down. In my case, I have a bar for my primary display (bar-1), and a bar for all nonprimary displays (bar-2).

My tray bar is assigned bar-3 on my primary monitor. So it appears below my primary.

note: remember to write (tray_output none) in all of your other bars.

The tray bar is assembled like so:

bar {
	id bar-3
	output primary
	position bottom

	i3bar_command i3bar -t
	binding_mode_indicator no
	mode hide
	modifier none
	workspace_buttons no

	tray_output primary
	tray_padding 1

	colors {
		background #00000000
	}
}

And it can be activated like this: bindsym $mod+t bar mode toggle bar-3

Another cool thing to do is to create a dropdown icon for the bar. Put this in your i3blocks config:

[tray_dropdown]
color=#ffffff
command=i3-msg -q 'bar mode toggle bar-3'
full_text=

Adjust for the bar id.

And voilà!