glib: recognize NIX_GSETTINGS_OVERRIDES_DIR variable

For some reason, the GNOME 3.26 update broke the overrides. It turns
out the overrides now need to come before the overridden schemas in the
XDG_DATA_DIRS variable. This is not possible in general due to applications
prefixing the variable (e.g. in wrapGAppsHook).

To fix this, a new environment variable NIX_GSETTINGS_OVERRIDES_DIR
was introduced. It has greater priority than XDG_DATA_DIRS but lower
than GSETTINGS_SCHEMA_DIR. A separate variable was chosen in order not
to block the built-in one for users.
This commit is contained in:
Jan Tojnar 2017-11-15 03:36:35 +01:00
parent 613a2fa13a
commit 4920d4fff2
No known key found for this signature in database
GPG key ID: 7FAB2A15F7A607A4
2 changed files with 14 additions and 1 deletions

View file

@ -55,7 +55,8 @@ stdenv.mkDerivation rec {
};
patches = optional stdenv.isDarwin ./darwin-compilation.patch
++ optional doCheck ./skip-timer-test.patch;
++ optional doCheck ./skip-timer-test.patch
++ [ ./schema-override-variable.patch ];
outputs = [ "out" "dev" "devdoc" ];
outputBin = "dev";

View file

@ -0,0 +1,12 @@
--- a/gio/gsettingsschema.c
+++ b/gio/gsettingsschema.c
@@ -352,6 +352,9 @@
try_prepend_data_dir (g_get_user_data_dir ());
+ if ((path = g_getenv ("NIX_GSETTINGS_OVERRIDES_DIR")) != NULL)
+ try_prepend_dir (path);
+
if ((path = g_getenv ("GSETTINGS_SCHEMA_DIR")) != NULL)
try_prepend_dir (path);