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.
This commit is contained in:
parent
0e1c01451f
commit
f63d94eba3
3 changed files with 71 additions and 1 deletions
|
@ -21,7 +21,6 @@ with lib;
|
|||
config = mkIf config.services.gnome3.gpaste.enable {
|
||||
environment.systemPackages = [ pkgs.gnome3.gpaste ];
|
||||
services.dbus.packages = [ pkgs.gnome3.gpaste ];
|
||||
services.xserver.desktopManager.gnome3.sessionPath = [ pkgs.gnome3.gpaste ];
|
||||
systemd.packages = [ pkgs.gnome3.gpaste ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
55
pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
Normal file
55
pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
Normal file
|
@ -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;
|
Loading…
Reference in a new issue