aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/module-list.nix3
-rw-r--r--nixos/modules/services/desktops/pantheon/contractor.nix39
-rw-r--r--nixos/modules/services/desktops/pantheon/files.nix36
-rw-r--r--nixos/modules/services/desktops/tumbler.nix50
-rw-r--r--nixos/modules/services/x11/desktop-managers/default.nix2
-rw-r--r--nixos/modules/services/x11/desktop-managers/pantheon.nix195
-rw-r--r--nixos/modules/services/x11/display-managers/lightdm-greeters/pantheon.nix47
-rw-r--r--nixos/modules/services/x11/display-managers/lightdm.nix1
-rw-r--r--nixos/release-combined.nix1
-rw-r--r--nixos/tests/pantheon.nix55
-rw-r--r--pkgs/applications/audio/vocal/default.nix8
-rw-r--r--pkgs/applications/editors/quilter/default.nix12
-rw-r--r--pkgs/applications/misc/notejot/default.nix10
-rw-r--r--pkgs/applications/misc/regextester/default.nix18
-rw-r--r--pkgs/applications/misc/sequeler/default.nix8
-rw-r--r--pkgs/applications/misc/tootle/default.nix9
-rw-r--r--pkgs/applications/networking/ftp/taxi/default.nix6
-rw-r--r--pkgs/applications/networking/transporter/default.nix20
-rw-r--r--pkgs/applications/networking/weather/meteo/default.nix2
-rw-r--r--pkgs/applications/office/aesop/default.nix8
-rw-r--r--pkgs/applications/office/bookworm/default.nix12
-rw-r--r--pkgs/applications/office/spice-up/default.nix17
-rw-r--r--pkgs/applications/science/math/nasc/default.nix14
-rw-r--r--pkgs/data/icons/faba-icon-theme/default.nix4
-rw-r--r--pkgs/desktops/deepin/deepin-wm/default.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-calculator/default.nix58
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-calendar/default.nix66
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-camera/default.nix64
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-code/default.nix80
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-files/default.nix77
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch22
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-music/default.nix78
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-photos/default.nix80
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix67
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-screenshot-tool/redacted-script.nix28
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-terminal/default.nix66
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-videos/default.nix64
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix45
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix54
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch13
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch55
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix45
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix47
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch12
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix55
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch13
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix45
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix57
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch22
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix45
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix55
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch43
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix45
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix56
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch26
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix63
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch23
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix64
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch13
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch20
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix47
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix62
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch36
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix45
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix49
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard/default.nix56
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch25
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard/wrapper.nix19
-rw-r--r--pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix35
-rw-r--r--pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix55
-rw-r--r--pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix36
-rw-r--r--pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix38
-rw-r--r--pkgs/desktops/pantheon/default.nix222
-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
-rw-r--r--pkgs/desktops/pantheon/granite/02-datetime-clock-format-gsettings.patch (renamed from pkgs/development/libraries/granite/02-datetime-clock-format-gsettings.patch)0
-rw-r--r--pkgs/desktops/pantheon/granite/default.nix (renamed from pkgs/development/libraries/granite/default.nix)14
-rw-r--r--pkgs/desktops/pantheon/services/cerbere/default.nix48
-rw-r--r--pkgs/desktops/pantheon/services/contractor/default.nix45
-rw-r--r--pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix58
-rw-r--r--pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch13
-rw-r--r--pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix57
-rw-r--r--pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix117
-rw-r--r--pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch15
-rw-r--r--pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix49
-rw-r--r--pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix43
-rw-r--r--pkgs/desktops/pantheon/update.nix18
-rwxr-xr-xpkgs/desktops/pantheon/update.sh223
-rw-r--r--pkgs/tools/misc/hashit/default.nix10
-rw-r--r--pkgs/top-level/all-packages.nix3
129 files changed, 5013 insertions, 91 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 1a8bd9cccb18..544b16bdf74d 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -241,6 +241,8 @@
./services/desktops/bamf.nix
./services/desktops/dleyna-renderer.nix
./services/desktops/dleyna-server.nix
+ ./services/desktops/pantheon/contractor.nix
+ ./services/desktops/pantheon/files.nix
./services/desktops/flatpak.nix
./services/desktops/geoclue2.nix
./services/desktops/gsignond.nix
@@ -266,6 +268,7 @@
./services/desktops/gnome3/tracker-miners.nix
./services/desktops/profile-sync-daemon.nix
./services/desktops/telepathy.nix
+ ./services/desktops/tumbler.nix
./services/desktops/zeitgeist.nix
./services/development/bloop.nix
./services/development/hoogle.nix
diff --git a/nixos/modules/services/desktops/pantheon/contractor.nix b/nixos/modules/services/desktops/pantheon/contractor.nix
new file mode 100644
index 000000000000..bd538db72413
--- /dev/null
+++ b/nixos/modules/services/desktops/pantheon/contractor.nix
@@ -0,0 +1,39 @@
+# Contractor
+
+{ config, pkgs, lib, ... }:
+
+with lib;
+
+{
+
+ ###### interface
+
+ options = {
+
+ services.pantheon.contractor = {
+
+ enable = mkEnableOption "contractor, a desktop-wide extension service used by pantheon";
+
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkIf config.services.pantheon.contractor.enable {
+
+ environment.systemPackages = with pkgs.pantheon; [
+ contractor
+ extra-elementary-contracts
+ ];
+
+ services.dbus.packages = [ pkgs.pantheon.contractor ];
+
+ environment.pathsToLink = [
+ "/share/contractor"
+ ];
+
+ };
+
+}
diff --git a/nixos/modules/services/desktops/pantheon/files.nix b/nixos/modules/services/desktops/pantheon/files.nix
new file mode 100644
index 000000000000..2edbe5b3a6db
--- /dev/null
+++ b/nixos/modules/services/desktops/pantheon/files.nix
@@ -0,0 +1,36 @@
+# pantheon files daemon.
+
+{ config, pkgs, lib, ... }:
+
+with lib;
+
+{
+
+ ###### interface
+
+ options = {
+
+ services.pantheon.files = {
+
+ enable = mkEnableOption "pantheon files daemon";
+
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkIf config.services.pantheon.files.enable {
+
+ environment.systemPackages = [
+ pkgs.pantheon.elementary-files
+ ];
+
+ services.dbus.packages = [
+ pkgs.pantheon.elementary-files
+ ];
+
+ };
+
+}
diff --git a/nixos/modules/services/desktops/tumbler.nix b/nixos/modules/services/desktops/tumbler.nix
new file mode 100644
index 000000000000..ccbb6d1434d9
--- /dev/null
+++ b/nixos/modules/services/desktops/tumbler.nix
@@ -0,0 +1,50 @@
+# Tumbler
+
+{ config, pkgs, lib, ... }:
+
+with lib;
+
+let
+
+ cfg = config.services.tumbler;
+ tumbler = cfg.package;
+
+in
+
+{
+
+ ###### interface
+
+ options = {
+
+ services.tumbler = {
+
+ enable = mkEnableOption "Tumbler, A D-Bus thumbnailer service";
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.xfce4-13.tumbler;
+ description = "Which tumbler package to use";
+ example = pkgs.xfce4-12.tumbler;
+ };
+
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkIf cfg.enable {
+
+ environment.systemPackages = [
+ tumbler
+ ];
+
+ services.dbus.packages = [
+ tumbler
+ ];
+
+ };
+
+}
diff --git a/nixos/modules/services/x11/desktop-managers/default.nix b/nixos/modules/services/x11/desktop-managers/default.nix
index cce35aa28ba8..2b1e9169e5f6 100644
--- a/nixos/modules/services/x11/desktop-managers/default.nix
+++ b/nixos/modules/services/x11/desktop-managers/default.nix
@@ -20,7 +20,7 @@ in
imports = [
./none.nix ./xterm.nix ./xfce.nix ./plasma5.nix ./lumina.nix
./lxqt.nix ./enlightenment.nix ./gnome3.nix ./kodi.nix ./maxx.nix
- ./mate.nix
+ ./mate.nix ./pantheon.nix
];
options = {
diff --git a/nixos/modules/services/x11/desktop-managers/pantheon.nix b/nixos/modules/services/x11/desktop-managers/pantheon.nix
new file mode 100644
index 000000000000..7e23dd9cde63
--- /dev/null
+++ b/nixos/modules/services/x11/desktop-managers/pantheon.nix
@@ -0,0 +1,195 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.services.xserver.desktopManager.pantheon;
+
+ nixos-gsettings-desktop-schemas = pkgs.pantheon.elementary-gsettings-schemas.override {
+ extraGSettingsOverridePackages = cfg.extraGSettingsOverridePackages;
+ extraGSettingsOverrides = cfg.extraGSettingsOverrides;
+ };
+
+in
+
+{
+ options = {
+
+ services.xserver.desktopManager.pantheon = {
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Enable the pantheon desktop manager";
+ };
+
+ sessionPath = mkOption {
+ default = [];
+ example = literalExample "[ pkgs.gnome3.gpaste ]";
+ description = ''
+ Additional list of packages to be added to the session search path.
+ Useful for GSettings-conditional autostart.
+
+ Note that this should be a last resort; patching the package is preferred (see GPaste).
+ '';
+ apply = list: list ++
+ [
+ pkgs.pantheon.pantheon-agent-geoclue2
+ ];
+ };
+
+ extraGSettingsOverrides = mkOption {
+ default = "";
+ type = types.lines;
+ description = "Additional gsettings overrides.";
+ };
+
+ extraGSettingsOverridePackages = mkOption {
+ default = [];
+ type = types.listOf types.path;
+ description = "List of packages for which gsettings are overridden.";
+ };
+
+ debug = mkEnableOption "gnome-session debug messages";
+
+ };
+
+ environment.pantheon.excludePackages = mkOption {
+ default = [];
+ example = literalExample "[ pkgs.pantheon.elementary-camera ]";
+ type = types.listOf types.package;
+ description = "Which packages pantheon should exclude from the default environment";
+ };
+
+ };
+
+
+ config = mkIf cfg.enable {
+
+ services.xserver.displayManager.extraSessionFilePackages = [ pkgs.pantheon.elementary-session-settings ];
+
+ # Ensure lightdm is used when Pantheon is enabled
+ # Without it screen locking will be nonfunctional because of the use of lightlocker
+ services.xserver.displayManager.lightdm.enable = mkDefault true;
+ services.xserver.displayManager.lightdm.greeters.pantheon.enable = mkDefault true;
+
+ # If not set manually Pantheon session cannot be started
+ # Known issue of https://github.com/NixOS/nixpkgs/pull/43992
+ services.xserver.desktopManager.default = mkForce "pantheon";
+
+ services.xserver.displayManager.sessionCommands = ''
+ if test "$XDG_CURRENT_DESKTOP" = "Pantheon"; then
+ ${concatMapStrings (p: ''
+ if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
+ export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
+ fi
+
+ if [ -d "${p}/lib/girepository-1.0" ]; then
+ export GI_TYPELIB_PATH=$GI_TYPELIB_PATH''${GI_TYPELIB_PATH:+:}${p}/lib/girepository-1.0
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
+ fi
+ '') cfg.sessionPath}
+
+ # Makes qt applications look less alien
+ export QT_QPA_PLATFORMTHEME=gtk3
+ export QT_STYLE_OVERRIDE=adwaita
+ fi
+ '';
+
+ hardware.bluetooth.enable = mkDefault true;
+ hardware.pulseaudio.enable = mkDefault true;
+ security.polkit.enable = true;
+ services.accounts-daemon.enable = true;
+ services.bamf.enable = true;
+ services.colord.enable = mkDefault true;
+ services.pantheon.files.enable = mkDefault true;
+ services.tumbler.enable = mkDefault true;
+ services.dbus.packages = mkMerge [
+ ([ pkgs.pantheon.switchboard-plug-power ])
+ (mkIf config.services.printing.enable ([pkgs.system-config-printer]) )
+ ];
+ services.pantheon.contractor.enable = true;
+ services.geoclue2.enable = mkDefault true;
+ # pantheon has pantheon-agent-geoclue2
+ services.geoclue2.enableDemoAgent = false;
+ services.gnome3.at-spi2-core.enable = true;
+ services.gnome3.evolution-data-server.enable = true;
+ # TODO: gnome-keyring's xdg autostarts will still be in the environment (from elementary-session-settings) if disabled forcefully
+ services.gnome3.gnome-keyring.enable = true;
+ services.gnome3.gvfs.enable = true;
+ services.gnome3.rygel.enable = true;
+ services.gsignond.enable = true;
+ services.gsignond.plugins = with pkgs.gsignondPlugins; [ lastfm mail oauth ];
+ services.udev.packages = [ pkgs.pantheon.elementary-settings-daemon ];
+ services.udisks2.enable = true;
+ services.upower.enable = config.powerManagement.enable;
+ services.xserver.libinput.enable = mkDefault true;
+ services.xserver.updateDbusEnvironment = true;
+ services.zeitgeist.enable = true;
+
+ networking.networkmanager.enable = mkDefault true;
+ networking.networkmanager.basePackages =
+ { inherit (pkgs) networkmanager modemmanager wpa_supplicant;
+ inherit (pkgs.gnome3) networkmanager-openvpn networkmanager-vpnc
+ networkmanager-openconnect networkmanager-fortisslvpn
+ networkmanager-iodine networkmanager-l2tp; };
+
+ # Override GSettings schemas
+ environment.variables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
+
+ environment.variables.GNOME_SESSION_DEBUG = optionalString cfg.debug "1";
+
+ environment.variables.GIO_EXTRA_MODULES = [
+ "${lib.getLib pkgs.gnome3.dconf}/lib/gio/modules"
+ "${pkgs.gnome3.glib-networking.out}/lib/gio/modules"
+ "${pkgs.gnome3.gvfs}/lib/gio/modules"
+ ];
+
+ environment.pathsToLink = [
+ # FIXME: modules should link subdirs of `/share` rather than relying on this
+ "/share"
+ ];
+
+ environment.systemPackages = pkgs.pantheon.artwork ++ pkgs.pantheon.desktop ++ pkgs.pantheon.services ++ cfg.sessionPath
+ ++ (pkgs.gnome3.removePackagesByName pkgs.pantheon.apps config.environment.pantheon.excludePackages)
+ ++ (with pkgs.gnome3;
+ [
+ adwaita-icon-theme
+ dconf
+ epiphany
+ evince
+ file-roller
+ geary
+ gnome-bluetooth
+ gnome-font-viewer
+ gnome-power-manager
+ ])
+ ++ (with pkgs;
+ [
+ adwaita-qt
+ desktop-file-utils
+ glib
+ glib-networking
+ gnome-menus
+ gtk3.out
+ hicolor-icon-theme
+ lightlocker
+ plank
+ qgnomeplatform
+ shared-mime-info
+ sound-theme-freedesktop
+ xdg-user-dirs
+ ]);
+
+ fonts.fonts = with pkgs; [
+ opensans-ttf
+ roboto-mono
+ ];
+ fonts.fontconfig.defaultFonts = {
+ monospace = [ "Roboto Mono" ];
+ sansSerif = [ "Open Sans" ];
+ };
+
+ };
+
+}
diff --git a/nixos/modules/services/x11/display-managers/lightdm-greeters/pantheon.nix b/nixos/modules/services/x11/display-managers/lightdm-greeters/pantheon.nix
new file mode 100644
index 000000000000..05011b999f2b
--- /dev/null
+++ b/nixos/modules/services/x11/display-managers/lightdm-greeters/pantheon.nix
@@ -0,0 +1,47 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ dmcfg = config.services.xserver.displayManager;
+ ldmcfg = dmcfg.lightdm;
+ cfg = ldmcfg.greeters.pantheon;
+
+ xgreeters = pkgs.linkFarm "pantheon-greeter-xgreeters" [{
+ path = "${pkgs.pantheon.elementary-greeter}/share/xgreeters/io.elementary.greeter.desktop";
+ name = "io.elementary.greeter.desktop";
+ }];
+
+in
+{
+ options = {
+
+ services.xserver.displayManager.lightdm.greeters.pantheon = {
+
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable elementary-greeter as the lightdm greeter.
+ '';
+ };
+
+ };
+
+ };
+
+ config = mkIf (ldmcfg.enable && cfg.enable) {
+
+ services.xserver.displayManager.lightdm.greeters.gtk.enable = false;
+
+ services.xserver.displayManager.lightdm.greeter = mkDefault {
+ package = xgreeters;
+ name = "io.elementary.greeter";
+ };
+
+ environment.etc."lightdm/io.elementary.greeter.conf".source = "${pkgs.pantheon.elementary-greeter}/etc/lightdm/io.elementary.greeter.conf";
+ environment.etc."wingpanel.d/io.elementary.greeter.whitelist".source = "${pkgs.pantheon.elementary-default-settings}/etc/wingpanel.d/io.elementary.greeter.whitelist";
+
+ };
+}
diff --git a/nixos/modules/services/x11/display-managers/lightdm.nix b/nixos/modules/services/x11/display-managers/lightdm.nix
index 567c3ac34549..3ab4f26399f3 100644
--- a/nixos/modules/services/x11/display-managers/lightdm.nix
+++ b/nixos/modules/services/x11/display-managers/lightdm.nix
@@ -81,6 +81,7 @@ in
./lightdm-greeters/gtk.nix
./lightdm-greeters/mini.nix
./lightdm-greeters/enso-os.nix
+ ./lightdm-greeters/pantheon.nix
];
options = {
diff --git a/nixos/release-combined.nix b/nixos/release-combined.nix
index ea8b92e94f01..6c313f8dd3e4 100644
--- a/nixos/release-combined.nix
+++ b/nixos/release-combined.nix
@@ -68,6 +68,7 @@ in rec {
(all nixos.tests.firefox)
(all nixos.tests.firewall)
(except ["aarch64-linux"] nixos.tests.gnome3)
+ (except ["aarch64-linux"] nixos.tests.pantheon)
nixos.tests.installer.zfsroot.x86_64-linux or [] # ZFS is 64bit only
(except ["aarch64-linux"] nixos.tests.installer.lvm)
(except ["aarch64-linux"] nixos.tests.installer.luksroot)
diff --git a/nixos/tests/pantheon.nix b/nixos/tests/pantheon.nix
new file mode 100644
index 000000000000..c50f77f86173
--- /dev/null
+++ b/nixos/tests/pantheon.nix
@@ -0,0 +1,55 @@
+import ./make-test.nix ({ pkgs, ...} :
+
+{
+ name = "pantheon";
+ meta = with pkgs.stdenv.lib.maintainers; {
+ maintainers = [ worldofpeace ];
+ };
+
+ machine = { ... }:
+
+ {
+ imports = [ ./common/user-account.nix ];
+
+ services.xserver.enable = true;
+ services.xserver.desktopManager.pantheon.enable = true;
+
+ virtualisation.memorySize = 1024;
+ };
+
+ enableOCR = true;
+
+ testScript = { nodes, ... }: let
+ user = nodes.machine.config.users.users.alice;
+ in ''
+ startAll;
+
+ # Wait for display manager to start
+ $machine->waitForText(qr/${user.description}/);
+ $machine->screenshot("lightdm");
+
+ # Log in
+ $machine->sendChars("${user.password}\n");
+ $machine->waitForFile("/home/alice/.Xauthority");
+ $machine->succeed("xauth merge ~alice/.Xauthority");
+
+ # Check if "pantheon-shell" components actually start
+ $machine->waitUntilSucceeds("pgrep gala");
+ $machine->waitForWindow(qr/gala/);
+ $machine->waitUntilSucceeds("pgrep wingpanel");
+ $machine->waitForWindow("wingpanel");
+ $machine->waitUntilSucceeds("pgrep plank");
+ $machine->waitForWindow(qr/plank/);
+
+ # Check that logging in has given the user ownership of devices.
+ $machine->succeed("getfacl /dev/snd/timer | grep -q alice");
+
+ # Open elementary terminal
+ $machine->execute("su - alice -c 'DISPLAY=:0.0 io.elementary.terminal &'");
+ $machine->waitForWindow(qr/io.elementary.terminal/);
+
+ # Take a screenshot of the desktop
+ $machine->sleep(20);
+ $machine->screenshot("screen");
+ '';
+})
diff --git a/pkgs/applications/audio/vocal/default.nix b/pkgs/applications/audio/vocal/default.nix
index 75f67adf4645..49e11aee0a12 100644
--- a/pkgs/applications/audio/vocal/default.nix
+++ b/pkgs/applications/audio/vocal/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, ninja, pkgconfig, vala_0_40, gtk3, libxml2, granite, webkitgtk, clutter-gtk
+{ stdenv, fetchFromGitHub, cmake, ninja, pkgconfig, pantheon, gtk3, libxml2, webkitgtk, clutter-gtk
, clutter-gst, libunity, libnotify, sqlite, gst_all_1, libsoup, json-glib, gnome3, gobject-introspection, wrapGAppsHook }:
stdenv.mkDerivation rec {
@@ -20,16 +20,16 @@ stdenv.mkDerivation rec {
libxml2
ninja
pkgconfig
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
buildInputs = with gst_all_1; [
clutter-gst
clutter-gtk
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
gnome3.libgee
- granite
+ pantheon.granite
gst-plugins-base
gst-plugins-good
gstreamer
diff --git a/pkgs/applications/editors/quilter/default.nix b/pkgs/applications/editors/quilter/default.nix
index b9fe90be9fb2..9edac16507c4 100644
--- a/pkgs/applications/editors/quilter/default.nix
+++ b/pkgs/applications/editors/quilter/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, fetchpatch, vala_0_40, pkgconfig, meson, ninja, python3
-, granite, gtk3, desktop-file-utils, gnome3, gtksourceview, webkitgtk, gtkspell3
-, discount, gobject-introspection, wrapGAppsHook }:
+{ stdenv, fetchFromGitHub, fetchpatch, pkgconfig, meson, ninja, python3
+, gtk3, desktop-file-utils, gtksourceview, webkitgtk, gtkspell3, pantheon
+, gnome3, discount, gobject-introspection, wrapGAppsHook }:
stdenv.mkDerivation rec {
pname = "quilter";
@@ -22,15 +22,15 @@ stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
buildInputs = [
discount
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
+ pantheon.granite
gnome3.libgee
- granite
gtk3
gtksourceview
gtkspell3
diff --git a/pkgs/applications/misc/notejot/default.nix b/pkgs/applications/misc/notejot/default.nix
index 9e2f4bf7f2e4..74e1c679ec37 100644
--- a/pkgs/applications/misc/notejot/default.nix
+++ b/pkgs/applications/misc/notejot/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, vala_0_40, pkgconfig, meson, ninja, python3, granite
-, gtk3, gnome3, gtksourceview, json-glib, gobject-introspection, wrapGAppsHook }:
+{ stdenv, fetchFromGitHub, pkgconfig, meson, ninja, python3, pantheon
+, gtk3, gtksourceview, json-glib, gnome3, gobject-introspection, wrapGAppsHook }:
stdenv.mkDerivation rec {
pname = "notejot";
@@ -20,14 +20,14 @@ stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
buildInputs = [
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
+ pantheon.granite
gnome3.libgee
- granite
gtk3
gtksourceview
json-glib
diff --git a/pkgs/applications/misc/regextester/default.nix b/pkgs/applications/misc/regextester/default.nix
index 2b902d27a353..703d78621249 100644
--- a/pkgs/applications/misc/regextester/default.nix
+++ b/pkgs/applications/misc/regextester/default.nix
@@ -4,14 +4,13 @@
, libxml2
, pkgconfig
, glib
-, granite
, gtk3
, gnome3
, meson
, ninja
, gobject-introspection
, gsettings-desktop-schemas
-, vala_0_40
+, pantheon
, wrapGAppsHook }:
stdenv.mkDerivation rec {
@@ -26,22 +25,23 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [
- pkgconfig
- meson
- ninja
+ pantheon.vala
gettext
gobject-introspection
libxml2
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ meson
+ ninja
+ pkgconfig
wrapGAppsHook
];
+
buildInputs = [
+ pantheon.elementary-icon-theme
+ pantheon.granite
glib
- granite
- gtk3
- gnome3.defaultIconTheme
gnome3.libgee
gsettings-desktop-schemas
+ gtk3
];
postInstall = ''
diff --git a/pkgs/applications/misc/sequeler/default.nix b/pkgs/applications/misc/sequeler/default.nix
index 72a1465a2c83..96049b395ea5 100644
--- a/pkgs/applications/misc/sequeler/default.nix
+++ b/pkgs/applications/misc/sequeler/default.nix
@@ -1,6 +1,6 @@
{ stdenv, fetchFromGitHub
-, meson, ninja, pkgconfig, vala, gobject-introspection, gettext, wrapGAppsHook, python3, desktop-file-utils
-, gtk3, glib, granite, libgee, libgda, gtksourceview, libxml2, libsecret, libfixposix, libssh2 }:
+, meson, ninja, pkgconfig, pantheon, gobject-introspection, gettext, wrapGAppsHook, python3, desktop-file-utils
+, gtk3, glib, libgee, libgda, gtksourceview, libxml2, libsecret, libfixposix, libssh2 }:
let
@@ -20,9 +20,9 @@ in stdenv.mkDerivation rec {
sha256 = "0sxmky27pl0aqnh857xb54rnfg1kbr2smdzyrzw67cbv00f6d30p";
};
- nativeBuildInputs = [ meson ninja pkgconfig vala gobject-introspection gettext wrapGAppsHook python3 desktop-file-utils ];
+ nativeBuildInputs = [ meson ninja pkgconfig pantheon.vala gobject-introspection gettext wrapGAppsHook python3 desktop-file-utils ];
- buildInputs = [ gtk3 glib granite libgee sqlGda gtksourceview libxml2 libsecret libfixposix libssh2 ];
+ buildInputs = [ gtk3 glib pantheon.granite libgee sqlGda gtksourceview libxml2 libsecret libfixposix libssh2 ];
postPatch = ''
chmod +x build-aux/meson_post_install.py
diff --git a/pkgs/applications/misc/tootle/default.nix b/pkgs/applications/misc/tootle/default.nix
index c295a8fdb688..5a856a5f2b28 100644
--- a/pkgs/applications/misc/tootle/default.nix
+++ b/pkgs/applications/misc/tootle/default.nix
@@ -1,8 +1,7 @@
{ stdenv, fetchFromGitHub
, meson, ninja, pkgconfig, python3
-, gnome3, vala_0_40, gobject-introspection, wrapGAppsHook
-, gtk3, granite
-, json-glib, glib, glib-networking, hicolor-icon-theme
+, gnome3, pantheon, gobject-introspection, wrapGAppsHook
+, gtk3, json-glib, glib, glib-networking, hicolor-icon-theme
}:
let
@@ -24,11 +23,11 @@ in stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
buildInputs = [
- gtk3 granite json-glib glib glib-networking hicolor-icon-theme
+ gtk3 pantheon.granite json-glib glib glib-networking hicolor-icon-theme
gnome3.libgee gnome3.libsoup gnome3.gsettings-desktop-schemas
];
diff --git a/pkgs/applications/networking/ftp/taxi/default.nix b/pkgs/applications/networking/ftp/taxi/default.nix
index bd17e86d8980..9252b95a00c7 100644
--- a/pkgs/applications/networking/ftp/taxi/default.nix
+++ b/pkgs/applications/networking/ftp/taxi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, vala, pkgconfig, meson, ninja, python3, granite
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, python3
, gtk3, gnome3, libsoup, libsecret, gobject-introspection, wrapGAppsHook }:
stdenv.mkDerivation rec {
@@ -15,18 +15,18 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [
+ pantheon.vala
gobject-introspection
meson
ninja
pkgconfig
python3
- vala
wrapGAppsHook
];
buildInputs = [
+ pantheon.granite
gnome3.libgee
- granite
gtk3
libsecret
libsoup
diff --git a/pkgs/applications/networking/transporter/default.nix b/pkgs/applications/networking/transporter/default.nix
index c5b329b5f0a0..46649c069111 100644
--- a/pkgs/applications/networking/transporter/default.nix
+++ b/pkgs/applications/networking/transporter/default.nix
@@ -3,9 +3,9 @@
, meson
, ninja
, pkgconfig
-, granite
-, vala_0_40
+, gtk3
, python3
+, pantheon
, gnome3
, libxml2
, gettext
@@ -31,24 +31,22 @@ in stdenv.mkDerivation rec {
nativeBuildInputs = [
appstream-glib
desktop-file-utils
+ pantheon.vala
gettext
gobject-introspection # For setup hook
libxml2
meson
ninja
pkgconfig
- vala_0_40
python3
wrapGAppsHook
];
- buildInputs = with gnome3; [
- defaultIconTheme # If I omit this there's no icons in KDE
- glib
- granite
- gsettings-desktop-schemas
+ buildInputs = [
+ pantheon.elementary-icon-theme
+ gnome3.libgee
+ pantheon.granite
gtk3
- libgee
magic-wormhole
];
@@ -59,8 +57,8 @@ in stdenv.mkDerivation rec {
'';
postPatch = ''
- chmod +x ./meson/post_install.py
- patchShebangs ./meson/post_install.py
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
'';
meta = with stdenv.lib; {
diff --git a/pkgs/applications/networking/weather/meteo/default.nix b/pkgs/applications/networking/weather/meteo/default.nix
index 3dba90f964f5..149e126d6e87 100644
--- a/pkgs/applications/networking/weather/meteo/default.nix
+++ b/pkgs/applications/networking/weather/meteo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, vala, python3, pkgconfig, meson, ninja, granite, gtk3
+{ stdenv, fetchFromGitLab, vala, python3, pkgconfig, meson, ninja, gtk3
, gnome3, json-glib, libsoup, clutter, clutter-gtk, libchamplain, webkitgtk
, libappindicator, desktop-file-utils, appstream, gobject-introspection, wrapGAppsHook }:
diff --git a/pkgs/applications/office/aesop/default.nix b/pkgs/applications/office/aesop/default.nix
index 74a56b1f6caf..51e2c55ea7d0 100644
--- a/pkgs/applications/office/aesop/default.nix
+++ b/pkgs/applications/office/aesop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, vala_0_40, pkgconfig, meson, ninja, python3, granite, gtk3
+{ stdenv, fetchFromGitHub, fetchpatch, pantheon, pkgconfig, meson, ninja, python3, gtk3
, gnome3, desktop-file-utils, json-glib, libsoup, poppler, gobject-introspection, wrapGAppsHook }:
stdenv.mkDerivation rec {
@@ -21,14 +21,14 @@ stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
buildInputs = [
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
gnome3.libgee
- granite
+ pantheon.granite
gtk3
json-glib
libsoup
diff --git a/pkgs/applications/office/bookworm/default.nix b/pkgs/applications/office/bookworm/default.nix
index 04b2072967ab..63199945f2b1 100644
--- a/pkgs/applications/office/bookworm/default.nix
+++ b/pkgs/applications/office/bookworm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, vala_0_40, python3, python2, pkgconfig, libxml2, meson, ninja, gtk3, granite, gnome3
+{ stdenv, fetchFromGitHub, fetchpatch, pantheon, python3, python2, pkgconfig, libxml2, meson, ninja, gtk3, gnome3, glib, webkitgtk
, gobject-introspection, sqlite, poppler, poppler_utils, html2text, curl, gnugrep, coreutils, bash, unzip, unar, wrapGAppsHook }:
stdenv.mkDerivation rec {
@@ -20,17 +20,17 @@ stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
- buildInputs = with gnome3; [
+ buildInputs = [
+ pantheon.elementary-icon-theme
+ pantheon.granite
glib
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
- granite
+ gnome3.libgee
gtk3
html2text
- libgee
poppler
python2
sqlite
diff --git a/pkgs/applications/office/spice-up/default.nix b/pkgs/applications/office/spice-up/default.nix
index a32ad677c257..c7e39180ae28 100644
--- a/pkgs/applications/office/spice-up/default.nix
+++ b/pkgs/applications/office/spice-up/default.nix
@@ -4,7 +4,6 @@
, libxml2
, pkgconfig
, gtk3
-, granite
, gnome3
, gobject-introspection
, json-glib
@@ -13,7 +12,7 @@
, libgudev
, libevdev
, libsoup
-, vala_0_40
+, pantheon
, wrapGAppsHook }:
stdenv.mkDerivation rec {
@@ -30,19 +29,19 @@ stdenv.mkDerivation rec {
USER = "nix-build-user";
nativeBuildInputs = [
- pkgconfig
- wrapGAppsHook
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
cmake
- ninja
gettext
- libxml2
gobject-introspection # For setup hook
+ libxml2
+ ninja
+ pkgconfig
+ pantheon.vala
+ wrapGAppsHook
];
buildInputs = [
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
+ pantheon.granite
gnome3.libgee
- granite
gtk3
json-glib
libevdev
diff --git a/pkgs/applications/science/math/nasc/default.nix b/pkgs/applications/science/math/nasc/default.nix
index 4afaa5194db8..fb0ea2067355 100644
--- a/pkgs/applications/science/math/nasc/default.nix
+++ b/pkgs/applications/science/math/nasc/default.nix
@@ -1,12 +1,10 @@
{ stdenv
, fetchFromGitHub
-, fetchpatch
, pkgconfig
, gtk3
-, granite
+, pantheon
, gnome3
, cmake
-, vala_0_40
, libqalculate
, gobject-introspection
, wrapGAppsHook }:
@@ -28,19 +26,19 @@ stdenv.mkDerivation rec {
'';
nativeBuildInputs = [
- pkgconfig
- wrapGAppsHook
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
cmake
+ pantheon.vala
gobject-introspection # for setup-hook
+ pkgconfig
+ wrapGAppsHook
];
buildInputs = [
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
gnome3.gtksourceview
gnome3.libgee
gnome3.libsoup
- granite
+ pantheon.granite
gtk3
libqalculate
];
diff --git a/pkgs/data/icons/faba-icon-theme/default.nix b/pkgs/data/icons/faba-icon-theme/default.nix
index 07d2b5ecf02c..c15e0f4e5510 100644
--- a/pkgs/data/icons/faba-icon-theme/default.nix
+++ b/pkgs/data/icons/faba-icon-theme/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, meson, ninja, python3, gtk3, elementary-icon-theme }:
+{ stdenv, fetchFromGitHub, meson, ninja, python3, gtk3, pantheon }:
stdenv.mkDerivation rec {
name = "${package-name}-${version}";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
sha256 = "0xh6ppr73p76z60ym49b4d0liwdc96w41cc5p07d48hxjsa6qd6n";
};
- nativeBuildInputs = [ meson ninja python3 gtk3 elementary-icon-theme ];
+ nativeBuildInputs = [ meson ninja python3 gtk3 pantheon.elementary-icon-theme ];
postPatch = ''
patchShebangs meson/post_install.py
diff --git a/pkgs/desktops/deepin/deepin-wm/default.nix b/pkgs/desktops/deepin/deepin-wm/default.nix
index 4eac01b666ae..ea2f06aae607 100644
--- a/pkgs/desktops/deepin/deepin-wm/default.nix
+++ b/pkgs/desktops/deepin/deepin-wm/default.nix
@@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, vala, gnome3,
- bamf, clutter-gtk, granite, libcanberra-gtk3, libwnck3,
+ bamf, clutter-gtk, pantheon, libcanberra-gtk3, libwnck3,
deepin-mutter, deepin-wallpapers, deepin-desktop-schemas,
hicolor-icon-theme, deepin }:
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
gnome3.libgee
bamf
clutter-gtk
- granite
+ pantheon.granite
libcanberra-gtk3
libwnck3
deepin-mutter
diff --git a/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix b/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
new file mode 100644
index 000000000000..c8ade1c9c35e
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig
+, meson, ninja, vala, desktop-file-utils, libxml2
+, gtk3, python3, granite, libgee, gobject-introspection
+, elementary-icon-theme, appstream, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "calculator";
+ version = "1.5.1";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0vc27kjmfkly2jkqjiyzlybxyjqhwal3xrxca5b4abfgb379yswa";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ gobject-introspection
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/elementary/calculator;
+ description = "Calculator app designed for elementary OS";
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix b/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
new file mode 100644
index 000000000000..28983db7f916
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson
+, ninja, vala, desktop-file-utils, gtk3, granite, libgee
+, geoclue2, libchamplain, clutter, folks, geocode-glib, python3
+, libnotify, libical, evolution-data-server, appstream-glib
+, elementary-icon-theme, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "calendar";
+ version = "4.2.3";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "100wy8lkp4nrxj57ywyx44ckm3k7n8h5l6av92hr5pyx8fxn9m48";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream-glib
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ clutter
+ elementary-icon-theme
+ evolution-data-server
+ folks
+ geoclue2
+ geocode-glib
+ granite
+ gtk3
+ libchamplain
+ libgee
+ libical
+ libnotify
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Desktop calendar app designed for elementary OS";
+ homepage = https://github.com/elementary/calendar;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-camera/default.nix b/pkgs/desktops/pantheon/apps/elementary-camera/default.nix
new file mode 100644
index 000000000000..2e90a96411a3
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-camera/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala
+, desktop-file-utils, python3, gettext, libxml2, gtk3, granite, libgee, gst_all_1
+, libcanberra, clutter-gtk, clutter-gst, elementary-icon-theme, appstream, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "camera";
+ version = "1.0.3";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "05rjymflhwbkw8yc57rgi9n7lrhf4dpvfvlifdnazyqn9iiaxc46";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ gettext
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ clutter-gst
+ clutter-gtk
+ elementary-icon-theme
+ granite
+ gst_all_1.gst-plugins-bad
+ gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good
+ gst_all_1.gstreamer
+ gtk3
+ libcanberra
+ libgee
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Camera app designed for elementary OS";
+ homepage = https://github.com/elementary/camera;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-code/default.nix b/pkgs/desktops/pantheon/apps/elementary-code/default.nix
new file mode 100644
index 000000000000..0b16c56be3de
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-code/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala, substituteAll
+, python3, glibcLocales, desktop-file-utils, gtk3, granite, libgee, elementary-icon-theme
+, appstream, libpeas, editorconfig-core-c, gtksourceview3, gtkspell3, libsoup
+, vte, webkitgtk, zeitgeist, ctags, libgit2-glib, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "code";
+ version = "3.0.2";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0zmm4a7galrs9phiplf6cygwq3rplghv7r8g47mi4nlndgxqyssg";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ glibcLocales
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ ctags
+ elementary-icon-theme
+ editorconfig-core-c
+ granite
+ gtk3
+ gtksourceview3
+ gtkspell3
+ libgee
+ libgit2-glib
+ libpeas
+ libsoup
+ vte
+ webkitgtk
+ zeitgeist
+ ];
+
+ # See: https://github.com/elementary/code/pull/626
+ LIBRARY_PATH = stdenv.lib.makeLibraryPath [ editorconfig-core-c ];
+
+ # install script fails with UnicodeDecodeError because of printing a fancy elipsis character
+ LC_ALL = "en_US.UTF-8";
+
+ # ctags needed in path by outline plugin
+ preFixup = ''
+ gappsWrapperArgs+=(
+ --prefix PATH : "${stdenv.lib.makeBinPath [ ctags ]}"
+ )
+ '';
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Code editor designed for elementary OS";
+ homepage = https://github.com/elementary/code;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-files/default.nix b/pkgs/desktops/pantheon/apps/elementary-files/default.nix
new file mode 100644
index 000000000000..947ba6c32f6a
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-files/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, gettext, vala
+, python3, desktop-file-utils, intltool, libcanberra, gtk3, libgee, granite
+, libnotify, libunity, pango, plank, bamf, sqlite, libdbusmenu-gtk3, zeitgeist
+, glib-networking, elementary-icon-theme, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "files";
+ version = "4.1.3";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0vz6m6kqm9r1scj1jdljbzh019skj8fhf916011wkdfzdpc1zlac";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ glib-networking
+ gobject-introspection
+ intltool
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ bamf
+ elementary-icon-theme
+ granite
+ gtk3
+ libcanberra
+ libdbusmenu-gtk3
+ libgee
+ libnotify
+ libunity
+ pango
+ plank
+ sqlite
+ zeitgeist
+ ];
+
+ patches = [ ./hardcode-gsettings.patch ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+
+ substituteInPlace filechooser-module/FileChooserDialog.vala --subst-var-by ELEMENTARY_FILES_GSETTINGS_PATH $out/share/gsettings-schemas/${name}/glib-2.0/schemas
+ '';
+
+ # xdg.mime will create this
+ postInstall = ''
+ rm $out/share/applications/mimeinfo.cache
+ '';
+
+ meta = with stdenv.lib; {
+ description = "File browser designed for elementary OS";
+ homepage = https://github.com/elementary/files;
+ license = licenses.lgpl3;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch b/pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch
new file mode 100644
index 000000000000..3191f4e3cb2b
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch
@@ -0,0 +1,22 @@
+diff --git a/filechooser-module/FileChooserDialog.vala b/filechooser-module/FileChooserDialog.vala
+index cb7c3c49..8b1899d1 100644
+--- a/filechooser-module/FileChooserDialog.vala
++++ b/filechooser-module/FileChooserDialog.vala
+@@ -57,10 +57,15 @@ public class CustomFileChooserDialog : Object {
+ chooser_dialog.deletable = false;
+ chooser_dialog.local_only = false;
+
+- var settings = new Settings ("io.elementary.files.preferences");
++ SettingsSchemaSource sss = new SettingsSchemaSource.from_directory ("@ELEMENTARY_FILES_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
++ SettingsSchema preferences_schema = sss.lookup ("io.elementary.files.preferences", false);
++ SettingsSchema chooser_schema = sss.lookup ("io.elementary.files.file-chooser", false);
++
++ var settings = new Settings.full (preferences_schema, null, null);
++
+ is_single_click = settings.get_boolean ("single-click");
+
+- var chooser_settings = new Settings ("io.elementary.files.file-chooser");
++ var chooser_settings = new Settings.full (chooser_schema, null, null);
+
+ assign_container_box ();
+ remove_gtk_widgets ();
diff --git a/pkgs/desktops/pantheon/apps/elementary-music/default.nix b/pkgs/desktops/pantheon/apps/elementary-music/default.nix
new file mode 100644
index 000000000000..8bca7b3b6b50
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-music/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson
+, ninja, vala, desktop-file-utils, libxml2, gtk3, granite
+, python3, libgee, clutter-gtk, json-glib, libgda, libgpod
+, libnotify, libpeas, libsoup, zeitgeist, gst_all_1, taglib
+, libdbusmenu, libsignon-glib, libaccounts-glib
+, elementary-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "music";
+ version = "5.0.2";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "06mpikzdm01r9j7g15b7fgi4lcnp8cc0wmj17dfli5nmncxghx89";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = with gst_all_1; [
+ clutter-gtk
+ elementary-icon-theme
+ granite
+ gst-plugins-bad
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-ugly
+ gstreamer
+ gtk3
+ json-glib
+ libaccounts-glib
+ libdbusmenu
+ libgda
+ libgee
+ libgpod
+ libsignon-glib
+ libnotify
+ libpeas
+ libsoup
+ taglib
+ zeitgeist
+ ];
+
+ mesonFlags = [
+ "-Dplugins=lastfm,audioplayer,cdrom,ipod"
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Music player and library designed for elementary OS";
+ homepage = https://github.com/elementary/music;
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-photos/default.nix b/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
new file mode 100644
index 000000000000..055889fd6d1b
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, vala, desktop-file-utils
+, gtk3, glib, libaccounts-glib, libexif, libgee, geocode-glib, gexiv2,libgphoto2
+, granite, gst_all_1, libgudev, json-glib, libraw, librest, libsoup, sqlite
+, scour, webkitgtk, libwebp, appstream, libunity, wrapGAppsHook, gobject-introspection, elementary-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "photos";
+ version = "2.6.1";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "063h6jr0p8v46w8bppsss1zlphx21xqwylh57qbyd5xi71z4gl1v";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = with gst_all_1; [
+ elementary-icon-theme
+ geocode-glib
+ gexiv2
+ granite
+ gst-plugins-bad
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-ugly
+ gstreamer
+ gtk3
+ json-glib
+ libaccounts-glib
+ libexif
+ libgee
+ libgphoto2
+ libgudev
+ libraw
+ libsoup
+ libunity
+ libwebp
+ librest
+ scour
+ sqlite
+ webkitgtk
+ ];
+
+ mesonFlags = [
+ "-Dplugins=false"
+ ];
+
+ # This should be provided by a post_install.py script - See -> https://github.com/elementary/photos/pull/433
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Photo viewer and organizer designed for elementary OS";
+ homepage = https://github.com/elementary/photos;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix b/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
new file mode 100644
index 000000000000..b00d0e3997ab
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, callPackage
+, ninja, vala, python3, desktop-file-utils, gtk3, granite, libgee
+, libcanberra, gobject-introspection, elementary-icon-theme, wrapGAppsHook }:
+
+let
+
+ redacted-script = callPackage ./redacted-script.nix {};
+
+in
+
+stdenv.mkDerivation rec {
+ pname = "screenshot-tool"; # This will be renamed to "screenshot" soon. See -> https://github.com/elementary/screenshot/pull/93
+ version = "1.6.0";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = "screenshot";
+ rev = version;
+ sha256 = "0hxgh7br12kw8bs2cdm2q9ivhnj2zb0i7fs43pkgf3z0fidjf1yv";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = "screenshot";
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libcanberra
+ libgee
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ postInstall = ''
+ mkdir -p $out/share/fonts/truetype
+ cp -rva ${redacted-script}/share/fonts/truetype/redacted-elementary $out/share/fonts/truetype
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Screenshot tool designed for elementary OS";
+ homepage = https://github.com/elementary/screenshot;
+ license = licenses.lgpl3;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/redacted-script.nix b/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/redacted-script.nix
new file mode 100644
index 000000000000..db1d9d240c40
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/redacted-script.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, pantheon }:
+
+stdenv.mkDerivation rec {
+ name = "elementary-redacted-script-${version}";
+ version = "5.1.0";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = "fonts";
+ rev = version;
+ sha256 = "16x2w7w29k4jx2nwc5932h9rqvb216vxsziazisv2rpll74kn8b2";
+ };
+
+ dontConfigure = true;
+
+ installPhase = ''
+ mkdir -p $out/share/fonts/truetype/redacted-elementary
+ cp -a redacted/*.ttf $out/share/fonts/truetype/redacted-elementary
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Redacted Script Font for elementary";
+ homepage = https://github.com/elementary/fonts;
+ license = licenses.ofl;
+ maintainers = pantheon.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix b/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
new file mode 100644
index 000000000000..01fe35e4a8ee
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, python3
+, vala, desktop-file-utils, gtk3, libxml2, granite, libnotify, vte, libgee
+, elementary-icon-theme, appstream, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "terminal";
+ version = "5.3.3";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1rhqfq5dn913g551ribycid4k8add2lanxkkqpv6zzdgvah26ni8";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ gobject-introspection
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ libnotify
+ vte
+ ];
+
+ # See https://github.com/elementary/terminal/commit/914d4b0e2d0a137f12276d748ae07072b95eff80
+ mesonFlags = [ "-Dubuntu-bionic-patched-vte=false" ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Terminal emulator designed for elementary OS";
+ longDescription = ''
+ A super lightweight, beautiful, and simple terminal. Comes with sane defaults, browser-class tabs, sudo paste protection,
+ smart copy/paste, and little to no configuration.
+ '';
+ homepage = https://github.com/elementary/terminal;
+ license = licenses.lgpl3;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/elementary-videos/default.nix b/pkgs/desktops/pantheon/apps/elementary-videos/default.nix
new file mode 100644
index 000000000000..a07667cd6257
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/elementary-videos/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja, vala, python3
+, desktop-file-utils, gtk3, granite, libgee, clutter-gst, clutter-gtk, gst_all_1
+, gobject-introspection, elementary-icon-theme, wrapGAppsHook, gst-ffmpeg }:
+
+stdenv.mkDerivation rec {
+ pname = "videos";
+ version = "2.6.3";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1ncm8kh6dcy83p8pmpilnk03b4dx3b1jm8w13izq2dkglfgdwvqx";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = with gst_all_1; [
+ clutter-gst
+ clutter-gtk
+ elementary-icon-theme
+ granite
+ gst-ffmpeg
+ gst-libav
+ gst-plugins-bad
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-ugly
+ gstreamer
+ gtk3
+ libgee
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Video player and library app designed for elementary OS";
+ homepage = https://github.com/elementary/videos;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix
new file mode 100644
index 000000000000..2ee925209838
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-a11y";
+ version = "2.1.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1wh46lrsliii5bbvfc4xnzgnii2v7sqxnbn43ylmyqppfv9mk1wd";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Universal Access Plug";
+ homepage = https://github.com/elementary/switchboard-plug-a11y;
+ license = licenses.lgpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
new file mode 100644
index 000000000000..bdba8328fe93
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, pantheon, substituteAll, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, switchboard, pciutils, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-about";
+ version = "2.5.2";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "11diwz2aj45yqkxdija8ny0sgm0wl2905gl3799cdl12ss9ffndp";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./lspci-path.patch;
+ inherit pciutils;
+ })
+ ./remove-update-button.patch
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard About Plug";
+ homepage = https://github.com/elementary/witchboard-plug-about;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch
new file mode 100644
index 000000000000..352d84c42624
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch
@@ -0,0 +1,13 @@
+diff --git a/src/Views/HardwareView.vala b/src/Views/HardwareView.vala
+index a3e449c..a95fe93 100644
+--- a/src/Views/HardwareView.vala
++++ b/src/Views/HardwareView.vala
+@@ -179,7 +179,7 @@ public class About.HardwareView : Gtk.Grid {
+
+ // Graphics
+ try {
+- Process.spawn_command_line_sync ("lspci", out graphics);
++ Process.spawn_command_line_sync ("@pciutils@/bin/lspci", out graphics);
+
+ if ("VGA" in graphics) { //VGA-keyword indicates graphics-line
+ string[] lines = graphics.split("\n");
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch
new file mode 100644
index 000000000000..41433f9a76b0
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch
@@ -0,0 +1,55 @@
+diff --git a/src/Plug.vala b/src/Plug.vala
+index 76fca34..3e79c1f 100644
+--- a/src/Plug.vala
++++ b/src/Plug.vala
+@@ -65,7 +65,6 @@ public class About.Plug : Switchboard.Plug {
+ search_results.set ("%s → %s".printf (display_name, _("Restore Default Settings")), "");
+ search_results.set ("%s → %s".printf (display_name, _("Suggest Translation")), "");
+ search_results.set ("%s → %s".printf (display_name, _("Report Problems")), "");
+- search_results.set ("%s → %s".printf (display_name, _("Updates")), "");
+ return search_results;
+ }
+
+@@ -161,7 +160,7 @@ public class About.Plug : Switchboard.Plug {
+ var kernel_version_label = new Gtk.Label (kernel_version);
+ kernel_version_label.set_selectable (true);
+
+- var gtk_version_label = new Gtk.Label (_("GTK+ %s").printf (gtk_version));
++ var gtk_version_label = new Gtk.Label (_("GTK+ %s").printf (gtk_version));
+ gtk_version_label.set_selectable (true);
+
+ var website_label = new Gtk.LinkButton.with_label (website_url, _("Website"));
+@@ -202,16 +201,6 @@ public class About.Plug : Switchboard.Plug {
+ issue_dialog.run ();
+ });
+
+- // Update button
+- var update_button = new Gtk.Button.with_label (_("Check for Updates"));
+- update_button.clicked.connect (() => {
+- try {
+- Process.spawn_command_line_async ("io.elementary.appcenter --show-updates");
+- } catch (Error e) {
+- warning (e.message);
+- }
+- });
+-
+ // Restore settings button
+ var settings_restore_button = new Gtk.Button.with_label (_("Restore Default Settings"));
+ settings_restore_button.clicked.connect (settings_restore_clicked);
+@@ -224,7 +213,6 @@ public class About.Plug : Switchboard.Plug {
+ button_grid.add (settings_restore_button);
+ button_grid.add (translate_button);
+ button_grid.add (bug_button);
+- button_grid.add (update_button);
+ button_grid.set_child_non_homogeneous (help_button, true);
+
+ var software_grid = new Gtk.Grid ();
+@@ -238,7 +226,7 @@ public class About.Plug : Switchboard.Plug {
+ software_grid.attach (based_off, 0, 2, 2, 1);
+ }
+
+- software_grid.attach (kernel_version_label, 0, 3, 2, 1);
++ software_grid.attach (kernel_version_label, 0, 3, 2, 1);
+ software_grid.attach (gtk_version_label, 0, 4, 2, 1);
+ software_grid.attach (website_label, 0, 5, 2, 1);
+
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
new file mode 100644
index 000000000000..382700cc583b
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-applications";
+ version = "2.1.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1gi8jwjh9ga7h92ffl43r0rnlnl5649pqzpk7q1ffhhyqzwh8l63";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Applications Plug";
+ homepage = https://github.com/elementary/switchboard-plug-applications;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix
new file mode 100644
index 000000000000..fc6f566b353c
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, vala, libgee
+, granite, gtk3, bluez, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-bluetooth";
+ version = "2.2.0";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1aynzns0xw629drv9qvci37ba0fzyd5x9y8kwjqr527rnk0qiyca";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ bluez
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Bluetooth Plug";
+ homepage = https://github.com/elementary/switchboard-plug-bluetooth;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch
new file mode 100644
index 000000000000..0fe0ac8b10c8
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch
@@ -0,0 +1,12 @@
+diff --git a/src/DateTime1.vala b/src/DateTime1.vala
+index 5a80fbd..2e1f948 100644
+--- a/src/DateTime1.vala
++++ b/src/DateTime1.vala
+@@ -38,6 +38,6 @@ public class DateTime.Settings : Granite.Services.Settings {
+ public string clock_format { get; set; }
+
+ public Settings () {
+- base ("io.elementary.desktop.wingpanel.datetime");
++ base ("io.elementary.granite");
+ }
+ }
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix
new file mode 100644
index 000000000000..95a350372b95
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, substituteAll, pkgconfig
+, vala, libgee, granite, gtk3, libxml2, switchboard, tzdata, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-datetime";
+ version = "2.1.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1iz8skf5dw76a07ljc8v8lw2x2nrmq8j6sggm227cmxy60gadsdv";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./timezone.patch;
+ tzdata = "${tzdata}/share/zoneinfo/zone.tab";
+ })
+ # Use "clock-format" GSettings key that's been moved to granite
+ ./clock-format.patch
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Date & Time Plug";
+ homepage = https://github.com/elementary/switchboard-plug-datetime;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch
new file mode 100644
index 000000000000..35f73d365990
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch
@@ -0,0 +1,13 @@
+diff --git a/src/Parser.vala b/src/Parser.vala
+index faccb64..432a362 100644
+--- a/src/Parser.vala
++++ b/src/Parser.vala
+@@ -28,7 +28,7 @@ public class DateTime.Parser : GLib.Object {
+ return parser;
+ }
+ private Parser () {
+- var file = File.new_for_path ("/usr/share/zoneinfo/zone.tab");
++ var file = File.new_for_path ("@tzdata@");
+ if (!file.query_exists ()) {
+ critical ("/usr/share/zoneinfo/zone.tab doesn't exist !");
+ return;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
new file mode 100644
index 000000000000..192f8a69ae97
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-display";
+ version = "2.1.6";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0pw21bnc79shiynmg7h9bs1x1v011lh07ypn22j73yhmxp6wiypd";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Displays Plug";
+ homepage = https://github.com/elementary/switchboard-plug-display;
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix
new file mode 100644
index 000000000000..f38f15e3c6d2
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchFromGitHub, pantheon, substituteAll, meson, ninja, pkgconfig, vala, libgee
+, granite, gtk3, libxml2, libgnomekbd, libxklavier, xorg, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-keyboard";
+ version = "2.3.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1997hnhlcp2jmf3z70na42vl1b7i5vxhp7k5ga5sl68dv0g4126y";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ libgnomekbd
+ libxklavier
+ switchboard
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./xkb.patch;
+ config = "${xorg.xkeyboardconfig}/share/X11/xkb/rules/evdev.xml";
+ })
+ ];
+
+ LIBRARY_PATH = stdenv.lib.makeLibraryPath [ libgnomekbd ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Keyboard Plug";
+ homepage = https://github.com/elementary/switchboard-plug-keyboard;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch
new file mode 100644
index 000000000000..33237d9c9392
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch
@@ -0,0 +1,22 @@
+diff --git a/src/Layout/Handler.vala b/src/Layout/Handler.vala
+index 297314b..b36509a 100644
+--- a/src/Layout/Handler.vala
++++ b/src/Layout/Handler.vala
+@@ -29,7 +29,7 @@ public class Pantheon.Keyboard.LayoutPage.LayoutHandler : GLib.Object {
+ }
+
+ private void parse_layouts () {
+- 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 missing\n");
+ return;
+@@ -76,7 +76,7 @@ public class Pantheon.Keyboard.LayoutPage.LayoutHandler : GLib.Object {
+ public HashTable<string, string> get_variants_for_language (string language) {
+ var returned_table = new HashTable<string, string> (str_hash, str_equal);
+ returned_table.set ("", _("Default"));
+- 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 returned_table;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
new file mode 100644
index 000000000000..6c4bdeb7fb71
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, fetchpatch, meson, ninja
+, pkgconfig, vala, libgee, granite, gtk3, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-mouse-touchpad";
+ version = "2.1.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1zh5472ab01bckrc1py5bqqsal9i9pbgx6i8ap2d4yzhc8sirjrf";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Mouse & Touchpad Plug";
+ homepage = https://github.com/elementary/switchboard-plug-mouse-touchpad;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
new file mode 100644
index 000000000000..3943cad48fd3
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, substituteAll, vala
+, libgee, granite, gtk3, networkmanager, networkmanagerapplet, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-network";
+ version = "2.1.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "12lvcc15jngzsa40fjhxa6kccs58h5qq4lqrc7lcx5przmfaik8k";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ networkmanager
+ networkmanagerapplet
+ switchboard
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./nma.patch;
+ networkmanagerapplet = "${networkmanagerapplet}";
+ })
+ ];
+
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Networking Plug";
+ homepage = https://github.com/elementary/switchboard-plug-network;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch
new file mode 100644
index 000000000000..a5fff9d6a32b
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch
@@ -0,0 +1,43 @@
+diff --git a/src/Widgets/SettingsButton.vala b/src/Widgets/SettingsButton.vala
+index 19fd514..bc800d9 100644
+--- a/src/Widgets/SettingsButton.vala
++++ b/src/Widgets/SettingsButton.vala
+@@ -23,7 +23,7 @@
+ label = _("Edit Connections…");
+ clicked.connect (() => {
+ try {
+- var appinfo = AppInfo.create_from_commandline ("nm-connection-editor", null, AppInfoCreateFlags.NONE);
++ var appinfo = AppInfo.create_from_commandline ("@networkmanagerapplet@/bin/nm-connection-editor", null, AppInfoCreateFlags.NONE);
+ appinfo.launch (null, null);
+ } catch (Error e) {
+ warning ("%s", e.message);
+@@ -61,13 +61,13 @@
+ label = title;
+ clicked.connect (() => {
+ edit_connection_uuid (connection.get_uuid ());
+- });
++ });
+ }
+
+ private void edit_connection_uuid (string uuid) {
+ try {
+ var appinfo = AppInfo.create_from_commandline (
+- "nm-connection-editor --edit=%s".printf (uuid), null, AppInfoCreateFlags.NONE
++ "@networkmanagerapplet@/bin/nm-connection-editor --edit=%s".printf (uuid), null, AppInfoCreateFlags.NONE
+ );
+
+ appinfo.launch (null, null);
+diff --git a/src/Widgets/VPN/VPNPage.vala b/src/Widgets/VPN/VPNPage.vala
+index 23c3ae9..c71984c 100644
+--- a/src/Widgets/VPN/VPNPage.vala
++++ b/src/Widgets/VPN/VPNPage.vala
+@@ -86,8 +86,7 @@ namespace Network {
+ add_button.tooltip_text = _("Add VPN Connection…");
+ add_button.clicked.connect (() => {
+ add_button.sensitive = false;
+- var command = new Granite.Services.SimpleCommand ("/usr/bin",
+- "nm-connection-editor --create --type=vpn");
++ var command = new Granite.Services.SimpleCommand ("@networkmanagerapplet@", "bin/nm-connection-editor --create --type=vpn");
+ command.done.connect ((exit) => {
+ if (exit != 0) {
+ var dialog = new Gtk.MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, "%s", _("Failed to run Connection Editor."));
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix
new file mode 100644
index 000000000000..6bb5d285a34f
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-notifications";
+ version = "2.1.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0p0aj3bbjrh6x8wajqqb5yqm2iqfnj7kp16zf4hdr4siw0sx5p8n";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Notifications Plug";
+ homepage = https://github.com/elementary/switchboard-plug-notifications;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix
new file mode 100644
index 000000000000..0417d33df7d7
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, vala
+, libgee, granite, gtk3, libaccounts-glib, libsignon-glib, json-glib
+, librest, webkitgtk, libsoup, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-onlineaccounts";
+ version = "2.0.1";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "03h8ii8zz59fpp4fwlvyx3m3550096fn7a6w612b1rbj3dqhlmh9";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ json-glib
+ libaccounts-glib
+ libgee
+ libsignon-glib
+ libsoup
+ librest
+ switchboard
+ webkitgtk
+ ];
+
+ PKG_CONFIG_LIBACCOUNTS_GLIB_PROVIDERFILESDIR = "${placeholder "out"}/share/accounts/providers";
+ PKG_CONFIG_LIBACCOUNTS_GLIB_SERVICEFILESDIR = "${placeholder "out"}/share/accounts/services";
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
+
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Online Accounts Plug";
+ homepage = https://github.com/elementary/switchboard-plug-onlineaccounts;
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch
new file mode 100644
index 000000000000..a1b019179d1b
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch
@@ -0,0 +1,26 @@
+diff --git a/set-wallpaper-contract/set-wallpaper.vala b/set-wallpaper-contract/set-wallpaper.vala
+index 3e02089..7ce7041 100644
+--- a/set-wallpaper-contract/set-wallpaper.vala
++++ b/set-wallpaper-contract/set-wallpaper.vala
+@@ -38,7 +38,7 @@ namespace SetWallpaperContractor {
+ </transition>
+ """;
+
+- const string SYSTEM_BACKGROUNDS_PATH = "/usr/share/backgrounds";
++ const string SYSTEM_BACKGROUNDS_PATH = "/run/current-system/sw/share/backgrounds";
+
+ private int delay_value = 60;
+
+diff --git a/src/Views/Wallpaper.vala b/src/Views/Wallpaper.vala
+index 4be14fa..aa8832f 100644
+--- a/src/Views/Wallpaper.vala
++++ b/src/Views/Wallpaper.vala
+@@ -38,7 +38,7 @@ public class Wallpaper : Gtk.Grid {
+ FileAttribute.THUMBNAIL_IS_VALID
+ };
+
+- const string SYSTEM_BACKGROUNDS_PATH = "/usr/share/backgrounds";
++ const string SYSTEM_BACKGROUNDS_PATH = "/run/current-system/sw/share/backgrounds";
+
+ public Switchboard.Plug plug { get; construct set; }
+ private GLib.Settings settings;
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
new file mode 100644
index 000000000000..e47dc4c4060c
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, vala
+, libgee, granite, gexiv2, elementary-settings-daemon, gtk3, gnome-desktop
+, gala, wingpanel, plank, switchboard, gettext, gobject-introspection, bamf }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-pantheon-shell";
+ version = "2.8.0";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0yy821hl26jfd9hyigqi7nmaf30iww0lhg9qzcwlfzsvvfwnxagi";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gettext
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ bamf
+ gexiv2
+ gnome-desktop
+ elementary-settings-daemon
+ granite
+ gtk3
+ libgee
+ plank
+ switchboard
+ ];
+
+ patches = [
+ ./backgrounds.patch # Having https://github.com/elementary/switchboard-plug-pantheon-shell/issues/166 would make this patch uneeded
+ ./hardcode-gsettings.patch
+ ];
+
+ postPatch = ''
+ substituteInPlace src/Views/Appearance.vala --subst-var-by GALA_GSETTINGS_PATH ${gala}/share/gsettings-schemas/${gala.name}/glib-2.0/schemas
+ substituteInPlace src/Views/Appearance.vala --subst-var-by WINGPANEL_GSETTINGS_PATH ${wingpanel}/share/gsettings-schemas/${wingpanel.name}/glib-2.0/schemas
+ '';
+
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Desktop Plug";
+ homepage = https://github.com/elementary/switchboard-plug-pantheon-shell;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch
new file mode 100644
index 000000000000..d023e1b55ce6
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch
@@ -0,0 +1,23 @@
+diff --git a/src/Views/Appearance.vala b/src/Views/Appearance.vala
+index 721d458..17e1c58 100644
+--- a/src/Views/Appearance.vala
++++ b/src/Views/Appearance.vala
+@@ -66,10 +66,16 @@ public class Appearance : Gtk.Grid {
+ attach (text_size_label, 0, 2);
+ attach (text_size_modebutton, 1, 2);
+
+- var animations_settings = new Settings (ANIMATIONS_SCHEMA);
++ SettingsSchemaSource gala_schema_source = new SettingsSchemaSource.from_directory ("@GALA_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
++ SettingsSchema animations_schema = gala_schema_source.lookup (ANIMATIONS_SCHEMA, false);
++
++ var animations_settings = new Settings.full (animations_schema, null, null);
+ animations_settings.bind (ANIMATIONS_KEY, animations_switch, "active", SettingsBindFlags.DEFAULT);
+
+- var panel_settings = new Settings (PANEL_SCHEMA);
++ SettingsSchemaSource panel_schema_source = new SettingsSchemaSource.from_directory ("@WINGPANEL_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
++ SettingsSchema panel_schema = panel_schema_source.lookup (PANEL_SCHEMA, false);
++
++ var panel_settings = new Settings.full (panel_schema, null, null);
+ panel_settings.bind (TRANSLUCENCY_KEY, translucency_switch, "active", SettingsBindFlags.DEFAULT);
+
+ var interface_settings = new Settings (INTERFACE_SCHEMA);
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
new file mode 100644
index 000000000000..dd8e2974a495
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchFromGitHub, pantheon, substituteAll, meson, ninja
+, pkgconfig, vala, libgee, elementary-dpms-helper, elementary-settings-daemon
+, makeWrapper, granite, gtk3, dbus, polkit, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-power";
+ version = "2.3.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0kfnnghyzvy368sh39j4jdl7cnz2yc239hp00054lc4rjs8m61nv";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ dbus
+ granite
+ gtk3
+ libgee
+ polkit
+ switchboard
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./dpms-helper-exec.patch;
+ elementary_dpms_helper = "${elementary-dpms-helper}";
+ })
+ ./hardcode-gsettings.patch
+ ];
+
+ postPatch = ''
+ substituteInPlace src/MainView.vala --subst-var-by DPMS_HELPER_GSETTINGS_PATH ${elementary-dpms-helper}/share/gsettings-schemas/${elementary-dpms-helper.name}/glib-2.0/schemas
+ substituteInPlace src/MainView.vala --subst-var-by GSD_GSETTINGS_PATH ${elementary-settings-daemon}/share/gsettings-schemas/${elementary-settings-daemon.name}/glib-2.0/schemas
+ '';
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+ PKG_CONFIG_DBUS_1_SYSTEM_BUS_SERVICES_DIR = "share/dbus-1/system-services";
+ PKG_CONFIG_DBUS_1_SYSCONFDIR = "etc";
+ PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "share/polkit-1/actions";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Power Plug";
+ homepage = https://github.com/elementary/switchboard-plug-power;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch
new file mode 100644
index 000000000000..335d3f296262
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch
@@ -0,0 +1,13 @@
+diff --git a/src/MainView.vala b/src/MainView.vala
+index 1654e68..175f220 100644
+--- a/src/MainView.vala
++++ b/src/MainView.vala
+@@ -317,7 +317,7 @@ public class Power.MainView : Gtk.Grid {
+
+ private static void run_dpms_helper () {
+ try {
+- string[] argv = { "io.elementary.dpms-helper" };
++ string[] argv = { "@elementary_dpms_helper@/bin/io.elementary.dpms-helper" };
+ Process.spawn_async (null, argv, Environ.get (),
+ SpawnFlags.SEARCH_PATH | SpawnFlags.STDERR_TO_DEV_NULL | SpawnFlags.STDOUT_TO_DEV_NULL,
+ null, null);
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch
new file mode 100644
index 000000000000..caacdad6eda9
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch
@@ -0,0 +1,20 @@
+diff --git a/src/MainView.vala b/src/MainView.vala
+index 1654e68..ad8fed9 100644
+--- a/src/MainView.vala
++++ b/src/MainView.vala
+@@ -46,8 +46,13 @@ public class Power.MainView : Gtk.Grid {
+
+ var label_size = new Gtk.SizeGroup (Gtk.SizeGroupMode.HORIZONTAL);
+
+- settings = new GLib.Settings ("org.gnome.settings-daemon.plugins.power");
+- elementary_dpms_settings = new GLib.Settings ("io.elementary.dpms");
++ SettingsSchemaSource gsd_sss = new SettingsSchemaSource.from_directory ("@GSD_GSETTINGS_PATH@", null, true);
++ SettingsSchema gsd_schema = gsd_sss.lookup ("org.gnome.settings-daemon.plugins.power", false);
++ settings = new GLib.Settings.full (gsd_schema, null, null);
++
++ SettingsSchemaSource dpms_sss = new SettingsSchemaSource.from_directory ("@DPMS_HELPER_GSETTINGS_PATH@", null, true);
++ SettingsSchema elementary_dpms_schema = dpms_sss.lookup ("io.elementary.dpms", false);
++ elementary_dpms_settings = new GLib.Settings.full (elementary_dpms_schema, null, null);
+
+ battery = new Battery ();
+ power_supply = new PowerSupply ();
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
new file mode 100644
index 000000000000..bb9e576a4c49
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, cups, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-printers";
+ version = "2.1.6";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "05pkf3whh51gd9d0h2h4clgf7r3mvzl4ybas7834vhy19dzcbzmc";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ cups
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Printers Plug";
+ homepage = https://github.com/elementary/switchboard-plug-printers;
+ license = licenses.lgpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
new file mode 100644
index 000000000000..4060e0717891
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, python3, ninja
+, pkgconfig, vala, libgee, granite, gtk3, polkit, zeitgeist
+, switchboard, lightlocker, pantheon-agent-geoclue2, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-security-privacy";
+ version = "2.2.0";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0f1idh36hlgmdva5jn0xnj2b6gbic0asnj3b7j283gyziibm3pxa";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ polkit
+ switchboard
+ zeitgeist
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ patches = [
+ ./hardcode-gsettings.patch
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+
+ substituteInPlace src/Views/LockPanel.vala --subst-var-by LIGHTLOCKER_GSETTINGS_PATH ${lightlocker}/share/gsettings-schemas/${lightlocker.name}/glib-2.0/schemas
+ substituteInPlace src/Views/FirewallPanel.vala --subst-var-by SWITCHBOARD_SEC_PRIV_GSETTINGS_PATH $out/share/gsettings-schemas/${pname}-${version}/glib-2.0/schemas
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Security & Privacy Plug";
+ homepage = https://github.com/elementary/switchboard-plug-security-privacy;
+ license = licenses.lgpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch
new file mode 100644
index 000000000000..ffaf1ecf5db1
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch
@@ -0,0 +1,36 @@
+diff --git a/src/Views/FirewallPanel.vala b/src/Views/FirewallPanel.vala
+index 994c4d1..5702de2 100644
+--- a/src/Views/FirewallPanel.vala
++++ b/src/Views/FirewallPanel.vala
+@@ -49,10 +49,13 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage {
+ }
+
+ construct {
+- settings = new Settings ("io.elementary.switchboard.security-privacy");
++ SettingsSchemaSource sss = new SettingsSchemaSource.from_directory ("@SWITCHBOARD_SEC_PRIV_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
++ SettingsSchema security_privacy_schema = sss.lookup ("io.elementary.switchboard.security-privacy", false);
++ settings = new Settings.full (security_privacy_schema, null, null);
++
+ disabled_rules = new Gee.HashMap<string, UFWHelpers.Rule> ();
+ load_disabled_rules ();
+-
++
+ status_switch.notify["active"].connect (() => {
+ if (loading == false) {
+ view.sensitive = status_switch.active;
+diff --git a/src/Views/LockPanel.vala b/src/Views/LockPanel.vala
+index 081cf10..42f6118 100644
+--- a/src/Views/LockPanel.vala
++++ b/src/Views/LockPanel.vala
+@@ -30,7 +30,10 @@ public class SecurityPrivacy.LockPanel : Granite.SimpleSettingsPage {
+ }
+
+ construct {
+- locker = new Settings ("apps.light-locker");
++ SettingsSchemaSource sss = new SettingsSchemaSource.from_directory ("@LIGHTLOCKER_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true);
++ SettingsSchema locker_schema = sss.lookup ("apps.light-locker", false);
++
++ locker = new Settings.full (locker_schema, null, null);
+
+ var lock_suspend_label = new Gtk.Label (_("Lock on sleep:"));
+ var lock_suspend_switch = new Gtk.Switch ();
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix
new file mode 100644
index 000000000000..a2c047ffcb41
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-sharing";
+ version = "2.1.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1yi6aga9i18wwn22zwmfbhsk16f92fka837is5r8xghqb7a50hyh";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Sharing Plug";
+ homepage = https://github.com/elementary/switchboard-plug-sharing;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
new file mode 100644
index 000000000000..e4d0db46923b
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig
+, vala, libgee, granite, gtk3, pulseaudio, libcanberra, libcanberra-gtk3
+, switchboard, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-sound";
+ version = "2.1.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0dvxmjziifffa2rm7h43ca5grhlcpih3rgik50mz808mqfxr4l1q";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libcanberra
+ libcanberra-gtk3
+ libgee
+ pulseaudio
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "lib/switchboard";
+
+ meta = with stdenv.lib; {
+ description = "Switchboard Sound Plug";
+ homepage = https://github.com/elementary/switchboard-plug-sound;
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard/default.nix b/pkgs/desktops/pantheon/apps/switchboard/default.nix
new file mode 100644
index 000000000000..310230c7aacc
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, python3, ninja
+, vala, gtk3, libgee, granite, gettext, clutter-gtk, libunity
+, elementary-icon-theme, wrapGAppsHook, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard";
+ version = "2.3.6";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0lsrn636b0f9a58jbid6mlhgrf8ajnh7phwmhgxz55sz7k7qa58g";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gettext
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ clutter-gtk
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ libunity
+ ];
+
+ patches = [ ./plugs-path-env.patch ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Extensible System Settings app for Pantheon";
+ homepage = https://github.com/elementary/switchboard;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch b/pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch
new file mode 100644
index 000000000000..f5d8567bffed
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch
@@ -0,0 +1,25 @@
+diff --git a/lib/PlugsManager.vala b/lib/PlugsManager.vala
+index 75d0eaf..c227908 100644
+--- a/lib/PlugsManager.vala
++++ b/lib/PlugsManager.vala
+@@ -34,10 +34,18 @@ public class Switchboard.PlugsManager : GLib.Object {
+ private Gee.LinkedList<Switchboard.Plug> plugs;
+
+ public signal void plug_added (Switchboard.Plug plug);
+-
++
+ private PlugsManager () {
+ plugs = new Gee.LinkedList<Switchboard.Plug> ();
+- var base_folder = File.new_for_path (Build.PLUGS_DIR);
++
++ var plugs_path = Environment.get_variable("SWITCHBOARD_PLUGS_PATH");
++ if (plugs_path != null) {
++ debug ("SWITCHBOARD_PLUGS_PATH set to %s", plugs_path);
++ } else {
++ critical ("SWITCHBOARD_PLUGS_PATH not set");
++ }
++
++ var base_folder = File.new_for_path (plugs_path);
+ find_plugins (base_folder);
+ }
+
diff --git a/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix b/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix
new file mode 100644
index 000000000000..cae8e74f4ba7
--- /dev/null
+++ b/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix
@@ -0,0 +1,19 @@
+{ stdenv, makeWrapper, symlinkJoin, switchboard, switchboardPlugs, plugs }:
+
+let
+ selectedPlugs = if plugs == null then switchboardPlugs else plugs;
+in
+symlinkJoin {
+ name = "${switchboard.name}-with-plugs";
+
+ paths = [ switchboard ] ++ selectedPlugs;
+
+ buildInputs = [ makeWrapper ];
+
+ postBuild = ''
+ wrapProgram $out/bin/io.elementary.switchboard \
+ --set SWITCHBOARD_PLUGS_PATH "$out/lib/switchboard"
+ '';
+
+ inherit (switchboard) meta;
+}
diff --git a/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix b/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix
new file mode 100644
index 000000000000..2f7e79f9f9b3
--- /dev/null
+++ b/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja }:
+
+stdenv.mkDerivation rec {
+ pname = "stylesheet";
+ version = "5.2.1";
+
+ name = "elementary-gtk-theme-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "03l8m87f7z25svxk0hhcqnn4qnnqvasr5qwzq3s87lx25gwjml29";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-gtk-theme";
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ ];
+
+ meta = with stdenv.lib; {
+ description = "GTK theme designed to be smooth, attractive, fast, and usable";
+ homepage = https://github.com/elementary/stylesheet;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix b/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix
new file mode 100644
index 000000000000..f70186585ece
--- /dev/null
+++ b/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, python3,ninja, hicolor-icon-theme, gtk3 }:
+
+stdenv.mkDerivation rec {
+ pname = "icons";
+ version = "5.0.2";
+
+ name = "elementary-icon-theme-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "12j582f0kggv2lp935r75xg7q26zpl0f05s11xcs4qxazhj1ly2r";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-icon-theme";
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ python3
+ ];
+
+ buildInputs = [ gtk3 ];
+
+ propagatedBuildInputs = [ hicolor-icon-theme ];
+
+ mesonFlags = [
+ "-Dvolume_icons=false" # Tries to install some icons to /
+ "-Dpalettes=false" # Don't install gimp and inkscape palette files
+ ];
+
+ postPatch = ''
+ chmod +x meson/symlink.py
+ patchShebangs meson/symlink.py
+ '';
+
+ postFixup = "gtk-update-icon-cache $out/share/icons/elementary";
+
+ meta = with stdenv.lib; {
+ description = "Named, vector icons for elementary OS";
+ longDescription = ''
+ An original set of vector icons designed specifically for elementary OS and its desktop environment: Pantheon.
+ '';
+ homepage = https://github.com/elementary/icons;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix b/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix
new file mode 100644
index 000000000000..430acfd9ac1a
--- /dev/null
+++ b/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig }:
+
+stdenv.mkDerivation rec {
+ pname = "sound-theme";
+ version = "1.0";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1dc583lq61c361arjl3s44d2k72c46bqvcqv1c3s69f2ndsnxjdz";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ ];
+
+ meta = with stdenv.lib; {
+ description = "A set of system sounds for elementary";
+ homepage = https://github.com/elementary/sound-theme;
+ license = licenses.unlicense;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix b/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix
new file mode 100644
index 000000000000..898d5f7b454f
--- /dev/null
+++ b/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, pantheon }:
+
+stdenv.mkDerivation rec {
+ pname = "wallpapers";
+ version = "5.3";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1i0zf9gzhwm8hgq5cp1xnxipqjvgzd9wfiicz612hgp6ivc0z0ag";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ dontBuild = true;
+
+ installPhase = ''
+ mkdir -p $out/share/backgrounds/elementary
+ cp -av *.jpg $out/share/backgrounds/elementary
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Collection of wallpapers for elementary";
+ homepage = https://github.com/elementary/wallpapers;
+ license = licenses.publicDomain;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
+
diff --git a/pkgs/desktops/pantheon/default.nix b/pkgs/desktops/pantheon/default.nix
new file mode 100644
index 000000000000..a7b8a01eeb0b
--- /dev/null
+++ b/pkgs/desktops/pantheon/default.nix
@@ -0,0 +1,222 @@
+{ pkgs, lib, gnome3 }:
+
+
+lib.makeScope pkgs.newScope (self: with self; {
+
+ apps = [
+ elementary-calculator elementary-calendar
+ elementary-camera elementary-code elementary-files
+ elementary-music elementary-photos elementary-screenshot-tool
+ elementary-terminal elementary-videos switchboard-with-plugs
+ ];
+
+ artwork = [
+ elementary-gtk-theme
+ elementary-icon-theme
+ elementary-sound-theme
+ elementary-wallpapers
+ ];
+
+ desktop = [
+ elementary-session-settings
+ elementary-shortcut-overlay
+ gala
+ wingpanel-with-indicators
+ ];
+
+ services = [
+ cerbere
+ elementary-capnet-assist
+ elementary-settings-daemon
+ elementary-dpms-helper
+ pantheon-agent-geoclue2
+ pantheon-agent-polkit
+ ];
+
+ switchboardPlugs = [
+ switchboard-plug-a11y switchboard-plug-about
+ switchboard-plug-applications switchboard-plug-bluetooth
+ switchboard-plug-datetime switchboard-plug-display
+ switchboard-plug-keyboard switchboard-plug-mouse-touchpad
+ switchboard-plug-network switchboard-plug-notifications
+ switchboard-plug-onlineaccounts switchboard-plug-pantheon-shell
+ switchboard-plug-power switchboard-plug-printers
+ switchboard-plug-security-privacy switchboard-plug-sharing
+ switchboard-plug-sound
+ ];
+
+ wingpanelIndicators = [
+ wingpanel-applications-menu wingpanel-indicator-bluetooth
+ wingpanel-indicator-datetime wingpanel-indicator-keyboard
+ wingpanel-indicator-network wingpanel-indicator-nightlight
+ wingpanel-indicator-notifications wingpanel-indicator-power
+ wingpanel-indicator-session wingpanel-indicator-sound
+ ];
+
+ updateScript = callPackage ./update.nix { };
+
+ maintainers = with pkgs.stdenv.lib.maintainers; [ worldofpeace ];
+
+ mutter = pkgs.gnome3.mutter328;
+ vala = pkgs.vala_0_40;
+
+ elementary-gsettings-schemas = callPackage ./desktop/elementary-gsettings-schemas { };
+
+ #### APPS
+
+ elementary-calculator = callPackage ./apps/elementary-calculator { };
+
+ elementary-calendar = callPackage ./apps/elementary-calendar { };
+
+ elementary-camera = callPackage ./apps/elementary-camera { };
+
+ elementary-code = callPackage ./apps/elementary-code { };
+
+ elementary-files = callPackage ./apps/elementary-files { };
+
+ elementary-music = callPackage ./apps/elementary-music { };
+
+ elementary-photos = callPackage ./apps/elementary-photos { };
+
+ elementary-screenshot-tool = callPackage ./apps/elementary-screenshot-tool { };
+
+ elementary-terminal = callPackage ./apps/elementary-terminal { };
+
+ elementary-videos = callPackage ./apps/elementary-videos { };
+
+ #### DESKTOP
+
+ elementary-default-settings = callPackage ./desktop/elementary-default-settings { };
+
+ elementary-greeter = callPackage ./desktop/elementary-greeter {
+ inherit (gnome3) gnome-desktop;
+ };
+
+ elementary-print-shim = callPackage ./desktop/elementary-print-shim { };
+
+ elementary-session-settings = callPackage ./desktop/elementary-session-settings {
+ inherit (gnome3) gnome-session gnome-keyring;
+ };
+
+ elementary-shortcut-overlay = callPackage ./desktop/elementary-shortcut-overlay { };
+
+ extra-elementary-contracts = callPackage ./desktop/extra-elementary-contracts {
+ inherit (gnome3) file-roller gnome-bluetooth;
+ };
+
+ gala = callPackage ./desktop/gala {
+ inherit (gnome3) gnome-desktop;
+ };
+
+ wingpanel = callPackage ./desktop/wingpanel { };
+
+ wingpanel-with-indicators = callPackage ./desktop/wingpanel/wrapper.nix {
+ indicators = null;
+ };
+
+ #### LIBRARIES
+
+ granite = callPackage ./granite { };
+
+ #### SERVICES
+
+ cerbere = callPackage ./services/cerbere { };
+
+ contractor = callPackage ./services/contractor { };
+
+ elementary-capnet-assist = callPackage ./services/elementary-capnet-assist { };
+
+ elementary-dpms-helper = callPackage ./services/elementary-dpms-helper { };
+
+ # We're using ubuntu and elementary's patchset due to reasons
+ # explained here -> https://github.com/elementary/greeter/issues/92#issuecomment-376215614
+ # Take note of "I am holding off on "fixing" this bug for as long as possible."
+ elementary-settings-daemon = callPackage ./services/elementary-settings-daemon {
+ inherit (gnome3) libgweather;
+ };
+
+ pantheon-agent-geoclue2 = callPackage ./services/pantheon-agent-geoclue2 { };
+
+ pantheon-agent-polkit = callPackage ./services/pantheon-agent-polkit { };
+
+ #### WINGPANEL INDICATORS
+
+ wingpanel-applications-menu = callPackage ./desktop/wingpanel-indicators/applications-menu { };
+
+ wingpanel-indicator-bluetooth = callPackage ./desktop/wingpanel-indicators/bluetooth { };
+
+ wingpanel-indicator-datetime = callPackage ./desktop/wingpanel-indicators/datetime { };
+
+ wingpanel-indicator-keyboard = callPackage ./desktop/wingpanel-indicators/keyboard { };
+
+ wingpanel-indicator-network = callPackage ./desktop/wingpanel-indicators/network {
+ inherit (gnome3) networkmanagerapplet;
+ };
+
+ wingpanel-indicator-nightlight = callPackage ./desktop/wingpanel-indicators/nightlight { };
+
+ wingpanel-indicator-notifications = callPackage ./desktop/wingpanel-indicators/notifications { };
+
+ wingpanel-indicator-power = callPackage ./desktop/wingpanel-indicators/power { };
+
+ wingpanel-indicator-session = callPackage ./desktop/wingpanel-indicators/session { };
+
+ wingpanel-indicator-sound = callPackage ./desktop/wingpanel-indicators/sound { };
+
+ #### SWITCHBOARD
+
+ switchboard = callPackage ./apps/switchboard { };
+
+ switchboard-with-plugs = callPackage ./apps/switchboard/wrapper.nix {
+ plugs = null;
+ };
+
+ switchboard-plug-a11y = callPackage ./apps/switchboard-plugs/a11y { };
+
+ switchboard-plug-about = callPackage ./apps/switchboard-plugs/about { };
+
+ switchboard-plug-applications = callPackage ./apps/switchboard-plugs/applications { };
+
+ switchboard-plug-bluetooth = callPackage ./apps/switchboard-plugs/bluetooth { };
+
+ switchboard-plug-datetime = callPackage ./apps/switchboard-plugs/datetime { };
+
+ switchboard-plug-display = callPackage ./apps/switchboard-plugs/display { };
+
+ switchboard-plug-keyboard = callPackage ./apps/switchboard-plugs/keyboard { };
+
+ switchboard-plug-mouse-touchpad = callPackage ./apps/switchboard-plugs/mouse-touchpad { };
+
+ switchboard-plug-network = callPackage ./apps/switchboard-plugs/network {
+ inherit (gnome3) networkmanagerapplet;
+ };
+
+ switchboard-plug-notifications = callPackage ./apps/switchboard-plugs/notifications { };
+
+ switchboard-plug-onlineaccounts = callPackage ./apps/switchboard-plugs/onlineaccounts { };
+
+ switchboard-plug-pantheon-shell = callPackage ./apps/switchboard-plugs/pantheon-shell {
+ inherit (gnome3) gnome-desktop;
+ };
+
+ switchboard-plug-power = callPackage ./apps/switchboard-plugs/power { };
+
+ switchboard-plug-printers = callPackage ./apps/switchboard-plugs/printers { };
+
+ switchboard-plug-security-privacy = callPackage ./apps/switchboard-plugs/security-privacy { };
+
+ switchboard-plug-sharing = callPackage ./apps/switchboard-plugs/sharing { };
+
+ switchboard-plug-sound = callPackage ./apps/switchboard-plugs/sound { };
+
+ ### ARTWORK
+
+ elementary-gtk-theme = callPackage ./artwork/elementary-gtk-theme { };
+
+ elementary-icon-theme = callPackage ./artwork/elementary-icon-theme { };
+
+ elementary-sound-theme = callPackage ./artwork/elementary-sound-theme { };
+
+ elementary-wallpapers = callPackage ./artwork/elementary-wallpapers { };
+
+})
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 000000000000..438ed79d1bb0
--- /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 000000000000..f133324a81ec
--- /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 000000000000..0cff31f4f777
--- /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 000000000000..b25bb8c85904
--- /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 000000000000..3bd7d531840d
--- /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 000000000000..494edde183ca
--- /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 000000000000..89536754964d
--- /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 000000000000..312c35d9bf00
--- /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 000000000000..3b0f721a5644
--- /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 000000000000..b0218bac52d7
--- /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 000000000000..8b04efe417ea
--- /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 000000000000..626e56ce5960
--- /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 000000000000..303aae6882b8
--- /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 000000000000..1770d54aee0d
--- /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 000000000000..2c7766b4284c
--- /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 000000000000..bd5688f941b2
--- /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 000000000000..d8634b48570d
--- /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 000000000000..517a9457ae10
--- /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 000000000000..fddd4143616e
--- /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 000000000000..6ceebf1980c6
--- /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 000000000000..4e19a65b58d4
--- /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 000000000000..3b97e306119d
--- /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 000000000000..97acc2c791bf
--- /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 000000000000..e83308ea5526
--- /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 000000000000..264a4a5b26da
--- /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 000000000000..e4f7df107ba8
--- /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 000000000000..f17e2581e07e
--- /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 000000000000..16f3ae2e28e0
--- /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 000000000000..2370fbcd3cb2
--- /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 000000000000..ee5cd5118186
--- /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 000000000000..e2faccedbb70
--- /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 000000000000..58e6853e606e
--- /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 000000000000..8cb71dd43d6d
--- /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.1";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0k039qqlpwhl34mdhwjqhp7bz8vi432p0zfxzcdhsjhglpk8srlw";
+ };
+
+ 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 000000000000..53754c31d874
--- /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 000000000000..aff7d9891adf
--- /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 000000000000..e6c5edd7ca68
--- /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.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1rkqa27bsfai4psp19sy61in6730da0s7nds7dkcf06a0hvjvjc2";
+ };
+
+ 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 000000000000..b910f6a71809
--- /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 000000000000..003e431bcf7e
--- /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 000000000000..a5ca227bbc20
--- /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 000000000000..68a5fd532a8d
--- /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 000000000000..cfae604d3a53
--- /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;
+}
diff --git a/pkgs/development/libraries/granite/02-datetime-clock-format-gsettings.patch b/pkgs/desktops/pantheon/granite/02-datetime-clock-format-gsettings.patch
index 7b7c9871133a..7b7c9871133a 100644
--- a/pkgs/development/libraries/granite/02-datetime-clock-format-gsettings.patch
+++ b/pkgs/desktops/pantheon/granite/02-datetime-clock-format-gsettings.patch
diff --git a/pkgs/development/libraries/granite/default.nix b/pkgs/desktops/pantheon/granite/default.nix
index eacb84e33616..fe0e880ccb2c 100644
--- a/pkgs/development/libraries/granite/default.nix
+++ b/pkgs/desktops/pantheon/granite/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, python3, meson, ninja, vala_0_40, pkgconfig, gobject-introspection, gnome3, gtk3, glib, gettext, hicolor-icon-theme, wrapGAppsHook }:
+{ stdenv, fetchFromGitHub, fetchpatch, python3, meson, ninja, vala, pkgconfig, gobject-introspection, libgee, pantheon, gtk3, glib, gettext, hicolor-icon-theme, wrapGAppsHook }:
stdenv.mkDerivation rec {
pname = "granite";
@@ -26,6 +26,12 @@ stdenv.mkDerivation rec {
./02-datetime-clock-format-gsettings.patch
];
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
nativeBuildInputs = [
gettext
gobject-introspection
@@ -33,7 +39,7 @@ stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ vala
wrapGAppsHook
];
@@ -41,7 +47,7 @@ stdenv.mkDerivation rec {
glib
gtk3
hicolor-icon-theme
- gnome3.libgee
+ libgee
];
postPatch = ''
@@ -58,6 +64,6 @@ stdenv.mkDerivation rec {
homepage = https://github.com/elementary/granite;
license = licenses.lgpl3Plus;
platforms = platforms.linux;
- maintainers = with maintainers; [ vozz worldofpeace ];
+ maintainers = pantheon.maintainers;
};
}
diff --git a/pkgs/desktops/pantheon/services/cerbere/default.nix b/pkgs/desktops/pantheon/services/cerbere/default.nix
new file mode 100644
index 000000000000..59983469c114
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/cerbere/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, python3, ninja, glib, libgee, vala, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "cerbere";
+ version = "0.2.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0f9jr6q5z6nir5b77f96wm9rx6r6s9i0sr1yrymg3n7jyjgrvdwp";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ libgee
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A simple service to ensure uptime of essential processes";
+ homepage = https://github.com/elementary/cerbere;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+
+}
diff --git a/pkgs/desktops/pantheon/services/contractor/default.nix b/pkgs/desktops/pantheon/services/contractor/default.nix
new file mode 100644
index 000000000000..a979b1341954
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/contractor/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, python3, ninja, pkgconfig, vala, glib, libgee, dbus, glib-networking, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "contractor";
+ version = "0.3.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1jzqv7pglhhyrkj1pfk1l624zn1822wyl5dp6gvwn4sk3iqxwwhl";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ dbus
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ ];
+
+ buildInputs = [
+ glib
+ glib-networking
+ libgee
+ ];
+
+ PKG_CONFIG_DBUS_1_SESSION_BUS_SERVICES_DIR = "share/dbus-1/services";
+
+ meta = with stdenv.lib; {
+ description = "A desktop-wide extension service used by elementary OS";
+ homepage = https://github.com/elementarycontractor;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix b/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix
new file mode 100644
index 000000000000..85476b04805f
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, python3, ninja, vala
+, desktop-file-utils, gtk3, granite, libgee, gcr, webkitgtk, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "capnet-assist";
+ version = "2.2.2";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "138fxijnnp0gqzj7h0p9r4crpafas1kmvb3r9bb76mmygbdixkgh";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gcr
+ granite
+ gtk3
+ libgee
+ webkitgtk
+ ];
+
+ # Not useful here or in elementary - See: https://github.com/elementary/capnet-assist/issues/3
+ patches = [ ./remove-capnet-test.patch ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A small WebKit app that assists a user with login when a captive portal is detected";
+ homepage = https://github.com/elementary/capnet-assist;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch b/pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch
new file mode 100644
index 000000000000..a59c74f22b3b
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch
@@ -0,0 +1,13 @@
+diff --git a/meson.build b/meson.build
+index 46c594b..ba0ea10 100644
+--- a/meson.build
++++ b/meson.build
+@@ -33,8 +33,3 @@ meson.add_install_script('meson/post_install.py')
+
+ subdir('data')
+ subdir('po')
+-
+-install_data(
+- '90captive_portal_test',
+- install_dir: join_paths(get_option('sysconfdir'), 'NetworkManager', 'dispatcher.d')
+-)
diff --git a/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix b/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix
new file mode 100644
index 000000000000..4dab02d50834
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchFromGitHub, pantheon, makeWrapper, lib, meson, ninja, desktop-file-utils, glib, coreutils, elementary-settings-daemon, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "dpms-helper";
+ version = "1.0";
+
+ name = "elementary-${pname}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0svfp0qyb6nx4mjl3jx4aqmb4x24m25jpi75mdis3yfr3c1xz9nh";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ attrPath = "elementary-${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ makeWrapper
+ meson
+ ninja
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-settings-daemon
+ glib
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(--prefix PATH : "${stdenv.lib.makeBinPath [ glib.dev coreutils ]}")
+ '';
+
+ postFixup = ''
+ substituteInPlace $out/etc/xdg/autostart/io.elementary.dpms-helper.desktop \
+ --replace "Exec=io.elementary.dpms-helper" "Exec=$out/bin/io.elementary.dpms-helper"
+ '';
+
+ # See: https://github.com/elementary/dpms-helper/pull/10
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Sets DPMS settings found in org.pantheon.dpms";
+ homepage = https://github.com/elementary/dpms-helper;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix b/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
new file mode 100644
index 000000000000..99ca20afe988
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
@@ -0,0 +1,117 @@
+{ fetchurl, fetchgit, substituteAll, stdenv, meson, ninja, pkgconfig, gnome3, perl, gettext, glib, libnotify, lcms2, libXtst
+, libxkbfile, libpulseaudio, alsaLib, libcanberra-gtk3, upower, colord, libgweather, polkit
+, geoclue2, librsvg, xf86_input_wacom, udev, libgudev, libwacom, libxslt, libxml2, networkmanager
+, docbook_xsl, wrapGAppsHook, python3, ibus, xkeyboard_config, tzdata, nss, pantheon, accountsservice }:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-settings-daemon";
+ version = "3.30.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-settings-daemon/${stdenv.lib.versions.majorMinor version}/gnome-settings-daemon-${version}.tar.xz";
+ sha256 = "0c663csa3gnsr6wm0xfll6aani45snkdj7zjwjfzcwfh8w4a3z12";
+ };
+
+ # Source for ubuntu's patchset
+ src2 = fetchgit {
+ url = "https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/gnome-settings-daemon";
+ rev = "refs/tags/ubuntu/${version}-1ubuntu1";
+ sha256 = "02awkhw6jqm7yh812mw0nsdmsljfi8ksz8mvd2qpns5pcv002g2c";
+ };
+
+ # We've omitted the 53_sync_input_sources_to_accountsservice patch because it breaks the build.
+ # See: https://gist.github.com/worldofpeace/2f152a20b7c47895bb93239fce1c9f52
+ #
+ # Also omit ubuntu_calculator_snap.patch as that's obviously not useful here.
+ patches = let patchPath = "${src2}/debian/patches"; in [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit tzdata;
+ })
+ "${patchPath}/45_suppress-printer-may-not-be-connected-notification.patch"
+ "${patchPath}/64_restore_terminal_keyboard_shortcut_schema.patch"
+ "${patchPath}/correct_logout_action.patch"
+ "${patchPath}/ubuntu-lid-close-suspend.patch"
+ "${patchPath}/revert-wacom-migration.patch"
+ "${patchPath}/revert-gsettings-removals.patch"
+ "${patchPath}/revert-mediakeys-dbus-interface-drop.patch"
+ "${patchPath}/ubuntu_ibus_configs.patch"
+ (fetchurl {
+ url = "https://github.com/elementary/os-patches/raw/6975d1c254cb6ab913b8e2396877203aea8eaa65/debian/patches/elementary-dpms.patch";
+ sha256 = "0kh508ppiv4nvkg30gmw85cljlfq1bvkzhvf1iaxw0snb0mwgsxi";
+ })
+ ];
+
+ postPatch = ''
+ for f in gnome-settings-daemon/codegen.py plugins/power/gsd-power-constants-update.pl meson_post_install.py; do
+ chmod +x $f
+ patchShebangs $f
+ done
+ '';
+
+ postFixup = ''
+ 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
+
+ # This breaks lightlocker https://github.com/elementary/session-settings/commit/b0e7a2867608c3a3916f9e4e21a68264a20e44f8
+ rm $out/etc/xdg/autostart/org.gnome.SettingsDaemon.ScreensaverProxy-pantheon.desktop
+ '';
+
+ nativeBuildInputs = [
+ docbook_xsl
+ gettext
+ libxml2
+ libxslt
+ meson
+ ninja
+ perl
+ pkgconfig
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = with gnome3; [
+ accountsservice
+ alsaLib
+ colord
+ geoclue2
+ geocode-glib
+ glib
+ gnome-desktop
+ gsettings-desktop-schemas
+ gtk
+ ibus
+ lcms2
+ libXtst
+ libcanberra-gtk3
+ libgudev
+ libgweather
+ libnotify
+ libpulseaudio
+ librsvg
+ libwacom
+ libxkbfile
+ networkmanager
+ nss
+ polkit
+ udev
+ upower
+ xf86_input_wacom
+ xkeyboard_config
+ ];
+
+ mesonFlags = [
+ "-Dudev_dir=${placeholder "out"}/lib/udev"
+ ];
+
+ meta = with stdenv.lib; {
+ license = licenses.gpl2Plus;
+ maintainers = pantheon.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch b/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch
new file mode 100644
index 000000000000..2229302cab7c
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch
@@ -0,0 +1,15 @@
+--- a/plugins/datetime/tz.h
++++ b/plugins/datetime/tz.h
+@@ -27,11 +27,7 @@
+
+ #include <glib.h>
+
+-#ifndef __sun
+-# define TZ_DATA_FILE "/usr/share/zoneinfo/zone.tab"
+-#else
+-# define TZ_DATA_FILE "/usr/share/lib/zoneinfo/tab/zone_sun.tab"
+-#endif
++#define TZ_DATA_FILE "@tzdata@/share/zoneinfo/zone.tab"
+
+ typedef struct _TzDB TzDB;
+ typedef struct _TzLocation TzLocation;
diff --git a/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix b/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
new file mode 100644
index 000000000000..2487c4ba3af4
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, fetchpatch, pantheon, pkgconfig, meson, ninja, vala, glib
+, gtk3, libgee, desktop-file-utils, geoclue2, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "pantheon-agent-geoclue2";
+ version = "1.0.1";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0fww65dnbg9zn0gy1q2db39kjra50ykzw05pmn9iwxkijyxi8hm5";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ geoclue2
+ gtk3
+ libgee
+ ];
+
+ # This should be provided by a post_install.py script - See -> https://github.com/elementary/pantheon-agent-geoclue2/pull/21
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Pantheon Geoclue2 Agent";
+ homepage = https://github.com/elementary/pantheon-agent-geoclue2;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix b/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
new file mode 100644
index 000000000000..4fdaa4a8bf9f
--- /dev/null
+++ b/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, pantheon, pkgconfig, meson, ninja
+, vala, gtk3, libgee, polkit, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "pantheon-agent-polkit";
+ version = "0.1.6";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1g9l2jzpvv0dbvxh93w98a7ijsfqv3s3382li4s256179gihhd67";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libgee
+ polkit
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Polkit Agent for the Pantheon Desktop";
+ homepage = https://github.com/elementary/pantheon-agent-polkit;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/pkgs/desktops/pantheon/update.nix b/pkgs/desktops/pantheon/update.nix
new file mode 100644
index 000000000000..48fd2f2bf858
--- /dev/null
+++ b/pkgs/desktops/pantheon/update.nix
@@ -0,0 +1,18 @@
+{ stdenv, writeScript, runCommand, nix, bash, git, jq, nix-prefetch-scripts, coreutils, common-updater-scripts, gnugrep, gnused, curl }:
+{ repoName, attrPath ? repoName, versionPolicy ? "release" }:
+let
+ script = ./update.sh;
+
+ updateScript = runCommand "update.sh" {
+ inherit bash git jq nix coreutils gnugrep gnused curl;
+ # These weren't being substituted
+ nix_prefetch_scripts = nix-prefetch-scripts;
+ common_updater_scripts = common-updater-scripts;
+ } ''
+ substituteAll ${script} $out
+ chmod +x $out
+ '';
+
+ versionFlag = { "release" = "-r"; "master" = "-m"; }.${versionPolicy};
+
+in [ updateScript versionFlag repoName attrPath ]
diff --git a/pkgs/desktops/pantheon/update.sh b/pkgs/desktops/pantheon/update.sh
new file mode 100755
index 000000000000..9bbbe2600344
--- /dev/null
+++ b/pkgs/desktops/pantheon/update.sh
@@ -0,0 +1,223 @@
+#!@bash@/bin/bash
+PATH=@bash@/bin:@nix_prefetch_scripts@/bin:@common_updater_scripts@/bin:@git@/bin:@jq@/bin:@nix@/bin:@gnugrep@/bin:@gnused@/bin:@curl@/bin:$PATH
+#!/usr/bin/env bash
+
+set -eu -o pipefail
+
+#
+# ─── HOW TO USE ─────────────────────────────────────────────────────────────────
+#
+
+function usage ( ) {
+ cat <<EOF
+Usage: update.sh <repo_name> <attr>
+EOF
+}
+
+#
+# ─── POINTS YOU IN THE RIGHT DIRECTION ──────────────────────────────────────────
+#
+
+ function usage_tip ( ) {
+ echo 'run `update.sh -h` for usage instructions' >&2
+ exit 1
+ }
+
+#
+# ─── OPTIONS: RELEASE | MASTER ────────────────────────────────────────────────────
+#
+
+ while getopts ":hrm" opt; do
+ case $opt in
+ r)
+ release=1
+ master=0
+ ;;
+ m)
+ master=1
+ release=0
+ ;;
+ h)
+ usage
+ exit
+ ;;
+ ?)
+ echo "Invalid option: -$OPTARG" >&2
+ usage_tip
+ ;;
+ esac
+ done
+
+ shift $((OPTIND-1))
+
+#
+# ─── FAIL WITH MESSAGE AND NON-ZERO EXIT STATUS ─────────────────────────────────
+#
+
+ function fail ( ) {
+ echo "$1" >&2
+ exit 1
+ }
+
+#
+# ─── UPDATES PACKAGE TO LATEST TAGGED RELEASE ───────────────────────────────
+#
+
+ function update_to_latest_release ( ) {
+ repo_name="$1"
+ attr="$2"
+
+ version=$(get_latest_tag "$repo_name")
+ fetch=$(fetch "$repo_name" "refs/tags/${version}")
+ sha256=$(get_hash "${fetch}")
+
+ update-source-version "pantheon.$attr" "$version" "$sha256"
+
+ nix_file=$(get_file_path $attr)
+
+ if [ ! -f "$nix_file" ]; then
+ fail "Couldn't evaluate 'pantheon.$attr.meta.position' to locate the .nix file!"
+ fi
+
+ correct_rev "$attr" "$nix_file" "version"
+ }
+
+#
+# ─── UPDATES PACKAGE TO MASTER ──────────────────────────────────────────────────
+#
+
+ function update_to_master ( ) {
+ repo_name="$1"
+ attr="$2"
+
+ fetch=$(fetch "$repo_name" "refs/heads/master")
+
+ version=$(get_version "$fetch")
+ sha256=$(get_hash "$fetch")
+ proper_version=$(get_master_date "$fetch")
+
+ update-source-version "pantheon.$attr" "$proper_version" "$sha256"
+
+ nix_file=$(get_file_path $attr)
+
+ if [ ! -f "$nix_file" ]; then
+ fail "Couldn't evaluate 'pantheon.$attr.meta.position' to locate the .nix file!"
+ fi
+
+ correct_rev "$attr" "$nix_file" '"'$version'"'
+ }
+
+#
+# ─── GETS THE LATEST TAGGED RELEASE NAME FROM GITHUB ─────────────────────
+#
+
+ function get_latest_tag ( ) {
+ repo_name="$1"
+
+ # Using github release api because sorting this repo just doesn't work because of old git sillyness
+ # Also too lazy to care to adapt `git ls-remote` command to work with it
+ if [ $repo_name == "switchboard-plug-pantheon-shell" ]; then
+ curl --silent --show-error --fail -X GET "https://api.github.com/repos/elementary/$repo_name/releases/latest" | jq -r '.tag_name'
+ else
+ git ls-remote --tags --sort="v:refname" "https://github.com/elementary/$repo_name" | tail -n1 | sed 's/.*\///; s/\^{}//'
+ fi
+ }
+
+#
+# ─── FETCHES REPO AND RETURNS RELEVANT INFORMATION ──────────────────
+#
+
+ function fetch ( ) {
+ repo_name="$1"
+ version="$2"
+
+ base_url="https://github.com/elementary"
+ full_url="$base_url/$repo_name"
+
+ nix-prefetch-git --quiet --no-deepClone --url "$full_url" --rev "$version"
+ }
+
+#
+# ─── PARSES GIT REVISION FROM FETCH ─────────────────────────────────────────────
+#
+
+ function get_version ( ) {
+ fetch_info="$1"
+
+ echo "$fetch_info" | jq -r '.rev'
+ }
+
+#
+# ─── PARSES HASH FROM FETCH ─────────────────────────────────────────────────────
+#
+
+ function get_hash ( ) {
+ fetch_info="$1"
+
+ echo "$fetch_info" | jq -r '.sha256'
+ }
+
+#
+# ─── PARSES DATE FROM FETCH AND NORMALIZES IT TO NIXPKGS STANDARD ───────────────
+#
+
+ function get_master_date ( ) {
+ fetch_info="$1"
+
+ full_date=$(echo "$fetch_info" | jq -r '.date')
+ short_date=$(date -d "$full_date" +"%Y-%m-%d")
+
+ echo "unstable-$short_date"
+ }
+
+#
+# ─── RETURN NIX EXPRESSION PATH ─────────────────────────────────────────────────
+#
+
+ function get_file_path () {
+ attr="$1"
+
+ nix-instantiate --eval --strict -A "pantheon.$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/'
+ }
+
+#
+# ─── CORRECTS REV VERSION ───────────────────────────────────────────────────────────
+#
+
+ function correct_rev ( ) {
+ attr="$1"
+ nix_file="$2"
+ rev="$3"
+
+ check_pattern1='^\s*rev\s*=\s*"[0-9a-f]{5,40}"'
+ check_pattern2='^\s*rev\s*=\s*version'
+
+ replace_pattern1='/\brev\b\s*=/ s|\"[0-9a-f]{5,40}\"|'$rev'|'
+ replace_pattern2='/\brev\b\s*=/ s|version|'$rev'|'
+
+ if [ $(grep -c -P "$check_pattern1" "$nix_file") = 1 ]; then
+ pattern="$replace_pattern1"
+ elif [ $(grep -c -P "$check_pattern2" "$nix_file") = 1 ]; then
+ pattern="$replace_pattern2"
+ else
+ fail "Couldn't figure out where out where to patch in the correct version in pantheon.$attr!"
+ fi
+
+ sed -i.bak "$nix_file" -re "$pattern"
+ rm -f "$nix_file.bak"
+ }
+
+
+#
+# ─── WHETHER TO UPDATE TO RELEASE OR MASTER ──────────────────────────────────
+#
+
+ if [ $release = 1 ]; then
+ update_to_latest_release $1 $2
+ elif [ $master = 1 ]; then
+ update_to_master $1 $2
+ else
+ exit 1
+ fi
+
+# ────────────────────────────────────────────────────────────────────────────────
diff --git a/pkgs/tools/misc/hashit/default.nix b/pkgs/tools/misc/hashit/default.nix
index 0cb839c26ffc..f1f2fd9aa44d 100644
--- a/pkgs/tools/misc/hashit/default.nix
+++ b/pkgs/tools/misc/hashit/default.nix
@@ -1,11 +1,9 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, cmake, vala_0_40, python3, gnome3, gtk3, granite, gobject-introspection, desktop-file-utils, wrapGAppsHook }:
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, cmake, pantheon, python3, gnome3, gtk3, gobject-introspection, desktop-file-utils, wrapGAppsHook }:
stdenv.mkDerivation rec {
pname = "hashit";
version = "1.0.0";
- name = "${pname}-${version}";
-
src = fetchFromGitHub {
owner = "artemanufrij";
repo = pname;
@@ -20,14 +18,14 @@ stdenv.mkDerivation rec {
ninja
pkgconfig
python3
- vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
+ pantheon.vala
wrapGAppsHook
];
buildInputs = [
- gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
+ pantheon.elementary-icon-theme
gnome3.libgee
- granite
+ pantheon.granite
gtk3
];
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 817974d9a251..860db43fce6c 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10224,7 +10224,6 @@ in
gnome-menus = callPackage ../development/libraries/gnome-menus { };
- granite = callPackage ../development/libraries/granite { };
elementary-cmake-modules = callPackage ../development/libraries/elementary-cmake-modules { };
gtk2 = callPackage ../development/libraries/gtk+/2.x.nix {
@@ -21318,6 +21317,8 @@ in
mate = recurseIntoAttrs (callPackage ../desktops/mate { });
+ pantheon = recurseIntoAttrs (callPackage ../desktops/pantheon { });
+
maxx = callPackage ../desktops/maxx { };
plasma-applet-volumewin7mixer = libsForQt5.callPackage ../applications/misc/plasma-applet-volumewin7mixer { };