summary refs log tree commit diff
path: root/pkgs/desktops/pantheon/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/desktops/pantheon/desktop')
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch25
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix60
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist6
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem2
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-greeter/01-sysconfdir-install.patch25
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix103
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-greeter/gsd.patch13
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-greeter/numlockx.patch13
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix44
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix39
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop8
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix107
-rw-r--r--pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix50
-rw-r--r--pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix39
-rw-r--r--pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch34
-rw-r--r--pkgs/desktops/pantheon/desktop/gala/default.nix66
-rw-r--r--pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch22
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch24
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix72
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/xdg.patch13
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix56
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/calendar-exec.patch13
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix71
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix57
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch26
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix50
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix49
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix48
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix57
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix49
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix59
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel/default.nix61
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch21
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix23
41 files changed, 1419 insertions, 0 deletions
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch b/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch
new file mode 100644
index 00000000000..438ed79d1bb
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch
@@ -0,0 +1,25 @@
+diff --git a/debian/elementary-default-settings.gsettings-override b/debian/elementary-default-settings.gsettings-override
+index 6452c30..899972d 100644
+--- a/debian/elementary-default-settings.gsettings-override
++++ b/debian/elementary-default-settings.gsettings-override
+@@ -1,5 +1,5 @@
+ [net.launchpad.plank.dock.settings]
+-dock-items=['gala-multitaskingview.dockitem','org.gnome.Epiphany.dockitem','org.pantheon.mail.dockitem','io.elementary.calendar.dockitem','io.elementary.music.dockitem','io.elementary.videos.dockitem','io.elementary.photos.dockitem','io.elementary.switchboard.dockitem','io.elementary.appcenter.dockitem']
++dock-items=['gala-multitaskingview.dockitem','org.gnome.Epiphany.dockitem','org.gnome.Geary.dockitem','io.elementary.calendar.dockitem','io.elementary.music.dockitem','io.elementary.videos.dockitem','io.elementary.photos.dockitem','io.elementary.switchboard.dockitem']
+ hide-delay=250
+ hide-mode='window-dodge'
+ show-dock-item=false
+@@ -8,13 +8,6 @@ theme='Gtk+'
+ [org.freedesktop.ibus.general.hotkey]
+ triggers=['<Control>space']
+ 
+-[org.gnome.desktop.background]
+-draw-background=true
+-picture-options='zoom'
+-picture-uri='file:///usr/share/backgrounds/elementaryos-default'
+-primary-color='#000000'
+-show-desktop-icons=false
+-
+ [org.gnome.desktop.datetime]
+ automatic-timezone=true
+ 
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix b/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix
new file mode 100644
index 00000000000..f133324a81e
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchFromGitHub, fetchpatch, pantheon }:
+
+stdenv.mkDerivation rec {
+  pname = "default-settings";
+  version = "5.0";
+
+  name = "elementary-${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "0gyv835qbr90001gda2pzngzzbbk5jf9grgfl25pqkm29s45rqq0";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      attrPath = "elementary-${pname}";
+    };
+  };
+
+  patches = [
+    # See: https://github.com/elementary/default-settings/pull/86 (didn't make 5.0 release)
+    (fetchpatch {
+      url = "https://github.com/elementary/default-settings/commit/05d0b2a4e98c28203521d599b40745b46be549fa.patch";
+      sha256 = "1wk1qva3yzc28gljnkx9hb3pwhqnfrsb08wd76lsl3xnylg0wn2l";
+    })
+    # See: https://github.com/elementary/default-settings/pull/94 (didn't make 5.0 release)
+    (fetchpatch {
+      url = "https://github.com/elementary/default-settings/commit/a2ca00130c16e805179fb5abd7b624a873dff2da.patch";
+      sha256 = "1jp1c5d8jfm0404zsylfk7h9vj81s409wgbzbsd2kxmz65icq16x";
+    })
+    ./correct-override.patch
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/etc/gtk-3.0
+    cp -av settings.ini $out/etc/gtk-3.0
+
+    mkdir -p $out/share/glib-2.0/schemas
+    cp -av debian/elementary-default-settings.gsettings-override $out/share/glib-2.0/schemas/20-io.elementary.desktop.gschema.override
+
+    mkdir $out/etc/wingpanel.d
+    cp -avr ${./io.elementary.greeter.whitelist} $out/etc/wingpanel.d/io.elementary.greeter.whitelist
+
+    mkdir -p $out/share/elementary/config/plank/dock1
+    cp -avr ${./launchers} $out/share/elementary/config/plank/dock1/launchers
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Default settings and configuration files for elementary";
+    homepage = https://github.com/elementary/default-settings;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist b/pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist
new file mode 100644
index 00000000000..0cff31f4f77
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist
@@ -0,0 +1,6 @@
+liba11y.so
+libbluetooth.so
+libkeyboard.so
+libnetwork.so
+libpower.so
+libsession.so
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem
new file mode 100644
index 00000000000..b25bb8c8590
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/gala-multitaskingview.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem
new file mode 100644
index 00000000000..3bd7d531840
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/io.elementary.calendar.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem
new file mode 100644
index 00000000000..494edde183c
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/io.elementary.music.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem
new file mode 100644
index 00000000000..89536754964
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/io.elementary.photos.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem
new file mode 100644
index 00000000000..312c35d9bf0
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/io.elementary.switchboard.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem
new file mode 100644
index 00000000000..3b0f721a564
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/io.elementary.videos.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem
new file mode 100644
index 00000000000..b0218bac52d
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/org.gnome.Epiphany.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem
new file mode 100644
index 00000000000..8b04efe417e
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem
@@ -0,0 +1,2 @@
+[PlankDockItemPreferences]
+Launcher=file:///run/current-system/sw/share/applications/org.gnome.Geary.desktop
diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/01-sysconfdir-install.patch b/pkgs/desktops/pantheon/desktop/elementary-greeter/01-sysconfdir-install.patch
new file mode 100644
index 00000000000..626e56ce596
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/01-sysconfdir-install.patch
@@ -0,0 +1,25 @@
+From 2384bee55a46eac44eb9d329be4c2a097e053ae1 Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@users.noreply.github.com>
+Date: Tue, 17 Jul 2018 07:04:18 -0400
+Subject: [PATCH 1/1] 'sysconfdir' will be etc not /etc for install
+
+---
+ data/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/meson.build b/data/meson.build
+index 7621b03..7c08eaf 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -20,7 +20,7 @@ i18n.merge_file (
+ 
+ install_data(
+     meson.project_name() + '.conf',
+-    install_dir: join_paths(get_option('sysconfdir'), 'lightdm')
++    install_dir: join_paths(get_option('prefix'), 'etc', 'lightdm')
+ )
+ 
+ install_data(
+-- 
+2.17.1
+
diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix b/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
new file mode 100644
index 00000000000..303aae6882b
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
@@ -0,0 +1,103 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, substituteAll, makeWrapper, meson
+, ninja, vala, desktop-file-utils, gtk3, granite, libgee, elementary-settings-daemon
+, gnome-desktop, mutter, gobject-introspection, elementary-icon-theme, wingpanel-with-indicators
+, elementary-gtk-theme, nixos-artwork, elementary-default-settings, lightdm, numlockx
+, clutter-gtk, libGL, dbus, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "greeter";
+  version = "3.3.1";
+
+  name = "elementary-${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1vkq4z0hrmvzv4sh2qkxjajdxcycd1zj97a3pc8n4yb858pqfyzc";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      attrPath = "elementary-${pname}";
+    };
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    clutter-gtk
+    elementary-icon-theme
+    elementary-gtk-theme
+    elementary-settings-daemon
+    gnome-desktop
+    granite
+    gtk3
+    libgee
+    libGL
+    lightdm
+    mutter
+    wingpanel-with-indicators
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./gsd.patch;
+      elementary-settings-daemon = "${elementary-settings-daemon}/libexec";
+    })
+    (substituteAll {
+      src = ./numlockx.patch;
+      inherit numlockx;
+    })
+    ./01-sysconfdir-install.patch
+  ];
+
+  mesonFlags = [
+    # A hook does this but after wrapGAppsHook so the files never get wrapped.
+    "--sbindir=${placeholder "out"}/bin"
+    # baked into the program for discovery of the greeter configuration
+    "--sysconfdir=/etc"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      # GTK+ reads default settings (such as icons and themes) from elementary's settings.ini here
+      --prefix XDG_CONFIG_DIRS : "${elementary-default-settings}/etc"
+
+      # dbus-launch needed in path
+      --prefix PATH : "${dbus}/bin"
+
+      # for `wingpanel -g`
+      --prefix PATH : "${wingpanel-with-indicators}/bin"
+
+      # TODO: they should be using meson for this
+      # See: https://github.com/elementary/greeter/blob/19c0730fded4e9ddec5a491f0e78f83c7c04eb59/src/PantheonGreeter.vala#L451
+      --prefix PATH : "$out/bin"
+    )
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/xgreeters/io.elementary.greeter.desktop \
+      --replace  "Exec=io.elementary.greeter" "Exec=$out/bin/io.elementary.greeter"
+
+    substituteInPlace $out/etc/lightdm/io.elementary.greeter.conf \
+      --replace "#default-wallpaper=/usr/share/backgrounds/elementaryos-default" "default-wallpaper=${nixos-artwork.wallpapers.simple-dark-gray}/share/artwork/gnome/nix-wallpaper-simple-dark-gray.png"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "LightDM Greeter for Pantheon";
+    homepage = https://github.com/elementary/greeter;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/gsd.patch b/pkgs/desktops/pantheon/desktop/elementary-greeter/gsd.patch
new file mode 100644
index 00000000000..1770d54aee0
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/gsd.patch
@@ -0,0 +1,13 @@
+diff --git a/src/meson.build b/src/meson.build
+index 2450c1a..a908d11 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -1,7 +1,7 @@
+ conf_data = configuration_data()
+ conf_data.set('CONF_DIR', join_paths(get_option('sysconfdir'), 'lightdm'))
+ conf_data.set('GETTEXT_PACKAGE', meson.project_name())
+-conf_data.set('GSD_DIR', '/usr/lib/gnome-settings-daemon/')
++conf_data.set('GSD_DIR', '@elementary-settings-daemon@')
+ conf_data.set('VERSION', meson.project_version())
+ config_header = configure_file (
+     input: 'config.vala.in',
diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/numlockx.patch b/pkgs/desktops/pantheon/desktop/elementary-greeter/numlockx.patch
new file mode 100644
index 00000000000..2c7766b4284
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/numlockx.patch
@@ -0,0 +1,13 @@
+diff --git a/src/PantheonGreeter.vala b/src/PantheonGreeter.vala
+index 11aa4c0..ae7bf7e 100644
+--- a/src/PantheonGreeter.vala
++++ b/src/PantheonGreeter.vala
+@@ -163,7 +163,7 @@ public class PantheonGreeter : Gtk.Window {
+             warning (e.message);
+         }
+         if (activate_numlock) {
+-            Granite.Services.System.execute_command ("/usr/bin/numlockx on");
++            Granite.Services.System.execute_command ("@numlockx@/bin/numlockx on");
+         }
+ 
+         var screensaver_timeout = 60;
diff --git a/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix b/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix
new file mode 100644
index 00000000000..bd5688f941b
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, runCommand, gnome3, elementary-default-settings, nixos-artwork, glib, gala, epiphany, elementary-settings-daemon, gtk3, plank
+, extraGSettingsOverrides ? ""
+, extraGSettingsOverridePackages ? []
+}:
+
+let
+
+  gsettingsOverridePackages = [
+    gala
+    epiphany
+    elementary-settings-daemon
+    gnome3.mutter
+    gtk3
+    plank
+  ] ++ extraGSettingsOverridePackages;
+
+in
+
+with stdenv.lib;
+
+# TODO: Having https://github.com/NixOS/nixpkgs/issues/54150 would supersede this
+runCommand "elementary-gsettings-desktop-schemas" {}
+  ''
+     mkdir -p $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
+     cp -rf ${gnome3.gsettings-desktop-schemas}/share/gsettings-schemas/gsettings-desktop-schemas*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
+
+     ${concatMapStrings (pkg: "cp -rf ${pkg}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas\n") gsettingsOverridePackages}
+
+     chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
+     cp ${elementary-default-settings}/share/glib-2.0/schemas/20-io.elementary.desktop.gschema.override \
+     $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
+
+     cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
+     [org.gnome.desktop.background]
+     draw-background=true
+     picture-options='zoom'
+     picture-uri='${nixos-artwork.wallpapers.simple-dark-gray}/share/artwork/gnome/nix-wallpaper-simple-dark-gray.png'
+     primary-color='#000000'
+
+     ${extraGSettingsOverrides}
+     EOF
+
+     ${glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
+  ''
diff --git a/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix b/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix
new file mode 100644
index 00000000000..d8634b48570
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, vala, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "print";
+  version = "0.1.3";
+
+  name = "elementary-print-shim-${version}";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1w3cfap7j42x14mqpfqdm46hk5xc0v5kv8r6wxcnknr3sfxi8qlp";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      attrPath = "elementary-${pname}-shim";
+    };
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    vala
+  ];
+
+  buildInputs = [ gtk3 ];
+
+  meta = with stdenv.lib; {
+    description = "Simple shim for printing support via Contractor";
+    homepage = https://github.com/elementary/print;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop b/pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop
new file mode 100644
index 00000000000..517a9457ae1
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Name=Instantiate Default elementary dockitems
+Exec=@script@
+StartupNotify=false
+NoDisplay=true
+OnlyShowIn=Pantheon;
+X-GNOME-Autostart-Phase=EarlyInitialization
diff --git a/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix b/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix
new file mode 100644
index 00000000000..fddd4143616
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix
@@ -0,0 +1,107 @@
+{ stdenv, fetchFromGitHub, substituteAll, writeScript, pantheon, gnome-keyring, gnome-session, wingpanel, orca, at-spi2-core, elementary-default-settings, writeTextFile, writeShellScriptBin, elementary-settings-daemon }:
+
+let
+
+  #
+  # ─── ENSURES PLANK GETS ELEMENTARY'S DEFAULT DOCKITEMS ────────────────────────────
+  #
+
+  #
+  # Upstream relies on /etc/skel to initiate a new users home directory with planks dockitems.
+  #
+  # That is not possible within nixos, but we can achieve this easily with a simple script that copies
+  # them. We then use a xdg autostart and initalize it during the "EarlyInitialization" phase of a gnome session
+  # which is most appropriate for installing files into $HOME.
+  #
+
+  dockitems-script = writeScript "dockitems-script" ''
+    #!${stdenv.shell}
+
+    elementary_default_settings="${elementary-default-settings}"
+    dock_items="$elementary_default_settings/share/elementary/config/plank/dock1/launchers"/*
+
+    if [ ! -d "$HOME/.config/plank/dock1" ]; then
+        echo "Instantiating default Plank Dockitems..."
+
+        mkdir -p $HOME/.config/plank/dock1/launchers
+        cp -r --no-preserve=mode,ownership $dock_items $HOME/.config/plank/dock1/launchers/
+    else
+        echo "Plank Dockitems already instantiated"
+    fi
+  '';
+
+  dockitemAutostart = substituteAll {
+    src = ./default-elementary-dockitems.desktop;
+    script = "${dockitems-script}";
+  };
+
+  executable = writeShellScriptBin "pantheon" ''
+    export XDG_CONFIG_DIRS=${elementary-settings-daemon}/etc/xdg:$XDG_CONFIG_DIRS
+    export XDG_DATA_DIRS=${placeholder "out"}/share:$XDG_DATA_DIRS
+    exec ${gnome-session}/bin/gnome-session --session=pantheon "$@"
+  '';
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "session-settings";
+  version = "5.0.3";
+
+  name = "elementary-${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1vrjm7bklkfv0dyafm312v4hxzy6lb7p1ny4ijkn48kr719gc71k";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      attrPath = "elementary-${pname}";
+    };
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp -avr applications $out/share/
+
+    mkdir -p $out/etc/xdg/autostart
+    cp -av ${gnome-keyring}/etc/xdg/autostart/* $out/etc/xdg/autostart
+    cp -av ${orca}/etc/xdg/autostart/* $out/etc/xdg/autostart
+    cp -av ${at-spi2-core}/etc/xdg/autostart/* $out/etc/xdg/autostart
+
+    cp "${dockitemAutostart}" $out/etc/xdg/autostart/default-elementary-dockitems.desktop
+
+    mkdir -p $out/share/gnome-session/sessions
+    cp -av gnome-session/pantheon.session $out/share/gnome-session/sessions
+
+    mkdir -p $out/share/xsessions
+    cp -av xsessions/pantheon.desktop $out/share/xsessions
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/xsessions/pantheon.desktop \
+      --replace "gnome-session --session=pantheon" "${executable}/bin/pantheon" \
+      --replace "wingpanel" "${wingpanel}/bin/wingpanel"
+
+    for f in $out/etc/xdg/autostart/*; do mv "$f" "''${f%.desktop}-pantheon.desktop"; done
+
+    for autostart in $(grep -rl "OnlyShowIn=GNOME;" $out/etc/xdg/autostart)
+    do
+      echo "Patching OnlyShowIn to Pantheon in: $autostart"
+      sed -i "s,OnlyShowIn=GNOME;,OnlyShowIn=Pantheon;," $autostart
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Session settings for elementary";
+    homepage = https://github.com/elementary/session-settings;
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix b/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
new file mode 100644
index 00000000000..6ceebf1980c
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala, libxml2, desktop-file-utils
+, gtk3, glib, granite, libgee, elementary-icon-theme, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "shortcut-overlay";
+  version = "1.0.1";
+
+  name = "elementary-${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1ph4rx2l5fn0zh4fjfjlgbgskmzc0lvzqgcv7v4kr5m4rij1p4y4";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      attrPath = "elementary-${pname}";
+    };
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    glib
+    granite
+    gtk3
+    libgee
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A native OS-wide shortcut overlay to be launched by Gala";
+    homepage = https://github.com/elementary/shortcut-overlay;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix b/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix
new file mode 100644
index 00000000000..4e19a65b58d
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, substituteAll, fetchFromGitHub, file-roller, gnome-bluetooth }:
+
+stdenv.mkDerivation rec {
+  pname = "extra-elementary-contracts";
+  version = "2018-08-21";
+
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "worldofpeace";
+    repo = pname;
+    rev = "a05dfb00695854163805b666185e3e9f31b6eb83";
+    sha256 = "0fkaf2w4xg0n9faj74rgzy7gvd3yz112l058b157a3pr39vpci7g";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./exec-path.patch;
+      file_roller = "${file-roller}";
+      gnome_bluetooth = "${gnome-bluetooth}";
+    })
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/contractor
+
+    cp *.contract $out/share/contractor/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Extra contractor files for elementary";
+    homepage = https://github.com/worldofpeace/extra-elementary-contracts;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ worldofpeace ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch b/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch
new file mode 100644
index 00000000000..3b97e306119
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch
@@ -0,0 +1,34 @@
+diff --git a/file-roller-compress.contract b/file-roller-compress.contract
+index 8de5396..de7e939 100644
+--- a/file-roller-compress.contract
++++ b/file-roller-compress.contract
+@@ -3,6 +3,6 @@ Name=Compress
+ Icon=add-files-to-archive
+ Description=Create a compressed archive with the selected objects
+ MimeType=!archive;inode/blockdevice;inode/chardevice;inode/fifo;inode/socket;
+-Exec=file-roller --add %U
++Exec=@file_roller@/bin/file-roller --add %U
+ Gettext-Domain=file-roller
+ 
+diff --git a/file-roller-extract-here.contract b/file-roller-extract-here.contract
+index 184a6f2..345f4e7 100644
+--- a/file-roller-extract-here.contract
++++ b/file-roller-extract-here.contract
+@@ -3,5 +3,5 @@ Name=Extract Here
+ Icon=extract-archive
+ Description=Extract the contents of the archives in the archive folder and quit the program
+ MimeType=application/x-7z-compressed;application/x-7z-compressed-tar;application/x-ace;application/x-alz;application/x-ar;application/x-arj;application/x-bzip;application/x-bzip-compressed-tar;application/x-bzip1;application/x-bzip1-compressed-tar;application/x-cabinet;application/x-cbr;application/x-cbz;application/x-cd-image;application/x-compress;application/x-compressed-tar;application/x-cpio;application/x-deb;application/x-ear;application/x-ms-dos-executable;application/x-gtar;application/x-gzip;application/x-gzpostscript;application/x-java-archive;application/x-lha;application/x-lhz;application/x-lrzip;application/x-lrzip-compressed-tar;application/x-lzip;application/x-lzip-compressed-tar;application/x-lzma;application/x-lzma-compressed-tar;application/x-lzop;application/x-lzop-compressed-tar;application/x-ms-wim;application/x-rar;application/x-rar-compressed;application/x-rpm;application/x-rzip;application/x-tar;application/x-tarz;application/x-stuffit;application/x-war;application/x-xz;application/x-xz-compressed-tar;application/x-zip;application/x-zip-compressed;application/x-zoo;application/zip;
+-Exec=file-roller --extract-here %U
++Exec=@file_roller@/bin/file-roller --extract-here %U
+ Gettext-Domain=file-roller
+diff --git a/gnome-bluetooth.contract b/gnome-bluetooth.contract
+index 745dbbe..8cc0102 100644
+--- a/gnome-bluetooth.contract
++++ b/gnome-bluetooth.contract
+@@ -3,5 +3,5 @@ Name=Send files via Bluetooth
+ Icon=bluetooth
+ Description=Send files to device...
+ MimeType=!inode;
+-Exec=bluetooth-sendto %F
++Exec=@gnome_bluetooth@/bin/bluetooth-sendto %F
+ Gettext-Domain=gnome-bluetooth2
diff --git a/pkgs/desktops/pantheon/desktop/gala/default.nix b/pkgs/desktops/pantheon/desktop/gala/default.nix
new file mode 100644
index 00000000000..97acc2c791b
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/gala/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, python3, ninja, vala
+, desktop-file-utils, gettext, libxml2, gtk3, granite, libgee, bamf, libcanberra
+, libcanberra-gtk3, gnome-desktop, mutter, clutter, plank, gobject-introspection
+, elementary-icon-theme, elementary-settings-daemon, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gala";
+  version = "unstable-2018-12-16";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = "7f1e392e03000df0bd47e7832bb3adab81f39ae5";
+    sha256 = "1syqq0xfyg5nbnnmy0wp5d66k1bvq9qn27lvr37abxxqig9acpc8";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      versionPolicy = "master";
+    };
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    bamf
+    clutter
+    elementary-icon-theme
+    gnome-desktop
+    elementary-settings-daemon
+    granite
+    gtk3
+    libcanberra
+    libcanberra-gtk3
+    libgee
+    mutter
+    plank
+  ];
+
+  patches = [ ./plugins-dir.patch ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/post_install.py
+    patchShebangs build-aux/meson/post_install.py
+  '';
+
+  meta =  with stdenv.lib; {
+    description = "A window & compositing manager based on mutter and designed by elementary for use with Pantheon";
+    homepage = https://github.com/elementary/gala;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch b/pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch
new file mode 100644
index 00000000000..e83308ea552
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch
@@ -0,0 +1,22 @@
+diff --git a/meson.build b/meson.build
+index 6b20a60..205699b 100644
+--- a/meson.build
++++ b/meson.build
+@@ -38,7 +38,7 @@ conf.set_quoted('PACKAGE_VERSION', gala_version)
+ conf.set_quoted('DATADIR', data_dir)
+ conf.set_quoted('PKGDATADIR', pkgdata_dir)
+ conf.set_quoted('PKGLIBDIR', pkglib_dir)
+-conf.set_quoted('PLUGINSDIR', plugins_dir)
++conf.set_quoted('PLUGINSDIR',  '/run/current-system/sw/lib/gala/plugins')
+ conf.set_quoted('RELEASE_NAME', 'Window Manager.')
+ conf.set_quoted('VERSION', gala_version)
+ conf.set_quoted('VERSION_INFO', (is_release ? 'Release' : 'Development'))
+@@ -83,7 +83,7 @@ add_project_arguments([
+ 		'-DDATADIR="@0@"'.format(data_dir),
+ 		'-DPKGDATADIR="@0@"'.format(pkgdata_dir),
+ 		'-DPKGLIBDIR="@0@"'.format(pkglib_dir),
+-		'-DPLUGINDIR="@0@"'.format(plugins_dir),
++		'-DPLUGINDIR="@0@"'.format('/run/current-system/sw/lib/gala/plugins'),
+ 		'-DSCHEMA="org.pantheon.desktop.gala"',
+ 		'-DRESOURCEPATH="/org/pantheon/desktop/gala"',
+
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch
new file mode 100644
index 00000000000..264a4a5b26d
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch
@@ -0,0 +1,24 @@
+diff --git a/lib/synapse-plugins/calculator-plugin.vala b/lib/synapse-plugins/calculator-plugin.vala
+index 1b5fa06..076c0c7 100644
+--- a/lib/synapse-plugins/calculator-plugin.vala
++++ b/lib/synapse-plugins/calculator-plugin.vala
+@@ -51,9 +51,7 @@ namespace Synapse {
+                                                                     _("Calculator"),
+                                                                     _("Calculate basic expressions."),
+                                                                     "accessories-calculator",
+-                                                                    register_plugin,
+-                                                                    Environment.find_program_in_path ("bc") != null,
+-                                                                    _("bc is not installed"));
++                                                                    register_plugin);
+         }
+ 
+         static construct {
+@@ -90,7 +88,7 @@ namespace Synapse {
+             if (matched) {
+                 Pid pid;
+                 int read_fd, write_fd;
+-                string[] argv = {"bc", "-l"};
++                string[] argv = {"@exec@", "-l"};
+                 string? solution = null;
+ 
+                 try {
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix
new file mode 100644
index 00000000000..e4f7df107ba
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchFromGitHub, pantheon, substituteAll, cmake, ninja
+, pkgconfig, vala, granite, libgee, gettext, gtk3, appstream, gnome-menus
+, json-glib, plank, bamf, switchboard, libunity, libsoup, wingpanel, libwnck3
+, zeitgeist, gobject-introspection, elementary-icon-theme, bc, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "applications-menu";
+  version = "2.4.2";
+
+  name = "wingpanel-${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "0y7kh50ixvm4m56v18c70s05hhpfp683c4qi3sxy50p2368d772x";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+      attrPath = "wingpanel-${pname}";
+    };
+  };
+
+  nativeBuildInputs = [
+    appstream
+    cmake
+    ninja
+    gettext
+    gobject-introspection
+    pkgconfig
+    vala
+    wrapGAppsHook
+   ];
+
+  buildInputs = [
+    bamf
+    elementary-icon-theme
+    gnome-menus
+    granite
+    gtk3
+    json-glib
+    libgee
+    libsoup
+    libunity
+    libwnck3
+    plank
+    switchboard
+    wingpanel
+    zeitgeist
+   ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+  PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+  patches = [
+    (substituteAll {
+      src = ./bc.patch;
+      exec = "${bc}/bin/bc";
+    })
+    ./xdg.patch
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Lightweight and stylish app launcher for Pantheon";
+    homepage = https://github.com/elementary/applications-menu;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/xdg.patch b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/xdg.patch
new file mode 100644
index 00000000000..f17e2581e07
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/xdg.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 928976a..7f0ea58 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -90,7 +90,7 @@ link_directories (${DEPS_LIBRARY_DIRS})
+ 
+ # Installation
+ install (TARGETS ${APPNAME} RUNTIME DESTINATION bin)
+-install (FILES ${applications_menu} DESTINATION /etc/xdg/menus)
++install (FILES ${applications_menu} DESTINATION etc/xdg/menus)
+ file (GLOB resources "${CMAKE_CURRENT_SOURCE_DIR}/data/*")
+ 
+ # Settings schema
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix
new file mode 100644
index 00000000000..16f3ae2e28e
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, python3
+, ninja, vala, gtk3, granite, libnotify, wingpanel, libgee, libxml2
+, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-bluetooth";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1gx0xglp6b3znxl4d2vpzhfkxz5z8q04hh7z2mrihj1in155bn44";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    libnotify
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bluetooth Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-bluetooth;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/calendar-exec.patch b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/calendar-exec.patch
new file mode 100644
index 00000000000..2370fbcd3cb
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/calendar-exec.patch
@@ -0,0 +1,13 @@
+diff --git a/src/Widgets/calendar/Calendar.vala b/src/Widgets/calendar/Calendar.vala
+index 76443ca..d86bd44 100644
+--- a/src/Widgets/calendar/Calendar.vala
++++ b/src/Widgets/calendar/Calendar.vala
+@@ -19,7 +19,7 @@
+
+ namespace DateTime.Widgets {
+     public class Calendar : Gtk.Box {
+-        private const string CALENDAR_EXEC = "/usr/bin/io.elementary.calendar";
++        private const string CALENDAR_EXEC = "@elementary-calendar@";
+
+         ControlHeader heading;
+         CalendarView cal;
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
new file mode 100644
index 00000000000..ee5cd511818
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, fetchFromGitHub, fetchpatch, pantheon, pkgconfig, meson, python3
+, ninja, substituteAll, vala, gtk3, granite, wingpanel, evolution-data-server
+, libical, libgee, libxml2, libsoup, gobject-introspection
+, elementary-calendar, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-datetime";
+  version = "2.1.3";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1y7a4xjwl3bpls56ys6g3s6mh5b3qbjm2vw7b6n2i4x7a63c4cbh";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    evolution-data-server
+    granite
+    gtk3
+    libgee
+    libical
+    libsoup
+    wingpanel
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./calendar-exec.patch;
+      elementary-calendar = "${elementary-calendar}/bin/io.elementary.calendar";
+    })
+    # Use "clock-format" GSettings key that's been moved to granite
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/wingpanel-indicator-datetime/raw/c8d515b76aa812c141212d5515621a6febd781a3/f/00-move-clock-format-settings-to-granite.patch";
+      sha256 = "1sq3aw9ckkm057rnrclnw9lyrxbpl37fyzfnbixi2q3ypr70n880";
+    })
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Date & Time Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-datetime;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix
new file mode 100644
index 00000000000..e2faccedbb7
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja
+, substituteAll, vala, gtk3, granite, libxml2, wingpanel, libgee
+, xorg, libgnomekbd, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-keyboard";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "0x0bdd9svw4sffx8pa0pqlh6mrj3fqp4mgrb4n7ys26k2w20ngnb";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    libxml2
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    wingpanel
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      libgnomekbd_path = "${libgnomekbd}/bin/";
+      config = "${xorg.xkeyboardconfig}/share/X11/xkb/rules/evdev.xml";
+    })
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  meta = with stdenv.lib; {
+    description = "Keyboard Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-keyboard;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch
new file mode 100644
index 00000000000..58e6853e606
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch
@@ -0,0 +1,26 @@
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index cd7ca49..0bef9c7 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -94,7 +94,7 @@ public class Keyboard.Indicator : Wingpanel.Indicator {
+     private void show_keyboard_map () {
+         close ();
+ 
+-        string command = "gkbd-keyboard-display \"--layout=" + layouts.get_current_with_variant () + "\"";
++        string command = "@libgnomekbd_path@gkbd-keyboard-display \"--layout=" + layouts.get_current_with_variant () + "\"";
+ 
+         try {
+             AppInfo.create_from_commandline (command, null, AppInfoCreateFlags.NONE).launch (null, null);
+diff --git a/src/LayoutsManager.vala b/src/LayoutsManager.vala
+index 1bac80e..67df847 100644
+--- a/src/LayoutsManager.vala
++++ b/src/LayoutsManager.vala
+@@ -97,7 +97,7 @@ public class Keyboard.Widgets.LayoutManager : Gtk.ScrolledWindow {
+ 
+     public string? get_name_for_xkb_layout (string language, string? variant) {
+         debug ("get_name_for_xkb_layout (%s, %s)", language, variant);
+-        Xml.Doc* doc = Xml.Parser.parse_file ("/usr/share/X11/xkb/rules/evdev.xml");
++        Xml.Doc* doc = Xml.Parser.parse_file ("@config@");
+         if (doc == null) {
+             critical ("'evdev.xml' not found or permissions incorrect\n");
+             return null;
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix
new file mode 100644
index 00000000000..245e12d4591
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala
+, gtk3, granite, networkmanager, networkmanagerapplet, wingpanel
+, libgee, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-network";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "0fch27imk5x4nfx49cwcylkxd7m289rl9niy1vx5kjplhbhyhdq2";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    networkmanager
+    networkmanagerapplet
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  meta = with stdenv.lib; {
+    description = "Network Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-network;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix
new file mode 100644
index 00000000000..53754c31d87
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala
+, gtk3, granite, wingpanel, libgee, libxml2, gobject-introspection
+, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-nightlight";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "17pa048asbkhzz5945hjp96dnghdl72nqp1zq0b999nawnfrb339";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  meta = with stdenv.lib; {
+    description = "Night Light Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-nightlight;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix
new file mode 100644
index 00000000000..aff7d9891ad
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala, gtk3, granite
+, wingpanel, libgee, libwnck3, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-notifications";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1960s3xcsx6yjlnk0csf1m66s1z1sj5rym9b2fy7pm2nan47z3ld";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    libwnck3
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  meta = with stdenv.lib; {
+    description = "Notifications Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-notifications;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix
new file mode 100644
index 00000000000..d7627c51100
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, python3
+, ninja, vala, gtk3, granite, bamf, libgtop, udev, wingpanel
+, libgee, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-power";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "02gp9m9zkmhcl43nz02kjkcim4zm25zab3il8dhwkihh731g1c6j";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    bamf
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    libgtop
+    udev
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Power Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-power;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix
new file mode 100644
index 00000000000..b910f6a7180
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson
+, ninja, vala, gtk3, granite, wingpanel, accountsservice
+, libgee, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-session";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "15ghhiabk74m7fm5pzr2qmdwpc330jczvvkwbf5pf7qczfyipjln";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    accountsservice
+    elementary-icon-theme
+    granite
+    gtk3
+    libgee
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  meta = with stdenv.lib; {
+    description = "Session Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-session;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix
new file mode 100644
index 00000000000..003e431bcf7
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson
+, python3, ninja, vala, gtk3, granite, wingpanel, libnotify
+, pulseaudio, libcanberra-gtk3, libgee, libxml2, wrapGAppsHook
+, gobject-introspection, elementary-icon-theme }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel-indicator-sound";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "0hxbr5dp8d1czq8ffw339r41c7srqb72vr48hxph8g091d3mcgcl";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    elementary-icon-theme
+    granite
+    gtk3
+    libcanberra-gtk3
+    libgee
+    libnotify
+    pulseaudio
+    wingpanel
+  ];
+
+  PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "lib/wingpanel";
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Sound Indicator for Wingpanel";
+    homepage = https://github.com/elementary/wingpanel-indicator-sound;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
new file mode 100644
index 00000000000..a5ca227bbc2
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchFromGitHub, pantheon, wrapGAppsHook, pkgconfig, meson, ninja
+, vala, gala, gtk3, libgee, granite, gettext, glib-networking, mutter, json-glib
+, python3, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+  pname = "wingpanel";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = pname;
+    rev = version;
+    sha256 = "1knkqh9q6yp7qf27zi6ki20fq4w0ia2hklvv84ivfmfa0irz0j6r";
+  };
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      repoName = pname;
+    };
+  };
+
+  nativeBuildInputs = [
+    gettext
+    glib-networking
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gala
+    granite
+    gtk3
+    json-glib
+    libgee
+    mutter
+  ];
+
+  patches = [ ./indicators.patch ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The extensible top panel for Pantheon";
+    longDescription = ''
+      Wingpanel is an empty container that accepts indicators as extensions,
+      including the applications menu.
+    '';
+    homepage = https://github.com/elementary/wingpanel;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = pantheon.maintainers;
+  };
+}
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch b/pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch
new file mode 100644
index 00000000000..68a5fd532a8
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch
@@ -0,0 +1,21 @@
+diff --git a/lib/IndicatorManager.vala b/lib/IndicatorManager.vala
+index a99a1ec..0ae7799 100644
+--- a/lib/IndicatorManager.vala
++++ b/lib/IndicatorManager.vala
+@@ -115,7 +115,15 @@ public class Wingpanel.IndicatorManager : GLib.Object {
+         }
+ 
+         /* load indicators */
+-        var base_folder = File.new_for_path (Build.INDICATORS_DIR);
++
++        var indicators_path = Environment.get_variable("WINGPANEL_INDICATORS_PATH");
++        if (indicators_path != null) {
++            debug ("WINGPANEL_INDICATORS_PATH set to %s", indicators_path);
++        } else {
++            critical ("WINGPANEL_INDICATORS_PATH not set");
++        }
++
++        var base_folder = File.new_for_path (indicators_path);
+ 
+         try {
+             monitor = base_folder.monitor_directory (FileMonitorFlags.NONE, null);
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix b/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix
new file mode 100644
index 00000000000..cfae604d3a5
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix
@@ -0,0 +1,23 @@
+{ lib, makeWrapper, symlinkJoin, wingpanel, wingpanelIndicators, switchboard-with-plugs, indicators ? null }:
+
+let
+  selectedIndicators = if indicators == null then wingpanelIndicators else indicators;
+in
+symlinkJoin {
+  name = "${wingpanel.name}-with-indicators";
+
+  paths = [ wingpanel ] ++ selectedIndicators;
+
+  buildInputs = [ makeWrapper ];
+
+  # We have to set SWITCHBOARD_PLUGS_PATH because wingpanel-applications-menu
+  # has a plugin to search switchboard settings
+  postBuild = ''
+    wrapProgram $out/bin/wingpanel \
+      --set WINGPANEL_INDICATORS_PATH "$out/lib/wingpanel" \
+      --set SWITCHBOARD_PLUGS_PATH "${switchboard-with-plugs}/lib/switchboard" \
+      --suffix XDG_DATA_DIRS : ${lib.concatMapStringsSep ":" (indicator: ''${indicator}/share/gsettings-schemas/${indicator.name}'') selectedIndicators}
+  '';
+
+  inherit (wingpanel) meta;
+}