Note: Fedora Atomic Workstation has recently been renamed to Team Silverblue. Learn more here.
Today, I decided to try out how themes work with flatpak:ed apps on an Atomic Workstation.
To change themes, I need gnome-tweaks. I already had it installed from the gnome-nightly-apps repository. Unfortunately, it didn’t work, complaining about a missing python package in the runtime. Such is life with nightly builds.
Instead, I used package layering to install a stable version of gnome-tweaks:
$ rpm-ostree install gnome-tweaks
This worked better, and …I found that there are no themes on the Atomic Workstation install, apart from the default ones (Adwaita and HighContrast). So, back to package layering once more. I installed Adapta:
$ rpm-ostree install adapta-gtk-theme
Now I could switch the theme to Adapta in gnome-tweaks:After all this preparation, I was finally ready to see how flatpak:ed apps handle the new theme. But first I wanted to update them:
$ flatpak update Looking for updates... Installing for user: org.gtk.Gtk3theme.Adapta/x86_64/3.22 from flathub [####################] 1 delta parts, 2 loose fetched; 336 KiB transferred in 1 seconds ...
Neat. Flatpak detected the current GTK+ theme (by reading the gsetting), found a matching runtime extension, and automatically installed it. Flatpak has a similar automatism built-in for matching the host GL drivers and for installing some hardware-specific libraries.
Of course, I could have just manually installed the theme, but this is much more convenient. To see what themes are available on flathub, use:
$ flatpak remote-ls flathub | grep theme org.gtk.Gtk3theme.Adapta org.gtk.Gtk3theme.Adapta-Eta org.gtk.Gtk3theme.Adapta-Nokto org.gtk.Gtk3theme.Adapta-Nokto-Eta org.gtk.Gtk3theme.Ambiance org.gtk.Gtk3theme.Arc org.gtk.Gtk3theme.Arc-Dark org.gtk.Gtk3theme.Arc-Dark-solid org.gtk.Gtk3theme.Arc-Darker org.gtk.Gtk3theme.Arc-Darker-solid org.gtk.Gtk3theme.Arc-solid org.gtk.Gtk3theme.Breeze org.gtk.Gtk3theme.Breeze-Dark org.gtk.Gtk3theme.Communitheme org.gtk.Gtk3theme.Greybird org.gtk.Gtk3theme.Materia org.gtk.Gtk3theme.Materia-dark org.gtk.Gtk3theme.Materia-light org.gtk.Gtk3theme.Mint-Y org.gtk.Gtk3theme.Mint-Y-Dark org.gtk.Gtk3theme.Mint-Y-Darker org.gtk.Gtk3theme.Numix org.gtk.Gtk3theme.Pop org.gtk.Gtk3theme.Pop-light org.gtk.Gtk3theme.elementary
And now, when I run a flatpak app, for example GNOME Characters, it comes up with the Adapta theme:
Lessons learned from this quick experiment: Nightly apps don’t always work, but flatpak can handle themes just fine.
Update: It is probably worth a brief explanation why it is necessary to install the theme twice, on the host and for Flatpak. With Flatpak, the apps can use different runtimes, and those may contain different version of libraries like GTK+. The host system may be much more stable (think RHEL). So, for every “OS extension” (like fonts, or themes, or drivers) we have to ask ourselves – will this work across possibly different library versions ? For fonts, the answer we found is yes, font file formats have been stable forever, and it is very unlikely that a font you have on your system will not work with any app or runtime. Therefore, we make the host system fonts available inside flatpak sandboxes – you don’t have to install them again. For themes, we were not so confident, despite GTK+ 3 being stable now, we decided that it is better to have themes match the toolkit version in each runtime.