I am attempting to edit the adwaita theme, the only way to do this is to open the gtk.gresource
file.
gedit
will not open the file, geany
will not open the file.
How do I open the file so I can edit gtk.css
?
I am attempting to edit the adwaita theme, the only way to do this is to open the gtk.gresource
file.
gedit
will not open the file, geany
will not open the file.
How do I open the file so I can edit gtk.css
?
since some time, GTK-3 theme CSS files are precompiled into a binary format (*.gresource
) and installed as a bundle. There is a helper program called gresource to deal with these files
libglib2.0-bin
/usr/bin
and get more documentation by invoking man gresource
In short
to list the contents of a *.gresource
file:
gresource list gtk.gresource
to extract a specific resource from it:
gresource extract gtk.gresource /org/gnome/adwaita/gtk-main.css
Basically, this allows you to get the contents of the original Theme extracted. You could make a conventional Theme (with discrete CSS files) from the extracted resources. The key point to note for this is that you have to change the entry point in the top level gtk-3.0/gtk.css
file within your theme. In binary themes, you'll find there a URL reference
@import url("resource:///org/gnome/THEMENAME/gtk-main.css");
You need to change this reference to point to your locally installed files
@import url("gtk-main.css");
If you want to compile a new binary bundle from a theme you edited in discrete CSS files, see this Blog post from 2012 by Satyajit Sahoo
You can use the folowing script to recursively extract all files from gresource (save it to ~/bin/gextract.sh
and make it executable):
#!/bin/bash
recursively extract gresource
for file in "$@"; do
gresource list "$file" | while read i; do
filepath="${i#/}"
dirpath="${filepath%/}"
mkdir -p "$dirpath"
cd "$dirpath"
gresource extract "$file" "$i" > "${i##/}"
cd - >/dev/null
done
done
Usage:
gextract.sh gtk.gresource
it will create a directory tree with files (it's like unpack an archive)