This took me an uncomfortable amount of time to figure out.
Long story short, QT doesn't really have a built-in mechanism to handle themes
or icons. You have to use a style engine to change how applications look.
Kvantum is great for
this purpose and has a lot of nice built in themes. Once installed, you can
simply set QT_STYLE_OVERRIDE=kvantum
and QT apps will start using the theme.
However, this still doesn't handle icons. Icons have to be handled through the
QT_QPA_PLATFORMTHEME
variable. Most DEs provide a weird plugin of their own
that does some kind of black magic which can only be configured through a GUI.
qt6ct/qt5ct are often advertised a fix for this, but they're both archived for
some reason. Fortunately, lxqt-qtplugin
works regardless of DE and has a simple configuration file format. This isn't
really documented or advertised, but I did some digging into its code and I
figured out how to use it. I'm personally using it alongside Sway, but it should
work alongside any WM of your choice.
It's two simple steps.
- Create
~/.config/Kvantum/kvantum.kvconfig
and modify it.
This is self-explanatory.
[General]
theme=KvSimplicityDark
Just put the name of your Kvantum theme there. If you want to select or preview
the available themes with a fancy GUI, kvantummanager
and kvantumpreview
should be available (if you installed Kvantum, of course).
- Create
~/.config/lxqt/lxqt.conf
and modify it.
This is mostly self-explanatory.
[General]
icon_theme=Papirus-Dark
[Qt]
font="Sans Serif,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
If you're wondering about the weird font formatting, look up QFont. It's how QT reads font data. To make it simple, just copy this value, replacing "Sans Serif" with your desired font and "12" with your desired point size.
- Set
QT_QPA_PLATFORMTHEME=lxqt
.
And you're done!
Obviously, make sure lxqt-qtplugin and Kvantum are installed. Now everything will look nice and pretty. If you're curious how I manage this on GNU Guix, check out my personal set of Guix configurations, orchard.
Here's how pavucontrol-qt looks on my system with this configuration.
Before:
After:
Isn't that better?
In Christ,
Luke