[Nix-dev] Easier GTK theming

Jookia 166291 at gmail.com
Sun Apr 23 22:48:56 CEST 2017


On Sun, Apr 23, 2017 at 07:09:43AM -0700, William Casarin wrote:
> ...
> 
> Thoughts? Has there been progress down these lines before?

Well I got a patch in to GTK3 to read themes from XDG_DATA_PATH (or something
like that) so installed themes should just work. GTK2 has a patch, but it's not
upstream. Here it is:
-------------- next part --------------
commit 0df8a7c7ba26f368f01ada4233dedc4193cdbebf
Author: Jookia <166291 at gmail.com>
Date:   Sat Apr 8 20:16:54 2017 +1000

    gtk2: Patch theme paths

diff --git a/pkgs/development/libraries/gtk+/2.x.nix b/pkgs/development/libraries/gtk+/2.x.nix
index 306e2db..f6e718d 100644
--- a/pkgs/development/libraries/gtk+/2.x.nix
+++ b/pkgs/development/libraries/gtk+/2.x.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ setupHook perl pkgconfig gettext ];
 
-  patches = [ ./2.0-immodules.cache.patch ];
+  patches = [ ./2.0-immodules.cache.patch ./gtk2-theme-paths.patch ];
 
   propagatedBuildInputs = with xorg;
     [ glib cairo pango gdk_pixbuf atk ]
diff --git a/pkgs/development/libraries/gtk+/gtk2-theme-paths.patch b/pkgs/development/libraries/gtk+/gtk2-theme-paths.patch
new file mode 100644
index 0000000..397cc97
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/gtk2-theme-paths.patch
@@ -0,0 +1,35 @@
+diff -Naur gtk+-2.24.28.new/gtk/gtkrc.c gtk+-2.24.28/gtk/gtkrc.c
+--- gtk+-2.24.28.new/gtk/gtkrc.c	2016-03-13 10:31:14.413644362 +1100
++++ gtk+-2.24.28/gtk/gtkrc.c	2016-03-13 12:51:34.723398423 +1100
+@@ -808,6 +808,8 @@
+   gchar *path = NULL;
+   const gchar *home_dir;
+   gchar *subpath;
++  const gchar * const *xdg_data_dirs;
++  gint i;
+ 
+   if (type)
+     subpath = g_strconcat ("gtk-2.0-", type,
+@@ -830,6 +832,22 @@
+     }
+ 
+   if (!path)
++    {
++      xdg_data_dirs = g_get_system_data_dirs ();
++      for (i = 0; xdg_data_dirs[i]; i++)
++        {
++          path = g_build_filename (xdg_data_dirs[i], "themes", name, subpath, NULL);
++          if (g_file_test (path, G_FILE_TEST_EXISTS))
++            break;
++          else
++            {
++              g_free (path);
++              path = NULL;
++            }
++        }
++    }
++
++  if (!path)
+     {
+       gchar *theme_dir = gtk_rc_get_theme_dir ();
+       path = g_build_filename (theme_dir, name, subpath, NULL);


More information about the nix-dev mailing list