summary refs log tree commit diff
path: root/pkgs/desktops/gnome-3/misc/gpaste
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2018-07-23 04:11:03 +0200
committerJan Tojnar <jtojnar@gmail.com>2018-08-01 19:14:30 +0200
commitf63d94eba340c05cd241c478deb518204514fce8 (patch)
tree374434426e687b31d21c45110d824a83dcf73907 /pkgs/desktops/gnome-3/misc/gpaste
parent0e1c01451fdc8f076ae99bb36c12e5107abf7c4e (diff)
downloadnixpkgs-f63d94eba340c05cd241c478deb518204514fce8.tar
nixpkgs-f63d94eba340c05cd241c478deb518204514fce8.tar.gz
nixpkgs-f63d94eba340c05cd241c478deb518204514fce8.tar.bz2
nixpkgs-f63d94eba340c05cd241c478deb518204514fce8.tar.lz
nixpkgs-f63d94eba340c05cd241c478deb518204514fce8.tar.xz
nixpkgs-f63d94eba340c05cd241c478deb518204514fce8.tar.zst
nixpkgs-f63d94eba340c05cd241c478deb518204514fce8.zip
gnome3.gpaste: hard-code paths
GPaste GNOME Shell extension uses GPaste library generated via introspection. Previously, we added the gpaste package to services.xserver.desktopManager.gnome3.sessionPath option, which
added its typelib directory to GI_TYPELIB_PATH environment variable globally, in order for GNOME Shell to be able to find it. This is not very Nix-y, though, so we have decided to patch the code to
append the path to the GI repository search path.

Additionally, the code relies on GPaste’s GSettings schemas, so we had to hard-code the paths to them as well. We ignored the GNOME Shell’s schemas, since they will already be available for the
extension inside GNOME Shell program.
Diffstat (limited to 'pkgs/desktops/gnome-3/misc/gpaste')
-rw-r--r--pkgs/desktops/gnome-3/misc/gpaste/default.nix16
-rw-r--r--pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch55
2 files changed, 71 insertions, 0 deletions
diff --git a/pkgs/desktops/gnome-3/misc/gpaste/default.nix b/pkgs/desktops/gnome-3/misc/gpaste/default.nix
index a0182057873..add6addaec0 100644
--- a/pkgs/desktops/gnome-3/misc/gpaste/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gpaste/default.nix
@@ -10,6 +10,22 @@ stdenv.mkDerivation rec {
     sha256 = "1zfx73qpw976hyzp5k569lywsq2b6dbnnzf2cvhjvn3mvkw8pin2";
   };
 
+  patches = [
+    ./fix-paths.patch
+  ];
+
+  # TODO: switch to substituteAll with placeholder
+  # https://github.com/NixOS/nix/issues/1846
+  # https://github.com/NixOS/nixpkgs/pull/37693
+  postPatch = ''
+    substituteInPlace src/gnome-shell/extension.js \
+      --subst-var-by typelibPath "$out/lib/girepository-1.0"
+    substituteInPlace src/gnome-shell/prefs.js \
+      --subst-var-by typelibPath "$out/lib/girepository-1.0"
+    substituteInPlace src/libgpaste/settings/gpaste-settings.c \
+      --subst-var-by gschemasCompiled "$out/share/gsettings-schemas/${name}/glib-2.0/schemas"
+  '';
+
   nativeBuildInputs = [ autoreconfHook pkgconfig vala wrapGAppsHook ];
   buildInputs = [ glib gjs mutter gnome3.adwaita-icon-theme
                   gtk3 gnome3.gnome-control-center dbus
diff --git a/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch b/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
new file mode 100644
index 00000000000..ca6b9a5b22e
--- /dev/null
+++ b/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
@@ -0,0 +1,55 @@
+--- a/src/gnome-shell/extension.js
++++ b/src/gnome-shell/extension.js
+@@ -7,6 +7,8 @@
+ 
+ const Config = imports.misc.config;
+ 
++imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
++
+ imports.gi.versions.Clutter = Config.LIBMUTTER_API_VERSION;
+ imports.gi.versions.GLib = '2.0';
+ imports.gi.versions.GPaste = '1.0';
+--- a/src/gnome-shell/prefs.js
++++ b/src/gnome-shell/prefs.js
+@@ -7,6 +7,8 @@
+ 
+ const Gettext = imports.gettext;
+ 
++imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
++
+ const GPaste = imports.gi.GPaste;
+ 
+ const ExtensionUtils = imports.misc.extensionUtils;
+--- a/src/libgpaste/settings/gpaste-settings.c
++++ b/src/libgpaste/settings/gpaste-settings.c
+@@ -22,6 +22,8 @@
+ 
+ typedef struct
+ {
++    GSettingsSchemaSource *schema_source;
++    GSettingsSchema *schema;
+     GSettings *settings;
+     GSettings *shell_settings;
+ 
+@@ -919,6 +921,8 @@
+     {
+         g_signal_handler_disconnect (settings, priv->c_signals[C_CHANGED]);
+         g_clear_object (&priv->settings);
++        g_settings_schema_unref (priv->schema);
++        g_settings_schema_source_unref (priv->schema_source);
+     }
+ 
+     if (shell_settings)
+@@ -1000,7 +1004,11 @@
+ g_paste_settings_init (GPasteSettings *self)
+ {
+     GPasteSettingsPrivate *priv = g_paste_settings_get_instance_private (self);
+-    GSettings *settings = priv->settings = g_settings_new (G_PASTE_SETTINGS_NAME);
++
++    // library used by introspection requires schemas but we cannot set XDG_DATA_DIRS for the library
++    GSettingsSchemaSource *schema_source = priv->schema_source = g_settings_schema_source_new_from_directory ("@gschemasCompiled@", NULL, FALSE, NULL);
++    priv->schema = g_settings_schema_source_lookup (schema_source, G_PASTE_SETTINGS_NAME, FALSE);
++    GSettings *settings = priv->settings = g_settings_new_full (priv->schema, NULL, NULL);
+ 
+     priv->history_name = NULL;
+     priv->launch_ui = NULL;