about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/gnome-3/misc
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/desktops/gnome-3/misc')
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix83
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix66
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix170
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix110
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix96
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-video-effects/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch55
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix27
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix62
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/pidgin/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix49
20 files changed, 1172 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix
new file mode 100644
index 000000000000..c522fbec57b0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, gtk3, vala, enchant2, wrapGAppsHook, meson, ninja
+, desktop-file-utils, gnome-online-accounts, gsettings-desktop-schemas, adwaita-icon-theme
+, libnotify, libcanberra-gtk3, libsecret, gmime, isocodes, libxml2, gettext
+, sqlite, gcr, json-glib, itstool, libgee, gnome3, webkitgtk, python3
+, xvfb_run, dbus, shared-mime-info, libunwind, glib-networking }:
+
+stdenv.mkDerivation rec {
+  pname = "geary";
+  version = "0.13.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0h9pf2mdskq7mylib1m9hw86nwfmdzyngjl7ywangqipm1k5svjx";
+  };
+
+  patches = [
+    # gobject-introspection is not needed
+    # https://gitlab.gnome.org/GNOME/geary/merge_requests/138
+    (fetchpatch {
+      url = https://gitlab.gnome.org/GNOME/geary/commit/d2f1b1076aa942d140e83fdf03b66621c11229f5.patch;
+      sha256 = "1dsj4ybnibpi572w9hafm0w90jbjv7wzdl6j8d4c2qg5h7knlvfk";
+    })
+    # Fixes tests on Aarch64
+    # https://gitlab.gnome.org/GNOME/geary/issues/259
+    (fetchpatch {
+      url = https://gitlab.gnome.org/GNOME/geary/commit/9c3fdbfb5c792daeb9c3924f798fa83a15096d8a.patch;
+      sha256 = "1ihjxnaj0g6gx264kd8cbhs88yp37vwmmcd3lvmz44agf7qcv2ri";
+    })
+  ];
+
+  nativeBuildInputs = [
+    desktop-file-utils gettext itstool libxml2 meson ninja
+    pkgconfig vala wrapGAppsHook python3
+  ];
+
+  buildInputs = [
+    adwaita-icon-theme enchant2 gcr gmime gnome-online-accounts
+    gsettings-desktop-schemas gtk3 isocodes json-glib libcanberra-gtk3
+    libgee libnotify libsecret sqlite webkitgtk glib-networking
+    libunwind
+  ];
+
+  checkInputs = [ xvfb_run dbus ];
+
+  mesonFlags = [
+    "-Dcontractor=true" # install the contractor file (Pantheon specific)
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/post_install.py
+    patchShebangs build-aux/post_install.py
+  '';
+
+  preFixup = ''
+    # Add geary to path for geary-attach
+    gappsWrapperArgs+=(--prefix PATH : "$out/bin")
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    NO_AT_BRIDGE=1 \
+    XDG_DATA_DIRS=:$XDG_DATA_DIRS:${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${shared-mime-info}/share \
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      meson test -v --no-stdsplit
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://wiki.gnome.org/Apps/Geary;
+    description = "Mail client for GNOME 3";
+    maintainers = gnome3.maintainers;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix
new file mode 100644
index 000000000000..9f24d04337c2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchurl, fetchpatch, vala, intltool, pkgconfig, gtk3, glib
+, json-glib, wrapGAppsHook, libpeas, bash, gobject-introspection
+, libsoup, gtksourceview, gsettings-desktop-schemas, adwaita-icon-theme
+, gnome3, gtkspell3, shared-mime-info, libgee, libgit2-glib, libsecret
+, meson, ninja, python3
+ }:
+
+let
+  pname = "gitg";
+  version = "3.30.1";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "1fz8q1aiql6k740savdjh0vzbyhcflgf94cfdhvzcrrvm929n2ss";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = https://gitlab.gnome.org/GNOME/gitg/commit/42bceea265f53fe7fd4a41037b936deed975fc6c.patch;
+      sha256 = "1xq245rsi1bi66lswk33pdiazfaagxf77836ds5q73900rx4r7fw";
+    })
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+    sed -i '/gtk-update-icon-cache/s/^/#/' meson_post_install.py
+
+    substituteInPlace tests/libgitg/test-commit.vala --replace "/bin/bash" "${bash}/bin/bash"
+  '';
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  buildInputs = [
+    gtk3 glib json-glib libgee libpeas libsoup
+    libgit2-glib gtkspell3 gtksourceview gsettings-desktop-schemas
+    libsecret gobject-introspection adwaita-icon-theme
+  ];
+
+  nativeBuildInputs = [ meson ninja python3 vala wrapGAppsHook intltool pkgconfig ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      # Thumbnailers
+      --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+    )
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://wiki.gnome.org/Apps/Gitg;
+    description = "GNOME GUI client to view git repositories";
+    maintainers = with maintainers; [ domenkozar ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
new file mode 100644
index 000000000000..de0d70ae42f4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, fetchurl
+, intltool
+, itstool
+, libxml2
+, libxslt
+, pkgconfig
+, gnome-panel
+, gtk3
+, glib
+, libwnck3
+, libgtop
+, libnotify
+, upower
+, dbus-glib
+, wirelesstools
+, linuxPackages
+, adwaita-icon-theme
+, libgweather
+, gucharmap
+, gnome-settings-daemon
+, tracker
+, polkit
+, gnome3
+}:
+
+let
+  pname = "gnome-applets";
+  version = "3.30.0";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "1cvl32486kqw301wy40l1a1sdhanra7bx4smq0a3lmnl3x01zg43";
+  };
+
+  nativeBuildInputs = [
+    intltool
+    itstool
+    pkgconfig
+    libxml2
+    libxslt
+  ];
+
+  buildInputs = [
+    gnome-panel
+    gtk3
+    glib
+    libxml2
+    libwnck3
+    libgtop
+    libnotify
+    upower
+    dbus-glib
+    adwaita-icon-theme
+    libgweather
+    gucharmap
+    gnome-settings-daemon
+    tracker
+    polkit
+    wirelesstools
+    linuxPackages.cpupower
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  configureFlags = [
+    "--with-libpanel-applet-dir=$(out)/share/gnome-panel/applets"
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Applets for use with the GNOME panel";
+    homepage = https://wiki.gnome.org/Projects/GnomeApplets;
+    license = licenses.gpl2Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
new file mode 100644
index 000000000000..c80c8b977cf5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, gnome3
+, gtk3, glib, gobject-introspection, libarchive
+}:
+
+stdenv.mkDerivation rec {
+  name = "gnome-autoar-${version}";
+  version = "0.2.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-autoar/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "02i4zgqqqj56h7bcys6dz7n78m4nj2x4dv1ggjmnrk98n06xpsax";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-autoar"; attrPath = "gnome3.gnome-autoar"; };
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk3 glib ];
+  propagatedBuildInputs = [ libarchive gobject-introspection ];
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    maintainers = gnome3.maintainers;
+    license = licenses.lgpl21;
+    description = "Library to integrate compressed files management with GNOME";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
new file mode 100644
index 000000000000..f9387c11b819
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
@@ -0,0 +1,170 @@
+{ stdenv
+, autoreconfHook
+, fetchurl
+, fetchpatch
+, gettext
+, glib
+, gnome-bluetooth
+, gnome-desktop
+, gnome-panel
+, gnome-session
+, gnome3
+, gsettings-desktop-schemas
+, gtk3
+, ibus
+, intltool
+, libcanberra-gtk3
+, libpulseaudio
+, libxkbfile
+, libxml2
+, pkgconfig
+, polkit
+, substituteAll
+, upower
+, wrapGAppsHook
+, writeTextFile
+, writeShellScriptBin
+, xkeyboard_config
+}:
+
+let
+  pname = "gnome-flashback";
+  version = "3.30.0";
+  requiredComponents = wmName: "RequiredComponents=${wmName};gnome-flashback-init;gnome-flashback;gnome-panel;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Clipboard;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Mouse;org.gnome.SettingsDaemon.Power;org.gnome.SettingsDaemon.PrintNotifications;org.gnome.SettingsDaemon.Rfkill;org.gnome.SettingsDaemon.ScreensaverProxy;org.gnome.SettingsDaemon.Sharing;org.gnome.SettingsDaemon.Smartcard;org.gnome.SettingsDaemon.Sound;org.gnome.SettingsDaemon.Wacom;org.gnome.SettingsDaemon.XSettings;";
+  gnome-flashback = stdenv.mkDerivation rec {
+    name = "${pname}-${version}";
+
+    src = fetchurl {
+      url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+      sha256 = "18rwql2pi78155l9zp1i50xfi5z8xz2l08m9d81x6qqbfr1nyy57";
+    };
+
+    patches =[
+      # overrides do not respect gsettingsschemasdir
+      # https://gitlab.gnome.org/GNOME/gnome-flashback/issues/9
+      (fetchpatch {
+       url = https://gitlab.gnome.org/GNOME/gnome-flashback/commit/a55530f58ccd600414a5420b287868ab7d219705.patch;
+       sha256 = "1la94lhhb9zlw7bnbpl6hl26zv3kxbsvgx996mhph720wxg426mh";
+      })
+    ];
+
+    # make .desktop Execs absolute
+    postPatch = ''
+      patch -p0 <<END_PATCH
+      +++ data/applications/gnome-flashback-init.desktop.in
+      @@ -4 +4 @@
+      -Exec=gnome-flashback --initialize
+      +Exec=$out/bin/gnome-flashback --initialize
+      +++ data/applications/gnome-flashback.desktop.in
+      @@ -4 +4 @@
+      -Exec=gnome-flashback
+      +Exec=$out/bin/gnome-flashback
+      END_PATCH
+    '';
+
+    postInstall = ''
+      # Check that our expected RequiredComponents match the stock session files, but then don't install them.
+      # They can be installed using mkSessionForWm.
+      grep '${requiredComponents "metacity"}' $out/share/gnome-session/sessions/gnome-flashback-metacity.session || (echo "RequiredComponents have changed, please update gnome-flashback/default.nix."; false)
+
+      rm -r $out/share/gnome-session
+      rm -r $out/share/xsessions
+      rm -r $out/libexec
+    '';
+
+    nativeBuildInputs = [
+      autoreconfHook
+      gettext
+      libxml2
+      pkgconfig
+      wrapGAppsHook
+    ];
+
+    buildInputs = [
+      glib
+      gnome-bluetooth
+      gnome-desktop
+      gsettings-desktop-schemas
+      gtk3
+      ibus
+      libcanberra-gtk3
+      libpulseaudio
+      libxkbfile
+      polkit
+      upower
+      xkeyboard_config
+    ];
+
+    doCheck = true;
+
+    enableParallelBuilding = true;
+
+    passthru = {
+      updateScript = gnome3.updateScript {
+        packageName = pname;
+        attrPath = "gnome3.${pname}";
+      };
+
+      mkSessionForWm = { wmName, wmLabel, wmCommand }:
+        let
+          wmApplication = writeTextFile {
+            name = "gnome-flashback-${wmName}-wm";
+            destination = "/share/applications/${wmName}.desktop";
+            text = ''
+              [Desktop Entry]
+              Type=Application
+              Encoding=UTF-8
+              Name=${wmLabel}
+              Exec=${wmCommand}
+              NoDisplay=true
+              X-GNOME-WMName=${wmLabel}
+              X-GNOME-Autostart-Phase=WindowManager
+              X-GNOME-Provides=windowmanager
+              X-GNOME-Autostart-Notify=false
+            '';
+          };
+
+        gnomeSession = writeTextFile {
+          name = "gnome-flashback-${wmName}-gnome-session";
+          destination = "/share/gnome-session/sessions/gnome-flashback-${wmName}.session";
+          text = ''
+            [GNOME Session]
+            Name=GNOME Flashback (${wmLabel})
+            ${requiredComponents wmName}
+          '';
+        };
+
+        executable = writeShellScriptBin "gnome-flashback-${wmName}" ''
+          if [ -z $XDG_CURRENT_DESKTOP ]; then
+            export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
+          fi
+
+          export XDG_DATA_DIRS=${wmApplication}/share:${gnomeSession}/share:${gnome-flashback}/share:${gnome-panel}/share:$XDG_DATA_DIRS
+
+          exec ${gnome-session}/bin/gnome-session --session=gnome-flashback-${wmName} "$@"
+        '';
+
+      in writeTextFile {
+        name = "gnome-flashback-${wmName}-xsession";
+        destination = "/share/xsessions/gnome-flashback-${wmName}.desktop";
+        text = ''
+          [Desktop Entry]
+          Name=GNOME Flashback (${wmLabel})
+          Comment=This session logs you into GNOME Flashback with ${wmLabel}
+          Exec=${executable}/bin/gnome-flashback-${wmName}
+          TryExec=${wmCommand}
+          Type=Application
+          DesktopNames=GNOME-Flashback;GNOME;
+        '';
+      };
+    };
+
+    meta = with stdenv.lib; {
+      description = "GNOME 2.x-like session for GNOME 3";
+      homepage = https://wiki.gnome.org/Projects/GnomeFlashback;
+      license = licenses.gpl2;
+      maintainers = gnome3.maintainers;
+      platforms = platforms.linux;
+    };
+  };
+  in gnome-flashback
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
new file mode 100644
index 000000000000..3cdab30ce8d1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, meson, ninja, gettext, gnome3, packagekit, polkit
+, gtk3, systemd, wrapGAppsHook, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+  name = "gnome-packagekit-${version}";
+  version = "3.30.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-packagekit/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "1i1hf6833psnq174xm0gjlz5rbrkl8i512y47w7nk8mrrrc31b35";
+  };
+
+  nativeBuildInputs = [ pkgconfig meson ninja gettext wrapGAppsHook desktop-file-utils ];
+  buildInputs = [ gtk3 packagekit systemd polkit ];
+
+  postPatch = ''
+    patchShebangs meson_post_install.sh
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "gnome-packagekit";
+      attrPath = "gnome3.gnome-packagekit";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.freedesktop.org/software/PackageKit/;
+    platforms = platforms.linux;
+    maintainers = gnome3.maintainers;
+    license = licenses.gpl2;
+    description = "Tools for installing software on the GNOME desktop using PackageKit";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
new file mode 100644
index 000000000000..db00758fb55f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
@@ -0,0 +1,110 @@
+{ stdenv
+, fetchurl
+, autoreconfHook
+, fetchpatch
+, dconf
+, evolution-data-server
+, gdm
+, gettext
+, glib
+, gnome-desktop
+, gnome-flashback
+, gnome-menus
+, gnome3
+, gtk3
+, itstool
+, libgweather
+, libsoup
+, libwnck3
+, libxml2
+, pkgconfig
+, polkit
+, systemd
+, wrapGAppsHook }:
+
+let
+  pname = "gnome-panel";
+  version = "3.30.0";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  outputs = [ "out" "dev" "man" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "12q0l7wy6hzl46i7xpvv82ka3bn14z0jg6fhv5xhnk7j9mkbmgqw";
+  };
+
+  patches = [
+    # https://github.com/NixOS/nixpkgs/issues/36468
+    # https://gitlab.gnome.org/GNOME/gnome-panel/issues/8
+    (fetchpatch {
+      url = https://gitlab.gnome.org/GNOME/gnome-panel/commit/77be9c3507bd1b5d70d97649b85ec9f47f6c359c.patch;
+      sha256 = "00b1ihnc6hp2g6x1v1njbc6mhsk44izl2wigviibmka2znfk03nv";
+    })
+  ];
+
+  # make .desktop Exec absolute
+  postPatch = ''
+    patch -p0 <<END_PATCH
+    +++ gnome-panel/gnome-panel.desktop.in
+    @@ -7 +7 @@
+    -Exec=gnome-panel
+    +Exec=$out/bin/gnome-panel
+    END_PATCH
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${gnome-menus}/share:${gnome-flashback}/share"
+      --prefix XDG_CONFIG_DIRS : "${gnome-menus}/etc/xdg:${gnome-flashback}/etc/xdg"
+    )
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    itstool
+    libxml2
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    dconf
+    evolution-data-server
+    gdm
+    glib
+    gnome-desktop
+    gnome-menus
+    gtk3
+    libgweather
+    libsoup
+    libwnck3
+    polkit
+    systemd
+  ];
+
+  configureFlags = [
+    "--enable-eds"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Component of Gnome Flashback that provides panels and default applets for the desktop";
+    homepage = https://wiki.gnome.org/Projects/GnomePanel;
+    license = licenses.gpl2Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix
new file mode 100644
index 000000000000..5afc92aa482b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix
@@ -0,0 +1,96 @@
+{ stdenv
+, fetchgit
+, fetchurl
+, autoreconfHook
+, dbus-glib
+, glib
+, gnome-common
+, gnome-desktop
+, gnome3
+, gtk3
+, gsettings-desktop-schemas
+, pkgconfig
+, intltool
+, pam
+, systemd
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-screensaver";
+  version = "3.6.1";
+
+  # the original package is deprecated and the Ubuntu version has a number of useful patches
+  src = fetchgit {
+    url = "https://git.launchpad.net/ubuntu/+source/gnome-screensaver";
+    rev =  "4f7b666131dec060a5aac9117f395ac522a627b4";
+    sha256 = "15xqgcpm825cy3rm8pj00qlblq66svmh06lcw8qi74a3g0xcir87";
+  };
+
+  # from debian/patches/series
+  patches = map (patch: "debian/patches/${patch}") [
+    "00git_logind_check.patch"
+    "01_no_autostart.patch"
+    "03_fix_ltsp-fading.patch"
+    "05_dbus_service.patch"
+    "10_legacy_scrsvr_inhibit.patch"
+    "13_nvidia_gamma_fade_fallback.patch"
+    "14_no_fade_on_user_switch.patch"
+    "15_dont_crash_on_no_fade.patch"
+    "16_dont_crash_in_kvm.patch"
+    "17_remove_top_panel.patch"
+    "18_unity_dialog_layout.patch"
+    "24_use_user_settings.patch"
+    "25_fix_lock_command.patch"
+    "27_lightdm_switch_user.patch"
+    "28_blocking_return.patch"
+    "29_handle_expired_creds.patch"
+    # these two patches are ubuntu-specific
+    # "30_ubuntu-lock-on-suspend_gsetting.patch"
+    # "31_lock_screen_on_suspend.patch"
+    "32_input_sources_switcher.patch"
+    "move-not-nuke.patch"
+    "allow-replacement"
+    "libsystemd.patch"
+    "0001-gs-lock-plug-Disconnect-signal-handler-from-right-ob.patch"
+    "33_budgie_support.patch"
+  ] ++ [ ./fix-dbus-service-dir.patch ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    wrapGAppsHook
+    gnome-common
+    pkgconfig
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    gnome-desktop
+    dbus-glib
+    pam
+    systemd
+  ];
+
+  configureFlags = [ "--enable-locking" "--with-systemd=yes" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Component of Gnome Flashback that provides screen locking";
+    homepage = https://wiki.gnome.org/Projects/GnomeScreensaver;
+    license = licenses.gpl2Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch
new file mode 100644
index 000000000000..81e037ee690d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac  2019-01-20 20:28:01.309231507 +0100
++++ b/configure.ac  2019-01-20 20:31:54.927978927 +0100
+@@ -137,7 +137,7 @@
+ 
+ # Find out where the session service file goes
+ # The sad sed hack is recomended by section 27.10 of the automake manual.
+-DBUS_SESSION_SERVICE_DIR=`pkg-config --variable session_bus_services_dir dbus-1 | sed -e 's,/usr/share,${datarootdir},g'`
++DBUS_SESSION_SERVICE_DIR=`pkg-config --variable session_bus_services_dir dbus-1 --define-variable 'datadir=${datadir}'`
+ AC_SUBST(DBUS_SESSION_SERVICE_DIR)
+ 
+ dnl ---------------------------------------------------------------------------
\ No newline at end of file
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
new file mode 100644
index 000000000000..47de1de59cac
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, meson, ninja, gettext, fetchurl
+, pkgconfig, gtk3, glib, libsoup
+, itstool, libxml2, python3Packages
+, gnome3, gdk_pixbuf, libnotify, gobject-introspection, wrapGAppsHook }:
+
+let
+  pname = "gnome-tweaks";
+  version = "3.30.2";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "0j63siy1i5pl2g6di1r9vjn54m9ahh42wj20j6689pza2lamay1z";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkgconfig gettext itstool libxml2 wrapGAppsHook python3Packages.python
+  ];
+  buildInputs = [
+    gtk3 glib gnome3.gsettings-desktop-schemas
+    gdk_pixbuf gnome3.adwaita-icon-theme
+    libnotify gnome3.gnome-shell python3Packages.pygobject3
+    libsoup gnome3.gnome-settings-daemon gnome3.nautilus
+    gnome3.mutter gnome3.gnome-desktop gobject-introspection
+    gnome3.nautilus
+    # Makes it possible to select user themes through the `user-theme` extension
+    gnome3.gnome-shell-extensions
+  ];
+
+  postPatch = ''
+    patchShebangs meson-postinstall.py
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PYTHONPATH : "$out/${python3Packages.python.sitePackages}:$PYTHONPATH")
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://wiki.gnome.org/action/show/Apps/GnomeTweakTool;
+    description = "A tool to customize advanced GNOME 3 options";
+    maintainers = gnome3.maintainers;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-video-effects/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-video-effects/default.nix
new file mode 100644
index 000000000000..b65e9c1021e7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-video-effects/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gnome3 }:
+let
+  pname = "gnome-video-effects";
+  version = "0.4.3";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "06c2f1kihyhawap1s3zg5w7q7fypsybkp7xry4hxkdz4mpsy0zjs";
+  };
+
+  nativeBuildInputs = [ pkgconfig intltool ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "A collection of GStreamer effects to be used in different GNOME Modules";
+    homepage = https://wiki.gnome.org/Projects/GnomeVideoEffects;
+    platforms = platforms.linux;
+    maintainers = gnome3.maintainers;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix
new file mode 100644
index 000000000000..fd71f1f2a23c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, vala, glib, gjs, mutter
+, pango, gtk3, gnome3, dbus, clutter, appstream-glib, wrapGAppsHook, systemd, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+  version = "3.30.2";
+  name = "gpaste-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/Keruspe/GPaste/archive/v${version}.tar.gz";
+    sha256 = "0vlbvv6rjxq7h9cl3ilndjk7d51ac1x7agj8k6a7bwjx8h1fr62x";
+  };
+
+  patches = [
+    ./fix-paths.patch
+  ];
+
+  # TODO: switch to substituteAll with placeholder
+  # https://github.com/NixOS/nix/issues/1846
+  postPatch = ''
+    substituteInPlace src/gnome-shell/extension.js \
+      --subst-var-by typelibPath "${placeholder "out"}/lib/girepository-1.0"
+    substituteInPlace src/gnome-shell/prefs.js \
+      --subst-var-by typelibPath "${placeholder "out"}/lib/girepository-1.0"
+    substituteInPlace src/libgpaste/settings/gpaste-settings.c \
+      --subst-var-by gschemasCompiled "${placeholder "out"}/share/gsettings-schemas/${name}/glib-2.0/schemas"
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook pkgconfig vala appstream-glib wrapGAppsHook
+  ];
+  buildInputs = [
+    glib gjs mutter gtk3 dbus
+    clutter pango gobject-introspection
+  ];
+
+  configureFlags = [
+    "--with-controlcenterdir=${placeholder "out"}/share/gnome-control-center/keybindings"
+    "--with-dbusservicesdir=${placeholder "out"}/share/dbus-1/services"
+    "--with-systemduserunitdir=${placeholder "out"}/etc/systemd/user"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Keruspe/GPaste;
+    description = "Clipboard management system with GNOME3 integration";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = gnome3.maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
new file mode 100644
index 000000000000..ca6b9a5b22ed
--- /dev/null
+++ b/nixpkgs/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;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
new file mode 100644
index 000000000000..67f2552b4348
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, intltool
+, gnome3, enchant, isocodes }:
+
+stdenv.mkDerivation rec {
+  name = "gtkhtml-${version}";
+  version = "4.10.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gtkhtml/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "ca3b6424fb2c7ac5d9cb8fdafb69318fa2e825c9cf6ed17d1e38d9b29e5606c3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gtkhtml"; attrPath = "gnome3.gtkhtml"; };
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk3 intltool gnome3.adwaita-icon-theme
+                  gnome3.gsettings-desktop-schemas ];
+
+  propagatedBuildInputs = [ enchant isocodes ];
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    maintainers = gnome3.maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
new file mode 100644
index 000000000000..3776a9adbf2c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, glib, gtk3, libgee, intltool, gnome3
+, libintl }:
+
+let
+  pname = "libgnome-games-support";
+  version = "1.4.3";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "0g6a1vvhrbs0pfnzjfg3lgqvppwkydn6j3dn713zhrjhma9pljkh";
+  };
+
+  nativeBuildInputs = [ pkgconfig intltool ];
+  buildInputs = [ libintl ];
+  propagatedBuildInputs = [
+    # Required by libgnome-games-support-1.pc
+    glib gtk3 libgee
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Small library intended for internal use by GNOME Games, but it may be used by others";
+    homepage = https://wiki.gnome.org/Apps/Games;
+    license = licenses.lgpl3;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix
new file mode 100644
index 000000000000..c42356aa16aa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, fetchurl
+, gettext
+, glib
+, gnome3
+, gsettings-desktop-schemas
+, gtk3
+, libcanberra-gtk3
+, libgtop
+, libstartup_notification
+, libxml2
+, pkgconfig
+, substituteAll
+, wrapGAppsHook
+, zenity }:
+
+let
+  pname = "metacity";
+  version = "3.30.1";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "12kr472gblx7jxh9rvnamy09bkg29ms2pgc0c3373piqmavi24qg";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit zenity;
+    })
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    libxml2
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gsettings-desktop-schemas
+    gtk3
+    libcanberra-gtk3
+    libgtop
+    libstartup_notification
+    zenity
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Window manager used in Gnome Flashback";
+    homepage = https://wiki.gnome.org/Projects/Metacity;
+    license = licenses.gpl2;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch
new file mode 100644
index 000000000000..ff3a244e67d9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/core/util.c
++++ b/src/core/util.c
+@@ -424,7 +424,7 @@
+                                  g_slist_length (columns)*2 +
+                                  g_slist_length (entries)));
+ 
+-  argvl[i++] = "zenity";
++  argvl[i++] = "@zenity@/bin/zenity";
+   argvl[i++] = type;
+   argvl[i++] = "--display";
+   argvl[i++] = display;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
new file mode 100644
index 000000000000..4aec5ba4d848
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, which
+, gtk-doc
+, docbook_xsl
+, docbook_xml_dtd_412
+, python3
+, ncurses
+, nautilus
+, gtk3
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nautilus-python";
+  version = "1.2.2";
+
+  outputs = [ "out" "dev" "doc" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "04pib6fan6cq8x0fhf5gll2f5d2dh5pxrhj79qhi5l1yc7ys7kch";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    which
+    gtk-doc
+    docbook_xsl
+    docbook_xml_dtd_412
+  ];
+
+  buildInputs = [
+    python3
+    ncurses # required by python3
+    python3.pkgs.pygobject3
+    nautilus
+    gtk3 # required by libnautilus-extension
+  ];
+
+  makeFlags = [
+    "PYTHON_LIB_LOC=${python3}/lib"
+  ];
+
+  PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Python bindings for the Nautilus Extension API";
+    homepage = https://wiki.gnome.org/Projects/NautilusPython;
+    license = licenses.gpl2Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/pidgin/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/pidgin/default.nix
new file mode 100644
index 000000000000..c11fdfa6099e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/pidgin/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.1";
+  basename = "pidgin-im-gnome-shell-extension";
+  name = "${basename}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "muffinmad";
+    repo = "${basename}";
+    rev = "v${version}";
+    sha256 = "1567s2sfqig4jw0nrn134f5vkx0yq31q044grv3xk4vpl1f3z2lr";
+  };
+
+  buildInputs = [ glib ];
+
+  configurePhase = "";
+  buildPhase = "";
+  installPhase = ''
+    share_dir="$prefix/share"
+    extensions_dir="$share_dir/gnome-shell/extensions/pidgin@muffinmad"
+    mkdir -p "$extensions_dir"
+    mv *.js metadata.json dbus.xml gnome-shell-extension-pidgin.pot "$extensions_dir"
+
+    schemas_dir="$share_dir/gsettings-schemas/${name}/glib-2.0/schemas"
+    mkdir -p "$schemas_dir"
+    mv schemas/* "$schemas_dir" # fix Emacs syntax highlighting: */
+    glib-compile-schemas "$schemas_dir"
+
+    locale_dir="$share_dir/locale"
+    mkdir -p "$locale_dir"
+    mv locale/* $locale_dir # fix Emacs syntax highlighting: */
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/muffinmad/pidgin-im-gnome-shell-extension;
+    description = "Make Pidgin IM conversations appear in the Gnome Shell message tray";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix
new file mode 100644
index 000000000000..c77d5d89fe33
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, fetchpatch, autoconf-archive, appstream-glib, intltool, pkgconfig, libtool, wrapGAppsHook,
+  dbus-glib, libcanberra, gst_all_1, vala, gnome3, gtk3, libxml2, autoreconfHook,
+  glib, gobject-introspection, libpeas
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.13.4";
+  name = "gnome-shell-pomodoro-${version}";
+
+  src = fetchFromGitHub {
+    owner = "codito";
+    repo = "gnome-pomodoro";
+    rev = "${version}";
+    sha256 = "0fiql99nhj168wbfhvzrhfcm4c4569gikd2zaf10vzszdqjahrl1";
+  };
+
+  patches = [
+    # build with Vala ≥ 0.42
+    (fetchpatch {
+      url = https://github.com/codito/gnome-pomodoro/commit/36778823ca5bd94b2aa948e5d8718f84d99d9af0.patch;
+      sha256 = "0a9x0p5wny3an9xawam9nhpffw5m4kgwj5jvv0g6c2lwlfzrx2rh";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook vala autoconf-archive libtool intltool appstream-glib
+    wrapGAppsHook pkgconfig libxml2
+  ];
+
+  buildInputs = [
+    glib gobject-introspection libpeas
+    dbus-glib libcanberra gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+    gnome3.gsettings-desktop-schemas
+    gnome3.gnome-shell gtk3 gnome3.adwaita-icon-theme
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = http://gnomepomodoro.org/;
+    description = "A time management utility for GNOME based on the pomodoro technique";
+    longDescription = ''
+      This GNOME utility helps to manage time according to Pomodoro Technique.
+      It intends to improve productivity and focus by taking short breaks.
+    '';
+    maintainers = with maintainers; [ jgeerds ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}