about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/gnome-3/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/desktops/gnome-3/extensions')
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix33
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch12
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix44
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix27
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix83
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch31
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch56
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix48
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch23
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch99
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix27
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix34
34 files changed, 1217 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix
new file mode 100644
index 000000000000..cf9ca9999d74
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-appindicator";
+  version = "33";
+
+  src = fetchFromGitHub {
+    owner = "Ubuntu";
+    repo = "gnome-shell-extension-appindicator";
+    rev = "v${version}";
+    sha256 = "B039bgg5b63oaHp1Z36k9Dh5FLr8fmfxI25ZgIA+p2I=";
+  };
+
+  # This package has a Makefile, but it's used for building a zip for
+  # publication to extensions.gnome.org. Disable the build phase so
+  # installing doesn't build an unnecessary release.
+  dontBuild = true;
+
+  uuid = "appindicatorsupport@rgcjonas.gmail.com";
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp *.js $out/share/gnome-shell/extensions/${uuid}
+    cp -r interfaces-xml $out/share/gnome-shell/extensions/${uuid}
+    cp metadata.json $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "AppIndicator/KStatusNotifierItem support for GNOME Shell";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jonafato ];
+    platforms = gnome3.gnome-shell.meta.platforms;
+    homepage = "https://github.com/Ubuntu/gnome-shell-extension-appindicator";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix
new file mode 100644
index 000000000000..db1741e72bb5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitLab, glib, gettext, substituteAll, gnome-menus }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-arc-menu";
+  version = "43";
+
+  src = fetchFromGitLab {
+    owner = "LinxGem33";
+    repo = "Arc-Menu";
+    rev = "v${version}-Stable";
+    sha256 = "1rspl89bxqy0wla8cj0h1d29gp38xg1vmvhc1qg7bl46ank4yp5q";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix_gmenu.patch;
+      gmenu_path = "${gnome-menus}/lib/girepository-1.0";
+    })
+  ];
+
+  buildInputs = [
+    glib gettext
+  ];
+
+  makeFlags = [ "INSTALLBASE=${placeholder "out"}/share/gnome-shell/extensions" ];
+
+  meta = with stdenv.lib; {
+    description = "Gnome shell extension designed to replace the standard menu found in Gnome 3";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dkabot ];
+    homepage = "https://gitlab.com/LinxGem33/Arc-Menu";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch
new file mode 100644
index 000000000000..7f6b8489ea8b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch
@@ -0,0 +1,12 @@
+--- a/extension.js
++++ b/extension.js
+@@ -29,6 +29,8 @@
+  * https://github.com/The-Panacea-Projects/Gnomenu
+  */
+ 
++
++imports.gi.GIRepository.Repository.prepend_search_path('@gmenu_path@');
+ 
+ // Import Libraries
+ const Main = imports.ui.main;
+
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix
new file mode 100644
index 000000000000..44b3f04f79d6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-battery-status";
+  version = "6";
+
+  src = fetchFromGitHub {
+    owner = "milliburn";
+    repo = "gnome-shell-extension-battery_status";
+    rev = "v${version}";
+    sha256 = "1w83h863mzffjnmk322xq90qf3y9dzay1w9yw5r0qnbsq1ljl8p4";
+  };
+
+  uuid = "battery_status@milliburn.github.com";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Configurable lightweight battery charge indicator and autohider";
+    license = licenses.gpl2;
+    broken = true; # not compatable with latest GNOME
+    maintainers = with maintainers; [ jonafato ];
+    homepage = "https://github.com/milliburn/gnome-shell-extension-battery_status";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix
new file mode 100644
index 000000000000..608d44a2892f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, glib, gettext, bash, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-caffeine-unstable";
+  version = "2020-03-13";
+
+  src = fetchFromGitHub {
+    owner = "eonpatapon";
+    repo = "gnome-shell-extension-caffeine";
+    rev = "f25fa5cd586271f080c2304d0ad1273b55e864f5";
+    sha256 = "12a76g1ydw677pjnj00r3vw31k4xybc63ynqzx3s4g0wi6lipng7";
+  };
+
+  uuid = "caffeine@patapon.info";
+
+  nativeBuildInputs = [
+    glib gettext
+  ];
+
+  buildPhase = ''
+    ${bash}/bin/bash ./update-locale.sh
+    glib-compile-schemas --strict --targetdir=caffeine@patapon.info/schemas/ caffeine@patapon.info/schemas
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fill the cup to inhibit auto suspend and screensaver";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ eperuffo ];
+    homepage = "https://github.com/eonpatapon/gnome-shell-extension-caffeine";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix
new file mode 100644
index 000000000000..1e3815705cd3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix
@@ -0,0 +1,44 @@
+{stdenv, fetchurl, cmake, ninja, jq, python3, gnome3, wrapGAppsHook}:
+
+let
+  version = "10.1";
+
+  inherit (python3.pkgs) python pygobject3 requests;
+in stdenv.mkDerivation rec {
+  pname = "chrome-gnome-shell";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/chrome-gnome-shell/${version}/${pname}-${version}.tar.xz";
+    sha256 = "0f54xyamm383ypbh0ndkza0pif6ljddg2f947p265fkqj3p4zban";
+  };
+
+  nativeBuildInputs = [ cmake ninja jq wrapGAppsHook ];
+  buildInputs = [ gnome3.gnome-shell python pygobject3 requests ];
+
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt --replace "/etc" "$out/etc"
+  '';
+  # cmake setup hook changes /etc/opt into /var/empty
+  dontFixCmake = true;
+
+  cmakeFlags = [ "-DBUILD_EXTENSION=OFF" ];
+  wrapPrefixVariables = [ "PYTHONPATH" ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "chrome-gnome-shell";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "GNOME Shell integration for Chrome";
+    homepage = "https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome";
+    longDescription = ''
+      To use the integration, install the <link xlink:href="https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome/Installation">browser extension</link>, and then set <option>services.gnome3.chrome-gnome-shell.enable</option> to <literal>true</literal>.
+    '';
+    license = licenses.gpl3;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix
new file mode 100644
index 000000000000..1cc06be6ec99
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-clipboard-indicator";
+  version = "30";
+
+  src = fetchFromGitHub {
+    owner = "Tudmotu";
+    repo = "gnome-shell-extension-clipboard-indicator";
+    rev = "v${version}";
+    sha256 = "1fmgmxv2y678bj0kmymkgnnglcpqk8ww053izlq46xg7s27jjdf6";
+  };
+
+  uuid = "clipboard-indicator@tudmotu.com";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp -r * $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Adds a clipboard indicator to the top panel and saves clipboard history";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonafato ];
+    platforms = platforms.linux;
+    homepage = "https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix
new file mode 100644
index 000000000000..d508222188b8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-dash-to-dock-unstable";
+  version = "2020-03-19";
+
+  src = fetchFromGitHub {
+    owner = "micheleg";
+    repo = "dash-to-dock";
+    # rev = "extensions.gnome.org-v" + version;
+    rev = "8c94a8d6db47ebc1273e690f4e0ba5e592f7f268";
+    sha256 = "7nNfxAINqOIJCgYXYaPck2EJ1IOmzt6AkfDFknZ8GaI=";
+  };
+
+  nativeBuildInputs = [
+    glib gettext
+  ];
+
+  makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+  meta = with stdenv.lib; {
+    description = "A dock for the Gnome Shell";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ eperuffo ];
+    homepage = "https://micheleg.github.io/dash-to-dock/";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix
new file mode 100644
index 000000000000..84662505a374
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-dash-to-panel";
+  version = "31";
+
+  src = fetchFromGitHub {
+    owner = "home-sweet-gnome";
+    repo = "dash-to-panel";
+    rev = "v${version}";
+    sha256 = "A8Ft+tLNv8KlTnVUzrWGavBWpP0u2rhkuG5LZls1A24=";
+  };
+
+  buildInputs = [
+    glib gettext
+  ];
+
+  makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+  meta = with stdenv.lib; {
+    description = "An icon taskbar for Gnome Shell";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ mounium ];
+    homepage = "https://github.com/jderose9/dash-to-panel";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix
new file mode 100644
index 000000000000..5e6f7b89e1d9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchgit, gettext, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-draw-on-your-screen";
+  version = "6";
+
+  src = fetchgit {
+    url = "https://framagit.org/abakkk/DrawOnYourScreen/";
+    rev = "v${version}";
+    sha256 = "05i20ii8lv6mg56rz8lng80dx35l6g45j8wr7jgbp591hg0spj1w";
+  };
+
+  uuid = "drawOnYourScreen@abakkk.framagit.org";
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp -r . $out/share/gnome-shell/extensions/${uuid}
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A drawing extension for GNOME Shell";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ericdallo ];
+    platforms = gnome3.gnome-shell.meta.platforms;
+    homepage = "https://framagit.org/abakkk/DrawOnYourScreen";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix
new file mode 100644
index 000000000000..fb7132015944
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, substituteAll, gjs, vte, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-drop-down-terminal";
+  version = "unstable-2020-03-25";
+
+  src = fetchFromGitHub {
+    owner = "zzrough";
+    repo = "gs-extensions-drop-down-terminal";
+    rev = "a59669afdb395b3315619f62c1f740f8b2f0690d";
+    sha256 = "0igfxgrjdqq6z6xg4rsawxn261pk25g5dw2pm3bhwz5sqsy4bq3i";
+  };
+
+  uuid = "drop-down-terminal@gs-extensions.zzrough.org";
+
+  patches = [
+    (substituteAll {
+      src = ./fix_vte_and_gjs.patch;
+      inherit gjs vte;
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Configurable drop down terminal shell";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ericdallo ];
+    homepage = "https://github.com/zzrough/gs-extensions-drop-down-terminal";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch
new file mode 100644
index 000000000000..3544c91ee895
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch
@@ -0,0 +1,32 @@
+--- a/drop-down-terminal@gs-extensions.zzrough.org/extension.js
++++ b/drop-down-terminal@gs-extensions.zzrough.org/extension.js
+@@ -15,6 +15,8 @@
+ 
+ // Author: Stéphane Démurget <stephane.demurget@free.fr>
+ 
++imports.gi.GIRepository.Repository.prepend_search_path('@vte@/lib/girepository-1.0')
++
+ const Lang = imports.lang;
+ const Gettext = imports.gettext.domain("drop-down-terminal");
+ const Mainloop = imports.mainloop;
+@@ -653,7 +655,7 @@ const DropDownTerminalExtension = new Lang.Class({
+         this._killingChild = false;
+ 
+         // finds the forking arguments
+-        let args = ["gjs", GLib.build_filenamev([Me.path, "terminal.js"]), Me.path];
++        let args = ["@gjs@/bin/gjs", GLib.build_filenamev([Me.path, "terminal.js"]), Me.path];
+ 
+         // forks the process
+         debug("forking '" + args.join(" ") + "'");
+--- a/drop-down-terminal@gs-extensions.zzrough.org/terminal.js
++++ b/drop-down-terminal@gs-extensions.zzrough.org/terminal.js
+@@ -14,6 +14,9 @@
+ // along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ // Author: Stéphane Démurget <stephane.demurget@free.fr>
++
++imports.gi.GIRepository.Repository.prepend_search_path('@vte@/lib/girepository-1.0')
++
+ const Lang = imports.lang;
+ 
+ const Pango = imports.gi.Pango;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
new file mode 100644
index 000000000000..baaca39a4c4f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchFromGitHub, substituteAll, python3, openssl, gsound
+, meson, ninja, libxml2, pkgconfig, gobject-introspection, wrapGAppsHook
+, glib, gtk3, at-spi2-core, upower, openssh, gnome3, gjs }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-gsconnect";
+  version = "35";
+
+  src = fetchFromGitHub {
+    owner = "andyholmes";
+    repo = "gnome-shell-extension-gsconnect";
+    rev = "v${version}";
+    sha256 = "GqM2S9FIOHw+8AK2K7fpEBq34JqgKRCsW8I9Ve6c6IM=";
+  };
+
+  patches = [
+    # Make typelibs available in the extension
+    (substituteAll {
+      src = ./fix-paths.patch;
+      gapplication = "${glib.bin}/bin/gapplication";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson ninja pkgconfig
+    gobject-introspection # for locating typelibs
+    wrapGAppsHook # for wrapping daemons
+    libxml2 # xmllint
+  ];
+
+  buildInputs = [
+    glib # libgobject
+    gtk3
+    at-spi2-core # atspi
+    gnome3.nautilus # TODO: this contaminates the package with nautilus and gnome-autoar typelibs but it is only needed for the extension
+    gnome3.nautilus-python
+    gsound
+    upower
+    gnome3.caribou
+    gjs # for running daemon
+    gnome3.evolution-data-server # for libebook-contacts typelib
+  ];
+
+  mesonFlags = [
+    "-Dgnome_shell_libdir=${gnome3.gnome-shell}/lib"
+    "-Dgsettings_schemadir=${glib.makeSchemaPath (placeholder "out") "${pname}-${version}"}"
+    "-Dchrome_nmhdir=${placeholder "out"}/etc/opt/chrome/native-messaging-hosts"
+    "-Dchromium_nmhdir=${placeholder "out"}/etc/chromium/native-messaging-hosts"
+    "-Dopenssl_path=${openssl}/bin/openssl"
+    "-Dsshadd_path=${openssh}/bin/ssh-add"
+    "-Dsshkeygen_path=${openssh}/bin/ssh-keygen"
+    "-Dsession_bus_services_dir=${placeholder "out"}/share/dbus-1/services"
+    "-Dpost_install=true"
+  ];
+
+  postPatch = ''
+    patchShebangs meson/nmh.sh
+    patchShebangs meson/post-install.sh
+
+    # TODO: do not include every typelib everywhere
+    # for example, we definitely do not need nautilus
+    for file in src/extension.js src/prefs.js; do
+      substituteInPlace "$file" \
+        --subst-var-by typelibPath "$GI_TYPELIB_PATH"
+    done
+  '';
+
+  postFixup = ''
+    # Let’s wrap the daemons
+    for file in $out/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/{daemon,nativeMessagingHost}.js; do
+      echo "Wrapping program $file"
+      wrapGApp "$file"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "KDE Connect implementation for Gnome Shell";
+    homepage = "https://github.com/andyholmes/gnome-shell-extension-gsconnect/wiki";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ etu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch
new file mode 100644
index 000000000000..629d34b6f68a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch
@@ -0,0 +1,31 @@
+--- a/data/org.gnome.Shell.Extensions.GSConnect.desktop
++++ b/data/org.gnome.Shell.Extensions.GSConnect.desktop
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Type=Application
+ Name=GSConnect
+-Exec=gapplication launch org.gnome.Shell.Extensions.GSConnect %U
++Exec=@gapplication@ launch org.gnome.Shell.Extensions.GSConnect %U
+ Terminal=false
+ NoDisplay=true
+ Icon=org.gnome.Shell.Extensions.GSConnect
+--- a/src/extension.js
++++ b/src/extension.js
+@@ -1,5 +1,7 @@
+ 'use strict';
+ 
++'@typelibPath@'.split(':').forEach(path => imports.gi.GIRepository.Repository.prepend_search_path(path));
++
+ const Gio = imports.gi.Gio;
+ const GLib = imports.gi.GLib;
+ const Gtk = imports.gi.Gtk;
+--- a/src/prefs.js
++++ b/src/prefs.js
+@@ -1,5 +1,7 @@
+ 'use strict';
+ 
++'@typelibPath@'.split(':').forEach(path => imports.gi.GIRepository.Repository.prepend_search_path(path));
++
+ const Gio = imports.gi.Gio;
+ const GLib = imports.gi.GLib;
+ const Gtk = imports.gi.Gtk;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix
new file mode 100644
index 000000000000..efaef03f3b11
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-icon-hider";
+  version = "23";
+
+  src = fetchFromGitHub {
+    owner = "ikalnytskyi";
+    repo = "gnome-shell-extension-icon-hider";
+    rev = "v${version}";
+    sha256 = "18c8zkdrmdbghqqz7b450vhgpykgz25mgigwn2nggcb2lxmvm9ks";
+  };
+
+  uuid = "icon-hider@kalnitsky.org";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Icon Hider is a GNOME Shell extension for managing status area items";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jonafato ];
+    platforms = gnome3.gnome-shell.meta.platforms;
+    homepage = "https://github.com/ikalnytskyi/gnome-shell-extension-icon-hider";
+    broken = versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesn't support 3.34
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix
new file mode 100644
index 000000000000..230498f5d7bc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-impatience";
+  version = "unstable-2019-09-23";
+
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "gnome-shell-impatience";
+    rev = "43e4e0a1e0eeb334a2da5224ce3ab4fdddf4f1b2";
+    sha256 = "0kvdhlz41fjyqdgcfw6mrr9nali6wg2qwji3dvykzfi0aypljzpx";
+  };
+
+  buildInputs = [
+    glib
+  ];
+
+  buildPhase = ''
+    make schemas
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r impatience $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  uuid = "impatience@gfxmonk.net";
+
+  meta = with stdenv.lib; {
+    description = "Speed up builtin gnome-shell animations";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ timbertson tiramiseb ];
+    homepage = "http://gfxmonk.net/dist/0install/gnome-shell-impatience.xml";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix
new file mode 100644
index 000000000000..c16f7bc42090
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, fetchFromGitHub
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-mpris-indicator-button-unstable";
+  version = "2020-03-21";
+
+  src = fetchFromGitHub {
+    owner = "JasonLG1979";
+    repo = "gnome-shell-extension-mpris-indicator-button";
+    rev = "de54160e7d905b8c48c0fe30a437f7c51efc1aa3";
+    sha256 = "k/NLmDrlaOsMkwLye7YGQhaQvOMNfhCsDVh2F0qnuFg=";
+  };
+
+  uuid = "mprisindicatorbutton@JasonLG1979.github.io";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple MPRIS indicator button for GNOME Shell";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ worldofpeace ];
+    platforms = gnome3.gnome-shell.meta.platforms;
+    homepage = "https://github.com/JasonLG1979/gnome-shell-extension-mpris-indicator-button";
+    broken = versionOlder gnome3.gnome-shell.version "3.34";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix
new file mode 100644
index 000000000000..be6c1916ab42
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitLab }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-night-theme-switcher";
+  version = "19";
+
+  src = fetchFromGitLab {
+    owner = "rmnvgr";
+    repo = "nightthemeswitcher-gnome-shell-extension";
+    rev = "v${version}";
+    sha256 = "1ll0yf1skf51wa10mlrajd1dy459w33kx0i3vhfcx2pdk7mw5a3c";
+  };
+
+  # makefile tries to do install in home directory using
+  # `gnome-extensions install`
+  dontBuild = true;
+
+  uuid = "nightthemeswitcher@romainvigier.fr";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/
+    cp -r src/ $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Automatically change the GTK theme to dark variant when Night Light activates";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jonafato ];
+    homepage = "https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix
new file mode 100644
index 000000000000..c876b22c12c1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, substituteAll, glib, gettext, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-no-title-bar";
+  version = "9";
+
+  src = fetchFromGitHub {
+    owner = "franglais125";
+    repo = "no-title-bar";
+    rev = "v${version}";
+    sha256 = "02zm61fg40r005fn2rvgrbsz2hbcsmp2hkhyilqbmpilw35y0nbq";
+  };
+
+  nativeBuildInputs = [
+    glib gettext
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      xprop = "${xorg.xprop}/bin/xprop";
+      xwininfo = "${xorg.xwininfo}/bin/xwininfo";
+    })
+  ];
+
+  makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+  meta = with stdenv.lib; {
+    description = "Integrates maximized windows with the top panel";
+    homepage = "https://github.com/franglais125/no-title-bar";
+    license = licenses.gpl2;
+    broken = true; # https://github.com/franglais125/no-title-bar/issues/114
+    maintainers = with maintainers; [ jonafato svsdep ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch
new file mode 100644
index 000000000000..9a53d63860da
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch
@@ -0,0 +1,56 @@
+--- a/decoration.js
++++ b/decoration.js
+@@ -181,7 +181,7 @@
+         let act = win.get_compositor_private();
+         let xwindow = act && act['x-window'];
+         if (xwindow) {
+-            let xwininfo = GLib.spawn_command_line_sync('xwininfo -children -id 0x%x'.format(xwindow));
++            let xwininfo = GLib.spawn_command_line_sync('@xwininfo@ -children -id 0x%x'.format(xwindow));
+             if (xwininfo[0]) {
+                 let str = xwininfo[1].toString();
+ 
+@@ -207,7 +207,7 @@
+         // Try enumerating all available windows and match the title. Note that this
+         // may be necessary if the title contains special characters and `x-window`
+         // is not available.
+-        let result = GLib.spawn_command_line_sync('xprop -root _NET_CLIENT_LIST');
++        let result = GLib.spawn_command_line_sync('@xprop@ -root _NET_CLIENT_LIST');
+         if (result[0]) {
+             let str = result[1].toString();
+ 
+@@ -218,7 +218,7 @@
+ 
+             // For each window ID, check if the title matches the desired title.
+             for (var i = 0; i < windowList.length; ++i) {
+-                let cmd = 'xprop -id "' + windowList[i] + '" _NET_WM_NAME _NO_TITLE_BAR_ORIGINAL_STATE';
++                let cmd = '@xprop@ -id "' + windowList[i] + '" _NET_WM_NAME _NO_TITLE_BAR_ORIGINAL_STATE';
+                 let result = GLib.spawn_command_line_sync(cmd);
+ 
+                 if (result[0]) {
+@@ -258,7 +258,7 @@
+         }
+ 
+         let id = this._guessWindowXID(win);
+-        let cmd = 'xprop -id ' + id;
++        let cmd = '@xprop@ -id ' + id;
+ 
+         let xprops = GLib.spawn_command_line_sync(cmd);
+         if (!xprops[0]) {
+@@ -277,7 +277,7 @@
+         m = str.match(/^_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED(\(CARDINAL\))? = ([0-9]+)$/m);
+         if (m) {
+             let state = !!parseInt(m[2]);
+-            cmd = ['xprop', '-id', id,
++            cmd = ['@xprop@', '-id', id,
+                   '-f', '_NO_TITLE_BAR_ORIGINAL_STATE', '32c',
+                   '-set', '_NO_TITLE_BAR_ORIGINAL_STATE',
+                   (state ? '0x1' : '0x0')];
+@@ -358,7 +358,7 @@
+         let winXID = this._guessWindowXID(win);
+         if (winXID == null)
+             return;
+-        let cmd = ['xprop', '-id', winXID,
++        let cmd = ['@xprop@', '-id', winXID,
+                    '-f', '_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED', '32c',
+                    '-set', '_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED',
+                    (hide ? '0x1' : '0x0')];
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix
new file mode 100644
index 000000000000..7a79b691a4df
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-paperwm";
+  version = "36.0";
+
+  src = fetchFromGitHub {
+    owner = "paperwm";
+    repo = "PaperWM";
+    rev = version;
+    sha256 = "1ssnabwxrns36c61ppspjkr9i3qifv08pf2jpwl7cjv3pvyn4kly";
+  };
+
+  uuid = "paperwm@hedning:matrix.org";
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp -r . $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tiled scrollable window management for Gnome Shell";
+    homepage = "https://github.com/paperwm/PaperWM";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ hedning zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix
new file mode 100644
index 000000000000..dbc65044c1bc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, glib, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-pidgin-im-integration";
+  version = "32";
+
+  src = fetchFromGitHub {
+    owner = "muffinmad";
+    repo = "pidgin-im-gnome-shell-extension";
+    rev = "v${version}";
+    sha256 = "1jyg8r0s1v83sgg6y0jbsj2v37mglh8rvd8vi27fxnjq9xmg8kpc";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    share_dir="$prefix/share"
+    extensions_dir="$share_dir/gnome-shell/extensions/pidgin@muffinmad"
+    mkdir -p "$extensions_dir"
+    mv *.js metadata.json dbus.xml schemas locale "$extensions_dir"
+  '';
+
+  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; [ ];
+    broken = versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesn't support 3.34
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix
new file mode 100644
index 000000000000..acb0e3624298
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-remove-dropdown-arrows";
+  version = "13";
+
+  src = fetchFromGitHub {
+    owner = "mpdeimos";
+    repo = "gnome-shell-remove-dropdown-arrows";
+    rev = "version/${version}";
+    sha256 = "09b2hnfbqym20pb1sfc8xiz7gs2kbs6b1s7xl8swc8dydhsbambk";
+  };
+
+  # This package has a Makefile, but it's used for publishing and linting, not
+  # for building. Disable the build phase so installing doesn't attempt to
+  # publish the extension.
+  dontBuild = true;
+
+  uuid = "remove-dropdown-arrows@mpdeimos.com";
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp extension.js $out/share/gnome-shell/extensions/${uuid}
+    cp metadata.json $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Remove dropdown arrows from GNOME Shell Menus";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jonafato ];
+    homepage = "https://github.com/mpdeimos/gnome-shell-remove-dropdown-arrows";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix
new file mode 100644
index 000000000000..6fa1840bbb17
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, substituteAll
+, fetchFromGitHub
+, libpulseaudio
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-sound-output-device-chooser";
+  version = "28";
+
+  src = fetchFromGitHub {
+    owner = "kgshank";
+    repo = "gse-sound-output-device-chooser";
+    rev = version;
+    sha256 = "JmDUi6xTMbkMzW+hYJuKtjQj4ERctaiHr6eLsl5Fru4=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      libpulse = "${libpulseaudio}/lib/libpulse.so";
+      python = python3.interpreter;
+    })
+  ];
+
+  dontBuild = true;
+
+  uuid = "sound-output-device-chooser@kgshank.net";
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GNOME Shell extension adding audio device chooser to panel";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jtojnar ];
+    homepage = "https://github.com/kgshank/gse-sound-output-device-chooser";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch
new file mode 100644
index 000000000000..a0a6551fcf81
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch
@@ -0,0 +1,22 @@
+--- a/sound-output-device-chooser@kgshank.net/convenience.js
++++ b/sound-output-device-chooser@kgshank.net/convenience.js
+@@ -111,7 +111,7 @@ function refreshCards() {
+         log("New logic");
+         let pyLocation =  Me.dir.get_child('utils/pa_helper.py').get_path();
+         try {
+-            let [result, out, err, exit_code] = GLib.spawn_command_line_sync('python ' + pyLocation);
++            let [result, out, err, exit_code] = GLib.spawn_command_line_sync('@python@ ' + pyLocation);
+             // log("result" + result +" out"+out + " exit_code" + exit_code + "
+             // err" +err);
+             if(result && !exit_code) {
+--- a/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
++++ b/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
+@@ -86,7 +86,7 @@ else:
+ 
+ _libraries = {}
+ 
+-libpulse_library_name = find_library('pulse')
++libpulse_library_name = '@libpulse@'
+ if libpulse_library_name is None:
+     raise Exception('No libpulse.so library found!')
+ 
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix
new file mode 100644
index 000000000000..489a4c5587fa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, substituteAll, fetchFromGitHub, glib, glib-networking, libgtop, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-system-monitor";
+  version = "38";
+
+  src = fetchFromGitHub {
+    owner = "paradoxxxzero";
+    repo = "gnome-shell-system-monitor-applet";
+    rev = "v${version}";
+    sha256 = "1sdj2kxb418mgq44a6lf6jic33wlfbnn3ja61igmx0jj1530iknv";
+  };
+
+  buildInputs = [
+    glib
+    glib-networking
+    libgtop
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./paths_and_nonexisting_dirs.patch;
+      gtop_path = "${libgtop}/lib/girepository-1.0";
+      glib_net_path = "${glib-networking}/lib/girepository-1.0";
+    })
+  ];
+
+  buildPhase = ''
+    glib-compile-schemas --targetdir=${uuid}/schemas ${uuid}/schemas
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  uuid = "system-monitor@paradoxxx.zero.gmail.com";
+
+  meta = with stdenv.lib; {
+    description = "Display system informations in gnome shell status bar";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ tiramiseb ];
+    homepage = "https://github.com/paradoxxxzero/gnome-shell-system-monitor-applet";
+    # 3.36 support not yet ready
+    # https://github.com/paradoxxxzero/gnome-shell-system-monitor-applet/pull/564
+    broken = stdenv.lib.versionAtLeast gnome3.gnome-shell.version "3.34";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch
new file mode 100644
index 000000000000..82e3d7c541ba
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch
@@ -0,0 +1,23 @@
+diff --git a/system-monitor@paradoxxx.zero.gmail.com/extension.js b/system-monitor@paradoxxx.zero.gmail.com/extension.js
+index b4b7f15..d139135 100644
+--- a/system-monitor@paradoxxx.zero.gmail.com/extension.js
++++ b/system-monitor@paradoxxx.zero.gmail.com/extension.js
+@@ -18,6 +18,9 @@
+ 
+ // Author: Florian Mounier aka paradoxxxzero
+ 
++imports.gi.GIRepository.Repository.prepend_search_path('@gtop_path@');
++imports.gi.GIRepository.Repository.prepend_search_path('@glib_net_path@');
++
+ /* Ugly. This is here so that we don't crash old libnm-glib based shells unnecessarily
+  * by loading the new libnm.so. Should go away eventually */
+ const libnm_glib = imports.gi.GIRepository.Repository.get_default().is_registered("NMClient", "1.0");
+@@ -386,7 +389,7 @@ const smMountsMonitor = new Lang.Class({
+     connected: false,
+     _init: function () {
+         this._volumeMonitor = Gio.VolumeMonitor.get();
+-        let sys_mounts = ['/home', '/tmp', '/boot', '/usr', '/usr/local'];
++        let sys_mounts = ['/home', '/tmp', '/boot'];
+         this.base_mounts = ['/'];
+         sys_mounts.forEach(Lang.bind(this, function (sMount) {
+             if (this.is_sys_mount(sMount + '/')) {
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix
new file mode 100644
index 000000000000..b4b690c3007c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, substituteAll, fetchFromGitHub, taskwarrior, gettext, runtimeShell, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-taskwhisperer";
+  version = "12";
+
+  src = fetchFromGitHub {
+    owner = "cinatic";
+    repo = "taskwhisperer";
+    rev = "v${version}";
+    sha256 = "187p6p498dd258avsfqqsm322g58y75pc2wbhb4jpmm9insqm1bj";
+  };
+
+  nativeBuildInputs = [
+    gettext
+  ];
+
+  buildInputs = [
+    taskwarrior
+  ];
+
+  uuid = "taskwhisperer-extension@infinicode.de";
+
+  makeFlags = [
+    "INSTALLBASE=${placeholder "out"}/share/gnome-shell/extensions"
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      task = "${taskwarrior}/bin/task";
+      shell = runtimeShell;
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "GNOME Shell TaskWarrior GUI";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jonafato ];
+    homepage = "https://github.com/cinatic/taskwhisperer";
+    broken = versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesnt't support 3.34
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch
new file mode 100644
index 000000000000..2ea54f4b0897
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch
@@ -0,0 +1,99 @@
+diff --git a/taskwhisperer-extension@infinicode.de/extra/create.sh b/taskwhisperer-extension@infinicode.de/extra/create.sh
+index a69e369..35d5ea1 100755
+--- a/taskwhisperer-extension@infinicode.de/extra/create.sh
++++ b/taskwhisperer-extension@infinicode.de/extra/create.sh
+@@ -1 +1 @@
+-bash -c "task add $1"
++bash -c "@task@ add $1"
+diff --git a/taskwhisperer-extension@infinicode.de/extra/modify.sh b/taskwhisperer-extension@infinicode.de/extra/modify.sh
+index 7964a26..8edd21b 100755
+--- a/taskwhisperer-extension@infinicode.de/extra/modify.sh
++++ b/taskwhisperer-extension@infinicode.de/extra/modify.sh
+@@ -1 +1 @@
+-bash -c "task $1 modify $2"
++bash -c "@task@ $1 modify $2"
+diff --git a/taskwhisperer-extension@infinicode.de/taskService.js b/taskwhisperer-extension@infinicode.de/taskService.js
+index ead7a12..aa36db4 100644
+--- a/taskwhisperer-extension@infinicode.de/taskService.js
++++ b/taskwhisperer-extension@infinicode.de/taskService.js
+@@ -182,7 +182,7 @@ const TaskService = class TaskService {
+ 
+         let project = projectName ? "project:" + projectName : "";
+ 
+-        let command = ['task', 'rc.json.array=on', status, project, 'export'];
++        let command = ['@task@', 'rc.json.array=on', status, project, 'export'];
+         let reader = new SpawnReader.SpawnReader();
+ 
+         let buffer = "";
+@@ -220,7 +220,7 @@ const TaskService = class TaskService {
+                 break;
+         }
+ 
+-        let shellProc = Gio.Subprocess.new(['task', status, 'projects'], Gio.SubprocessFlags.STDOUT_PIPE);
++        let shellProc = Gio.Subprocess.new(['@task@', status, 'projects'], Gio.SubprocessFlags.STDOUT_PIPE);
+ 
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+@@ -261,7 +261,7 @@ const TaskService = class TaskService {
+             return;
+         }
+ 
+-        let shellProc = Gio.Subprocess.new(['task', taskID.toString(), 'done'], Gio.SubprocessFlags.STDOUT_PIPE);
++        let shellProc = Gio.Subprocess.new(['@task@', taskID.toString(), 'done'], Gio.SubprocessFlags.STDOUT_PIPE);
+ 
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+@@ -290,7 +290,7 @@ const TaskService = class TaskService {
+             return;
+         }
+ 
+-        let shellProc = Gio.Subprocess.new(['task', 'modify', taskID.toString(), 'status:pending'], Gio.SubprocessFlags.STDOUT_PIPE);
++        let shellProc = Gio.Subprocess.new(['@task@', 'modify', taskID.toString(), 'status:pending'], Gio.SubprocessFlags.STDOUT_PIPE);
+ 
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+@@ -318,7 +318,7 @@ const TaskService = class TaskService {
+         if (!taskID) {
+             return;
+         }
+-        let shellProc = Gio.Subprocess.new(['task', taskID.toString(), 'start'], Gio.SubprocessFlags.STDOUT_PIPE);
++        let shellProc = Gio.Subprocess.new(['@task@', taskID.toString(), 'start'], Gio.SubprocessFlags.STDOUT_PIPE);
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+             shellProc.wait_finish(result);
+@@ -344,7 +344,7 @@ const TaskService = class TaskService {
+         if (!taskID) {
+             return;
+         }
+-        let shellProc = Gio.Subprocess.new(['task', taskID.toString(), 'stop'], Gio.SubprocessFlags.STDOUT_PIPE);
++        let shellProc = Gio.Subprocess.new(['@task@', taskID.toString(), 'stop'], Gio.SubprocessFlags.STDOUT_PIPE);
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+             shellProc.wait_finish(result);
+@@ -374,7 +374,7 @@ const TaskService = class TaskService {
+         // FIXME: Gio.Subprocess: due to only passing string vector is allowed, it's not possible to directly pass the
+         //        input of the user to subprocess (why & how, if you can answer then please send msg to fh@infinicode.de)
+         //        bypassing problem with own shell script
+-        let shellProc = Gio.Subprocess.new(['/bin/sh', EXTENSIONDIR + '/extra/modify.sh', taskID.toString(), params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
++        let shellProc = Gio.Subprocess.new(['@shell@', EXTENSIONDIR + '/extra/modify.sh', taskID.toString(), params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
+ 
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+@@ -403,7 +403,7 @@ const TaskService = class TaskService {
+         // FIXME: Gio.Subprocess: due to only passing string vector is allowed, it's not possible to directly pass the
+         //        input of the user to subprocess (why & how, if you can answer then please send msg to fh@infinicode.de)
+         //        bypassing problem with own shell script
+-        let shellProc = Gio.Subprocess.new(['/bin/sh', EXTENSIONDIR + '/extra/create.sh', params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
++        let shellProc = Gio.Subprocess.new(['@shell@', EXTENSIONDIR + '/extra/create.sh', params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
+ 
+         shellProc.wait_async(null, function (obj, result) {
+             let shellProcExited = true;
+@@ -432,7 +432,7 @@ const TaskService = class TaskService {
+         let shellProc;
+ 
+         try {
+-            shellProc = Gio.Subprocess.new(['task', 'sync'], Gio.SubprocessFlags.STDOUT_PIPE);
++            shellProc = Gio.Subprocess.new(['@task@', 'sync'], Gio.SubprocessFlags.STDOUT_PIPE);
+         } catch (err) {
+             onError(err);
+             return;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix
new file mode 100644
index 000000000000..60ca1dcbef37
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitHub, glib, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-tilingnome-unstable";
+  version = "unstable-2019-09-19";
+
+  src = fetchFromGitHub {
+    owner = "rliang";
+    repo = "gnome-shell-extension-tilingnome";
+    rev = "f401c20c9721d85e6b3e30d1e822a200db370407";
+    sha256 = "1hq9g9bxqpzqrdj9zm0irld8r6q4w1m4b00jya7wsny8rzb1s0y2";
+  };
+
+  nativeBuildInputs = [ glib ];
+
+  buildPhase = ''
+    glib-compile-schemas .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp -r * $out/share/gnome-shell/extensions/${uuid}/
+  '';
+
+  uuid = "tilingnome@rliang.github.com";
+
+  meta = with stdenv.lib; {
+    description = "Tiling window management for GNOME Shell";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ benley ];
+    homepage = "https://github.com/rliang/gnome-shell-extension-tilingnome";
+    platforms = gnome3.gnome-shell.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix
new file mode 100644
index 000000000000..6ac9a4a0331e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-timepp";
+  version = "unstable-2019-03-30";
+
+  src = fetchFromGitHub {
+    owner = "zagortenay333";
+    repo = "timepp__gnome";
+    rev = "f90fb5573b37ac89fb57bf62e07d6d3bdb6a2c63";
+    sha256 = "0p6rsbm6lf61vzly775qkwc2rcjjl38bkqdxnv4sccqmw2wwclnp";
+  };
+
+  uuid = "timepp@zagortenay333";
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions/${uuid}
+    cp -r . $out/share/gnome-shell/extensions/${uuid}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A todo.txt manager, time tracker, timer, stopwatch, pomodoro, and alarms gnome-shell extension.";
+    homepage = "https://github.com/zagortenay333/timepp__gnome";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ svsdep ];
+    broken = versionAtLeast gnome3.gnome-shell.version "3.32"; # Dosen't support 3.34 https://github.com/zagortenay333/timepp__gnome/issues/113
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix
new file mode 100644
index 000000000000..6a1c87abf93d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, glib, gnome3, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-topicons-plus";
+  version = "22";
+
+  src = fetchFromGitHub {
+    owner = "phocean";
+    repo = "TopIcons-plus";
+    rev = "v${version}";
+    sha256 = "196s1gdir52gbc444pzrb5l7gn5xr5vqk5ajqaiqryqlmp3i8vil";
+  };
+
+  buildInputs = [ glib ];
+
+  nativeBuildInputs = [ gettext ];
+
+  makeFlags = [ "INSTALL_PATH=$(out)/share/gnome-shell/extensions" ];
+
+  meta = with stdenv.lib; {
+    description = "Brings all icons back to the top panel, so that it's easier to keep track of apps running in the backround";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ eperuffo ];
+    homepage = "https://github.com/phocean/TopIcons-plus";
+    # Unmaintained and no longer working with GNOME Shell 3.34+
+    broken = stdenv.lib.versionAtLeast gnome3.gnome-shell.version "3.32";
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix
new file mode 100644
index 000000000000..44402fc6e135
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-window-corner-preview";
+  version = "unstable-2019-04-03";
+
+  src = fetchFromGitHub {
+    owner = "medenagan";
+    repo = "window-corner-preview";
+    rev = "a95bb1389d94474efab7509aac592fb58fff6006";
+    sha256 = "03v18j9l0fb64xrg3swf1vcgl0kpgwjlp8ddn068bpvghrsvgfah";
+  };
+
+  dontBuild = true;
+
+  uuid = "window-corner-preview@fabiomereu.it";
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GNOME Shell extension showing a video preview on the corner of the screen";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jtojnar ];
+    homepage = "https://github.com/medenagan/window-corner-preview";
+    broken = stdenv.lib.versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesn't support 3.34
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix
new file mode 100644
index 000000000000..adcaf3126f38
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, findutils, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-workspace-matrix";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mzur";
+    repo = "gnome-shell-wsmatrix";
+    rev = "v${version}";
+    sha256 = "LTDkKSKvReJxBzAERE+vV+uJBNZw6UyhiB7kN48BZCo=";
+  };
+
+  uuid = "wsmatrix@martin.zurowietz.de";
+
+  nativeBuildInputs = [
+    findutils
+    glib
+  ];
+
+  buildFlags = "schemas";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Arrange workspaces in a two dimensional grid with workspace thumbnails";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ chkno ];
+    homepage =  "https://github.com/mzur/gnome-shell-wsmatrix";
+  };
+}