diff options
Diffstat (limited to 'pkgs/desktops/gnome/core/gnome-control-center')
-rw-r--r-- | pkgs/desktops/gnome/core/gnome-control-center/default.nix | 190 | ||||
-rw-r--r-- | pkgs/desktops/gnome/core/gnome-control-center/paths.patch | 194 |
2 files changed, 384 insertions, 0 deletions
diff --git a/pkgs/desktops/gnome/core/gnome-control-center/default.nix b/pkgs/desktops/gnome/core/gnome-control-center/default.nix new file mode 100644 index 0000000000000..6170f53c716ba --- /dev/null +++ b/pkgs/desktops/gnome/core/gnome-control-center/default.nix @@ -0,0 +1,190 @@ +{ fetchurl +, fetchpatch +, lib +, stdenv +, substituteAll +, accountsservice +, adwaita-icon-theme +, cheese +, clutter +, clutter-gtk +, colord +, colord-gtk +, cups +, docbook-xsl-nons +, fontconfig +, gdk-pixbuf +, gettext +, glib +, glib-networking +, glibc +, gnome-bluetooth +, gnome-color-manager +, gnome-desktop +, gnome-online-accounts +, gnome-settings-daemon +, gnome +, grilo +, grilo-plugins +, gsettings-desktop-schemas +, gsound +, gtk3 +, ibus +, libcanberra-gtk3 +, libgnomekbd +, libgtop +, libgudev +, libhandy +, libkrb5 +, libpulseaudio +, libpwquality +, librsvg +, libsecret +, libsoup +, libwacom +, libxml2 +, libxslt +, meson +, modemmanager +, mutter +, networkmanager +, networkmanagerapplet +, libnma +, ninja +, pkg-config +, polkit +, python3 +, samba +, shared-mime-info +, sound-theme-freedesktop +, tracker +, tracker-miners +, tzdata +, udisks2 +, upower +, epoxy +, gnome-user-share +, gnome-remote-desktop +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "gnome-control-center"; + version = "40.0"; + + src = fetchurl { + url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz"; + sha256 = "sha256-zMmlc2UXOFEJrlpZkGwlgkTdh5t1A61ZhM9BZVyzAvE="; + }; + + patches = [ + (substituteAll { + src = ./paths.patch; + gcm = gnome-color-manager; + gnome_desktop = gnome-desktop; + inherit glibc libgnomekbd tzdata; + inherit cups networkmanagerapplet; + }) + + # Fix startup assertion in power panel. + # https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/974 + (fetchpatch { + url = "https://gitlab.gnome.org/GNOME/gnome-control-center/commit/9acaa10567c94048657c69538e5d7813f82c4224.patch"; + sha256 = "59GeTPcG2UiVTL4VTS/TP0p0QkAQpm3VgvuAiw64wUU="; + }) + ]; + + nativeBuildInputs = [ + docbook-xsl-nons + gettext + libxslt + meson + ninja + pkg-config + python3 + shared-mime-info + wrapGAppsHook + ]; + + buildInputs = [ + accountsservice + adwaita-icon-theme + cheese + clutter + clutter-gtk + colord + colord-gtk + epoxy + fontconfig + gdk-pixbuf + glib + glib-networking + gnome-bluetooth + gnome-desktop + gnome-online-accounts + gnome-remote-desktop # optional, sharing panel + gnome-settings-daemon + gnome-user-share # optional, sharing panel + grilo + grilo-plugins # for setting wallpaper from Flickr + gsettings-desktop-schemas + gsound + gtk3 + ibus + libcanberra-gtk3 + libgtop + libgudev + libhandy + libkrb5 + libnma + libpulseaudio + libpwquality + librsvg + libsecret + libsoup + libwacom + libxml2 + modemmanager + mutter # schemas for the keybindings + networkmanager + polkit + samba + tracker + tracker-miners # for search locations dialog + udisks2 + upower + ]; + + postPatch = '' + chmod +x build-aux/meson/meson_post_install.py # patchShebangs requires executable file + patchShebangs build-aux/meson/meson_post_install.py + ''; + + preFixup = '' + gappsWrapperArgs+=( + --prefix XDG_DATA_DIRS : "${sound-theme-freedesktop}/share" + # Thumbnailers (for setting user profile pictures) + --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share" + --prefix XDG_DATA_DIRS : "${librsvg}/share" + # WM keyboard shortcuts + --prefix XDG_DATA_DIRS : "${mutter}/share" + ) + for i in $out/share/applications/*; do + substituteInPlace $i --replace "Exec=gnome-control-center" "Exec=$out/bin/gnome-control-center" + done + ''; + + passthru = { + updateScript = gnome.updateScript { + packageName = pname; + attrPath = "gnome.${pname}"; + }; + }; + + meta = with lib; { + description = "Utilities to configure the GNOME desktop"; + license = licenses.gpl2Plus; + maintainers = teams.gnome.members; + platforms = platforms.linux; + }; +} diff --git a/pkgs/desktops/gnome/core/gnome-control-center/paths.patch b/pkgs/desktops/gnome/core/gnome-control-center/paths.patch new file mode 100644 index 0000000000000..a6787477b8144 --- /dev/null +++ b/pkgs/desktops/gnome/core/gnome-control-center/paths.patch @@ -0,0 +1,194 @@ +diff --git a/panels/color/cc-color-panel.c b/panels/color/cc-color-panel.c +index 603178efc..c363a6a5c 100644 +--- a/panels/color/cc-color-panel.c ++++ b/panels/color/cc-color-panel.c +@@ -591,7 +591,7 @@ gcm_prefs_calibrate_cb (CcColorPanel *prefs) + + /* run with modal set */ + argv = g_ptr_array_new_with_free_func (g_free); +- g_ptr_array_add (argv, g_strdup ("gcm-calibrate")); ++ g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-calibrate", NULL)); + g_ptr_array_add (argv, g_strdup ("--device")); + g_ptr_array_add (argv, g_strdup (cd_device_get_id (prefs->current_device))); + g_ptr_array_add (argv, g_strdup ("--parent-window")); +@@ -1029,7 +1029,7 @@ gcm_prefs_profile_view (CcColorPanel *prefs, CdProfile *profile) + + /* open up gcm-viewer as a info pane */ + argv = g_ptr_array_new_with_free_func (g_free); +- g_ptr_array_add (argv, g_strdup ("gcm-viewer")); ++ g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-viewer", NULL)); + g_ptr_array_add (argv, g_strdup ("--profile")); + g_ptr_array_add (argv, g_strdup (cd_profile_get_id (profile))); + g_ptr_array_add (argv, g_strdup ("--parent-window")); +@@ -1275,15 +1275,12 @@ gcm_prefs_device_clicked (CcColorPanel *prefs, CdDevice *device) + static void + gcm_prefs_profile_clicked (CcColorPanel *prefs, CdProfile *profile, CdDevice *device) + { +- g_autofree gchar *s = NULL; +- + /* get profile */ + g_debug ("selected profile = %s", + cd_profile_get_filename (profile)); + + /* allow getting profile info */ +- if (cd_profile_get_filename (profile) != NULL && +- (s = g_find_program_in_path ("gcm-viewer")) != NULL) ++ if (cd_profile_get_filename (profile) != NULL) + gtk_widget_set_sensitive (prefs->toolbutton_profile_view, TRUE); + else + gtk_widget_set_sensitive (prefs->toolbutton_profile_view, FALSE); +diff --git a/panels/datetime/tz.h b/panels/datetime/tz.h +index a2376f8a4..98769e08f 100644 +--- a/panels/datetime/tz.h ++++ b/panels/datetime/tz.h +@@ -27,11 +27,7 @@ + + G_BEGIN_DECLS + +-#ifndef __sun +-# define TZ_DATA_FILE "/usr/share/zoneinfo/zone.tab" +-#else +-# define TZ_DATA_FILE "/usr/share/lib/zoneinfo/tab/zone_sun.tab" +-#endif ++#define TZ_DATA_FILE "@tzdata@/share/zoneinfo/zone.tab" + + typedef struct _TzDB TzDB; + typedef struct _TzLocation TzLocation; +diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c +index bd0e07762..0e71351f8 100644 +--- a/panels/info-overview/cc-info-overview-panel.c ++++ b/panels/info-overview/cc-info-overview-panel.c +@@ -172,7 +172,7 @@ load_gnome_version (char **version, + gsize length; + g_autoptr(VersionData) data = NULL; + +- if (!g_file_get_contents (DATADIR "/gnome/gnome-version.xml", ++ if (!g_file_get_contents ("@gnome_desktop@/share/gnome/gnome-version.xml", + &contents, + &length, + &error)) +diff --git a/panels/keyboard/cc-input-list-box.c b/panels/keyboard/cc-input-list-box.c +index 6c2cb5614..8f57159cc 100644 +--- a/panels/keyboard/cc-input-list-box.c ++++ b/panels/keyboard/cc-input-list-box.c +@@ -223,10 +223,10 @@ row_layout_cb (CcInputListBox *self, + layout_variant = cc_input_source_get_layout_variant (source); + + if (layout_variant && layout_variant[0]) +- commandline = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"", ++ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l \"%s\t%s\"", + layout, layout_variant); + else +- commandline = g_strdup_printf ("gkbd-keyboard-display -l %s", ++ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l %s", + layout); + + g_spawn_command_line_async (commandline, NULL); +diff --git a/panels/network/connection-editor/net-connection-editor.c b/panels/network/connection-editor/net-connection-editor.c +index 505b8ee25..62e94009f 100644 +--- a/panels/network/connection-editor/net-connection-editor.c ++++ b/panels/network/connection-editor/net-connection-editor.c +@@ -267,9 +267,9 @@ net_connection_editor_do_fallback (NetConnectionEditor *self, const gchar *type) + g_autoptr(GError) error = NULL; + + if (self->is_new_connection) { +- cmdline = g_strdup_printf ("nm-connection-editor --type='%s' --create", type); ++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --type='%s' --create", type); + } else { +- cmdline = g_strdup_printf ("nm-connection-editor --edit='%s'", ++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit='%s'", + nm_connection_get_uuid (self->connection)); + } + +diff --git a/panels/network/net-device-bluetooth.c b/panels/network/net-device-bluetooth.c +index 74dfb0e9a..5f53d1a20 100644 +--- a/panels/network/net-device-bluetooth.c ++++ b/panels/network/net-device-bluetooth.c +@@ -90,7 +90,7 @@ nm_device_bluetooth_refresh_ui (NetDeviceBluetooth *self) + update_off_switch_from_device_state (self->device_off_switch, state, self); + + /* set up the Options button */ +- path = g_find_program_in_path ("nm-connection-editor"); ++ path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor"); + gtk_widget_set_visible (GTK_WIDGET (self->options_button), state != NM_DEVICE_STATE_UNMANAGED && path != NULL); + } + +@@ -141,7 +141,7 @@ options_button_clicked_cb (NetDeviceBluetooth *self) + + connection = net_device_get_find_connection (self->client, self->device); + uuid = nm_connection_get_uuid (connection); +- cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid); ++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit %s", uuid); + g_debug ("Launching '%s'\n", cmdline); + if (!g_spawn_command_line_async (cmdline, &error)) + g_warning ("Failed to launch nm-connection-editor: %s", error->message); +@@ -185,7 +185,7 @@ net_device_bluetooth_init (NetDeviceBluetooth *self) + + gtk_widget_init_template (GTK_WIDGET (self)); + +- path = g_find_program_in_path ("nm-connection-editor"); ++ path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor"); + gtk_widget_set_visible (GTK_WIDGET (self->options_button), path != NULL); + } + +diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c +index 34eb86241..50d0a2bed 100644 +--- a/panels/network/net-device-mobile.c ++++ b/panels/network/net-device-mobile.c +@@ -508,7 +508,7 @@ options_button_clicked_cb (NetDeviceMobile *self) + + connection = net_device_get_find_connection (self->client, self->device); + uuid = nm_connection_get_uuid (connection); +- cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid); ++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit %s", uuid); + g_debug ("Launching '%s'\n", cmdline); + if (!g_spawn_command_line_async (cmdline, &error)) + g_warning ("Failed to launch nm-connection-editor: %s", error->message); +@@ -797,7 +797,7 @@ net_device_mobile_init (NetDeviceMobile *self) + + self->cancellable = g_cancellable_new (); + +- path = g_find_program_in_path ("nm-connection-editor"); ++ path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor"); + gtk_widget_set_visible (GTK_WIDGET (self->options_button), path != NULL); + } + +diff --git a/panels/printers/pp-host.c b/panels/printers/pp-host.c +index a31a606e3..ed5133d29 100644 +--- a/panels/printers/pp-host.c ++++ b/panels/printers/pp-host.c +@@ -256,7 +256,7 @@ _pp_host_get_snmp_devices_thread (GTask *task, + devices = g_ptr_array_new_with_free_func (g_object_unref); + + argv = g_new0 (gchar *, 3); +- argv[0] = g_strdup ("/usr/lib/cups/backend/snmp"); ++ argv[0] = g_strdup ("@cups@/lib/cups/backend/snmp"); + argv[1] = g_strdup (priv->hostname); + + /* Use SNMP to get printer's informations */ +diff --git a/panels/user-accounts/run-passwd.c b/panels/user-accounts/run-passwd.c +index 86f53d4fc..0b052856f 100644 +--- a/panels/user-accounts/run-passwd.c ++++ b/panels/user-accounts/run-passwd.c +@@ -150,7 +150,7 @@ spawn_passwd (PasswdHandler *passwd_handler, GError **error) + gchar **envp; + gint my_stdin, my_stdout, my_stderr; + +- argv[0] = "/usr/bin/passwd"; /* Is it safe to rely on a hard-coded path? */ ++ argv[0] = "/run/wrappers/bin/passwd"; /* Is it safe to rely on a hard-coded path? */ + argv[1] = NULL; + + envp = g_get_environ (); +diff --git a/tests/datetime/test-endianess.c b/tests/datetime/test-endianess.c +index 9cb92007a..84d2f0fa3 100644 +--- a/tests/datetime/test-endianess.c ++++ b/tests/datetime/test-endianess.c +@@ -26,7 +26,7 @@ test_endianess (void) + g_autoptr(GDir) dir = NULL; + const char *name; + +- dir = g_dir_open ("/usr/share/i18n/locales/", 0, NULL); ++ dir = g_dir_open ("@glibc@/share/i18n/locales/", 0, NULL); + if (dir == NULL) { + /* Try with /usr/share/locale/ + * https://bugzilla.gnome.org/show_bug.cgi?id=646780 */ |