aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/desktops
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2019-10-05 12:43:18 +0000
committerKatharina Fey <kookie@spacekookie.de>2019-10-05 12:44:52 +0000
commitcf85056ba64caf3267d43255ef4a1243e9c8ee3b (patch)
tree3051519e9c8275b870aac43f80af875715c9d124 /nixpkgs/pkgs/desktops
parent1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (diff)
parent2436c27541b2f52deea3a4c1691216a02152e729 (diff)
Add 'nixpkgs/' from commit '2436c27541b2f52deea3a4c1691216a02152e729'
git-subtree-dir: nixpkgs git-subtree-mainline: 1148b1d122bc03e9a3665856c9b7bb96bd4e3994 git-subtree-split: 2436c27541b2f52deea3a4c1691216a02152e729
Diffstat (limited to 'nixpkgs/pkgs/desktops')
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dbus-factory/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-api/default.nix125
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-api/deps.nix102
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-calendar/default.nix49
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-control-center/default.nix111
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-control-center/fix-paths.patch65
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-daemon/default.nix133
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-daemon/deps.nix111
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-dock/dde-dock.plugins-dir.patch39
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-dock/default.nix86
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-dock/wrapper.nix21
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-mime-cache-paths.patch323
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-paths.patch89
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.pixmaps-paths.patch38
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-file-manager/default.nix250
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-launcher/default.nix75
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-network-utils/default.nix53
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-network-utils/fix-paths.patch23
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/dde-polkit-agent.plugins-dir.patch42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/default.nix50
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dde-session-ui/default.nix126
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-anything/default.nix63
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-calculator/default.nix48
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-desktop-base/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix68
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-gettext-tools/default.nix47
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-gtk-theme/default.nix27
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-icon-theme/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-image-viewer/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-menu/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-metacity/default.nix65
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-movie-reborn/default.nix56
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-mutter/deepin-mutter.plugins-dir.patch41
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-mutter/default.nix79
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-screenshot/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-shortcut-viewer/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-sound-theme/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-terminal/default.nix76
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-turbo/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-wallpapers/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/deepin/deepin-wm/default.nix75
-rw-r--r--nixpkgs/pkgs/desktops/deepin/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dtkcore/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dtkwidget/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/deepin/dtkwm/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-dbus-factory/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-dbus-generator/default.nix33
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-gir-generator/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/deepin/go-lib/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/deepin/qcef/default.nix103
-rw-r--r--nixpkgs/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/deepin/qt5integration/default.nix52
-rwxr-xr-xnixpkgs/pkgs/desktops/deepin/setup-hook.sh64
-rw-r--r--nixpkgs/pkgs/desktops/deepin/udisks2-qt5/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/deepin/update.nix38
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/default.nix16
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/econnman.nix29
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/efl-elua.patch14
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/efl.nix95
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/enlightenment.nix88
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/enlightenment.suid-exes.patch25
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/ephoto.nix30
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/rage.nix37
-rw-r--r--nixpkgs/pkgs/desktops/enlightenment/terminology.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python-desktop/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python/default.nix33
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/bindings/libglademm/default.nix17
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/default.nix94
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/gnome-icon-theme/default.nix20
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/gtksourceview/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/patches/mail-notification-dont-link-against-bsd-compat.patch10
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix20
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/vte/alt.patch50
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/vte/change-scroll-region.patch67
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/desktop/vte/default.nix61
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/GConf/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/ORBit2/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gnome-common/default.nix19
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix10
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gtkglext/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/01_remove-disable-deprecated.patch17
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/4.x.nix16
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/default.nix20
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libIDL/default.nix15
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix9
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libbonobo/default.nix21
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libbonoboui/default.nix18
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libglade/default.nix22
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/new-glib.patch65
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix17
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix13
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/cups_1.6.patch285
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/default.nix19
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/glib.patch38
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/bug653388.patch21
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix22
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix13
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeui/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix16
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix72
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix58
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix129
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix86
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/glade/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix48
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix66
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix85
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix48
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix59
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix56
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/nautilus-sendto/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix48
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/dconf/default.nix56
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix64
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix50
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix139
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix64
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch526
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix82
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch60
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch31
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch38
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch40
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch20
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gjs/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix22
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix27
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix74
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix183
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch167
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch15
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix53
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix67
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch38
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix129
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix65
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix99
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix64
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix74
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix59
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/unicode-data.nix45
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/mutter/0001-Revert-ClutterActor-Preserve-valid-paint-volumes-til.patch147
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.28.nix95
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix89
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths-328.patch13
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch13
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/nautilus/bubblewrap-paths.patch15
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch24
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch38
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix106
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix65
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/vino/default.nix98
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/yelp-tools/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/default.nix359
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix44
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix33
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch12
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix44
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix91
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch44
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/impatience.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/mediaplayer/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch56
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/nohotcorner/default.nix30
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch23
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch99
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/volume-mixer.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-grid.nix30
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py60
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix66
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix44
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/installer.nix15
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix99
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix158
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix100
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix94
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch37
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix27
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix62
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/gnome-3/update.nix16
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/back/default.nix24
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/base/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/base/fixup-paths.patch373
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/gorm/default.nix17
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/gui/default.nix16
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/gui/fixup-all.patch56
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/gworkspace/default.nix22
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/libobjc2/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/GNUstep.conf126
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/builder.sh122
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/fixup-paths.patch197
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/gsmakeDerivation.nix19
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/setup-hook.sh77
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/make/wrapper.sh4
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/projectcenter/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/gnustep/systempreferences/default.nix17
-rw-r--r--nixpkgs/pkgs/desktops/lumina/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/lumina/lumina-calculator/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/lumina/lumina-pdf/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/lumina/lumina/LuminaOS-NixOS.cpp.patch26
-rw-r--r--nixpkgs/pkgs/desktops/lumina/lumina/avoid-absolute-path-on-sessdir.patch11
-rw-r--r--nixpkgs/pkgs/desktops/lumina/lumina/default.nix89
-rw-r--r--nixpkgs/pkgs/desktops/lxde/core/lxappearance/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/lxde/core/lxappearance/lxappearance-0.6.3-xdg.system.data.dirs.patch27
-rw-r--r--nixpkgs/pkgs/desktops/lxde/core/lxmenu-data.nix20
-rw-r--r--nixpkgs/pkgs/desktops/lxde/core/lxpanel/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/lxde/core/lxrandr/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/lxde/core/lxtask/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/compton-conf/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/default.nix111
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/libfm-qt/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/liblxqt/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/libqtxdg/default.nix33
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/libsysstat/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lximage-qt/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-about/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-admin/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-archiver/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/LXQtConfigVars.cmake7
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/setup-hook.sh15
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-config/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-globalkeys/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-notificationd/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-panel/default.nix59
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-policykit/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-powermanagement/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-qtplugin/default.nix45
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-runner/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-session/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-sudo/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/lxqt-themes/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/obconf-qt/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/pavucontrol-qt/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/pcmanfm-qt/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/qlipper/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/qps/default.nix26
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/qterminal/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/qtermwidget/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/lxqt/screengrab/default.nix38
-rwxr-xr-xnixpkgs/pkgs/desktops/lxqt/update.sh39
-rw-r--r--nixpkgs/pkgs/desktops/mate/atril/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/mate/caja-dropbox/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/mate/caja-dropbox/fix-cli-paths.patch11
-rw-r--r--nixpkgs/pkgs/desktops/mate/caja-extensions/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/mate/caja-with-extensions/default.nix20
-rw-r--r--nixpkgs/pkgs/desktops/mate/caja/caja-extension-dirs.patch30
-rw-r--r--nixpkgs/pkgs/desktops/mate/caja/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/mate/default.nix93
-rw-r--r--nixpkgs/pkgs/desktops/mate/engrampa/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/mate/eom/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/mate/libmatekbd/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/mate/libmatemixer/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/mate/libmateweather/default.nix30
-rw-r--r--nixpkgs/pkgs/desktops/mate/marco/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-applets/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-backgrounds/default.nix21
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-calc/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-common/default.nix19
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-control-center/default.nix63
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-control-center/mate-control-center.keybindings-dir.patch106
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-desktop/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-icon-theme-faenza/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-icon-theme/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-indicator-applet/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-media/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-menus/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-netbook/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-notification-daemon/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-panel/default.nix47
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-polkit/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-power-manager/default.nix41
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-screensaver/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-sensors-applet/default.nix38
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-session-manager/default.nix39
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-settings-daemon/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-system-monitor/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-terminal/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-themes/default.nix30
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-user-guide/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-user-share/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/mate/mate-utils/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/mate/mozo/default.nix28
-rw-r--r--nixpkgs/pkgs/desktops/mate/pluma/default.nix37
-rw-r--r--nixpkgs/pkgs/desktops/mate/python-caja/default.nix34
-rwxr-xr-xnixpkgs/pkgs/desktops/mate/update.sh64
-rw-r--r--nixpkgs/pkgs/desktops/maxx/default.nix77
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix84
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-camera/default.nix83
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-code/default.nix98
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/default.nix96
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch22
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-music/default.nix100
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-photos/default.nix108
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix68
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix81
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/elementary-videos/default.nix77
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix63
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/fix-paths.patch13
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix65
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch13
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch55
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch12
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix67
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch13
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix69
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch22
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix66
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch63
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix67
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch43
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch26
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix70
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch23
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix81
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch13
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch20
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix78
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch36
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard/default.nix71
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch25
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix24
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix64
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/artwork/elementary-redacted-script/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix42
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/default.nix222
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch25
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix54
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist6
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem2
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix121
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/sysconfdir-install.patch25
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix55
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix47
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop8
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix123
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/pantheon-mimeapps.list168
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix63
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix43
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch34
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/gala/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch22
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch24
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix98
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix69
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix93
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix71
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch26
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix62
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix71
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/default.nix79
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch21
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix30
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/granite/default.nix79
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/cerbere/default.nix58
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/contractor/default.nix58
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch13
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix66
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix171
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch26
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/global-backlight-helper.patch26
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/pantheon/update.nix36
-rwxr-xr-xnixpkgs/pkgs/desktops/pantheon/update.sh223
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/bluedevil.nix14
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/breeze-grub.nix15
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/breeze-gtk.nix14
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/default.nix44
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/install-paths.patch19
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/series1
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/breeze-qt5.nix20
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/default.nix143
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/discover.nix20
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/fetch.sh1
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kactivitymanagerd.nix15
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kde-cli-tools.nix14
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/follow-symlinks.patch49
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/gsettings.patch21
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/series2
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kdecoration.nix8
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kdeplasma-addons.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kgamma5.nix11
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/khotkeys.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kinfocenter.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kmenuedit.nix14
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kscreen.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kscreenlocker.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/ksshaskpass.nix11
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/ksysguard.nix16
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwallet-pam.nix10
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwayland-integration.nix11
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwin/default.nix46
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwin/follow-symlinks.patch13
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwin/no-setcap-install.patch24
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwin/scripts/tiling.nix44
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwin/series3
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwin/xwayland.patch13
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/kwrited.nix11
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/libkscreen/default.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/libkscreen/libkscreen-backends-path.patch27
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/libkscreen/series1
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/libksysguard/0001-qdiriterator-follow-symlinks.patch25
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/libksysguard/default.nix21
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/milou.nix15
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/oxygen.nix18
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-browser-integration.nix11
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/default.nix51
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/hwclock-path.patch24
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/series2
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/tzdir.patch18
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-integration/default.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0001-mobile-broadband-provider-info-path.patch25
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0002-openvpn-binary-path.patch13
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-nm/default.nix31
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-pa.nix15
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-vault/cryfs-path.patch13
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-vault/default.nix40
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-vault/encfs-path.patch22
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-vault/fusermount-path.patch18
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-workspace-wallpapers.nix6
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/default.nix78
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch1012
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/polkit-kde-agent.nix15
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/powerdevil.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/sddm-kcm.nix16
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/srcs.nix365
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/systemsettings.nix17
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/user-manager.nix13
-rw-r--r--nixpkgs/pkgs/desktops/plasma-5/xdg-desktop-portal-kde.nix15
-rw-r--r--nixpkgs/pkgs/desktops/rox/rox-filer/default.nix79
-rw-r--r--nixpkgs/pkgs/desktops/rox/rox-filer/rox-filer-2.11-in-source-build.patch16
-rw-r--r--nixpkgs/pkgs/desktops/surf-display/default.nix53
-rw-r--r--nixpkgs/pkgs/desktops/surf-display/pdf-makefile.patch24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/gigolo.nix22
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/mousepad-12134.patch90
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/mousepad.nix38
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/orage.nix44
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/parole.nix38
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/ristretto.nix34
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/terminal.nix25
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/xfce4-mixer.nix51
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/xfce4-notifyd.nix32
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/xfce4-screenshooter.nix29
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix22
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed-pulse.nix31
-rw-r--r--nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed.nix46
-rw-r--r--nixpkgs/pkgs/desktops/xfce/art/xfce4-icon-theme.nix23
-rw-r--r--nixpkgs/pkgs/desktops/xfce/art/xfwm4-themes.nix21
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/exo.nix27
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/garcon-10967.patch14
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/garcon-12700.patch44
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/garcon.nix27
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/gtk-xfce-engine.nix31
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/libxfce4ui.nix41
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/libxfce4util.nix26
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/libxfcegui4.nix37
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/thunar-build.nix42
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/thunar-volman.nix30
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/thunar.nix68
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/thunarx_plugins_directory.patch48
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/tumbler.nix42
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-appfinder.nix29
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-dev-tools.nix28
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-light-locker.patch25
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-panel.nix59
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-power-manager.nix44
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-session.nix44
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-settings-default-icon-theme.patch11
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfce4-settings.nix54
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfconf.nix30
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfdesktop.nix36
-rw-r--r--nixpkgs/pkgs/desktops/xfce/core/xfwm4.nix31
-rw-r--r--nixpkgs/pkgs/desktops/xfce/default.nix211
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-battery-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-clipman-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix29
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpugraph-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-datetime-plugin.nix26
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dict-plugin.nix25
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dockbarx-plugin.nix40
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-embed-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-fsguard-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-genmon-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-hardware-monitor-plugin.nix40
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mailwatch-plugin.nix26
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mpc-plugin.nix26
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-namebar-plugin.nix31
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-netload-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-notes-plugin.nix25
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-pulseaudio-plugin.nix34
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-sensors-plugin.nix46
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix24
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-timer-plugin.nix30
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/appmenu-gtk-module.nix31
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/default.nix49
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/fix-bamf-dependency.patch12
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-verve-plugin.nix27
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-weather-plugin.nix29
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-whiskermenu-plugin.nix36
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-windowck-plugin.nix34
-rw-r--r--nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-xkb-plugin.nix28
-rw-r--r--nixpkgs/pkgs/desktops/xfce/thunar-plugins/archive/default.nix57
-rw-r--r--nixpkgs/pkgs/desktops/xfce/thunar-plugins/dropbox/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/automakeAddFlags.sh7
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/default.nix116
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/exo/default.nix20
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/garcon/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/gigolo/default.nix12
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/libxfce4ui/default.nix23
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/libxfce4util/default.nix16
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/mkXfceDerivation.nix40
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/mousepad/default.nix15
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/orage/default.nix35
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/parole/default.nix34
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/ristretto/default.nix13
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/thunar-volman/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/thunar/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/tumbler/default.nix30
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfburn/default.nix12
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-appfinder/default.nix12
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-battery-plugin/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-clipman-plugin/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-cpufreq-plugin/default.nix10
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/setup-hook.sh12
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/configure-gio.patch11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/default.nix19
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-netload-plugin/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-notifyd/default.nix12
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-panel/default.nix29
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-power-manager/default.nix19
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-pulseaudio-plugin/default.nix19
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-screenshooter/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-session/default.nix20
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-settings/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-taskmanager/default.nix12
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-terminal/default.nix15
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-volumed-pulse/default.nix15
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-whiskermenu-plugin/default.nix18
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfce4-xkb-plugin/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfconf/default.nix11
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfdashboard/default.nix44
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfdesktop/default.nix25
-rw-r--r--nixpkgs/pkgs/desktops/xfce4-14/xfwm4/default.nix26
672 files changed, 31534 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/deepin/dbus-factory/default.nix b/nixpkgs/pkgs/desktops/deepin/dbus-factory/default.nix
new file mode 100644
index 00000000000..2511f05c4ea
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dbus-factory/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, jq, libxml2, go-dbus-generator, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "dbus-factory";
+ version = "3.1.17";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1llq8wzgikgpzj7z36fyzk8kjych2h9nzi3x6zv53z0xc1xn4256";
+ };
+
+ nativeBuildInputs = [
+ jq
+ libxml2
+ go-dbus-generator
+ ];
+
+ makeFlags = [ "GOPATH=${placeholder "out"}/share/go" ];
+
+ postPatch = ''
+ sed -i -e 's:/share/gocode:/share/go:' Makefile
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Generates static DBus bindings for Golang and QML at build-time";
+ homepage = https://github.com/linuxdeepin/dbus-factory;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-api/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-api/default.nix
new file mode 100644
index 00000000000..b052a104240
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-api/default.nix
@@ -0,0 +1,125 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, pkgconfig,
+ alsaLib,
+ bc,
+ blur-effect,
+ coreutils,
+ dbus-factory,
+ deepin,
+ deepin-gettext-tools,
+ fontconfig,
+ go,
+ go-dbus-factory,
+ go-gir-generator,
+ go-lib,
+ grub2,
+ gtk3,
+ libcanberra,
+ libgudev,
+ librsvg,
+ poppler,
+ pulseaudio,
+ rfkill,
+ xcur2png
+}:
+
+buildGoPackage rec {
+ pname = "dde-api";
+ version = "3.18.4.1";
+
+ goPackagePath = "pkg.deepin.io/dde/api";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "0bcjp5ijwa4wmx6p43lik6vjlb7d5rk7nf8xl495i3yk9x70wyfa";
+ };
+
+ goDeps = ./deps.nix;
+
+ outputs = [ "out" ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ deepin-gettext-tools # build
+ dbus-factory # build
+ go-dbus-factory # needed
+ go-gir-generator # needed
+ go-lib # build
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ alsaLib # needed
+ bc # run (to adjust grub theme?)
+ blur-effect # run (is it really needed?)
+ coreutils # run (is it really needed?)
+ fontconfig # run (is it really needed?)
+ #glib # ? arch
+ grub2 # run (is it really needed?)
+ gtk3 # build run
+ libcanberra # build run
+ libgudev # needed
+ librsvg # build run
+ poppler # build run
+ pulseaudio # needed
+ rfkill # run
+ xcur2png # run
+ #locales # run (locale-helper needs locale-gen, which is unavailable on NixOS?)
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+
+ fixPath $out /usr/lib/deepin-api \
+ lunar-calendar/main.go \
+ misc/services/com.deepin.api.CursorHelper.service \
+ misc/services/com.deepin.api.Graphic.service \
+ misc/services/com.deepin.api.LunarCalendar.service \
+ misc/services/com.deepin.api.Pinyin.service \
+ misc/system-services/com.deepin.api.Device.service \
+ misc/system-services/com.deepin.api.LocaleHelper.service \
+ misc/system-services/com.deepin.api.SoundThemePlayer.service \
+ misc/systemd/system/deepin-shutdown-sound.service \
+ theme_thumb/gtk/gtk.go \
+ thumbnails/gtk/gtk.go
+ fixPath $out /boot/grub Makefile # TODO: confirm where to install grub themes
+ fixPath $out /var Makefile
+
+ # This package wants to install polkit local authority files into
+ # /var/lib. Nix does not allow a package to install files into /var/lib
+ # because it is outside of the Nix store and should contain applications
+ # state information (persistent data modified by programs as they
+ # run). Polkit looks for them in both /etc/polkit-1 and
+ # /var/lib/polkit-1 (with /etc having priority over /var/lib). An
+ # work around is to install them to $out/etc and simlnk them to
+ # /etc in the deepin module.
+
+ sed -i -e "s,/var/lib/polkit-1,/etc/polkit-1," Makefile
+ '';
+
+ buildPhase = ''
+ export GOCACHE="$TMPDIR/go-cache";
+ make -C go/src/${goPackagePath}
+ '';
+
+ installPhase = ''
+ make install PREFIX="$out" SYSTEMD_LIB_DIR="$out/lib" -C go/src/${goPackagePath}
+ mv $out/share/gocode $out/share/go
+ remove-references-to -t ${go} $out/bin/* $out/lib/deepin-api/*
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Go-lang bindings for dde-daemon";
+ homepage = https://github.com/linuxdeepin/dde-api;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-api/deps.nix b/nixpkgs/pkgs/desktops/deepin/dde-api/deps.nix
new file mode 100644
index 00000000000..a3b5e20effc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-api/deps.nix
@@ -0,0 +1,102 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+ {
+ goPackagePath = "github.com/alecthomas/template";
+ fetch = {
+ type = "git";
+ url = "https://github.com/alecthomas/template";
+ rev = "a0175ee3bccc567396460bf5acd36800cb10c49c";
+ sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+ };
+ }
+ {
+ goPackagePath = "github.com/alecthomas/units";
+ fetch = {
+ type = "git";
+ url = "https://github.com/alecthomas/units";
+ rev = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+ sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+ };
+ }
+ {
+ goPackagePath = "github.com/cryptix/wav";
+ fetch = {
+ type = "git";
+ url = "https://github.com/cryptix/wav";
+ rev = "8bdace674401f0bd3b63c65479b6a6ff1f9d5e44";
+ sha256 = "18nyqv0ic35fs9fny8sj84c00vbxs8mnric6vr6yl42624fh5id6";
+ };
+ }
+ {
+ goPackagePath = "github.com/disintegration/imaging";
+ fetch = {
+ type = "git";
+ url = "https://github.com/disintegration/imaging";
+ rev = "465faf0892b5c7b3325643b0e47282e1331672e7";
+ sha256 = "1z9rkphmqgyphznl53pp1gmf0dfrfrmr95bx46p422ldml26c5a0";
+ };
+ }
+ {
+ goPackagePath = "github.com/fogleman/gg";
+ fetch = {
+ type = "git";
+ url = "https://github.com/fogleman/gg";
+ rev = "f194ddec6f45226fc9e1b4a61b7237f186edd543";
+ sha256 = "095g5hpqvpy5w9l4kb65cif013snsvlbw6sgln0kwdix0z099j3i";
+ };
+ }
+ {
+ goPackagePath = "github.com/golang/freetype";
+ fetch = {
+ type = "git";
+ url = "https://github.com/golang/freetype";
+ rev = "e2365dfdc4a05e4b8299a783240d4a7d5a65d4e4";
+ sha256 = "194w3djc6fv1rgcjqds085b9fq074panc5vw582bcb8dbfzsrqxc";
+ };
+ }
+ {
+ goPackagePath = "github.com/linuxdeepin/go-x11-client";
+ fetch = {
+ type = "git";
+ url = "https://github.com/linuxdeepin/go-x11-client";
+ rev = "b5b01565d224d5ccd5a4143d9099acceb23e182a";
+ sha256 = "1lnffjp8bqy6f8caw6drg1js6hny5w7432riqchcrcd4q85d94rs";
+ };
+ }
+ {
+ goPackagePath = "github.com/nfnt/resize";
+ fetch = {
+ type = "git";
+ url = "https://github.com/nfnt/resize";
+ rev = "83c6a9932646f83e3267f353373d47347b6036b2";
+ sha256 = "005cpiwq28krbjf0zjwpfh63rp4s4is58700idn24fs3g7wdbwya";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/image";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/image";
+ rev = "7e034cad644213bc79b336b52fce73624259aeca";
+ sha256 = "04n4yi0p2yjv8sr9dmnzwc2k6hvzzvl6jdq2xd043kvjwzk583va";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/net";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/net";
+ rev = "3b0461eec859c4b73bb64fdc8285971fd33e3938";
+ sha256 = "0l00c8l0a8xnv6qdpwfzxxsr58jggacgzdrwiprrfx2xqm37b6d5";
+ };
+ }
+ {
+ goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+ fetch = {
+ type = "git";
+ url = "https://gopkg.in/alecthomas/kingpin.v2";
+ rev = "947dcec5ba9c011838740e680966fd7087a71d0d";
+ sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+ };
+ }
+]
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-calendar/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-calendar/default.nix
new file mode 100644
index 00000000000..427cb1249c9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-calendar/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, cmake, qttools,
+ deepin-gettext-tools, dtkcore, dtkwidget, deepin
+}:
+
+mkDerivation rec {
+ pname = "dde-calendar";
+ version = "1.2.10";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "00aqx24jccf88vvkpb9svyjz8knrqyjgd0152psf9dxc9q13f61h";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ qttools
+ deepin-gettext-tools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dtkcore
+ dtkwidget
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ patchShebangs translate_generation.sh
+ patchShebangs translate_desktop.sh
+
+ fixPath $out /usr com.deepin.Calendar.service
+
+ sed -i translate_desktop.sh \
+ -e "s,/usr/bin/deepin-desktop-ts-convert,deepin-desktop-ts-convert,"
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Calendar for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/dde-calendar;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-control-center/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-control-center/default.nix
new file mode 100644
index 00000000000..0871e004e5f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-control-center/default.nix
@@ -0,0 +1,111 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, cmake, deepin, qttools, qtdeclarative,
+ networkmanager, qtsvg, qtx11extras, dtkcore, dtkwidget, geoip, gsettings-qt,
+ dde-network-utils, networkmanager-qt, xorg, mtdev, fontconfig, freetype, dde-api,
+ dde-daemon, qt5integration, deepin-desktop-base, deepin-desktop-schemas, dbus,
+ systemd, dde-qt-dbus-factory, qtmultimedia, qtbase, glib, gnome3, which,
+ substituteAll, tzdata, wrapGAppsHook
+}:
+
+mkDerivation rec {
+ pname = "dde-control-center";
+ version = "4.10.11";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1ip8wjwf0n9q8xnqymzh8lz0j5gcnns976n291np6k5kdh2wqhr5";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ deepin.setupHook
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ dde-api
+ dde-daemon
+ dde-network-utils
+ dde-qt-dbus-factory
+ deepin-desktop-base
+ deepin-desktop-schemas
+ dtkcore
+ dtkwidget
+ fontconfig
+ freetype
+ geoip
+ glib
+ gnome3.networkmanager-l2tp
+ gnome3.networkmanager-openconnect
+ gnome3.networkmanager-openvpn
+ gnome3.networkmanager-vpnc
+ gsettings-qt
+ mtdev
+ networkmanager-qt
+ qt5integration
+ qtbase
+ qtdeclarative
+ qtmultimedia
+ qtsvg
+ qttools
+ qtx11extras
+ xorg.libX11
+ xorg.libXext
+ xorg.libXrandr
+ xorg.libxcb
+ ];
+
+ cmakeFlags = [
+ "-DDISABLE_SYS_UPDATE=YES"
+ "-DDCC_DISABLE_GRUB=YES"
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ nmcli = "${networkmanager}/bin/nmcli";
+ which = "${which}/bin/which";
+ # not packaged
+ # dman = "${deepin-manual}/bin/dman";
+ inherit tzdata;
+ # exclusive to deepin linux?
+ # allows to synchronize configuration files to cloud networks
+ # deepin_sync = "${deepin-sync}";
+ })
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+
+ patchShebangs translate_ts2desktop.sh
+ patchShebangs translate_generation.sh
+ patchShebangs translate_desktop2ts.sh
+
+ fixPath $out /usr dde-control-center-autostart.desktop \
+ com.deepin.dde.ControlCenter.service \
+ src/frame/widgets/utils.h
+
+ substituteInPlace dde-control-center.desktop \
+ --replace "dbus-send" "${dbus}/bin/dbus-send"
+ substituteInPlace com.deepin.controlcenter.addomain.policy \
+ --replace "/bin/systemctl" "${systemd}/bin/systemctl"
+ '';
+
+ postFixup = ''
+ # debuging
+ searchForUnresolvedDLL $out
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Control panel of Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/dde-control-center;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo worldofpeace ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-control-center/fix-paths.patch b/nixpkgs/pkgs/desktops/deepin/dde-control-center/fix-paths.patch
new file mode 100644
index 00000000000..2c6e204d343
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-control-center/fix-paths.patch
@@ -0,0 +1,65 @@
+diff --git a/src/frame/frame.cpp b/src/frame/frame.cpp
+index 90d06f8..7cdad04 100644
+--- a/src/frame/frame.cpp
++++ b/src/frame/frame.cpp
+@@ -375,7 +375,7 @@ void Frame::keyPressEvent(QKeyEvent *e)
+ #ifdef QT_DEBUG
+ case Qt::Key_Escape: qApp->quit(); break;
+ #endif
+- case Qt::Key_F1: QProcess::startDetached("dman", QStringList("dde")); break;
++ case Qt::Key_F1: QProcess::startDetached("@dman@", QStringList("dde")); break;
+ default:;
+ }
+ }
+diff --git a/src/frame/modules/datetime/timezone_dialog/timezone.cpp b/src/frame/modules/datetime/timezone_dialog/timezone.cpp
+index 3dd4aad..5f1b363 100644
+--- a/src/frame/modules/datetime/timezone_dialog/timezone.cpp
++++ b/src/frame/modules/datetime/timezone_dialog/timezone.cpp
+@@ -46,7 +46,7 @@ namespace installer {
+ namespace {
+
+ // Absolute path to zone.tab file.
+-const char kZoneTabFile[] = "/usr/share/zoneinfo/zone.tab";
++const char kZoneTabFile[] = "@tzdata@/share/zoneinfo/zone.tab";
+
+ // Absolute path to backward timezone file.
+ const char kTimezoneAliasFile[] = "/timezone_alias";
+diff --git a/src/frame/modules/network/connectionvpneditpage.cpp b/src/frame/modules/network/connectionvpneditpage.cpp
+index e292865..95c5a2b 100644
+--- a/src/frame/modules/network/connectionvpneditpage.cpp
++++ b/src/frame/modules/network/connectionvpneditpage.cpp
+@@ -215,7 +215,7 @@ void ConnectionVpnEditPage::exportConnConfig()
+ qDebug() << Q_FUNC_INFO << args;
+
+ QProcess p;
+- p.start("nmcli", args);
++ p.start("@nmcli@", args);
+ p.waitForFinished();
+ qDebug() << p.readAllStandardOutput();
+ qDebug() << p.readAllStandardError();
+diff --git a/src/frame/modules/network/vpnpage.cpp b/src/frame/modules/network/vpnpage.cpp
+index 521a603..450d1a6 100644
+--- a/src/frame/modules/network/vpnpage.cpp
++++ b/src/frame/modules/network/vpnpage.cpp
+@@ -224,7 +224,7 @@ void VpnPage::importVPN()
+ qDebug() << args;
+
+ QProcess p;
+- p.start("nmcli", args);
++ p.start("@nmcli@", args);
+ p.waitForFinished();
+ const auto stat = p.exitCode();
+ const QString output = p.readAllStandardOutput();
+diff --git a/src/frame/modules/sync/syncworker.cpp b/src/frame/modules/sync/syncworker.cpp
+index 3f929bf..6f240d9 100644
+--- a/src/frame/modules/sync/syncworker.cpp
++++ b/src/frame/modules/sync/syncworker.cpp
+@@ -24,7 +24,7 @@ SyncWorker::SyncWorker(SyncModel *model, QObject *parent)
+
+ m_model->setSyncIsValid(
+ QProcess::execute(
+- "which", QStringList() << "/usr/lib/deepin-sync-daemon/deepin-sync-daemon") ==
++ "@which@", QStringList() << "@deepin_sync@/lib/deepin-sync-daemon/deepin-sync-daemon") ==
+ 0 &&
+ valueByQSettings<bool>(DCC_CONFIG_FILES, "CloudSync", "AllowCloudSync", false));
+ }
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-daemon/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-daemon/default.nix
new file mode 100644
index 00000000000..19089a6b050
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-daemon/default.nix
@@ -0,0 +1,133 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, fetchpatch, pkgconfig,
+ dbus-factory, go-dbus-factory, go-gir-generator, go-lib,
+ deepin-gettext-tools, dde-api, deepin-desktop-schemas,
+ deepin-wallpapers, deepin-desktop-base, alsaLib, glib, gtk3,
+ libgudev, libinput, libnl, librsvg, linux-pam, networkmanager,
+ pulseaudio, python3, hicolor-icon-theme, glibc, tzdata, go,
+ deepin, makeWrapper, xkeyboard_config, wrapGAppsHook }:
+
+buildGoPackage rec {
+ pname = "dde-daemon";
+ version = "3.27.2.6";
+
+ goPackagePath = "pkg.deepin.io/dde/daemon";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "14g138h23f1lh1y98pdrfhnph1m7pw8lq8ypiwv9qf3fmdyn35d4";
+ };
+
+ patches = [
+ # https://github.com/linuxdeepin/dde-daemon/issues/51
+ (fetchpatch {
+ url = https://github.com/jouyouyun/tap-gesture-patches/raw/master/patches/dde-daemon_3.8.0.patch;
+ sha256 = "1ampdsp9zlg263flswdw9gj10n7gxh7zi6w6z9jgh29xlai05pvh";
+ })
+ ];
+
+ goDeps = ./deps.nix;
+
+ outputs = [ "out" ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ dbus-factory
+ go-dbus-factory
+ go-gir-generator
+ go-lib
+ deepin-gettext-tools
+ linux-pam
+ networkmanager
+ networkmanager.dev
+ python3
+ makeWrapper
+ wrapGAppsHook
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ alsaLib
+ dde-api
+ deepin-desktop-base
+ deepin-desktop-schemas
+ deepin-wallpapers
+ glib
+ libgudev
+ gtk3
+ hicolor-icon-theme
+ libinput
+ libnl
+ librsvg
+ pulseaudio
+ tzdata
+ xkeyboard_config
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+ patchShebangs network/nm_generator/gen_nm_consts.py
+
+ fixPath $out /usr/share/dde/data launcher/manager.go dock/dock_manager_init.go
+ fixPath $out /usr/share/dde-daemon launcher/manager.go gesture/config.go
+ fixPath ${networkmanager.dev} /usr/share/gir-1.0/NM-1.0.gir network/nm_generator/Makefile
+ fixPath ${glibc.bin} /usr/bin/getconf systeminfo/utils.go
+ fixPath ${deepin-desktop-base} /etc/deepin-version systeminfo/version.go accounts/deepinversion.go
+ fixPath ${tzdata} /usr/share/zoneinfo timedate/zoneinfo/zone.go
+ fixPath ${dde-api} /usr/lib/deepin-api grub2/modify_manger.go accounts/image_blur.go
+ fixPath ${deepin-wallpapers} /usr/share/wallpapers appearance/background/list.go accounts/user.go
+ fixPath ${xkeyboard_config} /usr/share/X11/xkb inputdevices/layout_list.go
+
+ # TODO: deepin-system-monitor comes from dde-extra
+
+ sed -i -e "s|{DESTDIR}/etc|{DESTDIR}$out/etc|" Makefile
+ sed -i -e "s|{DESTDIR}/lib|{DESTDIR}$out/lib|" Makefile
+ sed -i -e "s|{DESTDIR}/var|{DESTDIR}$out/var|" Makefile
+
+ find -type f -exec sed -i -e "s,/usr/lib/deepin-daemon,$out/lib/deepin-daemon," {} +
+
+ # This package wants to install polkit local authority files into
+ # /var/lib. Nix does not allow a package to install files into /var/lib
+ # because it is outside of the Nix store and should contain applications
+ # state information (persistent data modified by programs as they
+ # run). Polkit looks for them in both /etc/polkit-1 and
+ # /var/lib/polkit-1 (with /etc having priority over /var/lib). An
+ # work around is to install them to $out/etc and simlnk them to
+ # /etc in the deepin module.
+
+ sed -i -e "s,/var/lib/polkit-1,/etc/polkit-1," Makefile
+ '';
+
+ buildPhase = ''
+ export PAM_MODULE_DIR="$out/lib/security"
+ # compilation of the nm module is failing
+ #make -C go/src/${goPackagePath}/network/nm_generator gen-nm-code
+ make -C go/src/${goPackagePath}
+ '';
+
+ installPhase = ''
+ make install PREFIX="$out" -C go/src/${goPackagePath}
+ remove-references-to -t ${go} $out/lib/deepin-daemon/*
+ searchHardCodedPaths $out
+ '';
+
+ postFixup = ''
+ # wrapGAppsHook does not work with binaries outside of $out/bin or $out/libexec
+ for binary in $out/lib/deepin-daemon/*; do
+ wrapProgram $binary "''${gappsWrapperArgs[@]}"
+ done
+
+ searchHardCodedPaths $out # debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Daemon for handling Deepin Desktop Environment session settings";
+ homepage = https://github.com/linuxdeepin/dde-daemon;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-daemon/deps.nix b/nixpkgs/pkgs/desktops/deepin/dde-daemon/deps.nix
new file mode 100644
index 00000000000..c9a15ad88d4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-daemon/deps.nix
@@ -0,0 +1,111 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+ {
+ goPackagePath = "github.com/alecthomas/template";
+ fetch = {
+ type = "git";
+ url = "https://github.com/alecthomas/template";
+ rev = "a0175ee3bccc567396460bf5acd36800cb10c49c";
+ sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+ };
+ }
+ {
+ goPackagePath = "github.com/alecthomas/units";
+ fetch = {
+ type = "git";
+ url = "https://github.com/alecthomas/units";
+ rev = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+ sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+ };
+ }
+ {
+ goPackagePath = "github.com/axgle/mahonia";
+ fetch = {
+ type = "git";
+ url = "https://github.com/axgle/mahonia";
+ rev = "3358181d7394e26beccfae0ffde05193ef3be33a";
+ sha256 = "0b8wsrxmv8a0cqbnsg55lpf29pxy2zw8azvgh3ck664lqpcfybhq";
+ };
+ }
+ {
+ goPackagePath = "github.com/cryptix/wav";
+ fetch = {
+ type = "git";
+ url = "https://github.com/cryptix/wav";
+ rev = "8bdace674401f0bd3b63c65479b6a6ff1f9d5e44";
+ sha256 = "18nyqv0ic35fs9fny8sj84c00vbxs8mnric6vr6yl42624fh5id6";
+ };
+ }
+ {
+ goPackagePath = "github.com/gosexy/gettext";
+ fetch = {
+ type = "git";
+ url = "https://github.com/gosexy/gettext";
+ rev = "74466a0a0c4a62fea38f44aa161d4bbfbe79dd6b";
+ sha256 = "0asphx8nd7zmp88wk6aakk5292np7yw73akvfdvlvs9q5r5ahkgi";
+ };
+ }
+ {
+ goPackagePath = "github.com/linuxdeepin/go-x11-client";
+ fetch = {
+ type = "git";
+ url = "https://github.com/linuxdeepin/go-x11-client";
+ rev = "b5b01565d224d5ccd5a4143d9099acceb23e182a";
+ sha256 = "1lnffjp8bqy6f8caw6drg1js6hny5w7432riqchcrcd4q85d94rs";
+ };
+ }
+ {
+ goPackagePath = "github.com/msteinert/pam";
+ fetch = {
+ type = "git";
+ url = "https://github.com/msteinert/pam";
+ rev = "f29b9f28d6f9a1f6c4e6fd5db731999eb946574b";
+ sha256 = "1v5z51mgyz2glm7v0mg60xs1as88wx6cqhys2khc5d3khkr8q0qp";
+ };
+ }
+ {
+ goPackagePath = "github.com/nfnt/resize";
+ fetch = {
+ type = "git";
+ url = "https://github.com/nfnt/resize";
+ rev = "83c6a9932646f83e3267f353373d47347b6036b2";
+ sha256 = "005cpiwq28krbjf0zjwpfh63rp4s4is58700idn24fs3g7wdbwya";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/image";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/image";
+ rev = "7e034cad644213bc79b336b52fce73624259aeca";
+ sha256 = "04n4yi0p2yjv8sr9dmnzwc2k6hvzzvl6jdq2xd043kvjwzk583va";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/net";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/net";
+ rev = "3b0461eec859c4b73bb64fdc8285971fd33e3938";
+ sha256 = "0l00c8l0a8xnv6qdpwfzxxsr58jggacgzdrwiprrfx2xqm37b6d5";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/text";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/text";
+ rev = "342b2e1fbaa52c93f31447ad2c6abc048c63e475";
+ sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+ };
+ }
+ {
+ goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+ fetch = {
+ type = "git";
+ url = "https://gopkg.in/alecthomas/kingpin.v2";
+ rev = "947dcec5ba9c011838740e680966fd7087a71d0d";
+ sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+ };
+ }
+]
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-dock/dde-dock.plugins-dir.patch b/nixpkgs/pkgs/desktops/deepin/dde-dock/dde-dock.plugins-dir.patch
new file mode 100644
index 00000000000..87b76045b43
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-dock/dde-dock.plugins-dir.patch
@@ -0,0 +1,39 @@
+From c48867b73485b34b95f14e9b9bbb54507fc77648 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Fri, 19 Apr 2019 18:21:49 -0300
+Subject: [PATCH] Use an environment variable for the plugins directory
+
+---
+ frame/controller/dockpluginscontroller.cpp | 2 +-
+ plugins/tray/system-trays/systemtrayscontroller.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp
+index 32a5885..efd53c8 100644
+--- a/frame/controller/dockpluginscontroller.cpp
++++ b/frame/controller/dockpluginscontroller.cpp
+@@ -126,7 +126,7 @@ void DockPluginsController::startLoader()
+ {
+ QString pluginsDir("../plugins");
+ if (!QDir(pluginsDir).exists()) {
+- pluginsDir = "/usr/lib/dde-dock/plugins";
++ pluginsDir = QProcessEnvironment::systemEnvironment().value("DDE_DOCK_PLUGINS_DIR", "@out@/lib/dde-dock/plugins");
+ }
+ qDebug() << "using dock plugins dir:" << pluginsDir;
+
+diff --git a/plugins/tray/system-trays/systemtrayscontroller.cpp b/plugins/tray/system-trays/systemtrayscontroller.cpp
+index 0c8ca88..7c47d25 100644
+--- a/plugins/tray/system-trays/systemtrayscontroller.cpp
++++ b/plugins/tray/system-trays/systemtrayscontroller.cpp
+@@ -159,7 +159,7 @@ void SystemTraysController::startLoader()
+ {
+ QString pluginsDir("../plugins/system-trays");
+ if (!QDir(pluginsDir).exists()) {
+- pluginsDir = "/usr/lib/dde-dock/plugins/system-trays";
++ pluginsDir = QProcessEnvironment::systemEnvironment().value("DDE_DOCK_PLUGINS_DIR", "@out@/lib/dde-dock/plugins") + "/system-trays";
+ }
+ qDebug() << "using system tray plugins dir:" << pluginsDir;
+
+--
+2.21.0
+
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-dock/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-dock/default.nix
new file mode 100644
index 00000000000..fc25d007f20
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-dock/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qttools, qtx11extras,
+ qtsvg, polkit, gsettings-qt, dtkcore, dtkwidget,
+ dde-qt-dbus-factory, dde-network-utils, dde-daemon,
+ deepin-desktop-schemas, xorg, glib, wrapGAppsHook, deepin,
+ plugins ? [], symlinkJoin, makeWrapper, libdbusmenu }:
+
+let
+unwrapped = mkDerivation rec {
+ pname = "dde-dock";
+ version = "4.10.3";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "17iy78r0frpv42g521igfdcgdklbifzig1wzxq2nl14fq0bgxg4v";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ qttools
+ wrapGAppsHook
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dde-daemon
+ dde-network-utils
+ dde-qt-dbus-factory
+ deepin-desktop-schemas
+ dtkcore
+ dtkwidget
+ glib.bin
+ gsettings-qt
+ libdbusmenu
+ polkit
+ qtsvg
+ qtx11extras
+ xorg.libXdmcp
+ xorg.libXtst
+ xorg.libpthreadstubs
+ ];
+
+ patches = [
+ ./dde-dock.plugins-dir.patch
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ patchShebangs translate_generation.sh
+ fixPath $out /etc/dde-dock plugins/keyboard-layout/CMakeLists.txt
+ fixPath $out /usr cmake/DdeDock/DdeDockConfig.cmake
+ fixPath $out /usr dde-dock.pc
+ fixPath $out /usr/bin/dde-dock frame/com.deepin.dde.Dock.service
+ fixPath $out /usr/share/dbus-1 CMakeLists.txt
+ fixPath ${dde-daemon} /usr/lib/deepin-daemon frame/item/showdesktopitem.cpp
+ fixPath ${dde-network-utils} /usr/share/dde-network-utils frame/main.cpp
+ fixPath ${polkit} /usr/bin/pkexec plugins/overlay-warning/overlay-warning-plugin.cpp
+
+ substituteInPlace frame/controller/dockpluginscontroller.cpp --subst-var-by out $out
+ substituteInPlace plugins/tray/system-trays/systemtrayscontroller.cpp --subst-var-by out $out
+ '';
+
+ cmakeFlags = [ "-DDOCK_TRAY_USE_NATIVE_POPUP=YES" ];
+
+ postFixup = ''
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Dock for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/dde-dock;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+};
+
+in if plugins == [] then unwrapped
+ else import ./wrapper.nix {
+ inherit makeWrapper symlinkJoin plugins;
+ dde-dock = unwrapped;
+ }
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-dock/wrapper.nix b/nixpkgs/pkgs/desktops/deepin/dde-dock/wrapper.nix
new file mode 100644
index 00000000000..8f6d8a67b1a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-dock/wrapper.nix
@@ -0,0 +1,21 @@
+{ makeWrapper, symlinkJoin, dde-dock, plugins }:
+
+symlinkJoin {
+ name = "dde-dock-with-plugins-${dde-dock.version}";
+
+ paths = [ dde-dock ] ++ plugins;
+
+ buildInputs = [ makeWrapper ];
+
+ postBuild = ''
+ wrapProgram $out/bin/dde-dock \
+ --set DDE_DOCK_PLUGINS_DIR "$out/lib/dde-dock/plugins"
+
+ rm $out/share/dbus-1/services/com.deepin.dde.Dock.service
+
+ substitute ${dde-dock}/share/dbus-1/services/com.deepin.dde.Dock.service $out/share/dbus-1/services/com.deepin.dde.Dock.service \
+ --replace ${dde-dock} $out
+ '';
+
+ inherit (dde-dock) meta;
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-mime-cache-paths.patch b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-mime-cache-paths.patch
new file mode 100644
index 00000000000..253a67b04ec
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-mime-cache-paths.patch
@@ -0,0 +1,323 @@
+From 29f4ad88e2294ae70b10180e7361d135c4e5c896 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Mon, 13 May 2019 00:09:42 -0300
+Subject: [PATCH 2/2] Use XDG to look for mime cache
+
+---
+ .../shutil/mimesappsmanager.cpp | 230 ++++++++++--------
+ .../shutil/mimesappsmanager.h | 6 +-
+ 2 files changed, 125 insertions(+), 111 deletions(-)
+
+diff --git a/dde-file-manager-lib/shutil/mimesappsmanager.cpp b/dde-file-manager-lib/shutil/mimesappsmanager.cpp
+index c9e53630..7a21df51 100644
+--- a/dde-file-manager-lib/shutil/mimesappsmanager.cpp
++++ b/dde-file-manager-lib/shutil/mimesappsmanager.cpp
+@@ -552,14 +552,20 @@ QString MimesAppsManager::getMimeAppsCacheFile()
+ return QString("%1/%2").arg(DFMStandardPaths::location(DFMStandardPaths::CachePath), "MimeApps.json");
+ }
+
+-QString MimesAppsManager::getMimeInfoCacheFilePath()
++QStringList MimesAppsManager::getMimeInfoCacheFilePath()
+ {
+- return "/usr/share/applications/mimeinfo.cache";
++ QStringList paths;
++ for (const QString dir : getMimeInfoCacheFileRootPath() )
++ paths.append(dir + QDir::separator() + "mimeinfo.cache");
++ qDebug() << "getMimeInfoCacheFilePath: " << paths;
++ return paths;
+ }
+
+-QString MimesAppsManager::getMimeInfoCacheFileRootPath()
++QStringList MimesAppsManager::getMimeInfoCacheFileRootPath()
+ {
+- return "/usr/share/applications";
++ QStringList paths = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
++ qDebug() << "getMimeInfoCacheFileRootPath: " << paths;
++ return paths;
+ }
+
+ QString MimesAppsManager::getDesktopFilesCacheFile()
+@@ -574,23 +580,27 @@ QString MimesAppsManager::getDesktopIconsCacheFile()
+
+ QStringList MimesAppsManager::getDesktopFiles()
+ {
+- QStringList desktopFiles;
++ QStringList desktopFiles;
+
+- foreach (QString desktopFolder, getApplicationsFolders()) {
+- QDirIterator it(desktopFolder, QStringList("*.desktop"),
+- QDir::Files | QDir::NoDotAndDotDot,
+- QDirIterator::Subdirectories);
+- while (it.hasNext()) {
+- it.next();
+- desktopFiles.append(it.filePath());
+- }
+- }
+- return desktopFiles;
++ foreach (QString desktopFolder, getApplicationsFolders()) {
++ QDirIterator it(desktopFolder, QStringList("*.desktop"),
++ QDir::Files | QDir::NoDotAndDotDot,
++ QDirIterator::Subdirectories);
++ while (it.hasNext()) {
++ it.next();
++ desktopFiles.append(it.filePath());
++ }
++ }
++ return desktopFiles;
+ }
+
+-QString MimesAppsManager::getDDEMimeTypeFile()
++QStringList MimesAppsManager::getDDEMimeTypeFile()
+ {
+- return QString("%1/%2/%3").arg(getMimeInfoCacheFileRootPath(), "deepin", "dde-mimetype.list");
++ QStringList paths;
++ for (const QString path : getMimeInfoCacheFileRootPath())
++ paths.append(QString("%1/%2/%3").arg(path, "deepin", "dde-mimetype.list"));
++ qDebug() << "getDDEMimeTypeFile: " << paths;
++ return paths;
+ }
+
+ QMap<QString, DesktopFile> MimesAppsManager::getDesktopObjs()
+@@ -663,124 +673,128 @@ void MimesAppsManager::initMimeTypeApps()
+ MimeApps.insert(key, orderApps);
+ }
+
+- //check mime apps from cache
+- QFile f(getMimeInfoCacheFilePath());
+- if(!f.open(QIODevice::ReadOnly)){
+- qDebug () << "failed to read mime info cache file:" << f.errorString();
+- return;
+- }
+-
+ QStringList audioDesktopList;
+ QStringList imageDeksopList;
+ QStringList textDekstopList;
+ QStringList videoDesktopList;
+
+- while (!f.atEnd()) {
+- QString data = f.readLine();
+- QString _desktops = data.split("=").last();
+- QString mimeType = data.split("=").first();
+- QStringList desktops = _desktops.split(";");
+-
+- foreach (const QString desktop, desktops) {
+- if(desktop.isEmpty() || audioDesktopList.contains(desktop))
+- continue;
++ //check mime apps from cache
++ for (const QString path : getMimeInfoCacheFilePath()) {
++ QFile f(path);
++ if(!f.open(QIODevice::ReadOnly)){
++ qDebug () << "failed to read mime info cache file:" << f.errorString();
++ return;
++ }
+
+- if(mimeType.startsWith("audio")){
+- if(!audioDesktopList.contains(desktop))
+- audioDesktopList << desktop;
+- } else if(mimeType.startsWith("image")){
+- if(!imageDeksopList.contains(desktop))
+- imageDeksopList << desktop;
+- } else if(mimeType.startsWith("text")){
+- if(!textDekstopList.contains(desktop))
+- textDekstopList << desktop;
+- } else if(mimeType.startsWith("video")){
+- if(!videoDesktopList.contains(desktop))
+- videoDesktopList << desktop;
++ while (!f.atEnd()) {
++ QString data = f.readLine();
++ QString _desktops = data.split("=").last();
++ QString mimeType = data.split("=").first();
++ QStringList desktops = _desktops.split(";");
++
++ foreach (const QString desktop, desktops) {
++ if(desktop.isEmpty() || audioDesktopList.contains(desktop))
++ continue;
++
++ if(mimeType.startsWith("audio")){
++ if(!audioDesktopList.contains(desktop))
++ audioDesktopList << desktop;
++ } else if(mimeType.startsWith("image")){
++ if(!imageDeksopList.contains(desktop))
++ imageDeksopList << desktop;
++ } else if(mimeType.startsWith("text")){
++ if(!textDekstopList.contains(desktop))
++ textDekstopList << desktop;
++ } else if(mimeType.startsWith("video")){
++ if(!videoDesktopList.contains(desktop))
++ videoDesktopList << desktop;
++ }
+ }
+ }
++ f.close();
+ }
+- f.close();
+
+- const QString mimeInfoCacheRootPath = getMimeInfoCacheFileRootPath();
+- foreach (QString desktop, audioDesktopList) {
+- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+- if(!QFile::exists(path))
+- continue;
+- DesktopFile df(path);
+- AudioMimeApps.insert(path, df);
+- }
++ for (const QString mimeInfoCacheRootPath : getMimeInfoCacheFileRootPath()) {
++ foreach (QString desktop, audioDesktopList) {
++ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
++ if(!QFile::exists(path))
++ continue;
++ DesktopFile df(path);
++ AudioMimeApps.insert(path, df);
++ }
+
+- foreach (QString desktop, imageDeksopList) {
+- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+- if(!QFile::exists(path))
+- continue;
+- DesktopFile df(path);
+- ImageMimeApps.insert(path, df);
+- }
++ foreach (QString desktop, imageDeksopList) {
++ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
++ if(!QFile::exists(path))
++ continue;
++ DesktopFile df(path);
++ ImageMimeApps.insert(path, df);
++ }
+
+- foreach (QString desktop, textDekstopList) {
+- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+- if(!QFile::exists(path))
+- continue;
+- DesktopFile df(path);
+- TextMimeApps.insert(path, df);
+- }
++ foreach (QString desktop, textDekstopList) {
++ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
++ if(!QFile::exists(path))
++ continue;
++ DesktopFile df(path);
++ TextMimeApps.insert(path, df);
++ }
+
+- foreach (QString desktop, videoDesktopList) {
+- const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
+- if(!QFile::exists(path))
+- continue;
+- DesktopFile df(path);
+- VideoMimeApps.insert(path, df);
++ foreach (QString desktop, videoDesktopList) {
++ const QString path = QString("%1/%2").arg(mimeInfoCacheRootPath,desktop);
++ if(!QFile::exists(path))
++ continue;
++ DesktopFile df(path);
++ VideoMimeApps.insert(path, df);
++ }
+ }
+-
+ return;
+ }
+
+ void MimesAppsManager::loadDDEMimeTypes()
+ {
+- QSettings settings(getDDEMimeTypeFile(), QSettings::IniFormat);
+- qDebug() << settings.childGroups();
++ for (const QString path : getDDEMimeTypeFile()) {
++ QSettings settings(path, QSettings::IniFormat);
++ qDebug() << settings.childGroups();
+
+- QFile file(getDDEMimeTypeFile());
+- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+- return;
+- }
++ QFile file(path);
++ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
++ continue;
++ }
++
++ // Read propeties
++ QTextStream in(&file);
++ QString desktopKey;
++ while (!in.atEnd()) {
+
+- // Read propeties
+- QTextStream in(&file);
+- QString desktopKey;
+- while (!in.atEnd()) {
++ // Read new line
++ QString line = in.readLine();
+
+- // Read new line
+- QString line = in.readLine();
++ // Skip empty line or line with invalid format
++ if (line.trimmed().isEmpty()) {
++ continue;
++ }
+
+- // Skip empty line or line with invalid format
+- if (line.trimmed().isEmpty()) {
+- continue;
+- }
++ // Read group
++ // NOTE: symbols '[' and ']' can be found not only in group names, but
++ // only group can start with '['
+
+- // Read group
+- // NOTE: symbols '[' and ']' can be found not only in group names, but
+- // only group can start with '['
++ if (line.trimmed().startsWith("[") && line.trimmed().endsWith("]")) {
++ QString tmp = line.trimmed().replace("[", "").replace("]", "");
++ desktopKey = tmp;
++ continue;
++ }
+
+- if (line.trimmed().startsWith("[") && line.trimmed().endsWith("]")) {
+- QString tmp = line.trimmed().replace("[", "").replace("]", "");
+- desktopKey = tmp;
+- continue;
+- }
+-
+- // If we are in correct group and line contains assignment then read data
+- int first_equal = line.indexOf('=');
+- if (!desktopKey.isEmpty() && first_equal >= 0) {
+- QString value = line.mid(first_equal + 1);
+- QStringList mimetypes = value.split(";");
+- DDE_MimeTypes.insert(desktopKey, mimetypes);
+- desktopKey.clear();
++ // If we are in correct group and line contains assignment then read data
++ int first_equal = line.indexOf('=');
++ if (!desktopKey.isEmpty() && first_equal >= 0) {
++ QString value = line.mid(first_equal + 1);
++ QStringList mimetypes = value.split(";");
++ DDE_MimeTypes.insert(desktopKey, mimetypes);
++ desktopKey.clear();
++ }
+ }
++ file.close();
+ }
+- file.close();
+ }
+
+ bool MimesAppsManager::lessByDateTime(const QFileInfo &f1, const QFileInfo &f2)
+diff --git a/dde-file-manager-lib/shutil/mimesappsmanager.h b/dde-file-manager-lib/shutil/mimesappsmanager.h
+index 223c80aa..00a61302 100644
+--- a/dde-file-manager-lib/shutil/mimesappsmanager.h
++++ b/dde-file-manager-lib/shutil/mimesappsmanager.h
+@@ -101,12 +101,12 @@ public:
+
+ static QStringList getApplicationsFolders();
+ static QString getMimeAppsCacheFile();
+- static QString getMimeInfoCacheFilePath();
+- static QString getMimeInfoCacheFileRootPath();
++ static QStringList getMimeInfoCacheFilePath();
++ static QStringList getMimeInfoCacheFileRootPath();
+ static QString getDesktopFilesCacheFile();
+ static QString getDesktopIconsCacheFile();
+ static QStringList getDesktopFiles();
+- static QString getDDEMimeTypeFile();
++ static QStringList getDDEMimeTypeFile();
+ static QMap<QString, DesktopFile> getDesktopObjs();
+ static void initMimeTypeApps();
+ static void loadDDEMimeTypes();
+--
+2.21.0
+
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-paths.patch b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-paths.patch
new file mode 100644
index 00000000000..3ced15e7e5a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.fix-paths.patch
@@ -0,0 +1,89 @@
+From e68d983a6befd223087916cb3fe31baee77decc4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Sun, 12 May 2019 08:50:07 -0300
+Subject: [PATCH 1/2] Use qt library to determine where to look for application
+ files
+
+---
+ dde-file-manager-lib/shutil/fileutils.cpp | 34 ++++++++++++-------
+ .../shutil/mimesappsmanager.cpp | 11 ++----
+ 2 files changed, 25 insertions(+), 20 deletions(-)
+
+diff --git a/dde-file-manager-lib/shutil/fileutils.cpp b/dde-file-manager-lib/shutil/fileutils.cpp
+index ae8120d3..d6a0573a 100644
+--- a/dde-file-manager-lib/shutil/fileutils.cpp
++++ b/dde-file-manager-lib/shutil/fileutils.cpp
+@@ -242,13 +242,19 @@ bool FileUtils::isArchive(const QString &path)
+ */
+ QStringList FileUtils::getApplicationNames() {
+ QStringList appNames;
+- QDirIterator it("/usr/share/applications", QStringList("*.desktop"),
+- QDir::Files | QDir::NoDotAndDotDot,
+- QDirIterator::Subdirectories);
+- while (it.hasNext()) {
+- it.next();
+- appNames.append(it.fileName());
++
++ const QStringList desktopDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
++ qDebug() << "dde-file-manager getApplicationNames desktopDirs:" << desktopDirs;
++ for (const QString &dir : desktopDirs) {
++ QDirIterator it(dir, QStringList("*.desktop"),
++ QDir::Files | QDir::NoDotAndDotDot,
++ QDirIterator::Subdirectories);
++ while (it.hasNext()) {
++ it.next();
++ appNames.append(it.fileName());
++ }
+ }
++
+ return appNames;
+ }
+ //---------------------------------------------------------------------------
+@@ -259,12 +265,16 @@ QStringList FileUtils::getApplicationNames() {
+ */
+ QList<DesktopFile> FileUtils::getApplications() {
+ QList<DesktopFile> apps;
+- QDirIterator it("/usr/share/applications", QStringList("*.desktop"),
+- QDir::Files | QDir::NoDotAndDotDot,
+- QDirIterator::Subdirectories);
+- while (it.hasNext()) {
+- it.next();
+- apps.append(DesktopFile(it.filePath()));
++ const QStringList desktopDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
++ qDebug() << "dde-file-manager getApplications desktopDirs:" << desktopDirs;
++ for (const QString &dir : desktopDirs) {
++ QDirIterator it(dir, QStringList("*.desktop"),
++ QDir::Files | QDir::NoDotAndDotDot,
++ QDirIterator::Subdirectories);
++ while (it.hasNext()) {
++ it.next();
++ apps.append(DesktopFile(it.filePath()));
++ }
+ }
+ return apps;
+ }
+diff --git a/dde-file-manager-lib/shutil/mimesappsmanager.cpp b/dde-file-manager-lib/shutil/mimesappsmanager.cpp
+index c6149702..c9e53630 100644
+--- a/dde-file-manager-lib/shutil/mimesappsmanager.cpp
++++ b/dde-file-manager-lib/shutil/mimesappsmanager.cpp
+@@ -542,14 +542,9 @@ QStringList MimesAppsManager::getrecommendedAppsFromMimeWhiteList(const DUrl &ur
+
+ QStringList MimesAppsManager::getApplicationsFolders()
+ {
+- QStringList desktopFolders;
+- desktopFolders << QString("/usr/share/applications/")
+- << QString("/usr/local/share/applications/")
+- << QString("/usr/share/gnome/applications/")
+- << QString("/var/lib/flatpak/exports/share/applications")
+- << QDir::homePath() + QString("/.local/share/flatpak/exports/share/applications")
+- << QDir::homePath() + QString( "/.local/share/applications" );
+- return desktopFolders;
++ QStringList paths = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
++ qDebug() << "dde-file-manager getApplicationsFolders:" << paths;
++ return paths;
+ }
+
+ QString MimesAppsManager::getMimeAppsCacheFile()
+--
+2.21.0
+
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.pixmaps-paths.patch b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.pixmaps-paths.patch
new file mode 100644
index 00000000000..582760e6db2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/dde-file-manager.pixmaps-paths.patch
@@ -0,0 +1,38 @@
+From 084c3cfcf4995c109ca2e96f042fe341f925b0b4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Thu, 16 May 2019 19:00:52 -0300
+Subject: [PATCH 4/4] Use xdg to look for pixmap icons
+
+---
+ dde-file-manager-lib/shutil/fileutils.cpp | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/dde-file-manager-lib/shutil/fileutils.cpp b/dde-file-manager-lib/shutil/fileutils.cpp
+index d6a0573a..e912e7c2 100644
+--- a/dde-file-manager-lib/shutil/fileutils.cpp
++++ b/dde-file-manager-lib/shutil/fileutils.cpp
+@@ -362,11 +362,16 @@ QIcon FileUtils::searchAppIcon(const DesktopFile &app,
+ }
+
+ // Last chance
+- QDir appIcons("/usr/share/pixmaps","", 0, QDir::Files | QDir::NoDotAndDotDot);
+- QStringList iconFiles = appIcons.entryList();
+- QStringList searchIcons = iconFiles.filter(name);
+- if (searchIcons.count() > 0) {
+- return QIcon("/usr/share/pixmaps/" + searchIcons.at(0));
++ const QStringList dirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
++ qDebug() << "searchAppIcon: last chance: look for pixmaps at: " << dirs;
++ for (const QString &dir : dirs) {
++ const QString path = dir + QDir::separator() + "pixmaps";
++ QDir appIcons(path,"", 0, QDir::Files | QDir::NoDotAndDotDot);
++ QStringList iconFiles = appIcons.entryList();
++ QStringList searchIcons = iconFiles.filter(name);
++ if (searchIcons.count() > 0) {
++ return QIcon(path + QDir::separator() + searchIcons.at(0));
++ }
+ }
+
+ // Default icon
+--
+2.21.0
+
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-file-manager/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/default.nix
new file mode 100644
index 00000000000..081c93a65c8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-file-manager/default.nix
@@ -0,0 +1,250 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, avfs, dde-daemon, dde-dock,
+ dde-polkit-agent, dde-qt-dbus-factory, deepin, deepin-anything,
+ deepin-desktop-schemas, deepin-gettext-tools, deepin-movie-reborn,
+ deepin-shortcut-viewer, deepin-terminal, dtkcore, dtkwidget,
+ ffmpegthumbnailer, file, glib, gnugrep, gsettings-qt, gvfs,
+ jemalloc, kcodecs, libX11, libsecret, polkit, polkit-qt, poppler,
+ procps, qmake, qt5integration, qtmultimedia, qtsvg, qttools,
+ qtx11extras, runtimeShell, samba, shadow, taglib, udisks2-qt5,
+ xdg-user-dirs, xorg, zlib, wrapGAppsHook }:
+
+mkDerivation rec {
+ pname = "dde-file-manager";
+ version = "4.8.6.4";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1m0ykw5a91rm5xcah8bzk21xsambqvncj8104ihdhf9h0z9kdmm2";
+ };
+
+ nativeBuildInputs = [
+ deepin.setupHook
+ qmake
+ qttools
+ pkgconfig
+ deepin-gettext-tools
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ avfs
+ dde-daemon
+ dde-dock
+ dde-polkit-agent
+ dde-qt-dbus-factory
+ deepin-anything
+ deepin-desktop-schemas
+ deepin-movie-reborn.dev
+ deepin-shortcut-viewer
+ deepin-terminal
+ dtkcore
+ dtkwidget
+ ffmpegthumbnailer
+ file
+ glib.bin
+ glib.dev
+ gnugrep
+ gsettings-qt
+ gvfs
+ jemalloc
+ kcodecs
+ libsecret
+ polkit
+ polkit-qt
+ poppler
+ procps
+ qt5integration
+ qtmultimedia
+ qtsvg
+ qtx11extras
+ samba
+ taglib
+ udisks2-qt5
+ xdg-user-dirs
+ xorg.libX11
+ xorg.libxcb
+ xorg.xcbutil
+ xorg.xcbutilwm
+ xorg.xorgproto
+ zlib
+ ];
+
+ patches = [
+ ./dde-file-manager.fix-paths.patch
+ ./dde-file-manager.fix-mime-cache-paths.patch
+ ./dde-file-manager.pixmaps-paths.patch
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+
+ patchShebangs dde-desktop/translate_generation.sh
+ patchShebangs dde-desktop/translate_ts2desktop.sh
+ patchShebangs dde-file-manager-lib/generate_translations.sh
+ patchShebangs dde-file-manager/generate_translations.sh
+ patchShebangs dde-file-manager/translate_ts2desktop.sh
+ patchShebangs usb-device-formatter/generate_translations.sh
+ patchShebangs usb-device-formatter/translate_ts2desktop.sh
+
+ # x-terminal-emulator is a virtual package in Debian systems. The
+ # terminal emulator is configured by Debian's alternative system.
+ # It is not available on NixOS. Use deepin-terminal instead
+ sed -i -e "s,x-terminal-emulator,deepin-terminal," \
+ dde-file-manager-lib/shutil/fileutils.cpp
+
+ sed -i -e "s,\$\$\\[QT_INSTALL_LIBS\\],$out/lib," \
+ dde-file-manager-lib/dde-file-manager-lib.pro \
+ dde-file-thumbnail-tool/common.pri \
+ common/common.pri
+
+ sed -i '/^QMAKE_PKGCONFIG_DESTDIR/i QMAKE_PKGCONFIG_PREFIX = $$PREFIX' \
+ dde-file-manager-lib/dde-file-manager-lib.pro
+
+ fixPath ${dde-dock} /usr/include/dde-dock \
+ dde-dock-plugins/disk-mount/disk-mount.pro
+
+ # treefrog is not available in NixOS, and I am not sure if it is really needed
+ #fixPath $ {treefrog-framework} /usr/include/treefrog \
+ # dde-sharefiles/appbase.pri
+
+ fixPath ${deepin-anything} /usr/share/dbus-1/interfaces \
+ dde-file-manager-lib/dbusinterface/dbusinterface.pri
+
+ sed -i -e "s,\$\$system(\$\$PKG_CONFIG --variable libdir deepin-anything-server-lib),$out/lib," \
+ deepin-anything-server-plugins/dde-anythingmonitor/dde-anythingmonitor.pro
+
+ fixPath ${dde-daemon} /usr/lib/deepin-daemon/desktop-toggle \
+ dde-zone/mainwindow.h
+
+ fixPath ${deepin-gettext-tools} /usr/bin/deepin-desktop-ts-convert \
+ dde-desktop/translate_desktop2ts.sh \
+ dde-desktop/translate_ts2desktop.sh \
+ dde-file-manager/translate_desktop2ts.sh \
+ dde-file-manager/translate_ts2desktop.sh \
+ usb-device-formatter/translate_desktop2ts.sh \
+ usb-device-formatter/translate_ts2desktop.sh
+
+ fixPath ${avfs} /usr/bin/mountavfs dde-file-manager-lib/shutil/fileutils.cpp
+ fixPath ${avfs} /usr/bin/umountavfs dde-file-manager-lib/shutil/fileutils.cpp
+
+ fixPath ${deepin-terminal} /usr/bin/deepin-terminal \
+ dde-file-manager-lib/shutil/fileutils.cpp
+
+ fixPath $out /usr/share/dde-file-manager \
+ dde-sharefiles/appbase.pri \
+ dde-sharefiles/dde-sharefiles.pro
+
+ fixPath $out /usr/share/usb-device-formatter \
+ usb-device-formatter/main.cpp
+
+ fixPath $out /usr/share/applications \
+ dde-file-manager/mips/dde-file-manager-autostart.desktop \
+ dde-desktop/development.pri
+
+ fixPath $out /usr/bin \
+ dbusservices/com.deepin.dde.desktop.service \
+ dde-desktop/data/com.deepin.dde.desktop.service \
+ dde-desktop/dbus/filedialog/com.deepin.filemanager.filedialog.service \
+ dde-desktop/dbus/filemanager1/org.freedesktop.FileManager.service \
+ dde-file-manager-daemon/dbusservice/com.deepin.filemanager.daemon.service \
+ dde-file-manager-daemon/dbusservice/dde-filemanager-daemon.service \
+ dde-file-manager-daemon/dde-file-manager-daemon.pro \
+ dde-file-manager-lib/dde-file-manager-lib.pro \
+ dde-file-manager-lib/pkexec/com.deepin.pkexec.dde-file-manager.policy \
+ dde-file-manager/dde-file-manager-xdg-autostart.desktop \
+ dde-file-manager/dde-file-manager.desktop \
+ dde-file-manager/dde-file-manager.pro \
+ dde-file-manager/mips/dde-file-manager-autostart.desktop \
+ dde-file-manager/mips/dde-file-manager.desktop \
+ dde-file-manager/pkexec/com.deepin.pkexec.dde-file-manager.policy \
+ usb-device-formatter/pkexec/com.deepin.pkexec.usb-device-formatter.policy \
+ usb-device-formatter/usb-device-formatter.desktop \
+ usb-device-formatter/usb-device-formatter.pro
+ fixPath $out /etc \
+ dde-file-manager/dde-file-manager.pro \
+ dde-file-manager-daemon/dde-file-manager-daemon.pro
+
+ fixPath $out /usr \
+ common/common.pri \
+ dde-desktop/dbus/filedialog/filedialog.pri \
+ dde-desktop/dbus/filemanager1/filemanager1.pri \
+ dde-desktop/development.pri \
+ dde-dock-plugins/disk-mount/disk-mount.pro \
+ dde-file-manager-daemon/dde-file-manager-daemon.pro \
+ usb-device-formatter/usb-device-formatter.pro
+
+ sed -i -e "s,xdg-user-dir,${xdg-user-dirs}/bin/xdg-user-dir," \
+ dde-file-manager/dde-xdg-user-dirs-update
+
+ sed -i -e "s,Exec=dde-file-manager,Exec=$out/bin/dde-file-manager," \
+ dde-file-manager/dde-file-manager.desktop
+
+ sed -i -e "s,Exec=gio,Exec=${glib.bin}/bin/gio," \
+ dde-desktop/data/applications/dde-trash.desktop \
+ dde-desktop/data/applications/dde-computer.desktop
+
+ sed -i -e "s,/usr/lib/gvfs/gvfsd,${gvfs}/libexec/gvfsd," \
+ dde-file-manager-lib/gvfs/networkmanager.cpp
+
+ sed -i -e "s,/usr/sbin/smbd,${samba}/bin/smbd," \
+ -e "s,/usr/sbin/groupadd,${shadow}/bin/groupadd," \
+ -e "s,/usr/sbin/adduser,${shadow}/bin/adduser," \
+ dde-file-manager-daemon/usershare/usersharemanager.cpp
+
+ sed -i -e 's,startDetached("deepin-shortcut-viewer",startDetached("${deepin-shortcut-viewer}/bin/deepin-shortcut-viewer",' \
+ dde-file-manager-lib/controllers/appcontroller.cpp
+
+ sed -i -e 's,/bin/bash,${runtimeShell},' \
+ -e 's,\<ps\>,${procps}/bin/ps,' \
+ -e 's,\<grep\>,${gnugrep}/bin/grep,' \
+ utils/utils.cpp \
+ dde-file-manager-lib/controllers/fileeventprocessor.cpp
+
+ # The hard coded path in `QString("/etc/xdg/%1/%2")` in
+ # dde-file-manager-lib/interfaces/dfmsettings.cpp
+ # does not needed a fix because all the standard locations
+ # are tried before faling back to /etc/xdg.
+
+ # I do not know yet how to deal with:
+ # dde-file-manager-lib/sw_label/llsdeepinlabellibrary.h: return "/usr/lib/sw_64-linux-gnu/dde-file-manager/libllsdeeplabel.so";
+ # dde-file-manager-lib/sw_label/filemanagerlibrary.h: return "/usr/lib/sw_64-linux-gnu/dde-file-manager/libfilemanager.so";
+ # dde-file-manager-lib/sw_label/libinstall.sh:mkdir /usr/lib/sw_64-linux-gnu/dde-file-manager
+ # dde-file-manager-lib/sw_label/libinstall.sh:cp libfilemanager.so libllsdeeplabel.so /usr/lib/sw_64-linux-gnu/dde-file-manager
+ # They are not present on my installations of Deepin Linux, Arch Linux and Ubuntu. Can they be ignored?
+
+ # Notes:
+ # - As file-roller is looked in the path using QStandardPaths::findExecutable, it is not been added as a dependency.
+ # - deepin-qt5config is a dependency exclusive to the Deepin Linux distribution. No other distribution has it, according to repology.
+ '';
+
+ qmakeFlags = [
+ "QMAKE_CFLAGS_ISYSTEM="
+
+ # Disable ffmpeg
+ "CONFIG+=DISABLE_FFMPEG"
+ ];
+
+ preBuild = ''
+ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${zlib}/lib";
+ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${libX11}/lib";
+ '';
+
+ postFixup = ''
+ # debuging
+ unset LD_LIBRARY_PATH
+ searchForUnresolvedDLL $out
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "File manager and desktop module for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/dde-file-manager;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-launcher/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-launcher/default.nix
new file mode 100644
index 00000000000..b36d87604e7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-launcher/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, cmake, dde-qt-dbus-factory,
+ dde-session-ui, deepin, deepin-desktop-schemas, deepin-wallpapers,
+ dtkcore, dtkwidget, gsettings-qt, qtsvg, qttools, qtx11extras,
+ which, xdg_utils, wrapGAppsHook }:
+
+mkDerivation rec {
+ pname = "dde-launcher";
+ version = "4.6.13";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1lwwn2qjbd4i7wx18mi8n7hzdh832i3kdadrivr10sbafdank7ky";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ qttools
+ wrapGAppsHook
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dde-qt-dbus-factory
+ dde-session-ui
+ deepin-desktop-schemas
+ deepin-wallpapers
+ dtkcore
+ dtkwidget
+ gsettings-qt
+ qtsvg
+ qtx11extras
+ which
+ xdg_utils
+ ];
+
+ postPatch = ''
+ # debugging
+ searchHardCodedPaths
+
+ substituteInPlace CMakeLists.txt --replace "/usr/share" "$out/share"
+
+ substituteInPlace src/dbusservices/com.deepin.dde.Launcher.service --replace "/usr" "$out"
+
+ substituteInPlace src/historywidget.cpp --replace "xdg-open" "${xdg_utils}/bin/xdg-open"
+ substituteInPlace src/widgets/miniframebottombar.cpp --replace "dde-shutdown" "${dde-session-ui}/bin/dde-shutdown"
+ substituteInPlace src/widgets/miniframerightbar.cpp --replace "which" "${which}/bin/which"
+
+ # Uncomment (and remove space after $) after packaging deepin-manual
+ #substituteInPlace src/sharedeventfilter.cpp --replace "dman" "$ {deepin-manual}/bin/dman"
+
+ for f in src/boxframe/*.cpp; do
+ substituteInPlace $f --replace "/usr/share/backgrounds/default_background.jpg" "${deepin-wallpapers}/share/backgrounds/deepin/desktop.jpg"
+ done
+
+ # note: `dbus-send` path does not need to be hard coded because it is not used for dtkcore >= 2.0.8.0
+ '';
+
+ postFixup = ''
+ # debugging
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin Desktop Environment launcher module";
+ homepage = https://github.com/linuxdeepin/dde-launcher;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-network-utils/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-network-utils/default.nix
new file mode 100644
index 00000000000..5397439949b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-network-utils/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, mkDerivation, fetchFromGitHub, substituteAll, qmake, pkgconfig, qttools,
+ dde-qt-dbus-factory, proxychains, which, deepin }:
+
+mkDerivation rec {
+ pname = "dde-network-utils";
+ version = "0.1.4";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "0nj9lf455lf2hyqv6xwhm4vrr825ldbl83azzrrzqs6p781x65i1";
+ };
+
+ nativeBuildInputs = [
+ qmake
+ pkgconfig
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dde-qt-dbus-factory
+ proxychains
+ which
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit which proxychains;
+ })
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # for debugging
+ patchShebangs translate_generation.sh
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # for debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin network utils";
+ homepage = https://github.com/linuxdeepin/dde-network-utils;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-network-utils/fix-paths.patch b/nixpkgs/pkgs/desktops/deepin/dde-network-utils/fix-paths.patch
new file mode 100644
index 00000000000..9f7ecd423c5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-network-utils/fix-paths.patch
@@ -0,0 +1,23 @@
+diff -ur dde-network-utils-master.orig/dde-network-utils.pro dde-network-utils-master/dde-network-utils.pro
+--- dde-network-utils-master.orig/dde-network-utils.pro 2019-04-04 03:37:46.000000000 -0300
++++ dde-network-utils-master/dde-network-utils.pro 2019-04-07 05:56:28.283195087 -0300
+@@ -52,6 +52,7 @@
+
+ QMAKE_PKGCONFIG_NAME = libddenetworkutils
+ QMAKE_PKGCONFIG_DESCRIPTION = libddenetworkutils
++QMAKE_PKGCONFIG_PREFIX = $$PREFIX
+ QMAKE_PKGCONFIG_INCDIR = $$includes.path
+ QMAKE_PKGCONFIG_LIBDIR = $$target.path
+ QMAKE_PKGCONFIG_DESTDIR = pkgconfig
+diff -ur dde-network-utils-master.orig/networkworker.cpp dde-network-utils-master/networkworker.cpp
+--- dde-network-utils-master.orig/networkworker.cpp 2019-04-04 03:37:46.000000000 -0300
++++ dde-network-utils-master/networkworker.cpp 2019-04-07 05:54:28.656479216 -0300
+@@ -80,7 +80,7 @@
+ }
+ }
+
+- const bool isAppProxyVaild = QProcess::execute("which", QStringList() << "/usr/bin/proxychains4") == 0;
++ const bool isAppProxyVaild = QProcess::execute("@which@/bin/which", QStringList() << "@proxychains@/bin/proxychains4") == 0;
+ m_networkModel->onAppProxyExistChanged(isAppProxyVaild);
+ }
+
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/dde-polkit-agent.plugins-dir.patch b/nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/dde-polkit-agent.plugins-dir.patch
new file mode 100644
index 00000000000..a6941e975eb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/dde-polkit-agent.plugins-dir.patch
@@ -0,0 +1,42 @@
+From 4f457d38e9e75bc97ee7dba633bf0cdd61b8cd5b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Fri, 19 Apr 2019 22:01:16 -0300
+Subject: [PATCH] Use an environment variable to find plugins
+
+---
+ pluginmanager.cpp | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/pluginmanager.cpp b/pluginmanager.cpp
+index 0c03237..79bdf86 100644
+--- a/pluginmanager.cpp
++++ b/pluginmanager.cpp
+@@ -34,13 +34,19 @@ QList<QButtonGroup*> PluginManager::reduceGetOptions(const QString &actionID)
+ void PluginManager::load()
+ {
+
+- QDir dir("/usr/lib/polkit-1-dde/plugins/");
+- QFileInfoList pluginFiles = dir.entryInfoList((QStringList("*.so")));
++ QStringList pluginsDirs = QProcessEnvironment::systemEnvironment().value("DDE_POLKIT_PLUGINS_DIRS").split(QDir::listSeparator(), QString::SkipEmptyParts);
++ pluginsDirs.append("/usr/lib/polkit-1-dde/plugins/");
+
+- for (const QFileInfo &pluginFile : pluginFiles) {
+- AgentExtension *plugin = loadFile(pluginFile.absoluteFilePath());
+- if (plugin)
+- m_plugins << plugin;
++ for (const QString &dirName : pluginsDirs) {
++ QDir dir(dirName);
++
++ QFileInfoList pluginFiles = dir.entryInfoList((QStringList("*.so")));
++
++ for (const QFileInfo &pluginFile : pluginFiles) {
++ AgentExtension *plugin = loadFile(pluginFile.absoluteFilePath());
++ if (plugin)
++ m_plugins << plugin;
++ }
+ }
+ }
+
+--
+2.21.0
+
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/default.nix
new file mode 100644
index 00000000000..9d181c188d4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-polkit-agent/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, qttools, polkit-qt,
+ dtkcore, dtkwidget, dde-qt-dbus-factory, deepin }:
+
+mkDerivation rec {
+ pname = "dde-polkit-agent";
+ version = "0.2.10";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "0syg121slpd6d9xpifgcf85lg9ca0k96cl1g3rjvsmczs2d2ffgf";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dde-qt-dbus-factory
+ dtkcore
+ dtkwidget
+ polkit-qt
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ patchShebangs translate_generation.sh
+
+ fixPath $out /usr dde-polkit-agent.pro polkit-dde-authentication-agent-1.desktop
+ fixPath /run/current-system/sw /usr/lib/polkit-1-dde/plugins pluginmanager.cpp
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "PolicyKit agent for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/dde-polkit-agent;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix
new file mode 100644
index 00000000000..a0e1e35ad85
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, qmake, python3, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "dde-qt-dbus-factory";
+ version = "1.1.5";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1jzfblsmnfpgym95mmbd8mjkk8wqqfb0kz6n6fy742hmqlzrpsj7";
+ };
+
+ nativeBuildInputs = [
+ qmake
+ python3
+ deepin.setupHook
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ fixPath $out /usr \
+ libdframeworkdbus/DFrameworkdbusConfig.in \
+ libdframeworkdbus/libdframeworkdbus.pro
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Qt DBus interface library for Deepin software";
+ homepage = https://github.com/linuxdeepin/dde-qt-dbus-factory;
+ license = with licenses; [ gpl3Plus lgpl2Plus ];
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dde-session-ui/default.nix b/nixpkgs/pkgs/desktops/deepin/dde-session-ui/default.nix
new file mode 100644
index 00000000000..d6713fb3688
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dde-session-ui/default.nix
@@ -0,0 +1,126 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, dbus, dde-daemon,
+ dde-qt-dbus-factory, deepin, deepin-desktop-schemas,
+ deepin-gettext-tools, deepin-icon-theme, deepin-wallpapers, dtkcore,
+ dtkwidget, gnugrep, gsettings-qt, hicolor-icon-theme, lightdm_qt,
+ onboard, qtsvg, qttools, qtx11extras, setxkbmap, utillinux, which,
+ xkeyboard_config, xorg, xrandr, wrapGAppsHook }:
+
+mkDerivation rec {
+ pname = "dde-session-ui";
+ version = "4.9.12";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "00i45xv87wx9cww1d445lg6zjbhda5kki8nhsaav8gf2d4cmwzf4";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ qttools
+ deepin-gettext-tools
+ wrapGAppsHook
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dbus
+ dde-daemon
+ dde-qt-dbus-factory
+ deepin-desktop-schemas
+ deepin-icon-theme
+ deepin-wallpapers
+ dtkcore
+ dtkwidget
+ gnugrep
+ gsettings-qt
+ hicolor-icon-theme
+ lightdm_qt
+ onboard
+ qtsvg
+ qtx11extras
+ setxkbmap
+ utillinux
+ which
+ xkeyboard_config
+ xorg.libXcursor
+ xorg.libXrandr
+ xorg.libXtst
+ xrandr
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+
+ patchShebangs translate_generation.sh translate_desktop.sh
+
+ substituteInPlace translate_desktop.sh --replace "/usr/bin/deepin-desktop-ts-convert" "deepin-desktop-ts-convert"
+
+ find -type f -exec sed -i -e "s,path = /etc,path = $out/etc," {} +
+ find -type f -exec sed -i -e "s,path = /usr,path = $out," {} +
+ find -type f -exec sed -i -e "s,/usr/share/dde-session-ui,$out/share/dde-session-ui," {} +
+
+ substituteInPlace dde-osd/dde-osd_autostart.desktop --replace "Exec=/usr/lib/deepin-daemon/dde-osd" "Exec=$out/lib/deepin-daemon/dde-osd"
+ substituteInPlace dde-osd/com.deepin.dde.osd.service --replace "Exec=/usr/lib/deepin-daemon/dde-osd" "Exec=$out/lib/deepin-daemon/dde-osd"
+ substituteInPlace dde-lock/com.deepin.dde.lockFront.service --replace "Exec=/usr/bin/dde-lock" "Exec=$out/bin/dde-lock"
+ substituteInPlace dmemory-warning-dialog/com.deepin.dde.MemoryWarningDialog.service --replace "Exec=/usr/bin/dmemory-warning-dialog" "Exec=$out/bin/dmemory-warning-dialog"
+ substituteInPlace dde-warning-dialog/com.deepin.dde.WarningDialog.service --replace "Exec=/usr/lib/deepin-daemon/dde-warning-dialog" "Exec=$out/lib/deepin-daemon/dde-warning-dialog"
+ substituteInPlace dde-shutdown/com.deepin.dde.shutdownFront.service --replace "Exec=/usr/bin/dde-shutdown" "Exec=$out/bin/dde-shutdown"
+ substituteInPlace dde-welcome/com.deepin.dde.welcome.service --replace "Exec=/usr/lib/deepin-daemon/dde-welcome" "Exec=$out/lib/deepin-daemon/dde-welcome"
+ substituteInPlace session-ui-guardien/session-ui-guardien.desktop --replace "Exec=/usr/bin/session-ui-guardien" "Exec=$out/bin/session-ui-guardien"
+ substituteInPlace lightdm-deepin-greeter/lightdm-deepin-greeter.desktop --replace "Exec=/usr/bin/deepin-greeter" "Exec=$out/bin/deepin-greeter"
+ substituteInPlace misc/applications/deepin-toggle-desktop.desktop.in --replace "Exec=/usr/lib/deepin-daemon/desktop-toggle" "Exec=${dde-daemon}/lib/deepin-daemon/desktop-toggle"
+
+ # Uncomment (and remove space after $) after packaging deepin-system-monitor
+ #substituteInPlace dde-shutdown/view/contentwidget.cpp --replace "/usr/bin/deepin-system-monitor" "$ {deepin-system-monitor}/bin/deepin-system-monitor"
+
+ substituteInPlace dde-offline-upgrader/main.cpp --replace "dbus-send" "${dbus}/bin/dbus-send"
+ substituteInPlace dde-osd/kblayoutindicator.cpp --replace "dbus-send" "${dbus}/bin/dbus-send"
+ substituteInPlace dde-shutdown/view/contentwidget.cpp --replace "/usr/share/backgrounds/deepin" "${deepin-wallpapers}/share/backgrounds/deepin"
+ substituteInPlace dde-welcome/mainwidget.cpp --replace "dbus-send" "${dbus}/bin/dbus-send"
+ substituteInPlace dmemory-warning-dialog/src/buttondelegate.cpp --replace "dbus-send" "${dbus}/bin/dbus-send"
+ substituteInPlace dmemory-warning-dialog/src/buttondelegate.cpp --replace "kill" "${utillinux}/bin/dbus-send"
+ substituteInPlace global_util/xkbparser.h --replace "/usr/share/X11/xkb/rules/base.xml" "${xkeyboard_config}/share/X11/xkb/rules/base.xml"
+ substituteInPlace lightdm-deepin-greeter/deepin-greeter --replace "/etc/deepin/greeters.d" "$out/etc/deepin/greeters.d"
+ substituteInPlace lightdm-deepin-greeter/main.cpp --replace "/usr/share/icons/deepin" "${deepin-icon-theme}/share/icons/deepin"
+ substituteInPlace lightdm-deepin-greeter/scripts/00-xrandr --replace "egrep" "${gnugrep}/bin/egrep"
+ substituteInPlace lightdm-deepin-greeter/scripts/00-xrandr --replace "xrandr" "${xrandr}/bin/xrandr"
+ substituteInPlace lightdm-deepin-greeter/scripts/lightdm-deepin-greeter --replace "/usr/bin/lightdm-deepin-greeter" "$out/bin/lightdm-deepin-greeter"
+ substituteInPlace session-ui-guardien/guardien.cpp --replace "dde-lock" "$out/bin/dde-lock"
+ substituteInPlace session-ui-guardien/guardien.cpp --replace "dde-shutdown" "$out/bin/dde-shutdown"
+ substituteInPlace session-widgets/lockworker.cpp --replace "dde-switchtogreeter" "$out/bin/dde-switchtogreeter"
+ substituteInPlace session-widgets/lockworker.cpp --replace "which" "${which}/bin/which"
+ substituteInPlace session-widgets/userinfo.cpp --replace "/usr/share/wallpapers/deepin" "${deepin-wallpapers}/share/wallpapers/deepin"
+ substituteInPlace widgets/fullscreenbackground.cpp --replace "/usr/share/wallpapers/deepin" "${deepin-wallpapers}/share/wallpapers/deepin"
+ substituteInPlace widgets/kblayoutwidget.cpp --replace "setxkbmap" "${setxkbmap}/bin/setxkbmap"
+ substituteInPlace widgets/virtualkbinstance.cpp --replace "onboard" "${onboard}/bin/onboard"
+
+ # fix default background url
+ substituteInPlace widgets/fullscreenbackground.cpp --replace "/usr/share/backgrounds/default_background.jpg" "${deepin-wallpapers}/share/backgrounds/deepin/desktop.jpg"
+
+ # NOTES
+ # - on deepin linux /usr/share/icons/default/index.theme is controlled by alternatives, without an equivalent mechanism in NixOS
+ # - do not wrap dde-dman-portal related files: it appears it has been removed: https://github.com/linuxdeepin/dde-session-ui/commit/3bd028cf135ad22c784c0146e447ef34a69af768
+ '';
+
+ postFixup = ''
+ # wrapGAppsHook does not work with binaries outside of $out/bin or $out/libexec
+ for binary in $out/lib/deepin-daemon/*; do
+ wrapProgram $binary "''${qtWrapperArgs[@]}"
+ done
+
+ searchHardCodedPaths $out # debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin desktop-environment - Session UI module";
+ homepage = https://github.com/linuxdeepin/dde-session-ui;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-anything/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-anything/default.nix
new file mode 100644
index 00000000000..7c88102c5f3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-anything/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qtbase, udisks2-qt5, utillinux,
+ dtkcore, deepin }:
+
+mkDerivation rec {
+ pname = "deepin-anything";
+ version = "0.1.0";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1kvyffrii4b012f6ld1ih14qrn7gg5cxbdpbkac0wxb22hnz0azm";
+ };
+
+ outputs = [ "out" "modsrc" ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dtkcore
+ qtbase
+ udisks2-qt5
+ utillinux
+ ];
+
+ enableParallelBuilding = true;
+
+ makeFlags = [
+ "DEB_HOST_MULTIARCH="
+ "PREFIX=${placeholder "out"}"
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # for debugging
+ fixPath $modsrc /usr/src Makefile
+ fixPath $out /usr Makefile
+ fixPath $out /usr server/tool/tool.pro
+ fixPath $out /etc server/tool/tool.pro
+ fixPath $out /usr/bin \
+ server/tool/deepin-anything-tool.service \
+ server/tool/com.deepin.anything.service \
+ server/monitor/deepin-anything-monitor.service
+ sed -e 's,/lib/systemd,$$PREFIX/lib/systemd,' -i server/monitor/src/src.pro server/tool/tool.pro
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # for debugging
+ searchHardCodedPaths $modsrc # for debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin file search tool";
+ homepage = https://github.com/linuxdeepin/deepin-anything;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-calculator/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-calculator/default.nix
new file mode 100644
index 00000000000..97d2b53da70
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-calculator/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, qttools, qtsvg, dtkcore,
+ dtkwidget, deepin }:
+
+mkDerivation rec {
+ pname = "deepin-calculator";
+ version = "1.0.11";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "10bfq0h8v0a8i46gcbsy79l194g8sc0ysg289ndrra209fhwlidq";
+ };
+
+ nativeBuildInputs = [
+ qmake
+ pkgconfig
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dtkcore
+ dtkwidget
+ qtsvg
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+ patchShebangs translate_generation.sh
+ fixPath $out /usr deepin-calculator.pro
+ substituteInPlace deepin-calculator.desktop --replace "Exec=deepin-calculator" "Exec=$out/bin/deepin-calculator"
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Easy to use calculator for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/deepin-calculator;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-desktop-base/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-desktop-base/default.nix
new file mode 100644
index 00000000000..ba826eb9063
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-desktop-base/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchFromGitHub, deepin-wallpapers, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-desktop-base";
+ version = "2019.06.19";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1r158x4z4qalv4q1ni3aln05krdzblvr7y6wyciwl7cr5ag1i1jy";
+ };
+
+ nativeBuildInputs = [ deepin.setupHook ];
+
+ buildInputs = [ deepin-wallpapers ];
+
+ # TODO: Fedora recommended dependencies:
+ # deepin-wallpapers
+ # plymouth-theme-deepin
+
+ postPatch = ''
+ searchHardCodedPaths
+
+ fixPath $out /etc Makefile
+ fixPath $out /usr Makefile
+
+ # Remove Deepin distro's lsb-release
+ # Don't override systemd timeouts
+ # Remove apt-specific templates
+ echo ----------------------------------------------------------------
+ echo grep --color=always -E 'lsb-release|systemd|python-apt|backgrounds' Makefile
+ grep --color=always -E 'lsb-release|systemd|python-apt|backgrounds' Makefile
+ echo ----------------------------------------------------------------
+ sed -i -E '/lsb-release|systemd|python-apt|backgrounds/d' Makefile
+ '';
+
+ postInstall = ''
+ # Make a symlink for deepin-version
+ ln -s ../lib/deepin/desktop-version $out/etc/deepin-version
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Base assets and definitions for Deepin Desktop Environment";
+ # TODO: revise
+ longDescription = ''
+ This package provides some components for Deepin desktop environment.
+ - deepin logo
+ - deepin desktop version
+ - login screen background image
+ - language information
+ '';
+ homepage = https://github.com/linuxdeepin/deepin-desktop-base;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix
new file mode 100644
index 00000000000..4f2427e8237
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchFromGitHub, python3, gnome3, glib, deepin-gtk-theme,
+ deepin-icon-theme, deepin-sound-theme, deepin-wallpapers, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-desktop-schemas";
+ version = "3.13.6";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "03jqb47kjyb9b43m2yincfjn2i43ma1pn1hddyicrrpg937caa81";
+ };
+
+ nativeBuildInputs = [
+ python3
+ glib.dev
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ gnome3.dconf
+ deepin-gtk-theme
+ deepin-icon-theme
+ deepin-sound-theme
+ deepin-wallpapers
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+
+ # fix default background url
+ sed -i -e 's,/usr/share/backgrounds/default_background.jpg,/usr/share/backgrounds/deepin/desktop.jpg,' \
+ overrides/common/com.deepin.wrap.gnome.desktop.override
+
+ fixPath ${deepin-wallpapers} /usr/share/backgrounds \
+ overrides/common/com.deepin.wrap.gnome.desktop.override
+
+ fixPath ${deepin-wallpapers} /usr/share/wallpapers/deepin \
+ schemas/com.deepin.dde.appearance.gschema.xml
+
+ # still hardcoded paths:
+ # /etc/gnome-settings-daemon/xrandr/monitors.xml ? gnome3.gnome-settings-daemon
+ # /usr/share/backgrounds/gnome/adwaita-lock.jpg ? gnome3.gnome-backgrounds
+ # /usr/share/backgrounds/gnome/adwaita-timed.xml gnome3.gnome-backgrounds
+ # /usr/share/desktop-directories
+ '';
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ doCheck = true;
+ checkTarget = "test";
+
+ postInstall = ''
+ glib-compile-schemas --strict $out/share/glib-2.0/schemas
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "GSettings deepin desktop-wide schemas";
+ homepage = https://github.com/linuxdeepin/deepin-desktop-schemas;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-gettext-tools/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-gettext-tools/default.nix
new file mode 100644
index 00000000000..67fcc36bcef
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-gettext-tools/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, gettext, python3Packages, perlPackages, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-gettext-tools";
+ version = "1.0.8";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "03cwa82dd14a31v44jd3z0kpiri6g21ar4f48s8ph78nvjy55880";
+ };
+
+ nativeBuildInputs = [
+ python3Packages.wrapPython
+ ];
+
+ buildInputs = [
+ gettext
+ perlPackages.perl
+ perlPackages.XMLLibXML
+ perlPackages.ConfigTiny
+ python3Packages.python
+ ];
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ postPatch = ''
+ sed -e 's/sudo cp/cp/' -i src/generate_mo.py
+ '';
+
+ postFixup = ''
+ wrapPythonPrograms
+ wrapPythonProgramsIn "$out/lib/${pname}"
+ wrapProgram $out/bin/deepin-desktop-ts-convert --set PERL5LIB $PERL5LIB
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin Internationalization utilities";
+ homepage = https://github.com/linuxdeepin/deepin-gettext-tools;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-gtk-theme/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-gtk-theme/default.nix
new file mode 100644
index 00000000000..8e2469a2c78
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-gtk-theme/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, gtk-engine-murrine, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-gtk-theme";
+ version = "17.10.11";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = "deepin-gtk-theme";
+ rev = version;
+ sha256 = "0zs6mq70yd1k3d9zm3q6zxnw1md56r4imad5imdxwx58yxdx47fw";
+ };
+
+ propagatedUserEnvPkgs = [ gtk-engine-murrine ];
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin GTK Theme";
+ homepage = https://github.com/linuxdeepin/deepin-gtk-theme;
+ license = licenses.lgpl3;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-icon-theme/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-icon-theme/default.nix
new file mode 100644
index 00000000000..e63a228d0cb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-icon-theme/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, gtk3, xcursorgen, papirus-icon-theme, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-icon-theme";
+ version = "15.12.71";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "12rzzjp906np95ckbxrd4mb345lm198wz69kxy48f8q1zg78q8iw";
+ };
+
+ nativeBuildInputs = [ gtk3 xcursorgen ];
+
+ buildInputs = [ papirus-icon-theme ];
+
+ postPatch = ''
+ patchShebangs tools/hicolor.links
+ patchShebangs tools/display_unused_links.sh
+ patchShebangs cursors-src/cursors/bitmaps/make.sh
+ patchShebangs cursors-src/render-cursors.sh
+
+ # keep icon-theme.cache
+ sed -i -e 's|\(-rm -f .*/icon-theme.cache\)|# \1|g' Makefile
+ '';
+
+ buildTargets = "all hicolor-links";
+ installTargets = "install-icons install-cursors";
+ installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ postInstall = ''
+ cp -a ./Sea ./usr/share/icons/hicolor "$out"/share/icons/
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Icons for the Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/deepin-icon-theme;
+ license = licenses.gpl3;
+ platforms = platforms.unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-image-viewer/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-image-viewer/default.nix
new file mode 100644
index 00000000000..733f4846f5c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-image-viewer/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, qttools, qtsvg,
+ qtx11extras, dtkcore, dtkwidget, qt5integration, freeimage, libraw,
+ libexif, deepin
+}:
+
+mkDerivation rec {
+ pname = "deepin-image-viewer";
+ version = "1.3.17";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "0hz4f1kqcycyvggwfzpkblhhha87rqd427hq0mf31jfh5x17ymnh";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ qtsvg
+ qtx11extras
+ dtkcore
+ dtkwidget
+ qt5integration
+ freeimage
+ libraw
+ libexif
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ patchShebangs viewer/generate_translations.sh
+ fixPath $out /usr viewer/com.deepin.ImageViewer.service
+ sed -i qimage-plugins/freeimage/freeimage.pro \
+ qimage-plugins/libraw/libraw.pro \
+ -e "s,\$\$\[QT_INSTALL_PLUGINS\],$out/$qtPluginPrefix,"
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Image Viewer for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/deepin-image-viewer;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ badPlatforms = [ "aarch64-linux" ]; # See https://github.com/NixOS/nixpkgs/pull/46463#issuecomment-420274189
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-menu/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-menu/default.nix
new file mode 100644
index 00000000000..9aef8a15eb9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-menu/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, dtkcore, dtkwidget,
+ qt5integration, deepin }:
+
+mkDerivation rec {
+ pname = "deepin-menu";
+ version = "3.4.8";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "09i0ybllymlj7s46pxma5py6x8nknfja4gxn5gj9kpf2c37qsqjc";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dtkcore
+ dtkwidget
+ qt5integration
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ fixPath $out /usr \
+ data/com.deepin.menu.service \
+ deepin-menu.desktop \
+ deepin-menu.pro
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin menu service";
+ homepage = https://github.com/linuxdeepin/deepin-menu;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-metacity/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-metacity/default.nix
new file mode 100644
index 00000000000..18f54223301
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-metacity/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, gnome3, glib,
+ gtk3, libgtop, bamf, json-glib, libcanberra-gtk3, libxkbcommon,
+ libstartup_notification, deepin-wallpapers, deepin-desktop-schemas,
+ deepin, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-metacity";
+ version = "3.22.24";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1im0wz1zlxiag4kpp5d4hv0aa0ybr4bizarr3903hrqv0lp46hyx";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ libtool
+ glib.dev
+ gnome3.gnome-common
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gnome3.dconf
+ gtk3
+ libgtop
+ gnome3.zenity
+ bamf
+ json-glib
+ libcanberra-gtk3
+ libstartup_notification
+ libxkbcommon
+ deepin-wallpapers
+ deepin-desktop-schemas
+ ];
+
+ postPatch = ''
+ sed -i src/ui/deepin-background-cache.c \
+ -e 's;/usr/share/backgrounds/default_background.jpg;${deepin-wallpapers}/share/backgrounds/deepin/desktop.jpg;'
+ '';
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ configureFlags = [ "--disable-themes-documentation" ];
+
+ preConfigure = ''
+ HOME=$TMP
+ NOCONFIGURE=1 ./autogen.sh
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "2D window manager for Deepin";
+ homepage = https://github.com/linuxdeepin/deepin-metacity;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-movie-reborn/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-movie-reborn/default.nix
new file mode 100644
index 00000000000..046f589263b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-movie-reborn/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qttools, qtx11extras,
+ dtkcore, dtkwidget, ffmpeg, ffmpegthumbnailer, mpv, pulseaudio,
+ libdvdnav, libdvdread, xorg, deepin }:
+
+mkDerivation rec {
+ pname = "deepin-movie-reborn";
+ version = "3.2.24";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "16mxym7dm6qk90q2w7xqm62047rq0lirrjmnnpaxshzaww9gngkh";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ qttools
+ ];
+
+ buildInputs = [
+ dtkcore
+ dtkwidget
+ ffmpeg
+ ffmpegthumbnailer
+ libdvdnav
+ libdvdread
+ mpv
+ pulseaudio
+ qtx11extras
+ xorg.libXdmcp
+ xorg.libXtst
+ xorg.libpthreadstubs
+ xorg.xcbproto
+ ];
+
+ NIX_LDFLAGS = "-ldvdnav";
+
+ postPatch = ''
+ sed -i src/CMakeLists.txt -e "s,/usr/lib/dtk2,${dtkcore}/lib/dtk2,"
+ sed -i src/libdmr/libdmr.pc.in -e "s,/usr,$out," -e 's,libdir=''${prefix}/,libdir=,'
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin movie player";
+ homepage = https://github.com/linuxdeepin/deepin-movie-reborn;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-mutter/deepin-mutter.plugins-dir.patch b/nixpkgs/pkgs/desktops/deepin/deepin-mutter/deepin-mutter.plugins-dir.patch
new file mode 100644
index 00000000000..4a57b501e01
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-mutter/deepin-mutter.plugins-dir.patch
@@ -0,0 +1,41 @@
+From 8eeb4febcae517080d6638f8953e02335df79f01 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Sat, 20 Apr 2019 00:28:47 -0300
+Subject: [PATCH] Get plugins dir from environment variable
+
+---
+ src/compositor/meta-plugin-manager.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/compositor/meta-plugin-manager.c b/src/compositor/meta-plugin-manager.c
+index ac5716db..d000100b 100644
+--- a/src/compositor/meta-plugin-manager.c
++++ b/src/compositor/meta-plugin-manager.c
+@@ -56,14 +56,22 @@ meta_plugin_manager_set_plugin_type (GType gtype)
+ void
+ meta_plugin_manager_load (const gchar *plugin_name)
+ {
+- const gchar *dpath = MUTTER_PLUGIN_DIR "/";
++ const gchar *env_var;
++ const gchar *dpath;
+ gchar *path;
+ MetaModule *module;
+
++ env_var = g_getenv ("DEEPIN_MUTTER_PLUGINS_DIR");
++ g_debug ("$DEEPIN_MUTTER_PLUGINS_DIR: %s\n", env_var);
++
++ dpath = env_var == NULL || strlen (env_var) == 0 ? MUTTER_PLUGIN_DIR : env_var;
++ g_debug ("dpath: %s\n", dpath);
++
+ if (g_path_is_absolute (plugin_name))
+ path = g_strdup (plugin_name);
+ else
+- path = g_strconcat (dpath, plugin_name, ".so", NULL);
++ path = g_strconcat (dpath, "/", plugin_name, ".so", NULL);
++ g_debug ("path: %s\n", path);
+
+ module = g_object_new (META_TYPE_MODULE, "path", path, NULL);
+ if (!module || !g_type_module_use (G_TYPE_MODULE (module)))
+--
+2.21.0
+
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-mutter/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-mutter/default.nix
new file mode 100644
index 00000000000..9f2e8068d55
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-mutter/default.nix
@@ -0,0 +1,79 @@
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, gnome3, gtk3,
+ xorg, libcanberra-gtk3, upower, xkeyboard_config, libxkbcommon,
+ libstartup_notification, libinput, libgudev, cogl, clutter, systemd,
+ gsettings-desktop-schemas, deepin-desktop-schemas, wrapGAppsHook,
+ deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-mutter";
+ version = "3.20.38";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1aq7606sgn2c6n8wfgxdryw3lprc4va0zjc0r65798w5656fdi31";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ libtool
+ gnome3.gnome-common
+ wrapGAppsHook
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ clutter
+ cogl
+ deepin-desktop-schemas
+ gnome3.gnome-desktop
+ gnome3.zenity
+ gsettings-desktop-schemas
+ gtk3
+ libcanberra-gtk3
+ libgudev
+ libinput
+ libstartup_notification
+ libxkbcommon
+ systemd
+ upower
+ xkeyboard_config
+ xorg.libxkbfile
+ ];
+
+ patches = [
+ ./deepin-mutter.plugins-dir.patch
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+ sed -i -e "s,Exec=deepin-mutter,Exec=$out/bin/deepin-mutter," data/mutter.desktop.in
+ '';
+
+ configureFlags = [
+ "--enable-native-backend"
+ "--enable-compile-warnings=minimum"
+ ];
+
+ preConfigure = ''
+ NOCONFIGURE=1 ./autogen.sh
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # debugging
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Base window manager for deepin, fork of gnome mutter";
+ homepage = https://github.com/linuxdeepin/deepin-mutter;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-screenshot/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-screenshot/default.nix
new file mode 100644
index 00000000000..e77aa5e68c6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-screenshot/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, mkDerivation, fetchFromGitHub, fetchpatch, cmake, pkgconfig, xdg_utils, qttools, qtx11extras,
+ dtkcore, dtkwidget, dtkwm, deepin-turbo, deepin-shortcut-viewer,
+ deepin }:
+
+mkDerivation rec {
+ pname = "deepin-screenshot";
+ version = "4.2.1";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "16wy1ywp4lm7fg488laqxgxpir745rbpj9z410r6x7krpgjds189";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ deepin-shortcut-viewer
+ deepin-turbo
+ dtkcore
+ dtkwidget
+ dtkwm
+ qtx11extras
+ ];
+
+ patches = [
+ (fetchpatch {
+ url = https://github.com/linuxdeepin/deepin-screenshot/pull/52/commits/e14508b223fd9965854ed41c944cea2ea19e6e0c.patch;
+ sha256 = "18zvz98z3hr8pcdyb706za6h2nwx23zsjb1hgyp21ycinhzr9j9h";
+ })
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ patchShebangs generate_translations.sh
+ fixPath ${deepin-turbo} /usr/bin/deepin-turbo-invoker src/dbusservice/com.deepin.Screenshot.service
+ fixPath $out /usr/bin/deepin-screenshot src/dbusservice/com.deepin.Screenshot.service
+ substituteInPlace src/mainwindow.cpp --replace '"xdg-open,%1"' '"${xdg_utils}/bin/xdg-open,%1"'
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Easy-to-use screenshot tool for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/deepin-screenshot;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo flokli ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-shortcut-viewer/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-shortcut-viewer/default.nix
new file mode 100644
index 00000000000..62c6c7ed925
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-shortcut-viewer/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, dtkcore, dtkwidget,
+ qt5integration, deepin }:
+
+mkDerivation rec {
+ pname = "deepin-shortcut-viewer";
+ version = "1.3.5";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "13vz8kjdqkrhgpvdgrvwn62vwzbyqp88hjm5m4rcqg3bh56709ma";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ ];
+
+ buildInputs = [
+ dtkcore
+ dtkwidget
+ qt5integration
+ ];
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Pop-up shortcut viewer for Deepin applications";
+ homepage = https://github.com/linuxdeepin/deepin-shortcut-viewer;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-sound-theme/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-sound-theme/default.nix
new file mode 100644
index 00000000000..e61e91fc87c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-sound-theme/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-sound-theme";
+ version = "15.10.3";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = "deepin-sound-theme";
+ rev = version;
+ sha256 = "1sw4nrn7q7wk1hpicm05apyc0mihaw42iqm52wb8ib8gm1qiylr9";
+ };
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin sound theme";
+ homepage = https://github.com/linuxdeepin/deepin-sound-theme;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-terminal/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-terminal/default.nix
new file mode 100644
index 00000000000..59789bd84bb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-terminal/default.nix
@@ -0,0 +1,76 @@
+{ stdenv, fetchFromGitHub, pkgconfig, cmake, ninja, vala,
+ gettext, at-spi2-core, dbus, epoxy, expect, gtk3, json-glib,
+ libXdmcp, libgee, libpthreadstubs, librsvg, libsecret, libtasn1,
+ libxcb, libxkbcommon, p11-kit, pcre, vte, wnck, libselinux,
+ libsepol, utillinux, deepin-menu, deepin-shortcut-viewer, deepin, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-terminal";
+ version = "3.2.6";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = "deepin-terminal";
+ rev = version;
+ sha256 = "09s5gvzfxfb353kb61x1b6z3h2aqgln3s3mah3f3zkf5y8hrp2pj";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ cmake
+ ninja
+ vala
+ gettext
+ libselinux libsepol utillinux # required by gio
+ deepin.setupHook
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ at-spi2-core
+ dbus
+ deepin-menu
+ deepin-shortcut-viewer
+ epoxy
+ expect
+ gtk3
+ json-glib
+ libXdmcp
+ libgee
+ libpthreadstubs
+ librsvg
+ libsecret
+ libtasn1
+ libxcb
+ libxkbcommon
+ p11-kit
+ pcre
+ vte
+ wnck
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ '';
+
+ cmakeFlags = [
+ "-DTEST_BUILD=OFF"
+ "-DUSE_VENDOR_LIB=OFF"
+ "-DVERSION=${version}"
+ ];
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Default terminal emulator for Deepin";
+ longDescription = ''
+ Deepin terminal, it sharpens your focus in the world of command line!
+ It is an advanced terminal emulator with workspace, multiple
+ windows, remote management, quake mode and other features.
+ '';
+ homepage = https://github.com/linuxdeepin/deepin-terminal;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-turbo/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-turbo/default.nix
new file mode 100644
index 00000000000..299db533674
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-turbo/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, deepin }:
+
+mkDerivation rec {
+ pname = "deepin-turbo";
+ version = "0.0.3";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "15l0pgszmbirlaxj04ishj43kyvigsl1yaf58kxlbdb3lkmcp5f3";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ qtbase
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # for debugging
+ fixPath $out /usr/lib/systemd src/booster-dtkwidget/CMakeLists.txt
+ fixPath $out /usr/lib/deepin-turbo src/booster-dtkwidget/deepin-turbo-booster-dtkwidget.service
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # for debugging
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "A daemon that helps to launch applications faster";
+ homepage = https://github.com/linuxdeepin/deepin-turbo;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-wallpapers/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-wallpapers/default.nix
new file mode 100644
index 00000000000..e822cf6269d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-wallpapers/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, dde-api, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-wallpapers";
+ version = "1.7.7";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = "deepin-wallpapers";
+ rev = version;
+ sha256 = "09cfnxbpms98ibqbi4xd51181q3az5n8rmndcdr9w12kyzniz7xv";
+ };
+
+ nativeBuildInputs = [ dde-api deepin.setupHook ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+
+ sed -i -e "s:/usr/lib/deepin-api:${dde-api}/lib/deepin-api:" Makefile
+ sed -i -e "s:/usr/share/wallpapers:$out/share/wallpapers:" Makefile
+ '';
+
+ installPhase = ''
+ mkdir -p $out/share/wallpapers/deepin
+ cp -a deepin/* deepin-community/* deepin-private/* $out/share/wallpapers/deepin
+ mkdir -p $out/var/cache
+ cp -a image-blur $out/var/cache
+
+ # Suggested by upstream
+ mkdir -p $out/share/backgrounds/deepin
+ ln -s ../../wallpapers/deepin/Hummingbird_by_Shu_Le.jpg $out/share/backgrounds/deepin/desktop.jpg
+ ln -s $(echo -n $out/share/wallpapers/deepin/Hummingbird_by_Shu_Le.jpg | md5sum | cut -d " " -f 1).jpg \
+ $out/var/cache/image-blur/$(echo -n $out/share/backgrounds/deepin/desktop.jpg | md5sum | cut -d " " -f 1).jpg
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Wallpapers for Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/deepin-wallpapers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/deepin-wm/default.nix b/nixpkgs/pkgs/desktops/deepin/deepin-wm/default.nix
new file mode 100644
index 00000000000..13b115e7042
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/deepin-wm/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, vala, gnome3,
+ dbus, bamf, clutter-gtk, pantheon, libgee, libcanberra-gtk3,
+ libwnck3, deepin-menu, deepin-mutter, deepin-wallpapers,
+ deepin-desktop-schemas, wrapGAppsHook, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "deepin-wm";
+ version = "1.9.38";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1qhdnv4x78f0gkr94q0j8x029fk9ji4m9jdipgrdm83pnahib80g";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ libtool
+ vala
+ gnome3.gnome-common
+ wrapGAppsHook
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ bamf
+ clutter-gtk
+ dbus
+ deepin-desktop-schemas
+ deepin-menu
+ deepin-mutter
+ deepin-wallpapers
+ gnome3.gnome-desktop
+ libcanberra-gtk3
+ libgee
+ libwnck3
+ pantheon.granite
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+
+ # fix background path
+ fixPath ${deepin-wallpapers} /usr/share/backgrounds src/Background/BackgroundSource.vala
+ sed -i 's|default_background.jpg|deepin/desktop.jpg|' src/Background/BackgroundSource.vala
+
+ # fix executable paths in desktop files
+ sed -i -e "s,Exec=dbus-send,Exec=${dbus}/bin/dbus-send," data/gala-multitaskingview.desktop.in
+ sed -i -e "s,Exec=deepin-wm,Exec=$out/bin/deepin-wm," data/gala.desktop
+ '';
+
+ NIX_CFLAGS_COMPILE = "-DWNCK_I_KNOW_THIS_IS_UNSTABLE";
+
+ preConfigure = ''
+ NOCONFIGURE=1 ./autogen.sh
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out # debugging
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin Window Manager";
+ homepage = https://github.com/linuxdeepin/deepin-wm;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/default.nix b/nixpkgs/pkgs/desktops/deepin/default.nix
new file mode 100644
index 00000000000..869f08154bb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/default.nix
@@ -0,0 +1,60 @@
+{ pkgs, makeScope, libsForQt5 }:
+
+let
+ packages = self: with self; {
+ setupHook = ./setup-hook.sh;
+
+ updateScript = callPackage ./update.nix { };
+
+ dbus-factory = callPackage ./dbus-factory { };
+ dde-api = callPackage ./dde-api { };
+ dde-calendar = callPackage ./dde-calendar { };
+ dde-control-center = callPackage ./dde-control-center { };
+ dde-daemon = callPackage ./dde-daemon { };
+ dde-dock = callPackage ./dde-dock { };
+ dde-file-manager = callPackage ./dde-file-manager { };
+ dde-launcher = callPackage ./dde-launcher { };
+ dde-network-utils = callPackage ./dde-network-utils { };
+ dde-polkit-agent = callPackage ./dde-polkit-agent { };
+ dde-qt-dbus-factory = callPackage ./dde-qt-dbus-factory { };
+ dde-session-ui = callPackage ./dde-session-ui { };
+ deepin-anything = callPackage ./deepin-anything { };
+ deepin-calculator = callPackage ./deepin-calculator { };
+ deepin-desktop-base = callPackage ./deepin-desktop-base { };
+ deepin-desktop-schemas = callPackage ./deepin-desktop-schemas { };
+ deepin-gettext-tools = callPackage ./deepin-gettext-tools { };
+ deepin-gtk-theme = callPackage ./deepin-gtk-theme { };
+ deepin-icon-theme = callPackage ./deepin-icon-theme { };
+ deepin-image-viewer = callPackage ./deepin-image-viewer { };
+ deepin-menu = callPackage ./deepin-menu { };
+ deepin-metacity = callPackage ./deepin-metacity { };
+ deepin-movie-reborn = callPackage ./deepin-movie-reborn { };
+ deepin-mutter = callPackage ./deepin-mutter { };
+ deepin-screenshot = callPackage ./deepin-screenshot { };
+ deepin-shortcut-viewer = callPackage ./deepin-shortcut-viewer { };
+ deepin-sound-theme = callPackage ./deepin-sound-theme { };
+ deepin-terminal = callPackage ./deepin-terminal {
+ wnck = pkgs.libwnck3;
+ };
+ deepin-turbo = callPackage ./deepin-turbo { };
+ deepin-wallpapers = callPackage ./deepin-wallpapers { };
+ deepin-wm = callPackage ./deepin-wm {
+ vala = pkgs.vala_0_42;
+ };
+ dpa-ext-gnomekeyring = callPackage ./dpa-ext-gnomekeyring { };
+ dtkcore = callPackage ./dtkcore { };
+ dtkwidget = callPackage ./dtkwidget { };
+ dtkwm = callPackage ./dtkwm { };
+ go-dbus-factory = callPackage ./go-dbus-factory { };
+ go-dbus-generator = callPackage ./go-dbus-generator { };
+ go-gir-generator = callPackage ./go-gir-generator { };
+ go-lib = callPackage ./go-lib { };
+ qcef = callPackage ./qcef { };
+ qt5dxcb-plugin = callPackage ./qt5dxcb-plugin { };
+ qt5integration = callPackage ./qt5integration { };
+ udisks2-qt5 = callPackage ./udisks2-qt5 { };
+
+ };
+
+in
+ makeScope libsForQt5.newScope packages
diff --git a/nixpkgs/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix b/nixpkgs/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix
new file mode 100644
index 00000000000..f645be0f4d9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, pkgconfig, qmake, qttools, gnome3,
+ dde-polkit-agent, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "dpa-ext-gnomekeyring";
+ version = "0.1.0";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "168j42nwyw7vcgwc0fha2pjpwwlgir70fq1hns4ia1dkdqa1nhzw";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ dde-polkit-agent
+ gnome3.libgnome-keyring
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ patchShebangs translate_generation.sh
+ fixPath $out /usr dpa-ext-gnomekeyring.pro gnomekeyringextention.cpp
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "GNOME keyring extension for dde-polkit-agent";
+ homepage = https://github.com/linuxdeepin/dpa-ext-gnomekeyring;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dtkcore/default.nix b/nixpkgs/pkgs/desktops/deepin/dtkcore/default.nix
new file mode 100644
index 00000000000..2ed10f99368
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dtkcore/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, gsettings-qt, pythonPackages, deepin }:
+
+mkDerivation rec {
+ pname = "dtkcore";
+ version = "2.0.14";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "0yc6zx8rhzg9mj2brggcsr1jy1pzfvgqy1h305y2dwnx5haazd04";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ pythonPackages.wrapPython
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ gsettings-qt
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths # debugging
+
+ # Fix shebang
+ sed -i tools/script/dtk-translate.py -e "s,#!env,#!/usr/bin/env,"
+ '';
+
+ qmakeFlags = [
+ "DTK_VERSION=${version}"
+ "MKSPECS_INSTALL_DIR=${placeholder "out"}/mkspecs"
+ ];
+
+ postFixup = ''
+ chmod +x $out/lib/dtk2/*.py
+ wrapPythonProgramsIn "$out/lib/dtk2" "$out $pythonPath"
+ searchHardCodedPaths $out # debugging
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin tool kit core modules";
+ homepage = https://github.com/linuxdeepin/dtkcore;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dtkwidget/default.nix b/nixpkgs/pkgs/desktops/deepin/dtkwidget/default.nix
new file mode 100644
index 00000000000..54c4163fcd1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dtkwidget/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, qttools, qtmultimedia,
+ qtsvg, qtx11extras, librsvg, libstartup_notification, gsettings-qt,
+ dde-qt-dbus-factory, dtkcore, deepin }:
+
+mkDerivation rec {
+ pname = "dtkwidget";
+ version = "2.0.14";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "11ws0rl7rhlgwbqd4nqpqxhngf4lcyfrrdq33wzxwdlk33d69i1h";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ qttools
+ ];
+
+ buildInputs = [
+ qtmultimedia
+ qtsvg
+ qtx11extras
+ librsvg
+ libstartup_notification
+ gsettings-qt
+ dde-qt-dbus-factory
+ dtkcore
+ ];
+
+ outRef = placeholder "out";
+
+ qmakeFlags = [
+ "INCLUDE_INSTALL_DIR=${outRef}/include"
+ "LIB_INSTALL_DIR=${outRef}/lib"
+ "QT_HOST_DATA=${outRef}"
+ ];
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin graphical user interface library";
+ homepage = https://github.com/linuxdeepin/dtkwidget;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/dtkwm/default.nix b/nixpkgs/pkgs/desktops/deepin/dtkwm/default.nix
new file mode 100644
index 00000000000..4807c3d312b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/dtkwm/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, qtx11extras, dtkcore,
+ deepin }:
+
+mkDerivation rec {
+ pname = "dtkwm";
+ version = "2.0.11";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "10l89i84vsh5knq9wg2php7vfg5rj5c9hrrl9rjlcidn1rz8yx6f";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ ];
+
+ buildInputs = [
+ dtkcore
+ qtx11extras
+ ];
+
+ outRef = placeholder "out";
+
+ qmakeFlags = [
+ "QT_HOST_DATA=${outRef}"
+ "INCLUDE_INSTALL_DIR=${outRef}/include"
+ "LIB_INSTALL_DIR=${outRef}/lib"
+ ];
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Deepin graphical user interface library";
+ homepage = https://github.com/linuxdeepin/dtkwm;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-dbus-factory/default.nix b/nixpkgs/pkgs/desktops/deepin/go-dbus-factory/default.nix
new file mode 100644
index 00000000000..d302cc3417f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-dbus-factory/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "go-dbus-factory";
+ version = "0.9.0";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "06fqyad9f50gcjsjkh7929yyaprahdjhnd0dr4gl2797a7wysl3f";
+ };
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ postPatch = ''
+ sed -i -e 's:/share/gocode:/share/go:' Makefile
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "GoLang DBus factory for the Deepin Desktop Environment";
+ homepage = https://github.com/linuxdeepin/go-dbus-factory;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-dbus-generator/default.nix b/nixpkgs/pkgs/desktops/deepin/go-dbus-generator/default.nix
new file mode 100644
index 00000000000..12562976490
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-dbus-generator/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, go, go-lib, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "go-dbus-generator";
+ version = "0.6.6";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "17rzicqizyyrhjjf4rild7py1cyd07b2zdcd9nabvwn4gvj6lhfb";
+ };
+
+ nativeBuildInputs = [
+ go
+ go-lib
+ ];
+
+ makeFlags = [
+ "PREFIX=${placeholder "out"}"
+ "GOCACHE=$(TMPDIR)/go-cache"
+ ];
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Convert dbus interfaces to go-lang or qml wrapper code";
+ homepage = https://github.com/linuxdeepin/go-dbus-generator;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-gir-generator/default.nix b/nixpkgs/pkgs/desktops/deepin/go-gir-generator/default.nix
new file mode 100644
index 00000000000..2f431bd941b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-gir-generator/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, pkgconfig, go, gobject-introspection,
+ libgudev, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "go-gir-generator";
+ version = "2.0.2";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1ydzll8zlk897iqcihvv6p046p0rzr4qqz2drmz2nx95njp8n03a";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ go
+ ];
+
+ buildInputs = [
+ gobject-introspection
+ libgudev
+ ];
+
+ postPatch = ''
+ sed -i -e 's:/share/gocode:/share/go:' Makefile
+ '';
+
+ makeFlags = [
+ "PREFIX=${placeholder "out"}"
+ "GOCACHE=$(TMPDIR)/go-cache"
+ ];
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Generate static golang bindings for GObject";
+ homepage = https://github.com/linuxdeepin/go-gir-generator;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/go-lib/default.nix b/nixpkgs/pkgs/desktops/deepin/go-lib/default.nix
new file mode 100644
index 00000000000..fff92b595f8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/go-lib/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, glib, xorg, gdk-pixbuf, pulseaudio,
+ mobile-broadband-provider-info, deepin }:
+
+stdenv.mkDerivation rec {
+ pname = "go-lib";
+ version = "1.10.2";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "05z7ayl23cm8mbn4vkn3isy5kgwxljc26ifmzrhmnqm5yibd6lsf";
+ };
+
+ buildInputs = [
+ glib
+ xorg.libX11
+ gdk-pixbuf
+ pulseaudio
+ mobile-broadband-provider-info
+ ];
+
+ installPhase = ''
+ mkdir -p $out/share/go/src/pkg.deepin.io/lib
+ cp -a * $out/share/go/src/pkg.deepin.io/lib
+
+ rm -r $out/share/go/src/pkg.deepin.io/lib/debian
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Go bindings for Deepin Desktop Environment development";
+ homepage = https://github.com/linuxdeepin/go-lib;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/qcef/default.nix b/nixpkgs/pkgs/desktops/deepin/qcef/default.nix
new file mode 100644
index 00000000000..ffbc230d2e2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/qcef/default.nix
@@ -0,0 +1,103 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, cmake, qtbase, qttools,
+ qtwebchannel, qtx11extras,
+ gnome2, nss, nspr, alsaLib, atk, cairo, cups, dbus,
+ expat, fontconfig, gdk-pixbuf, glib, gtk2,
+ libxcb, pango, pulseaudio, xorg, deepin }:
+
+let
+ rpahtLibraries = [
+ stdenv.cc.cc.lib # libstdc++.so.6
+ alsaLib
+ atk
+ cairo
+ cups
+ dbus
+ expat
+ fontconfig
+ gdk-pixbuf
+ glib
+ gnome2.GConf
+ gtk2
+ libxcb
+ nspr
+ nss
+ pango
+ pulseaudio
+ xorg.libX11
+ xorg.libXScrnSaver
+ xorg.libXcomposite
+ xorg.libXcursor
+ xorg.libXdamage
+ xorg.libXext
+ xorg.libXfixes
+ xorg.libXi
+ xorg.libXrandr
+ xorg.libXrender
+ xorg.libXtst
+ ];
+ libPath = stdenv.lib.makeLibraryPath rpahtLibraries;
+in
+
+mkDerivation rec {
+ pname = "qcef";
+ version = "1.1.6";
+
+ srcs = [
+ (fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1x0vb4nkfa1lq0nh6iqpxfvsqmb6qfn305pbc92bsqpgiqd7jvb1";
+ name = pname;
+ })
+ (fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = "cef-binary";
+ rev = "059a0c9cef4e289a50dc7a2f4c91fe69db95035e";
+ sha256 = "1h7cq63n94y2a6fprq4g63admh49rcci7avl5z9kdimkhqb2jb84";
+ name = "cef-binary";
+ })
+ ];
+
+ sourceRoot = pname;
+
+ nativeBuildInputs = [
+ pkgconfig
+ cmake
+ qttools
+ deepin.setupHook
+ ];
+
+ buildInputs = [
+ qtbase
+ qtwebchannel
+ qtx11extras
+ ] ++ rpahtLibraries;
+
+ postUnpack = ''
+ rmdir ${pname}/cef
+ ln -s ../cef-binary ${pname}/cef
+ '';
+
+ postPatch = ''
+ searchHardCodedPaths
+ fixPath $out /usr src/core/qcef_global_settings.{h,cpp}
+ sed '/COMMAND rm -rf Release Resources/a COMMAND ldd qcef/libcef.so' -i src/CMakeLists.txt
+ sed '/COMMAND rm -rf Release Resources/a COMMAND patchelf --set-rpath ${libPath} qcef/libcef.so' -i src/CMakeLists.txt
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Qt5 binding of Chromium Embedded Framework";
+ homepage = https://github.com/linuxdeepin/qcef;
+ license = licenses.lgpl3;
+ platforms = platforms.linux;
+ badPlatforms = [ "aarch64-linux" ]; # the cef-binary is not available
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix b/nixpkgs/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix
new file mode 100644
index 00000000000..4d0240c426b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, qtx11extras, libSM,
+ mtdev, cairo, deepin, qtbase }:
+
+mkDerivation rec {
+ pname = "qt5dxcb-plugin";
+ version = "1.2.2";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1zvab6qxdr49pmk6mbk7s0md7bx585p32lca0xbg8mrkajz7g8rq";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ ];
+
+ buildInputs = [
+ qtx11extras
+ libSM
+ mtdev
+ cairo
+ ];
+
+ qmakeFlags = [
+ "INSTALL_PATH=${placeholder "out"}/${qtbase.qtPluginPrefix}/platforms"
+ ];
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Qt platform theme integration plugin for DDE";
+ homepage = https://github.com/linuxdeepin/qt5dxcb-plugin;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/qt5integration/default.nix b/nixpkgs/pkgs/desktops/deepin/qt5integration/default.nix
new file mode 100644
index 00000000000..97e60be6d67
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/qt5integration/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, mkDerivation, fetchFromGitHub, pkgconfig, qmake, mtdev,
+ lxqt, qtx11extras, qtmultimedia, qtsvg,
+ qt5dxcb-plugin, qtstyleplugins, dtkcore, dtkwidget, deepin }:
+
+mkDerivation rec {
+ pname = "qt5integration";
+ version = "0.3.12";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "140wb3vcm2ji8jhqdxv8f4shiknia1zk8fssqlp09kzc1cmb4ncy";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ qmake
+ ];
+
+ buildInputs = [
+ dtkcore
+ dtkwidget
+ qt5dxcb-plugin
+ mtdev
+ lxqt.libqtxdg
+ qtstyleplugins
+ qtx11extras
+ qtmultimedia
+ qtsvg
+ ];
+
+ postPatch = ''
+ sed -i dstyleplugin/dstyleplugin.pro \
+ platformthemeplugin/qt5deepintheme-plugin.pro \
+ iconengineplugins/svgiconengine/svgiconengine.pro \
+ imageformatplugins/svg/svg.pro \
+ -e "s,\$\$\[QT_INSTALL_PLUGINS\],$out/$qtPluginPrefix,"
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "Qt platform theme integration plugins for DDE";
+ homepage = https://github.com/linuxdeepin/qt5integration;
+ license = with licenses; [ gpl3 lgpl2Plus bsd2 ];
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/setup-hook.sh b/nixpkgs/pkgs/desktops/deepin/setup-hook.sh
new file mode 100755
index 00000000000..ce1d7330a22
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/setup-hook.sh
@@ -0,0 +1,64 @@
+# Helper functions for deepin packaging
+
+searchHardCodedPaths() {
+ # Usage:
+ #
+ # searchHardCodedPaths [-a] [<path>]
+ #
+ # Looks for ocurrences of FHS hard coded paths and command
+ # invocations in the given path (default: current directory) for
+ # the purpose of debugging a derivation. The option -a enables
+ # processing binary files as if they were text.
+
+ local binary
+ if [ "$1" = "-a" ]; then
+ binary="-a"
+ shift
+ fi
+
+ local path=$1
+
+ echo ----------- looking for command invocations in $path
+ grep --color=always -r -E '\<(ExecStart|Exec|startDetached|execute|exec\.(Command|LookPath))\>' $path || true
+
+ echo ----------- looking for hard coded paths in $path
+ grep --color=always $binary -r -E '/(usr|bin|sbin|etc|var|opt)\>' $path || true
+
+ echo ----------- done
+}
+
+fixPath() {
+ # Usage:
+ #
+ # fixPath <parent dir> <path> <files>
+ #
+ # replaces occurences of <path> by <parent_dir><path> in <files>
+ # removing /usr from the start of <path> if present
+
+ local parentdir=$1
+ local path=$2
+ local newpath=$parentdir$(echo $path | sed "s,^/usr,,")
+ local files=("${@:3}")
+ echo ======= grep --color=always "${path}" "${files[@]}"
+ grep --color=always "${path}" "${files[@]}"
+ echo +++++++ sed -i -e "s,$path,$newpath,g" "${files[@]}"
+ sed -i -e "s,$path,$newpath,g" "${files[@]}"
+}
+
+searchForUnresolvedDLL() {
+ # Usage:
+ #
+ # searchForUnresolvedDLL <dir>
+ #
+ # looks in <dir> for executables with unresolved dynamic library paths
+
+ local dir="$1"
+ echo ======= Looking for executables with unresolved dynamic library dependencies
+ echo $dir
+ for f in $(find -L "$dir" -type f -executable); do
+ if (ldd $f | grep -q "not found"); then
+ echo $f
+ ldd $f | grep --color=always "not found"
+ fi
+ done
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/udisks2-qt5/default.nix b/nixpkgs/pkgs/desktops/deepin/udisks2-qt5/default.nix
new file mode 100644
index 00000000000..51c38f6d347
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/udisks2-qt5/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, mkDerivation, fetchFromGitHub, qmake, qtbase, deepin }:
+
+mkDerivation rec {
+ pname = "udisks2-qt5";
+ version = "0.0.1";
+
+ src = fetchFromGitHub {
+ owner = "linuxdeepin";
+ repo = pname;
+ rev = version;
+ sha256 = "1gk4jmq7mrzk181r6man2rz1iyzkfasz7053a30h4nn24mq8ikig";
+ };
+
+ nativeBuildInputs = [
+ deepin.setupHook
+ qmake
+ ];
+
+ buildInputs = [
+ qtbase
+ ];
+
+ postPatch = ''
+ searchHardCodedPaths
+ '';
+
+ postFixup = ''
+ searchHardCodedPaths $out
+ '';
+
+ passthru.updateScript = deepin.updateScript { inherit ;name = "${pname}-${version}"; };
+
+ meta = with stdenv.lib; {
+ description = "UDisks2 D-Bus interfaces binding for Qt5";
+ homepage = https://github.com/linuxdeepin/udisks2-qt5;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/deepin/update.nix b/nixpkgs/pkgs/desktops/deepin/update.nix
new file mode 100644
index 00000000000..089d9289827
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/deepin/update.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, writeScript, coreutils, curl, gnugrep, gnused, jq, common-updater-scripts, nix }:
+{ name, ignored-versions ? "^2014(\\.|rc)|^v[0-9]+" }:
+
+let
+ nameAndVersion = builtins.parseDrvName name;
+ packageVersion = nameAndVersion.version;
+ packageName = nameAndVersion.name;
+ attrPath = "deepin.${packageName}";
+in
+
+writeScript "update-${packageName}" ''
+ #!${stdenv.shell}
+ set -o errexit
+ set -x
+
+ # search for the latest version of the package on github
+ PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep gnused jq ]}
+ tags=$(curl -s https://api.github.com/repos/linuxdeepin/${packageName}/tags)
+ tags=$(echo "$tags" | jq -r '.[] | .name')
+ echo "# ${name}" >> git-commits.txt
+ echo "# available tags:" >> git-commits.txt
+ echo "$tags" | ${gnused}/bin/sed -e 's/^/# /' >> git-commits.txt
+ if [ -n "${ignored-versions}" ]; then
+ tags=$(echo "$tags" | grep -vE "${ignored-versions}")
+ fi
+ latest_tag=$(echo "$tags" | sort --version-sort | tail -1)
+
+ # generate commands to commit the changes
+ if [ "${packageVersion}" != "$latest_tag" ]; then
+ pfile=$(EDITOR=echo ${nix}/bin/nix edit -f. ${attrPath})
+ echo " git add $pfile " >> git-commits.txt
+ echo " git commit -m \"${attrPath}: ${packageVersion} -> $latest_tag\"" >> git-commits.txt
+ fi
+
+ # update the nix expression
+ update-source-version "${attrPath}" "$latest_tag"
+ echo "" >> git-commits.txt
+''
diff --git a/nixpkgs/pkgs/desktops/enlightenment/default.nix b/nixpkgs/pkgs/desktops/enlightenment/default.nix
new file mode 100644
index 00000000000..2739b9a2517
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/default.nix
@@ -0,0 +1,16 @@
+{ callPackage, pkgs }:
+{
+ #### CORE EFL
+ efl = callPackage ./efl.nix {
+ openjpeg = pkgs.openjpeg_1;
+ };
+
+ #### WINDOW MANAGER
+ enlightenment = callPackage ./enlightenment.nix { };
+
+ #### APPLICATIONS
+ econnman = callPackage ./econnman.nix { };
+ terminology = callPackage ./terminology.nix { };
+ rage = callPackage ./rage.nix { };
+ ephoto = callPackage ./ephoto.nix { };
+}
diff --git a/nixpkgs/pkgs/desktops/enlightenment/econnman.nix b/nixpkgs/pkgs/desktops/enlightenment/econnman.nix
new file mode 100644
index 00000000000..93b0cb59650
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/econnman.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, efl, python2Packages, dbus, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ pname = "econnman";
+ version = "1.1";
+
+ src = fetchurl {
+ url = "http://download.enlightenment.org/rel/apps/econnman/${pname}-${version}.tar.gz";
+ sha256 = "057pwwavlvrrq26bncqnfrf449zzaim0zq717xv86av4n940gwv0";
+ };
+
+ nativeBuildInputs = [ makeWrapper pkgconfig python2Packages.wrapPython ];
+
+ buildInputs = [ efl python2Packages.python dbus ];
+
+ pythonPath = [ python2Packages.pythonefl python2Packages.dbus-python ];
+
+ postInstall = ''
+ wrapPythonPrograms
+ '';
+
+ meta = {
+ description = "A user interface for the connman network connection manager";
+ homepage = https://enlightenment.org/;
+ maintainers = with stdenv.lib.maintainers; [ matejc tstrobel ftrvxmtrx ];
+ platforms = stdenv.lib.platforms.linux;
+ license = stdenv.lib.licenses.lgpl3;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/enlightenment/efl-elua.patch b/nixpkgs/pkgs/desktops/enlightenment/efl-elua.patch
new file mode 100644
index 00000000000..96c42b3ff3c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/efl-elua.patch
@@ -0,0 +1,14 @@
+--- ./src/scripts/elua/core/util.lua.old 2015-05-17 11:59:57.307743243 +0200
++++ ./src/scripts/elua/core/util.lua 2015-05-17 12:39:11.906797377 +0200
+@@ -159,7 +159,10 @@
+ local ev = os.getenv("ELUA_" .. libname:upper() .. "_LIBRARY_PATH")
+ local succ, v = load_lib(libname, ev)
+ if not succ then
+- error(v, 2)
++ succ, v = load_lib(libname, "$out/lib")
++ if not succ then
++ error(v, 2)
++ end
+ end
+ lib = v
+ loaded_libs[libname] = lib
diff --git a/nixpkgs/pkgs/desktops/enlightenment/efl.nix b/nixpkgs/pkgs/desktops/enlightenment/efl.nix
new file mode 100644
index 00000000000..1876cce6c8a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/efl.nix
@@ -0,0 +1,95 @@
+{ stdenv, fetchurl, pkgconfig, openssl, libjpeg, zlib, lz4, freetype, fontconfig
+, fribidi, SDL2, SDL, libGL, giflib, libpng, libtiff, glib, gst_all_1, libpulseaudio
+, libsndfile, xorg, libdrm, libxkbcommon, udev, utillinux, bullet, luajit
+, python27Packages, openjpeg, doxygen, expat, harfbuzz, jbig2dec, librsvg
+, dbus, alsaLib, poppler, ghostscript, libraw, libspectre, xineLib, libwebp
+, curl, libinput, systemd, mesa, writeText, gtk3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "efl";
+ version = "1.22.3";
+
+ src = fetchurl {
+ url = "http://download.enlightenment.org/rel/libs/${pname}/${pname}-${version}.tar.xz";
+ sha256 = "1j1i8cwq4ym9z34ikv35mdmv5q7q69hdp494mc6l03g9n6cl2yky";
+ };
+
+ nativeBuildInputs = [ pkgconfig gtk3 ];
+
+ buildInputs = [ openssl zlib lz4 freetype fontconfig SDL libGL mesa
+ giflib libpng libtiff glib gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+ gst_all_1.gst-libav libpulseaudio libsndfile xorg.libXcursor xorg.xorgproto
+ xorg.libX11 udev systemd ];
+
+ propagatedBuildInputs = [ libxkbcommon python27Packages.dbus-python dbus libjpeg xorg.libXcomposite
+ xorg.libXdamage xorg.libXinerama xorg.libXp xorg.libXtst xorg.libXi xorg.libXext
+ bullet xorg.libXScrnSaver xorg.libXrender xorg.libXfixes xorg.libXrandr
+ xorg.libxkbfile xorg.libxcb xorg.xcbutilkeysyms openjpeg doxygen expat luajit
+ harfbuzz jbig2dec librsvg dbus alsaLib poppler ghostscript libraw libspectre xineLib libwebp curl libdrm
+ libinput utillinux fribidi SDL2 ];
+
+ # ac_ct_CXX must be set to random value, because then it skips some magic which does alternative searching for g++
+ configureFlags = [
+ "--enable-sdl"
+ "--enable-drm"
+ "--enable-elput"
+ "--with-opengl=full"
+ "--enable-image-loader-jp2k"
+ "--enable-xinput22"
+ "--enable-multisense"
+ "--enable-liblz4"
+ "--enable-systemd"
+ "--enable-image-loader-webp"
+ "--enable-harfbuzz"
+ "--enable-xine"
+ "--enable-fb"
+ "--disable-tslib"
+ "--with-systemdunitdir=$out/systemd/user"
+ "ac_ct_CXX=foo"
+ ];
+
+ patches = [ ./efl-elua.patch ];
+
+ postPatch = ''
+ patchShebangs src/lib/elementary/config_embed
+ '';
+
+ # bin/edje_cc creates $HOME/.run, which would break build of reverse dependencies.
+ setupHook = writeText "setupHook.sh" ''
+ export HOME="$TEMPDIR"
+ '';
+
+ preConfigure = ''
+ export LD_LIBRARY_PATH="$(pwd)/src/lib/eina/.libs:$LD_LIBRARY_PATH"
+ source "$setupHook"
+ '';
+
+ NIX_CFLAGS_COMPILE = [ "-DluaL_reg=luaL_Reg" ]; # needed since luajit-2.1.0-beta3
+
+ postInstall = ''
+ substituteInPlace "$out/share/elua/core/util.lua" --replace '$out' "$out"
+ modules=$(for i in "$out/include/"*/; do printf ' -I''${includedir}/'`basename $i`; done)
+ substituteInPlace "$out/lib/pkgconfig/efl.pc" --replace 'Cflags: -I''${includedir}/efl-1' \
+ 'Cflags: -I''${includedir}/eina-1/eina'"$modules"
+
+ # build icon cache
+ gtk-update-icon-cache "$out"/share/icons/Enlightenment-X
+ '';
+
+ # EFL applications depend on libcurl, although it is linked at
+ # runtime by hand in code (it is dlopened).
+ postFixup = ''
+ patchelf --add-needed ${curl.out}/lib/libcurl.so $out/lib/libecore_con.so
+ '';
+
+ enableParallelBuilding = true;
+
+ meta = {
+ description = "Enlightenment foundation libraries";
+ homepage = https://enlightenment.org/;
+ platforms = stdenv.lib.platforms.linux;
+ license = stdenv.lib.licenses.lgpl3;
+ maintainers = with stdenv.lib.maintainers; [ matejc tstrobel ftrvxmtrx ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/enlightenment/enlightenment.nix b/nixpkgs/pkgs/desktops/enlightenment/enlightenment.nix
new file mode 100644
index 00000000000..a5724385e41
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/enlightenment.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gettext, alsaLib, bc,
+ bzip2, efl, gdbm, libXdmcp, libXrandr, libcap, libffi,
+ libpthreadstubs, libxcb, luajit, mesa, pam, pcre, xcbutilkeysyms,
+ xkeyboard_config,
+
+ bluetoothSupport ? true, bluez5,
+ pulseSupport ? !stdenv.isDarwin, libpulseaudio,
+}:
+
+stdenv.mkDerivation rec {
+ pname = "enlightenment";
+ version = "0.23.0";
+
+ src = fetchurl {
+ url = "http://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
+ sha256 = "1y7x594gvyvl5zbb1rnf3clj2pm6j97n8wl5mp9x6xjmhx0d1idq";
+ };
+
+ nativeBuildInputs = [
+ (pkgconfig.override { vanilla = true; })
+ gettext
+ meson
+ ninja
+ ];
+
+ buildInputs = [
+ alsaLib
+ bc # for the Everything module calculator mode
+ bzip2
+ efl
+ gdbm
+ libXdmcp
+ libXrandr
+ libffi
+ libpthreadstubs
+ libxcb
+ luajit
+ mesa
+ pam
+ pcre
+ xcbutilkeysyms
+ xkeyboard_config
+ ]
+ ++ stdenv.lib.optional stdenv.isLinux libcap
+ ++ stdenv.lib.optional bluetoothSupport bluez5
+ ++ stdenv.lib.optional pulseSupport libpulseaudio
+ ;
+
+ patches = [
+ # Some programs installed by enlightenment (to set the cpu frequency,
+ # for instance) need root ownership and setuid/setgid permissions, which
+ # are not allowed for files in /nix/store. Instead of allowing the
+ # installer to try to do this, the file $out/e-wrappers.nix is created,
+ # containing the needed configuration for wrapping those programs. It
+ # can be used in the enlightenment module. The idea is:
+ #
+ # 1) rename the original binary adding the extension .orig
+ # 2) wrap the renamed binary at /run/wrappers/bin/
+ # 3) create a new symbolic link using the original binary name (in the
+ # original directory where enlightenment wants it) pointing to the
+ # wrapper
+
+ ./enlightenment.suid-exes.patch
+ ];
+
+ postPatch = ''
+ # edge_cc is a binary provided by efl and cannot be found at the directory
+ # given by e_prefix_bin_get(), which is $out/bin
+
+ substituteInPlace src/bin/e_import_config_dialog.c \
+ --replace "e_prefix_bin_get()" "\"${efl}/bin\""
+
+ substituteInPlace src/modules/everything/evry_plug_calc.c \
+ --replace "ecore_exe_pipe_run(\"bc -l\"" "ecore_exe_pipe_run(\"${bc}/bin/bc -l\""
+ '';
+
+ mesonFlags = [ "-Dsystemdunitdir=lib/systemd/user" ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ description = "The Compositing Window Manager and Desktop Shell";
+ homepage = https://www.enlightenment.org;
+ license = licenses.bsd2;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ matejc tstrobel ftrvxmtrx romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/enlightenment/enlightenment.suid-exes.patch b/nixpkgs/pkgs/desktops/enlightenment/enlightenment.suid-exes.patch
new file mode 100644
index 00000000000..f53f6ffa7ca
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/enlightenment.suid-exes.patch
@@ -0,0 +1,25 @@
+--- enlightenment-0.22.0.orig/meson/meson_inst.sh 2017-09-25 10:55:43.000000000 -0300
++++ enlightenment-0.22.0/meson/meson_inst.sh 2017-11-15 08:31:03.336844920 -0200
+@@ -1,6 +1,19 @@
+-#!/bin/sh
++#!/bin/sh -x
++
++w="$out"/e-wrappers.nix
++
++echo "# Wrappers for programs installed by enlightenment that should be setuid" > $w
++echo "" >> $w
++echo "{" >> $w
++echo " security.wrappers = {" >> $w
+
+ for x in "$@" ; do
+- chown root "$DESTDIR/$x"
+- chmod a=rx,u+xs "$DESTDIR/$x"
++ f="$DESTDIR$x";
++ b=$(basename "$f".orig)
++ mv -v "$f" "$f".orig
++ ln -sv /run/wrappers/bin/"$b" "$f"
++ echo " \"$b\".source = \"$f.orig\";" >> $w
+ done
++
++echo " };" >> $w
++echo "}" >> $w
diff --git a/nixpkgs/pkgs/desktops/enlightenment/ephoto.nix b/nixpkgs/pkgs/desktops/enlightenment/ephoto.nix
new file mode 100644
index 00000000000..f1455f68338
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/ephoto.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, efl, pcre, mesa, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ pname = "ephoto";
+ version = "1.5";
+
+ src = fetchurl {
+ url = "http://www.smhouston.us/stuff/${pname}-${version}.tar.gz";
+ sha256 = "09kraa5zz45728h2dw1ssh23b87j01bkfzf977m48y1r507sy3vb";
+ };
+
+ nativeBuildInputs = [
+ (pkgconfig.override { vanilla = true; })
+ mesa.dev # otherwise pkg-config does not find gbm
+ makeWrapper
+ ];
+
+ buildInputs = [
+ efl
+ pcre
+ ];
+
+ meta = {
+ description = "Image viewer and editor written using the Enlightenment Foundation Libraries";
+ homepage = http://smhouston.us/ephoto/;
+ license = stdenv.lib.licenses.bsd2;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/enlightenment/rage.nix b/nixpkgs/pkgs/desktops/enlightenment/rage.nix
new file mode 100644
index 00000000000..8d99ce6e8e0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/rage.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, efl, gst_all_1, pcre, mesa, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "rage";
+ version = "0.3.1";
+
+ src = fetchurl {
+ url = "http://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
+ sha256 = "04fdk23bbgvni212zrfy4ndg7vmshbsjgicrhckdvhay87pk9i75";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ (pkgconfig.override { vanilla = true; })
+ mesa.dev
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ efl
+ gst_all_1.gstreamer
+ gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good
+ gst_all_1.gst-plugins-bad
+ gst_all_1.gst-libav
+ pcre
+ ];
+
+ meta = {
+ description = "Video + Audio player along the lines of mplayer";
+ homepage = https://enlightenment.org/;
+ maintainers = with stdenv.lib.maintainers; [ matejc ftrvxmtrx romildo ];
+ platforms = stdenv.lib.platforms.linux;
+ license = stdenv.lib.licenses.bsd2;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/enlightenment/terminology.nix b/nixpkgs/pkgs/desktops/enlightenment/terminology.nix
new file mode 100644
index 00000000000..52f0ff15e23
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/enlightenment/terminology.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, efl, pcre, mesa, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ pname = "terminology";
+ version = "1.5.0";
+
+ src = fetchurl {
+ url = "http://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
+ sha256 = "0v4amfg8ji0mb6j7kcxh3wz1xw5zyxg4rw6ylx17rfw2nc1yamfy";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ (pkgconfig.override { vanilla = true; })
+ makeWrapper
+ ];
+
+ buildInputs = [
+ efl
+ pcre
+ mesa
+ ];
+
+ meta = {
+ description = "Powerful terminal emulator based on EFL";
+ homepage = https://www.enlightenment.org/about-terminology;
+ platforms = stdenv.lib.platforms.linux;
+ license = stdenv.lib.licenses.bsd2;
+ maintainers = with stdenv.lib.maintainers; [ matejc tstrobel ftrvxmtrx ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python-desktop/default.nix b/nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python-desktop/default.nix
new file mode 100644
index 00000000000..7d8365337aa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python-desktop/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, gnome_python, librsvg, libwnck, libgtop, pkgconfig, python2, gtk2 }:
+
+let
+ inherit (python2.pkgs) python pygtk;
+in stdenv.mkDerivation rec {
+ ver_maj = "2.32";
+ ver_min = "0";
+ version = "${ver_maj}.${ver_min}";
+ pname = "gnome-python-desktop";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-python-desktop/${ver_maj}/gnome-python-desktop-${version}.tar.bz2";
+ sha256 = "1s8f9rns9v7qlwjv9qh9lr8crp88dpzfm45hj47zc3ivpy0dbnq9";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 librsvg libwnck libgtop python ];
+ propagatedBuildInputs = [ gnome_python pygtk ];
+
+ # gnome-python-desktop expects that .pth file is already installed by PyGTK
+ # in the same directory. This is not the case for Nix.
+ postInstall = ''
+ echo "gtk-2.0" > $out/${python2.sitePackages}/${pname}-${version}.pth
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = http://www.pygtk.org;
+ description = "Python bindings for GNOME desktop packages";
+ license = licenses.lgpl21;
+ maintainers = [ maintainers.goibhniu ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python/default.nix b/nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python/default.nix
new file mode 100644
index 00000000000..37bd631adbc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/bindings/gnome-python/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, python2, pkgconfig, libgnome, GConf, glib, gtk2, gnome_vfs }:
+
+with stdenv.lib;
+
+let
+ inherit (python2.pkgs) python pygobject2 pygtk dbus-python;
+in stdenv.mkDerivation rec {
+ version = "2.28";
+ name = "gnome-python-${version}.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-python/${version}/${name}.tar.bz2";
+ sha256 = "759ce9344cbf89cf7f8449d945822a0c9f317a494f56787782a901e4119b96d8";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ python glib gtk2 GConf libgnome gnome_vfs ];
+ propagatedBuildInputs = [ pygobject2 pygtk dbus-python ];
+
+ # gnome-python expects that .pth file is already installed by PyGTK in the
+ # same directory. This is not the case for Nix.
+ postInstall = ''
+ echo "gtk-2.0" > $out/${python2.sitePackages}/${name}.pth
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = http://pygtk.org/;
+ description = "Python wrapper for GNOME libraries";
+ platforms = platforms.linux;
+ license = licenses.lgpl2;
+ maintainers = with maintainers; [ qknight ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/bindings/libglademm/default.nix b/nixpkgs/pkgs/desktops/gnome-2/bindings/libglademm/default.nix
new file mode 100644
index 00000000000..177a9f47c31
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/bindings/libglademm/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtkmm2, libglade }:
+
+stdenv.mkDerivation rec {
+ name = "libglademm-2.6.7";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libglademm/2.6/${name}.tar.bz2";
+ sha256 = "1hrbg9l5qb7w0xvr7013qamkckyj0fqc426c851l69zpmhakqm1q";
+ };
+
+ outputs = [ "out" "devdoc" ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool ];
+
+ propagatedBuildInputs = [ gtkmm2 libglade ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/default.nix b/nixpkgs/pkgs/desktops/gnome-2/default.nix
new file mode 100644
index 00000000000..6cc6848b316
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/default.nix
@@ -0,0 +1,94 @@
+{ config, stdenv, pkgs, lib }:
+
+lib.makeScope pkgs.newScope (self: with self; {
+
+#### PLATFORM
+
+ libIDL = callPackage ./platform/libIDL {
+ gettext = if stdenv.isDarwin then pkgs.gettext else null;
+ };
+
+ ORBit2 = callPackage ./platform/ORBit2 { };
+
+ libart_lgpl = callPackage ./platform/libart_lgpl { };
+
+ libglade = callPackage ./platform/libglade { };
+
+ libgnomeprint = callPackage ./platform/libgnomeprint { };
+
+ libgnomeprintui = callPackage ./platform/libgnomeprintui { };
+
+ libgnomecups = callPackage ./platform/libgnomecups { };
+
+ libgtkhtml = callPackage ./platform/libgtkhtml { };
+
+ GConf = callPackage ./platform/GConf { };
+
+ libgnomecanvas = callPackage ./platform/libgnomecanvas { };
+
+ libgnomecanvasmm = callPackage ./platform/libgnomecanvasmm { };
+
+ # for git-head builds
+ gnome-common = callPackage platform/gnome-common { };
+
+ gnome_mime_data = callPackage ./platform/gnome-mime-data { };
+
+ gnome_python = callPackage ./bindings/gnome-python { };
+
+ gnome_python_desktop = callPackage ./bindings/gnome-python-desktop { };
+
+ gnome_vfs = callPackage ./platform/gnome-vfs {
+ openssl = pkgs.openssl_1_0_2;
+ };
+
+ libgnome = callPackage ./platform/libgnome { };
+
+ libgnomeui = callPackage ./platform/libgnomeui { };
+
+ libbonobo = callPackage ./platform/libbonobo { };
+
+ libbonoboui = callPackage ./platform/libbonoboui { };
+
+ gtkhtml = callPackage ./platform/gtkhtml { enchant = pkgs.enchant1; };
+
+ gtkhtml4 = callPackage ./platform/gtkhtml/4.x.nix { enchant = pkgs.enchant1; };
+
+ gtkglext = callPackage ./platform/gtkglext { };
+
+#### DESKTOP
+
+ # Removed from recent GNOME releases, but still required
+ scrollkeeper = callPackage ./desktop/scrollkeeper { };
+
+ gtksourceview = callPackage ./desktop/gtksourceview { };
+
+ gnome_icon_theme = callPackage ./desktop/gnome-icon-theme { };
+
+ vte = callPackage ./desktop/vte { };
+
+#### BINDINGS
+
+ libglademm = callPackage ./bindings/libglademm { };
+
+} // lib.optionalAttrs (config.allowAliases or true) {
+ inherit (pkgs)
+ # GTK Libs
+ glib glibmm atk atkmm cairo pango pangomm gdk_pixbuf gtkmm2 libcanberra-gtk2
+
+ # Included for backwards compatibility
+ libsoup libwnck gtk-doc gnome-doc-utils rarian
+
+ gvfs # added 2019-09-03
+ ;
+
+ gtk = pkgs.gtk2;
+ gtkmm = pkgs.gtkmm2;
+ python_rsvg = self.gnome_python_desktop;
+
+ gtkdoc = pkgs.gtk-doc;
+ startup_notification = pkgs.libstartup_notification;
+ startupnotification = pkgs.libstartup_notification;
+ gnomedocutils = pkgs.gnome-doc-utils;
+ gnomeicontheme = self.gnome_icon_theme;
+ gnome_common = gnome-common;
+})
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/gnome-icon-theme/default.nix b/nixpkgs/pkgs/desktops/gnome-2/desktop/gnome-icon-theme/default.nix
new file mode 100644
index 00000000000..0f2a98c61f6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/gnome-icon-theme/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, intltool, iconnamingutils, gtk2 }:
+
+stdenv.mkDerivation rec {
+ name = "gnome-icon-theme-2.91.93";
+
+ src = fetchurl {
+ #url = "mirror://gnome/sources/gnome-icon-theme/3.4/${name}.tar.xz";
+ url = "mirror://gnome/sources/gnome-icon-theme/2.91/${name}.tar.bz2";
+ sha256 = "cc7f15e54e2640697b58c26e74cc3f6ebadeb4ef6622bffe9c1e6874cc3478d6";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool iconnamingutils gtk2 ];
+
+ # remove a tree of dirs with no files within
+ postInstall = '' rm -r "$out/share/locale" '';
+
+ meta = {
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/gtksourceview/default.nix b/nixpkgs/pkgs/desktops/gnome-2/desktop/gtksourceview/default.nix
new file mode 100644
index 00000000000..87d2931d274
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/gtksourceview/default.nix
@@ -0,0 +1,43 @@
+{stdenv, fetchpatch, fetchurl, autoreconfHook, pkgconfig, atk, cairo, glib
+, gnome-common, gtk2, pango
+, libxml2Python, perl, intltool, gettext, gtk-mac-integration-gtk2 }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+ pname = "gtksourceview";
+ version = "2.10.5";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gtksourceview/2.10/${pname}-${version}.tar.bz2";
+ sha256 = "c585773743b1df8a04b1be7f7d90eecdf22681490d6810be54c81a7ae152191e";
+ };
+
+ patches = optionals stdenv.isDarwin [
+ (fetchpatch {
+ name = "change-igemacintegration-to-gtkosxapplication.patch";
+ url = "https://gitlab.gnome.org/GNOME/gtksourceview/commit/e88357c5f210a8796104505c090fb6a04c213902.patch";
+ sha256 = "0h5q79q9dqbg46zcyay71xn1pm4aji925gjd5j93v4wqn41wj5m7";
+ })
+ (fetchpatch {
+ name = "update-to-gtk-mac-integration-2.0-api.patch";
+ url = "https://gitlab.gnome.org/GNOME/gtksourceview/commit/ab46e552e1d0dae73f72adac8d578e40bdadaf95.patch";
+ sha256 = "0qzrbv4hpa0v8qbmpi2vp575n13lkrvp3cgllwrd2pslw1v9q3aj";
+ })
+ ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ atk cairo glib gtk2
+ pango libxml2Python perl intltool
+ gettext
+ ] ++ optionals stdenv.isDarwin [
+ autoreconfHook gnome-common gtk-mac-integration-gtk2
+ ];
+
+ preConfigure = optionalString stdenv.isDarwin ''
+ intltoolize --force
+ '';
+
+ doCheck = false; # requires X11 daemon
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/default.nix b/nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/default.nix
new file mode 100644
index 00000000000..10b99e4eb5d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, pkgconfig, glib, gnome2, dbus-glib, gmime, libnotify, libgnome-keyring, openssl, cyrus_sasl, gnonlin, sylpheed, gob2, gettext, intltool, libxml2, hicolor-icon-theme, tango-icon-theme }:
+
+stdenv.mkDerivation rec {
+ rev = "9ae8768";
+ version = "5.4";
+ pname = "mail-notification";
+
+ src = fetchFromGitHub {
+ inherit rev;
+ owner = "epienbroek";
+ repo = "mail-notification";
+ sha256 = "1slb7gajn30vdaq0hf5rikwdly1npmg1cf83hpjs82xd98knl13d";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ glib dbus-glib gmime libnotify libgnome-keyring openssl cyrus_sasl gnonlin sylpheed gob2 gettext intltool gnome2.GConf gnome2.libgnomeui dbus-glib gmime libnotify gnome2.scrollkeeper libxml2 gnome2.gnome_icon_theme hicolor-icon-theme tango-icon-theme ];
+
+ prePatch = ''
+ sed -i -e '/jb_rule_set_install_message/d' -e '/jb_rule_add_install_command/d' jbsrc/jb.c
+
+ # currently disable the check for missing sheme until a better solution
+ # is found; needed, because otherwise the application doesn't even start
+ # and fails saying it unable to find gconf scheme values.
+ sed -i -e 's/(schema_missing)/(!schema_missing)/g' src/mn-conf.c
+ '';
+
+ patches = [
+ ./patches/mail-notification-dont-link-against-bsd-compat.patch
+ ];
+
+ patchFlags = "-p0";
+ NIX_CFLAGS_COMPILE = "-Wno-error";
+
+ preConfigure = "./jb configure prefix=$out";
+
+ postConfigure = ''
+ substituteInPlace build/config \
+ --replace "omf-dir|string|1|${gnome2.scrollkeeper}/share/omf" "omf-dir|string|1|$out/share/omf" \
+ --replace "scrollkeeper-dir|string|1|${gnome2.scrollkeeper}/var/lib/scrollkeeper" "omf-dir|string|1|$out/var/lib/scrollkeeper" \
+ '';
+
+ buildPhase = "./jb build";
+ installPhase = "./jb install";
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ description = "Tray status icon, which notifies us when new email arrives";
+ homepage = https://www.nongnu.org/mailnotify/;
+ license = with licenses; [ gpl3 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.eleanor ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/patches/mail-notification-dont-link-against-bsd-compat.patch b/nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/patches/mail-notification-dont-link-against-bsd-compat.patch
new file mode 100644
index 00000000000..e246a8cc938
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/mail-notification/patches/mail-notification-dont-link-against-bsd-compat.patch
@@ -0,0 +1,10 @@
+--- jbsrc/jb.c.orig 2014-01-19 20:06:48.525462981 +0100
++++ jbsrc/jb.c 2014-01-19 20:07:36.087934897 +0100
+@@ -425,7 +425,6 @@
+ */
+ jb_compile_options_add_cflags(object->compile_options, "-std=c99");
+ jb_compile_options_add_cppflags(object->compile_options, "-D_BSD_SOURCE -D_POSIX_C_SOURCE=199309L");
+- jb_compile_options_add_libs(object->compile_options, "-lbsd-compat");
+ }
+
+ jb_compile_options_add_string_defines(object->compile_options,
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix b/nixpkgs/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix
new file mode 100644
index 00000000000..7c713cb9122
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, pkgconfig, perlPackages, libxml2, libxslt, docbook_xml_dtd_42, automake, gettext}:
+
+stdenv.mkDerivation {
+ name = "scrollkeeper-0.3.14";
+ src = fetchurl {
+ url = mirror://gnome/sources/scrollkeeper/0.3/scrollkeeper-0.3.14.tar.bz2;
+ sha256 = "08n1xgj1f53zahwm0wpn3jid3rfbhi3iwby0ilaaldnid5qriqgc";
+ };
+
+ # The fuloong2f is not supported by scrollkeeper-0.3.14 config.guess
+ preConfigure = "
+ substituteInPlace extract/dtds/Makefile.am --replace /usr/bin/xmlcatalog xmlcatalog
+ cp ${automake}/share/automake*/config.{sub,guess} .
+ ";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ libxml2 libxslt gettext ]
+ ++ (with perlPackages; [ perl XMLParser ]);
+ configureFlags = [ "--with-xml-catalog=${docbook_xml_dtd_42}/xml/dtd/docbook/catalog.xml" ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/alt.patch b/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/alt.patch
new file mode 100644
index 00000000000..65c3ddf1fcf
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/alt.patch
@@ -0,0 +1,50 @@
+From a9d6a34708f846952f423d078397352858f7b1a4 Mon Sep 17 00:00:00 2001
+From: Christian Persch <chpe@gnome.org>
+Date: Sat, 12 May 2012 18:48:05 +0200
+Subject: [PATCH] keymap: Treat ALT as META
+
+https://bugzilla.gnome.org/show_bug.cgi?id=663779
+---
+ src/vte.c | 23 ++++++++++++++---------
+ 1 files changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/src/vte.c b/src/vte.c
+index dd27e9a..0657921 100644
+--- a/src/vte.c
++++ b/src/vte.c
+@@ -5170,19 +5170,24 @@ static void
+ vte_terminal_read_modifiers (VteTerminal *terminal,
+ GdkEvent *event)
+ {
++ GdkKeymap *keymap;
+ GdkModifierType modifiers;
+
+ /* Read the modifiers. */
+- if (gdk_event_get_state((GdkEvent*)event, &modifiers)) {
+- GdkKeymap *keymap;
+-#if GTK_CHECK_VERSION (2, 90, 8)
+- keymap = gdk_keymap_get_for_display(gdk_window_get_display(((GdkEventAny*)event)->window));
+-#else
+- keymap = gdk_keymap_get_for_display(gdk_drawable_get_display(((GdkEventAny*)event)->window));
++ if (!gdk_event_get_state((GdkEvent*)event, &modifiers))
++ return;
++
++ keymap = gdk_keymap_get_for_display(gdk_window_get_display(((GdkEventAny*)event)->window));
++
++ gdk_keymap_add_virtual_modifiers (keymap, &modifiers);
++
++#if 1
++ /* HACK! Treat ALT as META; see bug #663779. */
++ if (modifiers & GDK_MOD1_MASK)
++ modifiers |= VTE_META_MASK;
+ #endif
+- gdk_keymap_add_virtual_modifiers (keymap, &modifiers);
+- terminal->pvt->modifiers = modifiers;
+- }
++
++ terminal->pvt->modifiers = modifiers;
+ }
+
+ /* Read and handle a keypress event. */
+--
+1.7.5.1.217.g4e3aa.dirty \ No newline at end of file
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/change-scroll-region.patch b/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/change-scroll-region.patch
new file mode 100644
index 00000000000..9e3e83b1262
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/change-scroll-region.patch
@@ -0,0 +1,67 @@
+Index: vte-0.26.0/src/vte.c
+===================================================================
+--- vte-0.26.0.orig/src/vte.c 2010-11-30 23:04:53.000000000 -0800
++++ vte-0.26.0/src/vte.c 2010-12-07 20:05:07.865548000 -0800
+@@ -3862,6 +3862,7 @@ vte_terminal_process_incoming(VteTermina
+ long wcount, start, delta;
+ gboolean leftovers, modified, bottom, again;
+ gboolean invalidated_text;
++ gboolean in_scroll_region;
+ GArray *unichars;
+ struct _vte_incoming_chunk *chunk, *next_chunk, *achunk = NULL;
+
+@@ -3881,6 +3882,10 @@ vte_terminal_process_incoming(VteTermina
+ cursor = screen->cursor_current;
+ cursor_visible = terminal->pvt->cursor_visible;
+
++ in_scroll_region = screen->scrolling_restricted
++ && (screen->cursor_current.row >= (screen->insert_delta + screen->scrolling_region.start))
++ && (screen->cursor_current.row <= (screen->insert_delta + screen->scrolling_region.end));
++
+ /* We should only be called when there's data to process. */
+ g_assert(terminal->pvt->incoming ||
+ (terminal->pvt->pending->len > 0));
+@@ -3979,6 +3984,8 @@ skip_chunk:
+ * points to the first character which isn't part of this
+ * sequence. */
+ if ((match != NULL) && (match[0] != '\0')) {
++ gboolean new_in_scroll_region;
++
+ /* Call the right sequence handler for the requested
+ * behavior. */
+ _vte_terminal_handle_sequence(terminal,
+@@ -3989,12 +3996,20 @@ skip_chunk:
+ start = (next - wbuf);
+ modified = TRUE;
+
+- /* if we have moved during the sequence handler, restart the bbox */
++ new_in_scroll_region = screen->scrolling_restricted
++ && (screen->cursor_current.row >= (screen->insert_delta + screen->scrolling_region.start))
++ && (screen->cursor_current.row <= (screen->insert_delta + screen->scrolling_region.end));
++
++ delta = screen->scroll_delta; /* delta may have changed from sequence. */
++
++ /* if we have moved greatly during the sequence handler, or moved into a scroll_region
++ * from outside it, restart the bbox */
+ if (invalidated_text &&
+- (screen->cursor_current.col > bbox_bottomright.x + VTE_CELL_BBOX_SLACK ||
+- screen->cursor_current.col < bbox_topleft.x - VTE_CELL_BBOX_SLACK ||
+- screen->cursor_current.row > bbox_bottomright.y + VTE_CELL_BBOX_SLACK ||
+- screen->cursor_current.row < bbox_topleft.y - VTE_CELL_BBOX_SLACK)) {
++ ((new_in_scroll_region && !in_scroll_region) ||
++ (screen->cursor_current.col > bbox_bottomright.x + VTE_CELL_BBOX_SLACK ||
++ screen->cursor_current.col < bbox_topleft.x - VTE_CELL_BBOX_SLACK ||
++ screen->cursor_current.row > bbox_bottomright.y + VTE_CELL_BBOX_SLACK ||
++ screen->cursor_current.row < bbox_topleft.y - VTE_CELL_BBOX_SLACK))) {
+ /* Clip off any part of the box which isn't already on-screen. */
+ bbox_topleft.x = MAX(bbox_topleft.x, 0);
+ bbox_topleft.y = MAX(bbox_topleft.y, delta);
+@@ -4014,6 +4029,8 @@ skip_chunk:
+ bbox_bottomright.x = bbox_bottomright.y = -G_MAXINT;
+ bbox_topleft.x = bbox_topleft.y = G_MAXINT;
+ }
++
++ in_scroll_region = new_in_scroll_region;
+ } else
+ /* Second, we have a NULL match, and next points to the very
+ * next character in the buffer. Insert the character which
diff --git a/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/default.nix b/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/default.nix
new file mode 100644
index 00000000000..606ba93d3fc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/desktop/vte/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, fetchpatch, intltool, pkgconfig, glib, gtk2, ncurses
+, pythonSupport ? false, python27Packages}:
+
+let
+ inherit (python27Packages) python pygtk;
+in stdenv.mkDerivation rec {
+ name = "vte-0.28.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/vte/0.28/${name}.tar.bz2";
+ sha256 = "00zrip28issgmz2cqk5k824cbqpbixi5x7k88zxksdqpnq1f414d";
+ };
+
+ patches = [
+ ./alt.patch
+ ./change-scroll-region.patch
+ # CVE-2012-2738
+ # fixed in upstream version 0.32.2
+ (fetchpatch{
+ name = "CVE-2012-2738-1.patch";
+ url = https://gitlab.gnome.org/GNOME/vte/commit/feeee4b5832b17641e505b7083e0d299fdae318e.patch;
+ sha256 = "1455i6zxcx4rj2cz639s8qdc04z2nshprwl7k00mcsw49gv3hk5n";
+ })
+ (fetchpatch{
+ name = "CVE-2012-2738-2.patch";
+ url = https://gitlab.gnome.org/GNOME/vte/commit/98ce2f265f986fb88c38d508286bb5e3716b9e74.patch;
+ sha256 = "0n24vw49h89w085ggq23iwlnnb6ajllfh2dg4vsar21d82jxc0sn";
+ })
+ ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool glib gtk2 ncurses ] ++
+ stdenv.lib.optionals pythonSupport [python pygtk];
+
+ configureFlags = [
+ (stdenv.lib.enableFeature pythonSupport "python")
+ ];
+
+ postInstall = stdenv.lib.optionalString pythonSupport ''
+ cd $(toPythonPath $out)/gtk-2.0
+ for n in *; do
+ ln -s "gtk-2.0/$n" "../$n"
+ done
+ '';
+
+ meta = {
+ homepage = https://www.gnome.org/;
+ description = "A library implementing a terminal emulator widget for GTK";
+ longDescription = ''
+ VTE is a library (libvte) implementing a terminal emulator widget for
+ GTK, and a minimal sample application (vte) using that. Vte is
+ mainly used in gnome-terminal, but can also be used to embed a
+ console/terminal in games, editors, IDEs, etc. VTE supports Unicode and
+ character set conversion, as well as emulating any terminal known to
+ the system's terminfo database.
+ '';
+ license = stdenv.lib.licenses.lgpl2;
+ maintainers = with stdenv.lib.maintainers; [ astsmtl ];
+ platforms = with stdenv.lib.platforms; linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/GConf/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/GConf/default.nix
new file mode 100644
index 00000000000..1a1848491b1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/GConf/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, dbus-glib, glib, ORBit2, libxml2, polkit, python2, intltool }:
+
+stdenv.mkDerivation rec {
+ pname = "gconf";
+ version = "3.2.6";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/GConf/${stdenv.lib.versions.majorMinor version}/GConf-${version}.tar.xz";
+ sha256 = "0k3q9nh53yhc9qxf1zaicz4sk8p3kzq4ndjdsgpaa2db0ccbj4hr";
+ };
+
+ outputs = [ "out" "dev" "man" ];
+
+ buildInputs = [ ORBit2 libxml2 python2 ]
+ # polkit requires pam, which requires shadow.h, which is not available on
+ # darwin
+ ++ stdenv.lib.optional (!stdenv.isDarwin) polkit;
+
+ propagatedBuildInputs = [ glib dbus-glib ];
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ configureFlags =
+ # fixes the "libgconfbackend-oldxml.so is not portable" error on darwin
+ stdenv.lib.optional stdenv.isDarwin [ "--enable-static" ];
+
+ meta = with stdenv.lib; {
+ homepage = https://projects.gnome.org/gconf/;
+ description = "Deprecated system for storing application preferences";
+ platforms = platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/ORBit2/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/ORBit2/default.nix
new file mode 100644
index 00000000000..ef18f0783ce
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/ORBit2/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, pkgconfig, glib, libIDL, libintl }:
+
+stdenv.mkDerivation rec {
+ name = "ORBit2-${minVer}.19";
+ minVer = "2.14";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/ORBit2/${minVer}/${name}.tar.bz2";
+ sha256 = "0l3mhpyym9m5iz09fz0rgiqxl2ym6kpkwpsp1xrr4aa80nlh1jam";
+ };
+
+ nativeBuildInputs = [ pkgconfig libintl ];
+ propagatedBuildInputs = [ glib libIDL ];
+
+ outputs = [ "out" "dev" ];
+
+ preBuild = ''
+ sed 's/-DG_DISABLE_DEPRECATED//' -i linc2/src/Makefile
+ '';
+
+ preFixup = ''
+ moveToOutput "bin/orbit2-config" "$dev"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://projects.gnome.org/ORBit2/;
+ description = "A CORBA 2.4-compliant Object Request Broker";
+ platforms = platforms.unix;
+ maintainers = with maintainers; [ lovek323 ];
+
+ longDescription = ''
+ ORBit2 is a CORBA 2.4-compliant Object Request Broker (ORB) featuring
+ mature C, C++ and Python bindings. Bindings (in various degrees of
+ completeness) are also available for Perl, Lisp, Pascal, Ruby, and TCL;
+ others are in-progress. It supports POA, DII, DSI, TypeCode, Any, IR and
+ IIOP. Optional features including INS and threading are available. ORBit2
+ is engineered for the desktop workstation environment, with a focus on
+ performance, low resource usage, and security. The core ORB is written in
+ C, and runs under Linux, UNIX (BSD, Solaris, HP-UX, ...), and Windows.
+ ORBit2 is developed and released as open source software under GPL/LGPL.
+ '';
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-common/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-common/default.nix
new file mode 100644
index 00000000000..54a2bd526a9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-common/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, which }:
+
+stdenv.mkDerivation rec {
+ name = "gnome-common-${minVer}.0";
+ minVer = "2.34";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-common/${minVer}/${name}.tar.bz2";
+ sha256 = "1pz13mpp09q5s3bikm8ml92s1g0scihsm4iipqv1ql3mp6d4z73s";
+ };
+
+ propagatedBuildInputs = [ which ]; # autogen.sh which is using gnome-common tends to require which
+
+ patches = [(fetchurl {
+ name = "gnome-common-patch";
+ url = "https://bug697543.bugzilla-attachments.gnome.org/attachment.cgi?id=240935";
+ sha256 = "17abp7czfzirjm7qsn2czd03hdv9kbyhk3lkjxg2xsf5fky7z7jl";
+ })];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix
new file mode 100644
index 00000000000..c3aee9024a2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-mime-data/default.nix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl, intltool}:
+
+stdenv.mkDerivation {
+ name = "gnome-mime-data-2.18.0";
+ src = fetchurl {
+ url = mirror://gnome/sources/gnome-mime-data/2.18/gnome-mime-data-2.18.0.tar.bz2;
+ sha256 = "1mvg8glb2a40yilmyabmb7fkbzlqd3i3d31kbkabqnq86xdnn69p";
+ };
+ buildInputs = [ intltool ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix
new file mode 100644
index 00000000000..c15f43b542a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gnome-vfs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, bzip2, openssl, dbus-glib
+, glib, gamin, cdparanoia, intltool, GConf, gnome_mime_data, avahi, acl }:
+
+stdenv.mkDerivation rec {
+ name = "gnome-vfs-${minVer}.4";
+ minVer = "2.24";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-vfs/${minVer}/${name}.tar.bz2";
+ sha256 = "1ajg8jb8k3snxc7rrgczlh8daxkjidmcv3zr9w809sq4p2sn9pk2";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ nativeBuildInputs = [ intltool pkgconfig ];
+ buildInputs =
+ [ libxml2 bzip2 openssl dbus-glib gamin cdparanoia
+ gnome_mime_data avahi acl
+ ];
+
+ propagatedBuildInputs = [ GConf glib ];
+
+ postPatch = "find . -name Makefile.in | xargs sed 's/-DG_DISABLE_DEPRECATED//g' -i ";
+
+ doCheck = false; # needs dbus daemon
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gtkglext/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkglext/default.nix
new file mode 100644
index 00000000000..27caaa70634
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkglext/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, glib, gtk2, libGLU_combined, pango, pangox_compat, xorg }:
+
+stdenv.mkDerivation rec {
+ name = "gtkglext-1.2.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gtkglext/1.2/${name}.tar.bz2";
+ sha256 = "0lbz96jwz57hnn52b8rfj54inwpwcc9fkdq6ya043cgnfih77g8n";
+ };
+
+ buildInputs = with xorg;
+ [ pkgconfig glib gtk2 libGLU_combined pango libX11 libXmu ];
+ propagatedBuildInputs = [ pangox_compat ];
+
+ patches = [
+ # The library uses `GTK_WIDGET_REALIZED', `GTK_WIDGET_TOPLEVEL', and
+ # `GTK_WIDGET_NO_WINDOW', all of which appear to be deprecated nowadays.
+ (fetchpatch {
+ name = "02_fix_gtk-2.20_deprecated_symbols.diff";
+ url = https://git.gnome.org/browse/gtkglext/patch/?id=d8f285d1397f6c41099c67e668288eecc1cdae67;
+ sha256 = "1zxak73plhy3m6psil1q9ssvjh9aqrif7kcbcz69y480qfb4ja08";
+ })
+ # Fix build with glibc ≥ 2.27
+ (fetchurl {
+ url = https://salsa.debian.org/gewo/gtkglext/raw/3b002677c907890c7de002c9f5b4b3ec71d11b31/debian/patches/04_glibc2.27-ftbfs.diff;
+ sha256 = "1l1swkjkai6pnah23xfsfpbq2fgbhp5pzj3l0ybsx6b858cxqzj5";
+ })
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://projects.gnome.org/gtkglext/;
+ description = "GtkGLExt, an OpenGL extension to GTK";
+ longDescription = ''
+ GtkGLExt is an OpenGL extension to GTK. It provides additional GDK
+ objects which support OpenGL rendering in GTK and GtkWidget API
+ add-ons to make GTK widgets OpenGL-capable. In contrast to Janne
+ Löf's GtkGLArea, GtkGLExt provides a GtkWidget API that enables
+ OpenGL drawing for standard and custom GTK widgets.
+ '';
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/01_remove-disable-deprecated.patch b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/01_remove-disable-deprecated.patch
new file mode 100644
index 00000000000..1d9a179d236
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/01_remove-disable-deprecated.patch
@@ -0,0 +1,17 @@
+diff -Naur gtkhtml-3.32.2-orig/configure gtkhtml-3.32.2/configure
+--- gtkhtml-3.32.2-orig/configure 2011-02-05 23:12:31.000000000 -0500
++++ gtkhtml-3.32.2/configure 2011-04-22 13:03:18.228874636 -0400
+@@ -5761,12 +5761,7 @@
+
+ if test "x${enable_deprecated_flags}" = "xyes"; then
+
+- list="-DG_DISABLE_DEPRECATED
+- -DPANGO_DISABLE_DEPRECATED
+- -DGDK_DISABLE_DEPRECATED
+- -DGDK_PIXBUF_DISABLE_DEPRECATED
+- -DGTK_DISABLE_DEPRECATED
+- -DGNOME_DISABLE_DEPRECATED"
++ list=""
+ flags_supported=""
+ flags_unsupported=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported compiler flags" >&5
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/4.x.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/4.x.nix
new file mode 100644
index 00000000000..33c2abef0fa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/4.x.nix
@@ -0,0 +1,16 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, intltool
+, GConf, enchant, isocodes, gnome_icon_theme, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ version = "4.10.0";
+ pname = "gtkhtml";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gtkhtml/4.10/${pname}-${version}.tar.xz";
+ sha256 = "1hq6asgb5n9q3ryx2vngr4jyi8lg65lzpnlgrgcwayiczcj68fya";
+ };
+
+ propagatedBuildInputs = [ gsettings-desktop-schemas gtk3 gnome_icon_theme GConf ];
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool enchant isocodes ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/default.nix
new file mode 100644
index 00000000000..5ff687adcf6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/gtkhtml/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, intltool,
+GConf, enchant, isocodes, gnome_icon_theme }:
+
+stdenv.mkDerivation rec {
+ name = "gtkhtml-3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gtkhtml/3.32/${name}.tar.bz2";
+ sha256 = "17z3jwvpn8waz7bhwrk7a6vs9pad6sqmlxxcqwvxxq89ywy0ail7";
+ };
+
+ #From Debian, fixes build issue described here:
+ #http://www.mail-archive.com/debian-bugs-rc@lists.debian.org/msg250091.html
+ patches = [ ./01_remove-disable-deprecated.patch ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 intltool GConf enchant isocodes gnome_icon_theme ];
+
+ NIX_LDFLAGS = [ "-lgthread-2.0" ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libIDL/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libIDL/default.nix
new file mode 100644
index 00000000000..1fc78002606
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libIDL/default.nix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl, flex, bison, pkgconfig, glib, gettext}:
+
+stdenv.mkDerivation rec {
+ name = "libIDL-${minVer}.14";
+ minVer = "0.8";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libIDL/${minVer}/${name}.tar.bz2";
+ sha256 = "08129my8s9fbrk0vqvnmx6ph4nid744g5vbwphzkaik51664vln5";
+ };
+
+ buildInputs = [ glib gettext ];
+
+ nativeBuildInputs = [ flex bison pkgconfig ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix
new file mode 100644
index 00000000000..7b1ccb97dc4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libart_lgpl/default.nix
@@ -0,0 +1,9 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+ name = "libart_lgpl-2.3.21";
+ src = fetchurl {
+ url = "mirror://gnome/sources/libart_lgpl/2.3/${name}.tar.bz2";
+ sha256 = "1yknfkyzgz9s616is0l9gp5aray0f2ry4dw533jgzj8gq5s1xhgx";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libbonobo/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libbonobo/default.nix
new file mode 100644
index 00000000000..bf0cec8dfbe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libbonobo/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, flex, bison, pkgconfig, glib, libxml2, popt
+, intltool, ORBit2, procps }:
+
+stdenv.mkDerivation rec {
+ name = "libbonobo-${minVer}.1";
+ minVer = "2.32";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libbonobo/${minVer}/${name}.tar.bz2";
+ sha256 = "0swp4kk6x7hy1rvd1f9jba31lvfc6qvafkvbpg9h0r34fzrd8q4i";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ preConfigure = # still using stuff deprecated in new glib versions
+ "sed 's/-DG_DISABLE_DEPRECATED//g' -i configure activation-server/Makefile.in";
+
+ nativeBuildInputs = [ flex bison pkgconfig intltool procps ];
+ buildInputs = [ libxml2 ];
+ propagatedBuildInputs = [ popt glib ORBit2 ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libbonoboui/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libbonoboui/default.nix
new file mode 100644
index 00000000000..0be9d7acb9c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libbonoboui/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl, bison, pkgconfig, popt, libxml2, gtk2, libtool
+, intltool, libbonobo, GConf, libgnomecanvas, libgnome, libglade }:
+
+stdenv.mkDerivation rec {
+ name = "libbonoboui-${minVer}.5";
+ minVer = "2.24";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libbonoboui/${minVer}/${name}.tar.bz2";
+ sha256 = "1kbgqh7bw0fdx4f1a1aqwpff7gp5mwhbaz60c6c98bc4djng5dgs";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs = [ bison popt gtk2 libxml2 GConf libglade libtool ];
+ propagatedBuildInputs = [ libbonobo libgnomecanvas libgnome ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libglade/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libglade/default.nix
new file mode 100644
index 00000000000..d51cccf7906
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libglade/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, libxml2, python2 ? null, withLibgladeConvert ? false, gettext }:
+
+assert withLibgladeConvert -> python2 != null;
+
+stdenv.mkDerivation {
+ name = "libglade-2.6.4";
+
+ src = fetchurl {
+ url = mirror://gnome/sources/libglade/2.6/libglade-2.6.4.tar.bz2;
+ sha256 = "1v2x2s04jry4gpabws92i0wq2ghd47yr5n9nhgnkd7c38xv1wdk4";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 gettext ]
+ ++ stdenv.lib.optional withLibgladeConvert python2;
+
+ NIX_LDFLAGS = "-lgmodule-2.0";
+
+ propagatedBuildInputs = [ libxml2 ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/default.nix
new file mode 100644
index 00000000000..42f47bc5a83
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, glib, popt, zlib, libcanberra-gtk2
+, intltool, libbonobo, GConf, gnome_vfs, libtool, libogg
+}:
+
+stdenv.mkDerivation rec {
+ name = "libgnome-${minVer}.1";
+ minVer = "2.32";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libgnome/${minVer}/${name}.tar.bz2";
+ sha256 = "197pnq8y0knqjhm2fg4j6hbqqm3qfzfnd0irhwxpk1b4hqb3kimj";
+ };
+
+ patches = [ ./new-glib.patch ];
+ /* There's a comment containing an invalid utf-8 sequence, breaking glib-mkenums. */
+ postPatch = "sed '/returns the true filename/d' -i libgnome/gnome-config.h";
+
+ outputs = [ "out" "dev" ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ popt zlib intltool GConf gnome_vfs libcanberra-gtk2 libtool ];
+ propagatedBuildInputs = [ glib libbonobo libogg ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/new-glib.patch b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/new-glib.patch
new file mode 100644
index 00000000000..ceabfbdd158
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnome/new-glib.patch
@@ -0,0 +1,65 @@
+Porting libgnome to newer glib:
+ * remove g_thread_init and g_thread_supported, which are longer needed
+ https://developer.gnome.org/glib/2.36/glib-Deprecated-Thread-APIs.html#g-thread-init
+ * replace GStaticRecMutex by GRecMutex
+ https://developer.gnome.org/glib/2.36/glib-Deprecated-Thread-APIs.html#GStaticRecMutex
+
+diff --git a/libgnome/gnome-i18n.c b/libgnome/gnome-i18n.c
+index 531c56c..f13d61e 100644
+--- a/libgnome/gnome-i18n.c
++++ b/libgnome/gnome-i18n.c
+@@ -55,12 +55,14 @@
+ const GList *
+ gnome_i18n_get_language_list (const gchar *ignored)
+ {
+- static GStaticRecMutex lang_list_lock = G_STATIC_REC_MUTEX_INIT;
++ static GRecMutex lang_list_lock;
++ g_rec_mutex_init (&lang_list_lock);
++
+ static GList *list = NULL;
+ const char * const* langs;
+ int i;
+
+- g_static_rec_mutex_lock (&lang_list_lock);
++ g_rec_mutex_lock (&lang_list_lock);
+
+ if (list == NULL) {
+ langs = g_get_language_names ();
+@@ -71,7 +73,7 @@ gnome_i18n_get_language_list (const gchar *ignored)
+ list = g_list_reverse (list);
+ }
+
+- g_static_rec_mutex_unlock (&lang_list_lock);
++ g_rec_mutex_unlock (&lang_list_lock);
+
+ return list;
+ }
+diff --git a/libgnome/gnome-init.c b/libgnome/gnome-init.c
+index fe3efd4..c6619af 100644
+--- a/libgnome/gnome-init.c
++++ b/libgnome/gnome-init.c
+@@ -115,9 +115,6 @@ gnome_bonobo_module_info_get (void)
+ static void
+ bonobo_activation_pre_args_parse (GnomeProgram *program, GnomeModuleInfo *mod_info)
+ {
+- if (!g_thread_supported ())
+- g_thread_init (NULL);
+-
+ if (!bonobo_activation_is_initialized ())
+ bonobo_activation_preinit (program, mod_info);
+ }
+diff --git a/libgnome/gnome-program.c b/libgnome/gnome-program.c
+index 739765e..cd14999 100644
+--- a/libgnome/gnome-program.c
++++ b/libgnome/gnome-program.c
+@@ -1878,10 +1878,6 @@ gnome_program_init (const char *app_id, const char *app_version,
+ GnomeProgram *program;
+ va_list args;
+
+- /* g_thread_init() has to be the first GLib function called ever */
+- if (!g_threads_got_initialized)
+- g_thread_init (NULL);
+-
+ g_type_init ();
+
+ va_start(args, first_property_name);
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix
new file mode 100644
index 00000000000..72928d82037
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvas/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, intltool, libart_lgpl, libglade }:
+
+stdenv.mkDerivation rec {
+ name = "libgnomecanvas-${minVer}.3";
+ minVer = "2.30";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libgnomecanvas/${minVer}/${name}.tar.bz2";
+ sha256 = "0h6xvswbqspdifnyh5pm2pqq55yp3kn6yrswq7ay9z49hkh7i6w5";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ buildInputs = [ libglade ];
+ nativeBuildInputs = [ pkgconfig intltool ];
+ propagatedBuildInputs = [ libart_lgpl gtk2 ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix
new file mode 100644
index 00000000000..d2539889fdb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecanvasmm/default.nix
@@ -0,0 +1,13 @@
+{ stdenv, fetchurl, pkgconfig, libgnomecanvas, gtkmm2 }:
+
+stdenv.mkDerivation {
+ name = "libgnomecanvasmm-2.26.0";
+
+ src = fetchurl {
+ url = mirror://gnome/sources/libgnomecanvasmm/2.26/libgnomecanvasmm-2.26.0.tar.bz2;
+ sha256 = "996577f97f459a574919e15ba7fee6af8cda38a87a98289e9a4f54752d83e918";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ libgnomecanvas gtkmm2 ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/cups_1.6.patch b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/cups_1.6.patch
new file mode 100644
index 00000000000..68f379c2510
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/cups_1.6.patch
@@ -0,0 +1,285 @@
+From ae783efde4fa69578651994505462f02b8639220 Mon Sep 17 00:00:00 2001
+From: Alexandre Rostovtsev <tetromino@gentoo.org>
+Date: Tue, 7 Aug 2012 06:53:09 -0400
+Subject: [PATCH] Use CUPS-1.6 IPP API getter/setter functions
+
+CUPS 1.6 makes various structures private and introduces these ippGet
+and ippSet functions for all of the fields in these structures.
+http://www.cups.org/str.php?L3928
+
+We define our own accessors when building against CUPS < 1.6.
+
+Based on work by Jiri Popelka <jpopelka@redhat.com> at
+https://bugzilla.gnome.org/show_bug.cgi?id=679759
+---
+ libgnomecups/gnome-cups-printer.c | 48 +++++++++++++++++++++++++++++-------
+ libgnomecups/gnome-cups-queue.c | 43 +++++++++++++++++++++++++++------
+ libgnomecups/gnome-cups-request.c | 44 ++++++++++++++++++++++++++++-----
+ 3 files changed, 110 insertions(+), 25 deletions(-)
+
+diff --git a/libgnomecups/gnome-cups-printer.c b/libgnomecups/gnome-cups-printer.c
+index c924af0..f5e1ef7 100644
+--- a/libgnomecups/gnome-cups-printer.c
++++ b/libgnomecups/gnome-cups-printer.c
+@@ -37,6 +37,34 @@
+
+ #define UPDATE_TIMEOUT 5000
+
++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
++#define HAVE_CUPS_1_6 1
++#endif
++
++#ifndef HAVE_CUPS_1_6
++#define ippGetCount(attr) attr->num_values
++#define ippGetName(attr) attr->name
++#define ippGetInteger(attr, element) attr->values[element].integer
++#define ippGetString(attr, element, language) attr->values[element].string.text
++
++static ipp_attribute_t *
++ippFirstAttribute(ipp_t *ipp)
++{
++ if (!ipp)
++ return (NULL);
++ return (ipp->current = ipp->attrs);
++}
++
++static ipp_attribute_t *
++ippNextAttribute(ipp_t *ipp)
++{
++ if (!ipp || !ipp->current)
++ return (NULL);
++ return (ipp->current = ipp->current->next);
++}
++#endif
++
++
+ struct _GnomeCupsPPDFile {
+ char name[1];
+ };
+@@ -173,9 +201,9 @@ map_reasons (GnomeCupsPrinter *printer,
+ printer->details->state_reasons = NULL;
+
+ /* cf. RFC2911 4.4.12 */
+- for (i = 0; i < attr->num_values; i++) {
++ for (i = 0; i < ippGetCount (attr); i++) {
+ const char *p;
+- const char *keyword = attr->values [i].string.text;
++ const char *keyword = ippGetString (attr, i, NULL);
+
+ reason = g_new (GnomeCupsPrinterReason, 1);
+
+@@ -224,8 +252,8 @@ gnome_cups_printer_get_info (GnomeCupsPrinter *printer)
+ return printer->details->info;
+ }
+
+-#define MAP_INT(v,a) {if (!g_ascii_strcasecmp (attr->name, (a))) { if ((v) != attr->values[0].integer) { changed = TRUE; } (v) = attr->values[0].integer; }}
+-#define MAP_STRING(v,a) {if (!g_ascii_strcasecmp (attr->name, (a))) { if (!v || strcmp (v, attr->values[0].string.text)) { g_free (v); changed = TRUE; (v) = g_strdup (attr->values[0].string.text); }}}
++#define MAP_INT(v,a) {if (!g_ascii_strcasecmp (ippGetName (attr), (a))) { if ((v) != ippGetInteger (attr, 0)) { changed = TRUE; } (v) = ippGetInteger (attr, 0); }}
++#define MAP_STRING(v,a) {if (!g_ascii_strcasecmp (ippGetName (attr), (a))) { if (!v || strcmp (v, ippGetString (attr, 0, NULL))) { g_free (v); changed = TRUE; (v) = g_strdup (ippGetString (attr, 0, NULL)); }}}
+
+ static void
+ attributes_update_cb (guint id,
+@@ -243,14 +271,14 @@ attributes_update_cb (guint id,
+ changed = FALSE;
+
+ if (!error && response) {
+- for (attr = response->attrs; attr != NULL; attr = attr->next) {
+- if (!attr->name) {
++ for (attr = ippFirstAttribute (response); attr != NULL; attr = ippNextAttribute (response)) {
++ if (!ippGetName (attr)) {
+ continue;
+ }
+- if (!g_ascii_strcasecmp (attr->name, "attributes-charset") || !strcmp (attr->name, "attributes-charset")) {
++ if (!g_ascii_strcasecmp (ippGetName (attr), "attributes-charset") || !strcmp (ippGetName (attr), "attributes-charset")) {
+ continue;
+ }
+- if (!g_ascii_strcasecmp (attr->name, "printer-state-reasons")) {
++ if (!g_ascii_strcasecmp (ippGetName (attr), "printer-state-reasons")) {
+ map_reasons (printer, attr);
+ }
+ MAP_INT (printer->details->state, "printer-state");
+@@ -570,7 +598,7 @@ get_default (void)
+
+ attr = ippFindAttribute (response, "printer-name", IPP_TAG_NAME);
+ if (attr) {
+- name = g_strdup (attr->values[0].string.text);
++ name = g_strdup (ippGetString (attr, 0, NULL));
+ } else {
+ name = NULL;
+ }
+@@ -698,7 +726,7 @@ get_printer_names (void)
+ attr = ippFindAttribute (response, "printer-name", IPP_TAG_NAME);
+ while (attr) {
+ ret = g_list_prepend (ret,
+- g_strdup (attr->values[0].string.text));
++ g_strdup (ippGetString (attr, 0, NULL)));
+
+ attr = ippFindNextAttribute (response,
+ "printer-name",
+diff --git a/libgnomecups/gnome-cups-queue.c b/libgnomecups/gnome-cups-queue.c
+index 9f98ed9..298db42 100644
+--- a/libgnomecups/gnome-cups-queue.c
++++ b/libgnomecups/gnome-cups-queue.c
+@@ -15,6 +15,33 @@
+
+ #define UPDATE_TIMEOUT 3000
+
++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
++#define HAVE_CUPS_1_6 1
++#endif
++
++#ifndef HAVE_CUPS_1_6
++#define ippGetName(attr) attr->name
++#define ippGetInteger(attr, element) attr->values[element].integer
++#define ippGetString(attr, element, language) attr->values[element].string.text
++
++static ipp_attribute_t *
++ippFirstAttribute(ipp_t *ipp)
++{
++ if (!ipp)
++ return (NULL);
++ return (ipp->current = ipp->attrs);
++}
++
++static ipp_attribute_t *
++ippNextAttribute(ipp_t *ipp)
++{
++ if (!ipp || !ipp->current)
++ return (NULL);
++ return (ipp->current = ipp->current->next);
++}
++#endif
++
++
+ struct _GnomeCupsQueueDetails {
+ char *queue_name;
+ GList *jobs;
+@@ -199,8 +226,8 @@ finish_job (GnomeCupsJob *job)
+ job->size = job->size * 1024;
+ }
+
+-#define MAP_STR(dest, src) { if (!g_ascii_strcasecmp (attr->name, (src))) { if ((dest) != NULL) g_free (dest); (dest) = g_strdup (attr->values[0].string.text);}}
+-#define MAP_INT(dest, src) { if (!g_ascii_strcasecmp (attr->name, (src))) { (dest) = attr->values[0].integer; } }
++#define MAP_STR(dest, src) { if (!g_ascii_strcasecmp (ippGetName (attr), (src))) { if ((dest) != NULL) g_free (dest); (dest) = g_strdup (ippGetString (attr, 0, NULL));}}
++#define MAP_INT(dest, src) { if (!g_ascii_strcasecmp (ippGetName (attr), (src))) { (dest) = ippGetInteger (attr, 0); } }
+
+ static void
+ get_jobs_cb (guint id,
+@@ -231,8 +258,8 @@ get_jobs_cb (guint id,
+
+ if (response) {
+ job = g_new0 (GnomeCupsJob, 1);
+- for (attr = response->attrs; attr != NULL; attr = attr->next) {
+- if (attr->name == NULL) {
++ for (attr = ippFirstAttribute (response); attr != NULL; attr = ippNextAttribute (response)) {
++ if (ippGetName (attr) == NULL) {
+ if (job->name) {
+ finish_job (job);
+ jobs = g_list_prepend (jobs, job);
+@@ -244,7 +271,7 @@ get_jobs_cb (guint id,
+ continue;
+ }
+
+- if (!g_ascii_strcasecmp (attr->name, "attributes-charset") || !g_ascii_strcasecmp (attr->name, "attributes-charset")) {
++ if (!g_ascii_strcasecmp (ippGetName (attr), "attributes-charset") || !g_ascii_strcasecmp (ippGetName (attr), "attributes-charset")) {
+ continue;
+
+ }
+@@ -355,8 +382,8 @@ gnome_cups_queue_get_job_nocache (GnomeCupsQueue *queue,
+
+ if (response) {
+ job = g_new0 (GnomeCupsJob, 1);
+- for (attr = response->attrs; attr != NULL; attr = attr->next) {
+- if (attr->name == NULL) {
++ for (attr = ippFirstAttribute (response); attr != NULL; attr = ippNextAttribute (response)) {
++ if (ippGetName (attr) == NULL) {
+ if (job->name) {
+ finish_job (job);
+ } else {
+@@ -366,7 +393,7 @@ gnome_cups_queue_get_job_nocache (GnomeCupsQueue *queue,
+ break;
+ }
+
+- if (!g_ascii_strcasecmp (attr->name, "attributes-charset") || !g_ascii_strcasecmp (attr->name, "attributes-charset")) {
++ if (!g_ascii_strcasecmp (ippGetName (attr), "attributes-charset") || !g_ascii_strcasecmp (ippGetName (attr), "attributes-charset")) {
+ continue;
+ }
+
+diff --git a/libgnomecups/gnome-cups-request.c b/libgnomecups/gnome-cups-request.c
+index c94f623..13f0948 100644
+--- a/libgnomecups/gnome-cups-request.c
++++ b/libgnomecups/gnome-cups-request.c
+@@ -19,6 +19,36 @@
+ #define STOP_UNUSED_THREADS_TIMEOUT 60
+ #define CLOSE_UNUSED_CONNECTIONS_TIMEOUT 30
+
++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
++#define HAVE_CUPS_1_6 1
++#endif
++
++#ifndef HAVE_CUPS_1_6
++#define ippGetCount(attr) attr->num_values
++#define ippGetValueTag(attr) attr->value_tag
++#define ippGetName(attr) attr->name
++#define ippGetBoolean(attr, element) attr->values[element].boolean
++#define ippGetInteger(attr, element) attr->values[element].integer
++#define ippGetString(attr, element, language) attr->values[element].string.text
++
++static ipp_attribute_t *
++ippFirstAttribute(ipp_t *ipp)
++{
++ if (!ipp)
++ return (NULL);
++ return (ipp->current = ipp->attrs);
++}
++
++static ipp_attribute_t *
++ippNextAttribute(ipp_t *ipp)
++{
++ if (!ipp || !ipp->current)
++ return (NULL);
++ return (ipp->current = ipp->current->next);
++}
++#endif
++
++
+ typedef struct
+ {
+ GMutex *mutex;
+@@ -276,14 +306,14 @@ dump_request (ipp_t const *req)
+ unsigned i;
+ ipp_attribute_t *attr;
+
+- for (attr = req->attrs; attr != NULL; attr = attr->next) {
+- g_print ("%s", attr->name);
+- for (i = 0 ; i < attr->num_values ; i++) {
++ for (attr = ippFirstAttribute (req); attr != NULL; attr = ippNextAttribute (req)) {
++ g_print ("%s", ippGetName (attr));
++ for (i = 0 ; i < ippGetCount (attr) ; i++) {
+ g_print ("\t[%d] = ", i);
+- switch (attr->value_tag & ~IPP_TAG_COPY) {
++ switch (ippGetValueTag (attr) & ~IPP_TAG_COPY) {
+ case IPP_TAG_INTEGER:
+ case IPP_TAG_ENUM:
+- g_print ("%d\n", attr->values[i].integer);
++ g_print ("%d\n", ippGetInteger (attr, i));
+ break;
+
+ case IPP_TAG_STRING:
+@@ -294,11 +324,11 @@ dump_request (ipp_t const *req)
+ case IPP_TAG_CHARSET:
+ case IPP_TAG_LANGUAGE:
+ case IPP_TAG_MIMETYPE:
+- g_print ("'%s'\n", attr->values[i].string.text);
++ g_print ("'%s'\n", ippGetString (attr, i, NULL));
+ break;
+
+ case IPP_TAG_BOOLEAN:
+- g_print ("%s\n", (int)attr->values[i].boolean ? "true" : "false");
++ g_print ("%s\n", (int)ippGetBoolean (attr, i) ? "true" : "false");
+ break;
+
+ default:
+--
+1.7.8.6
+
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/default.nix
new file mode 100644
index 00000000000..ee0282147de
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, gettext, libxml2, intltool, libart_lgpl }:
+
+stdenv.mkDerivation rec {
+ name = "libgnomecups-0.2.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libgnomecups/0.2/${name}.tar.bz2";
+ sha256 = "0a8xdaxzz2wc0n1fjcav65093gixzyac3948l8cxx1mk884yhc71";
+ };
+
+ hardeningDisable = [ "format" ];
+
+ patches = [ ./glib.patch ./cups_1.6.patch ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 gettext intltool libart_lgpl ];
+
+ propagatedBuildInputs = [ libxml2 ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/glib.patch b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/glib.patch
new file mode 100644
index 00000000000..3f73af861c0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomecups/glib.patch
@@ -0,0 +1,38 @@
+From d84eee9450b3b6f6155074915efc61bedcc8d446 Mon Sep 17 00:00:00 2001
+From: Dominique Leuenberger <dimstar@opensuse.org>
+Date: Sun, 27 Nov 2011 21:36:41 +0100
+Subject: [PATCH] Fix: Only glib.h can be included
+
+---
+ libgnomecups/gnome-cups-i18n.c | 2 +-
+ libgnomecups/gnome-cups-init.h | 3 +--
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/libgnomecups/gnome-cups-i18n.c b/libgnomecups/gnome-cups-i18n.c
+index 8987c5c..127756d 100644
+--- a/libgnomecups/gnome-cups-i18n.c
++++ b/libgnomecups/gnome-cups-i18n.c
+@@ -1,5 +1,5 @@
+ #include <config.h>
+-#include <glib/gmacros.h>
++#include <glib.h>
+ #include "gnome-cups-i18n.h"
+
+ #ifdef ENABLE_NLS
+diff --git a/libgnomecups/gnome-cups-init.h b/libgnomecups/gnome-cups-init.h
+index 22b682a..c4600fc 100644
+--- a/libgnomecups/gnome-cups-init.h
++++ b/libgnomecups/gnome-cups-init.h
+@@ -1,8 +1,7 @@
+ #ifndef GNOME_CUPS_INIT
+ #define GNOME_CUPS_INIT
+
+-#include <glib/gtypes.h>
+-#include <glib/gmacros.h>
++#include <glib.h>
+
+ G_BEGIN_DECLS
+
+--
+1.7.7
+
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/bug653388.patch b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/bug653388.patch
new file mode 100644
index 00000000000..468f8e287a7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/bug653388.patch
@@ -0,0 +1,21 @@
+From 9b82b7e75b83395e7c5692085e1934202cf7f65f Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Wed, 12 Oct 2011 15:08:59 +0000
+Subject: Add missing include
+
+https://bugzilla.gnome.org/show_bug.cgi?id=653388
+---
+diff --git a/libgnomeprint/modules/cups/gnome-print-cups-transport.c b/libgnomeprint/modules/cups/gnome-print-cups-transport.c
+index aeb7111..85de91b 100644
+--- a/libgnomeprint/modules/cups/gnome-print-cups-transport.c
++++ b/libgnomeprint/modules/cups/gnome-print-cups-transport.c
+@@ -34,6 +34,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
++#include <stdio.h>
+ #include <unistd.h>
+ #include <locale.h>
+
+--
+cgit v0.9.0.2
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix
new file mode 100644
index 00000000000..453a4459fdd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprint/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, gettext, libxml2, intltool, libart_lgpl
+, libgnomecups, bison2, flex }:
+
+stdenv.mkDerivation rec {
+ name = "libgnomeprint-2.18.8";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libgnomeprint/2.18/${name}.tar.bz2";
+ sha256 = "1034ec8651051f84d2424e7a1da61c530422cc20ce5b2d9e107e1e46778d9691";
+ };
+
+ patches = [ ./bug653388.patch ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 gettext intltool libart_lgpl libgnomecups bison2 flex ];
+
+ propagatedBuildInputs = [ libxml2 ];
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix
new file mode 100644
index 00000000000..215c9eb3e5e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeprintui/default.nix
@@ -0,0 +1,13 @@
+{stdenv, fetchurl, pkgconfig, gtk2, gettext, intltool, libgnomecanvas, libgnomeprint, gnome_icon_theme}:
+
+stdenv.mkDerivation {
+ name = "libgnomeprintui-2.18.6";
+
+ src = fetchurl {
+ url = mirror://gnome/sources/libgnomeprintui/2.18/libgnomeprintui-2.18.6.tar.bz2;
+ sha256 = "0spl8vinb5n6n1krnfnr61dwaxidg67h8j94z9p59k2xdsvfashm";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 gettext intltool libgnomecanvas libgnomeprint gnome_icon_theme];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeui/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeui/default.nix
new file mode 100644
index 00000000000..838e5133745
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgnomeui/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, libxml2, xorg, glib, pango
+, intltool, libgnome, libgnomecanvas, libbonoboui, GConf, libtool
+, gnome_vfs, libgnome-keyring, libglade }:
+
+stdenv.mkDerivation rec {
+ name = "libgnomeui-${minVer}.5";
+ minVer = "2.24";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/libgnomeui/${minVer}/${name}.tar.bz2";
+ sha256 = "03rwbli76crkjl6gp422wrc9lqpl174k56cp9i96b7l8jlj2yddf";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ patches = [
+ (fetchpatch {
+ name = "0001-gnome-scores.h-Convert-to-UTF-8.patch";
+ url = https://github.com/GNOME/libgnomeui/commit/30334c28794ef85d8973f4ed0779b5ceed6594f2.diff;
+ sha256 = "1sn8j8dkam14wfkpw8nga3gk63wniff243mzv3jp0fvv52q8sqhk";
+ })
+ ];
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs =
+ [ xorg.xlibsWrapper libxml2 GConf pango glib libgnome-keyring libglade libtool ];
+
+ propagatedBuildInputs = [ libgnome libbonoboui libgnomecanvas gnome_vfs ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix b/nixpkgs/pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix
new file mode 100644
index 00000000000..cf34c7e7c68
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-2/platform/libgtkhtml/default.nix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl, pkgconfig, gtk2, gettext, libxml2 }:
+
+stdenv.mkDerivation {
+ name = "libgtkhtml-2.11.1";
+
+ src = fetchurl {
+ url = mirror://gnome/sources/libgtkhtml/2.11/libgtkhtml-2.11.1.tar.bz2;
+ sha256 = "0msajafd42545dxzyr5zqka990cjrxw2yz09ajv4zs8m1w6pm9rw";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk2 gettext ];
+ propagatedBuildInputs = [ libxml2 ];
+
+ hardeningDisable = [ "format" ];
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix
new file mode 100644
index 00000000000..9a70319952c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, gnome3
+, gtk3
+, wrapGAppsHook
+, gobject-introspection
+, itstool
+, libxml2
+, python3
+, at-spi2-core
+, dbus
+, gettext
+, libwnck3
+, adwaita-icon-theme
+}:
+
+ python3.pkgs.buildPythonApplication rec {
+ name = "accerciser-${version}";
+ version = "3.32.3";
+
+ format = "other";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/accerciser/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0ark4qkfvdggz2mbksq12iq55izdsjnkjqkvfnnkf4k5vfpa95y5";
+ };
+
+ nativeBuildInputs = [
+ gettext
+ gobject-introspection # For setup hook
+ itstool
+ libxml2
+ pkgconfig
+ dbus
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ adwaita-icon-theme
+ at-spi2-core
+ gtk3
+ libwnck3
+ ];
+
+ propagatedBuildInputs = with python3.pkgs; [
+ ipython
+ pyatspi
+ pycairo
+ pygobject3
+ xlib
+ ];
+
+ # Strict deps breaks accerciser
+ # and https://github.com/NixOS/nixpkgs/issues/56943
+ strictDeps = false;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "accerciser";
+ attrPath = "gnome3.accerciser";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Accerciser;
+ description = "Interactive Python accessibility explorer";
+ maintainers = gnome3.maintainers;
+ license = licenses.bsd3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix
new file mode 100644
index 00000000000..b18e58f6f56
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, intltool, fetchurl, wrapGAppsHook, gnome-video-effects, libcanberra-gtk3
+, pkgconfig, gtk3, glib, clutter-gtk, clutter-gst, udev, gst_all_1, itstool
+, libgudev, autoreconfHook, vala, docbook_xml_dtd_43, docbook_xsl, appstream-glib
+, libxslt, yelp-tools, gnome-common, gtk-doc
+, adwaita-icon-theme, librsvg, totem, gdk-pixbuf, gnome3, gnome-desktop, libxml2 }:
+
+stdenv.mkDerivation rec {
+ pname = "cheese";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/cheese/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1xlmsm4zsx05ahvpd4mgy1hfhxbag0r5i6p63bksjxdligdd36kv";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "cheese"; attrPath = "gnome3.cheese"; };
+ };
+
+ nativeBuildInputs = [
+ pkgconfig intltool itstool vala wrapGAppsHook libxml2 appstream-glib
+ libxslt docbook_xml_dtd_43 docbook_xsl
+ autoreconfHook gtk-doc yelp-tools gnome-common
+ ];
+ buildInputs = [ gtk3 glib gnome-video-effects
+ gdk-pixbuf adwaita-icon-theme librsvg udev gst_all_1.gstreamer
+ gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good gnome-desktop
+ gst_all_1.gst-plugins-bad clutter-gtk clutter-gst
+ libcanberra-gtk3 libgudev ];
+
+ outputs = [ "out" "man" "devdoc" ];
+
+ patches = [
+ gtk-doc.respect_xml_catalog_files_var_patch
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Effects
+ --prefix XDG_DATA_DIRS : "${gnome-video-effects}/share"
+ # vp8enc preset
+ --prefix GST_PRESET_PATH : "${gst_all_1.gst-plugins-good}/share/gstreamer-1.0/presets"
+ # Thumbnailers
+ --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+ --prefix XDG_DATA_DIRS : "${totem}/share"
+ )
+ '';
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Cheese;
+ description = "Take photos and videos with your webcam, with fun graphical effects";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix
new file mode 100644
index 00000000000..2061fc26607
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix
@@ -0,0 +1,129 @@
+{ stdenv
+, cmake
+, ninja
+, intltool
+, fetchurl
+, libxml2
+, webkitgtk
+, highlight
+, pkgconfig
+, gtk3
+, glib
+, libnotify
+, gtkspell3
+, evolution-data-server
+, adwaita-icon-theme
+, gnome-desktop
+, libgdata
+, libgweather
+, glib-networking
+, gsettings-desktop-schemas
+, wrapGAppsHook
+, itstool
+, shared-mime-info
+, libical
+, db
+, gcr
+, sqlite
+, gnome3
+, librsvg
+, gdk-pixbuf
+, libsecret
+, nss
+, nspr
+, icu
+, libcanberra-gtk3
+, bogofilter
+, gst_all_1
+, procps
+, p11-kit
+, openldap
+}:
+
+stdenv.mkDerivation rec {
+ pname = "evolution";
+ version = "3.32.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/evolution/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "00hmmg4hfns8rq9rcilmy0gi1xkksld27lfbd9zmw2xw37wjmbqh";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ intltool
+ itstool
+ libxml2
+ ninja
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ adwaita-icon-theme
+ bogofilter
+ db
+ evolution-data-server
+ gcr
+ gdk-pixbuf
+ glib
+ glib-networking
+ gnome-desktop
+ gsettings-desktop-schemas
+ gst_all_1.gst-plugins-base
+ gst_all_1.gstreamer
+ gtk3
+ gtkspell3
+ highlight
+ icu
+ libcanberra-gtk3
+ libgdata
+ libgweather
+ libical
+ libnotify
+ librsvg
+ libsecret
+ nspr
+ nss
+ openldap
+ p11-kit
+ procps
+ shared-mime-info
+ sqlite
+ webkitgtk
+ ];
+
+ propagatedUserEnvPkgs = [
+ evolution-data-server
+ ];
+
+ cmakeFlags = [
+ "-DENABLE_AUTOAR=OFF"
+ "-DENABLE_LIBCRYPTUI=OFF"
+ "-DENABLE_PST_IMPORT=OFF"
+ "-DENABLE_YTNEF=OFF"
+ ];
+
+ requiredSystemFeatures = [
+ "big-parallel"
+ ];
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "evolution";
+ attrPath = "gnome3.evolution";
+ };
+ };
+
+ PKG_CONFIG_LIBEDATASERVERUI_1_2_UIMODULEDIR = "${placeholder "out"}/lib/evolution-data-server/ui-modules";
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Evolution;
+ description = "Personal information management application that provides integrated mail, calendaring and address book functionality";
+ maintainers = gnome3.maintainers;
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix
new file mode 100644
index 00000000000..267a7f2f7d2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, glib, gtk3, meson, ninja, pkgconfig, gnome3, gettext, itstool, libxml2, libarchive
+, file, json-glib, python3, wrapGAppsHook, desktop-file-utils, libnotify, nautilus, glibcLocales }:
+
+stdenv.mkDerivation rec {
+ pname = "file-roller";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/file-roller/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0irm72cf8222h93skivn0nn0ckahiiiimy4rb9r3ccjvhi3hiaqw";
+ };
+
+ LANG = "en_US.UTF-8"; # postinstall.py
+
+ nativeBuildInputs = [ meson ninja gettext itstool pkgconfig libxml2 python3 wrapGAppsHook glibcLocales desktop-file-utils ];
+
+ buildInputs = [ glib gtk3 json-glib libarchive file gnome3.adwaita-icon-theme libnotify nautilus ];
+
+ PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
+
+ postPatch = ''
+ chmod +x postinstall.py # patchShebangs requires executable file
+ patchShebangs postinstall.py
+ patchShebangs data/set-mime-type-entry.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "file-roller";
+ attrPath = "gnome3.file-roller";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/FileRoller;
+ description = "Archive manager for the GNOME desktop environment";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix
new file mode 100644
index 00000000000..35d97a87a86
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, meson, fetchurl, python3
+, pkgconfig, gtk3, glib, adwaita-icon-theme
+, libpeas, gtksourceview4, gsettings-desktop-schemas
+, wrapGAppsHook, ninja, libsoup, libxml2
+, gnome3, gspell, perl, itstool, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "gedit";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gedit/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1q2rk7fym542c7k3bn2wlnzgy384gxacbifsjny0spbg95gfybvl";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig wrapGAppsHook meson ninja libxml2
+ python3 perl itstool desktop-file-utils
+ ];
+
+ buildInputs = [
+ gtk3 glib
+ adwaita-icon-theme libsoup
+ libpeas gtksourceview4
+ gsettings-desktop-schemas gspell
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson/post_install.py
+ chmod +x plugins/externaltools/scripts/gedit-tool-merge.pl
+ patchShebangs build-aux/meson/post_install.py
+ patchShebangs plugins/externaltools/scripts/gedit-tool-merge.pl
+ '';
+
+ # Reliably fails to generate gedit-file-browser-enum-types.h in time
+ enableParallelBuilding = false;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gedit";
+ attrPath = "gnome3.gedit";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Gedit;
+ description = "Official text editor of the GNOME desktop environment";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix
new file mode 100644
index 00000000000..f776f4dbe5a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, pkgconfig
+, meson
+, ninja
+, python3
+, gnome3
+, hicolor-icon-theme
+, desktop-file-utils
+, appstream-glib
+, gettext
+, itstool
+, libxml2
+, gtk3
+, glib
+, atk
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "ghex";
+ version = "3.18.4";
+
+ outputs = [ "out" "dev" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/ghex/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1h1pjrr9wynclfykizqd78dbi785wjz6b63p31k87kjvzy8w3nf2";
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ hicolor-icon-theme # for setup-hook
+ itstool
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ atk
+ glib
+ ];
+
+ checkInputs = [
+ appstream-glib
+ desktop-file-utils
+ ];
+
+ patches = [
+ # Fixes for darwin. Drop in next release.
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/ghex/commit/b0af26666cd990d99076c242b2abb3efc6e98671.patch";
+ sha256 = "1zwdkgr2nqrn9q3ydyvrrpn5x55cdi747fhbq6mh6blp9cbrk9b5";
+ })
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/ghex/commit/cc8ef9e67b23604c402460010dc0b5dccb85391b.patch";
+ sha256 = "0j2165rfhlbrlzhmcnirqd5m89ljpz0n3nz20sxbwlc8h42zv36s";
+ })
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "ghex";
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Ghex;
+ description = "Hex editor for GNOME desktop environment";
+ platforms = platforms.unix;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/glade/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/glade/default.nix
new file mode 100644
index 00000000000..84d1a8a76ba
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/glade/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, intltool, fetchurl, python3
+, pkgconfig, gtk3, glib, gobject-introspection
+, wrapGAppsHook, itstool, libxml2, docbook_xsl
+, gnome3, gdk-pixbuf, libxslt, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "glade";
+ version = "3.22.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/glade/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "16p38xavpid51qfy0s26n0n21f9ws1w9k5s65bzh1w7ay8p9my6z";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "glade"; attrPath = "gnome3.glade"; };
+ };
+
+ nativeBuildInputs = [
+ pkgconfig intltool itstool wrapGAppsHook docbook_xsl libxslt gobject-introspection
+ ];
+ buildInputs = [
+ gtk3 glib libxml2 python3 python3.pkgs.pygobject3
+ gsettings-desktop-schemas
+ gdk-pixbuf gnome3.adwaita-icon-theme
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Glade;
+ description = "User interface designer for GTK applications";
+ maintainers = gnome3.maintainers;
+ license = licenses.lgpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix
new file mode 100644
index 00000000000..25ee957224c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, meson, ninja, gettext, fetchurl, evince, gjs
+, pkgconfig, gtk3, glib, tracker, tracker-miners, libxslt
+, webkitgtk, gnome-desktop, libgepub, gnome3, gdk-pixbuf
+, gsettings-desktop-schemas, adwaita-icon-theme, docbook_xsl
+, docbook_xml_dtd_42, desktop-file-utils, python3
+, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-books";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1wkcywcwwszj9mldr0lngczqdz7hys08rr1nd2k6rs8ykzs2z7m4";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext libxslt desktop-file-utils
+ docbook_xsl docbook_xml_dtd_42 wrapGAppsHook python3
+ ];
+
+ buildInputs = [
+ gtk3 glib gsettings-desktop-schemas
+ gdk-pixbuf adwaita-icon-theme evince
+ webkitgtk gjs gobject-introspection tracker
+ tracker-miners gnome-desktop libgepub
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-books";
+ attrPath = "gnome3.gnome-books";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Books;
+ description = "An e-book manager application for GNOME";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
new file mode 100644
index 00000000000..2f0a21896e9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchurl, meson, ninja, wrapGAppsHook, pkgconfig, gettext, itstool, libvirt-glib
+, glib, gobject-introspection, libxml2, gtk3, gtk-vnc, freerdp, libvirt, spice-gtk, python3
+, spice-protocol, libsoup, libosinfo, systemd, tracker, tracker-miners, vala
+, libcap, yajl, gmp, gdbm, cyrus_sasl, gnome3, librsvg, desktop-file-utils
+, mtools, cdrkit, libcdio, libusb, libarchive, acl, libgudev, libsecret
+, libcap_ng, numactl, xen, libapparmor, json-glib, webkitgtk, vte
+}:
+
+# TODO: ovirt (optional)
+
+let
+ version = "3.32.1";
+in stdenv.mkDerivation rec {
+ pname = "gnome-boxes";
+ inherit version;
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-boxes/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "159sxii3g4s5pjb4s4i3kc4q162w5vicp4g6wvk1y2yv68bgmcl4";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ meson ninja vala pkgconfig gettext itstool wrapGAppsHook gobject-introspection desktop-file-utils python3
+ ];
+
+ # Required for USB redirection PolicyKit rules file
+ propagatedUserEnvPkgs = [ spice-gtk ];
+
+ buildInputs = [
+ libvirt-glib glib gtk3 gtk-vnc freerdp libxml2
+ libvirt spice-gtk spice-protocol libsoup json-glib webkitgtk libosinfo systemd
+ tracker tracker-miners libcap yajl gmp gdbm cyrus_sasl libusb libarchive
+ gnome3.adwaita-icon-theme librsvg acl libgudev libsecret
+ libcap_ng numactl xen libapparmor vte
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(--prefix PATH : "${stdenv.lib.makeBinPath [ mtools cdrkit libcdio ]}")
+ '';
+
+ mesonFlags = [
+ "-Dovirt=false"
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/post_install.py # patchShebangs requires executable file
+ patchShebangs build-aux/post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-boxes";
+ attrPath = "gnome3.gnome-boxes";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Simple GNOME 3 application to access remote or virtual systems";
+ homepage = https://wiki.gnome.org/Apps/Boxes;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
new file mode 100644
index 00000000000..03619f38c9b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, wrapGAppsHook, libdazzle, libgweather, geoclue2, geocode-glib, python3
+, gettext, libxml2, gnome3, gtk3, evolution-data-server, libsoup
+, glib, gnome-online-accounts, gsettings-desktop-schemas }:
+
+let
+ pname = "gnome-calendar";
+ version = "3.32.2";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "07p73cvzj8idr80npja5yiv9pjfyi6qqfhaz5jwcgqspqbnhnl7k";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext libxml2 wrapGAppsHook python3 ];
+ buildInputs = [
+ gtk3 evolution-data-server libsoup glib gnome-online-accounts libdazzle libgweather geoclue2 geocode-glib
+ gsettings-desktop-schemas gnome3.adwaita-icon-theme
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson/meson_post_install.py # patchShebangs requires executable file
+ patchShebangs build-aux/meson/meson_post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Calendar;
+ description = "Simple and beautiful calendar application for GNOME";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
new file mode 100644
index 00000000000..ac1e9ee85c0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
@@ -0,0 +1,85 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gettext
+, gnome3
+, glib
+, gtk3
+, pango
+, wrapGAppsHook
+, python3
+, gobject-introspection
+, gjs
+, libunistring
+, gsettings-desktop-schemas
+, adwaita-icon-theme
+, gnome-desktop
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-characters";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-characters/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1mpg125x9k879ryg8xgbm9w1amx6b3iq9sqv7xfii7kzaanjb4js";
+ };
+
+ nativeBuildInputs = [
+ gettext
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ ];
+
+
+ buildInputs = [
+ adwaita-icon-theme
+ gjs
+ glib
+ gnome-desktop # for typelib
+ gsettings-desktop-schemas
+ gtk3
+ libunistring
+ pango
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ dontWrapGApps = true;
+
+ # Fixes https://github.com/NixOS/nixpkgs/issues/31168
+ postFixup = ''
+ for file in $out/share/org.gnome.Characters/org.gnome.Characters \
+ $out/share/org.gnome.Characters/org.gnome.Characters.BackgroundService
+ do
+ sed -e $"2iimports.package._findEffectiveEntryPointName = () => \'$(basename $file)\' " \
+ -i $file
+
+ wrapProgram $file "''${gappsWrapperArgs[@]}"
+ done
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Design/Apps/CharacterMap;
+ description = "Simple utility application to find and insert unusual characters";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
new file mode 100644
index 00000000000..38182f1f994
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl
+, meson, ninja, gettext, pkgconfig, wrapGAppsHook, itstool, desktop-file-utils
+, vala, gobject-introspection, libxml2, gtk3, glib, gsound, sound-theme-freedesktop
+, gsettings-desktop-schemas, adwaita-icon-theme, gnome-desktop, geocode-glib
+, gnome3, gdk-pixbuf, geoclue2, libgweather }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-clocks";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-clocks/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1w6lgjdak3x76c9gyhd1lqrdmjfh8q77sjnrkcimylsg0jq913bc";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-clocks";
+ attrPath = "gnome3.gnome-clocks";
+ };
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ vala meson ninja pkgconfig gettext itstool wrapGAppsHook desktop-file-utils libxml2
+ gobject-introspection # for finding vapi files
+ ];
+ buildInputs = [
+ gtk3 glib gsettings-desktop-schemas gdk-pixbuf adwaita-icon-theme
+ gnome-desktop geocode-glib geoclue2 libgweather gsound
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Fallback sound theme
+ --prefix XDG_DATA_DIRS : "${sound-theme-freedesktop}/share"
+ )
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Clocks;
+ description = "Clock application designed for GNOME 3";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
new file mode 100644
index 00000000000..1301381e5aa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, meson, ninja, gettext, fetchurl, evince, gjs
+, pkgconfig, gtk3, glib, tracker, tracker-miners
+, itstool, libxslt, webkitgtk, libgdata
+, gnome-desktop, libzapojit, libgepub
+, gnome3, gdk-pixbuf, libsoup, docbook_xsl, docbook_xml_dtd_42
+, gobject-introspection, inkscape, poppler_utils
+, desktop-file-utils, wrapGAppsHook, python3, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-documents";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-documents/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1gqddzbr4d8s0asmrhy0sfmwggzhbmpm61mqf8rxpdjk7s26086c";
+ };
+
+ doCheck = true;
+
+ mesonFlags = [
+ "-Dgetting-started=true"
+ ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool libxslt desktop-file-utils docbook_xsl docbook_xml_dtd_42 wrapGAppsHook python3
+ inkscape poppler_utils # building getting started
+ ];
+ buildInputs = [
+ gtk3 glib gsettings-desktop-schemas
+ gdk-pixbuf gnome3.adwaita-icon-theme evince
+ libsoup webkitgtk gjs gobject-introspection
+ tracker tracker-miners libgdata
+ gnome-desktop libzapojit libgepub
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ preFixup = ''
+ substituteInPlace $out/bin/gnome-documents --replace gapplication "${glib.bin}/bin/gapplication"
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-documents";
+ attrPath = "gnome3.gnome-documents";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Documents;
+ description = "Document manager application designed to work with GNOME 3";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
new file mode 100644
index 00000000000..655e9e9fe34
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, gnome3, intltool, itstool, libxml2 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-getting-started-docs";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-getting-started-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1v4k465mlzrhgcdddzs6bmm0yliyrfx6jg3gh0s17a08i0w5rbwq";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-getting-started-docs"; attrPath = "gnome3.gnome-getting-started-docs"; };
+ };
+
+ buildInputs = [ intltool itstool libxml2 ];
+
+ meta = with stdenv.lib; {
+ homepage = https://live.gnome.org/DocumentationProject;
+ description = "Help a new user get started in GNOME";
+ maintainers = gnome3.maintainers;
+ license = licenses.cc-by-sa-30;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
new file mode 100644
index 00000000000..8681a3c866c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gnome3, glib, gtk3, wrapGAppsHook, desktop-file-utils
+, gettext, itstool, libxml2, libxslt, docbook_xsl, docbook_xml_dtd_43, systemd, python3, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-logs";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-logs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0hh3nnbq7q2xbflvaywanm0j3dqhb04ngphskhnjx2sg7px12068";
+ };
+
+ mesonFlags = [
+ "-Dtests=true"
+ "-Dman=true"
+ ];
+
+ nativeBuildInputs = [
+ python3
+ meson ninja pkgconfig wrapGAppsHook gettext itstool desktop-file-utils
+ libxml2 libxslt docbook_xsl docbook_xml_dtd_43
+ ];
+ buildInputs = [ glib gtk3 systemd gsettings-desktop-schemas gnome3.adwaita-icon-theme ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-logs";
+ attrPath = "gnome3.gnome-logs";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Logs;
+ description = "A log viewer for the systemd journal";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
new file mode 100644
index 00000000000..6011092c0e0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchurl, meson, ninja, gettext, python3, pkgconfig, gnome3, gtk3
+, gobject-introspection, gdk-pixbuf, librsvg, libgweather
+, geoclue2, wrapGAppsHook, folks, libchamplain, gfbgraph, libsoup, gsettings-desktop-schemas
+, webkitgtk, gjs, libgee, geocode-glib, evolution-data-server, gnome-online-accounts }:
+
+let
+ pname = "gnome-maps";
+ version = "3.32.2.1";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1m191iq1gjaqz79ci3dkbmwrkxp7pzknngimlf5bqib5x8yairlb";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext python3 wrapGAppsHook ];
+ buildInputs = [
+ gobject-introspection
+ gtk3 geoclue2 gjs libgee folks gfbgraph
+ geocode-glib libchamplain libsoup
+ gdk-pixbuf librsvg libgweather
+ gsettings-desktop-schemas evolution-data-server
+ gnome-online-accounts gnome3.adwaita-icon-theme
+ webkitgtk
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+
+ # The .service file isn't wrapped with the correct environment
+ # so misses GIR files when started. By re-pointing from the gjs
+ # entry point to the wrapped binary we get back to a wrapped
+ # binary.
+ substituteInPlace "data/org.gnome.Maps.service.in" \
+ --replace "Exec=@pkgdatadir@/org.gnome.Maps" \
+ "Exec=$out/bin/gnome-maps"
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Maps;
+ description = "A map application for GNOME 3";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
new file mode 100644
index 00000000000..9b8c96729ad
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, meson, ninja, gettext, fetchurl, gdk-pixbuf, tracker
+, libxml2, python3, libnotify, wrapGAppsHook, libmediaart
+, gobject-introspection, gnome-online-accounts, grilo, grilo-plugins
+, pkgconfig, gtk3, glib, desktop-file-utils, appstream-glib
+, itstool, gnome3, gst_all_1, libdazzle, libsoup, gsettings-desktop-schemas }:
+
+python3.pkgs.buildPythonApplication rec {
+ pname = "gnome-music";
+ version = "3.32.2";
+
+ format = "other";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0cn7l1d3ayima1w3bxpshijabd7ibhnvqxv2mpvffzizk04ln6hk";
+ };
+
+ nativeBuildInputs = [ meson ninja gettext itstool pkgconfig libxml2 wrapGAppsHook desktop-file-utils appstream-glib gobject-introspection ];
+ buildInputs = with gst_all_1; [
+ gtk3 glib libmediaart gnome-online-accounts gobject-introspection
+ gdk-pixbuf gnome3.adwaita-icon-theme python3
+ grilo grilo-plugins libnotify libdazzle libsoup
+ gsettings-desktop-schemas tracker
+ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly
+ ];
+ propagatedBuildInputs = with python3.pkgs; [ pycairo dbus-python pygobject3 ];
+
+
+ postPatch = ''
+ for f in meson_post_conf.py meson_post_install.py; do
+ chmod +x $f
+ patchShebangs $f
+ done
+ '';
+
+ doCheck = false;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Music;
+ description = "Music player and management application for the GNOME desktop environment";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix
new file mode 100644
index 00000000000..37401af3ce6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, libgtop, intltool, itstool, libxml2, nmap, inetutils }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-nettool";
+ version = "3.8.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1c9cvzvyqgfwa5zzyvp7118pkclji62fkbb33g4y9sp5kw6m397h";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ gtk3 wrapGAppsHook libgtop intltool itstool libxml2
+ gnome3.adwaita-icon-theme
+ ];
+
+ propagatedUserEnvPkgs = [ nmap inetutils ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ versionPolicy = "none";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = "https://gitlab.gnome.org/GNOME/gnome-nettool";
+ description = "A collection of networking tools";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
new file mode 100644
index 00000000000..920343a6024
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, meson, ninja, gettext, fetchurl, pkgconfig
+, wrapGAppsHook, itstool, desktop-file-utils, python3
+, glib, gtk3, evolution-data-server, gnome-online-accounts
+, libuuid, webkitgtk, zeitgeist
+, gnome3, libxml2, gsettings-desktop-schemas, tracker }:
+
+let
+ version = "3.32.2";
+in stdenv.mkDerivation {
+ pname = "gnome-notes";
+ inherit version;
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/bijiben/${stdenv.lib.versions.majorMinor version}/bijiben-${version}.tar.xz";
+ sha256 = "0chm2fks7cpx3mycxzddpj6v9by203c3m1y6zns5ra43bspwafy2";
+ };
+
+ doCheck = true;
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool libxml2 desktop-file-utils python3 wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib gtk3 libuuid webkitgtk tracker
+ gnome-online-accounts zeitgeist
+ gsettings-desktop-schemas
+ evolution-data-server
+ gnome3.adwaita-icon-theme
+ ];
+
+ mesonFlags = [
+ "-Dzeitgeist=true"
+ "-Dupdate_mimedb=false"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "bijiben";
+ attrPath = "gnome3.gnome-notes";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Note editor designed to remain simple to use";
+ homepage = https://wiki.gnome.org/Apps/Notes;
+ license = licenses.gpl3;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix
new file mode 100644
index 00000000000..fd47f54eb89
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, gettext
+, fetchurl
+, pkgconfig
+, gtk3
+, glib
+, meson
+, ninja
+, upower
+, python3
+, desktop-file-utils
+, wrapGAppsHook
+, gnome3 }:
+
+let
+ pname = "gnome-power-manager";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0drfn3wcc8l4n07qwv6p0rw2dwcd00hwzda282q62l6sasks2b2g";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ wrapGAppsHook
+ gettext
+
+ # needed by meson_post_install.sh
+ python3
+ glib.dev
+ desktop-file-utils
+ ];
+
+ buildInputs = [
+ gtk3
+ glib
+ upower
+ gnome3.adwaita-icon-theme
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://projects-old.gnome.org/gnome-power-manager/;
+ description = "View battery and power statistics provided by UPower";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix
new file mode 100644
index 00000000000..907c0424454
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, pkgconfig, gettext, gobject-introspection, wrapGAppsHook, gjs, glib, gtk3, gdk-pixbuf, gst_all_1, gnome3
+, meson, ninja, python3, hicolor-icon-theme, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-sound-recorder";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0q83b6dabckmwj8mcw0wvhbxaszwdzzcf8ajx5bldll3lyl5yh2b";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig gettext meson ninja gobject-introspection
+ wrapGAppsHook python3 hicolor-icon-theme desktop-file-utils
+ ];
+ buildInputs = [ gjs glib gtk3 gdk-pixbuf ] ++ (with gst_all_1; [ gstreamer.dev gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad ]);
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ # TODO: fix this in gstreamer
+ # TODO: make stdenv.lib.getBin respect outputBin
+ PKG_CONFIG_GSTREAMER_1_0_TOOLSDIR = "${gst_all_1.gstreamer.dev}/bin";
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "A simple and modern sound recorder";
+ homepage = https://wiki.gnome.org/Apps/SoundRecorder;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix
new file mode 100644
index 00000000000..dbbbb43659b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, pkgconfig
+, python3
+, wrapGAppsHook
+, gettext
+, gnome3
+, glib
+, gtk3
+, libpeas
+, gnome-online-accounts
+, gsettings-desktop-schemas
+, evolution-data-server
+, libxml2
+, libsoup
+, libical
+, librest
+, json-glib
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-todo";
+ version = "3.28.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "08ygqbib72jlf9y0a16k54zz51sncpq2wa18wp81v46q8301ymy7";
+ };
+
+ patches = [
+ # fix build with e-d-s 3.32
+ (fetchpatch {
+ url = https://gitlab.gnome.org/GNOME/gnome-todo/commit/6cdabc4dd0c6c804a093b94c269461ce376fed4f.patch;
+ sha256 = "08ldgyxv9216dgr8y9asqd7j2y82y9yqnqhkqaxc9i8a67yz1gzy";
+ })
+ ];
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ gettext
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ gtk3
+ libpeas
+ gnome-online-accounts
+ gsettings-desktop-schemas
+ gnome3.adwaita-icon-theme
+ # Plug-ins
+ evolution-data-server
+ libxml2
+ libsoup
+ libical
+ librest
+ json-glib
+ ];
+
+ # Fix parallel building: missing dependency from src/gtd-application.c
+ # Probably remove for 3.30+ https://gitlab.gnome.org/GNOME/gnome-todo/issues/170
+ preBuild = "ninja src/gtd-vcs-identifier.h";
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Personal task manager for GNOME";
+ homepage = https://wiki.gnome.org/Apps/Todo;
+ license = licenses.gpl3Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
new file mode 100644
index 00000000000..1e5a641f08f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook, gjs, gobject-introspection
+, libgweather, meson, ninja, geoclue2, gnome-desktop, python3, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-weather";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-weather/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0jfxdfbjkrk3x48w6nxgbmazd6jw1fh4mfw12hlly4rs0cjw698s";
+ };
+
+ nativeBuildInputs = [ pkgconfig meson ninja wrapGAppsHook python3 ];
+ buildInputs = [
+ gtk3 gjs gobject-introspection gnome-desktop
+ libgweather gnome3.adwaita-icon-theme geoclue2 gsettings-desktop-schemas
+ ];
+
+ postPatch = ''
+ # The .service file is not wrapped with the correct environment
+ # so misses GIR files when started. By re-pointing from the gjs
+ # entry point to the wrapped binary we get back to a wrapped
+ # binary.
+ substituteInPlace "data/org.gnome.Weather.service.in" \
+ --replace "Exec=@DATA_DIR@/@APP_ID@" \
+ "Exec=$out/bin/gnome-weather"
+
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-weather";
+ attrPath = "gnome3.gnome-weather";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Weather;
+ description = "Access current weather conditions and forecasts";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/nautilus-sendto/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/nautilus-sendto/default.nix
new file mode 100644
index 00000000000..7ac8b4dfe11
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/nautilus-sendto/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, meson, ninja, glib, pkgconfig, gnome3, appstream-glib, gettext }:
+
+let
+ pname = "nautilus-sendto";
+ version = "3.8.6";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/3.8/${name}.tar.xz";
+ sha256 = "164d7c6e8bae29c4579bcc67a7bf50d783662b1545b62f3008e7ea3c0410e04d";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig appstream-glib gettext ];
+ buildInputs = [ glib ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Integrates Evolution and Pidgin into the Nautilus file manager";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix
new file mode 100644
index 00000000000..51fea63b714
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, itstool, fetchurl, gdk-pixbuf, adwaita-icon-theme
+, telepathy-glib, gjs, meson, ninja, gettext, telepathy-idle, libxml2, desktop-file-utils
+, pkgconfig, gtk3, glib, libsecret, libsoup, gobject-introspection, appstream-glib
+, gnome3, wrapGAppsHook, telepathy-logger, gspell, gsettings-desktop-schemas }:
+
+let
+ pname = "polari";
+ version = "3.32.2";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0h0w9j3y067l911gpj446b3a2w1i2vzr1w2a7cz7i5rhn6qkf2sp";
+ };
+
+ propagatedUserEnvPkgs = [ telepathy-idle telepathy-logger ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig itstool gettext wrapGAppsHook libxml2
+ desktop-file-utils gobject-introspection appstream-glib
+ ];
+
+ buildInputs = [
+ gtk3 glib adwaita-icon-theme gsettings-desktop-schemas
+ telepathy-glib telepathy-logger gjs gspell gdk-pixbuf libsecret libsoup
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Polari;
+ description = "IRC chat client designed to integrate with the GNOME desktop";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix
new file mode 100644
index 00000000000..a1bcb406eb3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, vala, meson, ninja, libpwquality
+, pkgconfig, gtk3, glib, gobject-introspection
+, wrapGAppsHook, itstool, gnupg, libsoup
+, gnome3, gpgme, python3, openldap, gcr
+, libsecret, avahi, p11-kit, openssh, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "seahorse";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0d8zdzmlz7fjv9xl20zl4ckidf465mvdjnbpxy3k08y9iw423q4x";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig vala itstool wrapGAppsHook
+ python3 gobject-introspection
+ ];
+ buildInputs = [
+ gtk3 glib gcr
+ gsettings-desktop-schemas gnupg
+ gnome3.adwaita-icon-theme gpgme
+ libsecret avahi libsoup p11-kit
+ openssh openldap libpwquality
+ ];
+
+ postPatch = ''
+ patchShebangs build-aux/
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Seahorse;
+ description = "Application for managing encryption keys and passwords in the GnomeKeyring";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix b/nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix
new file mode 100644
index 00000000000..c5377157ef0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, gnome3, vte, libxml2, gtk-vnc, intltool
+, libsecret, itstool, wrapGAppsHook, librsvg }:
+
+stdenv.mkDerivation rec {
+ pname = "vinagre";
+ version = "3.22.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/vinagre/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "cd1cdbacca25c8d1debf847455155ee798c3e67a20903df8b228d4ece5505e82";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool itstool wrapGAppsHook ];
+ buildInputs = [
+ gtk3 vte libxml2 gtk-vnc libsecret gnome3.adwaita-icon-theme librsvg
+ ];
+
+ NIX_CFLAGS_COMPILE = "-Wno-format-nonliteral";
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "vinagre";
+ attrPath = "gnome3.vinagre";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Remote desktop viewer for GNOME";
+ homepage = https://wiki.gnome.org/Apps/Vinagre;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
new file mode 100644
index 00000000000..a7f4a637b17
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gnome3
+, iconnamingutils, gtk3, gdk-pixbuf, librsvg, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "adwaita-icon-theme";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/adwaita-icon-theme/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "11ij35na8nisvxx3qh527iz33h6z2q1a7iinqyp7p65v0zjbd3b9";
+ };
+
+ # For convenience, we can specify adwaita-icon-theme only in packages
+ propagatedBuildInputs = [ hicolor-icon-theme ];
+
+ buildInputs = [ gdk-pixbuf librsvg ];
+
+ nativeBuildInputs = [ pkgconfig intltool iconnamingutils gtk3 ];
+
+ # remove a tree of dirs with no files within
+ postInstall = '' rm -rf "$out/locale" '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "adwaita-icon-theme";
+ attrPath = "gnome3.adwaita-icon-theme";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ platforms = with platforms; linux ++ darwin;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix
new file mode 100644
index 00000000000..4734a0e96b8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, gettext, fetchurl, vala, desktop-file-utils
+, meson, ninja, pkgconfig, gtk3, glib, libxml2
+, wrapGAppsHook, itstool, gnome3 }:
+
+let
+ pname = "baobab";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0b33s9bhpiffv5wl76cq2bbnqhvx3qs2vxyxmil5gcs583llqh9r";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig vala gettext itstool libxml2 desktop-file-utils wrapGAppsHook ];
+ buildInputs = [ gtk3 glib gnome3.adwaita-icon-theme ];
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Graphical application to analyse disk usage in any GNOME environment";
+ homepage = https://wiki.gnome.org/Apps/DiskUsageAnalyzer;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix
new file mode 100644
index 00000000000..bad06bae405
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix
@@ -0,0 +1,54 @@
+{ fetchurl, stdenv, pkgconfig, gnome3, glib, gtk3, clutter, dbus, python3, libxml2
+, libxklavier, libXtst, gtk2, intltool, libxslt, at-spi2-core, autoreconfHook
+, wrapGAppsHook, libgee }:
+
+let
+ pname = "caribou";
+ version = "0.4.21";
+ pythonEnv = python3.withPackages ( ps: with ps; [ pygobject3 ] );
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0mfychh1q3dx0b96pjz9a9y112bm9yqyim40yykzxx1hppsdjhww";
+ };
+
+ patches = [
+ # Fix crash in GNOME Flashback
+ # https://bugzilla.gnome.org/show_bug.cgi?id=791001
+ (fetchurl {
+ url = https://bugzilla.gnome.org/attachment.cgi?id=364774;
+ sha256 = "15k1455grf6knlrxqbjnk7sals1730b0whj30451scp46wyvykvd";
+ })
+ ];
+
+ nativeBuildInputs = [ pkgconfig intltool libxslt libxml2 autoreconfHook wrapGAppsHook ];
+
+ buildInputs = [
+ glib gtk3 clutter at-spi2-core dbus pythonEnv python3.pkgs.pygobject3
+ libXtst gtk2
+ ];
+
+ propagatedBuildInputs = [ libgee libxklavier ];
+
+ postPatch = ''
+ patchShebangs .
+ substituteInPlace libcaribou/Makefile.am --replace "--shared-library=libcaribou.so.0" "--shared-library=$out/lib/libcaribou.so.0"
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "An input assistive technology intended for switch and pointer users";
+ homepage = https://wiki.gnome.org/Projects/Caribou;
+ license = licenses.lgpl21;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
new file mode 100644
index 00000000000..7f4f84fa5fe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, meson, ninja, vala, libxslt, pkgconfig, glib, gtk3, gnome3, python3
+, libxml2, gettext, docbook_xsl, hicolor-icon-theme, wrapGAppsHook, gobject-introspection }:
+
+let
+ pname = "dconf-editor";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1fmsmlh16njjm948grz20mzrsvb4wjj7pl1fvkrkxqi7mhr177gi";
+ };
+
+ nativeBuildInputs = [
+ meson ninja vala libxslt pkgconfig wrapGAppsHook
+ gettext docbook_xsl libxml2 gobject-introspection python3
+ hicolor-icon-theme # for setup-hook
+ ];
+
+ buildInputs = [ glib gtk3 gnome3.dconf ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/dconf/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/dconf/default.nix
new file mode 100644
index 00000000000..43f8dd08dbf
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/dconf/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, meson, ninja, python3, vala, libxslt, pkgconfig, glib, bash-completion, dbus, gnome3
+, libxml2, gtk-doc, docbook_xsl, docbook_xml_dtd_42, fetchpatch }:
+
+let
+ pname = "dconf";
+in
+stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+ version = "0.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1azz4hb9z76yxn34yrrsiib3iqz5z4vpwn5q7cncp55w365ygg38";
+ };
+
+ patches = [
+ # Fix the build on Darwin
+ # Issue: https://gitlab.gnome.org/GNOME/dconf/issues/47
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/dconf/commit/49f4d916e1151af3975df52c522c69de98ed2fbb.patch";
+ sha256 = "00klkr1jzli9ap0aj6399m1bj2bxxz48pmcj4r16dsy6dfdl6325";
+ })
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py tests/test-dconf.py
+ patchShebangs meson_post_install.py
+ patchShebangs tests/test-dconf.py
+ '';
+
+ outputs = [ "out" "lib" "dev" "devdoc" ];
+
+ nativeBuildInputs = [ meson ninja vala pkgconfig python3 libxslt libxml2 gtk-doc docbook_xsl docbook_xml_dtd_42 ];
+ buildInputs = [ glib bash-completion dbus ];
+
+ mesonFlags = [
+ "--sysconfdir=/etc"
+ "-Dgtk_doc=true"
+ ];
+
+ doCheck = !stdenv.isAarch32 && !stdenv.isAarch64 && !stdenv.isDarwin;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Projects/dconf;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux ++ platforms.darwin;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix
new file mode 100644
index 00000000000..5e4bbf8cce1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, intltool, fetchurl, webkitgtk, pkgconfig, gtk3, glib
+, file, librsvg, gnome3, gdk-pixbuf, python3
+, telepathy-glib, telepathy-farstream, glibcLocales
+, clutter-gtk, clutter-gst, gst_all_1, cogl, gnome-online-accounts
+, gcr, libsecret, folks, libpulseaudio, telepathy-mission-control
+, telepathy-logger, libnotify, clutter, libsoup, gnutls
+, evolution-data-server, yelp-xsl
+, libcanberra-gtk3, p11-kit, farstream, libtool, shared-mime-info
+, wrapGAppsHook, itstool, libxml2, libxslt, icu, libgee, gsettings-desktop-schemas
+, isocodes, enchant, libchamplain, geoclue2, geocode-glib, cheese, libgudev }:
+
+stdenv.mkDerivation rec {
+ pname = "empathy";
+ version = "3.25.90";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/empathy/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0sn10fcymc6lyrabk7vx8lpvlaxxkqnmcwj9zdkfa8qf3388k4nc";
+ };
+
+ propagatedUserEnvPkgs = [
+ gnome-online-accounts shared-mime-info
+ ];
+ propagatedBuildInputs = [
+ folks telepathy-logger evolution-data-server telepathy-mission-control
+ ];
+ nativeBuildInputs = [
+ pkgconfig libtool intltool itstool file wrapGAppsHook
+ libxml2 libxslt yelp-xsl python3 glibcLocales
+ ];
+ buildInputs = [
+ gtk3 glib webkitgtk icu gnome-online-accounts
+ telepathy-glib clutter-gtk clutter-gst cogl
+ gst_all_1.gstreamer gst_all_1.gst-plugins-base
+ gcr libsecret libpulseaudio gdk-pixbuf
+ libnotify clutter libsoup gnutls libgee p11-kit
+ libcanberra-gtk3 telepathy-farstream farstream
+ gnome3.adwaita-icon-theme gsettings-desktop-schemas
+ librsvg
+ # Spell-checking
+ enchant isocodes
+ # Display maps, location awareness, geocode support
+ libchamplain geoclue2 geocode-glib
+ # Cheese webcam support, camera monitoring
+ cheese libgudev
+ ];
+
+ LC_ALL = "en_US.UTF-8";
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "empathy";
+ versionPolicy = "none";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Empathy;
+ description = "Messaging program which supports text, voice, video chat, and file transfers over many different protocols";
+ maintainers = gnome3.maintainers;
+ license = [ licenses.gpl2 ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix
new file mode 100644
index 00000000000..8bb727a6fc5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, stdenv, meson, ninja, gettext, itstool, pkgconfig, libxml2, libjpeg, libpeas, gnome3
+, gtk3, glib, gsettings-desktop-schemas, adwaita-icon-theme, gnome-desktop, lcms2, gdk-pixbuf, exempi
+, shared-mime-info, wrapGAppsHook, librsvg, libexif, gobject-introspection, python3 }:
+
+let
+ pname = "eog";
+ version = "3.32.2";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1bcxpqgzlk2cy4wfb3b5h66mhpj2fhrk1rrb5qqcv5xrr62ik5xy";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext itstool wrapGAppsHook libxml2 gobject-introspection python3 ];
+
+ buildInputs = [
+ libjpeg gtk3 gdk-pixbuf glib libpeas librsvg lcms2 gnome-desktop libexif exempi
+ gsettings-desktop-schemas shared-mime-info adwaita-icon-theme
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Thumbnailers
+ --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+ --prefix XDG_DATA_DIRS : "${librsvg}/share"
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ )
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME image viewer";
+ homepage = https://wiki.gnome.org/Apps/EyeOfGnome;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix
new file mode 100644
index 00000000000..c52162ce7f1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, meson, ninja, gettext, fetchurl, pkgconfig, gtk3, glib, icu
+, wrapGAppsHook, gnome3, libxml2, libxslt, itstool
+, webkitgtk, libsoup, glib-networking, libsecret, gnome-desktop, libnotify, p11-kit
+, sqlite, gcr, isocodes, desktop-file-utils, python3, nettle
+, gdk-pixbuf, gst_all_1, json-glib, libdazzle, libhandy }:
+
+stdenv.mkDerivation rec {
+ pname = "epiphany";
+ version = "3.32.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/epiphany/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "15d9s295yr6m9pbwh344c4akm7rgn19y4g1xkyn7gbq1hdbjia69";
+ };
+
+ # Tests need an X display
+ mesonFlags = [ "-Dunit_tests=disabled" ];
+
+ nativeBuildInputs = [
+ meson ninja libxslt pkgconfig itstool gettext wrapGAppsHook desktop-file-utils python3
+ ];
+
+ buildInputs = [
+ gtk3 glib webkitgtk libsoup libxml2 libsecret gnome-desktop libnotify
+ sqlite isocodes p11-kit icu libhandy
+ gdk-pixbuf gnome3.adwaita-icon-theme gcr
+ glib-networking gst_all_1.gstreamer gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-ugly
+ gst_all_1.gst-libav json-glib libdazzle nettle
+ ];
+
+ postPatch = ''
+ chmod +x post_install.py # patchShebangs requires executable file
+ patchShebangs post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "epiphany";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Epiphany;
+ description = "WebKit based web browser for GNOME";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix
new file mode 100644
index 00000000000..9313ca8990c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix
@@ -0,0 +1,139 @@
+{ fetchFromGitLab
+, stdenv
+, fetchpatch
+, meson
+, ninja
+, pkgconfig
+, gettext
+, libxml2
+, appstream
+, glib
+, gtk3
+, pango
+, atk
+, gdk-pixbuf
+, shared-mime-info
+, itstool
+, gnome3
+, poppler
+, ghostscriptX
+, djvulibre
+, libspectre
+, libarchive
+, libsecret
+, wrapGAppsHook
+, librsvg
+, gobject-introspection
+, yelp-tools
+, gspell
+, adwaita-icon-theme
+, gsettings-desktop-schemas
+, gnome-desktop
+, dbus
+, python3
+, texlive
+, t1lib
+, gst_all_1
+, supportMultimedia ? true # PDF multimedia
+, libgxps
+, supportXPS ? true # Open XML Paper Specification via libgxps
+}:
+
+stdenv.mkDerivation rec {
+ pname = "evince";
+ version = "3.32.0";
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "GNOME";
+ repo = pname;
+ rev = version;
+ sha256 = "1klq8j70q8r8hyqv1wi6jcx8g76yh46bh8614y82zzggn4cx6y3r";
+ };
+
+
+ patches = [
+ (fetchpatch {
+ name = "CVE-2019-11459.patch";
+ url = "https://gitlab.gnome.org/GNOME/evince/commit/3e38d5ad724a042eebadcba8c2d57b0f48b7a8c7.patch";
+ sha256 = "1ds6iwr2r9i86nwrly8cx7p1kbvf1gljjplcffa67znxqmwx4n74";
+ })
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ gobject-introspection
+ gettext
+ itstool
+ yelp-tools
+ appstream
+ wrapGAppsHook
+ python3
+ ];
+
+ buildInputs = [
+ glib
+ gtk3
+ pango
+ atk
+ gdk-pixbuf
+ libxml2
+ gsettings-desktop-schemas
+ poppler
+ ghostscriptX
+ djvulibre
+ libspectre
+ libarchive
+ libsecret
+ librsvg
+ adwaita-icon-theme
+ gspell
+ gnome-desktop
+ dbus # only needed to find the service directory
+ texlive.bin.core # kpathsea for DVI support
+ t1lib
+ ] ++ stdenv.lib.optional supportXPS libgxps
+ ++ stdenv.lib.optionals supportMultimedia (with gst_all_1; [
+ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav ]);
+
+ mesonFlags = [
+ "-Dnautilus=false"
+ "-Dps=enabled"
+ "-Dgtk_doc=false"
+ ];
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ preFixup = ''
+ gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share")
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Evince;
+ description = "GNOME's document viewer";
+
+ longDescription = ''
+ Evince is a document viewer for multiple document formats. It
+ currently supports PDF, PostScript, DjVu, TIFF and DVI. The goal
+ of Evince is to replace the multiple document viewers that exist
+ on the GNOME Desktop with a single simple application.
+ '';
+
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers ++ [ maintainers.vcunat ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
new file mode 100644
index 00000000000..0048b02581a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
@@ -0,0 +1,64 @@
+{ fetchurl, stdenv, substituteAll, pkgconfig, gnome3, python3, gobject-introspection
+, intltool, libsoup, libxml2, libsecret, icu, sqlite, tzdata, libcanberra-gtk3, gcr
+, p11-kit, db, nspr, nss, libical, gperf, wrapGAppsHook, glib-networking, pcre
+, vala, cmake, ninja, kerberos, openldap, webkitgtk, libaccounts-glib, json-glib
+, glib, gtk3, gnome-online-accounts, libgweather, libgdata, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "evolution-data-server";
+ version = "3.32.4";
+
+ outputs = [ "out" "dev" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/evolution-data-server/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0zsc9xwy6ixk3x0dx69ax5isrdw8qxjdxg2i5fr95s40nss7rxl3";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit tzdata;
+ })
+ ];
+
+ prePatch = ''
+ substitute ${./hardcode-gsettings.patch} hardcode-gsettings.patch --subst-var-by ESD_GSETTINGS_PATH ${glib.makeSchemaPath "$out" "${pname}-${version}"} \
+ --subst-var-by GDS_GSETTINGS_PATH ${glib.getSchemaPath gsettings-desktop-schemas}
+ patches="$patches $PWD/hardcode-gsettings.patch"
+ '';
+
+ nativeBuildInputs = [
+ cmake ninja pkgconfig intltool python3 gperf wrapGAppsHook gobject-introspection vala
+ ];
+ buildInputs = [
+ glib libsoup libxml2 gtk3 gnome-online-accounts
+ gcr p11-kit libgweather libgdata libaccounts-glib json-glib
+ icu sqlite kerberos openldap webkitgtk glib-networking
+ libcanberra-gtk3 pcre
+ ];
+
+ propagatedBuildInputs = [ libsecret nss nspr libical db libsoup ];
+
+ cmakeFlags = [
+ "-DENABLE_UOA=OFF"
+ "-DENABLE_VALA_BINDINGS=ON"
+ "-DENABLE_INTROSPECTION=ON"
+ "-DCMAKE_SKIP_BUILD_RPATH=OFF"
+ "-DINCLUDE_INSTALL_DIR=${placeholder "dev"}/include"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "evolution-data-server";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Unified backend for programs that work with contacts, tasks, and calendar information";
+ homepage = https://wiki.gnome.org/Apps/Evolution;
+ license = licenses.lgpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch
new file mode 100644
index 00000000000..33423551659
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/calendar/libecal/e-cal-system-timezone.c
++++ b/src/calendar/libecal/e-cal-system-timezone.c
+@@ -26,7 +26,7 @@
+ #ifdef HAVE_SOLARIS
+ #define SYSTEM_ZONEINFODIR "/usr/share/lib/zoneinfo/tab"
+ #else
+-#define SYSTEM_ZONEINFODIR "/usr/share/zoneinfo"
++#define SYSTEM_ZONEINFODIR "@tzdata@/share/zoneinfo"
+ #endif
+
+ #define ETC_TIMEZONE "/etc/timezone"
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch b/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch
new file mode 100644
index 00000000000..c499bac4552
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch
@@ -0,0 +1,526 @@
+diff --git a/src/addressbook/libebook/e-book-client.c b/src/addressbook/libebook/e-book-client.c
+index 2c0557c3c..5955aa55e 100644
+--- a/src/addressbook/libebook/e-book-client.c
++++ b/src/addressbook/libebook/e-book-client.c
+@@ -1989,7 +1989,20 @@ e_book_client_get_self (ESourceRegistry *registry,
+
+ *out_client = book_client;
+
+- settings = g_settings_new (SELF_UID_PATH_ID);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ SELF_UID_PATH_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ uid = g_settings_get_string (settings, SELF_UID_KEY);
+ g_object_unref (settings);
+
+@@ -2057,7 +2070,20 @@ e_book_client_set_self (EBookClient *client,
+ g_return_val_if_fail (
+ e_contact_get_const (contact, E_CONTACT_UID) != NULL, FALSE);
+
+- settings = g_settings_new (SELF_UID_PATH_ID);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ SELF_UID_PATH_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ g_settings_set_string (
+ settings, SELF_UID_KEY,
+ e_contact_get_const (contact, E_CONTACT_UID));
+@@ -2093,8 +2119,20 @@ e_book_client_is_self (EContact *contact)
+ * unfortunately the API doesn't allow that.
+ */
+ g_mutex_lock (&mutex);
+- if (!settings)
+- settings = g_settings_new (SELF_UID_PATH_ID);
++ if (!settings) {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ SELF_UID_PATH_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ uid = g_settings_get_string (settings, SELF_UID_KEY);
+ g_mutex_unlock (&mutex);
+
+diff --git a/src/addressbook/libebook/e-book.c b/src/addressbook/libebook/e-book.c
+index 3396b57c0..ac6420b2e 100644
+--- a/src/addressbook/libebook/e-book.c
++++ b/src/addressbook/libebook/e-book.c
+@@ -2594,7 +2594,20 @@ e_book_get_self (ESourceRegistry *registry,
+ return FALSE;
+ }
+
+- settings = g_settings_new (SELF_UID_PATH_ID);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ SELF_UID_PATH_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ uid = g_settings_get_string (settings, SELF_UID_KEY);
+ g_object_unref (settings);
+
+@@ -2649,7 +2662,20 @@ e_book_set_self (EBook *book,
+ g_return_val_if_fail (E_IS_BOOK (book), FALSE);
+ g_return_val_if_fail (E_IS_CONTACT (contact), FALSE);
+
+- settings = g_settings_new (SELF_UID_PATH_ID);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ SELF_UID_PATH_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ g_settings_set_string (
+ settings, SELF_UID_KEY,
+ e_contact_get_const (contact, E_CONTACT_UID));
+@@ -2677,7 +2703,20 @@ e_book_is_self (EContact *contact)
+
+ g_return_val_if_fail (E_IS_CONTACT (contact), FALSE);
+
+- settings = g_settings_new (SELF_UID_PATH_ID);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ SELF_UID_PATH_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ uid = g_settings_get_string (settings, SELF_UID_KEY);
+ g_object_unref (settings);
+
+diff --git a/src/calendar/backends/contacts/e-cal-backend-contacts.c b/src/calendar/backends/contacts/e-cal-backend-contacts.c
+index de1716941..e83b104f1 100644
+--- a/src/calendar/backends/contacts/e-cal-backend-contacts.c
++++ b/src/calendar/backends/contacts/e-cal-backend-contacts.c
+@@ -1397,7 +1397,20 @@ e_cal_backend_contacts_init (ECalBackendContacts *cbc)
+ (GDestroyNotify) g_free,
+ (GDestroyNotify) contact_record_free);
+
+- cbc->priv->settings = g_settings_new ("org.gnome.evolution-data-server.calendar");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server.calendar",
++ FALSE);
++ cbc->priv->settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ cbc->priv->notifyid = 0;
+ cbc->priv->update_alarms_id = 0;
+ cbc->priv->alarm_enabled = FALSE;
+diff --git a/src/calendar/libecal/e-reminder-watcher.c b/src/calendar/libecal/e-reminder-watcher.c
+index b08a7f301..a49fe39c5 100644
+--- a/src/calendar/libecal/e-reminder-watcher.c
++++ b/src/calendar/libecal/e-reminder-watcher.c
+@@ -2202,7 +2202,21 @@ e_reminder_watcher_init (EReminderWatcher *watcher)
+
+ watcher->priv = G_TYPE_INSTANCE_GET_PRIVATE (watcher, E_TYPE_REMINDER_WATCHER, EReminderWatcherPrivate);
+ watcher->priv->cancellable = g_cancellable_new ();
+- watcher->priv->settings = g_settings_new ("org.gnome.evolution-data-server.calendar");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server.calendar",
++ FALSE);
++ watcher->priv->settings = g_settings_new_full(schema, NULL,
++ NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ watcher->priv->scheduled = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, e_reminder_watcher_free_rd_slist);
+ watcher->priv->default_zone = icaltimezone_copy (zone);
+ watcher->priv->timers_enabled = TRUE;
+diff --git a/src/camel/camel-cipher-context.c b/src/camel/camel-cipher-context.c
+index dcdc3eed0..fd2e428c2 100644
+--- a/src/camel/camel-cipher-context.c
++++ b/src/camel/camel-cipher-context.c
+@@ -1635,7 +1635,20 @@ camel_cipher_can_load_photos (void)
+ GSettings *settings;
+ gboolean load_photos;
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ load_photos = g_settings_get_boolean (settings, "camel-cipher-load-photos");
+ g_clear_object (&settings);
+
+diff --git a/src/camel/camel-gpg-context.c b/src/camel/camel-gpg-context.c
+index 1b3362886..f0811b292 100644
+--- a/src/camel/camel-gpg-context.c
++++ b/src/camel/camel-gpg-context.c
+@@ -573,7 +573,20 @@ gpg_ctx_get_executable_name (void)
+ GSettings *settings;
+ gchar *path;
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ path = g_settings_get_string (settings, "camel-gpg-binary");
+ g_clear_object (&settings);
+
+diff --git a/src/libedataserver/e-network-monitor.c b/src/libedataserver/e-network-monitor.c
+index e0d8b87d6..3a4d5a359 100644
+--- a/src/libedataserver/e-network-monitor.c
++++ b/src/libedataserver/e-network-monitor.c
+@@ -255,7 +255,20 @@ e_network_monitor_constructed (GObject *object)
+ /* Chain up to parent's method. */
+ G_OBJECT_CLASS (e_network_monitor_parent_class)->constructed (object);
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ g_settings_bind (
+ settings, "network-monitor-gio-name",
+ object, "gio-name",
+diff --git a/src/libedataserver/e-oauth2-service-google.c b/src/libedataserver/e-oauth2-service-google.c
+index f0c6f2cbf..0053e3ce6 100644
+--- a/src/libedataserver/e-oauth2-service-google.c
++++ b/src/libedataserver/e-oauth2-service-google.c
+@@ -69,7 +69,20 @@ eos_google_read_settings (EOAuth2Service *service,
+ if (!value) {
+ GSettings *settings;
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ value = g_settings_get_string (settings, key_name);
+ g_object_unref (settings);
+
+diff --git a/src/libedataserver/e-oauth2-service-outlook.c b/src/libedataserver/e-oauth2-service-outlook.c
+index 687c10d3b..684583c35 100644
+--- a/src/libedataserver/e-oauth2-service-outlook.c
++++ b/src/libedataserver/e-oauth2-service-outlook.c
+@@ -70,7 +70,20 @@ eos_outlook_read_settings (EOAuth2Service *service,
+ if (!value) {
+ GSettings *settings;
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ value = g_settings_get_string (settings, key_name);
+ g_object_unref (settings);
+
+diff --git a/src/libedataserver/e-oauth2-service.c b/src/libedataserver/e-oauth2-service.c
+index 682673c16..436f52d5f 100644
+--- a/src/libedataserver/e-oauth2-service.c
++++ b/src/libedataserver/e-oauth2-service.c
+@@ -95,7 +95,20 @@ eos_default_guess_can_process (EOAuth2Service *service,
+ name_len = strlen (name);
+ hostname_len = strlen (hostname);
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ values = g_settings_get_strv (settings, "oauth2-services-hint");
+ g_object_unref (settings);
+
+diff --git a/src/libedataserver/e-proxy.c b/src/libedataserver/e-proxy.c
+index 883379a60..989353494 100644
+--- a/src/libedataserver/e-proxy.c
++++ b/src/libedataserver/e-proxy.c
+@@ -969,8 +969,37 @@ e_proxy_init (EProxy *proxy)
+
+ proxy->priv->type = PROXY_TYPE_SYSTEM;
+
+- proxy->priv->evolution_proxy_settings = g_settings_new ("org.gnome.evolution.shell.network-config");
+- proxy->priv->proxy_settings = g_settings_new ("org.gnome.system.proxy");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution.shell.network-config",
++ FALSE);
++ proxy->priv->evolution_proxy_settings = g_settings_new_full(schema,
++ NULL,
++ NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@GDS_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.system.proxy",
++ FALSE);
++ proxy->priv->proxy_settings = g_settings_new_full(schema,
++ NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ proxy->priv->proxy_http_settings = g_settings_get_child (proxy->priv->proxy_settings, "http");
+ proxy->priv->proxy_https_settings = g_settings_get_child (proxy->priv->proxy_settings, "https");
+ proxy->priv->proxy_socks_settings = g_settings_get_child (proxy->priv->proxy_settings, "socks");
+diff --git a/src/libedataserver/e-source-registry.c b/src/libedataserver/e-source-registry.c
+index a5a30a3e1..5fbdf8190 100644
+--- a/src/libedataserver/e-source-registry.c
++++ b/src/libedataserver/e-source-registry.c
+@@ -1749,7 +1749,21 @@ e_source_registry_init (ESourceRegistry *registry)
+
+ g_mutex_init (&registry->priv->sources_lock);
+
+- registry->priv->settings = g_settings_new (GSETTINGS_SCHEMA);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ GSETTINGS_SCHEMA,
++ FALSE);
++ registry->priv->settings = g_settings_new_full(schema, NULL,
++ NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+
+ g_signal_connect (
+ registry->priv->settings, "changed",
+diff --git a/src/libedataserverui/e-reminders-widget.c b/src/libedataserverui/e-reminders-widget.c
+index f89cd4a5c..06cca9b5f 100644
+--- a/src/libedataserverui/e-reminders-widget.c
++++ b/src/libedataserverui/e-reminders-widget.c
+@@ -1642,7 +1642,21 @@ static void
+ e_reminders_widget_init (ERemindersWidget *reminders)
+ {
+ reminders->priv = G_TYPE_INSTANCE_GET_PRIVATE (reminders, E_TYPE_REMINDERS_WIDGET, ERemindersWidgetPrivate);
+- reminders->priv->settings = g_settings_new ("org.gnome.evolution-data-server.calendar");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server.calendar",
++ FALSE);
++ reminders->priv->settings = g_settings_new_full(schema, NULL,
++ NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+ reminders->priv->cancellable = g_cancellable_new ();
+ reminders->priv->is_empty = TRUE;
+ reminders->priv->is_mapped = FALSE;
+diff --git a/src/services/evolution-source-registry/evolution-source-registry-autoconfig.c b/src/services/evolution-source-registry/evolution-source-registry-autoconfig.c
+index 6f03053d6..dffc186c7 100644
+--- a/src/services/evolution-source-registry/evolution-source-registry-autoconfig.c
++++ b/src/services/evolution-source-registry/evolution-source-registry-autoconfig.c
+@@ -706,7 +706,20 @@ evolution_source_registry_merge_autoconfig_sources (ESourceRegistryServer *serve
+ gchar *autoconfig_directory;
+ gint ii;
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+
+ autoconfig_sources = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, e_autoconfig_free_merge_source_data);
+
+diff --git a/src/services/evolution-source-registry/evolution-source-registry-migrate-proxies.c b/src/services/evolution-source-registry/evolution-source-registry-migrate-proxies.c
+index d531cb9e2..c5b1c761c 100644
+--- a/src/services/evolution-source-registry/evolution-source-registry-migrate-proxies.c
++++ b/src/services/evolution-source-registry/evolution-source-registry-migrate-proxies.c
+@@ -61,7 +61,20 @@ evolution_source_registry_migrate_proxies (ESourceRegistryServer *server)
+ extension_name = E_SOURCE_EXTENSION_PROXY;
+ extension = e_source_get_extension (source, extension_name);
+
+- settings = g_settings_new (NETWORK_CONFIG_SCHEMA_ID);
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ NETWORK_CONFIG_SCHEMA_ID,
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+
+ switch (g_settings_get_int (settings, "proxy-type")) {
+ case 1:
+diff --git a/src/services/evolution-source-registry/evolution-source-registry.c b/src/services/evolution-source-registry/evolution-source-registry.c
+index 1c0a11382..3e144845e 100644
+--- a/src/services/evolution-source-registry/evolution-source-registry.c
++++ b/src/services/evolution-source-registry/evolution-source-registry.c
+@@ -181,7 +181,20 @@ main (gint argc,
+
+ reload:
+
+- settings = g_settings_new ("org.gnome.evolution-data-server");
++ {
++ GSettingsSchemaSource *schema_source;
++ GSettingsSchema *schema;
++ schema_source = g_settings_schema_source_new_from_directory("@ESD_GSETTINGS_PATH@",
++ g_settings_schema_source_get_default(),
++ TRUE,
++ NULL);
++ schema = g_settings_schema_source_lookup(schema_source,
++ "org.gnome.evolution-data-server",
++ FALSE);
++ settings = g_settings_new_full(schema, NULL, NULL);
++ g_settings_schema_source_unref(schema_source);
++ g_settings_schema_unref(schema);
++ }
+
+ if (!opt_disable_migration && !g_settings_get_boolean (settings, "migrated")) {
+ g_settings_set_boolean (settings, "migrated", TRUE);
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix
new file mode 100644
index 00000000000..a4d2fd2be5a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, fetchurl, substituteAll, pkgconfig, glib, itstool, libxml2, xorg
+, accountsservice, libX11, gnome3, systemd, autoreconfHook
+, gtk3, libcanberra-gtk3, pam, libtool, gobject-introspection, plymouth
+, librsvg, coreutils, xwayland }:
+
+stdenv.mkDerivation rec {
+ pname = "gdm";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gdm/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "12ypdz9i24hwbl1d1wnnxb8zlvfa4f49n9ac5cl9d6h8qp4b0gb4";
+ };
+
+ # Only needed to make it build
+ preConfigure = ''
+ substituteInPlace ./configure --replace "/usr/bin/X" "${xorg.xorgserver.out}/bin/X"
+ '';
+
+ configureFlags = [
+ "--sysconfdir=/etc"
+ "--localstatedir=/var"
+ "--with-plymouth=yes"
+ "--enable-gdm-xsession"
+ "--with-initial-vt=7"
+ "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+ "--with-udevdir=$(out)/lib/udev"
+ ];
+
+ nativeBuildInputs = [ pkgconfig libxml2 itstool autoreconfHook libtool gnome3.dconf ];
+ buildInputs = [
+ glib accountsservice systemd
+ gobject-introspection libX11 gtk3
+ libcanberra-gtk3 pam plymouth librsvg
+ ];
+
+ enableParallelBuilding = true;
+
+ patches = [
+ # Change hardcoded paths to nix store paths.
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit coreutils plymouth xwayland;
+ })
+
+ # The following patches implement certain environment variables in GDM which are set by
+ # the gdm configuration module (nixos/modules/services/x11/display-managers/gdm.nix).
+
+ ./gdm-x-session_extra_args.patch
+
+ # Allow specifying a wrapper for running the session command.
+ ./gdm-x-session_session-wrapper.patch
+
+ # Forwards certain environment variables to the gdm-x-session child process
+ # to ensure that the above two patches actually work.
+ ./gdm-session-worker_forward-vars.patch
+
+ # Set up the environment properly when launching sessions
+ # https://github.com/NixOS/nixpkgs/issues/48255
+ ./reset-environment.patch
+ ];
+
+ installFlags = [
+ "sysconfdir=$(out)/etc"
+ "dbusconfdir=$(out)/etc/dbus-1/system.d"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gdm";
+ attrPath = "gnome3.gdm";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "A program that manages graphical display servers and handles graphical user logins";
+ homepage = https://wiki.gnome.org/Projects/GDM;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch
new file mode 100644
index 00000000000..6b5bd6152bd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch
@@ -0,0 +1,60 @@
+--- a/daemon/gdm-local-display-factory.c
++++ b/daemon/gdm-local-display-factory.c
+@@ -201,7 +201,7 @@
+ #ifdef ENABLE_WAYLAND_SUPPORT
+ gboolean wayland_enabled = FALSE;
+ if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) {
+- if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) )
++ if (wayland_enabled && g_file_test ("@xwayland@/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) )
+ return TRUE;
+ }
+ #endif
+--- a/daemon/gdm-manager.c
++++ b/daemon/gdm-manager.c
+@@ -145,7 +145,7 @@
+ GError *error;
+
+ error = NULL;
+- res = g_spawn_command_line_sync ("/bin/plymouth --ping",
++ res = g_spawn_command_line_sync ("@plymouth@/bin/plymouth --ping",
+ NULL, NULL, &status, &error);
+ if (! res) {
+ g_debug ("Could not ping plymouth: %s", error->message);
+@@ -163,7 +163,7 @@
+ GError *error;
+
+ error = NULL;
+- res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
++ res = g_spawn_command_line_sync ("@plymouth@/bin/plymouth deactivate",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not deactivate plymouth: %s", error->message);
+@@ -178,7 +178,7 @@
+ GError *error;
+
+ error = NULL;
+- res = g_spawn_command_line_async ("/bin/plymouth quit --retain-splash", &error);
++ res = g_spawn_command_line_async ("@plymouth@/bin/plymouth quit --retain-splash", &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+@@ -194,7 +194,7 @@
+ GError *error;
+
+ error = NULL;
+- res = g_spawn_command_line_async ("/bin/plymouth quit", &error);
++ res = g_spawn_command_line_async ("@plymouth@/bin/plymouth quit", &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+--- a/data/gdm.service.in
++++ b/data/gdm.service.in
+@@ -28,7 +28,7 @@ BusName=org.gnome.DisplayManager
+ StandardOutput=syslog
+ StandardError=inherit
+ EnvironmentFile=-@LANG_CONFIG_FILE@
+-ExecReload=/bin/kill -SIGHUP $MAINPID
++ExecReload=@coreutils@/bin/kill -SIGHUP $MAINPID
+ KeyringMode=shared
+
+ [Install]
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch
new file mode 100644
index 00000000000..401b6aea0c2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch
@@ -0,0 +1,31 @@
+diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
+index 9ef4c5b..94da834 100644
+--- a/daemon/gdm-session-worker.c
++++ b/daemon/gdm-session-worker.c
+@@ -1515,6 +1515,16 @@ gdm_session_worker_load_env_d (GdmSessionWorker *worker)
+ g_object_unref (dir);
+ }
+
++static void
++gdm_session_worker_forward_var (GdmSessionWorker *worker, char const *var)
++{
++ char const *value = g_getenv(var);
++ if (value != NULL) {
++ g_debug ("forwarding %s= %s", var, value);
++ gdm_session_worker_set_environment_variable(worker, var, value);
++ }
++}
++
+ static gboolean
+ gdm_session_worker_accredit_user (GdmSessionWorker *worker,
+ GError **error)
+@@ -1559,6 +1569,9 @@ gdm_session_worker_accredit_user (GdmSessionWorker *worker,
+ goto out;
+ }
+
++ gdm_session_worker_forward_var(worker, "GDM_X_SERVER_EXTRA_ARGS");
++ gdm_session_worker_forward_var(worker, "GDM_X_SESSION_WRAPPER");
++
+ gdm_session_worker_update_environment_from_passwd_info (worker,
+ uid,
+ gid,
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch
new file mode 100644
index 00000000000..66071aa4af8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch
@@ -0,0 +1,38 @@
+diff --git a/daemon/gdm-x-session.c.orig b/daemon/gdm-x-session.c
+index d835b34..1f4b7f1 100644
+--- a/daemon/gdm-x-session.c.orig
++++ b/daemon/gdm-x-session.c
+@@ -211,6 +211,7 @@ spawn_x_server (State *state,
+ char *vt_string = NULL;
+ char *display_number;
+ gsize display_number_size;
++ gchar **xserver_extra_args = NULL;
+
+ auth_file = prepare_auth_file ();
+
+@@ -285,6 +286,17 @@ spawn_x_server (State *state,
+ if (state->debug_enabled) {
+ g_ptr_array_add (arguments, "-core");
+ }
++
++ if (g_getenv ("GDM_X_SERVER_EXTRA_ARGS") != NULL) {
++ g_debug ("using GDM_X_SERVER_EXTRA_ARGS: %s", g_getenv("GDM_X_SERVER_EXTRA_ARGS"));
++ xserver_extra_args = g_strsplit(g_getenv("GDM_X_SERVER_EXTRA_ARGS"), " ", -1);
++ for (gchar **extra_arg = xserver_extra_args; *extra_arg; extra_arg++) {
++ if (strlen(*extra_arg) < 1) continue;
++ g_debug ("adding: %s", *extra_arg);
++ g_ptr_array_add (arguments, *extra_arg);
++ }
++ }
++
+ g_ptr_array_add (arguments, NULL);
+
+ subprocess = g_subprocess_launcher_spawnv (launcher,
+@@ -332,6 +344,7 @@ spawn_x_server (State *state,
+
+ is_running = TRUE;
+ out:
++ g_strfreev(xserver_extra_args);
+ g_clear_pointer (&auth_file, g_free);
+ g_clear_object (&data_stream);
+ g_clear_object (&subprocess);
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch
new file mode 100644
index 00000000000..58481f0730f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch
@@ -0,0 +1,40 @@
+diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c
+index 88fe96f..b1b140a 100644
+--- a/daemon/gdm-x-session.c
++++ b/daemon/gdm-x-session.c
+@@ -664,18 +664,34 @@ spawn_session (State *state,
+ state->session_command,
+ NULL);
+ } else {
++ char const *session_wrapper;
++ char *eff_session_command;
+ int ret;
+ char **argv;
+
+- ret = g_shell_parse_argv (state->session_command,
++ session_wrapper = g_getenv("GDM_X_SESSION_WRAPPER");
++ if (session_wrapper != NULL) {
++ char *quoted_wrapper = g_shell_quote(session_wrapper);
++ eff_session_command = g_strjoin(" ", quoted_wrapper, state->session_command, NULL);
++ g_free(quoted_wrapper);
++ } else {
++ eff_session_command = state->session_command;
++ }
++
++ ret = g_shell_parse_argv (eff_session_command,
+ NULL,
+ &argv,
+ &error);
+
++ if (session_wrapper != NULL) {
++ g_free(eff_session_command);
++ }
++
+ if (!ret) {
+ g_debug ("could not parse session arguments: %s", error->message);
+ goto out;
+ }
++
+ subprocess = g_subprocess_launcher_spawnv (launcher,
+ (const char * const *) argv,
+ &error);
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch
new file mode 100644
index 00000000000..61defd9c4bc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch
@@ -0,0 +1,20 @@
+--- a/daemon/gdm-wayland-session.c
++++ b/daemon/gdm-wayland-session.c
+@@ -285,6 +285,7 @@ spawn_session (State *state,
+ "WAYLAND_DISPLAY",
+ "WAYLAND_SOCKET",
+ "GNOME_SHELL_SESSION_MODE",
++ "__NIXOS_SET_ENVIRONMENT_DONE",
+ NULL };
+
+ g_debug ("Running wayland session");
+--- a/daemon/gdm-x-session.c
++++ b/daemon/gdm-x-session.c
+@@ -610,6 +610,7 @@ spawn_session (State *state,
+ "WAYLAND_DISPLAY",
+ "WAYLAND_SOCKET",
+ "GNOME_SHELL_SESSION_MODE",
++ "__NIXOS_SET_ENVIRONMENT_DONE",
+ NULL };
+
+ g_debug ("Running X session");
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gjs/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gjs/default.nix
new file mode 100644
index 00000000000..303377b8631
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gjs/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, stdenv, pkgconfig, gnome3, gtk3, atk, gobject-introspection
+, spidermonkey_60, pango, readline, glib, libxml2, dbus, gdk-pixbuf
+, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ pname = "gjs";
+ version = "1.56.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gjs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1b5321krn89p3f7s2ik6gpfnc61apzljhlnbqky8c88f7n6832ac";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gjs"; attrPath = "gnome3.gjs"; };
+ };
+
+ outputs = [ "out" "installedTests" ];
+
+ nativeBuildInputs = [ pkgconfig makeWrapper ];
+ buildInputs = [ libxml2 gobject-introspection gtk3 glib pango readline dbus ];
+
+ propagatedBuildInputs = [ spidermonkey_60 ];
+
+ configureFlags = [
+ "--enable-installed-tests"
+ ];
+
+ postPatch = ''
+ for f in installed-tests/*.test.in; do
+ substituteInPlace "$f" --subst-var-by pkglibexecdir "$installedTests/libexec/gjs"
+ done
+ '';
+
+ postInstall = ''
+ sed 's|-lreadline|-L${readline.out}/lib -lreadline|g' -i $out/lib/libgjs.la
+
+ moveToOutput "share/installed-tests" "$installedTests"
+ moveToOutput "libexec/gjs/installed-tests" "$installedTests"
+
+ wrapProgram "$installedTests/libexec/gjs/installed-tests/minijasmine" \
+ --prefix GI_TYPELIB_PATH : "${stdenv.lib.makeSearchPath "lib/girepository-1.0" [ gtk3 atk pango.out gdk-pixbuf ]}:$installedTests/libexec/gjs/installed-tests"
+ '';
+
+ meta = with stdenv.lib; {
+ description = "JavaScript bindings for GNOME";
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ license = licenses.lgpl2Plus;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
new file mode 100644
index 00000000000..e4c772cb1d4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gnome3, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-backgrounds";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-backgrounds/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1s5krdmd3md44p1fgr2lqm5ifxb8s1vzx6hm11sb4cgzr4dw6lrz";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-backgrounds"; attrPath = "gnome3.gnome-backgrounds"; };
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext ];
+
+ meta = with stdenv.lib; {
+ platforms = platforms.unix;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
new file mode 100644
index 00000000000..817c8324c6b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, gnome3, meson, ninja, pkgconfig, gtk3, intltool, glib
+, udev, itstool, libxml2, wrapGAppsHook, libnotify, libcanberra-gtk3, gobject-introspection
+, gtk-doc, docbook_xsl, docbook_xml_dtd_43, python3, gsettings-desktop-schemas }:
+
+let
+ pname = "gnome-bluetooth";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+ version = "3.32.1";
+
+ # TODO: split out "lib"
+ outputs = [ "out" "dev" "devdoc" "man" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1am1gf0nzwg6x1s8ly13j0xnjzgrfj06j0dp52x4zy9s67ywlhb4";
+ };
+
+ nativeBuildInputs = [
+ meson ninja intltool itstool pkgconfig libxml2 wrapGAppsHook gobject-introspection
+ gtk-doc docbook_xsl docbook_xml_dtd_43 python3
+ ];
+ buildInputs = [
+ glib gtk3 udev libnotify libcanberra-gtk3
+ gnome3.adwaita-icon-theme gsettings-desktop-schemas
+ ];
+
+ mesonFlags = [
+ "-Dicon_update=false"
+ "-Dgtk_doc=true"
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://help.gnome.org/users/gnome-bluetooth/stable/index.html.en;
+ description = "Application that let you manage Bluetooth in the GNOME destkop";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
new file mode 100644
index 00000000000..df43371a497
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, meson, ninja, vala, gettext, itstool, fetchurl, pkgconfig, libxml2
+, gtk3, glib, gtksourceview4, wrapGAppsHook, gobject-introspection, python3
+, gnome3, mpfr, gmp, libsoup, libmpc, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-calculator";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-calculator/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0fgpn3sc226s9fpzhik5rkkrf669037gc659ga2kn9jsyckj6p41";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig vala gettext itstool wrapGAppsHook python3
+ gobject-introspection # for finding vapi files
+ ];
+
+ buildInputs = [
+ gtk3 glib libxml2 gtksourceview4 mpfr gmp
+ gnome3.adwaita-icon-theme
+ gsettings-desktop-schemas libsoup libmpc
+ ];
+
+ doCheck = true;
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-calculator";
+ attrPath = "gnome3.gnome-calculator";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Calculator;
+ description = "Application that solves mathematical equations and is suitable as a default application in a Desktop environment";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix
new file mode 100644
index 00000000000..bcc8871bcf1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gettext, itstool, desktop-file-utils, gnome3, glib, gtk3, libexif, libtiff, colord, colord-gtk, libcanberra-gtk3, lcms2, vte, exiv2, hicolor-icon-theme }:
+
+let
+ pname = "gnome-color-manager";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1vpxa2zjz3lkq9ldjg0fl65db9s6b4kcs8nyaqfz3jygma7ifg3w";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool desktop-file-utils
+ # setup-hook
+ hicolor-icon-theme
+ ];
+
+ buildInputs = [ glib gtk3 libexif libtiff colord colord-gtk libcanberra-gtk3 lcms2 vte exiv2 ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "A set of graphical utilities for color management to be used in the GNOME desktop";
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix
new file mode 100644
index 00000000000..f2eb65e50bb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, which, gnome3, autoconf, automake }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-common";
+ version = "3.18.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-common/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "22569e370ae755e04527b76328befc4c73b62bfd4a572499fde116b8318af8cf";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-common"; attrPath = "gnome3.gnome-common"; };
+ };
+
+ patches = [(fetchurl {
+ name = "gnome-common-patch";
+ url = "https://bug697543.bugzilla-attachments.gnome.org/attachment.cgi?id=240935";
+ sha256 = "17abp7czfzirjm7qsn2czd03hdv9kbyhk3lkjxg2xsf5fky7z7jl";
+ })];
+
+ propagatedBuildInputs = [ which autoconf automake ]; # autogen.sh which is using gnome-common tends to require which
+
+ meta = with stdenv.lib; {
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
new file mode 100644
index 00000000000..75a15a41f97
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
@@ -0,0 +1,74 @@
+{ stdenv, gettext, fetchurl, evolution-data-server, fetchpatch
+, pkgconfig, libxslt, docbook_xsl, docbook_xml_dtd_42, python3, gtk3, glib, cheese
+, libchamplain, clutter-gtk, geocode-glib, gnome-desktop, gnome-online-accounts
+, wrapGAppsHook, folks, libxml2, gnome3, telepathy-glib
+, vala, meson, ninja, libhandy, gsettings-desktop-schemas }:
+
+let
+ version = "3.32.1";
+in stdenv.mkDerivation rec {
+ pname = "gnome-contacts";
+ inherit version;
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-contacts/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "17g1gh8yj58cfpdx69h2szivlbjgvv982kmhnkkh0i5bwj0zs2yy";
+ };
+
+ propagatedUserEnvPkgs = [ evolution-data-server ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig vala gettext libxslt docbook_xsl docbook_xml_dtd_42 python3 wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3 glib evolution-data-server gsettings-desktop-schemas
+ folks gnome-desktop telepathy-glib libhandy
+ libxml2 gnome-online-accounts cheese
+ gnome3.adwaita-icon-theme libchamplain clutter-gtk geocode-glib
+ ];
+
+ mesonFlags = [
+ "-Dtelepathy=true"
+ ];
+
+ patches = [
+ # Fixes build with libhandy >= 0.0.10
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-contacts/commit/c5eee38cd2556403a640a0a4c11d36cbf9a5a798.patch";
+ sha256 = "0s2cl7z6b0x3ky4y28yyxc9x5zp4r3vqmvbhz5m2fm6830fyjg13";
+ })
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-contacts/commit/1f1500ca01098ffda6392f5ec9ce3a29a48a84b1.patch";
+ sha256 = "082zaaj2l5cgr2qy145x8yknja87r0vpigrhidal40041kd5nldg";
+ })
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ # In file included from src/gnome-contacts@exe/contacts-avatar-selector.c:30:0:
+ # /nix/store/*-cheese-3.28.0/include/cheese/cheese-widget.h:26:10: fatal error: clutter-gtk/clutter-gtk.h: No such file or directory
+ # #include <clutter-gtk/clutter-gtk.h>
+ # ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+ NIX_CFLAGS_COMPILE = "-I${stdenv.lib.getDev clutter-gtk}/include/clutter-gtk-1.0";
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-contacts";
+ attrPath = "gnome3.gnome-contacts";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Contacts;
+ description = "GNOME’s integrated address book";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
new file mode 100644
index 00000000000..04730f2370f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
@@ -0,0 +1,183 @@
+{ fetchurl
+, stdenv
+, substituteAll
+, accountsservice
+, adwaita-icon-theme
+, cheese
+, clutter
+, clutter-gtk
+, colord
+, colord-gtk
+, cups
+, docbook_xsl
+, fontconfig
+, gdk-pixbuf
+, gettext
+, glib
+, glib-networking
+, glibc
+, gnome-bluetooth
+, gnome-color-manager
+, gnome-desktop
+, gnome-online-accounts
+, gnome-session
+, gnome-settings-daemon
+, gnome3
+, grilo
+, grilo-plugins
+, gsettings-desktop-schemas
+, gsound
+, gtk3
+, ibus
+, libcanberra-gtk3
+, libgnomekbd
+, libgtop
+, libgudev
+, libhandy
+, libkrb5
+, libpulseaudio
+, libpwquality
+, librsvg
+, libsecret
+, libsoup
+, libwacom
+, libxml2
+, libxslt
+, meson
+, modemmanager
+, mutter
+, networkmanager
+, networkmanagerapplet
+, ninja
+, pkgconfig
+, polkit
+, python3
+, samba
+, shared-mime-info
+, sound-theme-freedesktop
+, tracker
+, tzdata
+, udisks2
+, upower
+, vino
+, gnome-user-share
+, gnome-remote-desktop
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-control-center";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "03np0mhfl9kkdw4cb711pda0cli9zgh2bq2gqn2zwbdi3qnhk9gs";
+ };
+
+ nativeBuildInputs = [
+ docbook_xsl
+ gettext
+ libxslt
+ meson
+ ninja
+ pkgconfig
+ python3
+ shared-mime-info
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ accountsservice
+ adwaita-icon-theme
+ cheese
+ clutter
+ clutter-gtk
+ colord
+ colord-gtk
+ fontconfig
+ gdk-pixbuf
+ glib
+ glib-networking
+ gnome-bluetooth
+ gnome-desktop
+ gnome-online-accounts
+ gnome-remote-desktop # optional, sharing panel
+ gnome-settings-daemon
+ gnome-user-share # optional, sharing panel
+ grilo
+ grilo-plugins # for setting wallpaper from Flickr
+ gsettings-desktop-schemas
+ gsound
+ gtk3
+ ibus
+ libcanberra-gtk3
+ libgtop
+ libgudev
+ libhandy
+ libkrb5
+ libpulseaudio
+ libpwquality
+ librsvg
+ libsecret
+ libsoup
+ libwacom
+ libxml2
+ modemmanager
+ mutter # schemas for the keybindings
+ networkmanager
+ networkmanagerapplet
+ polkit
+ samba
+ tracker
+ udisks2
+ upower
+ vino
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./paths.patch;
+ gcm = gnome-color-manager;
+ gnome_desktop = gnome-desktop;
+ inherit glibc libgnomekbd tzdata;
+ inherit cups networkmanagerapplet;
+ })
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson/meson_post_install.py # patchShebangs requires executable file
+ patchShebangs build-aux/meson/meson_post_install.py
+ '';
+
+ mesonFlags = [
+ "-Dgnome_session_libexecdir=${gnome-session}/libexec"
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ --prefix XDG_DATA_DIRS : "${sound-theme-freedesktop}/share"
+ # Thumbnailers (for setting user profile pictures)
+ --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+ --prefix XDG_DATA_DIRS : "${librsvg}/share"
+ # WM keyboard shortcuts
+ --prefix XDG_DATA_DIRS : "${mutter}/share"
+ )
+ for i in $out/share/applications/*; do
+ substituteInPlace $i --replace "Exec=gnome-control-center" "Exec=$out/bin/gnome-control-center"
+ done
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Utilities to configure the GNOME desktop";
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
new file mode 100644
index 00000000000..97d8f0bee68
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
@@ -0,0 +1,167 @@
+diff --git a/panels/color/cc-color-panel.c b/panels/color/cc-color-panel.c
+index 49ca35220..adefb87b9 100644
+--- a/panels/color/cc-color-panel.c
++++ b/panels/color/cc-color-panel.c
+@@ -599,7 +599,7 @@ gcm_prefs_calibrate_cb (GtkWidget *widget, CcColorPanel *prefs)
+
+ /* run with modal set */
+ argv = g_ptr_array_new_with_free_func (g_free);
+- g_ptr_array_add (argv, g_build_filename (BINDIR, "gcm-calibrate", NULL));
++ g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-calibrate", NULL));
+ g_ptr_array_add (argv, g_strdup ("--device"));
+ g_ptr_array_add (argv, g_strdup (cd_device_get_id (prefs->current_device)));
+ g_ptr_array_add (argv, g_strdup ("--parent-window"));
+@@ -1038,7 +1038,7 @@ gcm_prefs_profile_view (CcColorPanel *prefs, CdProfile *profile)
+
+ /* open up gcm-viewer as a info pane */
+ argv = g_ptr_array_new_with_free_func (g_free);
+- g_ptr_array_add (argv, g_build_filename (BINDIR, "gcm-viewer", NULL));
++ g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-viewer", NULL));
+ g_ptr_array_add (argv, g_strdup ("--profile"));
+ g_ptr_array_add (argv, g_strdup (cd_profile_get_id (profile)));
+ g_ptr_array_add (argv, g_strdup ("--parent-window"));
+@@ -1288,15 +1288,12 @@ gcm_prefs_device_clicked (CcColorPanel *prefs, CdDevice *device)
+ static void
+ gcm_prefs_profile_clicked (CcColorPanel *prefs, CdProfile *profile, CdDevice *device)
+ {
+- g_autofree gchar *s = NULL;
+-
+ /* get profile */
+ g_debug ("selected profile = %s",
+ cd_profile_get_filename (profile));
+
+ /* allow getting profile info */
+- if (cd_profile_get_filename (profile) != NULL &&
+- (s = g_find_program_in_path ("gcm-viewer")) != NULL)
++ if (cd_profile_get_filename (profile) != NULL)
+ gtk_widget_set_sensitive (prefs->toolbutton_profile_view, TRUE);
+ else
+ gtk_widget_set_sensitive (prefs->toolbutton_profile_view, FALSE);
+diff --git a/panels/datetime/tz.h b/panels/datetime/tz.h
+index 96b25140c..1ad704d4a 100644
+--- a/panels/datetime/tz.h
++++ b/panels/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/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c
+index 4541986db..da7826bfe 100644
+--- a/panels/info/cc-info-overview-panel.c
++++ b/panels/info/cc-info-overview-panel.c
+@@ -187,7 +187,7 @@ load_gnome_version (char **version,
+ gsize length;
+ g_autoptr(VersionData) data = NULL;
+
+- if (!g_file_get_contents (DATADIR "/gnome/gnome-version.xml",
++ if (!g_file_get_contents ("@gnome_desktop@/share/gnome/gnome-version.xml",
+ &contents,
+ &length,
+ &error))
+diff --git a/panels/network/connection-editor/net-connection-editor.c b/panels/network/connection-editor/net-connection-editor.c
+index 9390a3308..d30b4a68e 100644
+--- a/panels/network/connection-editor/net-connection-editor.c
++++ b/panels/network/connection-editor/net-connection-editor.c
+@@ -247,9 +247,9 @@ net_connection_editor_do_fallback (NetConnectionEditor *editor, const gchar *typ
+ GError *error = NULL;
+
+ if (editor->is_new_connection) {
+- cmdline = g_strdup_printf ("nm-connection-editor --type='%s' --create", type);
++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --type='%s' --create", type);
+ } else {
+- cmdline = g_strdup_printf ("nm-connection-editor --edit='%s'",
++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit='%s'",
+ nm_connection_get_uuid (editor->connection));
+ }
+
+diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c
+index 360fbfc72..870157a11 100644
+--- a/panels/network/net-device-wifi.c
++++ b/panels/network/net-device-wifi.c
+@@ -1385,7 +1385,7 @@ device_wifi_edit (NetObject *object)
+ return;
+ }
+ uuid = nm_connection_get_uuid (NM_CONNECTION (connection));
+- cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid);
++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit %s", uuid);
+ g_debug ("Launching '%s'\n", cmdline);
+ if (!g_spawn_command_line_async (cmdline, &error)) {
+ g_warning ("Failed to launch nm-connection-editor: %s", error->message);
+diff --git a/panels/network/net-device.c b/panels/network/net-device.c
+index d73b537b9..e2ee54294 100644
+--- a/panels/network/net-device.c
++++ b/panels/network/net-device.c
+@@ -197,7 +197,7 @@ net_device_edit (NetObject *object)
+
+ connection = net_device_get_find_connection (device);
+ uuid = nm_connection_get_uuid (connection);
+- cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid);
++ cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --edit %s", uuid);
+ g_debug ("Launching '%s'\n", cmdline);
+ if (!g_spawn_command_line_async (cmdline, &error)) {
+ g_warning ("Failed to launch nm-connection-editor: %s", error->message);
+diff --git a/panels/printers/pp-host.c b/panels/printers/pp-host.c
+index f53ba217e..d24bcaeb9 100644
+--- a/panels/printers/pp-host.c
++++ b/panels/printers/pp-host.c
+@@ -256,7 +256,7 @@ _pp_host_get_snmp_devices_thread (GTask *task,
+ devices = g_new0 (PpDevicesList, 1);
+
+ argv = g_new0 (gchar *, 3);
+- argv[0] = g_strdup ("/usr/lib/cups/backend/snmp");
++ argv[0] = g_strdup ("@cups@/lib/cups/backend/snmp");
+ argv[1] = g_strdup (priv->hostname);
+
+ /* Use SNMP to get printer's informations */
+diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c
+index 35859526d..21486c917 100644
+--- a/panels/region/cc-region-panel.c
++++ b/panels/region/cc-region-panel.c
+@@ -755,10 +755,10 @@ row_layout_cb (CcRegionPanel *self,
+ layout_variant = cc_input_source_get_layout_variant (source);
+
+ if (layout_variant && layout_variant[0])
+- commandline = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"",
++ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l \"%s\t%s\"",
+ layout, layout_variant);
+ else
+- commandline = g_strdup_printf ("gkbd-keyboard-display -l %s",
++ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l %s",
+ layout);
+
+ g_spawn_command_line_async (commandline, NULL);
+diff --git a/panels/user-accounts/run-passwd.c b/panels/user-accounts/run-passwd.c
+index 00239ce0f..617c98870 100644
+--- a/panels/user-accounts/run-passwd.c
++++ b/panels/user-accounts/run-passwd.c
+@@ -150,7 +150,7 @@ spawn_passwd (PasswdHandler *passwd_handler, GError **error)
+ gchar **envp;
+ gint my_stdin, my_stdout, my_stderr;
+
+- argv[0] = "/usr/bin/passwd"; /* Is it safe to rely on a hard-coded path? */
++ argv[0] = "/run/wrappers/bin/passwd"; /* Is it safe to rely on a hard-coded path? */
+ argv[1] = NULL;
+
+ envp = g_get_environ ();
+diff --git a/tests/datetime/test-endianess.c b/tests/datetime/test-endianess.c
+index 9cb92007a..84d2f0fa3 100644
+--- a/tests/datetime/test-endianess.c
++++ b/tests/datetime/test-endianess.c
+@@ -26,7 +26,7 @@ test_endianess (void)
+ g_autoptr(GDir) dir = NULL;
+ const char *name;
+
+- dir = g_dir_open ("/usr/share/i18n/locales/", 0, NULL);
++ dir = g_dir_open ("@glibc@/share/i18n/locales/", 0, NULL);
+ if (dir == NULL) {
+ /* Try with /usr/share/locale/
+ * https://bugzilla.gnome.org/show_bug.cgi?id=646780 */
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch
new file mode 100644
index 00000000000..57eb4b3d44a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch
@@ -0,0 +1,15 @@
+--- a/libgnome-desktop/gnome-desktop-thumbnail-script.c
++++ b/libgnome-desktop/gnome-desktop-thumbnail-script.c
+@@ -536,9 +536,9 @@ add_bwrap (GPtrArray *array,
+ g_return_val_if_fail (script->s_infile != NULL, FALSE);
+
+ add_args (array,
+- "bwrap",
+- "--ro-bind", "/usr", "/usr",
+- "--ro-bind", "/etc/ld.so.cache", "/etc/ld.so.cache",
++ "@bubblewrap_bin@",
++ "--ro-bind", "@storeDir@", "@storeDir@",
++ "--ro-bind", "/run/current-system", "/run/current-system",
+ NULL);
+
+ /* These directories might be symlinks into /usr/... */
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
new file mode 100644
index 00000000000..9d798c2811b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl, substituteAll, pkgconfig, libxslt, ninja, libX11, gnome3, gtk3, glib
+, gettext, libxml2, xkeyboard_config, isocodes, meson, wayland
+, libseccomp, systemd, bubblewrap, gobject-introspection, gtk-doc, docbook_xsl, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-desktop";
+ version = "3.32.2";
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-desktop/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0bidx4626x7k2myv6f64qv4fzmxv8v475wibiz19kj8hjfr737q9";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig meson ninja gettext libxslt libxml2 gobject-introspection
+ gtk-doc docbook_xsl
+ ];
+ buildInputs = [
+ libX11 bubblewrap xkeyboard_config isocodes wayland
+ gtk3 glib libseccomp systemd
+ ];
+
+ propagatedBuildInputs = [ gsettings-desktop-schemas ];
+
+ patches = [
+ (substituteAll {
+ src = ./bubblewrap-paths.patch;
+ bubblewrap_bin = "${bubblewrap}/bin/bwrap";
+ inherit (builtins) storeDir;
+ })
+ ];
+
+ mesonFlags = [
+ "-Dgtk_doc=true"
+ "-Ddesktop_docs=false"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-desktop";
+ attrPath = "gnome3.gnome-desktop";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Library with common API for various GNOME modules";
+ license = with licenses; [ gpl2 lgpl2 ];
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
new file mode 100644
index 00000000000..98398311882
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, desktop-file-utils, appstream-glib, libxslt
+, libxml2, gettext, itstool, wrapGAppsHook, docbook_xsl, docbook_xml_dtd_43
+, gnome3, gtk3, glib, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-dictionary";
+ version = "3.26.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-dictionary/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "16b8bc248dcf68987826d5e39234b1bb7fd24a2607fcdbf4258fde88f012f300";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig wrapGAppsHook libxml2 gettext itstool
+ desktop-file-utils appstream-glib libxslt docbook_xsl docbook_xml_dtd_43
+ ];
+ buildInputs = [ gtk3 glib gsettings-desktop-schemas gnome3.adwaita-icon-theme ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-dictionary";
+ attrPath = "gnome3.gnome-dictionary";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Dictionary;
+ description = "Dictionary is the GNOME application to look up definitions";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
new file mode 100644
index 00000000000..d6d9f927252
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, gettext, fetchurl, pkgconfig, udisks2, libsecret, libdvdread
+, meson, ninja, gtk3, glib, wrapGAppsHook, python3, libnotify
+, itstool, gnome3, libxml2, gsettings-desktop-schemas
+, libcanberra-gtk3, libxslt, docbook_xsl, libpwquality }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-disk-utility";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-disk-utility/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "08vwbji9m1nhjjdiyhhaqi8cncys7i89b4bpy095f8475v8y05bg";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool libxslt docbook_xsl
+ wrapGAppsHook python3 libxml2
+ ];
+
+ buildInputs = [
+ gtk3 glib libsecret libpwquality libnotify libdvdread libcanberra-gtk3
+ udisks2 gnome3.adwaita-icon-theme
+ gnome3.gnome-settings-daemon gsettings-desktop-schemas
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-disk-utility";
+ attrPath = "gnome3.gnome-disk-utility";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://en.wikipedia.org/wiki/GNOME_Disks;
+ description = "A udisks graphical front-end";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
new file mode 100644
index 00000000000..976829acd4c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, meson, ninja, gettext, fetchurl
+, pkgconfig, gtk3, glib, libxml2, gnome-desktop, adwaita-icon-theme
+, wrapGAppsHook, gnome3, harfbuzz }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-font-viewer";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-font-viewer/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "10b150sa3971i5lfnk0jkkzlril97lz09sshwsbkabc8b7kv1qa3";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext wrapGAppsHook libxml2 ];
+ buildInputs = [ gtk3 glib gnome-desktop adwaita-icon-theme harfbuzz ];
+
+ # Do not run meson-postinstall.sh
+ preConfigure = "sed -i '2,$ d' meson-postinstall.sh";
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-font-viewer";
+ attrPath = "gnome3.gnome-font-viewer";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Program that can preview fonts and create thumbnails for fonts";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
new file mode 100644
index 00000000000..7817936bfda
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchurl, pkgconfig, dbus, libgcrypt, pam, python2, glib, libxslt
+, gettext, gcr, libcap_ng, libselinux, p11-kit, openssh, wrapGAppsHook
+, docbook_xsl, docbook_xml_dtd_43, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-keyring";
+ version = "3.31.91";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-keyring/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1fjylqw4xp0rqsylq4gbxzw1sql2sy55h1mnz1pprrxb9py0mnd4";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ buildInputs = [
+ glib libgcrypt pam openssh libcap_ng libselinux
+ gcr p11-kit
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig gettext libxslt docbook_xsl docbook_xml_dtd_43 wrapGAppsHook
+ ];
+
+ configureFlags = [
+ "--with-pkcs11-config=${placeholder "out"}/etc/pkcs11/" # installation directories
+ "--with-pkcs11-modules=${placeholder "out"}/lib/pkcs11/"
+ ];
+
+ postPatch = ''
+ patchShebangs build
+ '';
+
+ # Tends to fail non-deterministically.
+ # - https://github.com/NixOS/nixpkgs/issues/55293
+ # - https://github.com/NixOS/nixpkgs/issues/51121
+ doCheck = false;
+
+ # In 3.20.1, tests do not support Python 3
+ checkInputs = [ dbus python2 ];
+
+ checkPhase = ''
+ export HOME=$(mktemp -d)
+ dbus-run-session \
+ --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+ make check
+ '';
+
+ # Use wrapped gnome-keyring-daemon with cap_ipc_lock=ep
+ postFixup = ''
+ files=($out/etc/xdg/autostart/* $out/share/dbus-1/services/*)
+
+ for file in ''${files[*]}; do
+ substituteInPlace $file \
+ --replace "$out/bin/gnome-keyring-daemon" "/run/wrappers/bin/gnome-keyring-daemon"
+ done
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-keyring";
+ attrPath = "gnome3.gnome-keyring";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Collection of components in GNOME that store secrets, passwords, keys, certificates and make them available to applications";
+ homepage = https://wiki.gnome.org/Projects/GnomeKeyring;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix
new file mode 100644
index 00000000000..93da1f8abec
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, glib, gnome3, libxml2
+, libgdata, grilo, libzapojit, grilo-plugins, gnome-online-accounts, libmediaart
+, tracker, gfbgraph, librest, libsoup, json-glib, gmp, openssl, dleyna-server, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-online-miners";
+ version = "3.30.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-online-miners/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0pjamwwzn5wqgihyss357dyl2q70r0bngnqmwsqawchx5f9aja9c";
+ };
+
+ nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+ buildInputs = [
+ glib libgdata libxml2 libsoup gmp openssl
+ grilo libzapojit grilo-plugins
+ gnome-online-accounts libmediaart
+ tracker gfbgraph json-glib librest
+ dleyna-server
+ ];
+
+ enableParallelBuilding = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-online-miners";
+ attrPath = "gnome3.gnome-online-miners";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Projects/GnomeOnlineMiners;
+ description = "A set of crawlers that go through your online content and index them locally in Tracker";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix
new file mode 100644
index 00000000000..fd507acc009
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitLab, meson, ninja, pkgconfig, python3, wrapGAppsHook
+, glib, pipewire, systemd, libvncserver, libsecret, libnotify, gdk-pixbuf, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-remote-desktop";
+ version = "0.1.7";
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "jadahl";
+ repo = "gnome-remote-desktop";
+ rev = version;
+ sha256 = "0gmazc8ww0lyhx9iclhi982bkpjsnflrzv4qfm3q6hcy0il21fsc";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig python3 wrapGAppsHook ];
+
+ buildInputs = [
+ glib pipewire systemd libvncserver libsecret libnotify
+ gdk-pixbuf # For libnotify
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ mesonFlags = [
+ "-Dsystemd_user_unit_dir=${placeholder "out"}/lib/systemd/user"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Projects/Mutter/RemoteDesktop;
+ description = "GNOME Remote Desktop server";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
new file mode 100644
index 00000000000..33acfd245cf
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, gettext, libxml2, fetchurl, pkgconfig, libcanberra-gtk3
+, gtk3, glib, meson, ninja, python3, wrapGAppsHook, appstream-glib, desktop-file-utils
+, gnome3, gsettings-desktop-schemas }:
+
+let
+ pname = "gnome-screenshot";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "09ha7dizjm5ymqpjyrqd10ijfb3xlqc1mwg9ajkrbfry11q9yq4b";
+ };
+
+ doCheck = true;
+
+ postPatch = ''
+ chmod +x build-aux/postinstall.py # patchShebangs requires executable file
+ patchShebangs build-aux/postinstall.py
+ '';
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext appstream-glib libxml2 desktop-file-utils python3 wrapGAppsHook ];
+ buildInputs = [
+ gtk3 glib libcanberra-gtk3 gnome3.adwaita-icon-theme
+ gsettings-desktop-schemas
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://en.wikipedia.org/wiki/GNOME_Screenshot;
+ description = "Utility used in the GNOME desktop environment for taking screenshots";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix
new file mode 100644
index 00000000000..f13ad9f47aa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix
@@ -0,0 +1,67 @@
+{ fetchurl, stdenv, substituteAll, meson, ninja, pkgconfig, gnome3, glib, gtk3, gsettings-desktop-schemas
+, gnome-desktop, dbus, json-glib, libICE, xmlto, docbook_xsl, docbook_xml_dtd_412, python3
+, libxslt, gettext, makeWrapper, systemd, xorg, epoxy, gnugrep, bash }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-session";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-session/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0zrzkpd406i159mla7bfs5npa32fgqh66aip1rfq02rgsgmc9m5v";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ gsettings = "${glib.bin}/bin/gsettings";
+ dbusLaunch = "${dbus.lib}/bin/dbus-launch";
+ grep = "${gnugrep}/bin/grep";
+ bash = "${bash}/bin/bash";
+ })
+ ];
+
+ mesonFlags = [ "-Dsystemd=true" ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext makeWrapper
+ xmlto libxslt docbook_xsl docbook_xml_dtd_412 python3
+ dbus # for DTD
+ ];
+
+ buildInputs = [
+ glib gtk3 libICE gnome-desktop json-glib xorg.xtrans gnome3.adwaita-icon-theme
+ gnome3.gnome-settings-daemon gsettings-desktop-schemas systemd epoxy
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ # `bin/gnome-session` will reset the environment when run in wayland, we
+ # therefor wrap `libexec/gnome-session-binary` instead which is the actual
+ # binary needing wrapping
+ preFixup = ''
+ wrapProgram "$out/libexec/gnome-session-binary" \
+ --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
+ --suffix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
+ --suffix XDG_DATA_DIRS : "${gnome3.gnome-shell}/share"\
+ --suffix XDG_CONFIG_DIRS : "${gnome3.gnome-settings-daemon}/etc/xdg"
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-session";
+ attrPath = "gnome3.gnome-session";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME session manager";
+ homepage = https://wiki.gnome.org/Projects/SessionManagement;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch
new file mode 100644
index 00000000000..fe4feaf7085
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch
@@ -0,0 +1,38 @@
+--- a/gnome-session/gnome-session.in
++++ b/gnome-session/gnome-session.in
+@@ -3,11 +3,11 @@
+ if [ "x$XDG_SESSION_TYPE" = "xwayland" ] &&
+ [ "x$XDG_SESSION_CLASS" != "xgreeter" ] &&
+ [ -n "$SHELL" ] &&
+- grep -q "$SHELL" /etc/shells &&
+- ! (echo "$SHELL" | grep -q "false") &&
+- ! (echo "$SHELL" | grep -q "nologin"); then
++ @grep@ -q "$SHELL" /etc/shells &&
++ ! (echo "$SHELL" | @grep@ -q "false") &&
++ ! (echo "$SHELL" | @grep@ -q "nologin"); then
+ if [ "$1" != '-l' ]; then
+- exec bash -c "exec -l '$SHELL' -c '$0 -l $*'"
++ exec @bash@ -c "exec -l '$SHELL' -c '$0 -l $*'"
+ else
+ shift
+ fi
+@@ -13,7 +13,7 @@
+ fi
+ fi
+
+-SETTING=$(G_MESSAGES_DEBUG= gsettings get org.gnome.system.locale region)
++SETTING=$(G_MESSAGES_DEBUG= @gsettings@ get org.gnome.system.locale region)
+ REGION=${SETTING#\'}
+ REGION=${REGION%\'}
+
+--- a/gnome-session/main.c
++++ b/gnome-session/main.c
+@@ -203,7 +203,7 @@
+ }
+ new_argv[i + 2] = NULL;
+
+- if (!execvp ("dbus-launch", new_argv)) {
++ if (!execvp ("@dbusLaunch@", new_argv)) {
+ g_set_error (error,
+ G_SPAWN_ERROR,
+ G_SPAWN_ERROR_FAILED,
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
new file mode 100644
index 00000000000..b9f33ce73a8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
@@ -0,0 +1,129 @@
+{ stdenv
+, substituteAll
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gnome3
+, perl
+, gettext
+, gtk3
+, glib
+, libnotify
+, libgnomekbd
+, lcms2
+, libpulseaudio
+, mousetweaks
+, alsaLib
+, libcanberra-gtk3
+, upower
+, colord
+, libgweather
+, polkit
+, gsettings-desktop-schemas
+, geoclue2
+, systemd
+, libgudev
+, libwacom
+, libxslt
+, libxml2
+, networkmanager
+, gnome-desktop
+, geocode-glib
+, docbook_xsl
+, wrapGAppsHook
+, python3
+, tzdata
+, nss
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-settings-daemon";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-settings-daemon/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "02d0s0g2mmqfib44r3sf0499r08p61s8l2ndsjssbam1bi7x2dks";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit tzdata mousetweaks;
+ })
+ ./global-backlight-helper.patch
+ ];
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ perl
+ gettext
+ libxml2
+ libxslt
+ docbook_xsl
+ wrapGAppsHook
+ python3
+ ];
+
+ buildInputs = [
+ gtk3
+ glib
+ gsettings-desktop-schemas
+ networkmanager
+ libnotify
+ libgnomekbd # for org.gnome.libgnomekbd.keyboard schema
+ gnome-desktop
+ lcms2
+ libpulseaudio
+ alsaLib
+ libcanberra-gtk3
+ upower
+ colord
+ libgweather
+ nss
+ polkit
+ geocode-glib
+ geoclue2
+ systemd
+ libgudev
+ libwacom
+ ];
+
+ mesonFlags = [
+ "-Dudev_dir=${placeholder "out"}/lib/udev"
+ ];
+
+ NIX_CFLAGS_COMPILE = [
+ # Default for release buildtype but passed manually because
+ # we're using plain
+ "-DG_DISABLE_CAST_CHECKS"
+ ];
+
+ # So the polkit policy can reference /run/current-system/sw/bin/gnome-settings-daemon/gsd-backlight-helper
+ postFixup = ''
+ mkdir -p $out/bin/gnome-settings-daemon
+ ln -s $out/libexec/gsd-backlight-helper $out/bin/gnome-settings-daemon/gsd-backlight-helper
+ '';
+
+ 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
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch
new file mode 100644
index 00000000000..272656fae78
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch
@@ -0,0 +1,26 @@
+--- 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;
+--- a/plugins/mouse/gsd-mouse-manager.c
++++ b/plugins/mouse/gsd-mouse-manager.c
+@@ -118,7 +118,7 @@ set_mousetweaks_daemon (GsdMouseManager *manager,
+ gboolean run_daemon = dwell_click_enabled || secondary_click_enabled;
+
+ if (run_daemon || manager->priv->mousetweaks_daemon_running)
+- comm = g_strdup_printf ("mousetweaks %s",
++ comm = g_strdup_printf ("@mousetweaks@/bin/mousetweaks %s",
+ run_daemon ? "" : "-s");
+ else
+ return;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch
new file mode 100644
index 00000000000..8f3951af2da
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch
@@ -0,0 +1,26 @@
+diff --git a/plugins/power/gsd-backlight.c b/plugins/power/gsd-backlight.c
+index d7d10fd2..5619d6ad 100644
+--- a/plugins/power/gsd-backlight.c
++++ b/plugins/power/gsd-backlight.c
+@@ -358,7 +358,7 @@ gsd_backlight_run_set_helper (GsdBacklight *backlight, GTask *task)
+ proc = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_SILENCE,
+ &error,
+ "pkexec",
+- LIBEXECDIR "/gsd-backlight-helper",
++ "/run/current-system/sw/bin/gnome-settings-daemon/gsd-backlight-helper",
+ g_udev_device_get_sysfs_path (backlight->udev_device),
+ data->value_str, NULL);
+ } else {
+diff --git a/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in b/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in
+index f16300f8..79d6bd17 100644
+--- a/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in
++++ b/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in
+@@ -25,7 +25,7 @@
+ <allow_inactive>no</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+- <annotate key="org.freedesktop.policykit.exec.path">@libexecdir@/gsd-backlight-helper</annotate>
++ <annotate key="org.freedesktop.policykit.exec.path">/run/current-system/sw/bin/gnome-settings-daemon/gsd-backlight-helper</annotate>
+ </action>
+
+ </policyconfig>
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
new file mode 100644
index 00000000000..3d37040828c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, meson, ninja, gettext, pkgconfig, spidermonkey_52, glib
+, gnome3, gnome-menus, substituteAll }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extensions";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-shell-extensions/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "07libf6z24n42hpdsq163w0j8xyrav0lxqrwxrvq5kbz8zxv5ch2";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-shell-extensions";
+ attrPath = "gnome3.gnome-shell-extensions";
+ };
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix_gmenu.patch;
+ gmenu_path = "${gnome-menus}/lib/girepository-1.0";
+ })
+ ];
+
+ doCheck = true;
+ # 52 is required for tests
+ # https://gitlab.gnome.org/GNOME/gnome-shell-extensions/blob/3.30.1/meson.build#L25
+ checkInputs = [ spidermonkey_52 ];
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext glib ];
+
+ mesonFlags = [ "-Dextension_set=all" ];
+
+ preFixup = ''
+ # The meson build doesn't compile the schemas.
+ # Fixup adapted from export-zips.sh in the source.
+
+ extensiondir=$out/share/gnome-shell/extensions
+ schemadir=${glib.makeSchemaPath "$out" "${pname}-${version}"}
+
+ glib-compile-schemas $schemadir
+
+ for f in $extensiondir/*; do
+ name=`basename ''${f%%@*}`
+ uuid=$name@gnome-shell-extensions.gcampax.github.com
+ schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml
+
+ if [ -f $schema ]; then
+ mkdir $f/schemas
+ ln -s $schema $f/schemas;
+ glib-compile-schemas $f/schemas
+ fi
+ done
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Projects/GnomeShell/Extensions;
+ description = "Modify and extend GNOME Shell functionality and behavior";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch
new file mode 100644
index 00000000000..555664e8ae2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch
@@ -0,0 +1,11 @@
+--- a/extensions/apps-menu/extension.js
++++ b/extensions/apps-menu/extension.js
+@@ -1,6 +1,8 @@
+ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+ /* exported init enable disable */
+
++imports.gi.GIRepository.Repository.prepend_search_path('@gmenu_path@');
++
+ const {
+ Atk, Clutter, Gio, GLib, GMenu, GObject, Gtk, Meta, Shell, St
+ } = imports.gi;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
new file mode 100644
index 00000000000..a1d8f2c599a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
@@ -0,0 +1,99 @@
+{ fetchurl, fetchpatch, substituteAll, stdenv, meson, ninja, pkgconfig, gnome3, json-glib, libcroco, gettext, libsecret
+, python3, libsoup, polkit, clutter, networkmanager, docbook_xsl , docbook_xsl_ns, at-spi2-core
+, libstartup_notification, telepathy-glib, telepathy-logger, libXtst, unzip, glibcLocales, shared-mime-info
+, libgweather, libcanberra-gtk3, librsvg, geoclue2, perl, docbook_xml_dtd_42, desktop-file-utils
+, libpulseaudio, libical, gobject-introspection, gstreamer, wrapGAppsHook, libxslt, gcr, caribou
+, accountsservice, gdk-pixbuf, gdm, upower, ibus, networkmanagerapplet, libgnomekbd, gnome-desktop
+, gsettings-desktop-schemas, gnome-keyring, glib, gjs, mutter, evolution-data-server, gtk3
+, sassc, systemd, gst_all_1, adwaita-icon-theme, gnome-bluetooth, gnome-clocks, gnome-settings-daemon }:
+
+# http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/gnome-base/gnome-shell/gnome-shell-3.10.2.1.ebuild?revision=1.3&view=markup
+
+let
+ pythonEnv = python3.withPackages ( ps: with ps; [ pygobject3 ] );
+
+in stdenv.mkDerivation rec {
+ pname = "gnome-shell";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-shell/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0anlkdnqsp5fqvmg95rqjpp1ifcx5xzsvwcrdsvb1cqzbh6inmp5";
+ };
+
+ LANG = "en_US.UTF-8";
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext docbook_xsl docbook_xsl_ns docbook_xml_dtd_42 perl wrapGAppsHook glibcLocales
+ sassc desktop-file-utils libxslt.bin python3
+ ];
+ buildInputs = [
+ systemd caribou
+ gsettings-desktop-schemas gnome-keyring glib gcr json-glib accountsservice
+ libcroco libsecret libsoup polkit gdk-pixbuf librsvg
+ clutter networkmanager libstartup_notification telepathy-glib
+ libXtst gjs mutter libpulseaudio evolution-data-server
+ libical gtk3 gstreamer gdm libcanberra-gtk3 geoclue2
+ adwaita-icon-theme gnome-bluetooth
+ gnome-clocks # schemas needed
+ at-spi2-core upower ibus gnome-desktop telepathy-logger gnome-settings-daemon
+ gst_all_1.gst-plugins-good # recording
+ gobject-introspection
+
+ # not declared at build time, but typelib is needed at runtime
+ libgweather networkmanagerapplet
+ ];
+ propagatedUserEnvPkgs = [
+ # Needed to support on-screen keyboard used with touch screen devices
+ # see https://github.com/NixOS/nixpkgs/issues/25968
+ caribou
+ ];
+
+ patches = [
+ (fetchpatch {
+ name = "0001-build-Add-missing-dependency-to-run-js-test.patch";
+ url = https://bug787864.bugzilla-attachments.gnome.org/attachment.cgi?id=360016;
+ sha256 = "1dmahd8ysbzh33rxglba0fbq127aw9h14cl2a2bw9913vjxhxijm";
+ })
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit libgnomekbd unzip;
+ })
+ ];
+
+ postPatch = ''
+ patchShebangs src/data-to-c.pl
+
+ substituteInPlace src/gnome-shell-extension-tool.in --replace "@PYTHON@" "${pythonEnv}/bin/python"
+ substituteInPlace src/gnome-shell-perf-tool.in --replace "@PYTHON@" "${pythonEnv}/bin/python"
+ '';
+
+ postInstall = ''
+ glib-compile-schemas $out/share/glib-2.0/schemas
+ '';
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Until glib’s xdgmime is patched
+ # Fixes “Failed to load resource:///org/gnome/shell/theme/noise-texture.png: Unrecognized image file format”
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ )
+ '';
+
+ passthru = {
+ mozillaPlugin = "/lib/mozilla/plugins";
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-shell";
+ attrPath = "gnome3.gnome-shell";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Core user interface for the GNOME 3 desktop";
+ homepage = https://wiki.gnome.org/Projects/GnomeShell;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch
new file mode 100644
index 00000000000..3207af11088
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch
@@ -0,0 +1,22 @@
+--- a/js/ui/extensionDownloader.js
++++ b/js/ui/extensionDownloader.js
+@@ -86,7 +86,7 @@
+ stream.output_stream.write_bytes(contents, null);
+ stream.close(null);
+ let [success, pid] = GLib.spawn_async(null,
+- ['unzip', '-uod', dir.get_path(), '--', file.get_path()],
++ ['@unzip@/bin/unzip', '-uod', dir.get_path(), '--', file.get_path()],
+ null,
+ GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
+ null);
+--- a/js/ui/status/keyboard.js
++++ b/js/ui/status/keyboard.js
+@@ -1059,7 +1059,7 @@ class InputSourceIndicator extends PanelMenu.Button {
+ let description = xkbLayout;
+ if (xkbVariant.length > 0)
+ description = description + '\t' + xkbVariant;
+
+- Util.spawn(['gkbd-keyboard-display', '-l', description]);
++ Util.spawn(['@libgnomekbd@/bin/gkbd-keyboard-display', '-l', description]);
+ }
+ });
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix
new file mode 100644
index 00000000000..12081bbae5b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, substituteAll, pkgconfig, meson, ninja, gettext, gnome3, wrapGAppsHook, packagekit, ostree
+, glib, appstream-glib, libsoup, polkit, isocodes, gspell, libxslt, gobject-introspection, flatpak, fwupd
+, gtk3, gsettings-desktop-schemas, gnome-desktop, libxmlb, gnome-online-accounts, hicolor-icon-theme
+, json-glib, libsecret, valgrind-light, docbook_xsl, docbook_xml_dtd_42, docbook_xml_dtd_43, gtk-doc, desktop-file-utils }:
+
+let
+
+ withFwupd = stdenv.isx86_64 || stdenv.isi686;
+
+in
+
+stdenv.mkDerivation rec {
+ pname = "gnome-software";
+ version = "3.32.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-software/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0g30wdrpypj23npvx85wqh1i4a8bbg00ainz7wmsvry21hcny4d4";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit isocodes;
+ })
+ ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext wrapGAppsHook libxslt docbook_xml_dtd_42 docbook_xml_dtd_43
+ valgrind-light docbook_xsl gtk-doc desktop-file-utils gobject-introspection
+ hicolor-icon-theme # for setup-hook
+ ];
+
+ buildInputs = [
+ gtk3 glib packagekit appstream-glib libsoup
+ gsettings-desktop-schemas gnome-desktop
+ gspell json-glib libsecret ostree
+ polkit flatpak libxmlb gnome-online-accounts
+ ] ++ stdenv.lib.optionals withFwupd [
+ fwupd
+ ];
+
+ mesonFlags = [
+ "-Dubuntu_reviews=false"
+ "-Dgudev=false"
+ ] ++ stdenv.lib.optionals (!withFwupd) [
+ "-Dfwupd=false"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-software";
+ attrPath = "gnome3.gnome-software";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Software store that lets you install and update applications and system extensions";
+ homepage = https://wiki.gnome.org/Apps/Software;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch
new file mode 100644
index 00000000000..6f443a8a43e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/gs-language.c
++++ b/src/gs-language.c
+@@ -95,7 +95,7 @@
+ g_autoptr(GMarkupParseContext) context = NULL;
+
+ /* find filename */
+- filename = g_build_filename (DATADIR, "xml", "iso-codes", "iso_639.xml", NULL);
++ filename = g_build_filename ("@isocodes@", "share", "xml", "iso-codes", "iso_639.xml", NULL);
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ g_free (filename);
+ filename = g_build_filename ("/usr", "share", "xml", "iso-codes", "iso_639.xml", NULL);
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
new file mode 100644
index 00000000000..a9f8367a548
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, gettext, fetchurl, pkgconfig, gtkmm3, libxml2, polkit
+, bash, gtk3, glib, wrapGAppsHook, meson, ninja, python3
+, gsettings-desktop-schemas, itstool, gnome3, librsvg, gdk-pixbuf, libgtop, systemd }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-system-monitor";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-system-monitor/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1wd43qdgjav6xamq5z5cy8fri5zr01jga3plc9w95gcia0rk3ha8";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ pkgconfig gettext itstool wrapGAppsHook meson ninja python3
+ polkit # for ITS file
+ ];
+ buildInputs = [
+ bash gtk3 glib libxml2 gtkmm3 libgtop gdk-pixbuf gnome3.adwaita-icon-theme librsvg
+ gsettings-desktop-schemas systemd
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ sed -i '/gtk-update-icon-cache/s/^/#/' meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-system-monitor";
+ attrPath = "gnome3.gnome-system-monitor";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/SystemMonitor;
+ description = "System Monitor shows you what programs are running and how much processor time, memory, and disk space are being used";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
new file mode 100644
index 00000000000..75d4b117e77
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, gnome3, dconf, nautilus
+, gtk3, gsettings-desktop-schemas, vte, intltool, which, libuuid, vala
+, desktop-file-utils, itstool, wrapGAppsHook, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-terminal";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-terminal/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0shhpnagasyp1kxgjczfrivcxbgrrl3y8lzvp1z101m67h4jp6km";
+ };
+
+ buildInputs = [
+ gtk3 gsettings-desktop-schemas vte libuuid dconf
+ # For extension
+ nautilus
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig intltool itstool which libxml2
+ vala desktop-file-utils wrapGAppsHook
+ hicolor-icon-theme # for setup-hook
+ ];
+
+ # Silly ./configure, it looks for dbus file from gnome-shell in the
+ # installation tree of the package it is configuring.
+ postPatch = ''
+ substituteInPlace configure --replace '$(eval echo $(eval echo $(eval echo ''${dbusinterfacedir})))/org.gnome.ShellSearchProvider2.xml' "${gnome3.gnome-shell}/share/dbus-1/interfaces/org.gnome.ShellSearchProvider2.xml"
+ substituteInPlace src/Makefile.in --replace '$(dbusinterfacedir)/org.gnome.ShellSearchProvider2.xml' "${gnome3.gnome-shell}/share/dbus-1/interfaces/org.gnome.ShellSearchProvider2.xml"
+ '';
+
+ configureFlags = [ "--disable-migration" ]; # TODO: remove this with 3.30
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-terminal";
+ attrPath = "gnome3.gnome-terminal";
+ };
+ };
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ description = "The GNOME Terminal Emulator";
+ homepage = https://wiki.gnome.org/Apps/Terminal;
+ platforms = platforms.linux;
+ license = licenses.gpl3Plus;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix
new file mode 100644
index 00000000000..5cd8f249481
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, intltool, gtk3, gnome3, librsvg, pkgconfig, pango, atk, gtk2
+, gdk-pixbuf }:
+
+let
+ pname = "gnome-themes-extra";
+ version = "3.28";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "06aqg9asq2vqi9wr29bs4v8z2bf4manhbhfghf4nvw01y2zs0jvw";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ };
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs = [ gtk3 librsvg pango atk gtk2 gdk-pixbuf gnome3.adwaita-icon-theme ];
+
+ postFixup = ''
+ gtk-update-icon-cache "$out"/share/icons/HighContrast
+ '';
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
new file mode 100644
index 00000000000..7915e71a73c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, itstool, libxml2, intltool }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-user-docs";
+ version = "3.32.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-user-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0dvsl0ldg8rf7yq0r4dv1pn41s7gjgcqp7agkbflkbmhrl6vbhig";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-user-docs"; attrPath = "gnome3.gnome-user-docs"; };
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gnome3.yelp itstool libxml2 intltool ];
+
+ meta = with stdenv.lib; {
+ homepage = https://help.gnome.org/users/gnome-help/;
+ description = "User and system administration help for the GNOME desktop";
+ maintainers = gnome3.maintainers;
+ license = licenses.cc-by-30;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
new file mode 100644
index 00000000000..2a425acb067
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, gettext
+, fetchurl
+, apacheHttpd
+, nautilus
+, pkgconfig
+, gtk3
+, glib
+, libxml2
+, systemd
+, wrapGAppsHook
+, itstool
+, libnotify
+, mod_dnssd
+, gnome3
+, libcanberra-gtk3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-user-share";
+ version = "3.32.0.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "16w6n0cjyzp8vln3zspvab8jhjprpvs88xc9x7bvigg0wry74945";
+ };
+
+ preConfigure = ''
+ sed -e 's,^LoadModule dnssd_module.\+,LoadModule dnssd_module ${mod_dnssd}/modules/mod_dnssd.so,' \
+ -e 's,''${HTTP_MODULES_PATH},${apacheHttpd}/modules,' \
+ -i data/dav_user_2.4.conf
+ '';
+
+ configureFlags = [
+ "--with-httpd=${apacheHttpd.out}/bin/httpd"
+ "--with-modules-path=${apacheHttpd.dev}/modules"
+ "--with-systemduserunitdir=${placeholder "out"}/etc/systemd/user"
+ "--with-nautilusdir=${placeholder "out"}/lib/nautilus/extensions-3.0"
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ gettext
+ itstool
+ libxml2
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ glib
+ nautilus
+ libnotify
+ libcanberra-gtk3
+ systemd
+ ];
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://help.gnome.org/users/gnome-user-share/3.8;
+ description = "Service that exports the contents of the Public folder in your home directory on the local network";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix
new file mode 100644
index 00000000000..6c291c1874f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, intltool, fetchFromGitLab, pkgconfig, gtk3, adwaita-icon-theme
+, glib, desktop-file-utils, gtk-doc, autoconf, automake, libtool
+, wrapGAppsHook, gnome3, itstool, libxml2, yelp-tools
+, docbook_xsl, docbook_xml_dtd_412, gsettings-desktop-schemas
+, callPackage, unzip, gobject-introspection }:
+
+let
+ unicode-data = callPackage ./unicode-data.nix {};
+in stdenv.mkDerivation rec {
+ pname = "gucharmap";
+ version = "12.0.1";
+
+ outputs = [ "out" "lib" "dev" "devdoc" ];
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "GNOME";
+ repo = pname;
+ rev = version;
+ sha256 = "0si3ymyfzc5v7ly0dmcs3qgw2wp8cyasycq5hmcr8frl09lr6gkw";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig wrapGAppsHook unzip intltool itstool
+ autoconf automake libtool gtk-doc docbook_xsl docbook_xml_dtd_412
+ yelp-tools libxml2 desktop-file-utils gobject-introspection
+ ];
+
+ buildInputs = [ gtk3 glib gsettings-desktop-schemas adwaita-icon-theme ];
+
+ configureFlags = [
+ "--with-unicode-data=${unicode-data}"
+ "--enable-gtk-doc"
+ ];
+
+ doCheck = true;
+
+ postPatch = ''
+ patchShebangs gucharmap/gen-guch-unicode-tables.pl
+ '';
+
+ preConfigure = ''
+ NOCONFIGURE=1 ./autogen.sh
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME Character Map, based on the Unicode Character Database";
+ homepage = https://wiki.gnome.org/Apps/Gucharmap;
+ license = licenses.gpl3;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/unicode-data.nix b/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/unicode-data.nix
new file mode 100644
index 00000000000..56104aff484
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/unicode-data.nix
@@ -0,0 +1,45 @@
+{ fetchurl, stdenv, gnome3 }:
+stdenv.mkDerivation rec {
+ pname = "unicode-data";
+ version = "12.0.0";
+ srcs = [
+ (fetchurl {
+ url = "http://www.unicode.org/Public/${version}/ucd/Blocks.txt";
+ sha256 = "041sk54v6rjzb23b9x7yjdwzdp2wc7gvfz7ybavgg4gbh51wm8x1";
+ })
+ (fetchurl {
+ url = "http://www.unicode.org/Public/${version}/ucd/DerivedAge.txt";
+ sha256 = "04j92xp07v273z3pxkbfmi1svmw9kmnjl9nvz9fv0g5ybk9zk7r6";
+ })
+ (fetchurl {
+ url = "http://www.unicode.org/Public/${version}/ucd/NamesList.txt";
+ sha256 = "0vsq8gx7hws8mvxy3nlglpwxw7ky57q0fs09d7w9xgb2ylk7fz61";
+ })
+ (fetchurl {
+ url = "http://www.unicode.org/Public/${version}/ucd/Scripts.txt";
+ sha256 = "18c63hx4y5yg408a8d0wx72d2hfnlz4l560y1fsf9lpzifxpqcmx";
+ })
+ (fetchurl {
+ url = "http://www.unicode.org/Public/${version}/ucd/UnicodeData.txt";
+ sha256 = "07d1kq190kgl92ispfx6zmdkvwvhjga0ishxsngzlw8j3kdkz4ap";
+ })
+ (fetchurl {
+ url = "http://www.unicode.org/Public/${version}/ucd/Unihan.zip";
+ sha256 = "1kfdhgg2gm52x3s07bijb5cxjy0jxwhd097k5lqhvzpznprm6ibf";
+ })
+ ];
+ phases = "installPhase";
+ installPhase = with stdenv.lib; ''
+ mkdir $out
+ for f in $srcs;do
+ cp $f $out/$(stripHash $f)
+ done
+ '';
+ meta = with stdenv.lib; {
+ homepage = http://www.unicode.org/ucd/;
+ description = "Unicode Character Database";
+ maintainers = gnome3.maintainers;
+ license = licenses.mit;
+ platforms = platforms.all;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix
new file mode 100644
index 00000000000..bc0f5683a75
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, glib, dbus, libgcrypt, pkgconfig, intltool, gobject-introspection, gnome3 }:
+
+let
+ pname = "libgnome-keyring";
+ version = "3.12.0";
+in
+stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "c4c178fbb05f72acc484d22ddb0568f7532c409b0a13e06513ff54b91e947783";
+ };
+
+ outputs = [ "out" "dev" ];
+
+ propagatedBuildInputs = [ glib gobject-introspection dbus libgcrypt ];
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = {
+ description = "Framework for managing passwords and other secrets";
+ homepage = https://wiki.gnome.org/Projects/GnomeKeyring;
+ license = with stdenv.lib.licenses; [ gpl2Plus lgpl2Plus ];
+ inherit (glib.meta) platforms maintainers;
+
+ longDescription = ''
+ gnome-keyring is a program that keeps password and other secrets for
+ users. The library libgnome-keyring is used by applications to integrate
+ with the gnome-keyring system.
+ '';
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/mutter/0001-Revert-ClutterActor-Preserve-valid-paint-volumes-til.patch b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/0001-Revert-ClutterActor-Preserve-valid-paint-volumes-til.patch
new file mode 100644
index 00000000000..0e1c33773b0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/0001-Revert-ClutterActor-Preserve-valid-paint-volumes-til.patch
@@ -0,0 +1,147 @@
+From 76477def5c103f10d62e604305802d7f5506afd4 Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@protonmail.ch>
+Date: Sun, 15 Sep 2019 20:14:16 -0400
+Subject: [PATCH] Revert "ClutterActor: Preserve valid paint volumes till the
+ next relayout/repaint"
+
+This causes issues for users of mutter like in gala[0].
+
+Upstream report: https://gitlab.gnome.org/GNOME/mutter/issues/536
+[0]: https://github.com/elementary/gala/issues/605
+---
+ clutter/clutter/clutter-actor.c | 35 +++++----------------------------
+ 1 file changed, 5 insertions(+), 30 deletions(-)
+
+diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
+index e70892308..8cb60fa07 100644
+--- a/clutter/clutter/clutter-actor.c
++++ b/clutter/clutter/clutter-actor.c
+@@ -24,7 +24,7 @@
+
+ /**
+ * SECTION:clutter-actor
+- * @short_description: The basic element of the scene graph
++ * @short_description: The basic element of the scene graph
+ *
+ * The ClutterActor class is the basic element of the scene graph in Clutter,
+ * and it encapsulates the position, size, and transformations of a node in
+@@ -840,7 +840,6 @@ struct _ClutterActorPrivate
+ guint needs_compute_expand : 1;
+ guint needs_x_expand : 1;
+ guint needs_y_expand : 1;
+- guint needs_paint_volume_update : 1;
+ guint had_effects_on_last_paint_volume_update : 1;
+ };
+
+@@ -1511,8 +1510,6 @@ clutter_actor_real_map (ClutterActor *self)
+
+ CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED);
+
+- self->priv->needs_paint_volume_update = TRUE;
+-
+ stage = _clutter_actor_get_stage_internal (self);
+ priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
+
+@@ -2746,7 +2743,6 @@ clutter_actor_real_queue_relayout (ClutterActor *self)
+ priv->needs_width_request = TRUE;
+ priv->needs_height_request = TRUE;
+ priv->needs_allocation = TRUE;
+- priv->needs_paint_volume_update = TRUE;
+
+ /* reset the cached size requests */
+ memset (priv->width_requests, 0,
+@@ -4742,7 +4738,7 @@ clutter_actor_set_rotation_center_internal (ClutterActor *self,
+ ClutterRotateAxis axis,
+ const ClutterVertex *center)
+ {
+- ClutterVertex v = CLUTTER_VERTEX_INIT_ZERO;
++ ClutterVertex v = CLUTTER_VERTEX_INIT_ZERO;
+ GObject *obj = G_OBJECT (self);
+ ClutterTransformInfo *info;
+
+@@ -8531,7 +8527,6 @@ clutter_actor_init (ClutterActor *self)
+ priv->needs_width_request = TRUE;
+ priv->needs_height_request = TRUE;
+ priv->needs_allocation = TRUE;
+- priv->needs_paint_volume_update = TRUE;
+
+ priv->cached_width_age = 1;
+ priv->cached_height_age = 1;
+@@ -10098,9 +10093,6 @@ clutter_actor_allocate (ClutterActor *self,
+ return;
+ }
+
+- if (CLUTTER_ACTOR_IS_MAPPED (self))
+- self->priv->needs_paint_volume_update = TRUE;
+-
+ if (!stage_allocation_changed)
+ {
+ /* If the actor didn't move but needs_allocation is set, we just
+@@ -12992,9 +12984,6 @@ clutter_actor_add_child_internal (ClutterActor *self,
+ child->priv->needs_height_request = TRUE;
+ child->priv->needs_allocation = TRUE;
+
+- if (CLUTTER_ACTOR_IS_MAPPED (child))
+- child->priv->needs_paint_volume_update = TRUE;
+-
+ /* we only queue a relayout here, because any possible
+ * redraw has already been queued either by show() or
+ * by our call to queue_redraw() above
+@@ -14130,7 +14119,7 @@ clutter_actor_get_anchor_point_gravity (ClutterActor *self)
+ *
+ * Since: 0.6
+ *
+- * Deprecated: 1.12: Use #ClutterActor:pivot-point and
++ * Deprecated: 1.12: Use #ClutterActor:pivot-point and
+ * clutter_actor_set_translation() instead.
+ */
+ void
+@@ -14178,7 +14167,7 @@ clutter_actor_move_anchor_point (ClutterActor *self,
+ *
+ * Since: 0.6
+ *
+- * Deprecated: 1.12: Use #ClutterActor:pivot-point and
++ * Deprecated: 1.12: Use #ClutterActor:pivot-point and
+ * clutter_actor_set_translation() instead.
+ */
+ void
+@@ -14230,7 +14219,7 @@ clutter_actor_move_anchor_point_from_gravity (ClutterActor *self,
+ *
+ * Since: 0.6
+ *
+- * Deprecated: 1.12: Use #ClutterActor:pivot-point and
++ * Deprecated: 1.12: Use #ClutterActor:pivot-point and
+ * clutter_actor_set_translation() instead. E.g. For %CLUTTER_GRAVITY_CENTER set
+ * pivot_point to (0.5,0.5) and the translation to (width/2,height/2).
+ */
+@@ -17567,19 +17556,6 @@ _clutter_actor_get_paint_volume_mutable (ClutterActor *self)
+
+ if (priv->paint_volume_valid)
+ {
+- /* If effects are applied, the actor paint volume
+- * needs to be recomputed on each paint, since those
+- * paint volumes could change over the duration of the
+- * effect.
+- *
+- * We also need to update the paint volume if we went
+- * from having effects to not having effects on the last
+- * paint volume update. */
+- if (!priv->needs_paint_volume_update &&
+- priv->current_effect == NULL &&
+- !has_paint_volume_override_effects &&
+- !priv->had_effects_on_last_paint_volume_update)
+- return &priv->paint_volume;
+ clutter_paint_volume_free (&priv->paint_volume);
+ }
+
+@@ -17588,7 +17564,6 @@ _clutter_actor_get_paint_volume_mutable (ClutterActor *self)
+ if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume))
+ {
+ priv->paint_volume_valid = TRUE;
+- priv->needs_paint_volume_update = FALSE;
+ return &priv->paint_volume;
+ }
+ else
+--
+2.22.1
+
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.28.nix b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.28.nix
new file mode 100644
index 00000000000..cc00fc5ece4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.28.nix
@@ -0,0 +1,95 @@
+{ fetchFromGitLab, stdenv, substituteAll, pkgconfig, gnome3, intltool, gobject-introspection, upower, cairo
+, glib, gtk3, pango, cogl, clutter, libstartup_notification, zenity, libcanberra-gtk3, fetchpatch
+, gsettings-desktop-schemas, gnome-desktop, wrapGAppsHook
+, libtool, xkeyboard_config, libxkbfile, libxkbcommon, libXtst, libinput
+, geocode-glib, libgudev, libwacom, xwayland, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mutter";
+ version = "3.28.4";
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "GNOME";
+ repo = pname;
+ rev = "74e3126b77eb5f27c0ae3f53b0aff2d2eebc15af"; # patches of tip from gnome-3-28 branch
+ sha256 = "0gw1n1w3i040w5mv30kkg7g8a59ymjlc5yaklip0ngg8xv76g0zi";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths-328.patch;
+ inherit zenity;
+ })
+
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1700337
+ # https://gitlab.gnome.org/GNOME/mutter/merge_requests/133
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/mutter328/raw/fff28bebda02111b4c534952465ff967ba7efced/f/0070-clutter-Add-API-to-retrieve-the-physical-size-of-abs.patch";
+ sha256 = "11xg0clrqwvssy2r6hv4iya8g87z2v5f47fimd2b4hha6ki3g1is";
+ })
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/mutter328/raw/fff28bebda02111b4c534952465ff967ba7efced/f/0071-backends-Add-MetaInputMapper.patch";
+ sha256 = "1kcp42hg8sy1q21w5586gdgmi95nf36829kkfswbah61h6bkb518";
+ })
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/mutter328/raw/fff28bebda02111b4c534952465ff967ba7efced/f/0072-backends-Delegate-on-MetaInputMapper-for-unmapped-di.patch";
+ sha256 = "0zf4yxhq5s3dnzmn15mx4yb978g27ij4vmq055my9p7xgh6h9ga8";
+ })
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/mutter328/raw/fff28bebda02111b4c534952465ff967ba7efced/f/0073-backends-Add-MetaInputMapper-method-to-lookup-device.patch";
+ sha256 = "0dnb2hqx5in6x9ar6wnr1hy3bg2wdcl3wbdx4jn66c7bi7s1k5zd";
+ })
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/mutter328/raw/fff28bebda02111b4c534952465ff967ba7efced/f/0074-backends-Turn-builtin-touchscreen-on-off-together-wi.patch";
+ sha256 = "17fvs7j5ws4sz6fkch93gjlik0nm4z426w4n348gyw5llh0r76pg";
+ })
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/mutter328/raw/fff28bebda02111b4c534952465ff967ba7efced/f/0075-backends-Update-to-new-output-setting-for-tablets-to.patch";
+ sha256 = "141p3an83s042f67fw2fqmr79i5g634ndrbpd8cs47fd4wwiwpj5";
+ })
+ # https://gitlab.gnome.org/GNOME/mutter/merge_requests/670
+ # Needed for gala redorder workspace
+ (fetchpatch {
+ url = "https://github.com/elementary/os-patches/commit/d636a44885c5be662997f8e19f7dcd26670b3219.patch";
+ sha256 = "12pbxk6f39a09jxjam5a5hxl4whp3cifzpck2m7fpp0n98nc63qh";
+ })
+ # See patch commit message
+ ./0001-Revert-ClutterActor-Preserve-valid-paint-volumes-til.patch
+ ];
+
+ configureFlags = [
+ "--with-x"
+ "--enable-shape"
+ "--enable-sm"
+ "--enable-startup-notification"
+ "--enable-xsync"
+ "--enable-verbose-mode"
+ "--with-libcanberra"
+ "--with-xwayland-path=${xwayland}/bin/Xwayland"
+ "--enable-compile-warnings=maximum"
+ ];
+
+ propagatedBuildInputs = [
+ # required for pkgconfig to detect mutter-clutter
+ libXtst
+ ];
+
+ nativeBuildInputs = [ autoreconfHook pkgconfig intltool libtool wrapGAppsHook ];
+
+ buildInputs = [
+ glib gobject-introspection gtk3 gsettings-desktop-schemas upower
+ gnome-desktop cairo pango cogl clutter zenity libstartup_notification
+ geocode-glib libinput libgudev libwacom
+ libcanberra-gtk3 zenity xkeyboard_config libxkbfile
+ libxkbcommon
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix
new file mode 100644
index 00000000000..eab0b131ea9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix
@@ -0,0 +1,89 @@
+{ fetchurl, fetchpatch, substituteAll, stdenv, pkgconfig, gnome3, gettext, gobject-introspection, upower, cairo
+, pango, cogl, clutter, libstartup_notification, zenity, libcanberra-gtk3
+, ninja, xkeyboard_config, libxkbfile, libxkbcommon, libXtst, libinput
+, gsettings-desktop-schemas, glib, gtk3, gnome-desktop
+, geocode-glib, pipewire, libgudev, libwacom, xwayland, meson
+, gnome-settings-daemon
+, xorgserver
+, python3
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "mutter";
+ version = "3.32.2";
+
+ outputs = [ "out" "dev" "man" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/mutter/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1h577i2ap7dpfy1jg101jvc6nzccc0csgvd55ahydlr8f94frcva";
+ };
+
+ mesonFlags = [
+ "-Dxwayland-path=${xwayland}/bin/Xwayland"
+ "-Dinstalled_tests=false" # TODO: enable these
+ ];
+
+ propagatedBuildInputs = [
+ # required for pkgconfig to detect mutter-clutter
+ libXtst
+ ];
+
+ nativeBuildInputs = [
+ meson
+ pkgconfig
+ gettext
+ ninja
+ python3
+ # for cvt command
+ xorgserver
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib gobject-introspection gtk3 gsettings-desktop-schemas upower
+ gnome-desktop cairo pango cogl clutter zenity libstartup_notification
+ geocode-glib libinput libgudev libwacom
+ libcanberra-gtk3 zenity xkeyboard_config libxkbfile
+ libxkbcommon pipewire xwayland
+ gnome-settings-daemon
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit zenity;
+ })
+ # Fix a segmentation fault in dri_flush_front_buffer() upon
+ # suspend/resume. This change should be removed when Mutter
+ # is updated to 3.34.
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/mutter/commit/8307c0f7ab60760de53f764e6636893733543be8.diff";
+ sha256 = "1hzfva71xdqvvnx5smjsrjlgyrmc7dj94mpylkak0gwda5si0h2n";
+ })
+ ];
+
+ postPatch = ''
+ patchShebangs src/backends/native/gen-default-modes.py
+ '';
+
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas "$out/share/glib-2.0/schemas"
+ '';
+
+ enableParallelBuilding = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "mutter";
+ attrPath = "gnome3.mutter";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths-328.patch b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths-328.patch
new file mode 100644
index 00000000000..6c40624a55d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths-328.patch
@@ -0,0 +1,13 @@
+diff --git a/src/core/util.c b/src/core/util.c
+index 5b8de18c7..546352a95 100644
+--- a/src/core/util.c
++++ b/src/core/util.c
+@@ -635,7 +635,7 @@ meta_show_dialog (const char *type,
+
+ args = g_ptr_array_new ();
+
+- append_argument (args, "zenity");
++ append_argument (args, "@zenity@/bin/zenity");
+ append_argument (args, type);
+
+ if (display)
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch
new file mode 100644
index 00000000000..6ac0a431f61
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch
@@ -0,0 +1,13 @@
+diff --git a/src/core/util.c b/src/core/util.c
+index 57b73747d..f424cc81c 100644
+--- a/src/core/util.c
++++ b/src/core/util.c
+@@ -636,7 +636,7 @@ meta_show_dialog (const char *type,
+
+ args = g_ptr_array_new ();
+
+- append_argument (args, "zenity");
++ append_argument (args, "@zenity@/bin/zenity");
+ append_argument (args, type);
+
+ if (display)
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/bubblewrap-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/bubblewrap-paths.patch
new file mode 100644
index 00000000000..37358c8432c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/bubblewrap-paths.patch
@@ -0,0 +1,15 @@
+--- a/src/gnome-desktop/gnome-desktop-thumbnail-script.c
++++ a/src/gnome-desktop/gnome-desktop-thumbnail-script.c
+@@ -536,9 +536,9 @@ add_bwrap (GPtrArray *array,
+ g_return_val_if_fail (script->s_infile != NULL, FALSE);
+
+ add_args (array,
+- "bwrap",
+- "--ro-bind", "/usr", "/usr",
+- "--ro-bind", "/etc/ld.so.cache", "/etc/ld.so.cache",
++ "@bubblewrap_bin@",
++ "--ro-bind", "@storeDir@", "@storeDir@",
++ "--ro-bind", "/run/current-system", "/run/current-system",
+ NULL);
+
+ /* These directories might be symlinks into /usr/... */
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix
new file mode 100644
index 00000000000..14551fb7d0c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gettext, libxml2
+, desktop-file-utils, python3, wrapGAppsHook , gtk3, gnome3, gnome-autoar
+, glib-networking, shared-mime-info, libnotify, libexif, libseccomp , exempi
+, librsvg, tracker, tracker-miners, gexiv2, libselinux, gdk-pixbuf
+, substituteAll, bubblewrap, gst_all_1, gsettings-desktop-schemas
+}:
+
+let
+ pname = "nautilus";
+ version = "3.32.3";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1x9crzbj6rrrf8w5dkcx0c14j40byr4ijpzkwd5dcrbfvvdy1r01";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig libxml2 gettext python3 wrapGAppsHook
+ desktop-file-utils
+ ];
+
+ buildInputs = [
+ glib-networking shared-mime-info libexif gtk3 exempi libnotify libselinux
+ tracker tracker-miners gexiv2 libseccomp bubblewrap gst_all_1.gst-plugins-base
+ gnome3.adwaita-icon-theme gsettings-desktop-schemas
+ ];
+
+ propagatedBuildInputs = [ gnome-autoar ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Thumbnailers
+ --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+ --prefix XDG_DATA_DIRS : "${librsvg}/share"
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ )
+ '';
+
+ postPatch = ''
+ patchShebangs build-aux/meson/postinstall.py
+ '';
+
+ patches = [
+ ./extension_dir.patch
+ # 3.30 now generates it's own thummbnails,
+ # and no longer depends on `gnome-desktop`
+ (substituteAll {
+ src = ./bubblewrap-paths.patch;
+ bubblewrap_bin = "${bubblewrap}/bin/bwrap";
+ inherit (builtins) storeDir;
+ })
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "The file manager for GNOME";
+ homepage = https://wiki.gnome.org/Apps/Files;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch b/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch
new file mode 100644
index 00000000000..e1313999675
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch
@@ -0,0 +1,24 @@
+diff --git a/src/nautilus-module.c b/src/nautilus-module.c
+index 6273a76..4adcc8a 100644
+--- a/src/nautilus-module.c
++++ b/src/nautilus-module.c
+@@ -242,11 +242,17 @@ void
+ nautilus_module_setup (void)
+ {
+ static gboolean initialized = FALSE;
++ const gchar* extensiondir = NULL;
+
+ if (!initialized)
+ {
+ initialized = TRUE;
+
+- load_module_dir (NAUTILUS_EXTENSIONDIR);
++ extensiondir = g_getenv ("NAUTILUS_EXTENSION_DIR");
++ if (extensiondir == NULL) {
++ extensiondir = NAUTILUS_EXTENSIONDIR;
++ }
++
++ load_module_dir (extensiondir);
+
+ eel_debug_call_at_shutdown (free_module_objects);
+ }
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch b/nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch
new file mode 100644
index 00000000000..4259f93eb24
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch
@@ -0,0 +1,38 @@
+diff --git a/meson.build b/meson.build
+index 209d4187..58580980 100644
+--- a/meson.build
++++ b/meson.build
+@@ -20,7 +20,11 @@ if not get_option('uninstalled')
+ rygel_datadir = join_paths(get_option('prefix'), get_option('datadir'), 'rygel')
+ rygel_libexecdir = join_paths(get_option('prefix'), get_option('libexecdir'),
+ 'rygel')
+- rygel_sysconfdir = join_paths(get_option('prefix'), get_option('sysconfdir'))
++ if get_option('sysconfdir_install') != ''
++ rygel_sysconfdir = join_paths(get_option('prefix'), get_option('sysconfdir_install'))
++ else
++ rygel_sysconfdir = join_paths(get_option('prefix'), get_option('sysconfdir'))
++ endif
+ rygel_plugindir = join_paths(rygel_libdir, 'rygel-2.6', 'plugins')
+ rygel_enginedir = join_paths(rygel_libdir, 'rygel-2.6', 'engines')
+ rygel_presetdir = join_paths(rygel_datadir, 'rygel', 'presets')
+@@ -55,7 +59,7 @@ conf.set_quoted('DATA_DIR', rygel_datadir)
+ conf.set_quoted('PLUGIN_DIR', rygel_plugindir)
+ conf.set_quoted('BIG_ICON_DIR', rygel_bigicondir)
+ conf.set_quoted('SMALL_ICON_DIR', rygel_smallicondir)
+-conf.set_quoted('SYS_CONFIG_DIR', rygel_sysconfdir)
++conf.set_quoted('SYS_CONFIG_DIR', get_option('sysconfdir'))
+ conf.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
+ conf.set_quoted('MX_EXTRACT_PATH', join_paths(rygel_libexecdir, 'mx-extract'))
+ conf.set_quoted('DESKTOP_DIR', join_paths(get_option('prefix'), get_option('datadir'), 'applications'))
+diff --git a/meson_options.txt b/meson_options.txt
+index f09cac58..ff11c548 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,6 +1,7 @@
+ option('uninstalled', type: 'boolean', value: 'false', description: 'Run Rygel from build directory only')
+ option('api-docs', type: 'boolean', value: 'false', description: 'Build the API documentation')
+ option('systemd-user-units-dir', type : 'string', value : 'auto', description : 'Where to install the systemd user unit (use special values "auto" or "none", or pass a path')
++option('sysconfdir_install', type: 'string', value: '', description: 'sysconfdir to use during installation')
+ option('plugins', type : 'array', choices : ['external', 'gst-launch', 'lms', 'media-export', 'mpris', 'playbin', 'ruih', 'tracker'])
+ option('engines', type : 'array', choices : ['simple', 'gstreamer'])
+ option('examples', type : 'boolean', value : 'true')
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix
new file mode 100644
index 00000000000..c38e677a421
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix
@@ -0,0 +1,106 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, vala
+, gettext
+, libxml2
+, gobject-introspection
+, wrapGAppsHook
+, python3
+, glib
+, gssdp
+, gupnp
+, gupnp-av
+, gupnp-dlna
+, gst_all_1
+, libgee
+, libsoup
+, gtk3
+, libmediaart
+, sqlite
+, systemd
+, tracker
+, shared-mime-info
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "rygel";
+ version = "0.38.1";
+
+ # TODO: split out lib
+ outputs = [ "out" "dev" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1w8bi2rw91qyfny1zxhy32k4qn62hdjl2m38f75cp7wv6494d7w0";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ gettext
+ libxml2
+ gobject-introspection
+ wrapGAppsHook
+ python3
+ ];
+
+ buildInputs = [
+ glib
+ gssdp
+ gupnp
+ gupnp-av
+ gupnp-dlna
+ libgee
+ libsoup
+ gtk3
+ libmediaart
+ sqlite
+ systemd
+ tracker
+ shared-mime-info
+ ] ++ (with gst_all_1; [
+ gstreamer
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-bad
+ gst-plugins-ugly
+ ]);
+
+ mesonFlags = [
+ "-Dsystemd-user-units-dir=${placeholder "out"}/lib/systemd/user"
+ "-Dapi-docs=false"
+ "--sysconfdir=/etc"
+ "-Dsysconfdir_install=${placeholder "out"}/etc"
+ ];
+
+ doCheck = true;
+
+ patches = [
+ ./add-option-for-installation-sysconfdir.patch
+ ];
+
+ postPatch = ''
+ patchShebangs data/xml/process-xml.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "A home media solution (UPnP AV MediaServer) that allows you to easily share audio, video and pictures to other devices";
+ homepage = https://wiki.gnome.org/Projects/Rygel;
+ license = licenses.lgpl21Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix
new file mode 100644
index 00000000000..de56b14d46f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gettext, itstool, python3, wrapGAppsHook
+, cairo, gdk-pixbuf, colord, glib, gtk3, gusb, packagekit, libwebp
+, libxml2, sane-backends, vala, gnome3, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "simple-scan";
+ version = "3.32.2.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/simple-scan/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0xqb642bsd2hddsm4bd199vyq8jcipdlxm0br3mjlc5vjcxgkxyp";
+ };
+
+ buildInputs = [
+ cairo gdk-pixbuf colord glib gnome3.adwaita-icon-theme gusb
+ gtk3 libwebp packagekit sane-backends vala
+ ];
+ nativeBuildInputs = [
+ meson ninja gettext itstool pkgconfig python3 wrapGAppsHook libxml2
+ # For setup hook
+ gobject-introspection
+ ];
+
+ postPatch = ''
+ patchShebangs data/meson_compile_gschema.py
+ '';
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "simple-scan";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Simple scanning utility";
+ longDescription = ''
+ A really easy way to scan both documents and photos. You can crop out the
+ bad parts of a photo and rotate it if it is the wrong way round. You can
+ print your scans, export them to pdf, or save them in a range of image
+ formats. Basically a frontend for SANE - which is the same backend as
+ XSANE uses. This means that all existing scanners will work and the
+ interface is well tested.
+ '';
+ homepage = https://gitlab.gnome.org/GNOME/simple-scan;
+ license = licenses.gpl3Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix
new file mode 100644
index 00000000000..86675f21f06
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, meson, gettext, gobject-introspection, glib
+, clutter-gtk, clutter-gst, gnome3, gtksourceview, gjs
+, webkitgtk, libmusicbrainz5, icu, wrapGAppsHook, gst_all_1
+, gdk-pixbuf, librsvg, gtk3, harfbuzz, ninja }:
+
+stdenv.mkDerivation rec {
+ pname = "sushi";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/sushi/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "02idvqjk76lii9xyg3b1yz4rw721709bdm5j8ikjym6amcghl0aj";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig meson ninja gettext gobject-introspection wrapGAppsHook
+ ];
+ buildInputs = [
+ glib gtk3 gnome3.evince icu harfbuzz
+ clutter-gtk clutter-gst gjs gtksourceview gdk-pixbuf
+ librsvg libmusicbrainz5 webkitgtk
+ gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "sushi";
+ attrPath = "gnome3.sushi";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = "https://en.wikipedia.org/wiki/Sushi_(software)";
+ description = "A quick previewer for Nautilus";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix
new file mode 100644
index 00000000000..a5388f2eae1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, meson, ninja, gettext, gst_all_1
+, clutter-gtk, clutter-gst, python3Packages, shared-mime-info
+, pkgconfig, gtk3, glib, gobject-introspection, totem-pl-parser
+, wrapGAppsHook, itstool, libxml2, vala, gnome3, grilo, grilo-plugins
+, libpeas, adwaita-icon-theme, gnome-desktop, gsettings-desktop-schemas
+, gdk-pixbuf, tracker, nautilus, xvfb_run }:
+
+stdenv.mkDerivation rec {
+ pname = "totem";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/totem/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yra8apc7smpwf7d1k8crhrm8d4wix24ds6i9yxbch1v11jnhr3v";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [ meson ninja vala pkgconfig gettext python3Packages.python itstool gobject-introspection wrapGAppsHook ];
+ buildInputs = [
+ gtk3 glib grilo clutter-gtk clutter-gst totem-pl-parser grilo-plugins
+ gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad
+ gst_all_1.gst-plugins-ugly gst_all_1.gst-libav libpeas shared-mime-info
+ gdk-pixbuf libxml2 adwaita-icon-theme gnome-desktop
+ gsettings-desktop-schemas tracker nautilus
+ python3Packages.pygobject3 python3Packages.dbus-python # for plug-ins
+ ];
+
+ postPatch = ''
+ chmod +x meson_compile_python.py meson_post_install.py # patchShebangs requires executable file
+ patchShebangs .
+ '';
+
+ mesonFlags = [
+ "-Dwith-nautilusdir=${placeholder "out"}/lib/nautilus/extensions-3.0"
+ # https://bugs.launchpad.net/ubuntu/+source/totem/+bug/1712021
+ # https://bugzilla.gnome.org/show_bug.cgi?id=784236
+ # https://github.com/mesonbuild/meson/issues/1994
+ "-Denable-vala=no"
+ ];
+
+ checkInputs = [ xvfb_run ];
+
+ checkPhase = ''
+ xvfb-run -s '-screen 0 800x600x24' \
+ ninja test
+ '';
+
+ wrapPrefixVariables = [ "PYTHONPATH" ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "totem";
+ attrPath = "gnome3.totem";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Videos;
+ description = "Movie player for the GNOME desktop based on GStreamer";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/vino/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/vino/default.nix
new file mode 100644
index 00000000000..e18f4de68d6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/vino/default.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, fetchFromGitLab
+, wrapGAppsHook
+, pkgconfig
+, gnome3
+, gtk3
+, glib
+, intltool
+, libXtst
+, libnotify
+, libsoup
+, libsecret
+, gnutls
+, libgcrypt
+, avahi
+, zlib
+, libjpeg
+, libXdamage
+, libXfixes
+, libXext
+, networkmanager
+, gnome-common
+, libtool
+, automake
+, autoconf
+, telepathySupport ? false
+, dbus-glib ? null
+, telepathy-glib ? null
+}:
+
+stdenv.mkDerivation {
+ pname = "vino";
+ version = "unstable-2019-07-08";
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "GNOME";
+ repo = "vino";
+ rev = "aed81a798558c8127b765cd4fb4dc726d10f1e21";
+ sha256 = "16r4cj5nsygmd9v97nq6d1yhynzak9hdnaprcdbmwfhh0c9w8jv3";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ autoconf
+ automake
+ gnome-common
+ intltool
+ libtool
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ avahi
+ glib
+ gnome3.adwaita-icon-theme
+ gnutls
+ gtk3
+ libXdamage
+ libXext
+ libXfixes
+ libXtst
+ libgcrypt
+ libjpeg
+ libnotify
+ libsecret
+ libsoup
+ networkmanager
+ zlib
+ ]
+ ++ stdenv.lib.optionals telepathySupport [ dbus-glib telepathy-glib ]
+ ;
+
+ preConfigure = ''
+ NOCONFIGURE=1 ./autogen.sh
+ '';
+
+ postInstall = stdenv.lib.optionalString (!telepathySupport) ''
+ rm -f $out/share/dbus-1/services/org.freedesktop.Telepathy.Client.Vino.service
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "vino";
+ attrPath = "gnome3.vino";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Projects/Vino;
+ description = "GNOME desktop sharing server";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/yelp-tools/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/yelp-tools/default.nix
new file mode 100644
index 00000000000..43863bf7f85
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/yelp-tools/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, libxml2, libxslt, itstool, gnome3, pkgconfig }:
+
+stdenv.mkDerivation rec {
+ pname = "yelp-tools";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/yelp-tools/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1yg8f5g5wadhmy4yfd9yjhvd8vll4gq4l86ibp0b42qbxnsmcf0q";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "yelp-tools"; attrPath = "gnome3.yelp-tools"; };
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ libxml2 libxslt itstool gnome3.yelp-xsl ];
+
+ doCheck = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Yelp/Tools;
+ description = "Small programs that help you create, edit, manage, and publish your Mallard or DocBook documentation";
+ maintainers = with maintainers; [ domenkozar ];
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
new file mode 100644
index 00000000000..fc5b0268df7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, intltool, fetchurl, pkgconfig
+, itstool, libxml2, libxslt, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "yelp-xsl";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/yelp-xsl/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "013z2ixx9kfrs6hq79qpil093xfbc12y1p0mvsh6lpala30iphya";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "yelp-xsl"; attrPath = "gnome3.yelp-xsl"; };
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool itstool libxml2 libxslt ];
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Yelp;
+ description = "Yelp's universal stylesheets for Mallard and DocBook";
+ maintainers = gnome3.maintainers;
+ license = [licenses.gpl2 licenses.lgpl2];
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix
new file mode 100644
index 00000000000..7e326dd1657
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, gettext, fetchurl, webkitgtk, pkgconfig, gtk3, glib
+, gnome3, sqlite
+, itstool, libxml2, libxslt, gst_all_1
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "yelp";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/yelp/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yrl96icmmrxvg7sxl519gzg9qb368cmzgrr9ddh181ignkxzx7f";
+ };
+
+ nativeBuildInputs = [ pkgconfig gettext itstool wrapGAppsHook ];
+ buildInputs = [
+ gtk3 glib webkitgtk sqlite
+ libxml2 libxslt gnome3.yelp-xsl
+ gnome3.adwaita-icon-theme
+ gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "yelp";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Yelp;
+ description = "The help viewer in Gnome";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix b/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix
new file mode 100644
index 00000000000..5023ffce6b9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, libxslt, gnome3, gtk3
+, gnome-doc-utils, intltool, libX11, which, itstool, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "zenity";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/zenity/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "15fdh8xfdhnwcynyh4byx3mrjxbyprqnwxzi7qn3g5wwaqryg1p7";
+ };
+
+ preBuild = ''
+ mkdir -p $out/include
+ '';
+
+ buildInputs = [ gtk3 libxml2 libxslt libX11 itstool ];
+
+ nativeBuildInputs = [ pkgconfig intltool gnome-doc-utils which wrapGAppsHook ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "zenity";
+ attrPath = "gnome3.zenity";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/default.nix b/nixpkgs/pkgs/desktops/gnome-3/default.nix
new file mode 100644
index 00000000000..370733798af
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/default.nix
@@ -0,0 +1,359 @@
+{ config, pkgs, lib }:
+
+lib.makeScope pkgs.newScope (self: with self; {
+ updateScript = callPackage ./update.nix { };
+
+ /* Remove packages of packagesToRemove from packages, based on their names
+
+ Type:
+ removePackagesByName :: [package] -> [package] -> [package]
+
+ Example:
+ removePackagesByName [ nautilus file-roller ] [ file-roller totem ]
+ => [ nautilus ]
+ */
+ removePackagesByName = packages: packagesToRemove:
+ let
+ pkgName = drv: (builtins.parseDrvName drv.name).name;
+ namesToRemove = map pkgName packagesToRemove;
+ in
+ lib.filter (x: !(builtins.elem (pkgName x) namesToRemove)) packages;
+
+ maintainers = with pkgs.lib.maintainers; [ lethalman jtojnar hedning worldofpeace ];
+
+ libsoup = pkgs.libsoup.override { gnomeSupport = true; };
+ libchamplain = pkgs.libchamplain.override { libsoup = libsoup; };
+ gnome3 = self // { recurseForDerivations = false; };
+ vala = pkgs.vala_0_44;
+ gegl_0_4 = pkgs.gegl_0_4.override { gtk = pkgs.gtk3; };
+
+# ISO installer
+# installerIso = callPackage ./installer.nix {};
+
+#### Core (http://ftp.acc.umu.se/pub/GNOME/core/)
+
+ adwaita-icon-theme = callPackage ./core/adwaita-icon-theme { };
+
+ baobab = callPackage ./core/baobab { };
+
+ caribou = callPackage ./core/caribou { };
+
+ dconf = callPackage ./core/dconf { };
+ dconf-editor = callPackage ./core/dconf-editor { };
+
+ empathy = callPackage ./core/empathy { };
+
+ epiphany = callPackage ./core/epiphany { };
+
+ evince = callPackage ./core/evince { }; # ToDo: dbus would prevent compilation, enable tests
+
+ evolution-data-server = callPackage ./core/evolution-data-server { };
+
+ gdm = callPackage ./core/gdm { };
+
+ gjs = callPackage ./core/gjs { };
+
+ gnome-backgrounds = callPackage ./core/gnome-backgrounds { };
+
+ gnome-bluetooth = callPackage ./core/gnome-bluetooth { };
+
+ gnome-color-manager = callPackage ./core/gnome-color-manager { };
+
+ gnome-contacts = callPackage ./core/gnome-contacts { };
+
+ gnome-control-center = callPackage ./core/gnome-control-center { };
+
+ gnome-calculator = callPackage ./core/gnome-calculator { };
+
+ gnome-common = callPackage ./core/gnome-common { };
+
+ gnome-desktop = callPackage ./core/gnome-desktop { };
+
+ gnome-dictionary = callPackage ./core/gnome-dictionary { };
+
+ gnome-disk-utility = callPackage ./core/gnome-disk-utility { };
+
+ gnome-font-viewer = callPackage ./core/gnome-font-viewer { };
+
+ gnome-keyring = callPackage ./core/gnome-keyring { };
+
+ libgnome-keyring = callPackage ./core/libgnome-keyring { };
+
+ gnome-online-miners = callPackage ./core/gnome-online-miners { };
+
+ gnome-remote-desktop = callPackage ./core/gnome-remote-desktop { };
+
+ gnome-session = callPackage ./core/gnome-session { };
+
+ gnome-shell = callPackage ./core/gnome-shell { };
+
+ gnome-shell-extensions = callPackage ./core/gnome-shell-extensions { };
+
+ gnome-screenshot = callPackage ./core/gnome-screenshot { };
+
+ gnome-settings-daemon = callPackage ./core/gnome-settings-daemon { };
+
+ gnome-software = callPackage ./core/gnome-software { };
+
+ gnome-system-monitor = callPackage ./core/gnome-system-monitor { };
+
+ gnome-terminal = callPackage ./core/gnome-terminal { };
+
+ gnome-themes-extra = callPackage ./core/gnome-themes-extra { };
+
+ gnome-user-docs = callPackage ./core/gnome-user-docs { };
+
+ gnome-user-share = callPackage ./core/gnome-user-share { };
+
+ gucharmap = callPackage ./core/gucharmap { };
+
+ gvfs = pkgs.gvfs.override { gnomeSupport = true; };
+
+ eog = callPackage ./core/eog { };
+
+ mutter = callPackage ./core/mutter { };
+
+ # Needed for elementary's gala and greeter until they get around to adapting to all the API breaking changes in libmutter-3
+ # A more detailed explaination can be seen here https://decathorpe.com/2018/09/04/call-for-help-pantheon-on-fedora-29.html
+ # See Also: https://github.com/elementary/gala/issues/303
+ mutter328 = callPackage ./core/mutter/3.28.nix { };
+
+ nautilus = callPackage ./core/nautilus { };
+
+ networkmanager-openvpn = pkgs.networkmanager-openvpn.override {
+ withGnome = true;
+ };
+
+ networkmanager-vpnc = pkgs.networkmanager-vpnc.override {
+ withGnome = true;
+ };
+
+ networkmanager-openconnect = pkgs.networkmanager-openconnect.override {
+ withGnome = true;
+ };
+
+ networkmanager-fortisslvpn = pkgs.networkmanager-fortisslvpn.override {
+ withGnome = true;
+ };
+
+ networkmanager-l2tp = pkgs.networkmanager-l2tp.override {
+ withGnome = true;
+ };
+
+ networkmanager-iodine = pkgs.networkmanager-iodine.override {
+ withGnome = true;
+ };
+
+ networkmanagerapplet = pkgs.networkmanagerapplet.override {
+ withGnome = true;
+ };
+
+ rygel = callPackage ./core/rygel { };
+
+ simple-scan = callPackage ./core/simple-scan { };
+
+ sushi = callPackage ./core/sushi { };
+
+ totem = callPackage ./core/totem { };
+
+ vino = callPackage ./core/vino { };
+
+ yelp = callPackage ./core/yelp { };
+
+ yelp-xsl = callPackage ./core/yelp-xsl { };
+
+ yelp-tools = callPackage ./core/yelp-tools { };
+
+ zenity = callPackage ./core/zenity { };
+
+
+#### Apps (http://ftp.acc.umu.se/pub/GNOME/apps/)
+
+ accerciser = callPackage ./apps/accerciser { };
+
+ cheese = callPackage ./apps/cheese { };
+
+ evolution = callPackage ./apps/evolution { };
+
+ file-roller = callPackage ./apps/file-roller { };
+
+ gedit = callPackage ./apps/gedit { };
+
+ ghex = callPackage ./apps/ghex { };
+
+ glade = callPackage ./apps/glade { };
+
+ gnome-books = callPackage ./apps/gnome-books { };
+
+ gnome-boxes = callPackage ./apps/gnome-boxes { };
+
+ gnome-calendar = callPackage ./apps/gnome-calendar { };
+
+ gnome-characters = callPackage ./apps/gnome-characters { };
+
+ gnome-clocks = callPackage ./apps/gnome-clocks { };
+
+ gnome-documents = callPackage ./apps/gnome-documents { };
+
+ gnome-getting-started-docs = callPackage ./apps/gnome-getting-started-docs { };
+
+ gnome-logs = callPackage ./apps/gnome-logs { };
+
+ gnome-maps = callPackage ./apps/gnome-maps { };
+
+ gnome-music = callPackage ./apps/gnome-music { };
+
+ gnome-nettool = callPackage ./apps/gnome-nettool { };
+
+ gnome-notes = callPackage ./apps/gnome-notes { };
+
+ gnome-power-manager = callPackage ./apps/gnome-power-manager { };
+
+ gnome-sound-recorder = callPackage ./apps/gnome-sound-recorder { };
+
+ gnome-todo = callPackage ./apps/gnome-todo {};
+
+ gnome-weather = callPackage ./apps/gnome-weather { };
+
+ nautilus-sendto = callPackage ./apps/nautilus-sendto { };
+
+ polari = callPackage ./apps/polari { };
+
+ seahorse = callPackage ./apps/seahorse { };
+
+ vinagre = callPackage ./apps/vinagre { };
+
+#### Dev http://ftp.gnome.org/pub/GNOME/devtools/
+
+ anjuta = callPackage ./devtools/anjuta { };
+
+ devhelp = callPackage ./devtools/devhelp { };
+
+ gnome-devel-docs = callPackage ./devtools/gnome-devel-docs { };
+
+#### Games
+
+ aisleriot = callPackage ./games/aisleriot { };
+
+ atomix = callPackage ./games/atomix { };
+
+ five-or-more = callPackage ./games/five-or-more { };
+
+ four-in-a-row = callPackage ./games/four-in-a-row { };
+
+ gnome-chess = callPackage ./games/gnome-chess { };
+
+ gnome-klotski = callPackage ./games/gnome-klotski { };
+
+ gnome-mahjongg = callPackage ./games/gnome-mahjongg { };
+
+ gnome-mines = callPackage ./games/gnome-mines { };
+
+ gnome-nibbles = callPackage ./games/gnome-nibbles { };
+
+ gnome-robots = callPackage ./games/gnome-robots { };
+
+ gnome-sudoku = callPackage ./games/gnome-sudoku { };
+
+ gnome-taquin = callPackage ./games/gnome-taquin { };
+
+ gnome-tetravex = callPackage ./games/gnome-tetravex { };
+
+ hitori = callPackage ./games/hitori { };
+
+ iagno = callPackage ./games/iagno { };
+
+ lightsoff = callPackage ./games/lightsoff { };
+
+ swell-foop = callPackage ./games/swell-foop { };
+
+ tali = callPackage ./games/tali { };
+
+ quadrapassel = callPackage ./games/quadrapassel { };
+
+#### Misc -- other packages on http://ftp.gnome.org/pub/GNOME/sources/
+
+ geary = callPackage ./misc/geary { };
+
+ gitg = callPackage ./misc/gitg { };
+
+ libgnome-games-support = callPackage ./misc/libgnome-games-support { };
+
+ gnome-applets = callPackage ./misc/gnome-applets { };
+
+ gnome-flashback = callPackage ./misc/gnome-flashback { };
+
+ gnome-panel = callPackage ./misc/gnome-panel { };
+
+ gnome-screensaver = callPackage ./misc/gnome-screensaver { };
+
+ gnome-tweaks = callPackage ./misc/gnome-tweaks { };
+
+ gpaste = callPackage ./misc/gpaste { };
+
+ metacity = callPackage ./misc/metacity { };
+
+ nautilus-python = callPackage ./misc/nautilus-python { };
+
+ gtkhtml = callPackage ./misc/gtkhtml { enchant = pkgs.enchant1; };
+
+ pomodoro = callPackage ./misc/pomodoro { };
+
+ gnome-autoar = callPackage ./misc/gnome-autoar { };
+
+ gnome-packagekit = callPackage ./misc/gnome-packagekit { };
+} // lib.optionalAttrs (config.allowAliases or true) {
+#### Legacy aliases
+
+ bijiben = gnome-notes; # added 2018-09-26
+ evolution_data_server = evolution-data-server; # added 2018-02-25
+ geocode_glib = pkgs.geocode-glib; # added 2018-02-25
+ glib_networking = pkgs.glib-networking; # added 2018-02-25
+ gnome_common = gnome-common; # added 2018-02-25
+ gnome_control_center = gnome-control-center; # added 2018-02-25
+ gnome_desktop = gnome-desktop; # added 2018-02-25
+ gnome_keyring = gnome-keyring; # added 2018-02-25
+ gnome_online_accounts = gnome-online-accounts; # added 2018-02-25
+ gnome_session = gnome-session; # added 2018-02-25
+ gnome_settings_daemon = gnome-settings-daemon; # added 2018-02-25
+ gnome_shell = gnome-shell; # added 2018-02-25
+ gnome_terminal = gnome-terminal; # added 2018-02-25
+ gnome-themes-standard = gnome-themes-extra; # added 2018-03-14
+ gnome_themes_standard = gnome-themes-standard; # added 2018-02-25
+ gnome-tweak-tool = gnome-tweaks; # added 2018-03-21
+ gsettings_desktop_schemas = gsettings-desktop-schemas; # added 2018-02-25
+ libgames-support = libgnome-games-support; # added 2018-03-14
+ libgnome_keyring = libgnome-keyring; # added 2018-02-25
+ inherit (pkgs) rarian; # added 2018-04-25
+ networkmanager_fortisslvpn = networkmanager-fortisslvpn; # added 2018-02-25
+ networkmanager_iodine = networkmanager-iodine; # added 2018-02-25
+ networkmanager_l2tp = networkmanager-l2tp; # added 2018-02-25
+ networkmanager_openconnect = networkmanager-openconnect; # added 2018-02-25
+ networkmanager_openvpn = networkmanager-openvpn; # added 2018-02-25
+ networkmanager_vpnc = networkmanager-vpnc; # added 2018-02-25
+ yelp_xsl = yelp-xsl; # added 2018-02-25
+ yelp_tools = yelp-tools; # added 2018-02-25
+
+ # added 2019-02-08
+ inherit (pkgs) atk glib gobject-introspection gspell webkitgtk gtk3 gtkmm3
+ libgtop libgudev libhttpseverywhere librsvg libsecret gdk_pixbuf gtksourceview gtksourceviewmm gtksourceview4
+ easytag meld orca rhythmbox shotwell gnome-usage
+ clutter clutter-gst clutter-gtk cogl gtk-vnc libdazzle libgda libgit2-glib libgxps libgdata libgepub libcroco libpeas libgee geocode-glib libgweather librest libzapojit libmediaart gfbgraph gexiv2 folks totem-pl-parser gcr gsound libgnomekbd vte vte_290 vte-ng gnome-menus gdl;
+ inherit (pkgs) gsettings-desktop-schemas; # added 2019-04-16
+ inherit (pkgs) gnome-video-effects; # added 2019-08-19
+ inherit (pkgs) gnome-online-accounts grilo grilo-plugins tracker tracker-miners gnome-photos; # added 2019-08-23
+ inherit (pkgs) glib-networking; # added 2019-09-02
+ inherit (pkgs) nemiver; # added 2019-09-09
+
+ defaultIconTheme = adwaita-icon-theme;
+ gtk = gtk3;
+ gtkmm = gtkmm3;
+ rest = librest;
+
+ pidgin-im-gnome-shell-extension = pkgs.gnomeExtensions.pidgin-im-integration; # added 2019-08-01
+
+ # added 2019-08-25
+ corePackages = throw "deprecated 2019-08-25: please use `services.gnome3.core-shell.enable`";
+ optionalPackages = throw "deprecated 2019-08-25: please use `services.gnome3.core-utilities.enable`";
+ gamesPackages = throw "deprecated 2019-08-25: please use `services.gnome3.games.enable`";
+})
diff --git a/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix b/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
new file mode 100644
index 00000000000..573259b7e7d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, flex, bison, libxml2, intltool,
+ gdl, libgda, gtksourceview, gsettings-desktop-schemas,
+ itstool, python3, ncurses, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ pname = "anjuta";
+ version = "3.28.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/anjuta/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0ya7ajai9rx9g597sr5wawr6l5pb2s34bbjdsbnx0lkrhnjv11xh";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "anjuta"; attrPath = "gnome3.anjuta"; };
+ };
+
+ enableParallelBuilding = true;
+
+ nativeBuildInputs = [
+ pkgconfig intltool itstool python3 makeWrapper
+ # Required by python3
+ ncurses
+ ];
+ buildInputs = [
+ flex bison gtk3 libxml2 gnome3.gjs gdl
+ libgda gtksourceview
+ gsettings-desktop-schemas
+ ];
+
+ preFixup = ''
+ wrapProgram $out/bin/anjuta \
+ --prefix XDG_DATA_DIRS : \
+ "$GSETTINGS_SCHEMAS_PATH"
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Software development studio";
+ homepage = http://anjuta.org/;
+ license = licenses.gpl2;
+ maintainers = with maintainers; [];
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix b/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
new file mode 100644
index 00000000000..23a58011e02
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, glib, amtk, appstream-glib, gobject-introspection, python3
+, webkitgtk, gettext, itstool, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "devhelp";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/devhelp/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "06sa83zggk29wcg75fl3gqh0rmi7cd3gsbk09a2z23r7vpy7xanq";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext itstool wrapGAppsHook appstream-glib gobject-introspection python3 ];
+ buildInputs = [
+ glib gtk3 webkitgtk amtk
+ gnome3.adwaita-icon-theme gsettings-desktop-schemas
+ ];
+
+ doCheck = true;
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "devhelp";
+ attrPath = "gnome3.devhelp";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "API documentation browser for GNOME";
+ homepage = https://wiki.gnome.org/Apps/Devhelp;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix b/nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
new file mode 100644
index 00000000000..81f63941729
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, gnome3, intltool, itstool, libxml2 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-devel-docs";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-devel-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0xqpgf975rws60qxilq635pblbpgwspyykgzxnb4awd9zrs5lbx0";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-devel-docs"; attrPath = "gnome3.gnome-devel-docs"; };
+ };
+
+ buildInputs = [ intltool itstool libxml2 ];
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/GNOME/gnome-devel-docs;
+ description = "Developer documentation for GNOME";
+ maintainers = gnome3.maintainers;
+ license = licenses.fdl12;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix
new file mode 100644
index 00000000000..6f289fd74d9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-appindicator";
+ version = "29";
+
+ src = fetchFromGitHub {
+ owner = "Ubuntu";
+ repo = "gnome-shell-extension-appindicator";
+ rev = "v${version}";
+ sha256 = "02cr6rhi3dfk49jcjm6vh7yx117bv5wqyvd34cyv1kzwzsla8v2i";
+ };
+
+ # This package has a Makefile, but it's used for building a zip for
+ # publication to extensions.gnome.org. Disable the build phase so
+ # installing doesn't build an unnecessary release.
+ dontBuild = true;
+
+ uuid = "appindicatorsupport@rgcjonas.gmail.com";
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp *.js $out/share/gnome-shell/extensions/${uuid}
+ cp -r interfaces-xml $out/share/gnome-shell/extensions/${uuid}
+ cp metadata.json $out/share/gnome-shell/extensions/${uuid}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "AppIndicator/KStatusNotifierItem support for GNOME Shell";
+ license = licenses.gpl2Plus;
+ maintainers = with maintainers; [ jonafato ];
+ platforms = gnome3.gnome-shell.meta.platforms;
+ homepage = https://github.com/Ubuntu/gnome-shell-extension-appindicator;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix
new file mode 100644
index 00000000000..b38f0aeba91
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitLab, glib, gettext, substituteAll, gnome-menus }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-arc-menu";
+ version = "31";
+
+ src = fetchFromGitLab {
+ owner = "LinxGem33";
+ repo = "Arc-Menu";
+ rev = "v${version}-stable";
+ sha256 = "124jgdy6mw76nrkq3f0y7qkhdm39wg273zifdvwbgpvirwzxbia1";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix_gmenu.patch;
+ gmenu_path = "${gnome-menus}/lib/girepository-1.0";
+ })
+ ];
+
+ buildInputs = [
+ glib gettext
+ ];
+
+ makeFlags = [ "INSTALL_BASE=$(out)/share/gnome-shell/extensions" ];
+
+ meta = with stdenv.lib; {
+ description = "Gnome shell extension designed to replace the standard menu found in Gnome 3";
+ license = licenses.gpl2Plus;
+ maintainers = with maintainers; [ dkabot ];
+ homepage = https://gitlab.com/LinxGem33/Arc-Menu;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch
new file mode 100644
index 00000000000..7f6b8489ea8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch
@@ -0,0 +1,12 @@
+--- a/extension.js
++++ b/extension.js
+@@ -29,6 +29,8 @@
+ * https://github.com/The-Panacea-Projects/Gnomenu
+ */
+
++
++imports.gi.GIRepository.Repository.prepend_search_path('@gmenu_path@');
+
+ // Import Libraries
+ const Main = imports.ui.main;
+
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix
new file mode 100644
index 00000000000..b7bde83915c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-battery-status";
+ version = "6";
+
+ src = fetchFromGitHub {
+ owner = "milliburn";
+ repo = "gnome-shell-extension-battery_status";
+ rev = "v${version}";
+ sha256 = "1w83h863mzffjnmk322xq90qf3y9dzay1w9yw5r0qnbsq1ljl8p4";
+ };
+
+ uuid = "battery_status@milliburn.github.com";
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions/
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Configurable lightweight battery charge indicator and autohider";
+ license = licenses.gpl2;
+ broken = true; # not compatable with latest GNOME
+ maintainers = with maintainers; [ jonafato ];
+ homepage = https://github.com/milliburn/gnome-shell-extension-battery_status;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix
new file mode 100644
index 00000000000..95a68505c7c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, glib, gettext, bash }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-caffeine";
+ version = "unstable-2019-04-02";
+
+ src = fetchFromGitHub {
+ owner = "eonpatapon";
+ repo = "gnome-shell-extension-caffeine";
+ rev = "a6b37dee108cddf50a0f0a19f0101854a75bf173";
+ sha256 = "1j3q12j36v97551sjb0c8qc8zr7a7gmxibygczryfdfmwjzp6icl";
+ };
+
+ uuid = "caffeine@patapon.info";
+
+ nativeBuildInputs = [
+ glib gettext
+ ];
+
+ buildPhase = ''
+ ${bash}/bin/bash ./update-locale.sh
+ glib-compile-schemas --strict --targetdir=caffeine@patapon.info/schemas/ caffeine@patapon.info/schemas
+ '';
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Fill the cup to inhibit auto suspend and screensaver";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ eperuffo ];
+ homepage = https://github.com/eonpatapon/gnome-shell-extension-caffeine;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix
new file mode 100644
index 00000000000..f04999a449c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix
@@ -0,0 +1,44 @@
+{stdenv, fetchurl, cmake, ninja, jq, python3, gnome3, wrapGAppsHook}:
+
+let
+ version = "10.1";
+
+ inherit (python3.pkgs) python pygobject3 requests;
+in stdenv.mkDerivation rec {
+ pname = "chrome-gnome-shell";
+ inherit version;
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/chrome-gnome-shell/${version}/${pname}-${version}.tar.xz";
+ sha256 = "0f54xyamm383ypbh0ndkza0pif6ljddg2f947p265fkqj3p4zban";
+ };
+
+ nativeBuildInputs = [ cmake ninja jq wrapGAppsHook ];
+ buildInputs = [ gnome3.gnome-shell python pygobject3 requests ];
+
+ preConfigure = ''
+ substituteInPlace CMakeLists.txt --replace "/etc" "$out/etc"
+ '';
+ # cmake setup hook changes /etc/opt into /var/empty
+ dontFixCmake = true;
+
+ cmakeFlags = [ "-DBUILD_EXTENSION=OFF" ];
+ wrapPrefixVariables = [ "PYTHONPATH" ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "chrome-gnome-shell";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell integration for Chrome";
+ homepage = https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome;
+ longDescription = ''
+ To use the integration, install the <link xlink:href="https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome/Installation">browser extension</link>, and then set <option>services.gnome3.chrome-gnome-shell.enable</option> to <literal>true</literal>.
+ '';
+ license = licenses.gpl3;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix
new file mode 100644
index 00000000000..0faadbcd2b6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-clipboard-indicator";
+ version = "30";
+
+ src = fetchFromGitHub {
+ owner = "Tudmotu";
+ repo = "gnome-shell-extension-clipboard-indicator";
+ rev = "v${version}";
+ sha256 = "1fmgmxv2y678bj0kmymkgnnglcpqk8ww053izlq46xg7s27jjdf6";
+ };
+
+ uuid = "clipboard-indicator@tudmotu.com";
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r * $out/share/gnome-shell/extensions/${uuid}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Adds a clipboard indicator to the top panel and saves clipboard history";
+ license = licenses.mit;
+ maintainers = with maintainers; [ jonafato ];
+ platforms = platforms.linux;
+ homepage = https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix
new file mode 100644
index 00000000000..e80149e5005
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-dash-to-dock";
+ version = "66";
+
+ src = fetchFromGitHub {
+ owner = "micheleg";
+ repo = "dash-to-dock";
+ rev = "extensions.gnome.org-v" + version;
+ sha256 = "04krl6rxlp1qc97psraf2kwin7h0mx4c7pnfpi7vhplmvasrwkfh";
+ };
+
+ nativeBuildInputs = [
+ glib gettext
+ ];
+
+ makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+ meta = with stdenv.lib; {
+ description = "A dock for the Gnome Shell";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ eperuffo ];
+ homepage = https://micheleg.github.io/dash-to-dock/;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix
new file mode 100644
index 00000000000..f7f189e23bd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-dash-to-panel";
+ version = "23";
+
+ src = fetchFromGitHub {
+ owner = "home-sweet-gnome";
+ repo = "dash-to-panel";
+ rev = "v${version}";
+ sha256 = "12smkz3clcvgicr0pdc0fk6igf82nw4hzih1ywv9q43xkqh9w1i6";
+ };
+
+ buildInputs = [
+ glib gettext
+ ];
+
+ makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+ meta = with stdenv.lib; {
+ description = "An icon taskbar for Gnome Shell";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ mounium ];
+ homepage = https://github.com/jderose9/dash-to-panel;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
new file mode 100644
index 00000000000..cff0db665bb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
@@ -0,0 +1,91 @@
+{ stdenv, fetchFromGitHub, substituteAll, python3, openssl, folks, gsound
+, meson, ninja, libxml2, pkgconfig, gobject-introspection, wrapGAppsHook
+, glib, gtk3, at-spi2-core, upower, openssh, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-gsconnect";
+ version = "23";
+
+ src = fetchFromGitHub {
+ owner = "andyholmes";
+ repo = "gnome-shell-extension-gsconnect";
+ rev = "v${version}";
+ sha256 = "011asrhkly9zhvnng2mh9v06yw39fx244pmqz5yk9rd9m4c32xid";
+ };
+
+ patches = [
+ # Make typelibs available in the extension
+ (substituteAll {
+ src = ./fix-paths.patch;
+ gapplication = "${glib.bin}/bin/gapplication";
+ mutter_gsettings_path = glib.getSchemaPath gnome3.mutter;
+ })
+ ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig
+ gobject-introspection # for locating typelibs
+ wrapGAppsHook # for wrapping daemons
+ libxml2 # xmllint
+ ];
+
+ buildInputs = [
+ (python3.withPackages (pkgs: [ python3.pkgs.pygobject3 ])) # for folks.py
+ glib # libgobject
+ gtk3
+ at-spi2-core # atspi
+ folks # libfolks
+ gnome3.nautilus # TODO: this contaminates the package with nautilus and gnome-autoar typelibs but it is only needed for the extension
+ gnome3.nautilus-python
+ gsound
+ upower
+ gnome3.caribou
+ gnome3.gjs # for running daemon
+ gnome3.evolution-data-server # folks.py requires org.gnome.Evolution.DefaultSources gsettings; TODO: hardcode the schema path to the library (similarly to https://github.com/NixOS/nixpkgs/issues/47226)
+ ];
+
+ mesonFlags = [
+ "-Dgnome_shell_libdir=${gnome3.gnome-shell}/lib"
+ "-Dgsettings_schemadir=${glib.makeSchemaPath (placeholder "out") "${pname}-${version}"}"
+ "-Dchrome_nmhdir=${placeholder "out"}/etc/opt/chrome/native-messaging-hosts"
+ "-Dchromium_nmhdir=${placeholder "out"}/etc/chromium/native-messaging-hosts"
+ "-Dopenssl_path=${openssl}/bin/openssl"
+ "-Dsshadd_path=${openssh}/bin/ssh-add"
+ "-Dsshkeygen_path=${openssh}/bin/ssh-keygen"
+ "-Dpost_install=true"
+ ];
+
+ postPatch = ''
+ patchShebangs meson/nmh.sh
+ patchShebangs meson/post-install.sh
+
+ # TODO: do not include every typelib everywhere
+ # for example, we definitely do not need nautilus
+ for file in src/extension.js src/prefs.js; do
+ substituteInPlace "$file" \
+ --subst-var-by typelibPath "$GI_TYPELIB_PATH"
+ done
+ '';
+
+ preFixup = ''
+ # TODO: figure out why folks GIR does not contain shared-library attribute
+ # https://github.com/NixOS/nixpkgs/issues/47226
+ gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ folks ]}")
+ '';
+
+ postFixup = ''
+ # Let’s wrap the daemons
+ for file in $out/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/{{daemon,nativeMessagingHost}.js,components/folks.py}; do
+ echo "Wrapping program ''${file}"
+ wrapProgram "''${file}" "''${gappsWrapperArgs[@]}"
+ done
+ '';
+
+ meta = with stdenv.lib; {
+ description = "KDE Connect implementation for Gnome Shell";
+ homepage = https://github.com/andyholmes/gnome-shell-extension-gsconnect/wiki;
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ etu ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch
new file mode 100644
index 00000000000..b32d0af3272
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch
@@ -0,0 +1,44 @@
+--- a/data/org.gnome.Shell.Extensions.GSConnect.desktop
++++ b/data/org.gnome.Shell.Extensions.GSConnect.desktop
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Type=Application
+ Name=GSConnect
+-Exec=gapplication launch org.gnome.Shell.Extensions.GSConnect %U
++Exec=@gapplication@ launch org.gnome.Shell.Extensions.GSConnect %U
+ Terminal=false
+ NoDisplay=true
+ Icon=org.gnome.Shell.Extensions.GSConnect
+--- a/src/extension.js
++++ b/src/extension.js
+@@ -1,5 +1,7 @@
+ 'use strict';
+
++'@typelibPath@'.split(':').forEach(path => imports.gi.GIRepository.Repository.prepend_search_path(path));
++
+ const Gio = imports.gi.Gio;
+ const GLib = imports.gi.GLib;
+ const Gtk = imports.gi.Gtk;
+--- a/src/prefs.js
++++ b/src/prefs.js
+@@ -1,5 +1,7 @@
+ 'use strict';
+
++'@typelibPath@'.split(':').forEach(path => imports.gi.GIRepository.Repository.prepend_search_path(path));
++
+ const Gio = imports.gi.Gio;
+ const GLib = imports.gi.GLib;
+ const Gtk = imports.gi.Gtk;
+--- a/src/service/__init__.js
++++ b/src/service/__init__.js
+@@ -600,7 +600,9 @@
+ /**
+ * Convenience functions for saving/restoring window geometry
+ */
+-const _mutter = new Gio.Settings({schema_id: 'org.gnome.mutter'});
++const _schema_source = Gio.SettingsSchemaSource.new_from_directory('@mutter_gsettings_path@', Gio.SettingsSchemaSource.get_default(), true);
++const _schema = _schema_source.lookup('org.gnome.mutter', false);
++const _mutter = new Gio.Settings({settings_schema: _schema});
+
+ Gtk.Window.prototype.restore_geometry = function() {
+ let [width, height] = this.settings.get_value('window-size').deep_unpack();
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix
new file mode 100644
index 00000000000..8214300a531
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-icon-hider";
+ version = "23";
+
+ src = fetchFromGitHub {
+ owner = "ikalnytskyi";
+ repo = "gnome-shell-extension-icon-hider";
+ rev = "v${version}";
+ sha256 = "18c8zkdrmdbghqqz7b450vhgpykgz25mgigwn2nggcb2lxmvm9ks";
+ };
+
+ uuid = "icon-hider@kalnitsky.org";
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Icon Hider is a GNOME Shell extension for managing status area items";
+ license = licenses.bsd3;
+ maintainers = with maintainers; [ jonafato ];
+ platforms = gnome3.gnome-shell.meta.platforms;
+ homepage = https://github.com/ikalnytskyi/gnome-shell-extension-icon-hider;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience.nix
new file mode 100644
index 00000000000..b36f3489b57
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-impatience";
+ version = "0.4.5";
+
+ src = fetchFromGitHub {
+ owner = "timbertson";
+ repo = "gnome-shell-impatience";
+ rev = "version-${version}";
+ sha256 = "0kvdhlz41fjyqdgcfw6mrr9nali6wg2qwji3dvykzfi0aypljzpx";
+ };
+
+ buildInputs = [
+ glib
+ ];
+
+ buildPhase = ''
+ make schemas
+ '';
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r impatience $out/share/gnome-shell/extensions/${uuid}
+ '';
+
+ uuid = "impatience@gfxmonk.net";
+
+ meta = with stdenv.lib; {
+ description = "Speed up builtin gnome-shell animations";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ aneeshusa timbertson tiramiseb ];
+ homepage = http://gfxmonk.net/dist/0install/gnome-shell-impatience.xml;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/mediaplayer/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/mediaplayer/default.nix
new file mode 100644
index 00000000000..10175719e46
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/mediaplayer/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, glib, meson, gettext, ninja, python3 }:
+
+stdenv.mkDerivation {
+ pname = "gnome-shell-extensions-mediaplayer";
+ version = "unstable-2019-03-21";
+
+ src = fetchFromGitHub {
+ owner = "JasonLG1979";
+ repo = "gnome-shell-extensions-mediaplayer";
+ rev = "b382c98481fa421501684e2ff3eafc53971ef22b";
+ sha256 = "01z2dml8dvl5sljw62g7x19mz02dz1g4gkmyp0h5bx49djcw1nnh";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ python3
+ ];
+ buildInputs = [
+ glib
+ gettext
+ ];
+
+ postPatch = ''
+ rm build
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Control MPRIS Version 2 Capable Media Players";
+ license = licenses.gpl2Plus;
+ homepage = https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/;
+ maintainers = with maintainers; [ tiramiseb ];
+ };
+}
+
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix
new file mode 100644
index 00000000000..f9f72bd77f0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, substituteAll, glib, gettext, xorg }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-no-title-bar";
+ version = "9";
+
+ src = fetchFromGitHub {
+ owner = "franglais125";
+ repo = "no-title-bar";
+ rev = "v${version}";
+ sha256 = "02zm61fg40r005fn2rvgrbsz2hbcsmp2hkhyilqbmpilw35y0nbq";
+ };
+
+ nativeBuildInputs = [
+ glib gettext
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ xprop = "${xorg.xprop}/bin/xprop";
+ xwininfo = "${xorg.xwininfo}/bin/xwininfo";
+ })
+ ];
+
+ makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+ meta = with stdenv.lib; {
+ description = "Integrates maximized windows with the top panel";
+ homepage = https://github.com/franglais125/no-title-bar;
+ license = licenses.gpl2;
+ broken = true; # https://github.com/franglais125/no-title-bar/issues/114
+ maintainers = with maintainers; [ jonafato svsdep ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch
new file mode 100644
index 00000000000..9a53d63860d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch
@@ -0,0 +1,56 @@
+--- a/decoration.js
++++ b/decoration.js
+@@ -181,7 +181,7 @@
+ let act = win.get_compositor_private();
+ let xwindow = act && act['x-window'];
+ if (xwindow) {
+- let xwininfo = GLib.spawn_command_line_sync('xwininfo -children -id 0x%x'.format(xwindow));
++ let xwininfo = GLib.spawn_command_line_sync('@xwininfo@ -children -id 0x%x'.format(xwindow));
+ if (xwininfo[0]) {
+ let str = xwininfo[1].toString();
+
+@@ -207,7 +207,7 @@
+ // Try enumerating all available windows and match the title. Note that this
+ // may be necessary if the title contains special characters and `x-window`
+ // is not available.
+- let result = GLib.spawn_command_line_sync('xprop -root _NET_CLIENT_LIST');
++ let result = GLib.spawn_command_line_sync('@xprop@ -root _NET_CLIENT_LIST');
+ if (result[0]) {
+ let str = result[1].toString();
+
+@@ -218,7 +218,7 @@
+
+ // For each window ID, check if the title matches the desired title.
+ for (var i = 0; i < windowList.length; ++i) {
+- let cmd = 'xprop -id "' + windowList[i] + '" _NET_WM_NAME _NO_TITLE_BAR_ORIGINAL_STATE';
++ let cmd = '@xprop@ -id "' + windowList[i] + '" _NET_WM_NAME _NO_TITLE_BAR_ORIGINAL_STATE';
+ let result = GLib.spawn_command_line_sync(cmd);
+
+ if (result[0]) {
+@@ -258,7 +258,7 @@
+ }
+
+ let id = this._guessWindowXID(win);
+- let cmd = 'xprop -id ' + id;
++ let cmd = '@xprop@ -id ' + id;
+
+ let xprops = GLib.spawn_command_line_sync(cmd);
+ if (!xprops[0]) {
+@@ -277,7 +277,7 @@
+ m = str.match(/^_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED(\(CARDINAL\))? = ([0-9]+)$/m);
+ if (m) {
+ let state = !!parseInt(m[2]);
+- cmd = ['xprop', '-id', id,
++ cmd = ['@xprop@', '-id', id,
+ '-f', '_NO_TITLE_BAR_ORIGINAL_STATE', '32c',
+ '-set', '_NO_TITLE_BAR_ORIGINAL_STATE',
+ (state ? '0x1' : '0x0')];
+@@ -358,7 +358,7 @@
+ let winXID = this._guessWindowXID(win);
+ if (winXID == null)
+ return;
+- let cmd = ['xprop', '-id', winXID,
++ let cmd = ['@xprop@', '-id', winXID,
+ '-f', '_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED', '32c',
+ '-set', '_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED',
+ (hide ? '0x1' : '0x0')];
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/nohotcorner/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/nohotcorner/default.nix
new file mode 100644
index 00000000000..e2b5288e886
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/nohotcorner/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-nohotcorner";
+ version = "19.0";
+
+ src = fetchFromGitHub {
+ owner = "HROMANO";
+ repo = "nohotcorner";
+ rev = "v${version}";
+ sha256 = "059n4gyz7d686hknaifyjax8gygrda1xab5m15a09p98jdrdfdhi";
+ };
+
+ # Taken from the extension download link at
+ # https://extensions.gnome.org/extension/118/no-topleft-hot-corner/
+ uuid = "nohotcorner@azuri.free.fr";
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp extension.js $out/share/gnome-shell/extensions/${uuid}
+ cp metadata.json $out/share/gnome-shell/extensions/${uuid}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Disables the top left hot corner";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ jonafato ];
+ homepage = https://github.com/HROMANO/nohotcorner;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix
new file mode 100644
index 00000000000..6f1cc3df409
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-pidgin-im-integration";
+ version = "32";
+
+ src = fetchFromGitHub {
+ owner = "muffinmad";
+ repo = "pidgin-im-gnome-shell-extension";
+ rev = "v${version}";
+ sha256 = "1jyg8r0s1v83sgg6y0jbsj2v37mglh8rvd8vi27fxnjq9xmg8kpc";
+ };
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ installPhase = ''
+ share_dir="$prefix/share"
+ extensions_dir="$share_dir/gnome-shell/extensions/pidgin@muffinmad"
+ mkdir -p "$extensions_dir"
+ mv *.js metadata.json dbus.xml schemas locale "$extensions_dir"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/muffinmad/pidgin-im-gnome-shell-extension;
+ description = "Make Pidgin IM conversations appear in the Gnome Shell message tray";
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix
new file mode 100644
index 00000000000..d9ea670db09
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-remove-dropdown-arrows";
+ version = "11";
+
+ src = fetchFromGitHub {
+ owner = "mpdeimos";
+ repo = "gnome-shell-remove-dropdown-arrows";
+ rev = "version/${version}";
+ sha256 = "1g99r9bpjdhab3xj74wkl40gdnaf2w51kswcr8mi6bq72n4wjxwh";
+ };
+
+ # This package has a Makefile, but it's used for publishing and linting, not
+ # for building. Disable the build phase so installing doesn't attempt to
+ # publish the extension.
+ dontBuild = true;
+
+ uuid = "remove-dropdown-arrows@mpdeimos.com";
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp extension.js $out/share/gnome-shell/extensions/${uuid}
+ cp metadata.json $out/share/gnome-shell/extensions/${uuid}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Remove dropdown arrows from GNOME Shell Menus";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ jonafato ];
+ homepage = https://github.com/mpdeimos/gnome-shell-remove-dropdown-arrows;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix
new file mode 100644
index 00000000000..33c127f449b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-sound-output-device-chooser";
+ version = "unstable-2019-04-01";
+
+ src = fetchFromGitHub {
+ owner = "kgshank";
+ repo = "gse-sound-output-device-chooser";
+ rev = "37098909a50bafe2f2538819f988cb2327ed7c60";
+ sha256 = "09sbby8zi9xn21lbdry57bp1vwgd5c73anvqpw9css3x2ryda5li";
+ };
+
+ dontBuild = true;
+
+ uuid = "sound-output-device-chooser@kgshank.net";
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ '';
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell extension adding audio device chooser to panel";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ jtojnar ];
+ homepage = https://github.com/kgshank/gse-sound-output-device-chooser;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix
new file mode 100644
index 00000000000..13b2d6a1db4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, substituteAll, fetchFromGitHub, glib, glib-networking, libgtop }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-system-monitor";
+ version = "38";
+
+ src = fetchFromGitHub {
+ owner = "paradoxxxzero";
+ repo = "gnome-shell-system-monitor-applet";
+ rev = "v${version}";
+ sha256 = "1sdj2kxb418mgq44a6lf6jic33wlfbnn3ja61igmx0jj1530iknv";
+ };
+
+ buildInputs = [
+ glib
+ glib-networking
+ libgtop
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./paths_and_nonexisting_dirs.patch;
+ gtop_path = "${libgtop}/lib/girepository-1.0";
+ glib_net_path = "${glib-networking}/lib/girepository-1.0";
+ })
+ ];
+
+ buildPhase = ''
+ glib-compile-schemas --targetdir=${uuid}/schemas ${uuid}/schemas
+ '';
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ '';
+
+ uuid = "system-monitor@paradoxxx.zero.gmail.com";
+
+ meta = with stdenv.lib; {
+ description = "Display system informations in gnome shell status bar";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ aneeshusa tiramiseb ];
+ homepage = https://github.com/paradoxxxzero/gnome-shell-system-monitor-applet;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch
new file mode 100644
index 00000000000..82e3d7c541b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch
@@ -0,0 +1,23 @@
+diff --git a/system-monitor@paradoxxx.zero.gmail.com/extension.js b/system-monitor@paradoxxx.zero.gmail.com/extension.js
+index b4b7f15..d139135 100644
+--- a/system-monitor@paradoxxx.zero.gmail.com/extension.js
++++ b/system-monitor@paradoxxx.zero.gmail.com/extension.js
+@@ -18,6 +18,9 @@
+
+ // Author: Florian Mounier aka paradoxxxzero
+
++imports.gi.GIRepository.Repository.prepend_search_path('@gtop_path@');
++imports.gi.GIRepository.Repository.prepend_search_path('@glib_net_path@');
++
+ /* Ugly. This is here so that we don't crash old libnm-glib based shells unnecessarily
+ * by loading the new libnm.so. Should go away eventually */
+ const libnm_glib = imports.gi.GIRepository.Repository.get_default().is_registered("NMClient", "1.0");
+@@ -386,7 +389,7 @@ const smMountsMonitor = new Lang.Class({
+ connected: false,
+ _init: function () {
+ this._volumeMonitor = Gio.VolumeMonitor.get();
+- let sys_mounts = ['/home', '/tmp', '/boot', '/usr', '/usr/local'];
++ let sys_mounts = ['/home', '/tmp', '/boot'];
+ this.base_mounts = ['/'];
+ sys_mounts.forEach(Lang.bind(this, function (sMount) {
+ if (this.is_sys_mount(sMount + '/')) {
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix
new file mode 100644
index 00000000000..90be6aed1d7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, substituteAll, fetchFromGitHub, taskwarrior, gettext, runtimeShell }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-taskwhisperer";
+ version = "12";
+
+ src = fetchFromGitHub {
+ owner = "cinatic";
+ repo = "taskwhisperer";
+ rev = "v${version}";
+ sha256 = "187p6p498dd258avsfqqsm322g58y75pc2wbhb4jpmm9insqm1bj";
+ };
+
+ nativeBuildInputs = [
+ gettext
+ ];
+
+ buildInputs = [
+ taskwarrior
+ ];
+
+ uuid = "taskwhisperer-extension@infinicode.de";
+
+ makeFlags = [
+ "INSTALLBASE=${placeholder "out"}/share/gnome-shell/extensions"
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ task = "${taskwarrior}/bin/task";
+ shell = runtimeShell;
+ })
+ ];
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell TaskWarrior GUI";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ jonafato ];
+ homepage = https://github.com/cinatic/taskwhisperer;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch
new file mode 100644
index 00000000000..2ea54f4b089
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch
@@ -0,0 +1,99 @@
+diff --git a/taskwhisperer-extension@infinicode.de/extra/create.sh b/taskwhisperer-extension@infinicode.de/extra/create.sh
+index a69e369..35d5ea1 100755
+--- a/taskwhisperer-extension@infinicode.de/extra/create.sh
++++ b/taskwhisperer-extension@infinicode.de/extra/create.sh
+@@ -1 +1 @@
+-bash -c "task add $1"
++bash -c "@task@ add $1"
+diff --git a/taskwhisperer-extension@infinicode.de/extra/modify.sh b/taskwhisperer-extension@infinicode.de/extra/modify.sh
+index 7964a26..8edd21b 100755
+--- a/taskwhisperer-extension@infinicode.de/extra/modify.sh
++++ b/taskwhisperer-extension@infinicode.de/extra/modify.sh
+@@ -1 +1 @@
+-bash -c "task $1 modify $2"
++bash -c "@task@ $1 modify $2"
+diff --git a/taskwhisperer-extension@infinicode.de/taskService.js b/taskwhisperer-extension@infinicode.de/taskService.js
+index ead7a12..aa36db4 100644
+--- a/taskwhisperer-extension@infinicode.de/taskService.js
++++ b/taskwhisperer-extension@infinicode.de/taskService.js
+@@ -182,7 +182,7 @@ const TaskService = class TaskService {
+
+ let project = projectName ? "project:" + projectName : "";
+
+- let command = ['task', 'rc.json.array=on', status, project, 'export'];
++ let command = ['@task@', 'rc.json.array=on', status, project, 'export'];
+ let reader = new SpawnReader.SpawnReader();
+
+ let buffer = "";
+@@ -220,7 +220,7 @@ const TaskService = class TaskService {
+ break;
+ }
+
+- let shellProc = Gio.Subprocess.new(['task', status, 'projects'], Gio.SubprocessFlags.STDOUT_PIPE);
++ let shellProc = Gio.Subprocess.new(['@task@', status, 'projects'], Gio.SubprocessFlags.STDOUT_PIPE);
+
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+@@ -261,7 +261,7 @@ const TaskService = class TaskService {
+ return;
+ }
+
+- let shellProc = Gio.Subprocess.new(['task', taskID.toString(), 'done'], Gio.SubprocessFlags.STDOUT_PIPE);
++ let shellProc = Gio.Subprocess.new(['@task@', taskID.toString(), 'done'], Gio.SubprocessFlags.STDOUT_PIPE);
+
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+@@ -290,7 +290,7 @@ const TaskService = class TaskService {
+ return;
+ }
+
+- let shellProc = Gio.Subprocess.new(['task', 'modify', taskID.toString(), 'status:pending'], Gio.SubprocessFlags.STDOUT_PIPE);
++ let shellProc = Gio.Subprocess.new(['@task@', 'modify', taskID.toString(), 'status:pending'], Gio.SubprocessFlags.STDOUT_PIPE);
+
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+@@ -318,7 +318,7 @@ const TaskService = class TaskService {
+ if (!taskID) {
+ return;
+ }
+- let shellProc = Gio.Subprocess.new(['task', taskID.toString(), 'start'], Gio.SubprocessFlags.STDOUT_PIPE);
++ let shellProc = Gio.Subprocess.new(['@task@', taskID.toString(), 'start'], Gio.SubprocessFlags.STDOUT_PIPE);
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+ shellProc.wait_finish(result);
+@@ -344,7 +344,7 @@ const TaskService = class TaskService {
+ if (!taskID) {
+ return;
+ }
+- let shellProc = Gio.Subprocess.new(['task', taskID.toString(), 'stop'], Gio.SubprocessFlags.STDOUT_PIPE);
++ let shellProc = Gio.Subprocess.new(['@task@', taskID.toString(), 'stop'], Gio.SubprocessFlags.STDOUT_PIPE);
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+ shellProc.wait_finish(result);
+@@ -374,7 +374,7 @@ const TaskService = class TaskService {
+ // FIXME: Gio.Subprocess: due to only passing string vector is allowed, it's not possible to directly pass the
+ // input of the user to subprocess (why & how, if you can answer then please send msg to fh@infinicode.de)
+ // bypassing problem with own shell script
+- let shellProc = Gio.Subprocess.new(['/bin/sh', EXTENSIONDIR + '/extra/modify.sh', taskID.toString(), params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
++ let shellProc = Gio.Subprocess.new(['@shell@', EXTENSIONDIR + '/extra/modify.sh', taskID.toString(), params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
+
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+@@ -403,7 +403,7 @@ const TaskService = class TaskService {
+ // FIXME: Gio.Subprocess: due to only passing string vector is allowed, it's not possible to directly pass the
+ // input of the user to subprocess (why & how, if you can answer then please send msg to fh@infinicode.de)
+ // bypassing problem with own shell script
+- let shellProc = Gio.Subprocess.new(['/bin/sh', EXTENSIONDIR + '/extra/create.sh', params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
++ let shellProc = Gio.Subprocess.new(['@shell@', EXTENSIONDIR + '/extra/create.sh', params], Gio.SubprocessFlags.STDOUT_PIPE + Gio.SubprocessFlags.STDERR_MERGE);
+
+ shellProc.wait_async(null, function (obj, result) {
+ let shellProcExited = true;
+@@ -432,7 +432,7 @@ const TaskService = class TaskService {
+ let shellProc;
+
+ try {
+- shellProc = Gio.Subprocess.new(['task', 'sync'], Gio.SubprocessFlags.STDOUT_PIPE);
++ shellProc = Gio.Subprocess.new(['@task@', 'sync'], Gio.SubprocessFlags.STDOUT_PIPE);
+ } catch (err) {
+ onError(err);
+ return;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix
new file mode 100644
index 00000000000..293918bd2b1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, glib, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-tilingnome";
+ version = "unstable-2019-01-18";
+
+ src = fetchFromGitHub {
+ owner = "rliang";
+ repo = pname;
+ rev = "bd4fb8c19f7a6282b38724b30e62645143390226";
+ sha256 = "1y4s4n88gdkpvgd3v3dg0181ccyhlixbvkx3bwyvdxyyyxbqibid";
+ };
+
+ nativeBuildInputs = [ glib ];
+
+ buildPhase = ''
+ glib-compile-schemas .
+ '';
+
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r * $out/share/gnome-shell/extensions/${uuid}/
+ '';
+
+ uuid = "tilingnome@rliang.github.com";
+
+ meta = with stdenv.lib; {
+ description = "Tiling window management for GNOME Shell";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ benley ];
+ homepage = https://github.com/rliang/gnome-shell-extension-tilingnome;
+ platforms = gnome3.gnome-shell.meta.platforms;
+ broken = lib.versionAtLeast gnome3.gnome-shell.version "3.31";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix
new file mode 100644
index 00000000000..f841ef2403d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-timepp";
+ version = "unstable-2019-03-30";
+
+ src = fetchFromGitHub {
+ owner = "zagortenay333";
+ repo = "timepp__gnome";
+ rev = "f90fb5573b37ac89fb57bf62e07d6d3bdb6a2c63";
+ sha256 = "0p6rsbm6lf61vzly775qkwc2rcjjl38bkqdxnv4sccqmw2wwclnp";
+ };
+
+ uuid = "timepp@zagortenay333";
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r . $out/share/gnome-shell/extensions/${uuid}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A todo.txt manager, time tracker, timer, stopwatch, pomodoro, and alarms gnome-shell extension.";
+ homepage = https://github.com/zagortenay333/timepp__gnome;
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ svsdep ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix
new file mode 100644
index 00000000000..f0f6279fe2e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-topicons-plus";
+ version = "22";
+
+ src = fetchFromGitHub {
+ owner = "phocean";
+ repo = "TopIcons-plus";
+ rev = "v${version}";
+ sha256 = "196s1gdir52gbc444pzrb5l7gn5xr5vqk5ajqaiqryqlmp3i8vil";
+ };
+
+ buildInputs = [ glib ];
+
+ nativeBuildInputs = [ gettext ];
+
+ makeFlags = [ "INSTALL_PATH=$(out)/share/gnome-shell/extensions" ];
+
+ meta = with stdenv.lib; {
+ description = "Brings all icons back to the top panel, so that it's easier to keep track of apps running in the backround";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ eperuffo ];
+ homepage = https://github.com/phocean/TopIcons-plus;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/volume-mixer.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/volume-mixer.nix
new file mode 100644
index 00000000000..072d31b84fe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/volume-mixer.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-volume-mixer";
+ version = "844ed80ad448855d8f6218847183a80474b523c7";
+
+ src = fetchFromGitHub {
+ owner = "aleho";
+ repo = "gnome-shell-volume-mixer";
+ rev = version;
+ sha256 = "1vcj2spbymhdi1nazvhldvcfgad23r3h7f0ihh4nianbxn7hjs9w";
+ };
+
+ buildInputs = [
+ glib
+ ];
+
+ buildPhase = ''
+ glib-compile-schemas --targetdir=${uuid}/schemas ${uuid}/schemas
+ '';
+
+ installPhase = ''
+ cp -r ${uuid} $out
+ '';
+
+ uuid = "shell-volume-mixer@derhofbauer.at";
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell Extension allowing separate configuration of PulseAudio devices";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ aneeshusa ];
+ homepage = https://github.com/aleho/gnome-shell-volume-mixer;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix
new file mode 100644
index 00000000000..7d5de1062b1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-window-corner-preview";
+ version = "unstable-2019-04-03";
+
+ src = fetchFromGitHub {
+ owner = "medenagan";
+ repo = "window-corner-preview";
+ rev = "a95bb1389d94474efab7509aac592fb58fff6006";
+ sha256 = "03v18j9l0fb64xrg3swf1vcgl0kpgwjlp8ddn068bpvghrsvgfah";
+ };
+
+ dontBuild = true;
+
+ uuid = "window-corner-preview@fabiomereu.it";
+ installPhase = ''
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ '';
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell extension showing a video preview on the corner of the screen";
+ license = licenses.mit;
+ maintainers = with maintainers; [ jtojnar ];
+ homepage = https://github.com/medenagan/window-corner-preview;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-grid.nix b/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-grid.nix
new file mode 100644
index 00000000000..811e9911f62
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-grid.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-workspace-grid";
+ version = "0f3a430e7d04bb5465a17c1225aab0f574426d6b";
+
+ src = fetchFromGitHub {
+ owner = "zakkak";
+ repo = "workspace-grid-gnome-shell-extension";
+ rev = version;
+ sha256 = "0503b7lmydrbblfvf9b56pv5hpmykzgyc6v8y99rckg58h2jhs69";
+ };
+
+ buildInputs = [
+ glib
+ ];
+
+ installPhase = ''
+ cp -r ${uuid} $out
+ '';
+
+ uuid = "workspace-grid@mathematical.coffee.gmail.com";
+
+ meta = with stdenv.lib; {
+ description = "Arranges workspaces in a configurable grid";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ aneeshusa ];
+ homepage = https://github.com/zakkak/workspace-grid-gnome-shell-extension;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py b/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py
new file mode 100644
index 00000000000..b0359f79969
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py
@@ -0,0 +1,60 @@
+import argparse
+import json
+import requests
+import sys
+
+def version_to_list(version):
+ return list(map(int, version.split('.')))
+
+def odd_unstable(version_str, selected):
+ version = version_to_list(version_str)
+ if len(version) < 2:
+ return True
+
+ even = version[1] % 2 == 0
+ prerelease = (version[1] >= 90 and version[1] < 100) or (version[1] >= 900 and version[1] < 1000)
+ stable = even and not prerelease
+ if selected == 'stable':
+ return stable
+ else:
+ return True
+
+def no_policy(version, selected):
+ return True
+
+version_policies = {
+ 'odd-unstable': odd_unstable,
+ 'none': no_policy,
+}
+
+def make_version_policy(version_predicate, selected):
+ return lambda version: version_predicate(version, selected)
+
+parser = argparse.ArgumentParser(description='Find latest version for a GNOME package by crawling their release server.')
+parser.add_argument('package-name', help='Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.')
+parser.add_argument('version-policy', help='Policy determining which versions are considered stable. For most GNOME packages, odd minor versions are unstable but there are exceptions.', choices=version_policies.keys(), nargs='?', default='odd-unstable')
+parser.add_argument('requested-release', help='Most of the time, we will want to update to stable version but sometimes it is useful to test.', choices=['stable', 'unstable'], nargs='?', default='stable')
+
+
+if __name__ == '__main__':
+ args = parser.parse_args()
+
+ package_name = getattr(args, 'package-name')
+ requested_release = getattr(args, 'requested-release')
+ version_predicate = version_policies[getattr(args, 'version-policy')]
+ version_policy = make_version_policy(version_predicate, requested_release)
+
+ # The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
+ cache = json.loads(requests.get('https://ftp.gnome.org/pub/GNOME/sources/{}/cache.json'.format(package_name)).text)
+ if type(cache) != list or cache[0] != 4:
+ print('Unknown format of cache.json file.', file=sys.stderr)
+ sys.exit(1)
+
+ versions = cache[2][package_name]
+ versions = sorted(filter(version_policy, versions), key=version_to_list)
+
+ if len(versions) == 0:
+ print('No versions matched.', file=sys.stderr)
+ sys.exit(1)
+
+ print(versions[-1])
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix
new file mode 100644
index 00000000000..3e274c35cdd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, intltool, itstool, gtk3
+, wrapGAppsHook, librsvg, libxml2, desktop-file-utils
+, guile_2_0, libcanberra-gtk3 }:
+
+stdenv.mkDerivation rec {
+ pname = "aisleriot";
+ version = "3.22.8";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "15pm39679ymxki07sb5nvhycz4z53zwbvascyp5wm4864bn98815";
+ };
+
+ configureFlags = [
+ "--with-card-theme-formats=svg"
+ "--with-platform=gtk-only" # until they remove GConf
+ ];
+
+ nativeBuildInputs = [ pkgconfig intltool itstool wrapGAppsHook libxml2 desktop-file-utils ];
+ buildInputs = [ gtk3 librsvg guile_2_0 libcanberra-gtk3 ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Aisleriot;
+ description = "A collection of patience games written in guile scheme";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix
new file mode 100644
index 00000000000..c9395166c52
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, wrapGAppsHook, python3
+, gettext, gnome3, glib, gtk3, libgnome-games-support, gdk-pixbuf }:
+
+let
+ pname = "atomix";
+ version = "3.32.1";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "19wpm7mn6r7x6jz1r0kkqg3xa69iycvgb7g7i8wi0d3cx0rsgjkl";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext wrapGAppsHook python3 ];
+ buildInputs = [ glib gtk3 gdk-pixbuf libgnome-games-support gnome3.adwaita-icon-theme ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Puzzle game where you move atoms to build a molecule";
+ homepage = https://wiki.gnome.org/Apps/Atomix;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix
new file mode 100644
index 00000000000..b4c6eaaec1b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, libgnome-games-support, gettext, itstool, libxml2, python3, vala }:
+
+stdenv.mkDerivation rec {
+ pname = "five-or-more";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/five-or-more/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0v52i22ygv6y4zqs8nyb1qmacmj9whhqrw7qss6vn7by4nsikhrn";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool libxml2 python3 wrapGAppsHook
+ vala
+ ];
+ buildInputs = [
+ gtk3 librsvg libgnome-games-support gnome3.adwaita-icon-theme
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "five-or-more";
+ attrPath = "gnome3.five-or-more";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Five_or_more;
+ description = "Remove colored balls from the board by forming lines";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
new file mode 100644
index 00000000000..5b233c48385
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, gettext, meson, libcanberra-gtk3, librsvg, itstool, vala
+, python3, ninja, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "four-in-a-row";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/four-in-a-row/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0h4wmbkdp7x3gp9sbxmvla316m8n6iy4f5sq0ksldj0z7ghlx9zl";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig wrapGAppsHook gettext meson itstool vala
+ ninja python3 desktop-file-utils
+ ];
+ buildInputs = [ gtk3 libcanberra-gtk3 librsvg gnome3.adwaita-icon-theme ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "four-in-a-row";
+ attrPath = "gnome3.four-in-a-row";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Four-in-a-row;
+ description = "Make lines of the same color to win";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
new file mode 100644
index 00000000000..d7001e1c527
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, meson, ninja, vala, pkgconfig, wrapGAppsHook, gobject-introspection
+, gettext, itstool, libxml2, python3, gnome3, glib, gtk3, librsvg }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-chess";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-chess/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0hzb6s4wmfy1fysagc5hmn1ijvrwyd2cg7iz41mpn7gfdjyak639";
+ };
+
+ nativeBuildInputs = [ meson ninja vala pkgconfig gettext itstool libxml2 python3 wrapGAppsHook gobject-introspection ];
+ buildInputs = [ glib gtk3 librsvg gnome3.adwaita-icon-theme ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-chess";
+ attrPath = "gnome3.gnome-chess";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Chess;
+ description = "Play the classic two-player boardgame of chess";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
new file mode 100644
index 00000000000..904edd7e51a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, pkgconfig, vala, gnome3, gtk3, wrapGAppsHook, appstream-glib, desktop-file-utils
+, glib, librsvg, libxml2, gettext, itstool, libgee, libgnome-games-support
+, meson, ninja, python3
+}:
+
+let
+ pname = "gnome-klotski";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1p4s15gxj6gasix22z9vlx2yrx196fvcxr6v6qrl569idfgjbi72";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig vala meson ninja python3 wrapGAppsHook
+ gettext itstool libxml2 appstream-glib desktop-file-utils
+ gnome3.adwaita-icon-theme
+ ];
+ buildInputs = [ glib gtk3 librsvg libgee libgnome-games-support ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Klotski;
+ description = "Slide blocks to solve the puzzle";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix
new file mode 100644
index 00000000000..9d173945cdd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, gettext, itstool, libxml2
+, meson, ninja, python3, vala, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-mahjongg";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-mahjongg/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "12kamxnxbh26k4iykhbs873mx25a2wrjnhr013lfkwbyl52kg12j";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-mahjongg"; attrPath = "gnome3.gnome-mahjongg"; };
+ };
+
+ nativeBuildInputs = [
+ meson ninja vala python3 desktop-file-utils
+ pkgconfig gnome3.adwaita-icon-theme
+ libxml2 itstool gettext wrapGAppsHook
+ ];
+ buildInputs = [
+ gtk3 librsvg
+ ];
+
+ postPatch = ''
+ chmod +x data/meson_post_install.py
+ patchShebangs data/meson_post_install.py
+ '';
+
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Mahjongg;
+ description = "Disassemble a pile of tiles by removing matching pairs";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
new file mode 100644
index 00000000000..1ac7e51357e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, meson, ninja, vala, gobject-introspection, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, gettext, itstool, python3, libxml2, libgnome-games-support, libgee, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-mines";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-mines/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1nv966wkp2rqxzcdb76bwlbzpjqadcaqzrnkxpzwnvjjr167yx8g";
+ };
+
+ # gobject-introspection for finding vapi files
+ nativeBuildInputs = [
+ meson ninja vala gobject-introspection pkgconfig gettext itstool python3
+ libxml2 wrapGAppsHook desktop-file-utils
+ ];
+ buildInputs = [ gtk3 librsvg gnome3.adwaita-icon-theme libgnome-games-support libgee ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-mines";
+ attrPath = "gnome3.gnome-mines";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Mines;
+ description = "Clear hidden mines from a minefield";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
new file mode 100644
index 00000000000..7b069922169
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, libcanberra-gtk3, clutter-gtk, intltool, itstool
+, libxml2, libgee, libgnome-games-support }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-nibbles";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-nibbles/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0g627pzbfywiy2rsh4aidgbln9s4j5m8pryw4cgr5ygc4z8l6l9p";
+ };
+
+ nativeBuildInputs = [ pkgconfig wrapGAppsHook intltool itstool libxml2 ];
+ buildInputs = [
+ gtk3 librsvg libcanberra-gtk3 clutter-gtk gnome3.adwaita-icon-theme
+ libgee libgnome-games-support
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-nibbles";
+ attrPath = "gnome3.gnome-nibbles";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Guide a worm around a maze";
+ homepage = https://wiki.gnome.org/Apps/Nibbles;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
new file mode 100644
index 00000000000..46723867f8a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, libcanberra-gtk3, gettext, itstool, libxml2, libgnome-games-support
+, libgee, meson, ninja, python3, desktop-file-utils , hicolor-icon-theme, adwaita-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-robots";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-robots/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1xp1sijl5k7wmnbb0hdgh4ajxgp74k7fcnmd5c6rw6lf51wpinyh";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-robots"; attrPath = "gnome3.gnome-robots"; };
+ };
+
+ nativeBuildInputs = [
+ pkgconfig meson ninja python3
+ libxml2 wrapGAppsHook gettext itstool desktop-file-utils
+ hicolor-icon-theme # For setup-hook
+ ];
+ buildInputs = [
+ gtk3 librsvg libcanberra-gtk3 libgnome-games-support libgee adwaita-icon-theme
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Robots;
+ description = "Avoid the robots and make them crash into each other";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
new file mode 100644
index 00000000000..a555ee31cf3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, meson, ninja, vala, pkgconfig, gobject-introspection, gettext, gtk3, gnome3, wrapGAppsHook
+, libgee, json-glib, qqwing, itstool, libxml2, python3, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-sudoku";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-sudoku/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1wwdjflw1lbx3cv6gvqcgp5jnjkrq37ld6mjbjj03g3vr90qaf0l";
+ };
+
+ nativeBuildInputs = [ meson ninja vala pkgconfig gobject-introspection gettext itstool libxml2 python3 desktop-file-utils wrapGAppsHook ];
+ buildInputs = [ gtk3 libgee json-glib qqwing ];
+
+ postPatch = ''
+ chmod +x build-aux/post_install.py
+ patchShebangs build-aux/post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-sudoku";
+ attrPath = "gnome3.gnome-sudoku";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Sudoku;
+ description = "Test your logic skills in this number grid puzzle";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
new file mode 100644
index 00000000000..b6c60362265
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, libcanberra-gtk3, gettext, itstool, libxml2
+, meson, ninja, vala, python3, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-taquin";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-taquin/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1kyxh68gg7clxg22ls4sliisxb2sydwccbxqgfvxjg2fklr6r1lm";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-taquin"; attrPath = "gnome3.gnome-taquin"; };
+ };
+
+ nativeBuildInputs = [
+ pkgconfig wrapGAppsHook meson ninja python3
+ gettext itstool libxml2 vala desktop-file-utils
+ ];
+ buildInputs = [
+ gtk3 librsvg libcanberra-gtk3
+ gnome3.adwaita-icon-theme
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Taquin;
+ description = "Move tiles so that they reach their places";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix
new file mode 100644
index 00000000000..29141530211
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, libxml2, gettext, itstool, meson, ninja, python3
+, vala, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-tetravex";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-tetravex/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "18drxp43j2jnywxl6qa7mn1iv33jxr0dpc1l9xza3lnrb0jp0kjl";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-tetravex"; attrPath = "gnome3.gnome-tetravex"; };
+ };
+
+ nativeBuildInputs = [
+ wrapGAppsHook itstool libxml2 gnome3.adwaita-icon-theme
+ pkgconfig gettext meson ninja python3 vala desktop-file-utils
+ ];
+ buildInputs = [
+ gtk3
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Tetravex;
+ description = "Complete the puzzle by matching numbered tiles";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix
new file mode 100644
index 00000000000..8e53a937a5e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gnome3
+, glib
+, gtk3
+, cairo
+, wrapGAppsHook
+, libxml2
+, python3
+, gettext
+, itstool
+, desktop-file-utils
+, adwaita-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+ pname = "hitori";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/hitori/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "15s20db2fq4cy031sw20pmf53hxiak44fgyjy5njqnp2h2sg3806";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ gettext
+ itstool
+ desktop-file-utils
+ libxml2
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ gtk3
+ cairo
+ adwaita-icon-theme
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Hitori;
+ description = "GTK application to generate and let you play games of Hitori";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix
new file mode 100644
index 00000000000..114551ed4ee
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, gnome3, gdk-pixbuf, librsvg, wrapGAppsHook
+, itstool, libcanberra-gtk3, libxml2
+, meson, ninja, python3, vala, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "iagno";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/iagno/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1rcqb4gpam16xw87n4q2akkrg94ksrn16ry21pr6bsd7qs7hw17d";
+ };
+
+ nativeBuildInputs = [
+ meson ninja python3 vala desktop-file-utils
+ pkgconfig wrapGAppsHook itstool libxml2
+ ];
+ buildInputs = [ gtk3 gnome3.adwaita-icon-theme gdk-pixbuf librsvg libcanberra-gtk3 ];
+
+ enableParallelBuilding = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "iagno";
+ attrPath = "gnome3.iagno";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Iagno;
+ description = "Computer version of the game Reversi, more popularly called Othello";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix
new file mode 100644
index 00000000000..9c582f037a2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, vala, pkgconfig, gtk3, gnome3, gdk-pixbuf, librsvg, wrapGAppsHook
+, gettext, itstool, clutter, clutter-gtk, libxml2, appstream-glib
+, meson, ninja, python3 }:
+
+stdenv.mkDerivation rec {
+ pname = "lightsoff";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/lightsoff/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0vc3ibjs9ynnm0gxlhhin7jpnsx22vnn4ygaybxwmv9w2q49cs9f";
+ };
+
+ nativeBuildInputs = [
+ vala pkgconfig wrapGAppsHook itstool gettext appstream-glib libxml2
+ meson ninja python3
+ ];
+ buildInputs = [ gtk3 gnome3.adwaita-icon-theme gdk-pixbuf librsvg clutter clutter-gtk ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "lightsoff";
+ attrPath = "gnome3.lightsoff";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Lightsoff;
+ description = "Puzzle game, where the objective is to turn off all of the tiles on the board";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
new file mode 100644
index 00000000000..78ed0d9fa68
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, gnome3, gdk-pixbuf
+, librsvg, libcanberra-gtk3, libmanette
+, gettext, itstool, libxml2, clutter, clutter-gtk, wrapGAppsHook
+, meson, ninja, python3, vala, desktop-file-utils
+}:
+
+let
+ pname = "quadrapassel";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/quadrapassel/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1zhi1957knz9dm98drn2dh95mr33sdch590yddh1f8r6bzsfjvpy";
+ };
+
+ nativeBuildInputs = [
+ meson ninja python3 vala desktop-file-utils
+ pkgconfig gnome3.adwaita-icon-theme
+ libxml2 itstool gettext wrapGAppsHook
+ ];
+ buildInputs = [
+ gtk3 gdk-pixbuf librsvg libmanette
+ libcanberra-gtk3 clutter libxml2 clutter-gtk
+ ];
+
+ enableParallelBuilding = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Classic falling-block game, Tetris";
+ homepage = https://wiki.gnome.org/Apps/Quadrapassel;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix
new file mode 100644
index 00000000000..a944e0c568a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, meson, ninja, pkgconfig, vala, glib, gtk3, gnome3, desktop-file-utils
+, clutter, clutter-gtk, gettext, itstool, libxml2, wrapGAppsHook, python3 }:
+
+let
+ pname = "swell-foop";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0jpci3c1wyzbvsq86j30rcl166skhi2wf12001amfgh0dmmwipci";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ nativeBuildInputs = [ meson ninja vala pkgconfig wrapGAppsHook python3 itstool gettext libxml2 desktop-file-utils ];
+ buildInputs = [ glib gtk3 gnome3.adwaita-icon-theme clutter clutter-gtk ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py # patchShebangs requires executable file
+ patchShebangs meson_post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Swell%20Foop;
+ description = "Puzzle game, previously known as Same GNOME";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix b/nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix
new file mode 100644
index 00000000000..f196ada3850
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, gnome3, gdk-pixbuf
+, librsvg, gettext, itstool, libxml2, wrapGAppsHook
+, meson, ninja, python3, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "tali";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/tali/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0na7sswfh63wj44aibcnqdsbb24yfngcwgi07lv8rky6rry0kqgz";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "tali"; attrPath = "gnome3.tali"; };
+ };
+
+ nativeBuildInputs = [
+ meson ninja python3 desktop-file-utils
+ pkgconfig gnome3.adwaita-icon-theme
+ libxml2 itstool gettext wrapGAppsHook
+ ];
+ buildInputs = [ gtk3 gdk-pixbuf librsvg ];
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Tali;
+ description = "Sort of poker with dice and less money";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/installer.nix b/nixpkgs/pkgs/desktops/gnome-3/installer.nix
new file mode 100644
index 00000000000..4999e1f3343
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/installer.nix
@@ -0,0 +1,15 @@
+{ isoBaseName ? "nixos-graphical-gnome", system ? builtins.currentSystem
+, extraModules ? [] }:
+
+let
+
+ module = ../../../../nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix;
+
+ config = (import ../../../../nixos/lib/eval-config.nix {
+ inherit system;
+ modules = [ module { isoImage.isoBaseName = isoBaseName; } ] ++ extraModules;
+ }).config;
+
+in
+ config.system.build.isoImage
+
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix
new file mode 100644
index 00000000000..8babe77e412
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, vala, enchant2, wrapGAppsHook, meson, ninja
+, desktop-file-utils, gnome-online-accounts, gsettings-desktop-schemas, adwaita-icon-theme
+, libnotify, libcanberra-gtk3, libsecret, gmime, isocodes, libxml2, gettext
+, sqlite, gcr, json-glib, itstool, libgee, gnome3, webkitgtk, python3
+, xvfb_run, dbus, shared-mime-info, libunwind, libunity, folks, glib-networking }:
+
+stdenv.mkDerivation rec {
+ pname = "geary";
+ version = "3.32.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0sg53zq81v28hdqiy5d048skwfgsa8ck0z7ywsagdh7iaqin68gq";
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils gettext itstool libxml2 meson ninja
+ pkgconfig vala wrapGAppsHook python3
+ ];
+
+ buildInputs = [
+ adwaita-icon-theme enchant2 gcr gmime gnome-online-accounts
+ gsettings-desktop-schemas gtk3 isocodes json-glib libcanberra-gtk3
+ libgee libnotify libsecret sqlite webkitgtk glib-networking
+ libunwind libunity folks
+ ];
+
+ checkInputs = [ xvfb_run dbus ];
+
+ mesonFlags = [
+ "-Dcontractor=true" # install the contractor file (Pantheon specific)
+ ];
+
+ postPatch = ''
+ chmod +x build-aux/post_install.py
+ patchShebangs build-aux/post_install.py
+
+ chmod +x desktop/geary-attach
+ '';
+
+ doCheck = true;
+
+ checkPhase = ''
+ NO_AT_BRIDGE=1 \
+ XDG_DATA_DIRS=:$XDG_DATA_DIRS:${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${shared-mime-info}/share \
+ xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+ --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+ meson test -v --no-stdsplit
+ '';
+
+ preFixup = ''
+ # Add geary to path for geary-attach
+ gappsWrapperArgs+=(--prefix PATH : "$out/bin")
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Geary;
+ description = "Mail client for GNOME 3";
+ maintainers = gnome3.maintainers;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix
new file mode 100644
index 00000000000..94418849b98
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix
@@ -0,0 +1,99 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, vala
+, gettext
+, pkgconfig
+, gtk3
+, glib
+, json-glib
+, wrapGAppsHook
+, libpeas
+, bash
+, gobject-introspection
+, libsoup
+, gtksourceview
+, gsettings-desktop-schemas
+, adwaita-icon-theme
+, gnome3
+, gtkspell3
+, shared-mime-info
+, libgee
+, libgit2-glib
+, libsecret
+, meson
+, ninja
+, python3
+, hicolor-icon-theme
+, libdazzle
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gitg";
+ version = "3.32.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0npg4kqpwl992fgjd2cn3fh84aiwpdp9kd8z7rw2xaj2iazsm914";
+ };
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+
+ substituteInPlace tests/libgitg/test-commit.vala --replace "/bin/bash" "${bash}/bin/bash"
+ '';
+
+ doCheck = true;
+
+ enableParallelBuilding = true;
+
+ buildInputs = [
+ adwaita-icon-theme
+ glib
+ gsettings-desktop-schemas
+ gtk3
+ gtksourceview
+ gtkspell3
+ json-glib
+ libdazzle
+ libgee
+ libgit2-glib
+ libpeas
+ libsecret
+ libsoup
+ ];
+
+ nativeBuildInputs = [
+ gobject-introspection
+ hicolor-icon-theme
+ gettext
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Thumbnailers
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ )
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/Apps/Gitg;
+ description = "GNOME GUI client to view git repositories";
+ maintainers = with maintainers; [ domenkozar ];
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
new file mode 100644
index 00000000000..25e1347f1c9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, fetchurl
+, intltool
+, itstool
+, libxml2
+, libxslt
+, pkgconfig
+, gnome-panel
+, gtk3
+, glib
+, libwnck3
+, libgtop
+, libnotify
+, upower
+, dbus-glib
+, wirelesstools
+, linuxPackages
+, adwaita-icon-theme
+, libgweather
+, gucharmap
+, gnome-settings-daemon
+, tracker
+, polkit
+, gnome3
+}:
+
+let
+ pname = "gnome-applets";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "10kd19ymxl2z65121g90mx96m6vcn2a8a50g6a56prrdjsgbgia1";
+ };
+
+ nativeBuildInputs = [
+ intltool
+ itstool
+ pkgconfig
+ libxml2
+ libxslt
+ ];
+
+ buildInputs = [
+ gnome-panel
+ gtk3
+ glib
+ libxml2
+ libwnck3
+ libgtop
+ libnotify
+ upower
+ dbus-glib
+ adwaita-icon-theme
+ libgweather
+ gucharmap
+ gnome-settings-daemon
+ tracker
+ polkit
+ wirelesstools
+ linuxPackages.cpupower
+ ];
+
+ enableParallelBuilding = true;
+
+ doCheck = true;
+
+ configureFlags = [
+ "--with-libpanel-applet-dir=${placeholder "out"}/share/gnome-panel/applets"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Applets for use with the GNOME panel";
+ homepage = https://wiki.gnome.org/Projects/GnomeApplets;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
new file mode 100644
index 00000000000..c8d26988391
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, gnome3
+, gtk3, glib, gobject-introspection, libarchive
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-autoar";
+ version = "0.2.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-autoar/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "02i4zgqqqj56h7bcys6dz7n78m4nj2x4dv1ggjmnrk98n06xpsax";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-autoar"; attrPath = "gnome3.gnome-autoar"; };
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk3 glib ];
+ propagatedBuildInputs = [ libarchive gobject-introspection ];
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ license = licenses.lgpl21;
+ description = "Library to integrate compressed files management with GNOME";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
new file mode 100644
index 00000000000..3cade7ccdf8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
@@ -0,0 +1,158 @@
+{ stdenv
+, autoreconfHook
+, fetchurl
+, gettext
+, glib
+, gnome-bluetooth
+, gnome-desktop
+, gnome-panel
+, gnome-session
+, gnome3
+, gsettings-desktop-schemas
+, gtk3
+, ibus
+, libcanberra-gtk3
+, libpulseaudio
+, libxkbfile
+, libxml2
+, pkgconfig
+, polkit
+, upower
+, wrapGAppsHook
+, writeTextFile
+, writeShellScriptBin
+, xkeyboard_config
+}:
+
+let
+ pname = "gnome-flashback";
+ version = "3.32.0";
+ requiredComponents = wmName: "RequiredComponents=${wmName};gnome-flashback-init;gnome-flashback;gnome-panel;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Clipboard;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Mouse;org.gnome.SettingsDaemon.Power;org.gnome.SettingsDaemon.PrintNotifications;org.gnome.SettingsDaemon.Rfkill;org.gnome.SettingsDaemon.ScreensaverProxy;org.gnome.SettingsDaemon.Sharing;org.gnome.SettingsDaemon.Smartcard;org.gnome.SettingsDaemon.Sound;org.gnome.SettingsDaemon.Wacom;org.gnome.SettingsDaemon.XSettings;";
+ gnome-flashback = stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0jfzr7vdmnxpxqqa38ni1p3c508xhlnxqpmmqshk3rvrf0afqn62";
+ };
+
+ # make .desktop Execs absolute
+ postPatch = ''
+ patch -p0 <<END_PATCH
+ +++ data/applications/gnome-flashback-init.desktop.in
+ @@ -4 +4 @@
+ -Exec=gnome-flashback --initialize
+ +Exec=$out/bin/gnome-flashback --initialize
+ +++ data/applications/gnome-flashback.desktop.in
+ @@ -4 +4 @@
+ -Exec=gnome-flashback
+ +Exec=$out/bin/gnome-flashback
+ END_PATCH
+ '';
+
+ postInstall = ''
+ # Check that our expected RequiredComponents match the stock session files, but then don't install them.
+ # They can be installed using mkSessionForWm.
+ grep '${requiredComponents "metacity"}' $out/share/gnome-session/sessions/gnome-flashback-metacity.session || (echo "RequiredComponents have changed, please update gnome-flashback/default.nix."; false)
+
+ rm -r $out/share/gnome-session
+ rm -r $out/share/xsessions
+ rm -r $out/libexec
+ '';
+
+ nativeBuildInputs = [
+ autoreconfHook
+ gettext
+ libxml2
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ gnome-bluetooth
+ gnome-desktop
+ gsettings-desktop-schemas
+ gtk3
+ ibus
+ libcanberra-gtk3
+ libpulseaudio
+ libxkbfile
+ polkit
+ upower
+ xkeyboard_config
+ ];
+
+ doCheck = true;
+
+ enableParallelBuilding = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+
+ mkSessionForWm = { wmName, wmLabel, wmCommand }:
+ let
+ wmApplication = writeTextFile {
+ name = "gnome-flashback-${wmName}-wm";
+ destination = "/share/applications/${wmName}.desktop";
+ text = ''
+ [Desktop Entry]
+ Type=Application
+ Encoding=UTF-8
+ Name=${wmLabel}
+ Exec=${wmCommand}
+ NoDisplay=true
+ X-GNOME-WMName=${wmLabel}
+ X-GNOME-Autostart-Phase=WindowManager
+ X-GNOME-Provides=windowmanager
+ X-GNOME-Autostart-Notify=false
+ '';
+ };
+
+ gnomeSession = writeTextFile {
+ name = "gnome-flashback-${wmName}-gnome-session";
+ destination = "/share/gnome-session/sessions/gnome-flashback-${wmName}.session";
+ text = ''
+ [GNOME Session]
+ Name=GNOME Flashback (${wmLabel})
+ ${requiredComponents wmName}
+ '';
+ };
+
+ executable = writeShellScriptBin "gnome-flashback-${wmName}" ''
+ if [ -z $XDG_CURRENT_DESKTOP ]; then
+ export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
+ fi
+
+ export XDG_DATA_DIRS=${wmApplication}/share:${gnomeSession}/share:${gnome-flashback}/share:${gnome-panel}/share:$XDG_DATA_DIRS
+
+ exec ${gnome-session}/bin/gnome-session --session=gnome-flashback-${wmName} "$@"
+ '';
+
+ in writeTextFile {
+ name = "gnome-flashback-${wmName}-xsession";
+ destination = "/share/xsessions/gnome-flashback-${wmName}.desktop";
+ text = ''
+ [Desktop Entry]
+ Name=GNOME Flashback (${wmLabel})
+ Comment=This session logs you into GNOME Flashback with ${wmLabel}
+ Exec=${executable}/bin/gnome-flashback-${wmName}
+ TryExec=${wmCommand}
+ Type=Application
+ DesktopNames=GNOME-Flashback;GNOME;
+ '';
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME 2.x-like session for GNOME 3";
+ homepage = https://wiki.gnome.org/Projects/GnomeFlashback;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+ };
+ in gnome-flashback
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
new file mode 100644
index 00000000000..ea9a79de40e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, meson, ninja, gettext, gnome3, packagekit, polkit
+, gtk3, systemd, wrapGAppsHook, desktop-file-utils, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-packagekit";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-packagekit/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "08rhsisdvx7pnx3rrg5v7c09jbw4grglkdj979gwl4a31j24zjsd";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig meson ninja gettext wrapGAppsHook desktop-file-utils
+ hicolor-icon-theme # for setup-hook
+ ];
+
+ buildInputs = [ gtk3 packagekit systemd polkit ];
+
+ postPatch = ''
+ patchShebangs meson_post_install.sh
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-packagekit";
+ attrPath = "gnome3.gnome-packagekit";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://www.freedesktop.org/software/PackageKit/;
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl2;
+ description = "Tools for installing software on the GNOME desktop using PackageKit";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
new file mode 100644
index 00000000000..3031b2c1d78
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
@@ -0,0 +1,100 @@
+{ stdenv
+, fetchurl
+, autoreconfHook
+, dconf
+, evolution-data-server
+, gdm
+, gettext
+, glib
+, gnome-desktop
+, gnome-flashback
+, gnome-menus
+, gnome3
+, gtk3
+, itstool
+, libgweather
+, libsoup
+, libwnck3
+, libxml2
+, pkgconfig
+, polkit
+, systemd
+, wrapGAppsHook }:
+
+let
+ pname = "gnome-panel";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ outputs = [ "out" "dev" "man" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0a9zi1jb0b42zd6wx3251cnns9v1w0cbwasmrx9hsj1dsb9pjq3a";
+ };
+
+ # make .desktop Exec absolute
+ postPatch = ''
+ patch -p0 <<END_PATCH
+ +++ gnome-panel/gnome-panel.desktop.in
+ @@ -7 +7 @@
+ -Exec=gnome-panel
+ +Exec=$out/bin/gnome-panel
+ END_PATCH
+ '';
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ --prefix XDG_DATA_DIRS : "${gnome-menus}/share:${gnome-flashback}/share"
+ --prefix XDG_CONFIG_DIRS : "${gnome-menus}/etc/xdg:${gnome-flashback}/etc/xdg"
+ )
+ '';
+
+ nativeBuildInputs = [
+ autoreconfHook
+ gettext
+ itstool
+ libxml2
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ dconf
+ evolution-data-server
+ gdm
+ glib
+ gnome-desktop
+ gnome-menus
+ gtk3
+ libgweather
+ libsoup
+ libwnck3
+ polkit
+ systemd
+ ];
+
+ configureFlags = [
+ "--enable-eds"
+ ];
+
+ enableParallelBuilding = true;
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Component of Gnome Flashback that provides panels and default applets for the desktop";
+ homepage = https://wiki.gnome.org/Projects/GnomePanel;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix
new file mode 100644
index 00000000000..b1e9cde906c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+, fetchgit
+, autoreconfHook
+, dbus-glib
+, glib
+, gnome-common
+, gnome-desktop
+, gnome3
+, gtk3
+, pkgconfig
+, intltool
+, pam
+, systemd
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-screensaver";
+ version = "3.6.1";
+
+ # the original package is deprecated and the Ubuntu version has a number of useful patches
+ src = fetchgit {
+ url = "https://git.launchpad.net/ubuntu/+source/gnome-screensaver";
+ rev = "4f7b666131dec060a5aac9117f395ac522a627b4";
+ sha256 = "15xqgcpm825cy3rm8pj00qlblq66svmh06lcw8qi74a3g0xcir87";
+ };
+
+ # from debian/patches/series
+ patches = map (patch: "debian/patches/${patch}") [
+ "00git_logind_check.patch"
+ "01_no_autostart.patch"
+ "03_fix_ltsp-fading.patch"
+ "05_dbus_service.patch"
+ "10_legacy_scrsvr_inhibit.patch"
+ "13_nvidia_gamma_fade_fallback.patch"
+ "14_no_fade_on_user_switch.patch"
+ "15_dont_crash_on_no_fade.patch"
+ "16_dont_crash_in_kvm.patch"
+ "17_remove_top_panel.patch"
+ "18_unity_dialog_layout.patch"
+ "24_use_user_settings.patch"
+ "25_fix_lock_command.patch"
+ "27_lightdm_switch_user.patch"
+ "28_blocking_return.patch"
+ "29_handle_expired_creds.patch"
+ # these two patches are ubuntu-specific
+ # "30_ubuntu-lock-on-suspend_gsetting.patch"
+ # "31_lock_screen_on_suspend.patch"
+ "32_input_sources_switcher.patch"
+ "move-not-nuke.patch"
+ "allow-replacement"
+ "libsystemd.patch"
+ "0001-gs-lock-plug-Disconnect-signal-handler-from-right-ob.patch"
+ "33_budgie_support.patch"
+ ] ++ [ ./fix-dbus-service-dir.patch ];
+
+ nativeBuildInputs = [
+ autoreconfHook
+ intltool
+ wrapGAppsHook
+ gnome-common
+ pkgconfig
+ ];
+
+ buildInputs = [
+ glib
+ gtk3
+ gnome-desktop
+ dbus-glib
+ pam
+ systemd
+ ];
+
+ configureFlags = [ "--enable-locking" "--with-systemd=yes" ];
+
+ enableParallelBuilding = true;
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Component of Gnome Flashback that provides screen locking";
+ homepage = https://wiki.gnome.org/Projects/GnomeScreensaver;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch
new file mode 100644
index 00000000000..81e037ee690
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac 2019-01-20 20:28:01.309231507 +0100
++++ b/configure.ac 2019-01-20 20:31:54.927978927 +0100
+@@ -137,7 +137,7 @@
+
+ # Find out where the session service file goes
+ # The sad sed hack is recomended by section 27.10 of the automake manual.
+-DBUS_SESSION_SERVICE_DIR=`pkg-config --variable session_bus_services_dir dbus-1 | sed -e 's,/usr/share,${datarootdir},g'`
++DBUS_SESSION_SERVICE_DIR=`pkg-config --variable session_bus_services_dir dbus-1 --define-variable 'datadir=${datadir}'`
+ AC_SUBST(DBUS_SESSION_SERVICE_DIR)
+
+ dnl --------------------------------------------------------------------------- \ No newline at end of file
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
new file mode 100644
index 00000000000..7a54114d2db
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, meson, ninja, gettext, fetchurl
+, pkgconfig, gtk3, glib, libsoup, gsettings-desktop-schemas
+, itstool, libxml2, python3Packages
+, gnome3, gdk-pixbuf, libnotify, gobject-introspection, wrapGAppsHook }:
+
+let
+ pname = "gnome-tweaks";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "037r35cw34ifcs676fq9n2v4mh1nkqx0qk474bznf18mr6r62h55";
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool libxml2 wrapGAppsHook python3Packages.python
+ ];
+ buildInputs = [
+ gtk3 glib gsettings-desktop-schemas
+ gdk-pixbuf gnome3.adwaita-icon-theme
+ libnotify gnome3.gnome-shell python3Packages.pygobject3
+ libsoup gnome3.gnome-settings-daemon gnome3.nautilus
+ gnome3.mutter gnome3.gnome-desktop gobject-introspection
+ gnome3.nautilus
+ # Makes it possible to select user themes through the `user-theme` extension
+ gnome3.gnome-shell-extensions
+ ];
+
+ postPatch = ''
+ patchShebangs meson-postinstall.py
+ '';
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ --prefix PYTHONPATH : "$out/${python3Packages.python.sitePackages}:$PYTHONPATH")
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = https://wiki.gnome.org/action/show/Apps/GnomeTweakTool;
+ description = "A tool to customize advanced GNOME 3 options";
+ maintainers = gnome3.maintainers;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix
new file mode 100644
index 00000000000..46ca01c1a1a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, vala, glib, gjs, mutter
+, pango, gtk3, gnome3, dbus, clutter, appstream-glib, wrapGAppsHook, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ version = "3.32.0";
+ pname = "gpaste";
+
+ src = fetchurl {
+ url = "https://github.com/Keruspe/GPaste/archive/v${version}.tar.gz";
+ sha256 = "1fvpl9vqmrr1w22hm0ybabn9pjfii5qj9ghnc2jzihgrn2h486v6";
+ };
+
+ patches = [
+ ./fix-paths.patch
+ ];
+
+ # TODO: switch to substituteAll with placeholder
+ # https://github.com/NixOS/nix/issues/1846
+ postPatch = ''
+ substituteInPlace src/gnome-shell/extension.js \
+ --subst-var-by typelibPath "${placeholder "out"}/lib/girepository-1.0"
+ substituteInPlace src/gnome-shell/prefs.js \
+ --subst-var-by typelibPath "${placeholder "out"}/lib/girepository-1.0"
+ substituteInPlace src/libgpaste/settings/gpaste-settings.c \
+ --subst-var-by gschemasCompiled ${glib.makeSchemaPath (placeholder "out") "${pname}-${version}"}
+ '';
+
+ nativeBuildInputs = [
+ autoreconfHook pkgconfig vala appstream-glib wrapGAppsHook
+ ];
+ buildInputs = [
+ glib gjs mutter gtk3 dbus
+ clutter pango gobject-introspection
+ ];
+
+ configureFlags = [
+ "--with-controlcenterdir=${placeholder "out"}/share/gnome-control-center/keybindings"
+ "--with-dbusservicesdir=${placeholder "out"}/share/dbus-1/services"
+ "--with-systemduserunitdir=${placeholder "out"}/etc/systemd/user"
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/Keruspe/GPaste;
+ description = "Clipboard management system with GNOME3 integration";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
new file mode 100644
index 00000000000..c8a3fad2272
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
@@ -0,0 +1,37 @@
+--- a/src/gnome-shell/extension.js
++++ b/src/gnome-shell/extension.js
+@@ -6,6 +6,8 @@
+
+ const Config = imports.misc.config;
+
++imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
++
+ imports.gi.versions.Clutter = Config.LIBMUTTER_API_VERSION;
+ imports.gi.versions.GLib = '2.0';
+ imports.gi.versions.GPaste = '1.0';
+--- a/src/gnome-shell/prefs.js
++++ b/src/gnome-shell/prefs.js
+@@ -6,6 +6,8 @@
+
+ const Gettext = imports.gettext;
+
++imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
++
+ const { GPaste } = imports.gi;
+
+ const ExtensionUtils = imports.misc.extensionUtils;
+--- a/src/libgpaste/settings/gpaste-settings.c
++++ b/src/libgpaste/settings/gpaste-settings.c
+@@ -1013,7 +1013,11 @@
+ }
+ else
+ {
+- return g_settings_new (G_PASTE_SETTINGS_NAME);
++ // library used by introspection requires schemas but we cannot set XDG_DATA_DIRS for the library
++ GSettingsSchemaSource *schema_source = g_settings_schema_source_new_from_directory ("@gschemasCompiled@", NULL, FALSE, NULL);
++ g_autoptr (GSettingsSchema) schema = g_settings_schema_source_lookup (schema_source, G_PASTE_SETTINGS_NAME, FALSE);
++ g_settings_schema_source_unref (schema_source);
++ return g_settings_new_full (schema, NULL, NULL);
+ }
+ }
+
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
new file mode 100644
index 00000000000..a607a6eb6a0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, intltool
+, gnome3, enchant, isocodes, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+ pname = "gtkhtml";
+ version = "4.10.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gtkhtml/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "ca3b6424fb2c7ac5d9cb8fdafb69318fa2e825c9cf6ed17d1e38d9b29e5606c3";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gtkhtml"; attrPath = "gnome3.gtkhtml"; };
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ gtk3 intltool gnome3.adwaita-icon-theme
+ gsettings-desktop-schemas ];
+
+ propagatedBuildInputs = [ enchant isocodes ];
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = gnome3.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
new file mode 100644
index 00000000000..3776a9adbf2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, glib, gtk3, libgee, intltool, gnome3
+, libintl }:
+
+let
+ pname = "libgnome-games-support";
+ version = "1.4.3";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0g6a1vvhrbs0pfnzjfg3lgqvppwkydn6j3dn713zhrjhma9pljkh";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs = [ libintl ];
+ propagatedBuildInputs = [
+ # Required by libgnome-games-support-1.pc
+ glib gtk3 libgee
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Small library intended for internal use by GNOME Games, but it may be used by others";
+ homepage = https://wiki.gnome.org/Apps/Games;
+ license = licenses.lgpl3;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix
new file mode 100644
index 00000000000..8b1d2b05df1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, fetchurl
+, gettext
+, glib
+, gnome3
+, gsettings-desktop-schemas
+, gtk3
+, libcanberra-gtk3
+, libgtop
+, libstartup_notification
+, libxml2
+, pkgconfig
+, substituteAll
+, wrapGAppsHook
+, zenity }:
+
+let
+ pname = "metacity";
+ version = "3.32.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "177dmb1smizfgkddk49n2kr90graj9r6xw5hg3aq0y2qqg6v4rcg";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit zenity;
+ })
+ ];
+
+ nativeBuildInputs = [
+ gettext
+ libxml2
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ gsettings-desktop-schemas
+ gtk3
+ libcanberra-gtk3
+ libgtop
+ libstartup_notification
+ zenity
+ ];
+
+ enableParallelBuilding = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ doCheck = true;
+
+ meta = with stdenv.lib; {
+ description = "Window manager used in Gnome Flashback";
+ homepage = https://wiki.gnome.org/Projects/Metacity;
+ license = licenses.gpl2;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch
new file mode 100644
index 00000000000..ff3a244e67d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/core/util.c
++++ b/src/core/util.c
+@@ -424,7 +424,7 @@
+ g_slist_length (columns)*2 +
+ g_slist_length (entries)));
+
+- argvl[i++] = "zenity";
++ argvl[i++] = "@zenity@/bin/zenity";
+ argvl[i++] = type;
+ argvl[i++] = "--display";
+ argvl[i++] = display;
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
new file mode 100644
index 00000000000..4c2a551b1c7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, which
+, gtk-doc
+, docbook_xsl
+, docbook_xml_dtd_412
+, python3
+, ncurses
+, nautilus
+, gtk3
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "nautilus-python";
+ version = "1.2.3";
+
+ outputs = [ "out" "dev" "doc" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "161050sx3sdxqcpjkjcpf6wl4kx0jydihga7mcvrj9c2f8ly0g07";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ which
+ gtk-doc
+ docbook_xsl
+ docbook_xml_dtd_412
+ ];
+
+ buildInputs = [
+ python3
+ ncurses # required by python3
+ python3.pkgs.pygobject3
+ nautilus
+ gtk3 # required by libnautilus-extension
+ ];
+
+ makeFlags = [
+ "PYTHON_LIB_LOC=${python3}/lib"
+ ];
+
+ PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Python bindings for the Nautilus Extension API";
+ homepage = https://wiki.gnome.org/Projects/NautilusPython;
+ license = licenses.gpl2Plus;
+ maintainers = gnome3.maintainers;
+ platforms = platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix b/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix
new file mode 100644
index 00000000000..fcbceab24ea
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, fetchFromGitHub
+, autoconf-archive
+, appstream-glib
+, pkgconfig
+, wrapGAppsHook
+, libcanberra
+, gst_all_1
+, vala
+, gtk3
+, gom
+, sqlite
+, libxml2
+, autoreconfHook
+, glib
+, gobject-introspection
+, libpeas
+, gnome-shell
+, gsettings-desktop-schemas
+, adwaita-icon-theme
+, gettext
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-pomodoro";
+ version = "0.15.1";
+
+ src = fetchFromGitHub {
+ owner = "codito";
+ repo = "gnome-pomodoro";
+ rev = version;
+ sha256 = "0nmgd122gsfka0p50mila88iwrzckq2r36a3h20lswn5qkn321i1";
+ };
+
+ nativeBuildInputs = [
+ appstream-glib
+ autoconf-archive
+ autoreconfHook
+ gettext
+ gobject-introspection
+ libxml2
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ adwaita-icon-theme
+ glib
+ gnome-shell
+ gom
+ gsettings-desktop-schemas
+ gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good
+ gst_all_1.gstreamer
+ gtk3
+ libcanberra
+ libpeas
+ sqlite
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://gnomepomodoro.org/;
+ description = "Time management utility for GNOME based on the pomodoro technique";
+ longDescription = ''
+ This GNOME utility helps to manage time according to Pomodoro Technique.
+ It intends to improve productivity and focus by taking short breaks.
+ '';
+ maintainers = with maintainers; [ worldofpeace ];
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome-3/update.nix b/nixpkgs/pkgs/desktops/gnome-3/update.nix
new file mode 100644
index 00000000000..f42b6723950
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome-3/update.nix
@@ -0,0 +1,16 @@
+{ stdenv, lib, writeScript, python3, common-updater-scripts }:
+{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable" }:
+
+let
+ python = python3.withPackages (p: [ p.requests ]);
+ updateScript = writeScript "gnome-update-script" ''
+ #!${stdenv.shell}
+ set -o errexit
+ package_name="$1"
+ attr_path="$2"
+ version_policy="$3"
+ PATH=${lib.makeBinPath [ common-updater-scripts python ]}
+ latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable")
+ update-source-version "$attr_path" "$latest_tag"
+ '';
+in [ updateScript packageName attrPath versionPolicy ]
diff --git a/nixpkgs/pkgs/desktops/gnustep/back/default.nix b/nixpkgs/pkgs/desktops/gnustep/back/default.nix
new file mode 100644
index 00000000000..54ea8dcf487
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/back/default.nix
@@ -0,0 +1,24 @@
+{ gsmakeDerivation
+, cairo
+, fetchurl
+, base, gui
+, xlibsWrapper
+, freetype
+, pkgconfig
+, libXmu
+}:
+let
+ version = "0.27.0";
+in
+gsmakeDerivation {
+ name = "gnustep-back-${version}";
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-back-${version}.tar.gz";
+ sha256 = "0j400892ysxygh50i3918nn87vkxh15h892jwvphmkd34j8wdn9f";
+ };
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ cairo base gui freetype xlibsWrapper libXmu ];
+ meta = {
+ description = "A generic backend for GNUstep";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/base/default.nix b/nixpkgs/pkgs/desktops/gnustep/base/default.nix
new file mode 100644
index 00000000000..e96dbf0b6fc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/base/default.nix
@@ -0,0 +1,38 @@
+{ aspell, audiofile
+, gsmakeDerivation
+, cups
+, fetchurl
+, gmp, gnutls
+, libffi, libbfd
+, libjpeg, libtiff, libpng, giflib, libungif
+, libxml2, libxslt, libiconv
+, libobjc, libgcrypt
+, icu
+, pkgconfig, portaudio
+}:
+let
+ version = "1.26.0";
+in
+gsmakeDerivation {
+ name = "gnustep-base-${version}";
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-base-${version}.tar.gz";
+ sha256 = "0ws16rwqx0qvqpyjsxbdylfpkgjr19nqc9i3b30wywqcqrkc12zn";
+ };
+ nativeBuildInputs = [ pkgconfig ];
+ propagatedBuildInputs = [
+ aspell audiofile
+ cups
+ gmp gnutls
+ libffi libbfd
+ libjpeg libtiff libpng giflib libungif
+ libxml2 libxslt libiconv
+ libobjc libgcrypt
+ icu
+ portaudio
+ ];
+ patches = [ ./fixup-paths.patch ];
+ meta = {
+ description = "An implementation of AppKit and Foundation libraries of OPENSTEP and Cocoa";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/base/fixup-paths.patch b/nixpkgs/pkgs/desktops/gnustep/base/fixup-paths.patch
new file mode 100644
index 00000000000..fa28412dbf6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/base/fixup-paths.patch
@@ -0,0 +1,373 @@
+diff -r -u gnustep-base-1.24.7/Makefile.postamble gnustep-base-1.24.7.patched/Makefile.postamble
+--- gnustep-base-1.24.7/Makefile.postamble 2011-07-15 19:53:45.000000000 +0600
++++ gnustep-base-1.24.7.patched/Makefile.postamble 2014-11-29 22:25:07.000000000 +0600
+@@ -38,13 +38,13 @@
+ # Things to do after compiling
+ # after-all::
+
+-$(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional:
+- $(ECHO_CREATING)$(MKDIRS) $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional$(END_ECHO)
++$(DESTDIR_GNUSTEP_MAKEFILES)/Additional:
++ $(ECHO_CREATING)$(MKDIRS) $(DESTDIR_GNUSTEP_MAKEFILES)/Additional$(END_ECHO)
+
+ # Things to do before installing
+-before-install:: $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++before-install:: $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ $(ECHO_NOTHING)$(INSTALL_DATA) base.make \
+- $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
++ $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
+
+ # Things to do after installing
+ # after-install::
+@@ -54,7 +54,7 @@
+
+ # Things to do after uninstalling
+ after-uninstall::
+- $(ECHO_NOTHING)rm -f $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
++ $(ECHO_NOTHING)rm -f $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
+
+ # Things to do before cleaning
+ # before-clean::
+diff -r -u gnustep-base-1.24.7/Source/NSPathUtilities.m gnustep-base-1.24.7.patched/Source/NSPathUtilities.m
+--- gnustep-base-1.24.7/Source/NSPathUtilities.m 2014-01-14 13:21:10.000000000 +0600
++++ gnustep-base-1.24.7.patched/Source/NSPathUtilities.m 2015-01-25 13:59:37.000000000 +0600
+@@ -153,16 +153,27 @@
+ static NSString *gnustepLocalUsersDir = nil;
+
+ static NSString *gnustepSystemApps = nil;
++static NSArray *gnustepSystemAppsNix = nil;
+ static NSString *gnustepSystemAdminApps = nil;
++static NSArray *gnustepSystemAdminAppsNix = nil;
+ static NSString *gnustepSystemWebApps = nil;
++static NSArray *gnustepSystemWebAppsNix = nil;
+ static NSString *gnustepSystemTools = nil;
++static NSArray *gnustepSystemToolsNix = nil;
+ static NSString *gnustepSystemAdminTools = nil;
++static NSArray *gnustepSystemAdminToolsNix = nil;
+ static NSString *gnustepSystemLibrary = nil;
++static NSArray *gnustepSystemLibraryNix = nil;
+ static NSString *gnustepSystemLibraries = nil;
++static NSArray *gnustepSystemLibrariesNix = nil;
+ static NSString *gnustepSystemHeaders = nil;
++static NSArray *gnustepSystemHeadersNix = nil;
+ static NSString *gnustepSystemDocumentation = nil;
++static NSArray *gnustepSystemDocumentationNix = nil;
+ static NSString *gnustepSystemDocumentationInfo = nil;
++static NSArray *gnustepSystemDocumentationInfoNix = nil;
+ static NSString *gnustepSystemDocumentationMan = nil;
++static NSArray *gnustepSystemDocumentationManNix = nil;
+
+ static NSString *gnustepNetworkApps = nil;
+ static NSString *gnustepNetworkAdminApps = nil;
+@@ -258,6 +269,18 @@
+ }\
+ })
+
++/* Like ASSIGN_PATH, but permits multiple components in a path
++ */
++#define ASSIGN_PATH_NIX(var, dictionary, key) ({\
++ id val = getPathConfigNix(dictionary, key);\
++ if (val != nil)\
++ {\
++ RELEASE(var);\
++ var = RETAIN(val);\
++ [dictionary removeObjectForKey: key];\
++ }\
++})
++
+ /* Like ASSIGN_PATH(), but permits the result to be a relative path as that
+ * is what we normally use (the path is within the user's home directory).
+ */
+@@ -368,7 +391,7 @@
+ /* Get a full path string */
+ static inline NSString *
+ getPath(NSString *path)
+-{
++{
+ if ([path hasPrefix: @"./"] == YES)
+ {
+ path = [gnustepConfigPath stringByAppendingPathComponent:
+@@ -383,6 +406,33 @@
+ return path;
+ }
+
++static inline NSArray *
++getPathConfigNix(NSDictionary *dict, NSString *key)
++{
++ NSArray *res = nil;
++ NSMutableArray *paths = nil;
++ NSString *path;
++#if defined(__MINGW_)
++ NSString *sep = @";";
++#else
++ NSString *sep = @":";
++#endif
++
++ path = [dict objectForKey: key];
++ if (path != nil)
++ {
++ if ([path rangeOfString:sep].location != NSNotFound)
++ {
++ res = [path componentsSeparatedByString:sep];
++ }
++ else
++ {
++ res = [[NSArray alloc] initWithObjects:path, nil];
++ }
++ }
++ return res;
++}
++
+ /* Get a full path string from a dictionary */
+ static inline NSString *
+ getPathConfig(NSDictionary *dict, NSString *key)
+@@ -468,6 +518,29 @@
+ ASSIGN_PATH(gnustepSystemDocumentationInfo, c,
+ @"GNUSTEP_SYSTEM_DOC_INFO");
+
++ ASSIGN_PATH_NIX(gnustepSystemAppsNix, c,
++ @"NIX_GNUSTEP_SYSTEM_APPS");
++ ASSIGN_PATH_NIX(gnustepSystemAdminAppsNix, c,
++ @"NIX_GNUSTEP_SYSTEM_ADMIN_APPS");
++ ASSIGN_PATH_NIX(gnustepSystemWebAppsNix, c,
++ @"NIX_GNUSTEP_SYSTEM_WEB_APPS");
++ ASSIGN_PATH_NIX(gnustepSystemToolsNix, c,
++ @"NIX_GNUSTEP_SYSTEM_TOOLS");
++ ASSIGN_PATH_NIX(gnustepSystemAdminToolsNix, c,
++ @"NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS");
++ ASSIGN_PATH_NIX(gnustepSystemLibraryNix, c,
++ @"NIX_GNUSTEP_SYSTEM_LIBRARY");
++ ASSIGN_PATH_NIX(gnustepSystemLibrariesNix, c,
++ @"NIX_GNUSTEP_SYSTEM_LIBRARIES");
++ ASSIGN_PATH_NIX(gnustepSystemHeadersNix, c,
++ @"NIX_GNUSTEP_SYSTEM_HEADERS");
++ ASSIGN_PATH_NIX(gnustepSystemDocumentationNix, c,
++ @"NIX_GNUSTEP_SYSTEM_DOC");
++ ASSIGN_PATH_NIX(gnustepSystemDocumentationManNix, c,
++ @"NIX_GNUSTEP_SYSTEM_DOC_MAN");
++ ASSIGN_PATH_NIX(gnustepSystemDocumentationInfoNix, c,
++ @"NIX_GNUSTEP_SYSTEM_DOC_INFO");
++
+ ASSIGN_PATH(gnustepNetworkApps, c,
+ @"GNUSTEP_NETWORK_APPS");
+ ASSIGN_PATH(gnustepNetworkAdminApps, c,
+@@ -1235,6 +1308,18 @@
+ DESTROY(gnustepSystemDocumentationMan);
+ DESTROY(gnustepSystemDocumentationInfo);
+
++ DESTROY(gnustepSystemAppsNix);
++ DESTROY(gnustepSystemAdminAppsNix);
++ DESTROY(gnustepSystemWebAppsNix);
++ DESTROY(gnustepSystemToolsNix);
++ DESTROY(gnustepSystemAdminToolsNix);
++ DESTROY(gnustepSystemLibraryNix);
++ DESTROY(gnustepSystemLibrariesNix);
++ DESTROY(gnustepSystemHeadersNix);
++ DESTROY(gnustepSystemDocumentationNix);
++ DESTROY(gnustepSystemDocumentationManNix);
++ DESTROY(gnustepSystemDocumentationInfoNix);
++
+ DESTROY(gnustepNetworkApps);
+ DESTROY(gnustepNetworkAdminApps);
+ DESTROY(gnustepNetworkWebApps);
+@@ -2183,6 +2268,27 @@
+ if ([add_dir length] > 0 && [paths containsObject: add_dir] == NO) \
+ [paths addObject: add_dir]; \
+ }
++#define ADD_PATH_NIX(mask, base_dirs, add_dir) \
++if ((domainMask & mask) && (base_dirs != nil)) \
++{ \
++ NSEnumerator *e = [base_dirs objectEnumerator]; \
++ NSString *dir = nil; \
++ while (dir = [e nextObject]) { \
++ path = [dir stringByAppendingPathComponent: add_dir]; \
++ if ([path length] > 0 && [paths containsObject: path] == NO) \
++ [paths addObject: path]; \
++ } \
++}
++#define ADD_PLATFORM_PATH_NIX(mask, add_dirs) \
++if ((domainMask & mask) && (add_dirs != nil)) \
++{ \
++ NSEnumerator *e = [add_dirs objectEnumerator]; \
++ NSString *dir = nil; \
++ while (dir = [e nextObject]) { \
++ if ([dir length] > 0 && [paths containsObject: dir] == NO) \
++ [paths addObject:dir]; \
++ } \
++}
+
+ switch (directoryKey)
+ {
+@@ -2191,11 +2297,13 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserAdminApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalAdminApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkAdminApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemAdminApps);
+ }
+ break;
+@@ -2205,6 +2313,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+ }
+ break;
+@@ -2214,6 +2323,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+
+ /* I imagine if ever wanted a separate Demo directory, the
+@@ -2231,6 +2341,7 @@
+
+ case NSCoreServicesDirectory:
+ {
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"CoreServices");
+ ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"CoreServices");
+ }
+ break;
+@@ -2248,6 +2359,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+ }
+ break;
+@@ -2257,6 +2369,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserAdminApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalAdminApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkAdminApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemAdminApps);
+ }
+ break;
+@@ -2266,6 +2379,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserLibrary);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalLibrary);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkLibrary);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemLibrary);
+ }
+ break;
+@@ -2281,6 +2395,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserLibrary);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalLibrary);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkLibrary);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemLibrary);
+ }
+ break;
+@@ -2418,6 +2533,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserDocumentation);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalDocumentation);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkDocumentation);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemDocumentationNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemDocumentation);
+ }
+ break;
+@@ -2449,6 +2565,7 @@
+ ADD_PATH(NSUserDomainMask, gnustepUserLibrary, @"Caches");
+ ADD_PATH(NSLocalDomainMask, gnustepLocalLibrary, @"Caches");
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary, @"Caches");
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"Caches");
+ ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"Caches");
+ }
+ break;
+@@ -2460,6 +2577,8 @@
+ @"ApplicationSupport");
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary,
+ @"ApplicationSupport");
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix,
++ @"ApplicationSupport");
+ ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary,
+ @"ApplicationSupport");
+ }
+@@ -2471,6 +2590,7 @@
+ ADD_PATH(NSUserDomainMask, gnustepUserLibrary, @"Frameworks");
+ ADD_PATH(NSLocalDomainMask, gnustepLocalLibrary, @"Frameworks");
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary, @"Frameworks");
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"Frameworks");
+ ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"Frameworks");
+ }
+ break;
+@@ -2480,6 +2600,7 @@
+ ADD_PATH(NSUserDomainMask, gnustepUserLibrary, @"Fonts");
+ ADD_PATH(NSLocalDomainMask, gnustepLocalLibrary, @"Fonts");
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary, @"Fonts");
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"Fonts");
+ ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"Fonts");
+ }
+ break;
+@@ -2518,6 +2639,12 @@
+ if (part)
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibraries, part);
+
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemLibrariesNix);
++ if (full)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibrariesNix, full);
++ if (part)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibrariesNix, part);
++
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemLibraries);
+ if (full)
+ ADD_PATH(NSSystemDomainMask, gnustepSystemLibraries, full);
+@@ -2560,6 +2687,12 @@
+ if (part)
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkTools, part);
+
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemToolsNix);
++ if (full)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemToolsNix, full);
++ if (part)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemToolsNix, part);
++
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemTools);
+ if (full)
+ ADD_PATH(NSSystemDomainMask, gnustepSystemTools, full);
+@@ -2602,6 +2735,18 @@
+ if (part)
+ ADD_PATH(NSNetworkDomainMask, gnustepNetworkAdminTools, part);
+
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix);
++ if (full)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, full);
++ if (part)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, part);
++
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix);
++ if (full)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, full);
++ if (part)
++ ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, part);
++
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemAdminTools);
+ if (full)
+ ADD_PATH(NSSystemDomainMask, gnustepSystemAdminTools, full);
+@@ -2615,6 +2760,7 @@
+ ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserWebApps);
+ ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalWebApps);
+ ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkWebApps);
++ ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemWebAppsNix);
+ ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemWebApps);
+ }
+ break;
+@@ -2622,6 +2768,8 @@
+
+ #undef ADD_PATH
+ #undef ADD_PLATFORM_PATH
++#undef ADD_PATH_NIX
++#undef ADD_PLATFORM_PATH_NIX
+
+ count = [paths count];
+ for (i = 0; i < count; i++)
diff --git a/nixpkgs/pkgs/desktops/gnustep/default.nix b/nixpkgs/pkgs/desktops/gnustep/default.nix
new file mode 100644
index 00000000000..4f7c13e8e4a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/default.nix
@@ -0,0 +1,23 @@
+{ pkgs, newScope, llvmPackages_6 }:
+
+let
+ callPackage = newScope self;
+
+ self = rec {
+ stdenv = pkgs.clangStdenv;
+
+ gsmakeDerivation = callPackage ./make/gsmakeDerivation.nix {};
+ gorm = callPackage ./gorm {};
+ projectcenter = callPackage ./projectcenter {};
+ system_preferences = callPackage ./systempreferences {};
+ libobjc = callPackage ./libobjc2 {
+ stdenv = if stdenv.cc.isClang then llvmPackages_6.stdenv else stdenv;
+ };
+ make = callPackage ./make {};
+ back = callPackage ./back {};
+ base = callPackage ./base { giflib = pkgs.giflib_4_1; };
+ gui = callPackage ./gui {};
+ gworkspace = callPackage ./gworkspace {};
+ };
+
+in self
diff --git a/nixpkgs/pkgs/desktops/gnustep/gorm/default.nix b/nixpkgs/pkgs/desktops/gnustep/gorm/default.nix
new file mode 100644
index 00000000000..c977c61dd09
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/gorm/default.nix
@@ -0,0 +1,17 @@
+{ fetchurl, base, back, gsmakeDerivation, gui }:
+let
+ version = "1.2.24";
+in
+gsmakeDerivation {
+ name = "gorm-${version}";
+
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/dev-apps/gorm-${version}.tar.gz";
+ sha256 = "1jw7vm5ia7ias1mm5if7vvvb66q50zwiqw0ksj5g14f11v8l61rf";
+ };
+ buildInputs = [ base back gui ];
+
+ meta = {
+ description = "Graphical Object Relationship Modeller is an easy-to-use interface designer for GNUstep";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/gui/default.nix b/nixpkgs/pkgs/desktops/gnustep/gui/default.nix
new file mode 100644
index 00000000000..72d109b6979
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/gui/default.nix
@@ -0,0 +1,16 @@
+{ gsmakeDerivation, fetchurl, base }:
+let
+ version = "0.27.0";
+in
+gsmakeDerivation {
+ name = "gnustep-gui-${version}";
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-gui-${version}.tar.gz";
+ sha256 = "1m6k3fa2ndxv0kl2fazi76mwa27gn5jyp24q0rk96f2djhsy94br";
+ };
+ buildInputs = [ base ];
+ patches = [ ./fixup-all.patch ];
+ meta = {
+ description = "A GUI class library of GNUstep";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/gui/fixup-all.patch b/nixpkgs/pkgs/desktops/gnustep/gui/fixup-all.patch
new file mode 100644
index 00000000000..4b412db409a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/gui/fixup-all.patch
@@ -0,0 +1,56 @@
+diff -r -u gnustep-gui-0.24.0/GNUmakefile.postamble gnustep-gui-0.24.0.patched/GNUmakefile.postamble
+--- gnustep-gui-0.24.0/GNUmakefile.postamble 2010-05-17 22:38:59.000000000 +0600
++++ gnustep-gui-0.24.0.patched/GNUmakefile.postamble 2014-12-01 13:44:05.000000000 +0600
+@@ -40,20 +40,20 @@
+ # The following rule is important mainly for packaging, because in that case
+ # you install into a fake system tree, and the directory is not there.
+ #
+-$(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional:
+- $(MKDIRS) $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++$(DESTDIR_GNUSTEP_MAKEFILES)/Additional:
++ $(MKDIRS) $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+
+ # Things to do before installing
+-before-install:: $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++before-install:: $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ $(INSTALL_DATA) gui.make \
+- $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/gui.make
++ $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/gui.make
+
+ # Things to do after installing
+ # after-install::
+
+ # Things to do before uninstalling
+ before-uninstall::
+- rm -f $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/gui.make
++ rm -f $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/gui.make
+
+ # Things to do after uninstalling
+ # after-uninstall::
+diff -r -u gnustep-gui-0.24.0/TextConverters/RTF/GNUmakefile.preamble gnustep-gui-0.24.0.patched/TextConverters/RTF/GNUmakefile.preamble
+--- gnustep-gui-0.24.0/TextConverters/RTF/GNUmakefile.preamble 2008-06-10 10:01:49.000000000 +0600
++++ gnustep-gui-0.24.0.patched/TextConverters/RTF/GNUmakefile.preamble 2014-12-01 13:02:11.000000000 +0600
+@@ -49,7 +49,7 @@
+ ADDITIONAL_INCLUDE_DIRS +=-I../../Headers/Additions -I../../Headers
+
+ # Additional LDFLAGS to pass to the linker
+-#ADDITIONAL_LDFLAGS +=
++ADDITIONAL_LDFLAGS += -lgnustep-gui
+
+ # Additional library directories the linker should search
+ ADDITIONAL_LIB_DIRS += -L../../Source/$(GNUSTEP_OBJ_DIR)
+diff -r -u gnustep-gui-0.24.0/Tools/GNUmakefile.preamble gnustep-gui-0.24.0.patched/Tools/GNUmakefile.preamble
+--- gnustep-gui-0.24.0/Tools/GNUmakefile.preamble 2006-02-22 12:43:48.000000000 +0600
++++ gnustep-gui-0.24.0.patched/Tools/GNUmakefile.preamble 2014-12-01 12:52:41.000000000 +0600
+@@ -32,9 +32,11 @@
+ ADDITIONAL_LIB_DIRS += -L../Source/$(GNUSTEP_OBJ_DIR) -L../Model/$(GNUSTEP_OBJ_DIR)
+
+ # Additional libraries when linking tools
++make_services_TOOL_LIBS += -lgnustep-base
+ gpbs_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ set_show_service_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ gopen_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
++gclose_TOOL_LIBS += -lgnustep-base
+ gcloseall_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ GSspell_TOOL_LIBS += $(ADDITIONAL_DEPENDS)
+
diff --git a/nixpkgs/pkgs/desktops/gnustep/gworkspace/default.nix b/nixpkgs/pkgs/desktops/gnustep/gworkspace/default.nix
new file mode 100644
index 00000000000..d5018a4350f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/gworkspace/default.nix
@@ -0,0 +1,22 @@
+{ back, base, gui, gsmakeDerivation
+, fetchurl
+, system_preferences
+}:
+let
+ version = "0.9.4";
+in
+gsmakeDerivation {
+ name = "gworkspace-${version}";
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/usr-apps/gworkspace-${version}.tar.gz";
+ sha256 = "0cjn83m7qmbwdpldlyhs239nwswgip3yaz01ahls130dq5qq7hgk";
+ };
+ # additional dependencies:
+ # - PDFKit framework from http://gap.nongnu.org/
+ # - TODO: to --enable-gwmetadata, need libDBKit as well as sqlite!
+ buildInputs = [ back base gui system_preferences ];
+ configureFlags = [ "--with-inotify" ];
+ meta = {
+ description = "A workspace manager for GNUstep";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/libobjc2/default.nix b/nixpkgs/pkgs/desktops/gnustep/libobjc2/default.nix
new file mode 100644
index 00000000000..b058bd87989
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/libobjc2/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+ pname = "libobjc2";
+ version = "2.0";
+
+ src = fetchFromGitHub {
+ owner = "gnustep";
+ repo = "libobjc2";
+ rev = "v${version}";
+ sha256 = "1b4h0a4pqr8j6300qr2wmi33r7ysvp705gs0ypx69hbmifln0mlf";
+ };
+
+ nativeBuildInputs = [ cmake ];
+
+ cmakeFlags = [ "-DCMAKE_INSTALL_LIBDIR=lib" ];
+
+ meta = with lib; {
+ description = "Objective-C runtime for use with GNUstep";
+ homepage = http://gnustep.org/;
+ license = licenses.mit;
+ maintainers = with maintainers; [ ashalkhakov matthewbauer ];
+ platforms = platforms.unix;
+ badPlatforms = [ "aarch64-linux" ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/GNUstep.conf b/nixpkgs/pkgs/desktops/gnustep/make/GNUstep.conf
new file mode 100644
index 00000000000..f4e0e3b8162
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/GNUstep.conf
@@ -0,0 +1,126 @@
+# These GNUSTEP_*_ROOT variables are obsolete, and will be removed.
+#GNUSTEP_SYSTEM_ROOT=/nix/store/ky64z3j9l18wjcssb9pxnc792ihh3bvw-gnustep-make-2.6.6/System
+#GNUSTEP_LOCAL_ROOT=/nix/store/ky64z3j9l18wjcssb9pxnc792ihh3bvw-gnustep-make-2.6.6/Local
+#GNUSTEP_NETWORK_ROOT=/nix/store/ky64z3j9l18wjcssb9pxnc792ihh3bvw-gnustep-make-2.6.6/Network
+
+# The name of the user config file. This file can override
+# some settings in this file. Usually used by users that want
+# to install things into their GNUstep user domain and/or have
+# many such domains.
+GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
+
+# The name of the user directory, if any. This is obsolete,
+# and will be removed.
+GNUSTEP_USER_DIR=GNUstep
+
+# The name of the user directory where defaults (eg, preferences) are
+# stored. If it does not start with a '/', it will be considered
+# relative to the user home directory.
+GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults
+
+
+# This is where the gnustep-make Makefiles are installed.
+# Traditionally, this is /usr/GNUstep/System/Library/Makefiles
+GNUSTEP_MAKEFILES=@gnustepMakefiles@
+
+# This is where the user home directories are. Only used to provide
+# NSUserDirectory in gnustep-base. Never used anywhere else.
+GNUSTEP_SYSTEM_USERS_DIR=/home
+GNUSTEP_NETWORK_USERS_DIR=/home
+GNUSTEP_LOCAL_USERS_DIR=/home
+
+
+# This is where System GUI Applications get installed.
+# Traditionally it is /usr/GNUstep/System/Applications.
+GNUSTEP_SYSTEM_APPS=@systemApps@
+
+# This is where System GUI Applications that only the
+# Administrator can use get installed.
+# Traditionally it is /usr/GNUstep/System/Applications/Admin.
+GNUSTEP_SYSTEM_ADMIN_APPS=@systemAdminApps@
+
+# This is where System Web Applications (GSWeb, SOPE) get
+# installed.
+# Traditionally it is /usr/GNUstep/System/Library/WebApplications.
+GNUSTEP_SYSTEM_WEB_APPS=@systemWebApps@
+
+# This is where System Command-Line Tools get installed.
+# Traditionally it is /usr/GNUstep/System/Tools.
+GNUSTEP_SYSTEM_TOOLS=@systemTools@
+
+# This is where System Command-Line Tools that only the
+# Administrator can use get installed. Important: this
+# should not be in the PATH of normal users.
+# Traditionally it is /usr/GNUstep/System/Tools/Admin.
+GNUSTEP_SYSTEM_ADMIN_TOOLS=@systemAdminTools@
+
+# This is where System resources get installed. This directory will
+# contain a lot of executable code since *step traditionally likes to
+# bundle executables and resources together.
+# Traditionally it is /usr/GNUstep/System/Library.
+GNUSTEP_SYSTEM_LIBRARY=@systemLibrary@
+
+# This is where System headers get installed. They are the
+# library .h headers.
+# Traditionally it is /usr/GNUstep/System/Library/Headers.
+GNUSTEP_SYSTEM_HEADERS=@systemHeaders@
+
+# This is where System libraries get installed. By libraries we mean
+# the shared/static object files that you can link into programs.
+# Traditionally it is /usr/GNUstep/System/Library/Libraries.
+GNUSTEP_SYSTEM_LIBRARIES=@systemLibraries@
+
+# This is where System documentation get installed. This is known
+# not to contain any executable, so we keep it separate.
+# Traditionally it is /usr/GNUstep/System/Library/Documentation.
+GNUSTEP_SYSTEM_DOC=@systemDoc@
+
+# This is where System man pages get installed.
+# Traditionally it is /usr/GNUstep/System/Library/Documentation/man.
+GNUSTEP_SYSTEM_DOC_MAN=@systemDocMan@
+
+# This is where System info pages get installed.
+# Traditionally it is /usr/GNUstep/System/Library/Documentation/info.
+GNUSTEP_SYSTEM_DOC_INFO=@systemDocInfo@
+
+
+GNUSTEP_NETWORK_APPS=@systemApps@
+GNUSTEP_NETWORK_ADMIN_APPS=@systemAdminApps@
+GNUSTEP_NETWORK_WEB_APPS=@systemWebApps@
+GNUSTEP_NETWORK_TOOLS=@systemTools@
+GNUSTEP_NETWORK_ADMIN_TOOLS=@systemAdminTools@
+GNUSTEP_NETWORK_LIBRARY=@systemLibrary@
+GNUSTEP_NETWORK_HEADERS=@systemHeaders@
+GNUSTEP_NETWORK_LIBRARIES=@systemLibraries@
+GNUSTEP_NETWORK_DOC=@systemDoc@
+GNUSTEP_NETWORK_DOC_MAN=@systemDocMan@
+GNUSTEP_NETWORK_DOC_INFO=@systemDocInfo@
+
+GNUSTEP_LOCAL_APPS=@systemApps@
+GNUSTEP_LOCAL_ADMIN_APPS=@systemAdminApps@
+GNUSTEP_LOCAL_WEB_APPS=@systemWebApps@
+GNUSTEP_LOCAL_TOOLS=@systemTools@
+GNUSTEP_LOCAL_ADMIN_TOOLS=@systemAdminTools@
+GNUSTEP_LOCAL_LIBRARY=@systemLibrary@
+GNUSTEP_LOCAL_HEADERS=@systemHeaders@
+GNUSTEP_LOCAL_LIBRARIES=@systemLibraries@
+GNUSTEP_LOCAL_DOC=@systemDoc@
+GNUSTEP_LOCAL_DOC_MAN=@systemDocMan@
+GNUSTEP_LOCAL_DOC_INFO=@systemDocInfo@
+
+# Important: settings in the User should normally be relative paths,
+# and will be interpreted as relative to the user's directory. This
+# allows each user to have their own domain to install things. You
+# can set them to be absolute, mostly if you want to disable them
+# by setting them equal to the ones in the Network domain.
+GNUSTEP_USER_DIR_APPS=GNUstep/Applications
+GNUSTEP_USER_DIR_ADMIN_APPS=GNUstep/Applications/Admin
+GNUSTEP_USER_DIR_WEB_APPS=GNUstep/WebApplications
+GNUSTEP_USER_DIR_TOOLS=GNUstep/Tools
+GNUSTEP_USER_DIR_ADMIN_TOOLS=GNUstep/Tools/Admin
+GNUSTEP_USER_DIR_LIBRARY=GNUstep/Library
+GNUSTEP_USER_DIR_HEADERS=GNUstep/Library/Headers
+GNUSTEP_USER_DIR_LIBRARIES=GNUstep/Library/Libraries
+GNUSTEP_USER_DIR_DOC=GNUstep/Library/Documentation
+GNUSTEP_USER_DIR_DOC_MAN=GNUstep/Library/Documentation/man
+GNUSTEP_USER_DIR_DOC_INFO=GNUstep/Library/Documentation/info
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/builder.sh b/nixpkgs/pkgs/desktops/gnustep/make/builder.sh
new file mode 100644
index 00000000000..1655a75eeba
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/builder.sh
@@ -0,0 +1,122 @@
+source $stdenv/setup
+
+preConfigure() {
+ . $GNUSTEP_MAKEFILES/GNUstep.sh
+}
+
+wrapGSMake() {
+ local program="$1"
+ local config="$2"
+ local wrapped="$(dirname $program)/.$(basename $program)-wrapped"
+
+ mv "$program" "$wrapped"
+
+ cat > "$program"<<EOF
+#! $SHELL -e
+
+export GNUSTEP_CONFIG_FILE="$config"
+
+exec "$wrapped" "\$@" "\${extraFlagsArray[@]}"
+EOF
+ chmod +x "$program"
+}
+
+postInstall() {
+ local conf="$out/share/.GNUstep.conf"
+
+ mkdir -p "$out/share"
+ touch $conf
+
+ # add the current package to the paths
+ local tmp="$out/lib/GNUstep/Applications"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_APPS "$tmp"
+ fi
+ tmp="$out/lib/GNUstep/Applications"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_APPS "$tmp"
+ fi
+ tmp="$out/lib/GNUstep/WebApplications"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_WEB_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_WEB_APPS "$tmp"
+ fi
+ tmp="$out/bin"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_TOOLS "$tmp"
+ fi
+ tmp="$out/sbin"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS "$tmp"
+ fi
+ tmp="$out/lib/GNUstep"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARY" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARY "$tmp"
+ fi
+ tmp="$out/include"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_HEADERS" in *"${tmp}"*) false;; *) true;; esac; then
+ if [ -z "$NIX_GNUSTEP_SYSTEM_HEADERS" ]; then
+ export NIX_GNUSTEP_SYSTEM_HEADERS="$tmp"
+ else
+ export NIX_GNUSTEP_SYSTEM_HEADERS+=" $tmp"
+ fi
+ fi
+ tmp="$out/lib"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARIES" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARIES "$tmp"
+ fi
+ tmp="$out/share/GNUstep/Documentation"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_DOC "$tmp"
+ fi
+ tmp="$out/share/man"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_MAN" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_MAN "$tmp"
+ fi
+ tmp="$out/share/info"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_INFO" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_INFO "$tmp"
+ fi
+
+ # write the config file
+ echo GNUSTEP_MAKEFILES=$GNUSTEP_MAKEFILES >> $conf
+ if [ -n "$NIX_GNUSTEP_SYSTEM_APPS" ]; then
+ echo NIX_GNUSTEP_SYSTEM_APPS="$NIX_GNUSTEP_SYSTEM_APPS"
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" ]; then
+ echo NIX_GNUSTEP_SYSTEM_ADMIN_APPS="$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_WEB_APPS" ]; then
+ echo NIX_GNUSTEP_SYSTEM_WEB_APPS="$NIX_GNUSTEP_SYSTEM_WEB_APPS" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_TOOLS" ]; then
+ echo NIX_GNUSTEP_SYSTEM_TOOLS="$NIX_GNUSTEP_SYSTEM_TOOLS" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" ]; then
+ echo NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS="$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_LIBRARY" ]; then
+ echo NIX_GNUSTEP_SYSTEM_LIBRARY="$NIX_GNUSTEP_SYSTEM_LIBRARY" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_HEADERS" ]; then
+ echo NIX_GNUSTEP_SYSTEM_HEADERS="$NIX_GNUSTEP_SYSTEM_HEADERS" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_LIBRARIES" ]; then
+ echo NIX_GNUSTEP_SYSTEM_LIBRARIES="$NIX_GNUSTEP_SYSTEM_LIBRARIES" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_DOC" ]; then
+ echo NIX_GNUSTEP_SYSTEM_DOC="$NIX_GNUSTEP_SYSTEM_DOC" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_DOC_MAN" ]; then
+ echo NIX_GNUSTEP_SYSTEM_DOC_MAN="$NIX_GNUSTEP_SYSTEM_DOC_MAN" >> $conf
+ fi
+ if [ -n "$NIX_GNUSTEP_SYSTEM_DOC_INFO" ]; then
+ echo NIX_GNUSTEP_SYSTEM_DOC_INFO="$NIX_GNUSTEP_SYSTEM_DOC_INFO" >> $conf
+ fi
+
+ for i in $out/bin/*; do
+ echo "wrapping $(basename $i)"
+ wrapGSMake "$i" "$out/share/.GNUstep.conf"
+ done
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/default.nix b/nixpkgs/pkgs/desktops/gnustep/make/default.nix
new file mode 100644
index 00000000000..64e9332a306
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, clang, which, libobjc }:
+
+let
+ version = "2.7.0";
+in
+
+stdenv.mkDerivation {
+ pname = "gnustep-make";
+ inherit version;
+
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-make-${version}.tar.gz";
+ sha256 = "1khiygfkz0zhh9b5nybn40g0xnnjxchk24n49hff1bwanszir84h";
+ };
+
+ configureFlags = [
+ "--with-layout=fhs-system"
+ "--disable-install-p"
+ ];
+
+ preConfigure = ''
+ configureFlags="$configureFlags --with-config-file=$out/etc/GNUstep/GNUstep.conf"
+ '';
+
+ makeFlags = [
+ "GNUSTEP_INSTALLATION_DOMAIN=SYSTEM"
+ ];
+
+ buildInputs = [ clang which libobjc ];
+ patches = [ ./fixup-paths.patch ];
+ setupHook = ./setup-hook.sh;
+ meta = {
+ description = "A build manager for GNUstep";
+ homepage = http://gnustep.org/;
+ license = stdenv.lib.licenses.lgpl2Plus;
+ maintainers = with stdenv.lib.maintainers; [ ashalkhakov matthewbauer ];
+ platforms = stdenv.lib.platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/fixup-paths.patch b/nixpkgs/pkgs/desktops/gnustep/make/fixup-paths.patch
new file mode 100644
index 00000000000..b5eb093ad96
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/fixup-paths.patch
@@ -0,0 +1,197 @@
+diff -r -u gnustep-make-2.6.6/common.make gnustep-make-2.6.6.patched/common.make
+--- gnustep-make-2.6.6/common.make 2013-03-04 17:21:55.000000000 +0600
++++ gnustep-make-2.6.6.patched/common.make 2015-01-18 14:36:25.000000000 +0600
+@@ -135,7 +135,9 @@
+ endif
+ # Then include makefiles with flags/config options installed by the
+ # libraries themselves
+--include $(GNUSTEP_MAKEFILES)/Additional/*.make
++ifneq ($(NIX_GNUSTEP_MAKEFILES_ADDITIONAL),)
++include $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)
++endif
+
+ #
+ # Determine target specific settings
+diff -r -u gnustep-make-2.6.6/GNUmakefile.in gnustep-make-2.6.6.patched/GNUmakefile.in
+--- gnustep-make-2.6.6/GNUmakefile.in 2013-09-20 12:13:15.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUmakefile.in 2014-12-07 20:35:27.000000000 +0600
+@@ -173,7 +173,6 @@
+ "$(makedir)/$(GNUSTEP_TARGET_CPU)" \
+ "$(makedir)/$(GNUSTEP_TARGET_DIR)" \
+ "$(makedir)/$(GNUSTEP_TARGET_LDIR)" \
+- "$(makedir)/Additional" \
+ "$(makedir)/Auxiliary" \
+ "$(makedir)/Master" \
+ "$(makedir)/Instance" \
+@@ -314,7 +313,6 @@
+ -rmdir "$(makedir)/Instance"
+ -rmdir "$(makedir)/Master"
+ -rmdir "$(makedir)/Auxiliary"
+- -rmdir "$(makedir)/Additional"
+ -rmdir "$(makedir)/$(GNUSTEP_TARGET_LDIR)"
+ -rmdir "$(makedir)/$(GNUSTEP_TARGET_DIR)"
+ -rmdir "$(makedir)/$(GNUSTEP_TARGET_CPU)"
+diff -r -u gnustep-make-2.6.6/gnustep-config.in gnustep-make-2.6.6.patched/gnustep-config.in
+--- gnustep-make-2.6.6/gnustep-config.in 2013-07-02 16:06:24.000000000 +0600
++++ gnustep-make-2.6.6.patched/gnustep-config.in 2014-12-09 21:29:49.000000000 +0600
+@@ -66,6 +66,7 @@
+ echo " --variable=OBJCXX"
+ echo " --variable=GNUMAKE"
+ echo " --variable=GNUSTEP_MAKEFILES"
++ echo " --variable=NIX_GNUSTEP_MAKEFILES_ADDITIONAL"
+ echo " --variable=GNUSTEP_USER_DEFAULTS_DIR"
+ echo " --variable=GNUSTEP_HOST"
+ echo " --variable=GNUSTEP_HOST_CPU"
+@@ -153,6 +154,8 @@
+
+ export GNUSTEP_MAKEFILES
+
++export NIX_GNUSTEP_MAKEFILES_ADDITIONAL
++
+ #
+ # If all they want to know if GNUSTEP_MAKEFILES or anything that
+ # we can compute only using GNUSTEP_MAKEFILES, we can print it out
+@@ -168,6 +171,8 @@
+ exit 0;;
+ --variable=GNUSTEP_MAKEFILES) echo "$GNUSTEP_MAKEFILES"
+ exit 0;;
++ --variable=NIX_GNUSTEP_MAKEFILES_ADDITIONAL) echo "$NIX_GNUSTEP_MAKEFILES_ADDITIONAL"
++ exit 0;;
+ --variable=GNUMAKE) echo "@GNUMAKE@"
+ exit 0;;
+ --debug-flags) @GNUMAKE@ -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-objc-flags quiet=yes debug=yes 2>/dev/null
+Only in gnustep-make-2.6.6.patched: gnustep-config.in~
+diff -r -u gnustep-make-2.6.6/GNUstep.csh.in gnustep-make-2.6.6.patched/GNUstep.csh.in
+--- gnustep-make-2.6.6/GNUstep.csh.in 2011-05-03 13:40:10.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep.csh.in 2014-12-09 20:14:05.000000000 +0600
+@@ -130,6 +130,10 @@
+ setenv GNUSTEP_MAKEFILES "@GNUSTEP_MAKEFILES@"
+ endif
+
++if ( ! ${?NIX_GNUSTEP_MAKEFILES_ADDITIONAL} ) then
++ setenv NIX_GNUSTEP_MAKEFILES_ADDITIONAL "@NIX_GNUSTEP_MAKEFILES_ADDITIONAL@"
++endif
++
+ if ( "${GNUSTEP_MAKE_STRICT_V2_MODE}" == "yes" ) then
+ unsetenv GNUSTEP_USER_DIR
+ unsetenv GNUSTEP_USER_ROOT
+Only in gnustep-make-2.6.6.patched: GNUstep.csh.in~
+diff -r -u gnustep-make-2.6.6/GNUstep.sh.in gnustep-make-2.6.6.patched/GNUstep.sh.in
+--- gnustep-make-2.6.6/GNUstep.sh.in 2012-02-21 20:21:38.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep.sh.in 2015-01-18 14:48:09.000000000 +0600
+@@ -173,7 +173,6 @@
+ fi
+ export GNUSTEP_MAKEFILES
+
+-
+ if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
+ # Make sure this is never set in gnustep-make v2 strict mode; it
+ # might have been set in the config file.
+@@ -300,7 +299,7 @@
+ # for each duplicate. When there are many duplicates it's faster to
+ # use print_unique_pathlist.sh first to remove them and skip the
+ # echos+greps later.
+-GNUSTEP_TOOLS_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_TOOLS" "$GNUSTEP_LOCAL_TOOLS" "$GNUSTEP_NETWORK_TOOLS" "$GNUSTEP_SYSTEM_TOOLS" $fixup_paths`
++GNUSTEP_TOOLS_PATHLIST=$NIX_GNUSTEP_SYSTEM_TOOLS
+
+ # Now, we check the paths in GNUSTEP_*_ADMIN_TOOLS. These paths
+ # should only be used by Administrators -- normal users don't have
+@@ -313,7 +312,7 @@
+
+ # So we examine GNUSTEP_*_ADMIN_TOOLS; if we find any path in that
+ # list that exists and that we can write to, we add it to our PATH.
+-for dir in "$GNUSTEP_SYSTEM_ADMIN_TOOLS" "$GNUSTEP_NETWORK_ADMIN_TOOLS" "$GNUSTEP_LOCAL_ADMIN_TOOLS" "$GNUSTEP_USER_ADMIN_TOOLS"; do
++for dir in $(echo "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" | tr ":" "\n"); do
+ if [ -d "$dir" -a -w "$dir" ]; then
+ # Only add the new dir if it's not already in GNUSTEP_TOOLS_PATHLIST
+ if (echo ":${GNUSTEP_TOOLS_PATHLIST}:" \
+@@ -356,7 +355,7 @@
+ export PATH
+
+ # Determine the library paths
+-GNUSTEP_LIBRARIES_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARIES" "$GNUSTEP_LOCAL_LIBRARIES" "$GNUSTEP_NETWORK_LIBRARIES" "$GNUSTEP_SYSTEM_LIBRARIES" $fixup_paths`
++GNUSTEP_LIBRARIES_PATHLIST=$NIX_GNUSTEP_SYSTEM_LIBRARIES
+
+ old_IFS="$IFS"
+ IFS=:
+@@ -486,7 +485,7 @@
+ #
+ # Setup Java CLASSPATH and Guile GUILE_LOAD_PATH
+ #
+-GNUSTEP_LIBRARY_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY" "$GNUSTEP_LOCAL_LIBRARY" "$GNUSTEP_NETWORK_LIBRARY" "$GNUSTEP_SYSTEM_LIBRARY" $fixup_paths`
++GNUSTEP_LIBRARY_PATHLIST=$NIX_GNUSTEP_SYSTEM_LIBRARY
+
+ old_IFS="$IFS"
+ IFS=:
+@@ -526,7 +525,7 @@
+ # xxx/Library/Documentation/info, are found by the info browsing
+ # programs. To get this effect, we add those paths to INFOPATH.
+ #
+-GNUSTEP_INFO_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_DOC_INFO" "$GNUSTEP_LOCAL_DOC_INFO" "$GNUSTEP_NETWORK_DOC_INFO" "$GNUSTEP_SYSTEM_DOC_INFO" $fixup_paths`
++GNUSTEP_INFO_PATHLIST=$NIX_GNUSTEP_SYSTEM_DOC_INFO
+ old_IFS="$IFS"
+ IFS=:
+ for dir in $GNUSTEP_INFO_PATHLIST; do
+@@ -559,6 +558,7 @@
+
+ unset GNUSTEP_KEEP_CONFIG_FILE GNUSTEP_KEEP_USER_CONFIG_FILE
+
++
+ export GNUSTEP_CONFIG_FILE GNUSTEP_USER_CONFIG_FILE
+
+ export GNUSTEP_USER_DEFAULTS_DIR
+diff -r -u gnustep-make-2.6.6/GNUstep-strict-v2.conf.in gnustep-make-2.6.6.patched/GNUstep-strict-v2.conf.in
+--- gnustep-make-2.6.6/GNUstep-strict-v2.conf.in 2008-01-15 20:35:36.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep-strict-v2.conf.in 2014-12-07 22:04:56.000000000 +0600
+@@ -47,7 +47,6 @@
+ # Traditionally, this is /usr/GNUstep/System/Library/Makefiles
+ GNUSTEP_MAKEFILES=@GNUSTEP_MAKEFILES@
+
+-
+ # This is where the user home directories are. Only used to provide
+ # NSUserDirectory in gnustep-base. Never used anywhere else.
+ GNUSTEP_SYSTEM_USERS_DIR=@GNUSTEP_SYSTEM_USERS_DIR@
+diff -r -u gnustep-make-2.6.6/library-combo.make gnustep-make-2.6.6.patched/library-combo.make
+--- gnustep-make-2.6.6/library-combo.make 2012-02-21 19:53:02.000000000 +0600
++++ gnustep-make-2.6.6.patched/library-combo.make 2014-12-09 20:15:05.000000000 +0600
+@@ -142,7 +142,7 @@
+ #
+ # Third-party foundations not using make package
+ # Our own foundation will install a base.make file into
+-# $GNUSTEP_MAKEFILES/Additional/ to set the needed flags
++# $NIX_GNUSTEP_MAKEFILES_ADDITIONAL to set the needed flags
+ #
+ ifeq ($(FOUNDATION_LIB), nx)
+ # -framework Foundation is used both to find headers, and to link
+@@ -166,7 +166,7 @@
+
+ #
+ # FIXME - Ask Helge to move this inside his libFoundation, and have
+-# it installed as a $(GNUSTEP_MAKEFILES)/Additional/libFoundation.make
++# it installed as a $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)/libFoundation.make
+ #
+ ifeq ($(FOUNDATION_LIB),fd)
+ -include $(GNUSTEP_MAKEFILES)/libFoundation.make
+@@ -193,7 +193,7 @@
+ GUI_LIBS =
+ #
+ # Third-party GUI libraries - our own sets its flags into
+-# $(GNUSTEP_MAKEFILES)/Additional/gui.make
++# $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)/gui.make
+ #
+ ifeq ($(GUI_LIB), nx)
+ GUI_DEFINE = -DNeXT_GUI_LIBRARY=1
+diff -r -u gnustep-make-2.6.6/rules.make gnustep-make-2.6.6.patched/rules.make
+--- gnustep-make-2.6.6/rules.make 2013-07-04 16:05:44.000000000 +0600
++++ gnustep-make-2.6.6.patched/rules.make 2014-12-09 21:31:04.000000000 +0600
+@@ -667,7 +667,9 @@
+ exit 1$(END_ECHO)
+ endif
+
+-$(GNUSTEP_MAKEFILES)/Additional/*.make: ;
++ifneq ($(NIX_GNUSTEP_MAKEFILES_ADDITIONAL),)
++$(NIX_GNUSTEP_MAKEFILES_ADDITIONAL): ;
++endif
+
+ $(GNUSTEP_MAKEFILES)/Master/*.make: ;
+
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/gsmakeDerivation.nix b/nixpkgs/pkgs/desktops/gnustep/make/gsmakeDerivation.nix
new file mode 100644
index 00000000000..7bb287c3fa5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/gsmakeDerivation.nix
@@ -0,0 +1,19 @@
+{ stdenv, make, makeWrapper, which }:
+{ buildInputs ? [], ...} @ args:
+stdenv.mkDerivation (args // {
+ buildInputs = [ makeWrapper make which ] ++ buildInputs;
+
+ builder = ./builder.sh;
+ setupHook = ./setup-hook.sh;
+
+ GNUSTEP_MAKEFILES = "${make}/share/GNUstep/Makefiles";
+
+ meta = {
+ homepage = http://gnustep.org/;
+
+ license = stdenv.lib.licenses.lgpl2Plus;
+
+ maintainers = with stdenv.lib.maintainers; [ ashalkhakov matthewbauer ];
+ platforms = stdenv.lib.platforms.linux;
+ } // (if builtins.hasAttr "meta" args then args.meta else {});
+})
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/setup-hook.sh b/nixpkgs/pkgs/desktops/gnustep/make/setup-hook.sh
new file mode 100644
index 00000000000..53138901116
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/setup-hook.sh
@@ -0,0 +1,77 @@
+# this path is used by some packages to install additional makefiles
+export DESTDIR_GNUSTEP_MAKEFILES=$out/share/GNUstep/Makefiles
+
+installFlagsArray=( \
+ "GNUSTEP_INSTALLATION_DOMAIN=SYSTEM" \
+ "GNUSTEP_SYSTEM_APPS=$out/lib/GNUstep/Applications" \
+ "GNUSTEP_SYSTEM_ADMIN_APPS=$out/lib/GNUstep/Applications" \
+ "GNUSTEP_SYSTEM_WEB_APPS=$out/lib/GNUstep/WebApplications" \
+ "GNUSTEP_SYSTEM_TOOLS=$out/bin" \
+ "GNUSTEP_SYSTEM_ADMIN_TOOLS=$out/sbin" \
+ "GNUSTEP_SYSTEM_LIBRARY=$out/lib/GNUstep" \
+ "GNUSTEP_SYSTEM_HEADERS=$out/include" \
+ "GNUSTEP_SYSTEM_LIBRARIES=$out/lib" \
+ "GNUSTEP_SYSTEM_DOC=$out/share/GNUstep/Documentation" \
+ "GNUSTEP_SYSTEM_DOC_MAN=$out/share/man" \
+ "GNUSTEP_SYSTEM_DOC_INFO=$out/share/info" \
+)
+
+addEnvVars() {
+ local filename
+
+ for filename in $1/share/GNUstep/Makefiles/Additional/*.make ; do
+ if case "$NIX_GNUSTEP_MAKEFILES_ADDITIONAL" in *"{$filename}"*) false;; *) true;; esac; then
+ export NIX_GNUSTEP_MAKEFILES_ADDITIONAL+=" $filename"
+ fi
+ done
+
+ local tmp="$1/lib/GNUstep/Applications"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_APPS "$tmp"
+ fi
+ tmp="$1/lib/GNUstep/Applications"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_APPS "$tmp"
+ fi
+ tmp="$1/lib/GNUstep/WebApplications"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_WEB_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_WEB_APPS "$tmp"
+ fi
+ tmp="$1/bin"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_TOOLS "$tmp"
+ fi
+ tmp="$1/sbin"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS "$tmp"
+ fi
+ tmp="$1/lib/GNUstep"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARY" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARY "$tmp"
+ fi
+ tmp="$1/include"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_HEADERS" in *"${tmp}"*) false;; *) true;; esac; then
+ if [ -z "$NIX_GNUSTEP_SYSTEM_HEADERS" ]; then
+ export NIX_GNUSTEP_SYSTEM_HEADERS="$tmp"
+ else
+ export NIX_GNUSTEP_SYSTEM_HEADERS+=" $tmp"
+ fi
+ fi
+ tmp="$1/lib"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARIES" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARIES "$tmp"
+ fi
+ tmp="$1/share/GNUstep/Documentation"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_DOC "$tmp"
+ fi
+ tmp="$1/share/man"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_MAN" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_MAN "$tmp"
+ fi
+ tmp="$1/share/info"
+ if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_INFO" in *"${tmp}"*) false;; *) true;; esac; then
+ addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_INFO "$tmp"
+ fi
+}
+addEnvHooks "$targetOffset" addEnvVars
diff --git a/nixpkgs/pkgs/desktops/gnustep/make/wrapper.sh b/nixpkgs/pkgs/desktops/gnustep/make/wrapper.sh
new file mode 100644
index 00000000000..1bc2e130d88
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/make/wrapper.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+. $GNUSTEP_MAKEFILES/GNUstep.sh
+$1
diff --git a/nixpkgs/pkgs/desktops/gnustep/projectcenter/default.nix b/nixpkgs/pkgs/desktops/gnustep/projectcenter/default.nix
new file mode 100644
index 00000000000..abfdac1e7af
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/projectcenter/default.nix
@@ -0,0 +1,23 @@
+{ fetchurl
+, base, back, gsmakeDerivation, gui, gorm
+, gnumake, gdb
+}:
+let
+ version = "0.6.2";
+in
+gsmakeDerivation {
+ name = "projectcenter-${version}";
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/dev-apps/ProjectCenter-${version}.tar.gz";
+ sha256 = "0wwlbpqf541apw192jb633d634zkpjhcrrkd1j80y9hihphll465";
+ };
+
+ # NOTE: need a patch for ProjectCenter to help it locate some necessary tools:
+ # 1. Framework/PCProjectLauncher.m, locate gdb (say among NIX_GNUSTEP_SYSTEM_TOOLS)
+ # 2. Framework/PCProjectBuilder.m, locate gmake (similar)
+ propagatedBuildInputs = [ base back gui gnumake gdb gorm ];
+
+ meta = {
+ description = "GNUstep's integrated development environment";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/gnustep/systempreferences/default.nix b/nixpkgs/pkgs/desktops/gnustep/systempreferences/default.nix
new file mode 100644
index 00000000000..096520f08f3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnustep/systempreferences/default.nix
@@ -0,0 +1,17 @@
+{ back, base, gui, gsmakeDerivation, fetchurl }:
+let
+ version = "1.2.0";
+in
+gsmakeDerivation {
+ name = "system_preferences-${version}";
+ src = fetchurl {
+ url = "ftp://ftp.gnustep.org/pub/gnustep/usr-apps/SystemPreferences-${version}.tar.gz";
+ sha256 = "1fg7c3ihfgvl6n21rd17fs9ivx3l8ps874m80vz86n1callgs339";
+ };
+# GNUSTEP_MAKEFILES = "${gnustep_make}/share/GNUstep/Makefiles";
+ buildInputs = [ back base gui ];
+# propagatedBuildInputs = [ gnustep_back gnustep_base gnustep_gui ];
+ meta = {
+ description = "The settings manager for the GNUstep environment and its applications";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lumina/default.nix b/nixpkgs/pkgs/desktops/lumina/default.nix
new file mode 100644
index 00000000000..10e75eea38f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lumina/default.nix
@@ -0,0 +1,26 @@
+{ pkgs, libsForQt5 }:
+
+let
+ packages = self: with self; {
+
+ lumina = callPackage ./lumina { };
+ lumina-calculator = callPackage ./lumina-calculator { };
+ lumina-pdf = callPackage ./lumina-pdf { };
+
+ preRequisitePackages = [
+ pkgs.fluxbox
+ pkgs.libsForQt5.kwindowsystem
+ pkgs.numlockx
+ pkgs.qt5.qtsvg
+ pkgs.xscreensaver
+ ];
+
+ corePackages = [
+ lumina
+ lumina-calculator
+ lumina-pdf
+ ];
+
+ };
+
+in pkgs.lib.makeScope libsForQt5.newScope packages
diff --git a/nixpkgs/pkgs/desktops/lumina/lumina-calculator/default.nix b/nixpkgs/pkgs/desktops/lumina/lumina-calculator/default.nix
new file mode 100644
index 00000000000..70e0f2e3511
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lumina/lumina-calculator/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, qmake, qtbase, qttools }:
+
+stdenv.mkDerivation rec {
+ pname = "lumina-calculator";
+ version = "2019-04-27";
+
+ src = fetchFromGitHub {
+ owner = "lumina-desktop";
+ repo = pname;
+ rev = "ccb792fc713aa7163fffd37fc20c83ffe9ca7523";
+ sha256 = "0cdyz94znycsc3qxg5bmg51bwms7586d4ja1bsmj8cb9pd3lv980";
+ };
+
+ sourceRoot = "source/src-qt5";
+
+ nativeBuildInputs = [ qmake qttools ];
+
+ buildInputs = [ qtbase ];
+
+ qmakeFlags = [
+ "CONFIG+=WITH_I18N"
+ "LRELEASE=${stdenv.lib.getDev qttools}/bin/lrelease"
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Scientific calculator for the Lumina Desktop";
+ homepage = https://github.com/lumina-desktop/lumina-calculator;
+ license = licenses.bsd3;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lumina/lumina-pdf/default.nix b/nixpkgs/pkgs/desktops/lumina/lumina-pdf/default.nix
new file mode 100644
index 00000000000..62d59d18cc5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lumina/lumina-pdf/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, qmake, qtbase, qttools, poppler }:
+
+stdenv.mkDerivation rec {
+ pname = "lumina-pdf";
+ version = "2019-04-27";
+
+ src = fetchFromGitHub {
+ owner = "lumina-desktop";
+ repo = pname;
+ rev = "645ed591ef91c3607d3ab87dd86f7acfd08b05c9";
+ sha256 = "0gl943jb9c9rcgb5wksx3946hwlifghfd27r97skm9is8ih6k0vn";
+ };
+
+ sourceRoot = "source/src-qt5";
+
+ nativeBuildInputs = [ qmake qttools ];
+
+ buildInputs = [ qtbase poppler ];
+
+ postPatch = ''
+ sed -i '1i\#include <memory>\' Renderer-poppler.cpp
+ '';
+
+ qmakeFlags = [
+ "CONFIG+=WITH_I18N"
+ "LRELEASE=${stdenv.lib.getDev qttools}/bin/lrelease"
+ ];
+
+ enableParallelBuilding = false;
+
+ meta = with stdenv.lib; {
+ description = "PDF viewer for the Lumina Desktop";
+ homepage = https://github.com/lumina-desktop/lumina-pdf;
+ license = licenses.bsd3;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lumina/lumina/LuminaOS-NixOS.cpp.patch b/nixpkgs/pkgs/desktops/lumina/lumina/LuminaOS-NixOS.cpp.patch
new file mode 100644
index 00000000000..6ddd9c76591
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lumina/lumina/LuminaOS-NixOS.cpp.patch
@@ -0,0 +1,26 @@
+diff --git a/src-qt5/core/libLumina/LuminaOS-NixOS.cpp b/src-qt5/core/libLumina/LuminaOS-NixOS.cpp
+index b92d1b0..441b1bf 100644
+--- a/src-qt5/core/libLumina/LuminaOS-NixOS.cpp
++++ b/src-qt5/core/libLumina/LuminaOS-NixOS.cpp
+@@ -13,17 +13,17 @@
+ //can't read xbrightness settings - assume invalid until set
+ static int screenbrightness = -1;
+
+-QString LOS::OSName(){ return "Gentoo Linux"; }
++QString LOS::OSName(){ return "NixOS"; }
+
+ //OS-specific prefix(s)
+ // NOTE: PREFIX, L_ETCDIR, L_SHAREDIR are defined in the OS-detect.pri project file and passed in
+ QString LOS::LuminaShare(){ return (L_SHAREDIR+"/lumina-desktop/"); } //Install dir for Lumina share files
+-QString LOS::AppPrefix(){ return "/usr/"; } //Prefix for applications
+-QString LOS::SysPrefix(){ return "/"; } //Prefix for system
++QString LOS::AppPrefix(){ return PREFIX+"/usr"; } //Prefix for applications
++QString LOS::SysPrefix(){ return PREFIX; } //Prefix for system
+
+ //OS-specific application shortcuts (*.desktop files)
+ QString LOS::ControlPanelShortcut(){ return ""; } //system control panel
+-QString LOS::AppStoreShortcut(){ return LOS::AppPrefix() + "/share/applications/porthole.desktop"; } //graphical app/pkg manager
++QString LOS::AppStoreShortcut(){ return ""; } //graphical app/pkg manager
+ //OS-specific RSS feeds (Format: QStringList[ <name>::::<url> ]; )
+ QStringList LOS::RSSFeeds(){ return QStringList(); }
+
diff --git a/nixpkgs/pkgs/desktops/lumina/lumina/avoid-absolute-path-on-sessdir.patch b/nixpkgs/pkgs/desktops/lumina/lumina/avoid-absolute-path-on-sessdir.patch
new file mode 100644
index 00000000000..f5ef6cba41f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lumina/lumina/avoid-absolute-path-on-sessdir.patch
@@ -0,0 +1,11 @@
+diff -Naur lumina-1.0.0-Release-p1-OLD/src-qt5/OS-detect.pri lumina-1.0.0-Release-p1-PATCH/src-qt5/OS-detect.pri
+--- lumina-1.0.0-Release-p1-OLD/src-qt5/OS-detect.pri 2016-08-09 12:04:30.000000000 -0300
++++ lumina-1.0.0-Release-p1-PATCH/src-qt5/OS-detect.pri 2016-08-13 17:32:18.272137900 -0300
+@@ -55,7 +55,6 @@
+ #Use the defaults for everything else
+
+ }else : linux-*{
+- L_SESSDIR=/usr/share/xsessions
+ OS=Linux
+ LIBS += -L/usr/local/lib -L/usr/lib -L/lib
+
diff --git a/nixpkgs/pkgs/desktops/lumina/lumina/default.nix b/nixpkgs/pkgs/desktops/lumina/lumina/default.nix
new file mode 100644
index 00000000000..c758fc38a1b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lumina/lumina/default.nix
@@ -0,0 +1,89 @@
+{ stdenv,
+ fetchFromGitHub,
+ desktop-file-utils,
+ fluxbox,
+ numlockx,
+ qmake,
+ qtbase,
+ qtmultimedia,
+ qtsvg,
+ qttools,
+ qtx11extras,
+ xorg,
+ xscreensaver,
+ wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "lumina";
+ version = "1.5.0";
+
+ src = fetchFromGitHub {
+ owner = "lumina-desktop";
+ repo = pname;
+ rev = "v${version}";
+ sha256 = "0rj2gzifr98db7i82cg3hg7l5yfik810pjpawg6n54qbzq987z25";
+ };
+
+ nativeBuildInputs = [
+ qmake
+ qttools
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ xorg.libxcb
+ xorg.libXcursor
+ xorg.libXdamage
+ xorg.xcbutilwm
+ xorg.xcbutilimage
+ qtbase
+ qtsvg
+ qtmultimedia
+ qtx11extras
+ fluxbox
+ xscreensaver
+ desktop-file-utils
+ numlockx
+ ];
+
+ patches = [
+ ./avoid-absolute-path-on-sessdir.patch
+ ./LuminaOS-NixOS.cpp.patch
+ ];
+
+ prePatch = ''
+ # Copy Gentoo setup as NixOS setup and then patch it
+ # TODO: write a complete NixOS setup?
+ cp -a src-qt5/core/libLumina/LuminaOS-Gentoo.cpp src-qt5/core/libLumina/LuminaOS-NixOS.cpp
+ '';
+
+ postPatch = ''
+ # Fix plugin dir
+ substituteInPlace src-qt5/core/lumina-theme-engine/lthemeengine.pri \
+ --replace "\$\$[QT_INSTALL_PLUGINS]" "$out/$qtPluginPrefix"
+
+ # Fix location of fluxbox styles
+ substituteInPlace src-qt5/core-utils/lumina-config/pages/page_fluxbox_settings.cpp \
+ --replace 'LOS::AppPrefix()+"share/fluxbox' "\"${fluxbox}/share/fluxbox"
+ '';
+
+ qmakeFlags = [
+ "LINUX_DISTRO=NixOS"
+ "CONFIG+=WITH_I18N"
+ "LRELEASE=${stdenv.lib.getDev qttools}/bin/lrelease"
+ ];
+
+ meta = with stdenv.lib; {
+ description = "A lightweight, portable desktop environment";
+ longDescription = ''
+ The Lumina Desktop Environment is a lightweight system interface
+ that is designed for use on any Unix-like operating system. It
+ is based on QT5.
+ '';
+ homepage = https://lumina-desktop.org;
+ license = licenses.bsd3;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxde/core/lxappearance/default.nix b/nixpkgs/pkgs/desktops/lxde/core/lxappearance/default.nix
new file mode 100644
index 00000000000..c06a99eb36c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxde/core/lxappearance/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, intltool, pkgconfig, libX11, gtk2, withGtk3 ? false, gtk3 }:
+
+stdenv.mkDerivation rec {
+ name = "lxappearance-0.6.3";
+
+ src = fetchurl{
+ url = "mirror://sourceforge/project/lxde/LXAppearance/${name}.tar.xz";
+ sha256 = "0f4bjaamfxxdr9civvy55pa6vv9dx1hjs522gjbbgx7yp1cdh8kj";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ libX11 (if withGtk3 then gtk3 else gtk2) ];
+
+ patches = [ ./lxappearance-0.6.3-xdg.system.data.dirs.patch ];
+
+ configureFlags = stdenv.lib.optional withGtk3 "--enable-gtk3";
+
+ meta = {
+ description = "A lightweight program for configuring the theme and fonts of gtk applications";
+ homepage = https://lxde.org/;
+ maintainers = [ stdenv.lib.maintainers.hinton ];
+ platforms = stdenv.lib.platforms.linux;
+ license = stdenv.lib.licenses.gpl2;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxde/core/lxappearance/lxappearance-0.6.3-xdg.system.data.dirs.patch b/nixpkgs/pkgs/desktops/lxde/core/lxappearance/lxappearance-0.6.3-xdg.system.data.dirs.patch
new file mode 100644
index 00000000000..a63882aa2a7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxde/core/lxappearance/lxappearance-0.6.3-xdg.system.data.dirs.patch
@@ -0,0 +1,27 @@
+--- lxappearance-0.6.3/src/widget-theme.c.orig 2016-02-20 20:48:38.000000000 -0200
++++ lxappearance-0.6.3/src/widget-theme.c 2017-06-09 17:37:53.369555085 -0300
+@@ -66,6 +66,7 @@
+ static void load_themes()
+ {
+ char* dir;
++ const gchar * const * dirs;
+ GSList* themes = NULL, *l;
+ GtkTreeIter sel_it = {0};
+ GtkTreeSelection* tree_sel;
+@@ -85,6 +86,16 @@
+ themes = load_themes_in_dir(dir, themes);
+ g_free(dir);
+
++ /* load from sharedata theme dirs */
++ dirs = g_get_system_data_dirs();
++ while (*dirs != NULL)
++ {
++ dir = g_build_filename(*dirs, "themes", NULL);
++ themes = load_themes_in_dir(dir, themes);
++ g_free(dir);
++ dirs++;
++ }
++
+ themes = g_slist_sort(themes, (GCompareFunc)strcmp);
+ for(l = themes; l; l=l->next)
+ {
diff --git a/nixpkgs/pkgs/desktops/lxde/core/lxmenu-data.nix b/nixpkgs/pkgs/desktops/lxde/core/lxmenu-data.nix
new file mode 100644
index 00000000000..550e98c9dcc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxde/core/lxmenu-data.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, intltool }:
+
+stdenv.mkDerivation rec {
+ pname = "lxmenu-data";
+ version = "0.1.5";
+
+ src = fetchurl {
+ url = "mirror://sourceforge/lxde/${pname}-${version}.tar.xz";
+ sha256 = "9fe3218d2ef50b91190162f4f923d6524c364849f87bcda8b4ed8eb59b80bab8";
+ };
+
+ buildInputs = [ intltool ];
+
+ meta = {
+ homepage = https://lxde.org/;
+ license = stdenv.lib.licenses.gpl2;
+ description = "Freedesktop.org desktop menus for LXDE";
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxde/core/lxpanel/default.nix b/nixpkgs/pkgs/desktops/lxde/core/lxpanel/default.nix
new file mode 100644
index 00000000000..a24a33c2e76
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxde/core/lxpanel/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, gettext, m4, intltool, libxmlxx, keybinder
+, gtk2, libX11, libfm, libwnck, libXmu, libXpm, cairo, gdk-pixbuf
+, menu-cache, lxmenu-data, wirelesstools
+, supportAlsa ? false, alsaLib
+}:
+
+stdenv.mkDerivation rec {
+ name = "lxpanel-0.9.3";
+
+ src = fetchurl {
+ url = "mirror://sourceforge/lxde/${name}.tar.xz";
+ sha256 = "1ccgv7jgl3y865cpb6w7baaz7468fxncm83bqxlwyni5bwhglb1l";
+ };
+
+ nativeBuildInputs = [ pkgconfig gettext m4 intltool libxmlxx ];
+ buildInputs = [
+ keybinder gtk2 libX11 libfm libwnck libXmu libXpm cairo gdk-pixbuf
+ menu-cache lxmenu-data m4 wirelesstools
+ ] ++ stdenv.lib.optional supportAlsa alsaLib;
+
+ meta = {
+ description = "Lightweight X11 desktop panel for LXDE";
+ homepage = https://lxde.org/;
+ license = stdenv.lib.licenses.gpl2;
+ maintainers = [ stdenv.lib.maintainers.ryneeverett ];
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxde/core/lxrandr/default.nix b/nixpkgs/pkgs/desktops/lxde/core/lxrandr/default.nix
new file mode 100644
index 00000000000..0866fd104d2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxde/core/lxrandr/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk2, libX11, xrandr, withGtk3 ? false, gtk3 }:
+
+stdenv.mkDerivation rec {
+ name = "lxrandr-0.3.2";
+
+ src = fetchurl {
+ url = "mirror://sourceforge/lxde/${name}.tar.xz";
+ sha256 = "04n3vgh3ix12p8jfs4w0dyfq3anbjy33h7g53wbbqqc0f74xyplb";
+ };
+
+ configureFlags = stdenv.lib.optional withGtk3 "--enable-gtk3";
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs = [ libX11 (if withGtk3 then gtk3 else gtk2) xrandr ];
+
+ meta = with stdenv.lib; {
+ description = "LXRandR is the standard screen manager of LXDE.";
+ homepage = https://lxde.org/;
+ license = stdenv.lib.licenses.gpl2;
+ maintainers = with maintainers; [ rawkode ];
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxde/core/lxtask/default.nix b/nixpkgs/pkgs/desktops/lxde/core/lxtask/default.nix
new file mode 100644
index 00000000000..0646078d825
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxde/core/lxtask/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, libintl }:
+
+stdenv.mkDerivation rec {
+ pname = "lxtask";
+ version = "0.1.9";
+
+ src = fetchurl {
+ url = "mirror://sourceforge/lxde/${pname}-${version}.tar.xz";
+ sha256 = "0cv4hx5dg01hbyi5p10pl78n0a40xajpq4wx9c7886pkmpq8isj1";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ gtk3 libintl ];
+
+ configureFlags = [ "--enable-gtk3" ];
+
+ meta = {
+ description = "Lightweight and desktop independent task manager";
+ longDescription = ''
+ LXTask is a lightweight task manager derived from xfce4 task manager
+ with all xfce4 dependencies removed, some bugs fixed, and some
+ improvement of UI. Although being part of LXDE, the Lightweight X11
+ Desktop Environment, it's totally desktop independent and only
+ requires pure GTK.
+ '';
+ homepage = https://wiki.lxde.org/en/LXTask;
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/compton-conf/default.nix b/nixpkgs/pkgs/desktops/lxqt/compton-conf/default.nix
new file mode 100644
index 00000000000..e639996f7c6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/compton-conf/default.nix
@@ -0,0 +1,39 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, qttools, lxqt,
+ libconfig }:
+
+mkDerivation rec {
+ pname = "compton-conf";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0bx21r83ahmsqf7bm1h17pi4y9js1iqsv7nwnlq58rc0ddkkhcdb";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt.lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ libconfig
+ ];
+
+ preConfigure = ''
+ substituteInPlace autostart/CMakeLists.txt \
+ --replace "DESTINATION \"\''${LXQT_ETC_XDG_DIR}" "DESTINATION \"etc/xdg" \
+ '';
+
+ meta = with lib; {
+ description = "GUI configuration tool for compton X composite manager";
+ homepage = https://github.com/lxqt/compton-conf;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/default.nix b/nixpkgs/pkgs/desktops/lxqt/default.nix
new file mode 100644
index 00000000000..6b03c2a6c9e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/default.nix
@@ -0,0 +1,111 @@
+{ pkgs, makeScope, libsForQt5 }:
+
+let
+ packages = self: with self; {
+
+ # For compiling information, see:
+ # - https://github.com/lxqt/lxqt/wiki/Building-from-source
+
+ ### BASE
+ libqtxdg = callPackage ./libqtxdg { };
+ lxqt-build-tools = callPackage ./lxqt-build-tools { };
+ libsysstat = callPackage ./libsysstat { };
+ liblxqt = callPackage ./liblxqt { };
+
+ ### CORE 1
+ libfm-qt = callPackage ./libfm-qt { };
+ lxqt-about = callPackage ./lxqt-about { };
+ lxqt-admin = callPackage ./lxqt-admin { };
+ lxqt-config = callPackage ./lxqt-config { };
+ lxqt-globalkeys = callPackage ./lxqt-globalkeys { };
+ lxqt-notificationd = callPackage ./lxqt-notificationd { };
+ lxqt-openssh-askpass = callPackage ./lxqt-openssh-askpass { };
+ lxqt-policykit = callPackage ./lxqt-policykit { };
+ lxqt-powermanagement = callPackage ./lxqt-powermanagement { };
+ lxqt-qtplugin = callPackage ./lxqt-qtplugin { };
+ lxqt-session = callPackage ./lxqt-session { };
+ lxqt-sudo = callPackage ./lxqt-sudo { };
+ lxqt-themes = callPackage ./lxqt-themes { };
+ pavucontrol-qt = libsForQt5.callPackage ./pavucontrol-qt { };
+ qtermwidget = callPackage ./qtermwidget { };
+
+ ### CORE 2
+ lxqt-panel = callPackage ./lxqt-panel { };
+ lxqt-runner = callPackage ./lxqt-runner { };
+ pcmanfm-qt = callPackage ./pcmanfm-qt { };
+
+ ### OPTIONAL
+ qterminal = callPackage ./qterminal { };
+ compton-conf = pkgs.qt5.callPackage ./compton-conf { };
+ obconf-qt = callPackage ./obconf-qt { };
+ lximage-qt = callPackage ./lximage-qt { };
+ qps = callPackage ./qps { };
+ screengrab = callPackage ./screengrab { };
+ qlipper = callPackage ./qlipper { };
+ lxqt-archiver = callPackage ./lxqt-archiver { };
+
+ preRequisitePackages = [
+ pkgs.gvfs # virtual file systems support for PCManFM-QT
+ pkgs.libsForQt5.kwindowsystem # provides some QT5 plugins needed by lxqt-panel
+ pkgs.libsForQt5.libkscreen # provides plugins for screen management software
+ pkgs.libfm
+ pkgs.libfm-extra
+ pkgs.lxmenu-data
+ pkgs.menu-cache
+ pkgs.openbox # default window manager
+ pkgs.qt5.qtsvg # provides QT5 plugins for svg icons
+ ];
+
+ corePackages = [
+ ### BASE
+ libqtxdg
+ libsysstat
+ liblxqt
+
+ ### CORE 1
+ libfm-qt
+ lxqt-about
+ lxqt-admin
+ lxqt-config
+ lxqt-globalkeys
+ lxqt-notificationd
+ lxqt-openssh-askpass
+ lxqt-policykit
+ lxqt-powermanagement
+ lxqt-qtplugin
+ lxqt-session
+ lxqt-sudo
+ lxqt-themes
+ pavucontrol-qt
+
+ ### CORE 2
+ lxqt-panel
+ lxqt-runner
+ pcmanfm-qt
+ ];
+
+ optionalPackages = [
+ ### LXQt project
+ qterminal
+ compton-conf
+ obconf-qt
+ lximage-qt
+ lxqt-archiver
+
+ ### QtDesktop project
+ qps
+ screengrab
+
+ ### Qlipper
+ qlipper
+
+ ### Default icon theme
+ pkgs.oxygen-icons5
+
+ ### Screen saver
+ pkgs.xscreensaver
+ ];
+
+ };
+
+in makeScope libsForQt5.newScope packages
diff --git a/nixpkgs/pkgs/desktops/lxqt/libfm-qt/default.nix b/nixpkgs/pkgs/desktops/lxqt/libfm-qt/default.nix
new file mode 100644
index 00000000000..c214f0b3dcd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/libfm-qt/default.nix
@@ -0,0 +1,43 @@
+{
+ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools,
+ pcre, libexif, xorg, libfm, menu-cache,
+ qtx11extras, qttools
+}:
+
+mkDerivation rec {
+ pname = "libfm-qt";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "00rn5i16h659zyp1dx213nc3jz7rx9phiw71zf6nspxzxsb8w2sc";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ pcre
+ libexif
+ xorg.libpthreadstubs
+ xorg.libxcb
+ xorg.libXdmcp
+ qtx11extras
+ qttools
+ libfm
+ menu-cache
+ ];
+
+ meta = with lib; {
+ description = "Core library of PCManFM-Qt (Qt binding for libfm)";
+ homepage = https://github.com/lxqt/libfm-qt;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/liblxqt/default.nix b/nixpkgs/pkgs/desktops/lxqt/liblxqt/default.nix
new file mode 100644
index 00000000000..d94b1ac0d03
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/liblxqt/default.nix
@@ -0,0 +1,41 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtx11extras,
+ qttools, qtsvg, libqtxdg, polkit-qt, kwindowsystem, xorg }:
+
+mkDerivation rec {
+ pname = "liblxqt";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0g2502lcws5j74p82qhfryz9n51cvi85hb50r5s227xhkv91q65k";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtx11extras
+ qttools
+ qtsvg
+ polkit-qt
+ kwindowsystem
+ libqtxdg
+ xorg.libXScrnSaver
+ ];
+
+ postPatch = ''
+ sed -i "s|\''${POLKITQT-1_POLICY_FILES_INSTALL_DIR}|''${out}/share/polkit-1/actions|" CMakeLists.txt
+ '';
+
+ meta = with lib; {
+ description = "Core utility library for all LXQt components";
+ homepage = https://github.com/lxqt/liblxqt;
+ license = licenses.lgpl21Plus;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/libqtxdg/default.nix b/nixpkgs/pkgs/desktops/lxqt/libqtxdg/default.nix
new file mode 100644
index 00000000000..799e4286803
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/libqtxdg/default.nix
@@ -0,0 +1,33 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qtsvg, lxqt-build-tools }:
+
+mkDerivation rec {
+ pname = "libqtxdg";
+ version = "3.3.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0y3s0hva64m64j9lqgnja1li8zhlywqzv8xwjg8pyd2nr9h918db";
+ };
+
+ nativeBuildInputs = [ cmake lxqt-build-tools ];
+
+ buildInputs = [ qtbase qtsvg ];
+
+ preConfigure = ''
+ cmakeFlagsArray+=(
+ "-DQTXDGX_ICONENGINEPLUGIN_INSTALL_PATH=$out/$qtPluginPrefix"
+ "-DCMAKE_INSTALL_INCLUDEDIR=include"
+ "-DCMAKE_INSTALL_LIBDIR=lib"
+ )
+ '';
+
+ meta = with lib; {
+ description = "Qt implementation of freedesktop.org xdg specs";
+ homepage = https://github.com/lxqt/libqtxdg;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/libsysstat/default.nix b/nixpkgs/pkgs/desktops/lxqt/libsysstat/default.nix
new file mode 100644
index 00000000000..dc2ce54d6ae
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/libsysstat/default.nix
@@ -0,0 +1,25 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, lxqt-build-tools }:
+
+mkDerivation rec {
+ pname = "libsysstat";
+ version = "0.4.2";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "10h9n7km7yx8bnmzxi4nn1yqq03hizjkrx4745j0mczy7niiffsz";
+ };
+
+ nativeBuildInputs = [ cmake lxqt-build-tools ];
+
+ buildInputs = [ qtbase ];
+
+ meta = with lib; {
+ description = "Library used to query system info and statistics";
+ homepage = https://github.com/lxqt/libsysstat;
+ license = licenses.lgpl21Plus;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lximage-qt/default.nix b/nixpkgs/pkgs/desktops/lxqt/lximage-qt/default.nix
new file mode 100644
index 00000000000..33e6a1f99e5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lximage-qt/default.nix
@@ -0,0 +1,39 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, qttools,
+ qtx11extras, qtsvg, xorg, lxqt-build-tools, libfm-qt, libexif }:
+
+mkDerivation rec {
+ pname = "lximage-qt";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "175l2w5w6iag01v05jq90pxx0al24wpw3mgsbcgqhl4z6h860r32";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ libfm-qt
+ xorg.libpthreadstubs
+ xorg.libXdmcp
+ libexif
+ ];
+
+ meta = with lib; {
+ description = "The image viewer and screenshot tool for lxqt";
+ homepage = https://github.com/lxqt/lximage-qt;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-about/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-about/default.nix
new file mode 100644
index 00000000000..595141daffc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-about/default.nix
@@ -0,0 +1,35 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtx11extras, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg }:
+
+mkDerivation rec {
+ pname = "lxqt-about";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0dj2rhbhnkzmv1iqqyq0bcp03imwnvxdr7rnpqnrs9kkjacm8zvr";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtx11extras
+ qttools
+ qtsvg
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ ];
+
+ meta = with lib; {
+ description = "Dialogue window providing information about LXQt and the system it's running on";
+ homepage = https://github.com/lxqt/lxqt-about;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-admin/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-admin/default.nix
new file mode 100644
index 00000000000..a49bb120791
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-admin/default.nix
@@ -0,0 +1,41 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtx11extras, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg, polkit-qt }:
+
+mkDerivation rec {
+ pname = "lxqt-admin";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "121qj46app2bqdr24g5sz2mdjfd9w86wpgkwap46s0zgxm4li44i";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtx11extras
+ qttools
+ qtsvg
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ polkit-qt
+ ];
+
+ postPatch = ''
+ sed "s|\''${POLKITQT-1_POLICY_FILES_INSTALL_DIR}|''${out}/share/polkit-1/actions|" \
+ -i lxqt-admin-user/CMakeLists.txt
+ '';
+
+ meta = with lib; {
+ description = "LXQt system administration tool";
+ homepage = https://github.com/lxqt/lxqt-admin;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-archiver/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-archiver/default.nix
new file mode 100644
index 00000000000..da90826116f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-archiver/default.nix
@@ -0,0 +1,39 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, json-glib, libfm-qt, qtbase, qttools, qtx11extras }:
+
+mkDerivation rec {
+ pname = "lxqt-archiver";
+ version = "0.0.96";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1vc9pzxrhznp65gdkzj3fzzivfqy712mwcxp3r25ar59d54alfpj";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ json-glib
+ libfm-qt
+ qtbase
+ qttools
+ qtx11extras
+ ];
+
+ cmakeFlags = [ "-DPULL_TRANSLATIONS=NO" ];
+
+ hardeningDisable = [ "format" ];
+
+ meta = with lib; {
+ description = "Archive tool for the LXQt desktop environment";
+ homepage = https://github.com/lxqt/lxqt-archiver/;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ jchw ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/LXQtConfigVars.cmake b/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/LXQtConfigVars.cmake
new file mode 100644
index 00000000000..fd7ef927f8b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/LXQtConfigVars.cmake
@@ -0,0 +1,7 @@
+add_definitions("-DLXQT_RELATIVE_SHARE_DIR=\"${LXQT_RELATIVE_SHARE_DIR}\"")
+add_definitions("-DLXQT_SHARE_DIR=\"${LXQT_SHARE_DIR}\"")
+add_definitions("-DLXQT_RELATIVE_SHARE_TRANSLATIONS_DIR=\"${LXQT_RELATIVE_TRANSLATIONS_DIR}\"")
+add_definitions("-DLXQT_SHARE_TRANSLATIONS_DIR=\"${LXQT_TRANSLATIONS_DIR}\"")
+add_definitions("-DLXQT_GRAPHICS_DIR=\"${LXQT_GRAPHICS_DIR}\"")
+add_definitions("-DLXQT_ETC_XDG_DIR=\"${LXQT_ETC_XDG_DIR}\"")
+add_definitions("-DLXQT_DATA_DIR=\"${LXQT_DATA_DIR}\"")
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/default.nix
new file mode 100644
index 00000000000..626c99fcf9c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/default.nix
@@ -0,0 +1,34 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, pcre, qtbase, glib }:
+
+mkDerivation rec {
+ pname = "lxqt-build-tools";
+ version = "0.6.0";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0i7m9s4g5rsw28vclc9nh0zcapx85cqfwxkx7rrw7wa12svy7pm2";
+ };
+
+ nativeBuildInputs = [ cmake pkgconfig setupHook ];
+
+ buildInputs = [ qtbase glib pcre ];
+
+ setupHook = ./setup-hook.sh;
+
+ # We're dependent on this macro doing add_definitions in most places
+ # But we have the setup-hook to set the values.
+ postInstall = ''
+ rm $out/share/cmake/lxqt-build-tools/modules/LXQtConfigVars.cmake
+ cp ${./LXQtConfigVars.cmake} $out/share/cmake/lxqt-build-tools/modules/LXQtConfigVars.cmake
+ '';
+
+ meta = with lib; {
+ description = "Various packaging tools and scripts for LXQt applications";
+ homepage = https://github.com/lxqt/lxqt-build-tools;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/setup-hook.sh b/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/setup-hook.sh
new file mode 100644
index 00000000000..e40765116e9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-build-tools/setup-hook.sh
@@ -0,0 +1,15 @@
+LXQtCMakePostHook() {
+ cmakeFlagsArray+=(
+ -DLXQT_LIBRARY_NAME=lxqt
+ -DLXQT_SHARE_DIR=$out/share/lxqt
+ -DLXQT_TRANSLATIONS_DIR=$out/share/lxqt/translations
+ -DLXQT_GRAPHICS_DIR=$out/share/lxqt/graphics
+ -DLXQT_ETC_XDG_DIR=$out/etc/xdg
+ -DLXQT_DATA_DIR=$out/share
+ -DLXQT_RELATIVE_SHARE_DIR=lxqt
+ -DLXQT_RELATIVE_SHARE_TRANSLATIONS_DIR=lxqt/translations
+ )
+
+}
+
+postHooks+=(LXQtCMakePostHook)
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-config/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-config/default.nix
new file mode 100644
index 00000000000..d775a93fff4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-config/default.nix
@@ -0,0 +1,52 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, qtbase,
+ qtx11extras, qttools, qtsvg, kwindowsystem, libkscreen, liblxqt,
+ libqtxdg, xorg }:
+
+mkDerivation rec {
+ pname = "lxqt-config";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0x1k08587i2pakxlrj2n0l82r179sfywnzn2cphxiy89r5zpn7vi";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qtx11extras
+ qttools
+ qtsvg
+ kwindowsystem
+ libkscreen
+ liblxqt
+ libqtxdg
+ xorg.libpthreadstubs
+ xorg.libXdmcp
+ xorg.libXScrnSaver
+ xorg.libxcb
+ xorg.libXcursor
+ xorg.xf86inputlibinput
+ xorg.xf86inputlibinput.dev
+ ];
+
+ postPatch = ''
+ sed -i "/\''${XORG_LIBINPUT_INCLUDE_DIRS}/a ${xorg.xf86inputlibinput.dev}/include/xorg" lxqt-config-input/CMakeLists.txt
+ '';
+
+ meta = with lib; {
+ description = "Tools to configure LXQt and the underlying operating system";
+ homepage = https://github.com/lxqt/lxqt-config;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-globalkeys/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-globalkeys/default.nix
new file mode 100644
index 00000000000..d836ddeea38
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-globalkeys/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, liblxqt, libqtxdg }:
+
+mkDerivation rec {
+ pname = "lxqt-globalkeys";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0q7hfbs4dhsgyzch2msq2hsfzzfgbc611ki9x1x132n7zqk76pmp";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ ];
+
+ meta = with lib; {
+ description = "Daemon used to register global keyboard shortcuts";
+ homepage = https://github.com/lxqt/lxqt-globalkeys;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-notificationd/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-notificationd/default.nix
new file mode 100644
index 00000000000..81a6a423a21
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-notificationd/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg, qtx11extras }:
+
+mkDerivation rec {
+ pname = "lxqt-notificationd";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1ihaf2i361j2snyy6kg8ccpfnc8hppvacmxjqzb1lpyaf1ajd139";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtsvg
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ qtx11extras
+ ];
+
+ meta = with lib; {
+ description = "The LXQt notification daemon";
+ homepage = https://github.com/lxqt/lxqt-notificationd;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix
new file mode 100644
index 00000000000..83048ed7d57
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-openssh-askpass/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtsvg, qtx11extras, kwindowsystem, liblxqt, libqtxdg }:
+
+mkDerivation rec {
+ pname = "lxqt-openssh-askpass";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "04jmvhhlhhspwzj4hfq7fnaa3h7h02z3rlq8p55hzlzkvshqqh1q";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ ];
+
+ meta = with lib; {
+ description = "GUI to query passwords on behalf of SSH agents";
+ homepage = https://github.com/lxqt/lxqt-openssh-askpass;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-panel/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-panel/default.nix
new file mode 100644
index 00000000000..4558d36e554
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-panel/default.nix
@@ -0,0 +1,59 @@
+{
+ lib, mkDerivation, fetchFromGitHub,
+ cmake, pkgconfig, lxqt-build-tools,
+ qtbase, qttools, qtx11extras, qtsvg, libdbusmenu, kwindowsystem, solid,
+ kguiaddons, liblxqt, libqtxdg, lxqt-globalkeys, libsysstat,
+ xorg, libstatgrab, lm_sensors, libpulseaudio, alsaLib, menu-cache,
+ lxmenu-data, pcre, libXdamage
+}:
+
+mkDerivation rec {
+ pname = "lxqt-panel";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1py3i7qgm6h2iwjwqfjml1rp06s7ls1d7z5i9iizsmfshdzkaq86";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ libdbusmenu
+ kwindowsystem
+ solid
+ kguiaddons
+ liblxqt
+ libqtxdg
+ lxqt-globalkeys
+ libsysstat
+ xorg.libpthreadstubs
+ xorg.libXdmcp
+ libstatgrab
+ lm_sensors
+ libpulseaudio
+ alsaLib
+ menu-cache
+ lxmenu-data
+ pcre
+ libXdamage
+ ];
+
+ meta = with lib; {
+ description = "The LXQt desktop panel";
+ homepage = https://github.com/lxqt/lxqt-panel;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-policykit/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-policykit/default.nix
new file mode 100644
index 00000000000..d501d83947e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-policykit/default.nix
@@ -0,0 +1,43 @@
+{
+ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools,
+ qtbase, qttools, qtx11extras, qtsvg, polkit-qt, kwindowsystem, liblxqt,
+ libqtxdg, pcre
+}:
+
+mkDerivation rec {
+ pname = "lxqt-policykit";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0mh9jw09r0mk8xmgvmzk3yyfix0pzqya28rcx71fqjpbdv1sc44l";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ polkit-qt
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ pcre
+ ];
+
+ meta = with lib; {
+ description = "The LXQt PolicyKit agent";
+ homepage = https://github.com/lxqt/lxqt-policykit;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-powermanagement/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-powermanagement/default.nix
new file mode 100644
index 00000000000..9f8c66d826c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-powermanagement/default.nix
@@ -0,0 +1,38 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, solid, kidletime, liblxqt, libqtxdg }:
+
+mkDerivation rec {
+ pname = "lxqt-powermanagement";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1nhp4a28bpczhwz8b8da355zsxr1qwmkrm3bwllwp39liw947clx";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ kwindowsystem
+ solid
+ kidletime
+ liblxqt
+ libqtxdg
+ ];
+
+ meta = with lib; {
+ description = "Power management module for LXQt";
+ homepage = https://github.com/lxqt/lxqt-powermanagement;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-qtplugin/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-qtplugin/default.nix
new file mode 100644
index 00000000000..604fc570e1f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-qtplugin/default.nix
@@ -0,0 +1,45 @@
+{
+ lib, mkDerivation, fetchFromGitHub,
+ cmake, lxqt-build-tools,
+ qtbase, qtx11extras, qttools, qtsvg, libdbusmenu, libqtxdg, libfm-qt
+}:
+
+mkDerivation rec {
+ pname = "lxqt-qtplugin";
+ version = "0.14.0";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "16n50lxnya03zcviw65sy5dyg9dsrn64k91mrqfvraf6d90md4al";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qtx11extras
+ qttools
+ qtsvg
+ libdbusmenu
+ libqtxdg
+ libfm-qt
+ ];
+
+ postPatch = ''
+ substituteInPlace src/CMakeLists.txt \
+ --replace "DESTINATION \"\''${QT_PLUGINS_DIR}" "DESTINATION \"$qtPluginPrefix"
+ '';
+
+ meta = with lib; {
+ description = "LXQt Qt platform integration plugin";
+ homepage = https://github.com/lxqt/lxqt-qtplugin;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-runner/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-runner/default.nix
new file mode 100644
index 00000000000..d737bd91c91
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-runner/default.nix
@@ -0,0 +1,42 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, qtbase, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg, lxqt-globalkeys, qtx11extras,
+menu-cache, muparser, pcre }:
+
+mkDerivation rec {
+ pname = "lxqt-runner";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "01a8ycpkzcbh85y4025pd3nbpnzxh98ll1xwz4ykz13yvm0l2n1w";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtsvg
+ qtx11extras
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ lxqt-globalkeys
+ menu-cache
+ muparser
+ pcre
+ ];
+
+ meta = with lib; {
+ description = "Tool used to launch programs quickly by typing their names";
+ homepage = https://github.com/lxqt/lxqt-runner;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-session/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-session/default.nix
new file mode 100644
index 00000000000..fbf2c7ddde7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-session/default.nix
@@ -0,0 +1,40 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, qtbase, qttools, qtsvg, qtx11extras, kwindowsystem, liblxqt, libqtxdg, xorg, xdg-user-dirs }:
+
+mkDerivation rec {
+ pname = "lxqt-session";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0s6b0lblb795zz1p7sy677c1iznhmdzc4vw3jkc2agmsrhm7if7s";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtsvg
+ qtx11extras
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ xorg.libpthreadstubs
+ xorg.libXdmcp
+ xdg-user-dirs
+ ];
+
+ meta = with lib; {
+ description = "An alternative session manager ported from the original razor-session";
+ homepage = https://github.com/lxqt/lxqt-session;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-sudo/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-sudo/default.nix
new file mode 100644
index 00000000000..91159398b8f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-sudo/default.nix
@@ -0,0 +1,37 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, liblxqt, libqtxdg, sudo }:
+
+mkDerivation rec {
+ pname = "lxqt-sudo";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1my0wpic20493rdlabp9ghag1g3nhwafk2yklkgczlajmarakgpc";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ kwindowsystem
+ liblxqt
+ libqtxdg
+ sudo
+ ];
+
+ meta = with lib; {
+ description = "GUI frontend for sudo/su";
+ homepage = https://github.com/lxqt/lxqt-sudo;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/lxqt-themes/default.nix b/nixpkgs/pkgs/desktops/lxqt/lxqt-themes/default.nix
new file mode 100644
index 00000000000..9d8da87fd5d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/lxqt-themes/default.nix
@@ -0,0 +1,26 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools }:
+
+mkDerivation rec {
+ pname = "lxqt-themes";
+ version = "0.14.0";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "09dkcgnf3lmfly8v90p6wjlj5rin83pbailvvpx2jr8a48a8zb9f";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ meta = with lib; {
+ description = "Themes, graphics and icons for LXQt";
+ homepage = https://github.com/lxqt/lxqt-themes;
+ license = licenses.lgpl21;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/obconf-qt/default.nix b/nixpkgs/pkgs/desktops/lxqt/obconf-qt/default.nix
new file mode 100644
index 00000000000..a5be8f41967
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/obconf-qt/default.nix
@@ -0,0 +1,40 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, pcre, qtbase, qttools,
+ qtx11extras, xorg, lxqt-build-tools, openbox, hicolor-icon-theme }:
+
+mkDerivation rec {
+ pname = "obconf-qt";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "15dizs072ylmld1lxwgqkvybqy8ms8zki5586xm305jnlmrkb4lq";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ pcre
+ qtbase
+ qttools
+ qtx11extras
+ xorg.libpthreadstubs
+ xorg.libXdmcp
+ xorg.libSM
+ openbox
+ hicolor-icon-theme
+ ];
+
+ meta = with lib; {
+ description = "The Qt port of obconf, the Openbox configuration tool";
+ homepage = https://github.com/lxqt/obconf-qt;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/pavucontrol-qt/default.nix b/nixpkgs/pkgs/desktops/lxqt/pavucontrol-qt/default.nix
new file mode 100644
index 00000000000..7b7d7290320
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/pavucontrol-qt/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt, libpulseaudio,
+ pcre, qtbase, qttools, qtx11extras }:
+
+mkDerivation rec {
+ pname = "pavucontrol-qt";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "124dk41v8l5pv7afi1h7fgbhm8zj605yfd8b769sn7id2bqj7bis";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt.lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ libpulseaudio
+ pcre
+ ];
+
+ meta = with lib; {
+ description = "A Pulseaudio mixer in Qt (port of pavucontrol)";
+ homepage = https://github.com/lxqt/pavucontrol-qt;
+ license = licenses.gpl2;
+ platforms = with platforms; linux;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/pcmanfm-qt/default.nix b/nixpkgs/pkgs/desktops/lxqt/pcmanfm-qt/default.nix
new file mode 100644
index 00000000000..168b7f35ad2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/pcmanfm-qt/default.nix
@@ -0,0 +1,38 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt, qtbase, qttools,
+ qtx11extras, libfm-qt, menu-cache, lxmenu-data }:
+
+mkDerivation rec {
+ pname = "pcmanfm-qt";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1zchxlbyiifing94mqwh45pp7z3ihldknqiaz0kanq1cnma1jj6k";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ lxqt.lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ libfm-qt
+ libfm-qt
+ menu-cache
+ lxmenu-data
+ ];
+
+ meta = with lib; {
+ description = "File manager and desktop icon manager (Qt port of PCManFM and libfm)";
+ homepage = https://github.com/lxqt/pcmanfm-qt;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/qlipper/default.nix b/nixpkgs/pkgs/desktops/lxqt/qlipper/default.nix
new file mode 100644
index 00000000000..df717debbae
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/qlipper/default.nix
@@ -0,0 +1,25 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qttools }:
+
+mkDerivation rec {
+ pname = "qlipper";
+ version = "5.1.1";
+
+ src = fetchFromGitHub {
+ owner = "pvanek";
+ repo = pname;
+ rev = version;
+ sha256 = "0vlm4ab9isi7i2bimnyrk6083j2dfdrs14qj59vjcjri7mcwmf76";
+ };
+
+ nativeBuildInputs = [ cmake ];
+
+ buildInputs = [ qtbase qttools ];
+
+ meta = with lib; {
+ description = "Cross-platform clipboard history applet";
+ homepage = https://github.com/pvanek/qlipper;
+ license = licenses.gpl2Plus;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/qps/default.nix b/nixpkgs/pkgs/desktops/lxqt/qps/default.nix
new file mode 100644
index 00000000000..942c9257c25
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/qps/default.nix
@@ -0,0 +1,26 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qtx11extras, qttools,
+ lxqt-build-tools }:
+
+mkDerivation rec {
+ pname = "qps";
+ version = "1.10.20";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1g8j4cjy5x33jzjkx6vwyl5qbf9i2z2w01ipgk7nrik5drf9crbf";
+ };
+
+ nativeBuildInputs = [ cmake lxqt-build-tools ];
+
+ buildInputs = [ qtbase qtx11extras qttools ];
+
+ meta = with lib; {
+ description = "The Qt process manager";
+ homepage = https://github.com/lxqt/qps;
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ romildo ];
+ platforms = with platforms; unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/qterminal/default.nix b/nixpkgs/pkgs/desktops/lxqt/qterminal/default.nix
new file mode 100644
index 00000000000..10f525eb9e6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/qterminal/default.nix
@@ -0,0 +1,34 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtermwidget,
+ qtbase, qttools, qtx11extras }:
+
+mkDerivation rec {
+ pname = "qterminal";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "0bq6lvns56caijdmjm05nsj9vg69v9x5vid24bfxasck6q8nw24w";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ lxqt-build-tools
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtermwidget
+ ];
+
+ meta = with lib; {
+ description = "A lightweight Qt-based terminal emulator";
+ homepage = https://github.com/lxqt/qterminal;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo globin ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/qtermwidget/default.nix b/nixpkgs/pkgs/desktops/lxqt/qtermwidget/default.nix
new file mode 100644
index 00000000000..e61360f6a3b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/qtermwidget/default.nix
@@ -0,0 +1,25 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qttools, lxqt-build-tools }:
+
+mkDerivation rec {
+ pname = "qtermwidget";
+ version = "0.14.1";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "1pz8dwb86jpga4vfyn5v9n2s6dx3zh74yfp1kjsmsmhf878zs6lv";
+ };
+
+ nativeBuildInputs = [ cmake lxqt-build-tools ];
+
+ buildInputs = [ qtbase qttools ];
+
+ meta = with lib; {
+ description = "A terminal emulator widget for Qt 5";
+ homepage = https://github.com/lxqt/qtermwidget;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/screengrab/default.nix b/nixpkgs/pkgs/desktops/lxqt/screengrab/default.nix
new file mode 100644
index 00000000000..bac68f7166c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/screengrab/default.nix
@@ -0,0 +1,38 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, libqtxdg, xorg, autoPatchelfHook }:
+
+mkDerivation rec {
+ pname = "screengrab";
+ version = "1.101";
+
+ src = fetchFromGitHub {
+ owner = "lxqt";
+ repo = pname;
+ rev = version;
+ sha256 = "111gnkhp77qkch7xqr7k3h8zrg4871gapyd4vvlpaj0gjhirjg6h";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkgconfig
+ autoPatchelfHook # fix libuploader.so and libextedit.so not found
+ ];
+
+ buildInputs = [
+ qtbase
+ qttools
+ qtx11extras
+ qtsvg
+ kwindowsystem
+ libqtxdg
+ xorg.libpthreadstubs
+ xorg.libXdmcp
+ ];
+
+ meta = with lib; {
+ description = "Crossplatform tool for fast making screenshots";
+ homepage = https://github.com/lxqt/screengrab;
+ license = licenses.gpl2;
+ platforms = with platforms; unix;
+ maintainers = with maintainers; [ romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/lxqt/update.sh b/nixpkgs/pkgs/desktops/lxqt/update.sh
new file mode 100755
index 00000000000..47d3dfb3d5f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lxqt/update.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p libarchive curl common-updater-scripts
+
+set -eu -o pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+root=../../..
+export NIXPKGS_ALLOW_UNFREE=1
+
+lxqt_version=0.14.1
+lxqtrepo=https://downloads.lxqt.org/${lxqt_version}.html
+
+version() {
+ (cd "$root" && nix-instantiate --eval --strict -A "$1.version" 2>/dev/null | tr -d '"')
+}
+
+update_lxqt() {
+ local pname
+ local pversion
+ curl -sS ${lxqtrepo} | sed -rne 's|.*<a href=.*>(.+) (.+)</a><br>|\1 \2|p' |
+ while read pname pversion; do
+ local pversionold=$(version lxqt.$pname)
+ if [[ "$pversion" = "$pversionold" ]]; then
+ echo "nothing to do, $pname $pversion is current"
+ else
+ echo "$pname: $pversionold -> $pversion"
+ (cd "$root"
+ local pfile=$(EDITOR=echo nix edit -f. lxqt.$pname 2>/dev/null)
+ update-source-version lxqt.$pname "$pversion"
+ git add $pfile
+ git commit -m "lxqt.$pname: $pversionold -> $pversion"
+ )
+ fi
+ echo
+ done
+ echo DONE
+}
+
+update_lxqt
diff --git a/nixpkgs/pkgs/desktops/mate/atril/default.nix b/nixpkgs/pkgs/desktops/mate/atril/default.nix
new file mode 100644
index 00000000000..f19114a5442
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/atril/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, glib, libxml2, libsecret, poppler, itstool, hicolor-icon-theme, mate, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "atril";
+ version = "1.22.2";
+
+ src = fetchurl {
+ url = "https://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "11l78zkxszvsjr74cmk1wff5ycqrzd89y6k36rydv2rb5af2nsfw";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ glib
+ itstool
+ libsecret
+ libxml2
+ poppler
+ mate.caja
+ mate.mate-desktop
+ hicolor-icon-theme
+ ];
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ makeFlags = [ "cajaextensiondir=$$out/lib/caja/extensions-2.0" ];
+
+ meta = {
+ description = "A simple multi-page document viewer for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/caja-dropbox/default.nix b/nixpkgs/pkgs/desktops/mate/caja-dropbox/default.nix
new file mode 100644
index 00000000000..597391eb135
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/caja-dropbox/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, substituteAll
+, pkgconfig, gobject-introspection, gdk-pixbuf
+, gtk3, mate, python3, dropbox }:
+
+let
+ dropboxd = "${dropbox}/bin/dropbox";
+in
+stdenv.mkDerivation rec {
+ pname = "caja-dropbox";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "18cnd3yw2ingvl38mhmfbl5k0kfg8pzcf2649j00i6v90cwiril5";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-cli-paths.patch;
+ inherit dropboxd;
+ })
+ ];
+
+ strictDeps = true;
+
+ nativeBuildInputs = [
+ pkgconfig
+ gobject-introspection
+ gdk-pixbuf
+ (python3.withPackages (ps: with ps; [
+ docutils
+ pygobject3
+ ]))
+ ];
+
+ buildInputs = [
+ gtk3
+ mate.caja
+ python3
+ ];
+
+ configureFlags = [ "--with-caja-extension-dir=$$out/lib/caja/extensions-2.0" ];
+
+ meta = with stdenv.lib; {
+ description = "Dropbox extension for Caja file manager";
+ homepage = "https://github.com/mate-desktop/caja-dropbox";
+ license = with licenses; [ gpl3 cc-by-nd-30 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/caja-dropbox/fix-cli-paths.patch b/nixpkgs/pkgs/desktops/mate/caja-dropbox/fix-cli-paths.patch
new file mode 100644
index 00000000000..de591f493f6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/caja-dropbox/fix-cli-paths.patch
@@ -0,0 +1,11 @@
+--- a/caja-dropbox.in
++++ b/caja-dropbox.in
+@@ -70,7 +70,7 @@ DOWNLOADING = "Downloading Dropbox... %d%%"
+ UNPACKING = "Unpacking Dropbox... %d%%"
+
+ PARENT_DIR = os.path.expanduser("~")
+-DROPBOXD_PATH = "%s/.dropbox-dist/dropboxd" % PARENT_DIR
++DROPBOXD_PATH = "@dropboxd@"
+ DESKTOP_FILE = "@DESKTOP_FILE_DIR@/caja-dropbox.desktop"
+
+ enc = locale.getpreferredencoding()
diff --git a/nixpkgs/pkgs/desktops/mate/caja-extensions/default.nix b/nixpkgs/pkgs/desktops/mate/caja-extensions/default.nix
new file mode 100644
index 00000000000..ba21cb00d35
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/caja-extensions/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, gupnp, mate, imagemagick, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "caja-extensions";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1h866jmdd3qpjzi7wjj11krwiaadnlf21844g1zqfb4jgrzj773p";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ gupnp
+ mate.caja
+ mate.mate-desktop
+ imagemagick
+ ];
+
+ postPatch = ''
+ for f in image-converter/caja-image-{resizer,rotator}.c; do
+ substituteInPlace $f --replace "/usr/bin/convert" "${imagemagick}/bin/convert"
+ done
+ '';
+
+ configureFlags = [ "--with-cajadir=$$out/lib/caja/extensions-2.0" ];
+
+ meta = with stdenv.lib; {
+ description = "Set of extensions for Caja file manager";
+ homepage = https://mate-desktop.org;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/caja-with-extensions/default.nix b/nixpkgs/pkgs/desktops/mate/caja-with-extensions/default.nix
new file mode 100644
index 00000000000..35e3cd198f6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/caja-with-extensions/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, lib, makeWrapper, caja-extensions, caja, extensions ? [ caja-extensions ] }:
+
+stdenv.mkDerivation {
+ pname = "${caja.pname}-with-extensions";
+ version = caja.version;
+
+ phases = [ "installPhase" ];
+
+ nativeBuildInputs = [ makeWrapper ];
+
+ inherit caja;
+
+ installPhase = ''
+ mkdir -p $out/bin
+ makeWrapper $caja/bin/caja $out/bin/caja \
+ --set CAJA_EXTENSION_DIRS ${lib.concatMapStringsSep ":" (x: "${x.outPath}/lib/caja/extensions-2.0") extensions}
+ '';
+
+ inherit (caja.meta);
+}
diff --git a/nixpkgs/pkgs/desktops/mate/caja/caja-extension-dirs.patch b/nixpkgs/pkgs/desktops/mate/caja/caja-extension-dirs.patch
new file mode 100644
index 00000000000..7490a368efd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/caja/caja-extension-dirs.patch
@@ -0,0 +1,30 @@
+diff --git a/libcaja-private/caja-module.c b/libcaja-private/caja-module.c
+index 023c22e..414913b 100644
+--- a/libcaja-private/caja-module.c
++++ b/libcaja-private/caja-module.c
+@@ -258,11 +258,25 @@ caja_module_setup (void)
+ {
+ static gboolean initialized = FALSE;
+ GList *res;
++ gchar *caja_extension_dirs;
++ gchar **dir_vector;
+
+ if (!initialized)
+ {
+ initialized = TRUE;
+
++ caja_extension_dirs = (gchar *) g_getenv ("CAJA_EXTENSION_DIRS");
++
++ if (caja_extension_dirs)
++ {
++ dir_vector = g_strsplit (caja_extension_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
++
++ for (gchar **dir = dir_vector; *dir != NULL; ++ dir)
++ load_module_dir (*dir);
++
++ g_strfreev(dir_vector);
++ }
++
+ load_module_dir (CAJA_EXTENSIONDIR);
+
+ eel_debug_call_at_shutdown (free_module_objects);
diff --git a/nixpkgs/pkgs/desktops/mate/caja/default.nix b/nixpkgs/pkgs/desktops/mate/caja/default.nix
new file mode 100644
index 00000000000..667a73eb630
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/caja/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, libnotify, libxml2, libexif, exempi, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "caja";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "10b7yjimblymp1fpsrl4jb2k7kbhla2izsj3njfmg2n6fv9fy9iv";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libnotify
+ libxml2
+ libexif
+ exempi
+ mate.mate-desktop
+ hicolor-icon-theme
+ ];
+
+ patches = [
+ ./caja-extension-dirs.patch
+ ];
+
+ configureFlags = [ "--disable-update-mimedb" ];
+
+ meta = {
+ description = "File manager for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = with stdenv.lib.licenses; [ gpl2 lgpl2 ];
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/default.nix b/nixpkgs/pkgs/desktops/mate/default.nix
new file mode 100644
index 00000000000..3970b2b2921
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/default.nix
@@ -0,0 +1,93 @@
+{ newScope }:
+
+let
+ callPackage = newScope self;
+
+ self = rec {
+
+ atril = callPackage ./atril { };
+ caja = callPackage ./caja { };
+ caja-dropbox = callPackage ./caja-dropbox { };
+ caja-extensions = callPackage ./caja-extensions { };
+ caja-with-extensions = callPackage ./caja-with-extensions { };
+ engrampa = callPackage ./engrampa { };
+ eom = callPackage ./eom { };
+ libmatekbd = callPackage ./libmatekbd { };
+ libmatemixer = callPackage ./libmatemixer { };
+ libmateweather = callPackage ./libmateweather { };
+ marco = callPackage ./marco { };
+ mate-applets = callPackage ./mate-applets { };
+ mate-backgrounds = callPackage ./mate-backgrounds { };
+ mate-calc = callPackage ./mate-calc { };
+ mate-common = callPackage ./mate-common { };
+ mate-control-center = callPackage ./mate-control-center { };
+ mate-desktop = callPackage ./mate-desktop { };
+ mate-icon-theme = callPackage ./mate-icon-theme { };
+ mate-icon-theme-faenza = callPackage ./mate-icon-theme-faenza { };
+ mate-indicator-applet = callPackage ./mate-indicator-applet { };
+ mate-media = callPackage ./mate-media { };
+ mate-menus = callPackage ./mate-menus { };
+ mate-netbook = callPackage ./mate-netbook { };
+ mate-notification-daemon = callPackage ./mate-notification-daemon { };
+ mate-panel = callPackage ./mate-panel { };
+ mate-polkit = callPackage ./mate-polkit { };
+ mate-power-manager = callPackage ./mate-power-manager { };
+ mate-sensors-applet = callPackage ./mate-sensors-applet { };
+ mate-session-manager = callPackage ./mate-session-manager { };
+ mate-settings-daemon = callPackage ./mate-settings-daemon { };
+ mate-screensaver = callPackage ./mate-screensaver { };
+ mate-system-monitor = callPackage ./mate-system-monitor { };
+ mate-terminal = callPackage ./mate-terminal { };
+ mate-themes = callPackage ./mate-themes { };
+ mate-user-guide = callPackage ./mate-user-guide { };
+ mate-user-share = callPackage ./mate-user-share { };
+ mate-utils = callPackage ./mate-utils { };
+ mozo = callPackage ./mozo { };
+ pluma = callPackage ./pluma { };
+ python-caja = callPackage ./python-caja { };
+
+ basePackages = [
+ caja
+ libmatekbd
+ libmatemixer
+ libmateweather
+ marco
+ mate-common
+ mate-control-center
+ mate-desktop
+ mate-icon-theme
+ mate-menus
+ mate-notification-daemon
+ mate-panel
+ mate-polkit
+ mate-session-manager
+ mate-settings-daemon
+ mate-themes
+ ];
+
+ extraPackages = [
+ atril
+ caja-extensions
+ engrampa
+ eom
+ mate-applets
+ mate-backgrounds
+ mate-calc
+ mate-indicator-applet
+ mate-media
+ mate-netbook
+ mate-power-manager
+ mate-screensaver
+ mate-sensors-applet
+ mate-system-monitor
+ mate-terminal
+ mate-user-guide
+ # mate-user-share
+ mate-utils
+ mozo
+ pluma
+ ];
+
+ };
+
+in self
diff --git a/nixpkgs/pkgs/desktops/mate/engrampa/default.nix b/nixpkgs/pkgs/desktops/mate/engrampa/default.nix
new file mode 100644
index 00000000000..0278fd7fec8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/engrampa/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, libxml2, gtk3, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "engrampa";
+ version = "1.22.2";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0ph7ngk32nnzc3psqjs5zy52zbjilk30spr2r4sixqxvmz7d28gd";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ libxml2
+ gtk3
+ mate.caja
+ hicolor-icon-theme
+ mate.mate-desktop
+ ];
+
+ configureFlags = [ "--with-cajadir=$$out/lib/caja/extensions-2.0" ];
+
+ meta = {
+ description = "Archive Manager for MATE";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/eom/default.nix b/nixpkgs/pkgs/desktops/mate/eom/default.nix
new file mode 100644
index 00000000000..cc683ab2db2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/eom/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, exempi, lcms2, libexif, libjpeg, librsvg, libxml2, libpeas, shared-mime-info, gtk3, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "eom";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "03lpxqvyaqhz4wmi07nxcyn5q73ym3dzm41cdid53f2dp9lk1mv4";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ exempi
+ lcms2
+ libexif
+ libjpeg
+ librsvg
+ libxml2
+ shared-mime-info
+ gtk3
+ libpeas
+ mate.mate-desktop
+ hicolor-icon-theme
+ ];
+
+ meta = {
+ description = "An image viewing and cataloging program for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/libmatekbd/default.nix b/nixpkgs/pkgs/desktops/mate/libmatekbd/default.nix
new file mode 100644
index 00000000000..d6709c375e6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/libmatekbd/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, libxklavier }:
+
+stdenv.mkDerivation rec {
+ pname = "libmatekbd";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1dsr7618c92mhwabwhgxqsfp7gnf9zrz2z790jc5g085dxhg13y8";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ gtk3 libxklavier ];
+
+ meta = with stdenv.lib; {
+ description = "Keyboard management library for MATE";
+ homepage = https://github.com/mate-desktop/libmatekbd;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/libmatemixer/default.nix b/nixpkgs/pkgs/desktops/mate/libmatemixer/default.nix
new file mode 100644
index 00000000000..17fee5d61cb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/libmatemixer/default.nix
@@ -0,0 +1,31 @@
+{ config, stdenv, fetchurl, pkgconfig, intltool, glib
+, alsaSupport ? stdenv.isLinux, alsaLib
+, pulseaudioSupport ? config.pulseaudio or true, libpulseaudio
+, ossSupport ? false
+ }:
+
+stdenv.mkDerivation rec {
+ pname = "libmatemixer";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1v0gpr55gj4mj8hzxbhgzrmhaxvs2inxhsmirvjw39sc7iplvrh9";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ glib ]
+ ++ stdenv.lib.optional alsaSupport alsaLib
+ ++ stdenv.lib.optional pulseaudioSupport libpulseaudio;
+
+ configureFlags = stdenv.lib.optional ossSupport "--enable-oss";
+
+ meta = with stdenv.lib; {
+ description = "Mixer library for MATE";
+ homepage = https://github.com/mate-desktop/libmatemixer;
+ license = with licenses; [ gpl2 lgpl2 ];
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/libmateweather/default.nix b/nixpkgs/pkgs/desktops/mate/libmateweather/default.nix
new file mode 100644
index 00000000000..e4976f71ae6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/libmateweather/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, libsoup, tzdata }:
+
+stdenv.mkDerivation rec {
+ pname = "libmateweather";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1ribgcwl4ncfbcf9bkcbxrgc7yzajdnxg12837psngymkqswlp6a";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ gtk3 libsoup tzdata ];
+
+ configureFlags = [
+ "--with-zoneinfo-dir=${tzdata}/share/zoneinfo"
+ "--enable-locations-compression"
+ ];
+
+ preFixup = "rm -f $out/share/icons/mate/icon-theme.cache";
+
+ meta = with stdenv.lib; {
+ description = "Library to access weather information from online services for MATE";
+ homepage = https://github.com/mate-desktop/libmateweather;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/marco/default.nix b/nixpkgs/pkgs/desktops/mate/marco/default.nix
new file mode 100644
index 00000000000..9899256018a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/marco/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, libxml2, libcanberra-gtk3, libgtop, libstartup_notification, gnome3, gtk3, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "marco";
+ version = "1.22.2";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0sc7x14229yj22ka1vlzbaqndwcgh6idypjmm9rydkj4n968jwry";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ libxml2
+ libcanberra-gtk3
+ libgtop
+ libstartup_notification
+ gtk3
+ gnome3.zenity
+ ];
+
+ meta = with stdenv.lib; {
+ description = "MATE default window manager";
+ homepage = https://github.com/mate-desktop/marco;
+ license = [ licenses.gpl2 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-applets/default.nix b/nixpkgs/pkgs/desktops/mate/mate-applets/default.nix
new file mode 100644
index 00000000000..ec7ad2b4294
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-applets/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, gnome3, glib, gtk3, gtksourceview3, libwnck3, libgtop, libxml2, libnotify, polkit, upower, wirelesstools, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-applets";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "19sjm2180ir8a264rz8m528qaqjpl3q3cq095ab0sbkp2igksrfx";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ gtksourceview3
+ gnome3.gucharmap
+ libwnck3
+ libgtop
+ libxml2
+ libnotify
+ polkit
+ upower
+ wirelesstools
+ mate.libmateweather
+ mate.mate-panel
+ hicolor-icon-theme
+ ];
+
+ configureFlags = [ "--enable-suid=no" ];
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ meta = with stdenv.lib; {
+ description = "Applets for use with the MATE panel";
+ homepage = https://mate-desktop.org;
+ license = with licenses; [ gpl2Plus lgpl2Plus ];
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-backgrounds/default.nix b/nixpkgs/pkgs/desktops/mate/mate-backgrounds/default.nix
new file mode 100644
index 00000000000..2667c25959e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-backgrounds/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, intltool }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-backgrounds";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1j9ch04qi2q4mdcvb92w667ra9hpfdf2bfpi1dpw0nbph7r6qvj9";
+ };
+
+ nativeBuildInputs = [ intltool ];
+
+ meta = with stdenv.lib; {
+ description = "Background images and data for MATE";
+ homepage = https://mate-desktop.org;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-calc/default.nix b/nixpkgs/pkgs/desktops/mate/mate-calc/default.nix
new file mode 100644
index 00000000000..64ede5101c7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-calc/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, gtk3, libxml2, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-calc";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0zin3w03zrkpb12rvay23bfk9fnjpybkr5mqzkpn9xfnqamhk8ld";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libxml2
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Calculator for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = [ licenses.gpl2Plus ];
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-common/default.nix b/nixpkgs/pkgs/desktops/mate/mate-common/default.nix
new file mode 100644
index 00000000000..f85dd632bd1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-common/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-common";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "11lwckndizawbq993ws8lqp59vsc873zri0m8s1i5zyc4qx9f69z";
+ };
+
+ meta = {
+ description = "Common files for development of MATE packages";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.gpl3;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-control-center/default.nix b/nixpkgs/pkgs/desktops/mate/mate-control-center/default.nix
new file mode 100644
index 00000000000..a06c24b9c72
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-control-center/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, libxml2, dbus-glib,
+ libxklavier, libcanberra-gtk3, librsvg, libappindicator-gtk3,
+ desktop-file-utils, gnome3, gtk3, mate, hicolor-icon-theme, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "mate-control-center";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0w9w3wkxksbhzyd96y1x6yxb0q5lkp16y8i42564b6njvwqch5a0";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ desktop-file-utils
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ libxml2
+ dbus-glib
+ libxklavier
+ libcanberra-gtk3
+ librsvg
+ libappindicator-gtk3
+ gtk3
+ gnome3.dconf
+ hicolor-icon-theme
+ mate.mate-desktop
+ mate.libmatekbd
+ mate.mate-menus
+ mate.marco
+ mate.mate-settings-daemon
+ ];
+
+ patches = [
+ # look up keyboard shortcuts in system data dirs
+ ./mate-control-center.keybindings-dir.patch
+ ];
+
+ configureFlags = [ "--disable-update-mimedb" ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # WM keyboard shortcuts
+ --prefix XDG_DATA_DIRS : "${mate.marco}/share"
+ )
+ '';
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ description = "Utilities to configure the MATE desktop";
+ homepage = https://github.com/mate-desktop/mate-control-center;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-control-center/mate-control-center.keybindings-dir.patch b/nixpkgs/pkgs/desktops/mate/mate-control-center/mate-control-center.keybindings-dir.patch
new file mode 100644
index 00000000000..4a3036ae16e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-control-center/mate-control-center.keybindings-dir.patch
@@ -0,0 +1,106 @@
+From faeb322b01d3856f3cf163470cc38f4e88a8527c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Sun, 28 Apr 2019 21:45:39 -0300
+Subject: [PATCH] Use system data dirs to locate key bindings
+
+---
+ capplets/keybindings/Makefile.am | 3 +-
+ .../keybindings/mate-keybinding-properties.c | 58 ++++++++++++-------
+ 2 files changed, 39 insertions(+), 22 deletions(-)
+
+diff --git a/capplets/keybindings/Makefile.am b/capplets/keybindings/Makefile.am
+index e5efb109..9501dd8f 100644
+--- a/capplets/keybindings/Makefile.am
++++ b/capplets/keybindings/Makefile.am
+@@ -33,8 +33,7 @@ AM_CPPFLAGS = \
+ $(MATECC_CAPPLETS_CFLAGS) \
+ -DMATELOCALEDIR="\"$(datadir)/locale\"" \
+ -DMATECC_DATA_DIR="\"$(pkgdatadir)\"" \
+- -DMATECC_UI_DIR="\"$(uidir)\"" \
+- -DMATECC_KEYBINDINGS_DIR="\"$(pkgdatadir)/keybindings\""
++ -DMATECC_UI_DIR="\"$(uidir)\""
+ CLEANFILES = \
+ $(MATECC_CAPPLETS_CLEANFILES) \
+ $(desktop_DATA) \
+diff --git a/capplets/keybindings/mate-keybinding-properties.c b/capplets/keybindings/mate-keybinding-properties.c
+index 4f257333..cf1891d2 100644
+--- a/capplets/keybindings/mate-keybinding-properties.c
++++ b/capplets/keybindings/mate-keybinding-properties.c
+@@ -1033,39 +1033,57 @@ static void
+ reload_key_entries (GtkBuilder *builder)
+ {
+ gchar **wm_keybindings;
+- GDir *dir;
+- const char *name;
+ GList *list, *l;
++ const gchar * const * data_dirs;
++ GHashTable *loaded_files;
++ guint i;
+
+ wm_keybindings = wm_common_get_current_keybindings();
+
+ clear_old_model (builder);
+
+- dir = g_dir_open (MATECC_KEYBINDINGS_DIR, 0, NULL);
+- if (!dir)
+- return;
+-
+- list = NULL;
+- for (name = g_dir_read_name (dir) ; name ; name = g_dir_read_name (dir))
++ loaded_files = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
++ data_dirs = g_get_system_data_dirs ();
++ for (i = 0; data_dirs[i] != NULL; i++)
+ {
+- if (g_str_has_suffix (name, ".xml"))
++ g_autofree gchar *dir_path = NULL;
++ GDir *dir;
++ const gchar *name;
++
++ dir_path = g_build_filename (data_dirs[i], "mate-control-center", "keybindings", NULL);
++ g_debug ("Keybinding dir: %s", dir_path);
++
++ dir = g_dir_open (dir_path, 0, NULL);
++ if (!dir)
++ continue;
++
++ for (name = g_dir_read_name (dir) ; name ; name = g_dir_read_name (dir))
+ {
+- list = g_list_insert_sorted (list, g_strdup (name),
+- (GCompareFunc) g_ascii_strcasecmp);
+- }
+- }
+- g_dir_close (dir);
++ if (g_str_has_suffix (name, ".xml") == FALSE)
++ continue;
++
++ if (g_hash_table_lookup (loaded_files, name) != NULL)
++ {
++ g_debug ("Not loading %s, it was already loaded from another directory", name);
++ continue;
++ }
+
++ g_hash_table_insert (loaded_files, g_strdup (name), g_strdup (dir_path));
++ }
++
++ g_dir_close (dir);
++ }
++ list = g_hash_table_get_keys (loaded_files);
++ list = g_list_sort(list, (GCompareFunc) g_str_equal);
+ for (l = list; l != NULL; l = l->next)
+ {
+- gchar *path;
+-
+- path = g_build_filename (MATECC_KEYBINDINGS_DIR, l->data, NULL);
+- append_keys_to_tree_from_file (builder, path, wm_keybindings);
+- g_free (l->data);
+- g_free (path);
++ g_autofree gchar *path = NULL;
++ path = g_build_filename (g_hash_table_lookup (loaded_files, l->data), l->data, NULL);
++ g_debug ("Keybinding file: %s", path);
++ append_keys_to_tree_from_file (builder, path, wm_keybindings);
+ }
+ g_list_free (list);
++ g_hash_table_destroy (loaded_files);
+
+ /* Load custom shortcuts _after_ system-provided ones,
+ * since some of the custom shortcuts may also be listed
diff --git a/nixpkgs/pkgs/desktops/mate/mate-desktop/default.nix b/nixpkgs/pkgs/desktops/mate/mate-desktop/default.nix
new file mode 100644
index 00000000000..58515a492b5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-desktop/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, intltool, isocodes, gnome3, gtk3, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-desktop";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1hr4r69855csqrcaqpbcyplsy4cwjfz7gabps2pzkh5132jycfr0";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gnome3.dconf
+ gtk3
+ isocodes
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Library with common API for various MATE modules";
+ homepage = https://mate-desktop.org;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-icon-theme-faenza/default.nix b/nixpkgs/pkgs/desktops/mate/mate-icon-theme-faenza/default.nix
new file mode 100644
index 00000000000..7db01f59816
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-icon-theme-faenza/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, autoreconfHook, gtk3, mate, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-icon-theme-faenza";
+ version = "1.20.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "000vr9cnbl2qlysf2gyg1lsjirqdzmwrnh6d3hyrsfc0r2vh4wna";
+ };
+
+ nativeBuildInputs = [ autoreconfHook gtk3 ];
+
+ buildInputs = [ mate.mate-icon-theme hicolor-icon-theme ];
+
+ postInstall = ''
+ for theme in "$out"/share/icons/*; do
+ gtk-update-icon-cache "$theme"
+ done
+ '';
+
+ meta = {
+ description = "Faenza icon theme from MATE";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-icon-theme/default.nix b/nixpkgs/pkgs/desktops/mate/mate-icon-theme/default.nix
new file mode 100644
index 00000000000..9df0d0ce5a8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-icon-theme/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, intltool, iconnamingutils, librsvg, hicolor-icon-theme, gtk3 }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-icon-theme";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1pn1xbmr4w4mi45nwk1qh18z9rlngmkhp9bw671yn4k6sii8fi3k";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool iconnamingutils ];
+
+ buildInputs = [ librsvg hicolor-icon-theme ];
+
+ postInstall = ''
+ for theme in "$out"/share/icons/*; do
+ "${gtk3.out}/bin/gtk-update-icon-cache" "$theme"
+ done
+ '';
+
+ meta = {
+ description = "Icon themes from MATE";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.lgpl3;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-indicator-applet/default.nix b/nixpkgs/pkgs/desktops/mate/mate-indicator-applet/default.nix
new file mode 100644
index 00000000000..e1a6e874d1d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-indicator-applet/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, libindicator-gtk3, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-indicator-applet";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0zad81qvcin4m329hfxhv4a5j8gf4gj8944mvjrdgdh71bzan2x1";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libindicator-gtk3
+ mate.mate-panel
+ hicolor-icon-theme
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/mate-desktop/mate-indicator-applet;
+ description = "MATE panel indicator applet";
+ longDescription = ''
+ A small applet to display information from various applications
+ consistently in the panel.
+
+ The indicator applet exposes Ayatana Indicators in the MATE Panel.
+ Ayatana Indicators are an initiative by Canonical to provide crisp and
+ clean system and application status indication. They take the form of
+ an icon and associated menu, displayed (usually) in the desktop panel.
+ Existing indicators include the Message Menu, Battery Menu and Sound
+ menu.
+ '';
+ license = with licenses; [ gpl3Plus lgpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-media/default.nix b/nixpkgs/pkgs/desktops/mate/mate-media/default.nix
new file mode 100644
index 00000000000..93c765a9953
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-media/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libtool, libxml2, libcanberra-gtk3, gtk3, mate, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-media";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "13g1n2ddgr1yxgl4fsqj3sgb9344b756kam9v3sq6vh0bxlr4yf2";
+ };
+
+ buildInputs = [
+ libxml2
+ libcanberra-gtk3
+ gtk3
+ mate.libmatemixer
+ mate.mate-panel
+ mate.mate-desktop
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ libtool
+ wrapGAppsHook
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Media tools for MATE";
+ homepage = https://mate-desktop.org;
+ license = licenses.gpl3;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo maintainers.chpatrick ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-menus/default.nix b/nixpkgs/pkgs/desktops/mate/mate-menus/default.nix
new file mode 100644
index 00000000000..e37a270f9dc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-menus/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, gobject-introspection, python3 }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-menus";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1lkakbf2f1815c146z4xp5f0h4lim6jzr02681wbvzalc6k97v5c";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool gobject-introspection ];
+
+ buildInputs = [ glib python3 ];
+
+ makeFlags = [
+ "INTROSPECTION_GIRDIR=$(out)/share/gir-1.0/"
+ "INTROSPECTION_TYPELIBDIR=$(out)/lib/girepository-1.0"
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Menu system for MATE";
+ homepage = https://github.com/mate-desktop/mate-menus;
+ license = with licenses; [ gpl2 lgpl2 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-netbook/default.nix b/nixpkgs/pkgs/desktops/mate/mate-netbook/default.nix
new file mode 100644
index 00000000000..51d23e475ff
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-netbook/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, libwnck3, libfakekey, libXtst, mate, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-netbook";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "00n162bskbvxhy4k2w14f9zwlsg3wgi43228ssx7sc2p95psmm64";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libwnck3
+ libfakekey
+ libXtst
+ mate.mate-panel
+ ];
+
+ meta = with stdenv.lib; {
+ description = "MATE utilities for netbooks";
+ longDescription = ''
+ MATE utilities for netbooks are an applet and a daemon to maximize
+ windows and move their titles on the panel.
+
+ Installing these utilities is recommended for netbooks and similar
+ devices with low resolution displays.
+ '';
+ homepage = https://mate-desktop.org;
+ license = with licenses; [ gpl3 lgpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-notification-daemon/default.nix b/nixpkgs/pkgs/desktops/mate/mate-notification-daemon/default.nix
new file mode 100644
index 00000000000..d53ae8efa35
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-notification-daemon/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, libcanberra-gtk3,
+ libnotify, libwnck3, gtk3, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-notification-daemon";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "06z3xczhz5diy4kk7b8lrzljrnql6fz0n1jyy916cf8pnnanpg0j";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ libcanberra-gtk3
+ libnotify
+ libwnck3
+ gtk3
+ ];
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ meta = with stdenv.lib; {
+ description = "Notification daemon for MATE";
+ homepage = https://github.com/mate-desktop/mate-notification-daemon;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-panel/default.nix b/nixpkgs/pkgs/desktops/mate/mate-panel/default.nix
new file mode 100644
index 00000000000..39d2c1812cb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-panel/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, glib, libwnck3, librsvg, libxml2, gnome3, gtk3, mate, hicolor-icon-theme, gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-panel";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0pb9dpgsfjp6gsldg4ad2jz23xdvjfarmz4cjwkpakygkq5i6dma";
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ intltool
+ itstool
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ libwnck3
+ librsvg
+ libxml2
+ gtk3
+ gnome3.dconf
+ mate.libmateweather
+ mate.mate-desktop
+ mate.mate-menus
+ hicolor-icon-theme
+ ];
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ makeFlags = [
+ "INTROSPECTION_GIRDIR=$(out)/share/gir-1.0/"
+ "INTROSPECTION_TYPELIBDIR=$(out)/lib/girepository-1.0"
+ ];
+
+ meta = with stdenv.lib; {
+ description = "The MATE panel";
+ homepage = https://github.com/mate-desktop/mate-panel;
+ license = with licenses; [ gpl2 lgpl2 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-polkit/default.nix b/nixpkgs/pkgs/desktops/mate/mate-polkit/default.nix
new file mode 100644
index 00000000000..253472e3987
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-polkit/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, gobject-introspection, libappindicator-gtk3, libindicator-gtk3, polkit }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-polkit";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "02r8n71xflhvw2hsf6g4svdahzyg3r4n6xamasyzqfhyn0mqmjy0";
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ intltool
+ pkgconfig
+ ];
+
+ buildInputs = [
+ gtk3
+ libappindicator-gtk3
+ libindicator-gtk3
+ polkit
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Integrates polkit authentication for MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = [ licenses.gpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-power-manager/default.nix b/nixpkgs/pkgs/desktops/mate/mate-power-manager/default.nix
new file mode 100644
index 00000000000..6ba6ac205ce
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-power-manager/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, itstool, libxml2, mate, libnotify, libcanberra-gtk3, dbus-glib, upower, gnome3, gtk3, libtool, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-power-manager";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "06vs2w44l1s25j0mifkid02yncw0nvdxw8r4pp2jm18kxan4frms";
+ };
+
+ buildInputs = [
+ glib
+ itstool
+ libxml2
+ libcanberra-gtk3
+ gtk3
+ gnome3.libgnome-keyring
+ libnotify
+ dbus-glib
+ upower
+ mate.mate-panel
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ libtool
+ wrapGAppsHook
+ ];
+
+ configureFlags = [ "--enable-applets" ];
+
+ meta = with stdenv.lib; {
+ description = "The MATE Power Manager";
+ homepage = https://mate-desktop.org;
+ license = licenses.gpl3;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo maintainers.chpatrick ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-screensaver/default.nix b/nixpkgs/pkgs/desktops/mate/mate-screensaver/default.nix
new file mode 100644
index 00000000000..d1c1e481d70
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-screensaver/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, dbus-glib, libXScrnSaver, libnotify, pam, systemd, mate, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-screensaver";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0c4qq5szsbfrz8hgkmlby2k7f1qs8kgqf2shd63z0pc8p6f47vvc";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ dbus-glib
+ libXScrnSaver
+ libnotify
+ pam
+ systemd
+ mate.mate-desktop
+ mate.mate-menus
+ ];
+
+ configureFlags = [ "--without-console-kit" ];
+
+ makeFlags = "DBUS_SESSION_SERVICE_DIR=$(out)/etc";
+
+ meta = with stdenv.lib; {
+ description = "Screen saver and locker for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = with licenses; [ gpl2Plus lgpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-sensors-applet/default.nix b/nixpkgs/pkgs/desktops/mate/mate-sensors-applet/default.nix
new file mode 100644
index 00000000000..bd9ed9f6cbe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-sensors-applet/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, gtk3, libxml2, libxslt, libatasmart, libnotify, lm_sensors, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-sensors-applet";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0rv19jxxviqqwk2wlhxlm98jsxa26scvs7ilp2i6plhn3ap2alq3";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ # maybe add nvidia-settings later on
+ buildInputs = [
+ gtk3
+ libxml2
+ libxslt
+ libatasmart
+ libnotify
+ lm_sensors
+ mate.mate-panel
+ hicolor-icon-theme
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/mate-desktop/mate-sensors-applet;
+ description = "MATE panel applet for hardware sensors";
+ license = with licenses; [ gpl2Plus ];
+ platforms = platforms.linux;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-session-manager/default.nix b/nixpkgs/pkgs/desktops/mate/mate-session-manager/default.nix
new file mode 100644
index 00000000000..b7735ec77fe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-session-manager/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, intltool, xtrans, dbus-glib, systemd,
+ libSM, libXtst, gtk3, hicolor-icon-theme, mate,
+ wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "mate-session-manager";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1ix8picxgc28m5zd0ww3zvzw6rz38wvzsrbqw28hghrfg926h6ig";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ xtrans
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ dbus-glib
+ systemd
+ libSM
+ libXtst
+ gtk3
+ mate.mate-desktop
+ hicolor-icon-theme
+ ];
+
+ meta = with stdenv.lib; {
+ description = "MATE Desktop session manager";
+ homepage = https://github.com/mate-desktop/mate-session-manager;
+ license = with licenses; [ gpl2 lgpl2 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-settings-daemon/default.nix b/nixpkgs/pkgs/desktops/mate/mate-settings-daemon/default.nix
new file mode 100644
index 00000000000..5ee995402ec
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-settings-daemon/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, dbus-glib, libxklavier,
+ libcanberra-gtk3, libnotify, nss, polkit, gnome3, gtk3, mate,
+ pulseaudioSupport ? stdenv.config.pulseaudio or true, libpulseaudio,
+ wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-settings-daemon";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yr5v6b9hdk20j29smbw1k4fkyg82i5vlflmgly0vi5whgc74gym";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ dbus-glib
+ libxklavier
+ libcanberra-gtk3
+ libnotify
+ nss
+ polkit
+ gtk3
+ gnome3.dconf
+ mate.mate-desktop
+ mate.libmatekbd
+ mate.libmatemixer
+ ] ++ stdenv.lib.optional pulseaudioSupport libpulseaudio;
+
+ configureFlags = stdenv.lib.optional pulseaudioSupport "--enable-pulse";
+
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ meta = with stdenv.lib; {
+ description = "MATE settings daemon";
+ homepage = https://github.com/mate-desktop/mate-settings-daemon;
+ license = with licenses; [ gpl2 lgpl21 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-system-monitor/default.nix b/nixpkgs/pkgs/desktops/mate/mate-system-monitor/default.nix
new file mode 100644
index 00000000000..6f5993cfc35
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-system-monitor/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, gtkmm3, libxml2, libgtop, libwnck3, librsvg, systemd, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-system-monitor";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yh1sh5snd7ivchh6l9rbn1s7ia4j5ihhzhqkyjnhr8ln59dvcbm";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtkmm3
+ libxml2
+ libgtop
+ libwnck3
+ librsvg
+ systemd
+ ];
+
+ configureFlags = [ "--enable-systemd" ];
+
+ meta = with stdenv.lib; {
+ description = "System monitor for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = [ licenses.gpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-terminal/default.nix b/nixpkgs/pkgs/desktops/mate/mate-terminal/default.nix
new file mode 100644
index 00000000000..7ec9944aa0e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-terminal/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, itstool, libxml2, mate, gnome3, gtk3, vte, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-terminal";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "08210ry5lrivsgzqpdaxrchhpj0n5s1q0x4pxmwdpnksjpcj11mn";
+ };
+
+ buildInputs = [
+ glib
+ itstool
+ libxml2
+
+ mate.mate-desktop
+
+ vte
+ gtk3
+ gnome3.dconf
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ wrapGAppsHook
+ ];
+
+ meta = with stdenv.lib; {
+ description = "The MATE Terminal Emulator";
+ homepage = https://mate-desktop.org;
+ license = licenses.gpl3;
+ platforms = platforms.unix;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-themes/default.nix b/nixpkgs/pkgs/desktops/mate/mate-themes/default.nix
new file mode 100644
index 00000000000..9ed5515ea3e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-themes/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, intltool, mate, gtk2, gtk3,
+ gtk_engines, gtk-engine-murrine, gdk-pixbuf, librsvg }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-themes";
+ version = "3.22.20";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/themes/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0c3dhf8p9nc2maky4g9xr04iil9wwbdkmhpzynlc6lfg4ksqq2bx";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool gtk3 ];
+
+ buildInputs = [ mate.mate-icon-theme gtk2 gtk_engines gdk-pixbuf librsvg ];
+
+ propagatedUserEnvPkgs = [ gtk-engine-murrine ];
+
+ postInstall = ''
+ gtk-update-icon-cache "$out"/share/icons/ContrastHigh
+ '';
+
+ meta = {
+ description = "A set of themes from MATE";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.lgpl21;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-user-guide/default.nix b/nixpkgs/pkgs/desktops/mate/mate-user-guide/default.nix
new file mode 100644
index 00000000000..a9a0e171231
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-user-guide/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, intltool, itstool, libxml2, yelp }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-user-guide";
+ version = "1.22.2";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "01kcszsjiriqp4hf1k4fhazi2yfqlkn415sfgx0jw0p821bzqf2h";
+ };
+
+ nativeBuildInputs = [ itstool intltool libxml2 ];
+
+ buildInputs = [ yelp ];
+
+ meta = with stdenv.lib; {
+ description = "MATE User Guide";
+ homepage = https://mate-desktop.org;
+ license = with licenses; [ gpl2Plus fdl12 ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-user-share/default.nix b/nixpkgs/pkgs/desktops/mate/mate-user-share/default.nix
new file mode 100644
index 00000000000..999bee2e5d1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-user-share/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, gtk3, dbus-glib, libnotify, libxml2, libcanberra-gtk3, mod_dnssd, apacheHttpd, hicolor-icon-theme, mate, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-user-share";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1krsar1pwa8720qz2dckcg0f6z9mvfk49djdxaz1afvi7blmqd6k";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ libxml2
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ dbus-glib
+ libnotify
+ libcanberra-gtk3
+ mate.caja
+ hicolor-icon-theme
+ # Should mod_dnssd and apacheHttpd be runtime dependencies?
+ # In gnome-user-share they are not.
+ #mod_dnssd
+ #apacheHttpd
+ ];
+
+ preConfigure = ''
+ sed -e 's,^LoadModule dnssd_module.\+,LoadModule dnssd_module ${mod_dnssd}/modules/mod_dnssd.so,' \
+ -e 's,''${HTTP_MODULES_PATH},${apacheHttpd}/modules,' \
+ -i data/dav_user_2.4.conf
+ '';
+
+ configureFlags = [
+ "--with-httpd=${apacheHttpd.out}/bin/httpd"
+ "--with-modules-path=${apacheHttpd.dev}/modules"
+ "--with-cajadir=$(out)/lib/caja/extensions-2.0"
+ ];
+
+ meta = with stdenv.lib; {
+ description = "User level public file sharing for the MATE desktop";
+ homepage = https://github.com/mate-desktop/mate-user-share;
+ license = with licenses; [ gpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mate-utils/default.nix b/nixpkgs/pkgs/desktops/mate/mate-utils/default.nix
new file mode 100644
index 00000000000..7775173611e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mate-utils/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, gtk3, libxml2, libgtop, libcanberra-gtk3, inkscape, mate, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "mate-utils";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0768y6x33ljc9dxjlfmvplsn4lrxj5xhjddbyab9h6pqav8527rg";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ inkscape
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libgtop
+ libcanberra-gtk3
+ libxml2
+ mate.mate-panel
+ hicolor-icon-theme
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Utilities for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = with licenses; [ gpl2Plus lgpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/mozo/default.nix b/nixpkgs/pkgs/desktops/mate/mozo/default.nix
new file mode 100644
index 00000000000..36f8fecb192
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/mozo/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, python3, fetchurl, pkgconfig, intltool, mate, gtk3, glib, wrapGAppsHook, gobject-introspection }:
+
+python3.pkgs.buildPythonApplication rec {
+ pname = "mozo";
+ version = "1.22.1";
+
+ format = "other";
+ doCheck = false;
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yffp7p3b6ynpf7ck21klym7h09l35amnyahm71dxbv2kzj6hlqh";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool gobject-introspection wrapGAppsHook ];
+
+ propagatedBuildInputs = [ mate.mate-menus python3.pkgs.pygobject3 ];
+
+ buildInputs = [ gtk3 glib ];
+
+ meta = with stdenv.lib; {
+ description = "MATE Desktop menu editor";
+ homepage = https://github.com/mate-desktop/mozo;
+ license = with licenses; [ lgpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/pluma/default.nix b/nixpkgs/pkgs/desktops/mate/pluma/default.nix
new file mode 100644
index 00000000000..cfbe33dd380
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/pluma/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, intltool, itstool, isocodes, enchant, libxml2, python3, gnome3, gtksourceview3, libpeas, mate, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ pname = "pluma";
+ version = "1.22.1";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "14d5c5fg31d7br9h1y3gdcr53j4sxlgybf326jvdcw8mgy91k3dg";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ itstool
+ isocodes
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ enchant
+ libxml2
+ python3
+ gtksourceview3
+ libpeas
+ gnome3.adwaita-icon-theme
+ mate.mate-desktop
+ ];
+
+ meta = {
+ description = "Powerful text editor for the MATE desktop";
+ homepage = https://mate-desktop.org;
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/python-caja/default.nix b/nixpkgs/pkgs/desktops/mate/python-caja/default.nix
new file mode 100644
index 00000000000..42a8e328a16
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/python-caja/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk3, mate, python3Packages }:
+
+stdenv.mkDerivation rec {
+ pname = "python-caja";
+ version = "1.22.0";
+
+ src = fetchurl {
+ url = "http://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1zwdjvxci72j0181nlfq6912lw3aq8j3746brlp7wlzn22qp7b0k";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ python3Packages.wrapPython
+ ];
+
+ buildInputs = [
+ gtk3
+ mate.caja
+ python3Packages.python
+ python3Packages.pygobject3
+ ];
+
+ configureFlags = [ "--with-cajadir=$$out/lib/caja/extensions-2.0" ];
+
+ meta = with stdenv.lib; {
+ description = "Python binding for Caja components";
+ homepage = https://github.com/mate-desktop/python-caja;
+ license = [ licenses.gpl2Plus ];
+ platforms = platforms.unix;
+ maintainers = [ maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/mate/update.sh b/nixpkgs/pkgs/desktops/mate/update.sh
new file mode 100755
index 00000000000..fe294ae4985
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/mate/update.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p libarchive curl common-updater-scripts
+
+set -eu -o pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+root=../../..
+export NIXPKGS_ALLOW_UNFREE=1
+
+mate_version=1.22
+theme_version=3.22
+materepo=https://pub.mate-desktop.org/releases/${mate_version}
+themerepo=https://pub.mate-desktop.org/releases/themes/${theme_version}
+
+version() {
+ (cd "$root" && nix-instantiate --eval --strict -A "$1.version" | tr -d '"')
+}
+
+update_package() {
+ local p=$1
+ echo $p
+ echo "# $p" >> git-commits.txt
+
+ local repo
+ if [ "$p" = "mate-themes" ]; then
+ repo=$themerepo
+ else
+ repo=$materepo
+ fi
+
+ local p_version_old=$(version mate.$p)
+ local p_versions=$(curl -sS ${repo}/ | sed -rne "s/.*\"$p-([0-9]+\\.[0-9]+\\.[0-9]+)\\.tar\\.xz.*/\\1/p")
+ local p_version=$(echo $p_versions | sed -e 's/ /\n/g' | sort -t. -k 1,1n -k 2,2n -k 3,3n | tail -n1)
+
+ if [[ -z "$p_version" ]]; then
+ echo "unavailable $p"
+ echo "# $p not found" >> git-commits.txt
+ echo
+ return
+ fi
+
+ if [[ "$p_version" = "$p_version_old" ]]; then
+ echo "nothing to do, $p $p_version is current"
+ echo
+ return
+ fi
+
+ # Download package and save hash and file path.
+ local url="$repo/$p-${p_version}.tar.xz"
+ mapfile -t prefetch < <(nix-prefetch-url --print-path "$url")
+ local hash=${prefetch[0]}
+ local path=${prefetch[1]}
+ echo "$p: $p_version_old -> $p_version"
+ (cd "$root" && update-source-version mate.$p "$p_version" "$hash")
+ echo " git add pkgs/desktops/mate/$p" >> git-commits.txt
+ echo " git commit -m \"mate.$p: $p_version_old -> $p_version\"" >> git-commits.txt
+ echo
+}
+
+for d in $(ls -A --indicator-style=none); do
+ if [ -d $d ]; then
+ update_package $d
+ fi
+done
diff --git a/nixpkgs/pkgs/desktops/maxx/default.nix b/nixpkgs/pkgs/desktops/maxx/default.nix
new file mode 100644
index 00000000000..aaf9986fbb2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/maxx/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, makeWrapper, autoPatchelfHook, gnused
+, gcc, bash, gtk-engine-murrine, gtk_engines, librsvg
+
+, libX11, libXext, libXi, libXau, libXrender, libXft, libXmu, libSM, libXcomposite, libXfixes, libXpm
+, libXinerama, libXdamage, libICE, libXtst, libXaw, fontconfig, pango, cairo, glib, libxml2, atk, gtk2
+, gdk-pixbuf, libGL, ncurses5
+
+, dmidecode, pciutils, usbutils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "MaXX";
+ version = "2.0.1";
+ codename = "Indigo";
+
+ srcs = [
+ (fetchurl {
+ url = "http://maxxdesktop.arcadedaydream.com/${codename}-Releases/Installers/MaXX-${codename}-${version}-x86_64.tar.gz";
+ sha256 = "17hd3j8773kmvvhyf657in6zmhnw4mbvyn4r6dfip5bdaz66pj01";
+ })
+ ];
+
+ nativeBuildInputs = [ makeWrapper autoPatchelfHook gnused ];
+ buildInputs = [
+ stdenv.cc.cc libX11 libXext libXi libXau libXrender libXft libXmu libSM libXcomposite libXfixes libXpm
+ libXinerama libXdamage libICE libXtst libXaw fontconfig pango cairo glib libxml2 atk gtk2
+ gdk-pixbuf libGL ncurses5
+ ];
+
+ buildPhase = ''
+ sed -i "s/\(LD_LIBRARY_PATH=.*\)$/\1:\$LD_LIBRARY_PATH/p" etc/system.desktopenv
+
+ substituteInPlace bin/adminterm \
+ --replace /bin/bash ${bash}/bin/bash
+
+ substituteInPlace share/misc/HOME/initMaXX-Desktop-Home.sh \
+ --replace "cp " "cp --no-preserve=mode "
+ '';
+
+ installPhase = ''
+ maxx=$out/opt/MaXX
+ mkdir -p "$maxx" $out/share $maxx/sbin
+
+ mv -- ./* "$maxx"
+ ln -s $maxx/share/icons $out/share
+
+ wrapProgram $maxx/etc/skel/Xsession.dt \
+ --prefix GTK_PATH : "${gtk-engine-murrine}/lib/gtk-2.0:${gtk_engines}/lib/gtk-2.0" \
+ --prefix GDK_PIXBUF_MODULE_FILE : "$(echo ${librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)"
+
+ while IFS= read -r -d ''$'\0' i; do
+ if isExecutable "$i"; then
+ wrapProgram "$i" \
+ --prefix PATH : ${gcc}/bin
+ fi
+ done < <(find "$maxx" -type f -print0)
+
+ wrapProgram $maxx/bin/hinv \
+ --prefix PATH : ${stdenv.lib.makeBinPath [ dmidecode pciutils usbutils ]}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A replica of IRIX Interactive Desktop";
+ homepage = https://www.facebook.com/maxxdesktop/;
+ license = {
+ fullName = "The MaXX Interactive Desktop for Linux License Agreement";
+ url = http://maxxdesktop.arcadedaydream.com/Indigo-Releases/docs/license.html;
+ free = false; # redistribution is only allowed to *some* hardware, etc.
+ };
+ maintainers = [ maintainers.gnidorah ];
+ platforms = ["x86_64-linux"];
+ longDescription = ''
+ A clone of IRIX Interactive Desktop made in agreement with SGI.
+ Provides simple and fast retro desktop environment.
+ '';
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
new file mode 100644
index 00000000000..bcbe50e5de3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-calculator/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, desktop-file-utils
+, libxml2
+, gtk3
+, python3
+, granite
+, libgee
+, elementary-icon-theme
+, appstream
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-calculator";
+ version = "1.5.2";
+
+ repoName = "calculator";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1vdgl89hdf9q1ya6as7310hlr0xls3w7js2gzsd9z8arb6037ccl";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
new file mode 100644
index 00000000000..b806c085f84
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
@@ -0,0 +1,84 @@
+{ 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
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-calendar";
+ version = "5.0";
+
+ repoName = "calendar";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0yiis5ig98gjw4s2qh8lppkdmv1cgi6qchxqncsjdki7yxyyni35";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream-glib
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-camera/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-camera/default.nix
new file mode 100644
index 00000000000..279e9eff87a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-camera/default.nix
@@ -0,0 +1,83 @@
+{ 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 = "elementary-camera";
+ version = "1.0.4";
+
+ repoName = "camera";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1p532f961cjdg7szmxw7hw3av9v342hv5rx7in3bbhlc7adxflyc";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-code/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-code/default.nix
new file mode 100644
index 00000000000..355f3ea8d0f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-code/default.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, python3
+, 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 = "elementary-code";
+ version = "3.1.1";
+
+ repoName = "code";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0l469fi5vbcazwfhy320nr8wrzz96jbrqn4hag0kdm16wvf5x1yc";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ ctags
+ editorconfig-core-c
+ elementary-icon-theme
+ granite
+ gtk3
+ gtksourceview3
+ gtkspell3
+ libgee
+ libgit2-glib
+ libpeas
+ libsoup
+ vte
+ webkitgtk
+ zeitgeist
+ ];
+
+ # install script fails with UnicodeDecodeError because of printing a fancy elipsis character
+ LC_ALL = "C.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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/default.nix
new file mode 100644
index 00000000000..0decbbc6c7a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/default.nix
@@ -0,0 +1,96 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, gettext
+, vala
+, python3
+, desktop-file-utils
+, libcanberra
+, gtk3
+, glib
+, libgee
+, granite
+, libnotify
+, libunity
+, pango
+, plank
+, bamf
+, sqlite
+, libdbusmenu-gtk3
+, zeitgeist
+, glib-networking
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-files";
+ version = "4.1.9";
+
+ repoName = "files";
+
+ outputs = [ "out" "dev" ];
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "12p1li9a7kqdlgkq20svaly5kr661ww93qngaiic6zv1bdw2bpmv";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ glib-networking
+ 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 ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-files/hardcode-gsettings.patch
new file mode 100644
index 00000000000..3191f4e3cb2
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-music/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-music/default.nix
new file mode 100644
index 00000000000..7d235551a80
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-music/default.nix
@@ -0,0 +1,100 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, desktop-file-utils
+, 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 = "elementary-music";
+ version = "5.0.4";
+
+ repoName = "music";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "02qjsf9xnfh043xbls9mll2r1wcdvclw60x8wysv12rhbm90gwvp";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = 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
+ libnotify
+ libpeas
+ libsignon-glib
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-photos/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
new file mode 100644
index 00000000000..94b6a2fce8e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
@@ -0,0 +1,108 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, desktop-file-utils
+, gtk3
+, libaccounts-glib
+, libexif
+, libgee
+, geocode-glib
+, gexiv2
+, libgphoto2
+, granite
+, gst_all_1
+, libgudev
+, json-glib
+, libraw
+, librest
+, libsoup
+, sqlite
+, python3
+, scour
+, webkitgtk
+, libwebp
+, appstream
+, libunity
+, wrapGAppsHook
+, elementary-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-photos";
+ version = "2.6.4";
+
+ repoName = "photos";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "17r9658s0pqy6s45ysi3915sm8hpvmsp7cw2jahqvjc61r4qpdc1";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ meson
+ ninja
+ pkgconfig
+ python3
+ 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
+ librest
+ libsoup
+ libunity
+ libwebp
+ scour
+ sqlite
+ webkitgtk
+ ];
+
+ mesonFlags = [
+ "-Dplugins=false"
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
new file mode 100644
index 00000000000..4dd168f25f0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-screenshot-tool/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, python3
+, desktop-file-utils
+, gtk3
+, granite
+, libgee
+, libcanberra
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-screenshot-tool"; # This will be renamed to "screenshot" soon. See -> https://github.com/elementary/screenshot/pull/93
+ version = "1.6.2";
+
+ repoName = "screenshot";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1z61j96jk9zjr3bn5hgsp25m4v8h1rqwxm0kg8c34bvl06f13v8q";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ 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
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
new file mode 100644
index 00000000000..8bd335c6530
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-terminal/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, python3
+, vala
+, desktop-file-utils
+, gtk3
+, libxml2
+, granite
+, libnotify
+, vte
+, libgee
+, elementary-icon-theme
+, appstream
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-terminal";
+ version = "5.3.6";
+
+ repoName = "terminal";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0jp21sy8k3jq3ycvng9yy2hbhcvfgiknxxa8vcg3c06vqhadmnc3";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/elementary-videos/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-videos/default.nix
new file mode 100644
index 00000000000..9132707db2b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/elementary-videos/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, python3
+, desktop-file-utils
+, gtk3
+, granite
+, libgee
+, clutter-gst
+, clutter-gtk
+, gst_all_1
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-videos";
+ version = "2.6.3";
+
+ repoName = "videos";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1ncm8kh6dcy83p8pmpilnk03b4dx3b1jm8w13izq2dkglfgdwvqx";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = with gst_all_1; [
+ clutter-gst
+ clutter-gtk
+ elementary-icon-theme
+ granite
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix
new file mode 100644
index 00000000000..7a79f72f1a2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, substituteAll
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+, onboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-a11y";
+ version = "2.1.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1wh46lrsliii5bbvfc4xnzgnii2v7sqxnbn43ylmyqppfv9mk1wd";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit onboard;
+ })
+ ];
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/fix-paths.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/fix-paths.patch
new file mode 100644
index 00000000000..4d69390f39d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/a11y/fix-paths.patch
@@ -0,0 +1,13 @@
+diff --git a/src/Panes/Typing.vala b/src/Panes/Typing.vala
+index b4ae8b0..5b8fd7e 100644
+--- a/src/Panes/Typing.vala
++++ b/src/Panes/Typing.vala
+@@ -83,7 +83,7 @@ public class Accessibility.Panes.Typing : Categories.Pane {
+
+ onboard_settings_label.clicked.connect (() => {
+ try {
+- var appinfo = AppInfo.create_from_commandline ("onboard-settings", null, AppInfoCreateFlags.NONE);
++ var appinfo = AppInfo.create_from_commandline ("@onboard@/bin/onboard-settings", null, AppInfoCreateFlags.NONE);
+ appinfo.launch (null, null);
+ } catch (Error e) {
+ warning ("%s\n", e.message);
diff --git a/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
new file mode 100644
index 00000000000..3247aed4993
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, substituteAll
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+, pciutils
+}:
+
+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 = [
+ 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 = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch
new file mode 100644
index 00000000000..352d84c4262
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch
new file mode 100644
index 00000000000..41433f9a76b
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
new file mode 100644
index 00000000000..ddb589c9e79
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/applications/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-applications";
+ version = "2.1.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1c4agff456625kycacpsww7c9jsnsg1rqps96r7cvn9zq371b5ir";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix
new file mode 100644
index 00000000000..9f1c75b7b43
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, bluez
+, switchboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-bluetooth";
+ version = "2.2.2";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0rp9wa0yilc3wgwnybc6cryxphja7imixn45zhj475a4nb3afd0q";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ bluez
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch
new file mode 100644
index 00000000000..0fe0ac8b10c
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix
new file mode 100644
index 00000000000..c0c7bbdec2e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, substituteAll
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, libxml2
+, switchboard
+, tzdata
+}:
+
+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 = [
+ 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 = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/timezone.patch
new file mode 100644
index 00000000000..35f73d36599
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
new file mode 100644
index 00000000000..76cfe61fc77
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-display";
+ version = "2.1.8";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1xpgkvcv3bylpaj7c80727vr55vilkgjvnlbw7d5pr56v6mv7n9j";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix
new file mode 100644
index 00000000000..8b82543a0e5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, substituteAll
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, libxml2
+, libgnomekbd
+, libxklavier
+, xorg
+, switchboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-keyboard";
+ version = "2.3.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "17iijb7imxw5zv7vkrbc1vsp87k900yqgyv7ycz1gw37xb4klsyp";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ 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";
+ })
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/keyboard/xkb.patch
new file mode 100644
index 00000000000..33237d9c939
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
new file mode 100644
index 00000000000..a8556bd5401
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+, elementary-settings-daemon
+, glib
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-mouse-touchpad";
+ version = "2.2.0";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0mr25p7j5hl8zmvz5i3g30s4xbdhk6d22lw2akch3si40il9q5fv";
+ };
+
+ patches = [
+ ./hardcode-settings-daemon-gsettings.patch
+ ];
+
+ postPatch = ''
+ substituteInPlace src/Views/General.vala \
+ --subst-var-by GSD_GSETTINGS ${glib.getSchemaPath elementary-settings-daemon}
+ '';
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ glib
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch
new file mode 100644
index 00000000000..b904fe15309
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/mouse-touchpad/hardcode-settings-daemon-gsettings.patch
@@ -0,0 +1,63 @@
+diff --git a/src/Views/General.vala b/src/Views/General.vala
+index 4b19b73..dfa3d4d 100644
+--- a/src/Views/General.vala
++++ b/src/Views/General.vala
+@@ -138,32 +138,34 @@ public class MouseTouchpad.GeneralView : Gtk.Grid {
+ attach (pointer_speed_scale, 3, 8);
+ attach (pointer_speed_help, 1, 9, 3);
+
+- var xsettings_schema = SettingsSchemaSource.get_default ().lookup ("org.gnome.settings-daemon.plugins.xsettings", false);
+- if (xsettings_schema != null) {
+- var primary_paste_switch = new Gtk.Switch ();
+- primary_paste_switch.halign = Gtk.Align.START;
+-
+- var primary_paste_help = new Gtk.Label (_("Middle or three-finger clicking on an input will paste any selected text"));
+- primary_paste_help.margin_bottom = 18;
+- primary_paste_help.wrap = true;
+- primary_paste_help.xalign = 0;
+- primary_paste_help.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
+-
+- attach (new SettingLabel (_("Middle click paste:")), 0, 4);
+- attach (primary_paste_switch, 1, 4);
+- attach (primary_paste_help, 1, 5, 3);
+-
+- var xsettings = new GLib.Settings ("org.gnome.settings-daemon.plugins.xsettings");
+- primary_paste_switch.notify["active"].connect (() => on_primary_paste_switch_changed (primary_paste_switch, xsettings));
+-
+- var current_value = xsettings.get_value ("overrides").lookup_value ("Gtk/EnablePrimaryPaste", VariantType.INT32);
+- if (current_value != null) {
+- primary_paste_switch.active = current_value.get_int32 () == 1;
+- }
++ var primary_paste_switch = new Gtk.Switch ();
++ primary_paste_switch.halign = Gtk.Align.START;
++
++ var primary_paste_help = new Gtk.Label (_("Middle or three-finger clicking on an input will paste any selected text"));
++ primary_paste_help.margin_bottom = 18;
++ primary_paste_help.wrap = true;
++ primary_paste_help.xalign = 0;
++ primary_paste_help.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
++
++ attach (new SettingLabel (_("Middle click paste:")), 0, 4);
++ attach (primary_paste_switch, 1, 4);
++ attach (primary_paste_help, 1, 5, 3);
++
++ SettingsSchemaSource daemon_schema_source = new SettingsSchemaSource.from_directory ("@GSD_GSETTINGS@", null, true);
++ SettingsSchema xsettings_schema = daemon_schema_source.lookup ("org.gnome.settings-daemon.plugins.xsettings", false);
++
++ var xsettings = new GLib.Settings.full (xsettings_schema, null, null);
++ primary_paste_switch.notify["active"].connect (() => on_primary_paste_switch_changed (primary_paste_switch, xsettings));
++
++ var current_value = xsettings.get_value ("overrides").lookup_value ("Gtk/EnablePrimaryPaste", VariantType.INT32);
++ if (current_value != null) {
++ primary_paste_switch.active = current_value.get_int32 () == 1;
+ }
+
+- var daemon_settings = new GLib.Settings ("org.gnome.settings-daemon.peripherals.mouse");
+- daemon_settings.bind ("locate-pointer", reveal_pointer_switch, "active", GLib.SettingsBindFlags.DEFAULT);
++ SettingsSchema daemon_mouse_schema = daemon_schema_source.lookup ("org.gnome.settings-daemon.peripherals.mouse", false);
++
++ var daemon_mouse_settings = new GLib.Settings.full (daemon_mouse_schema, null, null);
++ daemon_mouse_settings.bind ("locate-pointer", reveal_pointer_switch, "active", GLib.SettingsBindFlags.DEFAULT);
+
+ var a11y_mouse_settings = new GLib.Settings ("org.gnome.desktop.a11y.mouse");
+ a11y_mouse_settings.bind ("secondary-click-enabled", hold_switch, "active", GLib.SettingsBindFlags.DEFAULT);
diff --git a/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
new file mode 100644
index 00000000000..175f0e45f46
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, substituteAll
+, vala
+, libgee
+, granite
+, gtk3
+, networkmanager
+, networkmanagerapplet
+, switchboard
+}:
+
+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 = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ networkmanager
+ networkmanagerapplet
+ switchboard
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./nma.patch;
+ networkmanagerapplet = networkmanagerapplet;
+ })
+ ];
+
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/network/nma.patch
new file mode 100644
index 00000000000..a5fff9d6a32
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix
new file mode 100644
index 00000000000..a6112495469
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/notifications/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+}:
+
+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 = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix
new file mode 100644
index 00000000000..aa9cdfa0ddd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/onlineaccounts/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, libaccounts-glib
+, libsignon-glib
+, json-glib
+, librest
+, webkitgtk
+, libsoup
+, switchboard
+}:
+
+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 = [
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/backgrounds.patch
new file mode 100644
index 00000000000..a1b019179d1
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
new file mode 100644
index 00000000000..35dd958483d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchFromGitHub, pantheon, meson, ninja, pkgconfig, vala, glib
+, libgee, granite, gexiv2, elementary-settings-daemon, gtk3, gnome-desktop
+, gala, wingpanel, plank, switchboard, gettext, bamf, fetchpatch }:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-pantheon-shell";
+ version = "2.8.1";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1vrnzxqzl84k8gbrais4j1jyap10kvil4cr769jpr3q3bkbblwrw";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gettext
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ bamf
+ elementary-settings-daemon
+ gexiv2
+ glib
+ gnome-desktop
+ 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
+ # Fixes https://github.com/elementary/switchboard-plug-pantheon-shell/issues/172
+ (fetchpatch {
+ url = "https://github.com/elementary/switchboard-plug-pantheon-shell/commit/e4f86df6a6be402db4c979a4b005573618b744d1.patch";
+ sha256 = "0sa8611k6sqg96mnp2plmxd30w6zq76bfwszl8ankr9kwsgyc66y";
+ })
+ ];
+
+ postPatch = ''
+ substituteInPlace src/Views/Appearance.vala \
+ --subst-var-by GALA_GSETTINGS_PATH ${glib.getSchemaPath gala}
+ substituteInPlace src/Views/Appearance.vala \
+ --subst-var-by WINGPANEL_GSETTINGS_PATH ${glib.getSchemaPath wingpanel}
+ '';
+
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/pantheon-shell/hardcode-gsettings.patch
new file mode 100644
index 00000000000..d023e1b55ce
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
new file mode 100644
index 00000000000..7bc3f6ba7ad
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, substituteAll
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, elementary-dpms-helper
+, elementary-settings-daemon
+, granite
+, gtk3
+, glib
+, dbus
+, polkit
+, switchboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-power";
+ version = "2.3.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1wcxz4jxyv8kms9gxpwvrb356h10qvcwmdjzjzl2bvj5yl1rfcs9";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ dbus
+ glib
+ 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 ${glib.getSchemaPath elementary-dpms-helper}
+ substituteInPlace src/MainView.vala \
+ --subst-var-by GSD_GSETTINGS_PATH ${glib.getSchemaPath elementary-settings-daemon}
+ '';
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
+ PKG_CONFIG_DBUS_1_SYSTEM_BUS_SERVICES_DIR = "${placeholder "out"}/share/dbus-1/system-services";
+ PKG_CONFIG_DBUS_1_SYSCONFDIR = "${placeholder "out"}/etc";
+ PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/dpms-helper-exec.patch
new file mode 100644
index 00000000000..335d3f29626
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/power/hardcode-gsettings.patch
new file mode 100644
index 00000000000..caacdad6eda
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
new file mode 100644
index 00000000000..d1feaaf0ea4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, cups
+, switchboard
+}:
+
+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 = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ cups
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
new file mode 100644
index 00000000000..fd67440a43c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, python3
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, glib
+, polkit
+, zeitgeist
+, switchboard
+, lightlocker
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-security-privacy";
+ version = "2.2.1";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0k2bq7l0m7qfpy1mkb3qvsinqd8n4lp0vwz3x64wlgfn2qipm1fn";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ ];
+
+ buildInputs = [
+ glib
+ granite
+ gtk3
+ libgee
+ polkit
+ switchboard
+ zeitgeist
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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 ${glib.getSchemaPath lightlocker}
+ substituteInPlace src/Views/FirewallPanel.vala \
+ --subst-var-by SWITCHBOARD_SEC_PRIV_GSETTINGS_PATH ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch
new file mode 100644
index 00000000000..ffaf1ecf5db
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix
new file mode 100644
index 00000000000..87ae233916d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sharing/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, switchboard
+}:
+
+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 = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libgee
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
new file mode 100644
index 00000000000..dee2f851e3f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard-plugs/sound/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, libgee
+, granite
+, gtk3
+, pulseaudio
+, libcanberra
+, libcanberra-gtk3
+, switchboard
+}:
+
+stdenv.mkDerivation rec {
+ pname = "switchboard-plug-sound";
+ version = "2.2.1";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0frml591r82j7hf1zlccgv8pzk3w10x470f9nzvdgdjpz0r776k2";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ granite
+ gtk3
+ libcanberra
+ libcanberra-gtk3
+ libgee
+ pulseaudio
+ switchboard
+ ];
+
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/default.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/default.nix
new file mode 100644
index 00000000000..5c10cc0e9e4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, vala
+, gtk3
+, libgee
+, granite
+, gettext
+, clutter-gtk
+, libunity
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+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
+ 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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/plugs-path-env.patch
new file mode 100644
index 00000000000..f5d8567bffe
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix
new file mode 100644
index 00000000000..756ae86bb19
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/apps/switchboard/wrapper.nix
@@ -0,0 +1,24 @@
+{ 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/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix
new file mode 100644
index 00000000000..fe9db999bb6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-gtk-theme";
+ version = "5.2.5";
+
+ repoName = "stylesheet";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0934rfdwkn4315mhayzba8a3b6i1xczp66gl6n45hh5c81gb2p65";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ 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/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix
new file mode 100644
index 00000000000..bdf42b1c1ef
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, python3
+, ninja
+, hicolor-icon-theme
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-icon-theme";
+ version = "5.0.4";
+
+ repoName = "icons";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0ha7biqvmkv68x1gi9bfcn5z0ld067pa5czx0pyf053pa86lg3hx";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gtk3
+ meson
+ ninja
+ python3
+ ];
+
+ 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/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-redacted-script/default.nix b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-redacted-script/default.nix
new file mode 100644
index 00000000000..df2475ce82a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-redacted-script/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+}:
+
+stdenv.mkDerivation {
+ pname = "elementary-redacted-script";
+ version = "unstable-2016-06-03";
+
+ src = fetchFromGitHub {
+ owner = "png2378";
+ repo = "redacted-elementary";
+ rev = "346440ff9ce19465e6d5c3d6d67a8573f992c746";
+ sha256 = "1jpd13sxkarclr0mlm66wzgpjh52ghzjzn4mywhyshyyskwn7jg1";
+ };
+
+ dontBuild = true;
+
+ installPhase = ''
+ mkdir -p $out/share/fonts/truetype/redacted-elementary
+ cp -a truetype/*.ttf $out/share/fonts/truetype/redacted-elementary
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Font for concealing text";
+ homepage = https://github.com/png2378/redacted-elementary;
+ license = licenses.ofl;
+ maintainers = pantheon.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix
new file mode 100644
index 00000000000..aff830fda56
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-sound-theme/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-sound-theme";
+ version = "1.0";
+
+ repoName = "sound-theme";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1dc583lq61c361arjl3s44d2k72c46bqvcqv1c3s69f2ndsnxjdz";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = 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/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix
new file mode 100644
index 00000000000..30145541750
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/artwork/elementary-wallpapers/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-wallpapers";
+ version = "5.3";
+
+ repoName = "wallpapers";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1i0zf9gzhwm8hgq5cp1xnxipqjvgzd9wfiicz612hgp6ivc0z0ag";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ dontBuild = true;
+ dontConfigure = 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/nixpkgs/pkgs/desktops/pantheon/default.nix b/nixpkgs/pkgs/desktops/pantheon/default.nix
new file mode 100644
index 00000000000..aed08c35a80
--- /dev/null
+++ b/nixpkgs/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 { };
+
+ notes-up = pkgs.notes-up.override { withPantheon = true; };
+
+ #### 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 { };
+
+ 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 { };
+
+ 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-redacted-script = callPackage ./artwork/elementary-redacted-script { };
+
+ elementary-sound-theme = callPackage ./artwork/elementary-sound-theme { };
+
+ elementary-wallpapers = callPackage ./artwork/elementary-wallpapers { };
+
+})
diff --git a/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch
new file mode 100644
index 00000000000..1b2dc835706
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/correct-override.patch
@@ -0,0 +1,25 @@
+diff --git a/overrides/default-settings.gschema.override b/overrides/default-settings.gschema.override
+index 1aef29c..08de164 100644
+--- a/overrides/default-settings.gschema.override
++++ b/overrides/default-settings.gschema.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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix
new file mode 100644
index 00000000000..a1a69ee303f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-default-settings";
+ version = "5.1.0";
+
+ repoName = "default-settings";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0l73py4rr56i4dalb2wh1c6qiwmcjkm0l1j75jp5agcnxldh5wym";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ patches = [
+ ./correct-override.patch
+ ];
+
+ dontBuild = true;
+ dontConfigure = 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 overrides/default-settings.gschema.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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/io.elementary.greeter.whitelist
new file mode 100644
index 00000000000..0cff31f4f77
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/gala-multitaskingview.dockitem
new file mode 100644
index 00000000000..b25bb8c8590
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.calendar.dockitem
new file mode 100644
index 00000000000..3bd7d531840
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.music.dockitem
new file mode 100644
index 00000000000..494edde183c
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.photos.dockitem
new file mode 100644
index 00000000000..89536754964
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.switchboard.dockitem
new file mode 100644
index 00000000000..312c35d9bf0
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/io.elementary.videos.dockitem
new file mode 100644
index 00000000000..3b0f721a564
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Epiphany.dockitem
new file mode 100644
index 00000000000..b0218bac52d
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-default-settings/launchers/org.gnome.Geary.dockitem
new file mode 100644
index 00000000000..8b04efe417e
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
new file mode 100644
index 00000000000..963418feec0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
@@ -0,0 +1,121 @@
+{ stdenv
+, fetchFromGitHub
+, linkFarm
+, elementary-greeter
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, desktop-file-utils
+, gtk3
+, granite
+, libgee
+, elementary-settings-daemon
+, mutter
+, elementary-icon-theme
+, wingpanel-with-indicators
+, elementary-gtk-theme
+, nixos-artwork
+, lightdm
+, gdk-pixbuf
+, clutter-gtk
+, dbus
+, accountsservice
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-greeter";
+ version = "5.0";
+
+ repoName = "greeter";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "01c8acarxwpakyq69xm4bjwppjf8v3ijmns8masd8raxligb2v8b";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+
+ xgreeters = linkFarm "pantheon-greeter-xgreeters" [{
+ path = "${elementary-greeter}/share/xgreeters/io.elementary.greeter.desktop";
+ name = "io.elementary.greeter.desktop";
+ }];
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ accountsservice
+ clutter-gtk # else we get could not generate cargs for mutter-clutter-2
+ elementary-gtk-theme
+ elementary-icon-theme
+ elementary-settings-daemon
+ gdk-pixbuf
+ granite
+ gtk3
+ libgee
+ lightdm
+ mutter
+ wingpanel-with-indicators
+ ];
+
+ 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"
+ # We use the patched gnome-settings-daemon
+ "-Dubuntu-patched-gsd=true"
+ "-Dgsd-dir=${elementary-settings-daemon}/libexec/" # trailing slash is needed
+ ];
+
+ patches = [
+ ./sysconfdir-install.patch
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # dbus-launch needed in path
+ --prefix PATH : "${dbus}/bin"
+
+ # for `wingpanel -g`
+ --prefix PATH : "${wingpanel-with-indicators}/bin"
+
+ # for the compositor
+ --prefix PATH : "$out/bin"
+ )
+ '';
+
+ postFixup = ''
+ # Use NixOS default wallpaper
+ 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"
+
+ substituteInPlace $out/share/xgreeters/io.elementary.greeter.desktop \
+ --replace "Exec=io.elementary.greeter" "Exec=$out/bin/io.elementary.greeter"
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/sysconfdir-install.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/sysconfdir-install.patch
new file mode 100644
index 00000000000..9bacbcf4f98
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-greeter/sysconfdir-install.patch
@@ -0,0 +1,25 @@
+From 7bb0d507cbb0122f167127b9f6460bd53d8234de Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@users.noreply.github.com>
+Date: Sat, 16 Mar 2019 16:07:24 -0400
+Subject: [PATCH] '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 fd54b75..b1120ae 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')
+ )
+
+ test (
+--
+2.19.2
+
diff --git a/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix
new file mode 100644
index 00000000000..9fc4418e7ca
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-gsettings-schemas/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, runCommand
+, mutter
+, elementary-default-settings
+, nixos-artwork
+, glib
+, gala
+, epiphany
+, elementary-settings-daemon
+, gtk3
+, plank
+, gsettings-desktop-schemas
+, extraGSettingsOverrides ? ""
+, extraGSettingsOverridePackages ? []
+}:
+
+let
+
+ gsettingsOverridePackages = [
+ elementary-settings-daemon
+ epiphany
+ gala
+ mutter
+ gsettings-desktop-schemas
+ gtk3
+ plank
+ ] ++ extraGSettingsOverridePackages;
+
+in
+
+with stdenv.lib;
+
+# TODO: Having https://github.com/NixOS/nixpkgs/issues/54150 would supersede this
+runCommand "elementary-gsettings-desktop-schemas" {}
+ ''
+ schema_dir=$out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
+
+ mkdir -p $schema_dir
+ cp -rf ${glib.getSchemaPath gsettings-desktop-schemas}/*.xml $schema_dir
+
+ ${concatMapStrings (pkg: "cp -rf ${glib.getSchemaPath pkg}/*.xml $schema_dir\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 $schema_dir
+
+ cat - > $schema_dir/nixos-defaults.gschema.override <<- EOF
+ [org.gnome.desktop.background]
+ picture-uri='file://${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 $schema_dir
+ ''
diff --git a/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix
new file mode 100644
index 00000000000..0be2431d33d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-print-shim/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, pkgconfig
+, vala
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-print-shim";
+ version = "0.1.3";
+
+ repoName = "print";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1w3cfap7j42x14mqpfqdm46hk5xc0v5kv8r6wxcnknr3sfxi8qlp";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default-elementary-dockitems.desktop
new file mode 100644
index 00000000000..517a9457ae1
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix
new file mode 100644
index 00000000000..7b0657bcd80
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/default.nix
@@ -0,0 +1,123 @@
+{ stdenv
+, fetchFromGitHub
+, substituteAll
+, writeScript
+, pantheon
+, gnome-keyring
+, gnome-session
+, wingpanel
+, orca
+, onboard
+, at-spi2-core
+, elementary-default-settings
+, writeShellScriptBin
+, elementary-settings-daemon
+, runtimeShell
+}:
+
+let
+
+ #
+ # ─── ENSURES PLANK GETS ELEMENTARY'S DEFAULT DOCKITEMS ────────────────────────────
+ #
+
+ #
+ # Upstream relies on /etc/skel to initiate a new users home directory with plank's 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" ''
+ #!${runtimeShell}
+
+ 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 = "elementary-session-settings";
+ version = "5.0.3";
+
+ repoName = "session-settings";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1vrjm7bklkfv0dyafm312v4hxzy6lb7p1ny4ijkn48kr719gc71k";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ dontBuild = true;
+ dontConfigure = true;
+
+ installPhase = ''
+ mkdir -p $out/share/applications
+ cp -av ${./pantheon-mimeapps.list} $out/share/applications/pantheon-mimeapps.list
+
+ mkdir -p $out/etc/xdg/autostart
+ for package in ${gnome-keyring} ${orca} ${onboard} ${at-spi2-core}; do
+ cp -av $package/etc/xdg/autostart/* $out/etc/xdg/autostart
+ done
+
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/pantheon-mimeapps.list b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/pantheon-mimeapps.list
new file mode 100644
index 00000000000..3b5e3b0e77a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-session-settings/pantheon-mimeapps.list
@@ -0,0 +1,168 @@
+[Default Applications]
+application/ogg=io.elementary.music.desktop
+application/oxps=org.gnome.Evince.desktop
+application/pdf=org.gnome.Evince.desktop
+application/postscript=org.gnome.Evince.desktop
+application/vnd.ms-xpsdocument=org.gnome.Evince.desktop
+application/vnd.rn-realmedia=io.elementary.videos.desktop
+application/x-ar=org.gnome.FileRoller.desktop
+application/x-arj=org.gnome.FileRoller.desktop
+application/x-bzdvi=org.gnome.Evince.desktop
+application/x-bzip-compressed-tar=org.gnome.FileRoller.desktop
+application/x-bzip=org.gnome.FileRoller.desktop
+application/x-bzpdf=org.gnome.Evince.desktop
+application/x-bzpostscript=org.gnome.Evince.desktop
+application/x-cbr=org.gnome.Evince.desktop
+application/x-cbt=org.gnome.Evince.desktop
+application/x-cbz=org.gnome.Evince.desktop
+application/x-compress=org.gnome.FileRoller.desktop
+application/x-compressed-tar=org.gnome.FileRoller.desktop
+application/x-dvi=org.gnome.Evince.desktop
+application/x-ear=org.gnome.FileRoller.desktop
+application/x-extension-m4a=io.elementary.videos.desktop
+application/x-extension-mp4=io.elementary.videos.desktop
+application/x-flac=io.elementary.music.desktop
+application/x-gtar=org.gnome.FileRoller.desktop
+application/x-gzdvi=org.gnome.Evince.desktop
+application/x-gzip=org.gnome.FileRoller.desktop
+application/x-gzpdf=org.gnome.Evince.desktop
+application/x-gzpostscript=org.gnome.Evince.desktop
+application/x-lha=org.gnome.FileRoller.desktop
+application/x-lhz=org.gnome.FileRoller.desktop
+application/x-lzop=org.gnome.FileRoller.desktop
+application/x-matroska=io.elementary.videos.desktop
+application/x-ogg=io.elementary.music.desktop
+application/x-perl=io.elementary.code.desktop
+application/x-rar-compressed=org.gnome.FileRoller.desktop
+application/x-rar=org.gnome.FileRoller.desktop
+application/x-rpm=org.gnome.FileRoller.desktop
+application/x-tar=org.gnome.FileRoller.desktop
+application/x-war=org.gnome.FileRoller.desktop
+application/x-xz-compressed-tar=org.gnome.FileRoller.desktop
+application/x-xz=org.gnome.FileRoller.desktop
+application/x-xzpdf=org.gnome.Evince.desktop
+application/x-zip-compressed=org.gnome.FileRoller.desktop
+application/x-zip=org.gnome.FileRoller.desktop
+application/x-zoo=org.gnome.FileRoller.desktop
+application/xhtml+xml=org.gnome.Epiphany.desktop
+application/zip=org.gnome.FileRoller.desktop
+audio/3gpp=io.elementary.music.desktop
+audio/ac3=io.elementary.music.desktop
+audio/AMR-WB=io.elementary.music.desktop
+audio/AMR=io.elementary.music.desktop
+audio/basic=io.elementary.music.desktop
+audio/flac=io.elementary.music.desktop
+audio/midi=io.elementary.music.desktop
+audio/mp4=io.elementary.music.desktop
+audio/mpeg=io.elementary.music.desktop
+audio/mpegurl=io.elementary.music.desktop
+audio/ogg=io.elementary.music.desktop
+audio/prs.sid=io.elementary.music.desktop
+audio/vnd.rn-realaudio=io.elementary.music.desktop
+audio/x-ape=io.elementary.music.desktop
+audio/x-flac=io.elementary.music.desktop
+audio/x-gsm=io.elementary.music.desktop
+audio/x-it=io.elementary.music.desktop
+audio/x-m4a=io.elementary.music.desktop
+audio/x-matroska=io.elementary.music.desktop
+audio/x-mod=io.elementary.music.desktop
+audio/x-mp3=io.elementary.music.desktop
+audio/x-mpeg=io.elementary.music.desktop
+audio/x-mpegurl=io.elementary.music.desktop
+audio/x-ms-asf=io.elementary.music.desktop
+audio/x-ms-asx=io.elementary.music.desktop
+audio/x-ms-wax=io.elementary.music.desktop
+audio/x-ms-wma=io.elementary.music.desktop
+audio/x-musepack=io.elementary.music.desktop
+audio/x-pn-aiff=io.elementary.music.desktop
+audio/x-pn-au=io.elementary.music.desktop
+audio/x-pn-realaudio-plugin=io.elementary.music.desktop
+audio/x-pn-realaudio=io.elementary.music.desktop
+audio/x-pn-wav=io.elementary.music.desktop
+audio/x-pn-windows-acm=io.elementary.music.desktop
+audio/x-real-audio=io.elementary.music.desktop
+audio/x-realaudio=io.elementary.music.desktop
+audio/x-sbc=io.elementary.music.desktop
+audio/x-scpls=io.elementary.music.desktop
+audio/x-speex=io.elementary.music.desktop
+audio/x-tta=io.elementary.music.desktop
+audio/x-vorbis+ogg=io.elementary.music.desktop
+audio/x-vorbis=io.elementary.music.desktop
+audio/x-wav=io.elementary.music.desktop
+audio/x-wavpack=io.elementary.music.desktop
+audio/x-xm=io.elementary.music.desktop
+image/bmp=io.elementary.photos-viewer.desktop
+image/gif=io.elementary.photos-viewer.desktop
+image/jpeg=io.elementary.photos-viewer.desktop
+image/jpg=io.elementary.photos-viewer.desktop
+image/pjpeg=io.elementary.photos-viewer.desktop
+image/png=io.elementary.photos-viewer.desktop
+image/tiff=io.elementary.photos-viewer.desktop
+image/vnd.djvu=org.gnome.Evince.desktop
+image/vnd.rn-realpix=io.elementary.videos.desktop
+image/webp=io.elementary.photos-viewer.desktop
+image/x-bmp=io.elementary.photos-viewer.desktop
+image/x-bzeps=org.gnome.Evince.desktop
+image/x-eps=org.gnome.Evince.desktop
+image/x-gzeps=org.gnome.Evince.desktop
+image/x-png=io.elementary.photos-viewer.desktop
+inode/directory=io.elementary.files.desktop
+misc/ultravox=io.elementary.videos.desktop
+multipart/x-zip=org.gnome.FileRoller.desktop
+text/calendar=io.elementary.calendar.desktop
+text/html=org.gnome.Epiphany.desktop
+text/mathml=io.elementary.code.desktop
+text/plain=io.elementary.code.desktop
+text/x-chdr=io.elementary.code.desktop
+text/x-csrc=io.elementary.code.desktop
+text/x-dtd=io.elementary.code.desktop
+text/x-java=io.elementary.code.desktop
+text/x-python=io.elementary.code.desktop
+text/x-sql=io.elementary.code.desktop
+text/xml=io.elementary.code.desktop
+video/3gpp=io.elementary.videos.desktop
+video/dv=io.elementary.videos.desktop
+video/fli=io.elementary.videos.desktop
+video/flv=io.elementary.videos.desktop
+video/mp2t=io.elementary.videos.desktop
+video/mp4=io.elementary.videos.desktop
+video/mp4v-es=io.elementary.videos.desktop
+video/mpeg=io.elementary.videos.desktop
+video/msvideo=io.elementary.videos.desktop
+video/ogg=io.elementary.videos.desktop
+video/quicktime=io.elementary.videos.desktop
+video/vivo=io.elementary.videos.desktop
+video/vnd.divx=io.elementary.videos.desktop
+video/vnd.rn-realvideo=io.elementary.videos.desktop
+video/vnd.vivo=io.elementary.videos.desktop
+video/webm=io.elementary.videos.desktop
+video/x-anim=io.elementary.videos.desktop
+video/x-avi=io.elementary.videos.desktop
+video/x-flc=io.elementary.videos.desktop
+video/x-fli=io.elementary.videos.desktop
+video/x-flic=io.elementary.videos.desktop
+video/x-flv=io.elementary.videos.desktop
+video/x-m4v=io.elementary.videos.desktop
+video/x-matroska=io.elementary.videos.desktop
+video/x-mpeg=io.elementary.videos.desktop
+video/x-ms-asf=io.elementary.videos.desktop
+video/x-ms-asx=io.elementary.videos.desktop
+video/x-ms-wm=io.elementary.videos.desktop
+video/x-ms-wmv=io.elementary.videos.desktop
+video/x-ms-wmx=io.elementary.videos.desktop
+video/x-ms-wvx=io.elementary.videos.desktop
+video/x-msvideo=io.elementary.videos.desktop
+video/x-nsv=io.elementary.videos.desktop
+video/x-ogm+ogg=io.elementary.videos.desktop
+video/x-theora+ogg=io.elementary.videos.desktop
+video/x-totem-stream=io.elementary.videos.desktop
+x-content/image-dcf=io.elementary.photos.desktop
+x-content/image-picturecd=io.elementary.photos.desktop
+x-content/video-dvd=io.elementary.videos.desktop
+x-content/video-svcd=io.elementary.videos.desktop
+x-content/video-vcd=io.elementary.videos.desktop
+x-scheme-handler/http=org.gnome.Epiphany.desktop
+x-scheme-handler/https=org.gnome.Epiphany.desktop
+x-scheme-handler/mailto=org.gnome.Evolution.desktop
+x-scheme-handler/trash=io.elementary.files.desktop
+
diff --git a/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
new file mode 100644
index 00000000000..20b1ac7d353
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/elementary-shortcut-overlay/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, libxml2
+, desktop-file-utils
+, gtk3
+, glib
+, granite
+, libgee
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-shortcut-overlay";
+ version = "1.0.1";
+
+ repoName = "shortcut-overlay";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "1ph4rx2l5fn0zh4fjfjlgbgskmzc0lvzqgcv7v4kr5m4rij1p4y4";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix
new file mode 100644
index 00000000000..8e180ca83a6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, substituteAll
+, fetchFromGitHub
+, file-roller
+, gnome-bluetooth
+}:
+
+stdenv.mkDerivation rec {
+ pname = "extra-elementary-contracts";
+ version = "2018-08-21";
+
+ 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;
+ dontConfigure = 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/nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/extra-elementary-contracts/exec-path.patch
new file mode 100644
index 00000000000..3b97e306119
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/gala/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/gala/default.nix
new file mode 100644
index 00000000000..b80e93279c8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/gala/default.nix
@@ -0,0 +1,88 @@
+{ 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
+, elementary-icon-theme
+, elementary-settings-daemon
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gala";
+ version = "unstable-2019-07-21"; # Is tracking https://github.com/elementary/gala/commits/stable/juno
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = "50694796d4c8f0ca92517d5a628b0efdf748279c";
+ sha256 = "17d0hd2145mrf8y5ws3xypdbwj72qv7hrrp6p6lm4k16xd96yznr";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ versionPolicy = "master";
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/gala/plugins-dir.patch
new file mode 100644
index 00000000000..e83308ea552
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/bc.patch
new file mode 100644
index 00000000000..264a4a5b26d
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix
new file mode 100644
index 00000000000..ae138c9215c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, substituteAll
+, meson
+, ninja
+, python3
+, pkgconfig
+, vala
+, granite
+, libgee
+, gettext
+, gtk3
+, appstream
+, gnome-menus
+, json-glib
+, plank
+, bamf
+, switchboard
+, libunity
+, libsoup
+, wingpanel
+, zeitgeist
+, bc
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-applications-menu";
+ version = "2.4.3";
+
+ repoName = "applications-menu";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "15mwfynaa57jii43x77iaz5gqjlylh5zxc70am8zgp8vhgzflvyd";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ appstream
+ gettext
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ ];
+
+ buildInputs = [
+ bamf
+ gnome-menus
+ granite
+ gtk3
+ json-glib
+ libgee
+ libsoup
+ libunity
+ plank
+ switchboard
+ wingpanel
+ zeitgeist
+ ];
+
+ mesonFlags = [
+ "--sysconfdir=${placeholder "out"}/etc"
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/lib/wingpanel";
+ PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard";
+
+ patches = [
+ (substituteAll {
+ src = ./bc.patch;
+ exec = "${bc}/bin/bc";
+ })
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix
new file mode 100644
index 00000000000..36d1cf0e77a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, vala
+, gtk3
+, granite
+, libnotify
+, wingpanel
+, libgee
+, libxml2
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-bluetooth";
+ version = "2.1.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "04ggakf7qp4q0kah5xksbwjn78wpdrp9kdgkj6ibzsb97ngn70g9";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ libnotify
+ wingpanel
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
new file mode 100644
index 00000000000..74408a4ed6d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
@@ -0,0 +1,93 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, vala
+, gtk3
+, granite
+, wingpanel
+, evolution-data-server
+, libical
+, libgee
+, libxml2
+, libsoup
+, 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 = [
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ evolution-data-server
+ granite
+ gtk3
+ libgee
+ libical
+ libsoup
+ wingpanel
+ ];
+
+ patches = [
+ # 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";
+ })
+ # See: https://github.com/elementary/wingpanel-indicator-datetime/pull/117
+ (fetchpatch {
+ url = "https://github.com/elementary/wingpanel-indicator-datetime/commit/4859e72a52d8dac5cad87b192fc912fb013b0ecd.patch";
+ sha256 = "0jfhb5sax4sivdfx7il1rc1dvhy0yfv27qhvwbdy0hza9wf8q9k0";
+ })
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/lib/wingpanel";
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ # launches elementary-calendar on selection
+ preFixup = ''
+ gappsWrapperArgs+=( --prefix PATH : "${elementary-calendar}/bin" )
+ '';
+
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix
new file mode 100644
index 00000000000..5431b982f54
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, substituteAll
+, vala
+, gtk3
+, granite
+, libxml2
+, wingpanel
+, libgee
+, xorg
+, libgnomekbd
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-keyboard";
+ version = "2.1.2";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0lrd474m6p8di73hqjilqnnl7qg72ky5narkgcvm4lk8dyi78mz0";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ 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 = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/fix-paths.patch
new file mode 100644
index 00000000000..58e6853e606
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix
new file mode 100644
index 00000000000..6ba19ebf77e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, gtk3
+, granite
+, networkmanager
+, networkmanagerapplet
+, wingpanel
+, libgee
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-network";
+ version = "2.2.2";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0fch27imk5x4nfx49cwcylkxd7m289rl9niy1vx5kjplhbhyhdq2";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ networkmanager
+ networkmanagerapplet
+ wingpanel
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix
new file mode 100644
index 00000000000..0327d5e78e2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, gtk3
+, granite
+, wingpanel
+, libgee
+, libxml2
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-nightlight";
+ version = "2.0.2";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0kw83ws91688xg96k9034dnz15szx2kva9smh1nb7xmdbpzn3qph";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ wingpanel
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix
new file mode 100644
index 00000000000..a4266a6f459
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, gtk3
+, granite
+, wingpanel
+, libgee
+, libwnck3
+, 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 = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ libwnck3
+ wingpanel
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix
new file mode 100644
index 00000000000..9f9d4703060
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, vala
+, gtk3
+, granite
+, bamf
+, libgtop
+, udev
+, wingpanel
+, libgee
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-power";
+ version = "2.1.4";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "02gp9m9zkmhcl43nz02kjkcim4zm25zab3il8dhwkihh731g1c6j";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ bamf
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ libgtop
+ udev
+ wingpanel
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix
new file mode 100644
index 00000000000..f48638ff2b1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, gtk3
+, granite
+, wingpanel
+, accountsservice
+, libgee
+, elementary-icon-theme
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-session";
+ version = "2.2.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0lqh9g6qq09m744gncspm79lbwx1vjl1d6j2szwcq9f0jdm01pm5";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ accountsservice
+ elementary-icon-theme
+ granite
+ gtk3
+ libgee
+ wingpanel
+ ];
+
+ PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix
new file mode 100644
index 00000000000..038ab75094c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, vala
+, gtk3
+, granite
+, wingpanel
+, libnotify
+, pulseaudio
+, libcanberra-gtk3
+, libgee
+, libxml2
+, wrapGAppsHook
+, elementary-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel-indicator-sound";
+ version = "2.1.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "0lgjl969c7s31nszh6d4pr1vsxfdsizplsihvd8r02mm1mlxmsda";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ 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 = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/default.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
new file mode 100644
index 00000000000..06f0fc23a39
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
@@ -0,0 +1,79 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, wrapGAppsHook
+, pkgconfig
+, meson
+, ninja
+, vala
+, gala
+, gtk3
+, libgee
+, granite
+, gettext
+, mutter
+, json-glib
+, python3
+, elementary-gtk-theme
+, elementary-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+ pname = "wingpanel";
+ version = "2.2.5";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "15pl3km8jfmlgrrb2fcabdd0rkc849arz6sc3vz6azzpln7gxbq7";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gettext
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ elementary-gtk-theme
+ elementary-icon-theme
+ 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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/indicators.patch
new file mode 100644
index 00000000000..68a5fd532a8
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix
new file mode 100644
index 00000000000..6b554d89caa
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/desktop/wingpanel/wrapper.nix
@@ -0,0 +1,30 @@
+{ 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/nixpkgs/pkgs/desktops/pantheon/granite/default.nix b/nixpkgs/pkgs/desktops/pantheon/granite/default.nix
new file mode 100644
index 00000000000..521d22d2335
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/granite/default.nix
@@ -0,0 +1,79 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, python3
+, meson
+, ninja
+, vala
+, pkgconfig
+, libgee
+, pantheon
+, gtk3
+, glib
+, gettext
+, hicolor-icon-theme
+, gobject-introspection
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "granite";
+ version = "5.2.3";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "10ddq1s2w4jvpzq813cylmqhh8pggzaz890fy3kzg07275i98gah";
+ };
+
+ patches = [
+ # Resolve the circular dependency between granite and the datetime wingpanel indicator
+ # See: https://github.com/elementary/granite/pull/242
+ (fetchpatch {
+ url = "https://src.fedoraproject.org/rpms/granite/raw/0550b44ed6400c9b1ff7e70871913747df2ff323/f/00-datetime-clock-format-gsettings.patch";
+ sha256 = "0i9yvdmn77x5fjdwd1raw6ym8js8yxa7w6ydc7syx7hcyls00dmq";
+ })
+ ];
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ gettext
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ gtk3
+ hicolor-icon-theme
+ libgee
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ meta = with stdenv.lib; {
+ description = "An extension to GTK used by elementary OS";
+ longDescription = ''
+ Granite is a companion library for GTK and GLib. Among other things, it provides complex widgets and convenience functions
+ designed for use in apps built for elementary OS.
+ '';
+ homepage = https://github.com/elementary/granite;
+ license = licenses.lgpl3Plus;
+ platforms = platforms.linux;
+ maintainers = pantheon.maintainers;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/pantheon/services/cerbere/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/cerbere/default.nix
new file mode 100644
index 00000000000..a8eaf766664
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/cerbere/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, glib
+, libgee
+, vala
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "cerbere";
+ version = "2.5.0";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "12y6gg4vyc1rhdm2c7pr7bgmdrah7ddphyh25fgh3way8l9gh7vw";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ 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/nixpkgs/pkgs/desktops/pantheon/services/contractor/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/contractor/default.nix
new file mode 100644
index 00000000000..b10e97f77d7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/contractor/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, python3
+, ninja
+, pkgconfig
+, vala
+, glib
+, libgee
+, dbus
+, glib-networking
+, wrapGAppsHook
+}:
+
+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
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ glib-networking
+ libgee
+ ];
+
+ PKG_CONFIG_DBUS_1_SESSION_BUS_SERVICES_DIR = "${placeholder "out"}/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/nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix
new file mode 100644
index 00000000000..6305c872b2f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, python3
+, ninja
+, vala
+, desktop-file-utils
+, gtk3
+, granite
+, libgee
+, gcr
+, webkitgtk
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-capnet-assist";
+ version = "2.2.3";
+
+ repoName = "capnet-assist";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "15cnwimkmmsb4rwvgm8bizcsn1krsj6k3qc88izn79is75y6wwji";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch b/nixpkgs/pkgs/desktops/pantheon/services/elementary-capnet-assist/remove-capnet-test.patch
new file mode 100644
index 00000000000..a59c74f22b3
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix
new file mode 100644
index 00000000000..fb9d28eaf6b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/elementary-dpms-helper/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, meson
+, ninja
+, desktop-file-utils
+, glib
+, coreutils
+, elementary-settings-daemon
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-dpms-helper";
+ version = "1.0";
+
+ repoName = "dpms-helper";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = repoName;
+ rev = version;
+ sha256 = "0svfp0qyb6nx4mjl3jx4aqmb4x24m25jpi75mdis3yfr3c1xz9nh";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ inherit repoName;
+ attrPath = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
new file mode 100644
index 00000000000..67a67dd4b3d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
@@ -0,0 +1,171 @@
+{ accountsservice
+, alsaLib
+, colord
+, docbook_xsl
+, fetchgit
+, fetchurl
+, geoclue2
+, geocode-glib
+, gettext
+, glib
+, gnome3
+, gsettings-desktop-schemas
+, gtk3
+, lcms2
+, libcanberra-gtk3
+, libgnomekbd
+, libgudev
+, libgweather
+, libnotify
+, libpulseaudio
+, libwacom
+, libxml2
+, libxslt
+, meson
+, mousetweaks
+, networkmanager
+, ninja
+, nss
+, pantheon
+, perl
+, pkgconfig
+, polkit
+, python3
+, stdenv
+, substituteAll
+, systemd
+, tzdata
+, upower
+, libXtst
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "elementary-settings-daemon";
+ version = "3.30.2";
+
+ repoName = "gnome-settings-daemon";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${repoName}/${stdenv.lib.versions.majorMinor version}/${repoName}-${version}.tar.xz";
+ sha256 = "0c663csa3gnsr6wm0xfll6aani45snkdj7zjwjfzcwfh8w4a3z12";
+ };
+
+ # Source for ubuntu's patchset
+ src2 = fetchgit {
+ url = "https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/${repoName}";
+ 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 mousetweaks;
+ })
+ ./global-backlight-helper.patch
+ "${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
+ # TODO: shouldn't be neeed for the 5.1 greeter (awaiting release)
+ rm $out/etc/xdg/autostart/org.gnome.SettingsDaemon.ScreensaverProxy-pantheon.desktop
+
+ # So the polkit policy can reference /run/current-system/sw/bin/elementary-settings-daemon/gsd-backlight-helper
+ mkdir -p $out/bin/elementary-settings-daemon
+ ln -s $out/libexec/gsd-backlight-helper $out/bin/elementary-settings-daemon/gsd-backlight-helper
+ '';
+
+ nativeBuildInputs = [
+ docbook_xsl
+ gettext
+ libxml2
+ libxslt
+ meson
+ ninja
+ perl
+ pkgconfig
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ accountsservice
+ alsaLib
+ colord
+ geoclue2
+ geocode-glib
+ glib
+ gnome3.gnome-desktop
+ gsettings-desktop-schemas
+ gtk3
+ lcms2
+ libXtst
+ libcanberra-gtk3
+ libgnomekbd # for org.gnome.libgnomekbd.keyboard schema
+ libgudev
+ libgweather
+ libnotify
+ libpulseaudio
+ libwacom
+ networkmanager
+ nss
+ polkit
+ systemd
+ upower
+ ];
+
+ mesonFlags = [
+ "-Dudev_dir=${placeholder "out"}/lib/udev"
+ ];
+
+ NIX_CFLAGS_COMPILE = [
+ # Default for release buildtype but passed manually because
+ # we're using plain
+ "-DG_DISABLE_CAST_CHECKS"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = repoName;
+ attrPath = "pantheon.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ license = licenses.gpl2Plus;
+ maintainers = pantheon.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch b/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch
new file mode 100644
index 00000000000..272656fae78
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/fix-paths.patch
@@ -0,0 +1,26 @@
+--- 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;
+--- a/plugins/mouse/gsd-mouse-manager.c
++++ b/plugins/mouse/gsd-mouse-manager.c
+@@ -118,7 +118,7 @@ set_mousetweaks_daemon (GsdMouseManager *manager,
+ gboolean run_daemon = dwell_click_enabled || secondary_click_enabled;
+
+ if (run_daemon || manager->priv->mousetweaks_daemon_running)
+- comm = g_strdup_printf ("mousetweaks %s",
++ comm = g_strdup_printf ("@mousetweaks@/bin/mousetweaks %s",
+ run_daemon ? "" : "-s");
+ else
+ return;
diff --git a/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/global-backlight-helper.patch b/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/global-backlight-helper.patch
new file mode 100644
index 00000000000..c073b23e6b9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/elementary-settings-daemon/global-backlight-helper.patch
@@ -0,0 +1,26 @@
+diff --git a/plugins/power/gpm-common.c b/plugins/power/gpm-common.c
+index e83f1549..15890053 100644
+--- a/plugins/power/gpm-common.c
++++ b/plugins/power/gpm-common.c
+@@ -452,7 +452,7 @@ run_backlight_helper (enum BacklightHelperCommand command,
+ gchar *argv[5] = { 0 };
+
+ argv[0] = "pkexec";
+- argv[1] = LIBEXECDIR "/gsd-backlight-helper";
++ argv[1] = "/run/current-system/sw/bin/elementary-settings-daemon/gsd-backlight-helper";
+ argv[2] = helper_args[command];
+ argv[3] = value;
+
+diff --git a/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in b/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in
+index f16300f8..f19bba3e 100644
+--- a/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in
++++ b/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in
+@@ -25,7 +25,7 @@
+ <allow_inactive>no</allow_inactive>
+ <allow_active>yes</allow_active>
+ </defaults>
+- <annotate key="org.freedesktop.policykit.exec.path">@libexecdir@/gsd-backlight-helper</annotate>
++ <annotate key="org.freedesktop.policykit.exec.path">/run/current-system/sw/bin/elementary-settings-daemon/gsd-backlight-helper</annotate>
+ </action>
+
+ </policyconfig>
diff --git a/nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
new file mode 100644
index 00000000000..8afbbbeed82
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-geoclue2/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, glib
+, gtk3
+, libgee
+, desktop-file-utils
+, geoclue2
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "pantheon-agent-geoclue2";
+ version = "1.0.2";
+
+ src = fetchFromGitHub {
+ owner = "elementary";
+ repo = pname;
+ rev = version;
+ sha256 = "1hjnbbzsch09090b200b3i85x8fv95agfqd6nrlc9za3jqjhm2xs";
+ };
+
+ passthru = {
+ updateScript = pantheon.updateScript {
+ repoName = pname;
+ };
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ 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/nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix b/nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
new file mode 100644
index 00000000000..53a65ddb947
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/services/pantheon-agent-polkit/default.nix
@@ -0,0 +1,52 @@
+{ stdenv
+, fetchFromGitHub
+, pantheon
+, pkgconfig
+, meson
+, ninja
+, vala
+, gtk3
+, libgee
+, polkit
+, 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 = [
+ 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/nixpkgs/pkgs/desktops/pantheon/update.nix b/nixpkgs/pkgs/desktops/pantheon/update.nix
new file mode 100644
index 00000000000..3bc432c5d32
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/pantheon/update.nix
@@ -0,0 +1,36 @@
+{ 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
+ '';
+
+ throwFlag = throw "${versionPolicy} is not a valid versionPolicy - Options are either 'release' or 'master' (defaults to release).";
+
+ versionFlag = { release = "-r"; master = "-m"; }.${versionPolicy} or throwFlag;
+
+in [ updateScript versionFlag repoName attrPath ]
diff --git a/nixpkgs/pkgs/desktops/pantheon/update.sh b/nixpkgs/pkgs/desktops/pantheon/update.sh
new file mode 100755
index 00000000000..9bbbe260034
--- /dev/null
+++ b/nixpkgs/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/nixpkgs/pkgs/desktops/plasma-5/bluedevil.nix b/nixpkgs/pkgs/desktops/plasma-5/bluedevil.nix
new file mode 100644
index 00000000000..b5ff3f5dd05
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/bluedevil.nix
@@ -0,0 +1,14 @@
+{
+ mkDerivation, extra-cmake-modules, shared-mime-info,
+ bluez-qt, kcoreaddons, kdbusaddons, kded, ki18n, kiconthemes, kio,
+ knotifications, kwidgetsaddons, kwindowsystem, plasma-framework, qtdeclarative
+}:
+
+mkDerivation {
+ name = "bluedevil";
+ nativeBuildInputs = [ extra-cmake-modules shared-mime-info ];
+ buildInputs = [
+ bluez-qt ki18n kio kwindowsystem plasma-framework qtdeclarative kcoreaddons
+ kdbusaddons kded kiconthemes knotifications kwidgetsaddons
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/breeze-grub.nix b/nixpkgs/pkgs/desktops/plasma-5/breeze-grub.nix
new file mode 100644
index 00000000000..eed396b5437
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/breeze-grub.nix
@@ -0,0 +1,15 @@
+{
+ mkDerivation
+}:
+
+mkDerivation {
+ name = "breeze-grub";
+ installPhase = ''
+ runHook preInstall
+
+ mkdir -p "$out/grub/themes"
+ mv breeze "$out/grub/themes"
+
+ runHook postInstall
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/breeze-gtk.nix b/nixpkgs/pkgs/desktops/plasma-5/breeze-gtk.nix
new file mode 100644
index 00000000000..1be3fe1c309
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/breeze-gtk.nix
@@ -0,0 +1,14 @@
+{ mkDerivation, lib, extra-cmake-modules, gtk2, qtbase, sassc, python3, breeze-qt5 }:
+
+let inherit (lib) getLib; in
+
+mkDerivation {
+ name = "breeze-gtk";
+ nativeBuildInputs = [ extra-cmake-modules sassc python3 python3.pkgs.pycairo breeze-qt5 ];
+ buildInputs = [ qtbase ];
+ postPatch = ''
+ sed -i cmake/FindGTKEngine.cmake \
+ -e "s|\''${KDE_INSTALL_FULL_LIBDIR}|${getLib gtk2}/lib|"
+ '';
+ cmakeFlags = [ "-DWITH_GTK3_VERSION=3.22" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/default.nix b/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/default.nix
new file mode 100644
index 00000000000..48b038325fe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/default.nix
@@ -0,0 +1,44 @@
+{
+ mkDerivation,
+ lib,
+ copyPathsToStore,
+ extra-cmake-modules,
+ plymouth,
+ nixos-icons,
+ imagemagick,
+ netpbm,
+ perl,
+ # these will typically need to be set via an override
+ # in a NixOS context
+ nixosBranding ? false,
+ nixosName ? "NixOS",
+ nixosVersion ? "",
+ topColor ? "black",
+ bottomColor ? "black"
+}:
+
+let
+ logoName = "nixos";
+in
+mkDerivation {
+ name = "breeze-plymouth";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [ plymouth ] ++ lib.optionals nixosBranding [ imagemagick netpbm perl ];
+ patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+ cmakeFlags = lib.optionals nixosBranding [
+ "-DDISTRO_NAME=${nixosName}"
+ "-DDISTRO_VERSION=${nixosVersion}"
+ "-DDISTRO_LOGO=${logoName}"
+ "-DBACKGROUND_TOP_COLOR=${topColor}"
+ "-DBACKGROUND_BOTTOM_COLOR=${bottomColor}"
+ ];
+ postPatch = ''
+ substituteInPlace cmake/FindPlymouth.cmake --subst-var out
+ '' + lib.optionalString nixosBranding ''
+ cp ${nixos-icons}/share/icons/hicolor/128x128/apps/nix-snowflake.png breeze/images/${logoName}.logo.png
+
+ # conversion for 16bit taken from the breeze-plymouth readme
+ convert ${nixos-icons}/share/icons/hicolor/128x128/apps/nix-snowflake.png -alpha Background -background "#000000" -fill "#000000" -flatten tmp.png
+ pngtopnm tmp.png | pnmquant 16 | pnmtopng > breeze/images/16bit/${logoName}.logo.png
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/install-paths.patch b/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/install-paths.patch
new file mode 100644
index 00000000000..5d5856d122d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/install-paths.patch
@@ -0,0 +1,19 @@
+Index: breeze-plymouth-5.7.3/cmake/FindPlymouth.cmake
+===================================================================
+--- breeze-plymouth-5.7.3.orig/cmake/FindPlymouth.cmake
++++ breeze-plymouth-5.7.3/cmake/FindPlymouth.cmake
+@@ -24,12 +24,8 @@
+ include(FindPkgConfig)
+
+ pkg_check_modules(Plymouth ply-boot-client ply-splash-core)
+-exec_program(${PKG_CONFIG_EXECUTABLE}
+- ARGS ply-splash-core --variable=pluginsdir
+- OUTPUT_VARIABLE Plymouth_PLUGINSDIR)
+-exec_program(${PKG_CONFIG_EXECUTABLE}
+- ARGS ply-splash-core --variable=themesdir
+- OUTPUT_VARIABLE Plymouth_THEMESDIR)
++set(Plymouth_PLUGINSDIR "@out@/lib/plymouth")
++set(Plymouth_THEMESDIR "@out@/share/plymouth/themes")
+
+ find_package_handle_standard_args(Plymouth
+ FOUND_VAR
diff --git a/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/series b/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/series
new file mode 100644
index 00000000000..8920e7ca518
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/breeze-plymouth/series
@@ -0,0 +1 @@
+install-paths.patch
diff --git a/nixpkgs/pkgs/desktops/plasma-5/breeze-qt5.nix b/nixpkgs/pkgs/desktops/plasma-5/breeze-qt5.nix
new file mode 100644
index 00000000000..3f3222e05cd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/breeze-qt5.nix
@@ -0,0 +1,20 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ frameworkintegration, kcmutils, kconfigwidgets, kcoreaddons, kdecoration,
+ kguiaddons, ki18n, kwayland, kwindowsystem, plasma-framework, qtdeclarative,
+ qtx11extras, fftw
+}:
+
+mkDerivation {
+ name = "breeze-qt5";
+ sname = "breeze";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ propagatedBuildInputs = [
+ frameworkintegration kcmutils kconfigwidgets kcoreaddons kdecoration
+ kguiaddons ki18n kwayland kwindowsystem plasma-framework qtdeclarative
+ qtx11extras fftw
+ ];
+ outputs = [ "bin" "dev" "out" ];
+ cmakeFlags = [ "-DUSE_Qt4=OFF" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/default.nix b/nixpkgs/pkgs/desktops/plasma-5/default.nix
new file mode 100644
index 00000000000..e188e4e3fcd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/default.nix
@@ -0,0 +1,143 @@
+/*
+
+# New packages
+
+READ THIS FIRST
+
+This module is for official packages in KDE Plasma 5. All available packages are
+listed in `./srcs.nix`, although a few are not yet packaged in Nixpkgs (see
+below).
+
+IF YOUR PACKAGE IS NOT LISTED IN `./srcs.nix`, IT DOES NOT GO HERE.
+
+Many of the packages released upstream are not yet built in Nixpkgs due to lack
+of demand. To add a Nixpkgs build for an upstream package, copy one of the
+existing packages here and modify it as necessary.
+
+# Updates
+
+1. Update the URL in `./fetch.sh`.
+2. Run `./maintainers/scripts/fetch-kde-qt.sh pkgs/desktops/plasma-5`
+ from the top of the Nixpkgs tree.
+3. Use `nox-review wip` to check that everything builds.
+4. Commit the changes and open a pull request.
+
+*/
+
+{
+ libsForQt5, lib, fetchurl,
+ gconf, gsettings-desktop-schemas
+}:
+
+let
+ srcs = import ./srcs.nix {
+ inherit fetchurl;
+ mirror = "mirror://kde";
+ };
+
+ mkDerivation = libsForQt5.callPackage ({ mkDerivation }: mkDerivation) {};
+
+ packages = self: with self;
+ let
+
+ propagate = out:
+ let setupHook = { writeScript }:
+ writeScript "setup-hook" ''
+ if [ "$hookName" != postHook ]; then
+ postHooks+=("source @dev@/nix-support/setup-hook")
+ else
+ # Propagate $${out} output
+ propagatedUserEnvPkgs="$propagatedUserEnvPkgs @${out}@"
+
+ if [ -z "$outputDev" ]; then
+ echo "error: \$outputDev is unset!" >&2
+ exit 1
+ fi
+
+ # Propagate $dev so that this setup hook is propagated
+ # But only if there is a separate $dev output
+ if [ "$outputDev" != out ]; then
+ propagatedBuildInputs="$propagatedBuildInputs @dev@"
+ fi
+ fi
+ '';
+ in callPackage setupHook {};
+
+ propagateBin = propagate "bin";
+
+ callPackage = self.newScope {
+ inherit propagate propagateBin;
+
+ mkDerivation = args:
+ let
+ inherit (args) name;
+ sname = args.sname or name;
+ inherit (srcs.${sname}) src version;
+
+ outputs = args.outputs or [ "out" ];
+ hasBin = lib.elem "bin" outputs;
+ hasDev = lib.elem "dev" outputs;
+
+ defaultSetupHook = if hasBin && hasDev then propagateBin else null;
+ setupHook = args.setupHook or defaultSetupHook;
+
+ meta = {
+ license = with lib.licenses; [
+ lgpl21Plus lgpl3Plus bsd2 mit gpl2Plus gpl3Plus fdl12
+ ];
+ platforms = lib.platforms.linux;
+ maintainers = with lib.maintainers; [ ttuegel nyanloutre ];
+ homepage = http://www.kde.org;
+ } // (args.meta or {});
+ in
+ mkDerivation (args // {
+ name = "${name}-${version}";
+ inherit meta outputs setupHook src;
+ });
+ };
+
+ in {
+ bluedevil = callPackage ./bluedevil.nix {};
+ breeze-gtk = callPackage ./breeze-gtk.nix {};
+ breeze-qt5 = callPackage ./breeze-qt5.nix {};
+ breeze-grub = callPackage ./breeze-grub.nix {};
+ breeze-plymouth = callPackage ./breeze-plymouth {};
+ discover = callPackage ./discover.nix {};
+ kactivitymanagerd = callPackage ./kactivitymanagerd.nix {};
+ kde-cli-tools = callPackage ./kde-cli-tools.nix {};
+ kde-gtk-config = callPackage ./kde-gtk-config { inherit gsettings-desktop-schemas; };
+ kdecoration = callPackage ./kdecoration.nix {};
+ kdeplasma-addons = callPackage ./kdeplasma-addons.nix {};
+ kgamma5 = callPackage ./kgamma5.nix {};
+ khotkeys = callPackage ./khotkeys.nix {};
+ kinfocenter = callPackage ./kinfocenter.nix {};
+ kmenuedit = callPackage ./kmenuedit.nix {};
+ kscreen = callPackage ./kscreen.nix {};
+ kscreenlocker = callPackage ./kscreenlocker.nix {};
+ ksshaskpass = callPackage ./ksshaskpass.nix {};
+ ksysguard = callPackage ./ksysguard.nix {};
+ kwallet-pam = callPackage ./kwallet-pam.nix {};
+ kwayland-integration = callPackage ./kwayland-integration.nix {};
+ kwin = callPackage ./kwin {};
+ kwrited = callPackage ./kwrited.nix {};
+ libkscreen = callPackage ./libkscreen {};
+ libksysguard = callPackage ./libksysguard {};
+ milou = callPackage ./milou.nix {};
+ oxygen = callPackage ./oxygen.nix {};
+ plasma-browser-integration = callPackage ./plasma-browser-integration.nix {};
+ plasma-desktop = callPackage ./plasma-desktop {};
+ plasma-integration = callPackage ./plasma-integration {};
+ plasma-nm = callPackage ./plasma-nm {};
+ plasma-pa = callPackage ./plasma-pa.nix { inherit gconf; };
+ plasma-vault = callPackage ./plasma-vault {};
+ plasma-workspace = callPackage ./plasma-workspace {};
+ plasma-workspace-wallpapers = callPackage ./plasma-workspace-wallpapers.nix {};
+ polkit-kde-agent = callPackage ./polkit-kde-agent.nix {};
+ powerdevil = callPackage ./powerdevil.nix {};
+ sddm-kcm = callPackage ./sddm-kcm.nix {};
+ systemsettings = callPackage ./systemsettings.nix {};
+ user-manager = callPackage ./user-manager.nix {};
+ xdg-desktop-portal-kde = callPackage ./xdg-desktop-portal-kde.nix {};
+ };
+in
+lib.makeScope libsForQt5.newScope packages
diff --git a/nixpkgs/pkgs/desktops/plasma-5/discover.nix b/nixpkgs/pkgs/desktops/plasma-5/discover.nix
new file mode 100644
index 00000000000..a859285e078
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/discover.nix
@@ -0,0 +1,20 @@
+{
+ mkDerivation,
+ extra-cmake-modules, gettext, kdoctools, python,
+ appstream-qt, discount, flatpak, fwupd, ostree, packagekit-qt, pcre, utillinux,
+ qtquickcontrols2,
+ karchive, kconfig, kcrash, kdbusaddons, kdeclarative, kio, kirigami2, kitemmodels,
+ knewstuff, kwindowsystem, kxmlgui, plasma-framework
+}:
+
+mkDerivation {
+ name = "discover";
+ nativeBuildInputs = [ extra-cmake-modules gettext kdoctools python ];
+ buildInputs = [
+ # discount is needed for libmarkdown
+ appstream-qt discount flatpak fwupd ostree packagekit-qt pcre utillinux
+ qtquickcontrols2
+ karchive kconfig kcrash kdbusaddons kdeclarative kio kirigami2 kitemmodels knewstuff kwindowsystem kxmlgui
+ plasma-framework
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/fetch.sh b/nixpkgs/pkgs/desktops/plasma-5/fetch.sh
new file mode 100644
index 00000000000..e2e6da6f07c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/fetch.sh
@@ -0,0 +1 @@
+WGET_ARGS=( https://download.kde.org/stable/plasma/5.16.5/ )
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kactivitymanagerd.nix b/nixpkgs/pkgs/desktops/plasma-5/kactivitymanagerd.nix
new file mode 100644
index 00000000000..d2870c27e65
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kactivitymanagerd.nix
@@ -0,0 +1,15 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ boost, kconfig, kcoreaddons, kdbusaddons, ki18n, kio, kglobalaccel,
+ kwindowsystem, kxmlgui, kcrash
+}:
+
+mkDerivation {
+ name = "kactivitymanagerd";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [
+ boost kconfig kcoreaddons kdbusaddons kglobalaccel ki18n kio kwindowsystem
+ kxmlgui kcrash
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kde-cli-tools.nix b/nixpkgs/pkgs/desktops/plasma-5/kde-cli-tools.nix
new file mode 100644
index 00000000000..3364ee2c063
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kde-cli-tools.nix
@@ -0,0 +1,14 @@
+{
+ mkDerivation, extra-cmake-modules, kdoctools,
+ kcmutils, kconfig, kdesu, ki18n, kiconthemes, kinit, kio, kwindowsystem,
+ qtsvg, qtx11extras, kactivities, plasma-workspace
+}:
+
+mkDerivation {
+ name = "kde-cli-tools";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kcmutils kconfig kdesu ki18n kiconthemes kinit kio kwindowsystem qtsvg
+ qtx11extras kactivities plasma-workspace
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/default.nix b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/default.nix
new file mode 100644
index 00000000000..8cfc947d30b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/default.nix
@@ -0,0 +1,25 @@
+{
+ mkDerivation,
+ extra-cmake-modules, wrapGAppsHook,
+ glib, gtk2, gtk3, karchive, kcmutils, kconfigwidgets, ki18n, kiconthemes, kio,
+ knewstuff, gsettings-desktop-schemas
+}:
+
+mkDerivation {
+ name = "kde-gtk-config";
+ nativeBuildInputs = [ extra-cmake-modules wrapGAppsHook ];
+ dontWrapGApps = true; # There is nothing to wrap
+ buildInputs = [
+ ki18n kio glib gtk2 gtk3 karchive kcmutils kconfigwidgets kiconthemes
+ knewstuff gsettings-desktop-schemas
+ ];
+ patches = [ ./patches/follow-symlinks.patch ./patches/gsettings.patch ];
+ cmakeFlags = [
+ "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib.out}/lib/glib-2.0/include"
+ "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/lib/gtk-2.0/include"
+ "-DGLIB_SCHEMAS_DIR=${gsettings-desktop-schemas.out}/"
+ ];
+ preConfigure = ''
+ NIX_CFLAGS_COMPILE+=" -DGSETTINGS_SCHEMAS_PATH=\"$GSETTINGS_SCHEMAS_PATH\""
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/follow-symlinks.patch b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/follow-symlinks.patch
new file mode 100644
index 00000000000..f30a0a4588f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/follow-symlinks.patch
@@ -0,0 +1,49 @@
+From 33b25c2e3c7a002c7f726cd79fc4bab22b1299be Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Tue, 27 Oct 2015 18:07:54 -0500
+Subject: [PATCH] follow symlinks
+
+---
+ src/appearancegtk2.cpp | 2 +-
+ src/iconthemesmodel.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+Index: kde-gtk-config-5.12.4/src/appearancegtk2.cpp
+===================================================================
+--- kde-gtk-config-5.12.4.orig/src/appearancegtk2.cpp
++++ kde-gtk-config-5.12.4/src/appearancegtk2.cpp
+@@ -69,7 +69,7 @@ QString AppearanceGTK2::themesGtkrcFile(
+ QStringList themes=installedThemes();
+ themes=themes.filter(QRegExp("/"+themeName+"/?$"));
+ if(themes.size()==1) {
+- QDirIterator it(themes.first(), QDirIterator::Subdirectories);
++ QDirIterator it(themes.first(), QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+ while(it.hasNext()) {
+ it.next();
+ if(it.fileName()=="gtkrc") {
+Index: kde-gtk-config-5.12.4/src/iconthemesmodel.cpp
+===================================================================
+--- kde-gtk-config-5.12.4.orig/src/iconthemesmodel.cpp
++++ kde-gtk-config-5.12.4/src/iconthemesmodel.cpp
+@@ -47,7 +47,7 @@ QList<QDir> IconThemesModel::installedTh
+
+ foreach(const QString& dir, dirs) {
+ QDir userIconsDir(dir);
+- QDirIterator it(userIconsDir.path(), QDir::NoDotAndDotDot|QDir::AllDirs|QDir::NoSymLinks);
++ QDirIterator it(userIconsDir.path(), QDir::NoDotAndDotDot|QDir::AllDirs);
+ while(it.hasNext()) {
+ QString currentPath = it.next();
+ QDir dir(currentPath);
+Index: kde-gtk-config-5.12.4/src/cursorthemesmodel.cpp
+===================================================================
+--- kde-gtk-config-5.12.4.orig/src/cursorthemesmodel.cpp
++++ kde-gtk-config-5.12.4/src/cursorthemesmodel.cpp
+@@ -47,7 +47,7 @@ QList<QDir> CursorThemesModel::installed
+
+ foreach(const QString& dir, dirs) {
+ QDir userIconsDir(dir);
+- QDirIterator it(userIconsDir.path(), QDir::NoDotAndDotDot|QDir::AllDirs|QDir::NoSymLinks);
++ QDirIterator it(userIconsDir.path(), QDir::NoDotAndDotDot|QDir::AllDirs);
+ while(it.hasNext()) {
+ QString currentPath = it.next();
+ QDir dir(currentPath);
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/gsettings.patch b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/gsettings.patch
new file mode 100644
index 00000000000..69f7bc4e56a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/gsettings.patch
@@ -0,0 +1,21 @@
+diff --git a/src/gtkconfigkcmodule.cpp b/src/gtkconfigkcmodule.cpp
+index 7b82d50..96831d8 100644
+--- a/src/gtkconfigkcmodule.cpp
++++ b/src/gtkconfigkcmodule.cpp
+@@ -91,6 +91,16 @@ GTKConfigKCModule::GTKConfigKCModule(QWidget* parent, const QVariantList& args )
+ iconsProxyModel->sort(0);
+ ui->cb_icon->setModel(iconsProxyModel);
+ ui->cb_icon_fallback->setModel(iconsProxyModel);
++
++ // Add GSETTINGS_SCHEMAS_PATH to the front of XDG_DATA_DIRS.
++ // Normally this would be done by wrapGAppsHook, but this plugin
++ // (shared object) cannot be wrapped.
++ QByteArray xdgdata = qgetenv("XDG_DATA_DIRS");
++ if (!xdgdata.isEmpty()) {
++ xdgdata.push_front(":");
++ }
++ xdgdata.push_front(QByteArray(GSETTINGS_SCHEMAS_PATH));
++ qputenv("XDG_DATA_DIRS", xdgdata);
+
+ m_tempGtk2Preview = QStandardPaths::writableLocation(QStandardPaths::TempLocation)+ "/gtkrc-2.0";
+ m_tempGtk3Preview = QStandardPaths::writableLocation(QStandardPaths::TempLocation)+ "/.config/gtk-3.0/settings.ini";
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/series b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/series
new file mode 100644
index 00000000000..7aad1acf6ac
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kde-gtk-config/patches/series
@@ -0,0 +1,2 @@
+follow-symlinks.patch
+gsettings.patch
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kdecoration.nix b/nixpkgs/pkgs/desktops/plasma-5/kdecoration.nix
new file mode 100644
index 00000000000..569da3c7034
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kdecoration.nix
@@ -0,0 +1,8 @@
+{ mkDerivation, extra-cmake-modules, qtbase, ki18n }:
+
+mkDerivation {
+ name = "kdecoration";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [ qtbase ki18n ];
+ outputs = [ "out" "dev" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kdeplasma-addons.nix b/nixpkgs/pkgs/desktops/plasma-5/kdeplasma-addons.nix
new file mode 100644
index 00000000000..398fc356fc9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kdeplasma-addons.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kconfig, kconfigwidgets, kcoreaddons, kcmutils, kdelibs4support, kio,
+ knewstuff, kross, krunner, kservice, ksysguard, kunitconversion, ibus,
+ plasma-framework, plasma-workspace, qtdeclarative, qtx11extras, kholidays
+}:
+
+mkDerivation {
+ name = "kdeplasma-addons";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kconfig kconfigwidgets kcoreaddons kcmutils kdelibs4support kio knewstuff
+ kross krunner kservice ksysguard kunitconversion ibus plasma-framework
+ plasma-workspace qtdeclarative qtx11extras kholidays
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kgamma5.nix b/nixpkgs/pkgs/desktops/plasma-5/kgamma5.nix
new file mode 100644
index 00000000000..ccbf3820b90
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kgamma5.nix
@@ -0,0 +1,11 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kconfig, kconfigwidgets, ki18n, qtx11extras, libXxf86vm
+}:
+
+mkDerivation {
+ name = "kgamma5";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [ kconfig kconfigwidgets ki18n qtx11extras libXxf86vm ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/khotkeys.nix b/nixpkgs/pkgs/desktops/plasma-5/khotkeys.nix
new file mode 100644
index 00000000000..77763c5e203
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/khotkeys.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kcmutils, kdbusaddons, kdelibs4support, kglobalaccel, ki18n, kio, kxmlgui,
+ plasma-framework, plasma-workspace, qtx11extras
+}:
+
+mkDerivation {
+ name = "khotkeys";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kcmutils kdbusaddons kdelibs4support kglobalaccel ki18n kio kxmlgui
+ plasma-framework plasma-workspace qtx11extras
+ ];
+ outputs = [ "bin" "dev" "out" ];
+ enableParallelBuilding = false;
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kinfocenter.nix b/nixpkgs/pkgs/desktops/plasma-5/kinfocenter.nix
new file mode 100644
index 00000000000..b35493929ff
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kinfocenter.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kcmutils, kcompletion, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons,
+ kdeclarative, kdelibs4support, ki18n, kiconthemes, kio, kpackage, kservice,
+ kwayland, kwidgetsaddons, kxmlgui, libraw1394, libGLU, pciutils, solid
+}:
+
+mkDerivation {
+ name = "kinfocenter";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kcmutils kcompletion kconfig kconfigwidgets kcoreaddons kdbusaddons
+ kdeclarative kdelibs4support ki18n kiconthemes kio kpackage kservice
+ kwayland kwidgetsaddons kxmlgui libraw1394 libGLU pciutils solid
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kmenuedit.nix b/nixpkgs/pkgs/desktops/plasma-5/kmenuedit.nix
new file mode 100644
index 00000000000..016ea940d99
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kmenuedit.nix
@@ -0,0 +1,14 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kdbusaddons, kdelibs4support, khotkeys, ki18n, kiconthemes, kio, kxmlgui,
+ sonnet
+}:
+
+mkDerivation {
+ name = "kmenuedit";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kdbusaddons kdelibs4support khotkeys ki18n kiconthemes kio kxmlgui sonnet
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kscreen.nix b/nixpkgs/pkgs/desktops/plasma-5/kscreen.nix
new file mode 100644
index 00000000000..422bb95c605
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kscreen.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ kconfig, kconfigwidgets, kdbusaddons, kglobalaccel, ki18n, kwidgetsaddons,
+ kxmlgui, libkscreen, qtdeclarative, qtgraphicaleffects, kwindowsystem,
+ kdeclarative, plasma-framework
+}:
+
+mkDerivation {
+ name = "kscreen";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [
+ kconfig kconfigwidgets kdbusaddons kglobalaccel ki18n kwidgetsaddons kxmlgui
+ libkscreen qtdeclarative qtgraphicaleffects kwindowsystem kdeclarative
+ plasma-framework
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kscreenlocker.nix b/nixpkgs/pkgs/desktops/plasma-5/kscreenlocker.nix
new file mode 100644
index 00000000000..e748121132c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kscreenlocker.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kcmutils, kcrash, kdeclarative, kdelibs4support, kglobalaccel, kidletime,
+ kwayland, libXcursor, pam, plasma-framework, qtdeclarative, qtx11extras,
+ wayland,
+}:
+
+mkDerivation {
+ name = "kscreenlocker";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kcmutils kcrash kdeclarative kdelibs4support kglobalaccel kidletime kwayland
+ libXcursor pam plasma-framework qtdeclarative qtx11extras wayland
+ ];
+ outputs = [ "out" "dev" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/ksshaskpass.nix b/nixpkgs/pkgs/desktops/plasma-5/ksshaskpass.nix
new file mode 100644
index 00000000000..39e260f6c70
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/ksshaskpass.nix
@@ -0,0 +1,11 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ kcoreaddons, ki18n, kwallet, kwidgetsaddons, qtbase,
+}:
+
+mkDerivation {
+ name = "ksshaskpass";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [ kcoreaddons ki18n kwallet kwidgetsaddons qtbase ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/ksysguard.nix b/nixpkgs/pkgs/desktops/plasma-5/ksysguard.nix
new file mode 100644
index 00000000000..01e740f74c4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/ksysguard.nix
@@ -0,0 +1,16 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ lm_sensors,
+ kconfig, kcoreaddons, kdelibs4support, ki18n, kiconthemes, kitemviews,
+ knewstuff, libksysguard
+}:
+
+mkDerivation {
+ name = "ksysguard";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kconfig kcoreaddons kitemviews knewstuff kiconthemes libksysguard
+ kdelibs4support ki18n lm_sensors
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwallet-pam.nix b/nixpkgs/pkgs/desktops/plasma-5/kwallet-pam.nix
new file mode 100644
index 00000000000..b4fd032cf1f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwallet-pam.nix
@@ -0,0 +1,10 @@
+{ mkDerivation, lib, extra-cmake-modules, pam, socat, libgcrypt, qtbase, kwallet, }:
+
+mkDerivation {
+ name = "kwallet-pam";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [ pam socat libgcrypt qtbase kwallet ];
+ postPatch = ''
+ sed -i pam_kwallet_init -e "s|socat|${lib.getBin socat}/bin/socat|"
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwayland-integration.nix b/nixpkgs/pkgs/desktops/plasma-5/kwayland-integration.nix
new file mode 100644
index 00000000000..1344b477f73
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwayland-integration.nix
@@ -0,0 +1,11 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ kidletime, kwayland, kwindowsystem, qtbase,
+}:
+
+mkDerivation {
+ name = "kwayland-integration";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [ kidletime kwindowsystem kwayland qtbase ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwin/default.nix b/nixpkgs/pkgs/desktops/plasma-5/kwin/default.nix
new file mode 100644
index 00000000000..b8f381e9714
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwin/default.nix
@@ -0,0 +1,46 @@
+{
+ mkDerivation, lib, copyPathsToStore,
+ extra-cmake-modules, kdoctools,
+
+ epoxy,libICE, libSM, libinput, libxkbcommon, udev, wayland, xcb-util-cursor,
+ xwayland,
+
+ qtdeclarative, qtmultimedia, qtscript, qtx11extras,
+
+ breeze-qt5, kactivities, kcompletion, kcmutils, kconfig, kconfigwidgets,
+ kcoreaddons, kcrash, kdeclarative, kdecoration, kglobalaccel, ki18n,
+ kiconthemes, kidletime, kinit, kio, knewstuff, knotifications, kpackage,
+ kscreenlocker, kservice, kwayland, kwidgetsaddons, kwindowsystem, kxmlgui,
+ plasma-framework, qtsensors, libcap, libdrm
+}:
+
+mkDerivation {
+ name = "kwin";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ epoxy libICE libSM libinput libxkbcommon udev wayland xcb-util-cursor
+ xwayland
+
+ qtdeclarative qtmultimedia qtscript qtx11extras qtsensors
+
+ breeze-qt5 kactivities kcmutils kcompletion kconfig kconfigwidgets
+ kcoreaddons kcrash kdeclarative kdecoration kglobalaccel ki18n kiconthemes
+ kidletime kinit kio knewstuff knotifications kpackage kscreenlocker kservice
+ kwayland kwidgetsaddons kwindowsystem kxmlgui plasma-framework
+ libcap libdrm
+ ];
+ outputs = [ "bin" "dev" "out" ];
+ patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+ CXXFLAGS = [
+ ''-DNIXPKGS_XWAYLAND=\"${lib.getBin xwayland}/bin/Xwayland\"''
+ ];
+ cmakeFlags = [ "-DCMAKE_SKIP_BUILD_RPATH=OFF" ];
+ postInstall = ''
+ # Some package(s) refer to these service types by the wrong name.
+ # I would prefer to patch those packages, but I cannot find them!
+ ln -s ''${!outputBin}/share/kservicetypes5/kwineffect.desktop \
+ ''${!outputBin}/share/kservicetypes5/kwin-effect.desktop
+ ln -s ''${!outputBin}/share/kservicetypes5/kwinscript.desktop \
+ ''${!outputBin}/share/kservicetypes5/kwin-script.desktop
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwin/follow-symlinks.patch b/nixpkgs/pkgs/desktops/plasma-5/kwin/follow-symlinks.patch
new file mode 100644
index 00000000000..60b8f5ef541
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwin/follow-symlinks.patch
@@ -0,0 +1,13 @@
+Index: kwin-5.7.3/plugins/kdecorations/aurorae/src/aurorae.cpp
+===================================================================
+--- kwin-5.7.3.orig/plugins/kdecorations/aurorae/src/aurorae.cpp
++++ kwin-5.7.3/plugins/kdecorations/aurorae/src/aurorae.cpp
+@@ -211,7 +211,7 @@ void Helper::init()
+ // so let's try to locate our plugin:
+ QString pluginPath;
+ for (const QString &path : m_engine->importPathList()) {
+- QDirIterator it(path, QDirIterator::Subdirectories);
++ QDirIterator it(path, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+ while (it.hasNext()) {
+ it.next();
+ QFileInfo fileInfo = it.fileInfo();
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwin/no-setcap-install.patch b/nixpkgs/pkgs/desktops/plasma-5/kwin/no-setcap-install.patch
new file mode 100644
index 00000000000..80aacacc6ca
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwin/no-setcap-install.patch
@@ -0,0 +1,24 @@
+Dont set capabilities on kwin_wayland executable at build time
+
+This is handled by security.wrappers on NixOS
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 48cbcdbfe..93b410ed8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -674,15 +674,6 @@ if (HAVE_LIBCAP)
+ endif()
+
+ install(TARGETS kwin_wayland ${INSTALL_TARGETS_DEFAULT_ARGS} )
+-if (HAVE_LIBCAP)
+- install(
+- CODE "execute_process(
+- COMMAND
+- ${SETCAP_EXECUTABLE}
+- CAP_SYS_NICE=+ep
+- \$ENV{DESTDIR}${CMAKE_INSTALL_FULL_BINDIR}/kwin_wayland)"
+- )
+-endif()
+
+ add_subdirectory(platformsupport)
+ add_subdirectory(plugins)
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwin/scripts/tiling.nix b/nixpkgs/pkgs/desktops/plasma-5/kwin/scripts/tiling.nix
new file mode 100644
index 00000000000..d2c68d3cb7b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwin/scripts/tiling.nix
@@ -0,0 +1,44 @@
+{ lib, mkDerivation, fetchFromGitHub
+, kcoreaddons, kwindowsystem, plasma-framework, systemsettings }:
+
+mkDerivation rec {
+ pname = "kwin-tiling";
+ version = "2.2";
+
+ src = fetchFromGitHub {
+ owner = "kwin-scripts";
+ repo = "kwin-tiling";
+ rev = "v${version}";
+ sha256 = "1sx64xv7g9yh3j26zxxrbndv79xam9jq0vs00fczgfv2n0m7j7bl";
+ };
+
+ # This is technically not needed, but we might as well clean up
+ postPatch = ''
+ rm release.sh
+ '';
+
+ buildInputs = [
+ kcoreaddons kwindowsystem plasma-framework systemsettings
+ ];
+
+ dontBuild = true;
+
+ # 1. --global still installs to $HOME/.local/share so we use --packageroot
+ # 2. plasmapkg2 doesn't copy metadata.desktop into place, so we do that manually
+ installPhase = ''
+ runHook preInstall
+
+ plasmapkg2 --type kwinscript --install ${src} --packageroot $out/share/kwin/scripts
+ install -Dm644 ${src}/metadata.desktop $out/share/kservices5/kwin-script-tiling.desktop
+
+ runHook postInstalll
+ '';
+
+ meta = with lib; {
+ description = "Tiling script for kwin";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ peterhoeg ];
+ inherit (src.meta) homepage;
+ inherit (kwindowsystem.meta) platforms;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwin/series b/nixpkgs/pkgs/desktops/plasma-5/kwin/series
new file mode 100644
index 00000000000..8efb74eabd6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwin/series
@@ -0,0 +1,3 @@
+follow-symlinks.patch
+xwayland.patch
+no-setcap-install.patch
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwin/xwayland.patch b/nixpkgs/pkgs/desktops/plasma-5/kwin/xwayland.patch
new file mode 100644
index 00000000000..9d405b3bbb8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwin/xwayland.patch
@@ -0,0 +1,13 @@
+Index: kwin-5.15.5/xwl/xwayland.cpp
+===================================================================
+--- kwin-5.15.5.orig/xwl/xwayland.cpp
++++ kwin-5.15.5/xwl/xwayland.cpp
+@@ -143,7 +143,7 @@ void Xwayland::init()
+
+ m_xwaylandProcess = new Process(this);
+ m_xwaylandProcess->setProcessChannelMode(QProcess::ForwardedErrorChannel);
+- m_xwaylandProcess->setProgram(QStringLiteral("Xwayland"));
++ m_xwaylandProcess->setProgram(QLatin1String(NIXPKGS_XWAYLAND));
+ QProcessEnvironment env = m_app->processStartupEnvironment();
+ env.insert("WAYLAND_SOCKET", QByteArray::number(wlfd));
+ env.insert("EGL_PLATFORM", QByteArrayLiteral("DRM"));
diff --git a/nixpkgs/pkgs/desktops/plasma-5/kwrited.nix b/nixpkgs/pkgs/desktops/plasma-5/kwrited.nix
new file mode 100644
index 00000000000..f6f6187e946
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/kwrited.nix
@@ -0,0 +1,11 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ kcoreaddons, kdbusaddons, ki18n, knotifications, kpty, qtbase,
+}:
+
+mkDerivation {
+ name = "kwrited";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [ kcoreaddons kdbusaddons ki18n knotifications kpty qtbase ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/libkscreen/default.nix b/nixpkgs/pkgs/desktops/plasma-5/libkscreen/default.nix
new file mode 100644
index 00000000000..5625aa656ce
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/libkscreen/default.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation, lib, copyPathsToStore, propagate,
+ extra-cmake-modules,
+ kwayland, libXrandr, qtx11extras
+}:
+
+mkDerivation {
+ name = "libkscreen";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [ kwayland libXrandr qtx11extras ];
+ outputs = [ "out" "dev" ];
+ patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+ preConfigure = ''
+ NIX_CFLAGS_COMPILE+=" -DNIXPKGS_LIBKSCREEN_BACKENDS=\"''${!outputBin}/$qtPluginPrefix/kf5/kscreen\""
+ '';
+ setupHook = propagate "out";
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/libkscreen/libkscreen-backends-path.patch b/nixpkgs/pkgs/desktops/plasma-5/libkscreen/libkscreen-backends-path.patch
new file mode 100644
index 00000000000..48be0d037df
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/libkscreen/libkscreen-backends-path.patch
@@ -0,0 +1,27 @@
+Index: libkscreen-5.9.4/src/backendmanager.cpp
+===================================================================
+--- libkscreen-5.9.4.orig/src/backendmanager.cpp
++++ libkscreen-5.9.4/src/backendmanager.cpp
+@@ -178,17 +178,11 @@ QFileInfo BackendManager::preferredBacke
+ QFileInfoList BackendManager::listBackends()
+ {
+ // Compile a list of installed backends first
+- const QString backendFilter = QStringLiteral("KSC_*");
+- const QStringList paths = QCoreApplication::libraryPaths();
+- QFileInfoList finfos;
+- for (const QString &path : paths) {
+- const QDir dir(path + QLatin1String("/kf5/kscreen/"),
+- backendFilter,
+- QDir::SortFlags(QDir::QDir::Name),
+- QDir::NoDotAndDotDot | QDir::Files);
+- finfos.append(dir.entryInfoList());
+- }
+- return finfos;
++ const QDir dir(QLatin1String(NIXPKGS_LIBKSCREEN_BACKENDS),
++ QStringLiteral("KSC_*"),
++ QDir::SortFlags(QDir::QDir::Name),
++ QDir::NoDotAndDotDot | QDir::Files);
++ return dir.entryInfoList();
+ }
+
+ KScreen::AbstractBackend *BackendManager::loadBackendPlugin(QPluginLoader *loader, const QString &name,
diff --git a/nixpkgs/pkgs/desktops/plasma-5/libkscreen/series b/nixpkgs/pkgs/desktops/plasma-5/libkscreen/series
new file mode 100644
index 00000000000..86bf4ab1060
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/libkscreen/series
@@ -0,0 +1 @@
+libkscreen-backends-path.patch
diff --git a/nixpkgs/pkgs/desktops/plasma-5/libksysguard/0001-qdiriterator-follow-symlinks.patch b/nixpkgs/pkgs/desktops/plasma-5/libksysguard/0001-qdiriterator-follow-symlinks.patch
new file mode 100644
index 00000000000..fbbb11ae755
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/libksysguard/0001-qdiriterator-follow-symlinks.patch
@@ -0,0 +1,25 @@
+From 46164a50de4102d02ae9d1d480acdd4b12303db8 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Wed, 14 Oct 2015 07:07:22 -0500
+Subject: [PATCH] qdiriterator follow symlinks
+
+---
+ processui/scripting.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/processui/scripting.cpp b/processui/scripting.cpp
+index efed8ff..841761a 100644
+--- a/processui/scripting.cpp
++++ b/processui/scripting.cpp
+@@ -167,7 +167,7 @@ void Scripting::loadContextMenu() {
+ QStringList scripts;
+ const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "ksysguard/scripts/", QStandardPaths::LocateDirectory);
+ Q_FOREACH (const QString& dir, dirs) {
+- QDirIterator it(dir, QStringList() << QStringLiteral("*.desktop"), QDir::NoFilter, QDirIterator::Subdirectories);
++ QDirIterator it(dir, QStringList() << QStringLiteral("*.desktop"), QDir::NoFilter, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+ while (it.hasNext()) {
+ scripts.append(it.next());
+ }
+--
+2.5.2
+
diff --git a/nixpkgs/pkgs/desktops/plasma-5/libksysguard/default.nix b/nixpkgs/pkgs/desktops/plasma-5/libksysguard/default.nix
new file mode 100644
index 00000000000..96d113e11fb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/libksysguard/default.nix
@@ -0,0 +1,21 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ kauth, kcompletion, kconfig, kconfigwidgets, kcoreaddons, ki18n, kiconthemes,
+ kservice, kwidgetsaddons, kwindowsystem, plasma-framework, qtscript, qtwebengine,
+ qtx11extras
+}:
+
+mkDerivation {
+ name = "libksysguard";
+ patches = [
+ ./0001-qdiriterator-follow-symlinks.patch
+ ];
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [
+ kauth kconfig ki18n kiconthemes kwindowsystem kcompletion kconfigwidgets
+ kcoreaddons kservice kwidgetsaddons plasma-framework qtscript qtx11extras
+ qtwebengine
+ ];
+ outputs = [ "bin" "dev" "out" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/milou.nix b/nixpkgs/pkgs/desktops/plasma-5/milou.nix
new file mode 100644
index 00000000000..db019db358b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/milou.nix
@@ -0,0 +1,15 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ kcoreaddons, kdeclarative, ki18n, krunner, kservice, plasma-framework,
+ qtscript, qtdeclarative
+}:
+
+mkDerivation {
+ name = "milou";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [
+ kcoreaddons kdeclarative ki18n krunner kservice plasma-framework
+ qtdeclarative qtscript
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/oxygen.nix b/nixpkgs/pkgs/desktops/plasma-5/oxygen.nix
new file mode 100644
index 00000000000..1b1f34f17b5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/oxygen.nix
@@ -0,0 +1,18 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ frameworkintegration, kcmutils, kcompletion, kconfig, kdecoration, kguiaddons,
+ ki18n, kwidgetsaddons, kservice, kwayland, kwindowsystem, qtdeclarative,
+ qtx11extras
+}:
+
+mkDerivation {
+ name = "oxygen";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ propagatedBuildInputs = [
+ frameworkintegration kcmutils kcompletion kconfig kdecoration kguiaddons
+ ki18n kservice kwayland kwidgetsaddons kwindowsystem qtdeclarative
+ qtx11extras
+ ];
+ outputs = [ "bin" "dev" "out" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-browser-integration.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-browser-integration.nix
new file mode 100644
index 00000000000..e01efabe8a6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-browser-integration.nix
@@ -0,0 +1,11 @@
+{ mkDerivation, extra-cmake-modules, qtbase, kio, ki18n, kconfig
+, kdbusaddons, knotifications, krunner, kwindowsystem, kactivities
+}:
+
+mkDerivation {
+ name = "plasma-browser-integration";
+ nativeBuildInputs = [
+ extra-cmake-modules qtbase kio ki18n kconfig kdbusaddons
+ knotifications krunner kwindowsystem kactivities
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/default.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/default.nix
new file mode 100644
index 00000000000..4183b38ba49
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/default.nix
@@ -0,0 +1,51 @@
+{
+ mkDerivation, lib, copyPathsToStore,
+ extra-cmake-modules, kdoctools,
+
+ boost, fontconfig, ibus, libXcursor, libXft, libcanberra_kde, libpulseaudio,
+ libxkbfile, xf86inputevdev, xf86inputsynaptics, xinput, xkeyboard_config,
+ xorgserver, utillinux,
+
+ qtdeclarative, qtquickcontrols, qtquickcontrols2, qtsvg, qtx11extras,
+
+ attica, baloo, kactivities, kactivities-stats, kauth, kcmutils, kdbusaddons,
+ kdeclarative, kded, kdelibs4support, kemoticons, kglobalaccel, ki18n,
+ kitemmodels, knewstuff, knotifications, knotifyconfig, kpeople, krunner,
+ kscreenlocker, ksysguard, kwallet, kwin, phonon, plasma-framework,
+ plasma-workspace, xf86inputlibinput
+}:
+
+mkDerivation {
+ name = "plasma-desktop";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ boost fontconfig ibus libcanberra_kde libpulseaudio libXcursor libXft
+ libxkbfile phonon xf86inputevdev xf86inputsynaptics xinput xkeyboard_config
+
+ qtdeclarative qtquickcontrols qtquickcontrols2 qtsvg qtx11extras
+
+ attica baloo kactivities kactivities-stats kauth kcmutils kdbusaddons
+ kdeclarative kded kdelibs4support kemoticons kglobalaccel ki18n kitemmodels
+ knewstuff knotifications knotifyconfig kpeople krunner kscreenlocker
+ ksysguard kwallet kwin plasma-framework plasma-workspace
+ ];
+
+ patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
+ postPatch = ''
+ sed '1i#include <cmath>' -i kcms/touchpad/src/backends/x11/synapticstouchpad.cpp
+ '';
+ CXXFLAGS = [
+ "-I${lib.getDev xorgserver}/include/xorg"
+ ''-DNIXPKGS_HWCLOCK=\"${lib.getBin utillinux}/sbin/hwclock\"''
+ ];
+ cmakeFlags = [
+ "-DEvdev_INCLUDE_DIRS=${lib.getDev xf86inputevdev}/include/xorg"
+ "-DSynaptics_INCLUDE_DIRS=${lib.getDev xf86inputsynaptics}/include/xorg"
+ "-DXORGLIBINPUT_INCLUDE_DIRS=${lib.getDev xf86inputlibinput}/include/xorg"
+ ];
+ postInstall = ''
+ # Display ~/Desktop contents on the desktop by default.
+ sed -i "''${!outputBin}/share/plasma/shells/org.kde.plasma.desktop/contents/defaults" \
+ -e 's/Containment=org.kde.desktopcontainment/Containment=org.kde.plasma.folder/'
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/hwclock-path.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/hwclock-path.patch
new file mode 100644
index 00000000000..a46212af10f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/hwclock-path.patch
@@ -0,0 +1,24 @@
+Index: plasma-desktop-5.8.5/kcms/dateandtime/helper.cpp
+===================================================================
+--- plasma-desktop-5.8.5.orig/kcms/dateandtime/helper.cpp
++++ plasma-desktop-5.8.5/kcms/dateandtime/helper.cpp
+@@ -48,10 +48,6 @@
+ #include <sys/stat.h>
+ #endif
+
+-// We cannot rely on the $PATH environment variable, because D-Bus activation
+-// clears it. So we have to use a reasonable default.
+-static const QString exePath = QStringLiteral("/usr/sbin:/usr/bin:/sbin:/bin");
+-
+ int ClockHelper::ntp( const QStringList& ntpServers, bool ntpEnabled )
+ {
+ int ret = 0;
+@@ -227,7 +223,7 @@ int ClockHelper::tzreset()
+
+ void ClockHelper::toHwclock()
+ {
+- QString hwclock = KStandardDirs::findExe(QStringLiteral("hwclock"), exePath);
++ QString hwclock = QLatin1String(NIXPKGS_HWCLOCK);
+ if (!hwclock.isEmpty()) {
+ KProcess::execute(hwclock, QStringList() << QStringLiteral("--systohc"));
+ }
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/series b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/series
new file mode 100644
index 00000000000..26517ba9356
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/series
@@ -0,0 +1,2 @@
+hwclock-path.patch
+tzdir.patch
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/tzdir.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/tzdir.patch
new file mode 100644
index 00000000000..97504b330fe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-desktop/tzdir.patch
@@ -0,0 +1,18 @@
+Index: plasma-desktop-5.8.5/kcms/dateandtime/helper.cpp
+===================================================================
+--- plasma-desktop-5.8.5.orig/kcms/dateandtime/helper.cpp
++++ plasma-desktop-5.8.5/kcms/dateandtime/helper.cpp
+@@ -181,7 +181,12 @@ int ClockHelper::tz( const QString& sele
+
+ val = selectedzone;
+ #else
+- QString tz = "/usr/share/zoneinfo/" + selectedzone;
++ QString tzdir = QString::fromLocal8Bit(qgetenv("TZDIR"));
++ QString tz = tzdir + "/" + selectedzone;
++ if (tzdir.isEmpty()) {
++ // Standard Linux path
++ tz = "/usr/share/zoneinfo/" + selectedzone;
++ }
+
+ if (QFile::exists(tz)) { // make sure the new TZ really exists
+ QFile::remove(QStringLiteral("/etc/localtime"));
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-integration/default.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-integration/default.nix
new file mode 100644
index 00000000000..f6964428762
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-integration/default.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules,
+ breeze-qt5, kconfig, kconfigwidgets, kiconthemes, kio, knotifications,
+ kwayland, libXcursor, qtquickcontrols2
+}:
+
+# TODO: install Noto Sans and Oxygen Mono fonts with plasma-integration
+
+mkDerivation {
+ name = "plasma-integration";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ buildInputs = [
+ breeze-qt5 kconfig kconfigwidgets kiconthemes kio knotifications kwayland
+ libXcursor qtquickcontrols2
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0001-mobile-broadband-provider-info-path.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0001-mobile-broadband-provider-info-path.patch
new file mode 100644
index 00000000000..79b5cfb437e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0001-mobile-broadband-provider-info-path.patch
@@ -0,0 +1,25 @@
+From faf13c97ff1192a201843b9d52f4002dbd9022af Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sun, 25 Oct 2015 09:09:27 -0500
+Subject: [PATCH] mobile-broadband-provider-info path
+
+---
+ libs/editor/mobileproviders.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libs/editor/mobileproviders.cpp b/libs/editor/mobileproviders.cpp
+index 568cb34..98a5992 100644
+--- a/libs/editor/mobileproviders.cpp
++++ b/libs/editor/mobileproviders.cpp
+@@ -26,7 +26,7 @@
+
+ #include <KLocale>
+
+-const QString MobileProviders::ProvidersFile = "/usr/share/mobile-broadband-provider-info/serviceproviders.xml";
++const QString MobileProviders::ProvidersFile = "@mobile_broadband_provider_info@/share/mobile-broadband-provider-info/serviceproviders.xml";
+
+ bool localeAwareCompare(const QString & one, const QString & two) {
+ return one.localeAwareCompare(two) < 0;
+--
+2.6.2
+
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0002-openvpn-binary-path.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0002-openvpn-binary-path.patch
new file mode 100644
index 00000000000..3bc871f0906
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/0002-openvpn-binary-path.patch
@@ -0,0 +1,13 @@
+diff --git a/vpn/openvpn/openvpnadvancedwidget.cpp b/vpn/openvpn/openvpnadvancedwidget.cpp
+index 2f11ba1d..310f11b4 100644
+--- a/vpn/openvpn/openvpnadvancedwidget.cpp
++++ b/vpn/openvpn/openvpnadvancedwidget.cpp
+@@ -75,7 +75,7 @@ OpenVpnAdvancedWidget::OpenVpnAdvancedWidget(const NetworkManager::VpnSetting::P
+ connect(m_ui->cmbProxyType, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &OpenVpnAdvancedWidget::proxyTypeChanged);
+
+ // start openVPN process and get its cipher list
+- const QString openVpnBinary = QStandardPaths::findExecutable("openvpn", QStringList() << "/sbin" << "/usr/sbin");
++ const QString openVpnBinary = "@openvpn@/bin/openvpn";
+ const QStringList ciphersArgs(QLatin1String("--show-ciphers"));
+ const QStringList versionArgs(QLatin1String("--version"));
+
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/default.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/default.nix
new file mode 100644
index 00000000000..8296d549782
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-nm/default.nix
@@ -0,0 +1,31 @@
+{
+ mkDerivation, substituteAll,
+ extra-cmake-modules, kdoctools,
+ kcompletion, kconfigwidgets, kcoreaddons, kdbusaddons, kdeclarative,
+ kdelibs4support, ki18n, kiconthemes, kinit, kio, kitemviews, knotifications,
+ kservice, kwallet, kwidgetsaddons, kwindowsystem, kxmlgui,
+ mobile-broadband-provider-info, modemmanager-qt, networkmanager-qt,
+ openconnect, openvpn, plasma-framework, qca-qt5, qtdeclarative, qttools, solid
+}:
+
+mkDerivation {
+ name = "plasma-nm";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools qttools ];
+ buildInputs = [
+ kdeclarative kdelibs4support ki18n kio kwindowsystem plasma-framework
+ qtdeclarative kcompletion kconfigwidgets kcoreaddons kdbusaddons kiconthemes
+ kinit kitemviews knotifications kservice kwallet kwidgetsaddons kxmlgui
+ mobile-broadband-provider-info modemmanager-qt networkmanager-qt openconnect
+ qca-qt5 solid
+ ];
+ patches = [
+ (substituteAll {
+ src = ./0001-mobile-broadband-provider-info-path.patch;
+ mobile_broadband_provider_info = mobile-broadband-provider-info;
+ })
+ (substituteAll {
+ src = ./0002-openvpn-binary-path.patch;
+ inherit openvpn;
+ })
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-pa.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-pa.nix
new file mode 100644
index 00000000000..b60b5298d6d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-pa.nix
@@ -0,0 +1,15 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ gconf, glib, kconfigwidgets, kcoreaddons, kdeclarative, kglobalaccel, ki18n,
+ libcanberra-gtk3, libpulseaudio, plasma-framework, qtdeclarative, kwindowsystem
+}:
+
+mkDerivation {
+ name = "plasma-pa";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ gconf glib kconfigwidgets kcoreaddons kdeclarative kglobalaccel ki18n
+ libcanberra-gtk3 libpulseaudio plasma-framework qtdeclarative kwindowsystem
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/cryfs-path.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/cryfs-path.patch
new file mode 100644
index 00000000000..6bab35fe4a9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/cryfs-path.patch
@@ -0,0 +1,13 @@
+diff --git a/kded/engine/backends/cryfs/cryfsbackend.cpp b/kded/engine/backends/cryfs/cryfsbackend.cpp
+index 58a6929..7212980 100644
+--- a/kded/engine/backends/cryfs/cryfsbackend.cpp
++++ b/kded/engine/backends/cryfs/cryfsbackend.cpp
+@@ -241,7 +241,7 @@ QProcess *CryFsBackend::cryfs(const QStringList &arguments) const
+ auto config = KSharedConfig::openConfig(PLASMAVAULT_CONFIG_FILE);
+ KConfigGroup backendConfig(config, "CryfsBackend");
+
+- return process("cryfs",
++ return process(NIXPKGS_CRYFS,
+ arguments + backendConfig.readEntry("extraMountOptions", QStringList{}),
+ { { "CRYFS_FRONTEND", "noninteractive" } });
+ }
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/default.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/default.nix
new file mode 100644
index 00000000000..e016944be45
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/default.nix
@@ -0,0 +1,40 @@
+{
+ mkDerivation, lib,
+ extra-cmake-modules,
+
+ kactivities,
+ plasma-framework,
+ kwindowsystem,
+ networkmanager-qt,
+ libksysguard,
+
+ encfs,
+ cryfs,
+ fuse
+}:
+
+mkDerivation {
+ name = "plasma-vault";
+ nativeBuildInputs = [ extra-cmake-modules ];
+
+ patches = [
+ ./encfs-path.patch
+ ./cryfs-path.patch
+ ./fusermount-path.patch
+ ];
+
+ buildInputs = [
+ kactivities plasma-framework kwindowsystem libksysguard
+ networkmanager-qt
+ ];
+
+ CXXFLAGS = [
+ ''-DNIXPKGS_ENCFS=\"${lib.getBin encfs}/bin/encfs\"''
+ ''-DNIXPKGS_ENCFSCTL=\"${lib.getBin encfs}/bin/encfsctl\"''
+
+ ''-DNIXPKGS_CRYFS=\"${lib.getBin cryfs}/bin/cryfs\"''
+
+ ''-DNIXPKGS_FUSERMOUNT=\"${lib.getBin fuse}/bin/fusermount\"''
+ ];
+
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/encfs-path.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/encfs-path.patch
new file mode 100644
index 00000000000..e1c325e1693
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/encfs-path.patch
@@ -0,0 +1,22 @@
+diff --git a/kded/engine/backends/encfs/encfsbackend.cpp b/kded/engine/backends/encfs/encfsbackend.cpp
+index 628af7b..6edd38e 100644
+--- a/kded/engine/backends/encfs/encfsbackend.cpp
++++ b/kded/engine/backends/encfs/encfsbackend.cpp
+@@ -137,7 +137,7 @@ QProcess *EncFsBackend::encfs(const QStringList &arguments) const
+ auto config = KSharedConfig::openConfig(PLASMAVAULT_CONFIG_FILE);
+ KConfigGroup backendConfig(config, "EncfsBackend");
+
+- return process("encfs",
++ return process(NIXPKGS_ENCFS,
+ arguments + backendConfig.readEntry("extraMountOptions", QStringList{}),
+ {});
+ }
+@@ -146,7 +146,7 @@ QProcess *EncFsBackend::encfs(const QStringList &arguments) const
+
+ QProcess *EncFsBackend::encfsctl(const QStringList &arguments) const
+ {
+- return process("encfsctl", arguments, {});
++ return process(NIXPKGS_ENCFSCTL, arguments, {});
+ }
+
+
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/fusermount-path.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/fusermount-path.patch
new file mode 100644
index 00000000000..b2a7866531b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-vault/fusermount-path.patch
@@ -0,0 +1,18 @@
+diff --git a/kded/engine/fusebackend_p.cpp b/kded/engine/fusebackend_p.cpp
+index d07e313..ea7d81c 100644
+--- a/kded/engine/fusebackend_p.cpp
++++ b/kded/engine/fusebackend_p.cpp
+@@ -106,7 +106,7 @@ QProcess *FuseBackend::process(const QString &executable,
+
+ QProcess *FuseBackend::fusermount(const QStringList &arguments) const
+ {
+- return process("fusermount", arguments, {});
++ return process(NIXPKGS_FUSERMOUNT, arguments, {});
+ }
+
+
+@@ -279,4 +279,3 @@ bool FuseBackend::isOpened(const MountPoint &mountPoint) const
+ }
+
+ } // namespace PlasmaVault
+-
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace-wallpapers.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace-wallpapers.nix
new file mode 100644
index 00000000000..cb068166c1d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace-wallpapers.nix
@@ -0,0 +1,6 @@
+{ mkDerivation , extra-cmake-modules }:
+
+mkDerivation {
+ name = "plasma-workspace-wallpapers";
+ nativeBuildInputs = [ extra-cmake-modules ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/default.nix b/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/default.nix
new file mode 100644
index 00000000000..1403c9e4c8b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/default.nix
@@ -0,0 +1,78 @@
+{
+ mkDerivation, lib,
+
+ extra-cmake-modules, kdoctools,
+
+ coreutils, dbus, gnugrep, gnused, isocodes, libdbusmenu, libSM, libXcursor,
+ libXtst, pam, wayland, xmessage, xprop, xrdb, xsetroot,
+
+ baloo, kactivities, kcmutils, kconfig, kcrash, kdbusaddons, kdeclarative,
+ kdelibs4support, kdesu, kglobalaccel, kidletime, kinit, kjsembed, knewstuff,
+ knotifyconfig, kpackage, krunner, kscreenlocker, ktexteditor, ktextwidgets,
+ kwallet, kwayland, kwin, kxmlrpcclient, libkscreen, libksysguard, libqalculate,
+ networkmanager-qt, phonon, plasma-framework, prison, solid, kholidays,
+ breeze-qt5,
+
+ qtgraphicaleffects, qtquickcontrols, qtquickcontrols2, qtscript, qttools,
+ qtwayland, qtx11extras,
+}:
+
+let inherit (lib) getBin getLib; in
+
+mkDerivation {
+ name = "plasma-workspace";
+
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ isocodes libdbusmenu libSM libXcursor libXtst pam wayland
+
+ baloo kactivities kcmutils kconfig kcrash kdbusaddons kdeclarative
+ kdelibs4support kdesu kglobalaccel kidletime kjsembed knewstuff
+ knotifyconfig kpackage krunner kscreenlocker ktexteditor ktextwidgets
+ kwallet kwayland kwin kxmlrpcclient libkscreen libksysguard libqalculate
+ networkmanager-qt phonon plasma-framework prison solid kholidays
+
+ qtgraphicaleffects qtquickcontrols qtquickcontrols2 qtscript qtwayland qtx11extras
+ ];
+ propagatedUserEnvPkgs = [ qtgraphicaleffects ];
+ outputs = [ "out" "dev" ];
+
+ cmakeFlags = [
+ "-DNIXPKGS_XMESSAGE=${getBin xmessage}/bin/xmessage"
+ "-DNIXPKGS_MKDIR=${getBin coreutils}/bin/mkdir"
+ "-DNIXPKGS_XRDB=${getBin xrdb}/bin/xrdb"
+ "-DNIXPKGS_QTPATHS=${getBin qttools}/bin/qtpaths"
+ "-DNIXPKGS_XSETROOT=${getBin xsetroot}/bin/xsetroot"
+ "-DNIXPKGS_XPROP=${getBin xprop}/bin/xprop"
+ "-DNIXPKGS_ID=${getBin coreutils}/bin/id"
+ "-DNIXPKGS_DBUS_UPDATE_ACTIVATION_ENVIRONMENT=${getBin dbus}/bin/dbus-update-activation-environment"
+ "-DNIXPKGS_START_KDEINIT_WRAPPER=${getLib kinit}/libexec/kf5/start_kdeinit_wrapper"
+ "-DNIXPKGS_QDBUS=${getBin qttools}/bin/qdbus"
+ "-DNIXPKGS_KWRAPPER5=${getBin kinit}/bin/kwrapper5"
+ "-DNIXPKGS_KREADCONFIG5=${getBin kconfig}/bin/kreadconfig5"
+ "-DNIXPKGS_GREP=${getBin gnugrep}/bin/grep"
+ "-DNIXPKGS_KDEINIT5_SHUTDOWN=${getBin kinit}/bin/kdeinit5_shutdown"
+ "-DNIXPKGS_SED=${getBin gnused}/bin/sed"
+ "-DNIXPKGS_WALLPAPER_INSTALL_DIR=${getBin breeze-qt5}/share/wallpapers/"
+ ];
+
+ # To regenerate ./plasma-workspace.patch,
+ #
+ # > git clone https://github.com/ttuegel/plasma-workspace
+ # > cd plasma-workspace
+ # > git checkout nixpkgs/$x.$y # where $x.$y.$z == $version
+ # ... make some commits ...
+ # > git diff v$x.$y.$z
+ #
+ # Add upstream patches to the list below. For new patchs, particularly if not
+ # submitted upstream, please make a pull request and add it to
+ # ./plasma-workspace.patch.
+ patches = [
+ ./plasma-workspace.patch
+ ];
+
+ preConfigure = ''
+ NIX_CFLAGS_COMPILE+=" -DNIXPKGS_KDOSTARTUPCONFIG5=\"''${!outputBin}/bin/kdostartupconfig5\""
+ cmakeFlags+=" -DNIXPKGS_STARTPLASMA=''${!outputBin}/libexec/startplasma"
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch b/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch
new file mode 100644
index 00000000000..5c27eee5010
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch
@@ -0,0 +1,1012 @@
+diff --git a/sddm-theme/theme.conf.cmake b/sddm-theme/theme.conf.cmake
+index 69d3070..52e9102 100644
+--- a/sddm-theme/theme.conf.cmake
++++ b/sddm-theme/theme.conf.cmake
+@@ -1,5 +1,5 @@
+ [General]
+ type=image
+ color=#1d99f3
+ fontSize=10
+-background=${CMAKE_INSTALL_PREFIX}/${WALLPAPER_INSTALL_DIR}/Next/contents/images/5120x2880.png
++background=${NIXPKGS_WALLPAPER_INSTALL_DIR}/Next/contents/images/5120x2880.png
+diff --git a/startkde/CMakeLists.txt b/startkde/CMakeLists.txt
+index 6a1a212..f03fd34 100644
+--- a/startkde/CMakeLists.txt
++++ b/startkde/CMakeLists.txt
+@@ -4,11 +4,6 @@ add_subdirectory(ksyncdbusenv)
+ add_subdirectory(waitforname)
+ add_subdirectory(kcheckrunning)
+
+-#FIXME: reconsider, looks fishy
+-if(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr")
+- set(EXPORT_XCURSOR_PATH "XCURSOR_PATH=${KDE_INSTALL_FULL_DATAROOTDIR}/icons:$XCURSOR_PATH\":~/.icons:/usr/share/icons:/usr/share/pixmaps:/usr/X11R6/lib/X11/icons\"; export XCURSOR_PATH")
+-endif()
+-
+ configure_file(startkde.cmake ${CMAKE_CURRENT_BINARY_DIR}/startkde @ONLY)
+ configure_file(startplasmacompositor.cmake ${CMAKE_CURRENT_BINARY_DIR}/startplasmacompositor @ONLY)
+ configure_file(startplasma.cmake ${CMAKE_CURRENT_BINARY_DIR}/startplasma @ONLY)
+diff --git a/startkde/kstartupconfig/kstartupconfig.cpp b/startkde/kstartupconfig/kstartupconfig.cpp
+index 493218e..d507aa5 100644
+--- a/startkde/kstartupconfig/kstartupconfig.cpp
++++ b/startkde/kstartupconfig/kstartupconfig.cpp
+@@ -147,5 +147,5 @@ int main()
+ fclose( keys );
+ fclose( config );
+ doit:
+- return system( "kdostartupconfig5" );
++ return system( NIXPKGS_KDOSTARTUPCONFIG5 );
+ }
+diff --git a/startkde/startkde.cmake b/startkde/startkde.cmake
+index b68f0c6..a0ec214 100644
+--- a/startkde/startkde.cmake
++++ b/startkde/startkde.cmake
+@@ -1,22 +1,31 @@
+ #!/bin/sh
+ #
+-# DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
++# NIXPKGS KDE STARTUP SCRIPT ( @PROJECT_VERSION@ )
+ #
+
++if test "x$1" = x--failsafe; then
++ KDE_FAILSAFE=1 # General failsafe flag
++ KWIN_COMPOSE=N # Disable KWin's compositing
++ QT_XCB_FORCE_SOFTWARE_OPENGL=1
++ export KWIN_COMPOSE KDE_FAILSAFE QT_XCB_FORCE_SOFTWARE_OPENGL
++fi
++
+ # When the X server dies we get a HUP signal from xinit. We must ignore it
+ # because we still need to do some cleanup.
+ trap 'echo GOT SIGHUP' HUP
+
+-# Check if a Plasma session already is running and whether it's possible to connect to X
+-kcheckrunning
++# we have to unset this for Darwin since it will screw up KDE's dynamic-loading
++unset DYLD_FORCE_FLAT_NAMESPACE
++
++# Check if a KDE session already is running and whether it's possible to connect to X
++@CMAKE_INSTALL_FULL_BINDIR@/kcheckrunning
+ kcheckrunning_result=$?
+-if test $kcheckrunning_result -eq 0 ; then
+- echo "Plasma seems to be already running on this display."
+- xmessage -geometry 500x100 "Plasma seems to be already running on this display." > /dev/null 2>/dev/null
+- exit 1
+-elif test $kcheckrunning_result -eq 2 ; then
+- echo "\$DISPLAY is not set or cannot connect to the X server."
+- exit 1
++if [ $kcheckrunning_result -eq 0 ]; then
++ echo "KDE seems to be already running on this display."
++ exit 1
++elif [ $kcheckrunning_result -eq 2 ]; then
++ echo "\$DISPLAY is not set or cannot connect to the X server."
++ exit 1
+ fi
+
+ # Boot sequence:
+@@ -33,62 +42,143 @@ fi
+ #
+ # * Then ksmserver is started which takes control of the rest of the startup sequence
+
+-if [ ${XDG_CONFIG_HOME} ]; then
+- configDir=$XDG_CONFIG_HOME;
+-else
+- configDir=${HOME}/.config; #this is the default, http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
++export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
++@NIXPKGS_MKDIR@ -p "$XDG_CONFIG_HOME"
++
++# The KDE icon cache is supposed to update itself
++# automatically, but it uses the timestamp on the icon
++# theme directory as a trigger. Since in Nix the
++# timestamp is always the same, this doesn't work. So as
++# a workaround, nuke the icon cache on login. This isn't
++# perfect, since it may require logging out after
++# installing new applications to update the cache.
++# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
++rm -fv $HOME/.cache/icon-cache.kcache
++
++# xdg-desktop-settings generates this empty file but
++# it makes kbuildsyscoca5 fail silently. To fix this
++# remove that menu if it exists.
++rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu
++
++# Remove the kbuildsyscoca5 cache. It will be regenerated immediately after.
++# This is necessary for kbuildsyscoca5 to recognize that software that has been removed.
++rm -fv $HOME/.cache/ksycoca*
++
++# Qt writes a weird ‘libraryPath’ line to
++# ~/.config/Trolltech.conf that causes the KDE plugin
++# paths of previous KDE invocations to be searched.
++# Obviously using mismatching KDE libraries is potentially
++# disastrous, so here we nuke references to the Nix store
++# in Trolltech.conf. A better solution would be to stop
++# Qt from doing this wackiness in the first place.
++if [ -e $XDG_CONFIG_HOME/Trolltech.conf ]; then
++ @NIXPKGS_SED@ -e '/nix\\store\|nix\/store/ d' -i $XDG_CONFIG_HOME/Trolltech.conf
+ fi
+ sysConfigDirs=${XDG_CONFIG_DIRS:-/etc/xdg}
+
+-# We need to create config folder so we can write startupconfigkeys
+-mkdir -p $configDir
++@NIXPKGS_KBUILDSYCOCA5@
++
++# Set the default GTK 2 theme
++gtkrc2="$HOME/.gtkrc-2.0"
++breeze_gtkrc2="/run/current-system/sw/share/themes/Breeze/gtk-2.0/gtkrc"
++if ! [ -e "$gtkrc2" ] && [ -e "$breeze_gtkrc2" ]; then
++ cat >"$gtkrc2" <<EOF
++# Default GTK+ 2 config for NixOS KDE 5
++include "$breeze_gtkrc2"
++style "user-font"
++{
++ font_name="Sans Serif Regular"
++}
++widget_class "*" style "user-font"
++gtk-font-name="Sans Serif Regular 10"
++gtk-theme-name="Breeze"
++gtk-icon-theme-name="breeze"
++gtk-fallback-icon-theme="hicolor"
++gtk-cursor-theme-name="breeze_cursors"
++gtk-toolbar-style=GTK_TOOLBAR_ICONS
++gtk-menu-images=1
++gtk-button-images=1
++EOF
++fi
++
++# Set the default GTK 3 theme
++gtk3_settings="$XDG_CONFIG_HOME/gtk-3.0/settings.ini"
++breeze_gtk3="/run/current-system/sw/share/themes/Breeze/gtk-3.0"
++if ! [ -e "$gtk3_settings" ] && [ -e "$breeze_gtk" ]; then
++ mkdir -p $(dirname "$gtk3_settings")
++ cat >"$gtk3_settings" <<EOF
++[Settings]
++gtk-font-name=Sans Serif Regular 10
++gtk-theme-name=Breeze
++gtk-icon-theme-name=breeze
++gtk-fallback-icon-theme=hicolor
++gtk-cursor-theme-name=breeze_cursors
++gtk-toolbar-style=GTK_TOOLBAR_ICONS
++gtk-menu-images=1
++gtk-button-images=1
++EOF
++fi
++
++kcminputrc="$XDG_CONFIG_HOME/kcminputrc"
++if ! [ -e "$kcminputrc" ]; then
++ cat >"$kcminputrc" <<EOF
++[Mouse]
++cursorTheme=breeze_cursors
++cursorSize=0
++EOF
++fi
+
+ #This is basically setting defaults so we can use them with kstartupconfig5
+-cat >$configDir/startupconfigkeys <<EOF
++cat >"$XDG_CONFIG_HOME/startupconfigkeys" <<EOF
+ kcminputrc Mouse cursorTheme 'breeze_cursors'
+ kcminputrc Mouse cursorSize ''
+-ksplashrc KSplash Theme Breeze
++ksplashrc KSplash Theme org.kde.breeze.desktop
+ ksplashrc KSplash Engine KSplashQML
+ kdeglobals KScreen ScaleFactor ''
+ kdeglobals KScreen ScreenScaleFactors ''
+ kcmfonts General forceFontDPI 0
++kcmfonts General dontChangeAASettings true
+ EOF
+
+ # preload the user's locale on first start
+-plasmalocalerc=$configDir/plasma-localerc
+-test -f $plasmalocalerc || {
+-cat >$plasmalocalerc <<EOF
++plasmalocalerc="$XDG_CONFIG_HOME/plasma-localerc"
++if ! [ -f "$plasmalocalerc" ]; then
++ cat >"$plasmalocalerc" <<EOF
+ [Formats]
+ LANG=$LANG
+ EOF
+-}
++fi
+
+ # export LC_* variables set by kcmshell5 formats into environment
+ # so it can be picked up by QLocale and friends.
+-exportformatssettings=$configDir/plasma-locale-settings.sh
+-test -f $exportformatssettings && {
+- . $exportformatssettings
+-}
++exportformatssettings="$XDG_CONFIG_HOME/plasma-locale-settings.sh"
++if [ -r "$exportformatssettings" ]; then
++ . "$exportformatssettings"
++fi
+
+ # Write a default kdeglobals file to set up the font
+-kdeglobalsfile=$configDir/kdeglobals
+-test -f $kdeglobalsfile || {
+-cat >$kdeglobalsfile <<EOF
++kdeglobalsfile="$XDG_CONFIG_HOME/kdeglobals"
++if ! [ -f "$kdeglobalsfile" ]; then
++ cat >"$kdeglobalsfile" <<EOF
+ [General]
+-XftAntialias=true
+-XftHintStyle=hintmedium
+-XftSubPixel=none
++fixed=Monospace,10,-1,5,50,0,0,0,0,0,Regular
++font=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
++menuFont=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
++smallestReadableFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
++toolBarFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
++
++[WM]
++activeFont=Noto Sans,12,-1,5,50,0,0,0,0,0,Bold
+ EOF
+-}
++fi
+
+-kstartupconfig5
+-returncode=$?
+-if test $returncode -ne 0; then
+- xmessage -geometry 500x100 "kstartupconfig5 does not exist or fails. The error code is $returncode. Check your installation."
++if ! @CMAKE_INSTALL_FULL_BINDIR@/kstartupconfig5; then
++ echo "kstartupconfig5 does not exist or fails. The error code is $returncode. Check your installation." 1>&2
+ exit 1
+ fi
+-[ -r $configDir/startupconfig ] && . $configDir/startupconfig
+-
++if [ -r "$XDG_CONFIG_HOME/startupconfig" ]; then
++ . "$XDG_CONFIG_HOME/startupconfig"
++fi
+
+ #Do not sync any of this section with the wayland versions as there scale factors are
+ #sent properly over wl_output
+@@ -104,26 +194,33 @@ fi
+ #otherwise apps that manually opt in for high DPI get auto scaled by the developer AND manually scaled by us
+ export QT_AUTO_SCREEN_SCALE_FACTOR=0
+
++#Set the QtQuickControls style to our own: for QtQuickControls1
++#it will fall back to Desktop, while it will use our own org.kde.desktop
++#for QtQuickControlsStyle and Kirigami
++export QT_QUICK_CONTROLS_STYLE=org.kde.desktop
++
++XCURSOR_PATH=~/.icons
++IFS=":" read -r -a xdgDirs <<< "$XDG_DATA_DIRS"
++for xdgDir in "${xdgDirs[@]}"; do
++ XCURSOR_PATH="$XCURSOR_PATH:$xdgDir/icons"
++done
++export XCURSOR_PATH
++
+ # XCursor mouse theme needs to be applied here to work even for kded or ksmserver
+ if test -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ; then
+- @EXPORT_XCURSOR_PATH@
+-
+ kapplymousetheme "$kcminputrc_mouse_cursortheme" "$kcminputrc_mouse_cursorsize"
+- if test $? -eq 10; then
+- XCURSOR_THEME=breeze_cursors
+- export XCURSOR_THEME
+- elif test -n "$kcminputrc_mouse_cursortheme"; then
+- XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
+- export XCURSOR_THEME
++ if [ $? -eq 10 ]; then
++ export XCURSOR_THEME=breeze_cursors
++ elif [ -n "$kcminputrc_mouse_cursortheme" ]; then
++ export XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
+ fi
+- if test -n "$kcminputrc_mouse_cursorsize"; then
+- XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
+- export XCURSOR_SIZE
++ if [ -n "$kcminputrc_mouse_cursorsize" ]; then
++ export XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
+ fi
+ fi
+
+-if test "$kcmfonts_general_forcefontdpi" -ne 0; then
+- xrdb -quiet -merge -nocpp <<EOF
++if [ "${kcmfonts_general_forcefontdpi:-0}" -ne 0 ]; then
++ @NIXPKGS_XRDB@ -quiet -merge -nocpp <<EOF
+ Xft.dpi: $kcmfonts_general_forcefontdpi
+ EOF
+ fi
+@@ -132,11 +229,11 @@ dl=$DESKTOP_LOCKED
+ unset DESKTOP_LOCKED # Don't want it in the environment
+
+ ksplash_pid=
+-if test -z "$dl"; then
++if [ -z "$dl" ]; then
+ # the splashscreen and progress indicator
+ case "$ksplashrc_ksplash_engine" in
+ KSplashQML)
+- ksplash_pid=`ksplashqml "${ksplashrc_ksplash_theme}" --pid`
++ ksplash_pid=$(@CMAKE_INSTALL_FULL_BINDIR@/ksplashqml "${ksplashrc_ksplash_theme}" --pid)
+ ;;
+ None)
+ ;;
+@@ -145,27 +242,6 @@ if test -z "$dl"; then
+ esac
+ fi
+
+-# Source scripts found in <config locations>/plasma-workspace/env/*.sh
+-# (where <config locations> correspond to the system and user's configuration
+-# directory.
+-#
+-# This is where you can define environment variables that will be available to
+-# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
+-# or eval `gpg-agent --daemon`.
+-# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
+-#
+-# (see end of this file).
+-# For anything else (that doesn't set env vars, or that needs a window manager),
+-# better use the Autostart folder.
+-
+-scriptpath=`echo "$configDir:$sysConfigDirs" | tr ':' '\n'`
+-
+-for prefix in `echo $scriptpath`; do
+- for file in "$prefix"/plasma-workspace/env/*.sh; do
+- test -r "$file" && . "$file" || true
+- done
+-done
+-
+ # Set a left cursor instead of the standard X11 "X" cursor, since I've heard
+ # from some users that they're confused and don't know what to do. This is
+ # especially necessary on slow machines, where starting KDE takes one or two
+@@ -221,44 +297,65 @@ export XDG_DATA_DIRS
+ #
+ KDE_FULL_SESSION=true
+ export KDE_FULL_SESSION
+-xprop -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
++@NIXPKGS_XPROP@ -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
+
+ KDE_SESSION_VERSION=5
+ export KDE_SESSION_VERSION
+-xprop -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
++@NIXPKGS_XPROP@ -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
+
+-KDE_SESSION_UID=`id -ru`
++KDE_SESSION_UID=$(@NIXPKGS_ID@ -ru)
+ export KDE_SESSION_UID
+
+ XDG_CURRENT_DESKTOP=KDE
+ export XDG_CURRENT_DESKTOP
+
++# Enforce xcb QPA. Helps switching between Wayland and X sessions.
++export QT_QPA_PLATFORM=xcb
++
++# Source scripts found in <config locations>/plasma-workspace/env/*.sh
++# (where <config locations> correspond to the system and user's configuration
++# directories, as identified by Qt's qtpaths, e.g. $HOME/.config
++# and /etc/xdg/ on Linux)
++#
++# This is where you can define environment variables that will be available to
++# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
++# or eval `gpg-agent --daemon`.
++# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
++#
++# (see end of this file).
++# For anything else (that doesn't set env vars, or that needs a window manager),
++# better use the Autostart folder.
++
++IFS=":" read -r -a scriptpath <<< $(@NIXPKGS_QTPATHS@ --paths GenericConfigLocation)
++# Add /env/ to the directory to locate the scripts to be sourced
++for prefix in "${scriptpath[@]}"; do
++ for file in "$prefix"/plasma-workspace/env/*.sh; do
++ if [ -r "$file" ]; then
++ . "$file"
++ fi
++ done
++done
++
+ # At this point all environment variables are set, let's send it to the DBus session server to update the activation environment
+-if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
+- dbus-update-activation-environment --systemd --all
+-else
+- @CMAKE_INSTALL_FULL_LIBEXECDIR@/ksyncdbusenv
+-fi
+-if test $? -ne 0; then
++
++if ! @NIXPKGS_DBUS_UPDATE_ACTIVATION_ENVIRONMENT@ --systemd --all; then
+ # Startup error
+ echo 'startkde: Could not sync environment to dbus.' 1>&2
+ test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+- xmessage -geometry 500x100 "Could not sync environment to dbus."
+ exit 1
+ fi
+
+ # We set LD_BIND_NOW to increase the efficiency of kdeinit.
+ # kdeinit unsets this variable before loading applications.
+-LD_BIND_NOW=true @CMAKE_INSTALL_FULL_LIBEXECDIR_KF5@/start_kdeinit_wrapper --kded +kcminit_startup
++LD_BIND_NOW=true @NIXPKGS_START_KDEINIT_WRAPPER@ --kded +kcminit_startup
+ if test $? -ne 0; then
+ # Startup error
+ echo 'startkde: Could not start kdeinit5. Check your installation.' 1>&2
+ test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+- xmessage -geometry 500x100 "Could not start kdeinit5. Check your installation."
+ exit 1
+ fi
+
+-qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
++@NIXPKGS_QDBUS@ org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
+
+ # finally, give the session control to the session manager
+ # see kdebase/ksmserver for the description of the rest of the startup sequence
+@@ -270,12 +367,16 @@ qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
+ # We only check for 255 which means that the ksmserver process could not be
+ # started, any problems thereafter, e.g. ksmserver failing to initialize,
+ # will remain undetected.
+-test -n "$KDEWM" && KDEWM="--windowmanager $KDEWM"
++if [ -n "$KDEWM" ]; then
++ KDEWM="--windowmanager $KDEWM"
++fi
+ # If the session should be locked from the start (locked autologin),
+ # lock now and do the rest of the KDE startup underneath the locker.
+ KSMSERVEROPTIONS=""
+-test -n "$dl" && KSMSERVEROPTIONS=" --lockscreen"
+-kwrapper5 @CMAKE_INSTALL_FULL_BINDIR@/ksmserver $KDEWM $KSMSERVEROPTIONS
++if [ -n "$dl" ]; then
++ KSMSERVEROPTIONS=" --lockscreen"
++fi
++@NIXPKGS_KWRAPPER5@ @CMAKE_INSTALL_FULL_BINDIR@/ksmserver $KDEWM $KSMSERVEROPTIONS
+ if test $? -eq 255; then
+ # Startup error
+ echo 'startkde: Could not start ksmserver. Check your installation.' 1>&2
+@@ -286,36 +387,36 @@ fi
+ #Anything after here is logout
+ #It is not called after shutdown/restart
+
+-wait_drkonqi=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Enabled --default true`
++wait_drkonqi=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Enabled --default true)
+
+-if test x"$wait_drkonqi"x = x"true"x ; then
++if [ x"$wait_drkonqi"x = x"true"x ]; then
+ # wait for remaining drkonqi instances with timeout (in seconds)
+- wait_drkonqi_timeout=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Timeout --default 900`
++ wait_drkonqi_timeout=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Timeout --default 900)
+ wait_drkonqi_counter=0
+- while qdbus | grep "^[^w]*org.kde.drkonqi" > /dev/null ; do
++ while @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ -q "^[^w]*org.kde.drkonqi" ; do
+ sleep 5
+ wait_drkonqi_counter=$((wait_drkonqi_counter+5))
+- if test "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ; then
++ if [ "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ]; then
+ # ask remaining drkonqis to die in a graceful way
+- qdbus | grep 'org.kde.drkonqi-' | while read address ; do
+- qdbus "$address" "/MainApplication" "quit"
+- done
+- break
++ @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ 'org.kde.drkonqi-' | while read address ; do
++ @NIXPKGS_QDBUS@ "$address" "/MainApplication" "quit"
+ fi
+ done
+ fi
+
+ echo 'startkde: Shutting down...' 1>&2
+ # just in case
+-test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
++if [ -n "$ksplash_pid" ]; then
++ kill "$ksplash_pid" 2>/dev/null
++fi
+
+ # Clean up
+-kdeinit5_shutdown
++@NIXPKGS_KDEINIT5_SHUTDOWN@
+
+ unset KDE_FULL_SESSION
+-xprop -root -remove KDE_FULL_SESSION
++@NIXPKGS_XPROP@ -root -remove KDE_FULL_SESSION
+ unset KDE_SESSION_VERSION
+-xprop -root -remove KDE_SESSION_VERSION
++@NIXPKGS_XPROP@ -root -remove KDE_SESSION_VERSION
+ unset KDE_SESSION_UID
+
+ echo 'startkde: Done.' 1>&2
+diff --git a/startkde/startplasma.cmake b/startkde/startplasma.cmake
+index 1fe41c5..11757df 100644
+--- a/startkde/startplasma.cmake
++++ b/startkde/startplasma.cmake
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+ #
+-# DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
++# NIXPKGS Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
+ #
+
+ # Boot sequence:
+@@ -17,28 +17,26 @@
+ #
+ # * Then ksmserver is started which takes control of the rest of the startup sequence
+
+-# We need to create config folder so we can write startupconfigkeys
+-if [ ${XDG_CONFIG_HOME} ]; then
+- configDir=$XDG_CONFIG_HOME;
+-else
+- configDir=${HOME}/.config; #this is the default, http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
++export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
++if [ -r "$XDG_CONFIG_HOME/startupconfig" ]; then
++ . "$XDG_CONFIG_HOME/startupconfig"
+ fi
+
+-[ -r $configDir/startupconfig ] && . $configDir/startupconfig
+-
+-xrdb -quiet -merge -nocpp <<EOF
++if [ "$kcmfonts_general_forcefontdpi" -ne 0 ]; then
++ @NIXPKGS_XRDB@ -quiet -merge -nocpp <<EOF
+ Xft.dpi: $QT_WAYLAND_FORCE_DPI
+ EOF
++fi
+
+ dl=$DESKTOP_LOCKED
+ unset DESKTOP_LOCKED # Don't want it in the environment
+
+ ksplash_pid=
+-if test -z "$dl"; then
++if [ -z "$dl" ]; then
+ # the splashscreen and progress indicator
+ case "$ksplashrc_ksplash_engine" in
+ KSplashQML)
+- ksplash_pid=`ksplashqml "${ksplashrc_ksplash_theme}" --pid`
++ ksplash_pid=$(@CMAKE_INSTALL_FULL_BINDIR@/ksplashqml "${ksplashrc_ksplash_theme}" --pid)
+ ;;
+ None)
+ ;;
+@@ -58,23 +56,13 @@ export PLASMA_USE_QT_SCALING=1
+ # If the user has overwritten fonts, the cursor font may be different now
+ # so don't move this up.
+ #
+-xsetroot -cursor_name left_ptr
+-
+-# Get Ghostscript to look into user's KDE fonts dir for additional Fontmap
+-usr_fdir=$HOME/.fonts
+-if test -n "$GS_LIB" ; then
+- GS_LIB=$usr_fdir:$GS_LIB
+- export GS_LIB
+-else
+- GS_LIB=$usr_fdir
+- export GS_LIB
+-fi
++@NIXPKGS_XSETROOT@ -cursor_name left_ptr
+
+ echo 'startplasma: Starting up...' 1>&2
+
+ # export our session variables to the Xwayland server
+-xprop -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
+-xprop -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
++@NIXPKGS_XPROP@ -root -f KDE_FULL_SESSION 8t -set KDE_FULL_SESSION true
++@NIXPKGS_XPROP@ -root -f KDE_SESSION_VERSION 32c -set KDE_SESSION_VERSION 5
+
+ # At this point all environment variables are set, let's send it to the DBus session server to update the activation environment
+ if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
+@@ -90,16 +78,15 @@ fi
+
+ # We set LD_BIND_NOW to increase the efficiency of kdeinit.
+ # kdeinit unsets this variable before loading applications.
+-LD_BIND_NOW=true @CMAKE_INSTALL_FULL_LIBEXECDIR_KF5@/start_kdeinit_wrapper --kded +kcminit_startup
++LD_BIND_NOW=true @NIXPKGS_START_KDEINIT_WRAPPER@ --kded +kcminit_startup
+ if test $? -ne 0; then
+ # Startup error
+ echo 'startplasma: Could not start kdeinit5. Check your installation.' 1>&2
+ test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
+- xmessage -geometry 500x100 "Could not start kdeinit5. Check your installation."
+ exit 1
+ fi
+
+-qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
++@NIXPKGS_QDBUS@ org.kde.KSplash /KSplash org.kde.KSplash.setStage kinit &
+
+ # finally, give the session control to the session manager
+ # see kdebase/ksmserver for the description of the rest of the startup sequence
+@@ -125,19 +112,19 @@ fi
+ #Anything after here is logout
+ #It is not called after shutdown/restart
+
+-wait_drkonqi=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Enabled --default true`
++wait_drkonqi=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Enabled --default true)
+
+-if test x"$wait_drkonqi"x = x"true"x ; then
++if [ x"$wait_drkonqi"x = x"true"x ]; then
+ # wait for remaining drkonqi instances with timeout (in seconds)
+- wait_drkonqi_timeout=`kreadconfig5 --file startkderc --group WaitForDrKonqi --key Timeout --default 900`
++ wait_drkonqi_timeout=$(@NIXPKGS_KREADCONFIG5@ --file startkderc --group WaitForDrKonqi --key Timeout --default 900)
+ wait_drkonqi_counter=0
+- while qdbus | grep "^[^w]*org.kde.drkonqi" > /dev/null ; do
++ while @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ -q "^[^w]*org.kde.drkonqi" ; do
+ sleep 5
+ wait_drkonqi_counter=$((wait_drkonqi_counter+5))
+- if test "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ; then
++ if [ "$wait_drkonqi_counter" -ge "$wait_drkonqi_timeout" ]; then
+ # ask remaining drkonqis to die in a graceful way
+- qdbus | grep 'org.kde.drkonqi-' | while read address ; do
+- qdbus "$address" "/MainApplication" "quit"
++ @NIXPKGS_QDBUS@ | @NIXPKGS_GREP@ 'org.kde.drkonqi-' | while read address ; do
++ @NIXPKGS_QDBUS@ "$address" "/MainApplication" "quit"
+ done
+ break
+ fi
+@@ -146,15 +133,17 @@ fi
+
+ echo 'startplasma: Shutting down...' 1>&2
+ # just in case
+-test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
++if [ -n "$ksplash_pid" ]; then
++ "$ksplash_pid" 2>/dev/null
++fi
+
+ # Clean up
+-kdeinit5_shutdown
++@NIXPKGS_KDEINIT5_SHUTDOWN@
+
+ unset KDE_FULL_SESSION
+-xprop -root -remove KDE_FULL_SESSION
++@NIXPKGS_XPROP@ -root -remove KDE_FULL_SESSION
+ unset KDE_SESSION_VERSION
+-xprop -root -remove KDE_SESSION_VERSION
++@NIXPKGS_XPROP@ -root -remove KDE_SESSION_VERSION
+ unset KDE_SESSION_UID
+
+ echo 'startplasma: Done.' 1>&2
+diff --git a/startkde/startplasmacompositor.cmake b/startkde/startplasmacompositor.cmake
+index dcb473a..0988740 100644
+--- a/startkde/startplasmacompositor.cmake
++++ b/startkde/startplasmacompositor.cmake
+@@ -1,118 +1,174 @@
+ #!/bin/sh
+ #
+-# DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
++# NIXPKGS Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
+ #
+
+-# We need to create config folder so we can write startupconfigkeys
+-if [ ${XDG_CONFIG_HOME} ]; then
+- configDir=$XDG_CONFIG_HOME;
+-else
+- configDir=${HOME}/.config; #this is the default, http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
++# we have to unset this for Darwin since it will screw up KDE's dynamic-loading
++unset DYLD_FORCE_FLAT_NAMESPACE
++
++export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
++@NIXPKGS_MKDIR@ -p "$XDG_CONFIG_HOME"
++
++# The KDE icon cache is supposed to update itself
++# automatically, but it uses the timestamp on the icon
++# theme directory as a trigger. Since in Nix the
++# timestamp is always the same, this doesn't work. So as
++# a workaround, nuke the icon cache on login. This isn't
++# perfect, since it may require logging out after
++# installing new applications to update the cache.
++# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
++rm -fv $HOME/.cache/icon-cache.kcache
++
++# xdg-desktop-settings generates this empty file but
++# it makes kbuildsyscoca5 fail silently. To fix this
++# remove that menu if it exists.
++rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu
++
++# Remove the kbuildsyscoca5 cache. It will be regenerated immediately after.
++# This is necessary for kbuildsyscoca5 to recognize that software that has been removed.
++rm -fv $HOME/.cache/ksycoca*
++
++# Qt writes a weird ‘libraryPath’ line to
++# ~/.config/Trolltech.conf that causes the KDE plugin
++# paths of previous KDE invocations to be searched.
++# Obviously using mismatching KDE libraries is potentially
++# disastrous, so here we nuke references to the Nix store
++# in Trolltech.conf. A better solution would be to stop
++# Qt from doing this wackiness in the first place.
++if [ -e $XDG_CONFIG_HOME/Trolltech.conf ]; then
++ @NIXPKGS_SED@ -e '/nix\\store\|nix\/store/ d' -i $XDG_CONFIG_HOME/Trolltech.conf
++fi
++
++@NIXPKGS_KBUILDSYCOCA5@
++
++# Set the default GTK 2 theme
++gtkrc2="$HOME/.gtkrc-2.0"
++breeze_gtkrc2="/run/current-system/sw/share/themes/Breeze/gtk-2.0/gtkrc"
++if ! [ -e "$gtkrc2" ] && [ -e "$breeze_gtkrc2" ]; then
++ cat >"$gtkrc2" <<EOF
++# Default GTK+ 2 config for NixOS KDE 5
++include "$breeze_gtkrc2"
++style "user-font"
++{
++ font_name="Sans Serif Regular"
++}
++widget_class "*" style "user-font"
++gtk-font-name="Sans Serif Regular 10"
++gtk-theme-name="Breeze"
++gtk-icon-theme-name="breeze"
++gtk-fallback-icon-theme="hicolor"
++gtk-cursor-theme-name="breeze_cursors"
++gtk-toolbar-style=GTK_TOOLBAR_ICONS
++gtk-menu-images=1
++gtk-button-images=1
++EOF
+ fi
+ sysConfigDirs=${XDG_CONFIG_DIRS:-/etc/xdg}
+
+-# We need to create config folder so we can write startupconfigkeys
+-mkdir -p $configDir
++# Set the default GTK 3 theme
++gtk3_settings="$XDG_CONFIG_HOME/gtk-3.0/settings.ini"
++breeze_gtk3="/run/current-system/sw/share/themes/Breeze/gtk-3.0"
++if ! [ -e "$gtk3_settings" ] && [ -e "$breeze_gtk" ]; then
++ mkdir -p $(dirname "$gtk3_settings")
++ cat >"$gtk3_settings" <<EOF
++[Settings]
++gtk-font-name=Sans Serif Regular 10
++gtk-theme-name=Breeze
++gtk-icon-theme-name=breeze
++gtk-fallback-icon-theme=hicolor
++gtk-cursor-theme-name=breeze_cursors
++gtk-toolbar-style=GTK_TOOLBAR_ICONS
++gtk-menu-images=1
++gtk-button-images=1
++EOF
++fi
++
++kcminputrc="$XDG_CONFIG_HOME/kcminputrc"
++if ! [ -e "$kcminputrc" ]; then
++ cat >"$kcminputrc" <<EOF
++[Mouse]
++cursorTheme=breeze_cursors
++cursorSize=0
++EOF
++fi
+
+ #This is basically setting defaults so we can use them with kstartupconfig5
+-cat >$configDir/startupconfigkeys <<EOF
++cat >"$XDG_CONFIG_HOME/startupconfigkeys" <<EOF
+ kcminputrc Mouse cursorTheme 'breeze_cursors'
+ kcminputrc Mouse cursorSize ''
+-ksplashrc KSplash Theme Breeze
++ksplashrc KSplash Theme org.kde.breeze.desktop
+ ksplashrc KSplash Engine KSplashQML
+-kcmfonts General forceFontDPIWayland 0
++kdeglobals KScreen ScreenScaleFactors ''
++kcmfonts General forceFontDPI 0
++kcmfonts General dontChangeAASettings true
+ EOF
+
+ # preload the user's locale on first start
+-plasmalocalerc=$configDir/plasma-localerc
+-test -f $plasmalocalerc || {
+-cat >$plasmalocalerc <<EOF
++plasmalocalerc="$XDG_CONFIG_HOME/plasma-localerc"
++if ! [ -f "$plasmalocalerc" ]; then
++ cat >"$plasmalocalerc" <<EOF
+ [Formats]
+ LANG=$LANG
+ EOF
+-}
++fi
+
+ # export LC_* variables set by kcmshell5 formats into environment
+ # so it can be picked up by QLocale and friends.
+-exportformatssettings=$configDir/plasma-locale-settings.sh
+-test -f $exportformatssettings && {
+- . $exportformatssettings
+-}
++exportformatssettings="$XDG_CONFIG_HOME/plasma-locale-settings.sh"
++if [ -r "$exportformatssettings" ]; then
++ . "$exportformatssettings"
++fi
+
+ # Write a default kdeglobals file to set up the font
+-kdeglobalsfile=$configDir/kdeglobals
+-test -f $kdeglobalsfile || {
+-cat >$kdeglobalsfile <<EOF
++kdeglobalsfile="$XDG_CONFIG_HOME/kdeglobals"
++if ! [ -f "$kdeglobalsfile" ]; then
++ cat >"$kdeglobalsfile" <<EOF
+ [General]
+-XftAntialias=true
+-XftHintStyle=hintmedium
+-XftSubPixel=none
++fixed=Monospace,10,-1,5,50,0,0,0,0,0,Regular
++font=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
++menuFont=Sans Serif,10,-1,5,50,0,0,0,0,0,Regular
++smallestReadableFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
++toolBarFont=Sans Serif,8,-1,5,50,0,0,0,0,0,Regular
++
++[WM]
++activeFont=Noto Sans,12,-1,5,50,0,0,0,0,0,Bold
+ EOF
+-}
+-
+-# Make sure the Oxygen font is installed
+-# This is necessary for setups where CMAKE_INSTALL_PREFIX
+-# is not in /usr. fontconfig looks in /usr, ~/.fonts and
+-# $XDG_DATA_HOME for fonts. In this case, we symlink the
+-# Oxygen font under ${XDG_DATA_HOME} and make it known to
+-# fontconfig
+-
+-usr_share="/usr/share"
+-install_share="@KDE_INSTALL_FULL_DATADIR@"
+-
+-if [ ! $install_share = $usr_share ]; then
+-
+- if [ ${XDG_DATA_HOME} ]; then
+- fontsDir="${XDG_DATA_HOME}/fonts"
+- else
+- fontsDir="${HOME}/.fonts"
+- fi
+-
+- test -d $fontsDir || {
+- mkdir -p $fontsDir
+- }
+-
+- oxygenDir=$fontsDir/truetype/oxygen
+- prefixDir="@KDE_INSTALL_FULL_DATADIR@/fonts/truetype/oxygen"
+-
+- # if the oxygen dir doesn't exist, create a symlink to be sure that the
+- # Oxygen font is available to the user
+- test -d $oxygenDir || test -d $prefixDir && {
+- test -h $oxygenDir || ln -s $prefixDir $oxygenDir && fc-cache $oxygenDir
+- }
+ fi
+
+-kstartupconfig5
++@CMAKE_INSTALL_FULL_BINDIR@/kstartupconfig5
+ returncode=$?
+ if test $returncode -ne 0; then
+ exit 1
+ fi
+-[ -r $configDir/startupconfig ] && . $configDir/startupconfig
++if [ -r "$XDG_CONFIG_HOME/startupconfig" ]; then
++ . "$XDG_CONFIG_HOME/startupconfig"
++fi
+
+ #Manually disable auto scaling because we are scaling above
+ #otherwise apps that manually opt in for high DPI get auto scaled by the developer AND scaled by the wl_output
+ export QT_AUTO_SCREEN_SCALE_FACTOR=0
+
+-# XCursor mouse theme needs to be applied here to work even for kded or ksmserver
+-if test -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ; then
+- @EXPORT_XCURSOR_PATH@
++XCURSOR_PATH=~/.icons
++IFS=":" read -r -a xdgDirs <<< "$XDG_DATA_DIRS"
++for xdgDir in "${xdgDirs[@]}"; do
++ XCURSOR_PATH="$XCURSOR_PATH:$xdgDir/icons"
++done
++export XCURSOR_PATH
+
+- # TODO: is kapplymousetheme a core app?
++# XCursor mouse theme needs to be applied here to work even for kded or ksmserver
++if [ -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ]; then
+ #kapplymousetheme "$kcminputrc_mouse_cursortheme" "$kcminputrc_mouse_cursorsize"
+- if test $? -eq 10; then
+- XCURSOR_THEME=breeze_cursors
+- export XCURSOR_THEME
+- elif test -n "$kcminputrc_mouse_cursortheme"; then
+- XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
+- export XCURSOR_THEME
++ if [ $? -eq 10 ]; then
++ export XCURSOR_THEME=breeze_cursors
++ elif [ -n "$kcminputrc_mouse_cursortheme" ]; then
++ export XCURSOR_THEME="$kcminputrc_mouse_cursortheme"
+ fi
+- if test -n "$kcminputrc_mouse_cursorsize"; then
+- XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
+- export XCURSOR_SIZE
++ if [ -n "$kcminputrc_mouse_cursorsize" ]; then
++ export XCURSOR_SIZE="$kcminputrc_mouse_cursorsize"
+ fi
+ fi
+
+-if test "$kcmfonts_general_forcefontdpiwayland" -ne 0; then
++if [ "${kcmfonts_general_forcefontdpiwayland:-0}" -ne 0 ]; then
+ export QT_WAYLAND_FORCE_DPI=$kcmfonts_general_forcefontdpiwayland
+ else
+ export QT_WAYLAND_FORCE_DPI=96
+@@ -120,12 +176,12 @@ fi
+
+ # Get a property value from org.freedesktop.locale1
+ queryLocale1() {
+- qdbus --system org.freedesktop.locale1 /org/freedesktop/locale1 "$1"
++ @NIXPKGS_QDBUS@ --system org.freedesktop.locale1 /org/freedesktop/locale1 "$1"
+ }
+
+ # Query whether org.freedesktop.locale1 is available. If it is, try to
+ # set XKB_DEFAULT_{MODEL,LAYOUT,VARIANT,OPTIONS} accordingly.
+-if qdbus --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then
++if @NIXPKGS_QDBUS@ --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then
+ # Do not overwrite existing values. There is no point in setting only some
+ # of them as then they would not match anymore.
+ if [ -z "${XKB_DEFAULT_MODEL}" -a -z "${XKB_DEFAULT_LAYOUT}" -a \
+@@ -141,41 +197,10 @@ if qdbus --system org.freedesktop.locale1 >/dev/null 2>/dev/null; then
+ fi
+ fi
+
+-# Source scripts found in <config locations>/plasma-workspace/env/*.sh
+-# (where <config locations> correspond to the system and user's configuration
+-# directories, as identified by Qt's qtpaths, e.g. $HOME/.config
+-# and /etc/xdg/ on Linux)
+-#
+-# This is where you can define environment variables that will be available to
+-# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
+-# or eval `gpg-agent --daemon`.
+-# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
+-#
+-# (see end of this file).
+-# For anything else (that doesn't set env vars, or that needs a window manager),
+-# better use the Autostart folder.
+-
+-scriptpath=`echo "$configDir:$sysConfigDirs" | tr ':' '\n'`
+-
+-for prefix in `echo $scriptpath`; do
+- for file in "$prefix"/plasma-workspace/env/*.sh; do
+- test -r "$file" && . "$file" || true
+- done
+-done
+-
+ echo 'startplasmacompositor: Starting up...' 1>&2
+
+-# Make sure that the KDE prefix is first in XDG_DATA_DIRS and that it's set at all.
+-# The spec allows XDG_DATA_DIRS to be not set, but X session startup scripts tend
+-# to set it to a list of paths *not* including the KDE prefix if it's not /usr or
+-# /usr/local.
+-if test -z "$XDG_DATA_DIRS"; then
+-XDG_DATA_DIRS="@KDE_INSTALL_FULL_DATADIR@:/usr/share:/usr/local/share"
+-fi
+-export XDG_DATA_DIRS
+-
+ # Make sure that D-Bus is running
+-if qdbus >/dev/null 2>/dev/null; then
++if @NIXPKGS_QDBUS@ >/dev/null 2>/dev/null; then
+ : # ok
+ else
+ echo 'startplasmacompositor: Could not start D-Bus. Can you call qdbus?' 1>&2
+@@ -212,7 +237,7 @@ export KDE_FULL_SESSION
+ KDE_SESSION_VERSION=5
+ export KDE_SESSION_VERSION
+
+-KDE_SESSION_UID=`id -ru`
++KDE_SESSION_UID=$(@NIXPKGS_ID@ -ru)
+ export KDE_SESSION_UID
+
+ XDG_CURRENT_DESKTOP=KDE
+@@ -221,20 +246,41 @@ export XDG_CURRENT_DESKTOP
+ XDG_SESSION_TYPE=wayland
+ export XDG_SESSION_TYPE
+
++# Source scripts found in <config locations>/plasma-workspace/env/*.sh
++# (where <config locations> correspond to the system and user's configuration
++# directories, as identified by Qt's qtpaths, e.g. $HOME/.config
++# and /etc/xdg/ on Linux)
++#
++# This is where you can define environment variables that will be available to
++# all KDE programs, so this is where you can run agents using e.g. eval `ssh-agent`
++# or eval `gpg-agent --daemon`.
++# Note: if you do that, you should also put "ssh-agent -k" as a shutdown script
++#
++# (see end of this file).
++# For anything else (that doesn't set env vars, or that needs a window manager),
++# better use the Autostart folder.
++
++IFS=":" read -r -a scriptpath <<< $(@NIXPKGS_QTPATHS@ --paths GenericConfigLocation)
++# Add /env/ to the directory to locate the scripts to be sourced
++for prefix in "${scriptpath[@]}"; do
++ for file in "$prefix"/plasma-workspace/env/*.sh; do
++ if [ -r "$file" ]; then
++ . "$file"
++ fi
++ done
++done
++
+ # kwin_wayland can possibly also start dbus-activated services which need env variables.
+ # In that case, the update in startplasma might be too late.
+-if which dbus-update-activation-environment >/dev/null 2>/dev/null ; then
+- dbus-update-activation-environment --systemd --all
+-else
+- @CMAKE_INSTALL_FULL_LIBEXECDIR@/ksyncdbusenv
+-fi
+-if test $? -ne 0; then
+- # Startup error
+- echo 'startplasmacompositor: Could not sync environment to dbus.' 1>&2
+- exit 1
++if ! @NIXPKGS_DBUS_UPDATE_ACTIVATION_ENVIRONMENT@ --systemd --all; then
++ # Startup error
++ echo 'startkde: Could not sync environment to dbus.' 1>&2
++ test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
++ echo 'startplasmacompositor: Could not sync environment to dbus.' 1>&2
++ exit 1
+ fi
+
+-@KWIN_WAYLAND_BIN_PATH@ --xwayland --libinput --exit-with-session=@CMAKE_INSTALL_FULL_LIBEXECDIR@/startplasma
++@KWIN_WAYLAND_BIN_PATH@ --xwayland --libinput --exit-with-session=@NIXPKGS_STARTPLASMA@
+
+ echo 'startplasmacompositor: Shutting down...' 1>&2
+
+--
+2.19.2
diff --git a/nixpkgs/pkgs/desktops/plasma-5/polkit-kde-agent.nix b/nixpkgs/pkgs/desktops/plasma-5/polkit-kde-agent.nix
new file mode 100644
index 00000000000..c25b3d2744b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/polkit-kde-agent.nix
@@ -0,0 +1,15 @@
+{
+ mkDerivation, extra-cmake-modules,
+ kcoreaddons, kconfig, kcrash, kdbusaddons, ki18n, kiconthemes, knotifications,
+ kwidgetsaddons, kwindowsystem, polkit-qt
+}:
+
+mkDerivation {
+ name = "polkit-kde-agent";
+ nativeBuildInputs = [ extra-cmake-modules ];
+ propagatedBuildInputs = [
+ kdbusaddons kwidgetsaddons kcoreaddons kcrash kconfig ki18n kiconthemes
+ knotifications kwindowsystem polkit-qt
+ ];
+ outputs = [ "out" "dev" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/powerdevil.nix b/nixpkgs/pkgs/desktops/plasma-5/powerdevil.nix
new file mode 100644
index 00000000000..65fc5446c16
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/powerdevil.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation,
+ extra-cmake-modules, kdoctools,
+ bluez-qt, kactivities, kauth, kconfig, kdbusaddons, kdelibs4support,
+ kglobalaccel, ki18n, kidletime, kio, knotifyconfig, kwayland, libkscreen,
+ networkmanager-qt, plasma-workspace, qtx11extras, solid, udev
+}:
+
+mkDerivation {
+ name = "powerdevil";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kconfig kdbusaddons knotifyconfig solid udev bluez-qt kactivities kauth
+ kdelibs4support kglobalaccel ki18n kio kidletime kwayland libkscreen
+ networkmanager-qt plasma-workspace qtx11extras
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/sddm-kcm.nix b/nixpkgs/pkgs/desktops/plasma-5/sddm-kcm.nix
new file mode 100644
index 00000000000..6becf3bf420
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/sddm-kcm.nix
@@ -0,0 +1,16 @@
+{
+ mkDerivation, extra-cmake-modules, shared-mime-info,
+ libpthreadstubs, libXcursor, libXdmcp,
+ qtquickcontrols2, qtx11extras,
+ karchive, ki18n, kio, knewstuff
+}:
+
+mkDerivation {
+ name = "sddm-kcm";
+ nativeBuildInputs = [ extra-cmake-modules shared-mime-info ];
+ buildInputs = [
+ libpthreadstubs libXcursor libXdmcp
+ qtquickcontrols2 qtx11extras
+ karchive ki18n kio knewstuff
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/srcs.nix b/nixpkgs/pkgs/desktops/plasma-5/srcs.nix
new file mode 100644
index 00000000000..f299ed953de
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/srcs.nix
@@ -0,0 +1,365 @@
+# DO NOT EDIT! This file is generated automatically by fetch-kde-qt.sh
+{ fetchurl, mirror }:
+
+{
+ bluedevil = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/bluedevil-5.16.5.tar.xz";
+ sha256 = "60ac3471d30cb113b1959eacdaa1f4898f04f779f94a35dbca00993cda4ea464";
+ name = "bluedevil-5.16.5.tar.xz";
+ };
+ };
+ breeze = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/breeze-5.16.5.tar.xz";
+ sha256 = "09225021a2cf396e74cabe692b0a5dcf9a12f0b47f02fb14df6ccc9db01f2e6b";
+ name = "breeze-5.16.5.tar.xz";
+ };
+ };
+ breeze-grub = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/breeze-grub-5.16.5.tar.xz";
+ sha256 = "ce73297350e7b79b04aa8ba44594e8eca2d37c0342eb331bd5d31679f3887878";
+ name = "breeze-grub-5.16.5.tar.xz";
+ };
+ };
+ breeze-gtk = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/breeze-gtk-5.16.5.tar.xz";
+ sha256 = "d9849ecf6c2fc85fde76912410ab36c46ca65b96d80b4e51819ca35015a88098";
+ name = "breeze-gtk-5.16.5.tar.xz";
+ };
+ };
+ breeze-plymouth = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/breeze-plymouth-5.16.5.tar.xz";
+ sha256 = "bb10d2f0185181e6f2fe8e3b85415dfcce6069595e0074b182688c6f567dd0b0";
+ name = "breeze-plymouth-5.16.5.tar.xz";
+ };
+ };
+ discover = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/discover-5.16.5.tar.xz";
+ sha256 = "26c47a5c0f59a31f37da85e894a926c76805b66f91dde8ba6d2de8015842d5c1";
+ name = "discover-5.16.5.tar.xz";
+ };
+ };
+ drkonqi = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/drkonqi-5.16.5.tar.xz";
+ sha256 = "b4ae1518108c2d3ccbc533708801b52b83b7e9efd6eed9f1ee9d67936b9e78ff";
+ name = "drkonqi-5.16.5.tar.xz";
+ };
+ };
+ kactivitymanagerd = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kactivitymanagerd-5.16.5.tar.xz";
+ sha256 = "e35dbf7aae8a7b7f21b2304935cad96881af558a7c9d947f0114093038b1c4bc";
+ name = "kactivitymanagerd-5.16.5.tar.xz";
+ };
+ };
+ kde-cli-tools = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kde-cli-tools-5.16.5.tar.xz";
+ sha256 = "bc82b159d3c9a23f0ecb47a8314b645041b01692887a3be0ef0582d54f926de2";
+ name = "kde-cli-tools-5.16.5.tar.xz";
+ };
+ };
+ kdecoration = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kdecoration-5.16.5.tar.xz";
+ sha256 = "2b8c7b7cf114d0eff4ec842009cda264d8cf1254ec4bf65868b6d26f263829bb";
+ name = "kdecoration-5.16.5.tar.xz";
+ };
+ };
+ kde-gtk-config = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kde-gtk-config-5.16.5.tar.xz";
+ sha256 = "f78abf129aaa7afac2c7a71105b36b9553a975bbcb89ec65a0166099d1cca8c1";
+ name = "kde-gtk-config-5.16.5.tar.xz";
+ };
+ };
+ kdeplasma-addons = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kdeplasma-addons-5.16.5.tar.xz";
+ sha256 = "a4737a54b75143053a9f8a5bc28c608f843c524872c665d4e5a65bd2853e1e00";
+ name = "kdeplasma-addons-5.16.5.tar.xz";
+ };
+ };
+ kgamma5 = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kgamma5-5.16.5.tar.xz";
+ sha256 = "838fabf4312f022ee3df5bba940c0c73e26260cfee39235c1ba8da8a2e61bfa0";
+ name = "kgamma5-5.16.5.tar.xz";
+ };
+ };
+ khotkeys = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/khotkeys-5.16.5.tar.xz";
+ sha256 = "e7b866b5249ff7c5860a5a222dca79691ca1f09af176f786021fbbadbd718c8c";
+ name = "khotkeys-5.16.5.tar.xz";
+ };
+ };
+ kinfocenter = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kinfocenter-5.16.5.tar.xz";
+ sha256 = "e3bbc5e2baedf35dc8750c99e18c115b651f2665218a105c08177bc5250eb9b1";
+ name = "kinfocenter-5.16.5.tar.xz";
+ };
+ };
+ kmenuedit = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kmenuedit-5.16.5.tar.xz";
+ sha256 = "8e95b81b910e5e78689fc7d4427c813ba7d39426df24cf8606adb850913a19a4";
+ name = "kmenuedit-5.16.5.tar.xz";
+ };
+ };
+ kscreen = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kscreen-5.16.5.tar.xz";
+ sha256 = "ce35f554014cee819767180f0c9381d539e497edfb9c290b279fa78e9dea4bb0";
+ name = "kscreen-5.16.5.tar.xz";
+ };
+ };
+ kscreenlocker = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kscreenlocker-5.16.5.tar.xz";
+ sha256 = "5ed6fdeac9aaba014edf67c5f782fc210d58310d083afaa589d0ff1bb3e8e02d";
+ name = "kscreenlocker-5.16.5.tar.xz";
+ };
+ };
+ ksshaskpass = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/ksshaskpass-5.16.5.tar.xz";
+ sha256 = "78eaa38ebbf888a8905e9385173e7161335041d6d07720283ce6f3fa06426a33";
+ name = "ksshaskpass-5.16.5.tar.xz";
+ };
+ };
+ ksysguard = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/ksysguard-5.16.5.tar.xz";
+ sha256 = "5558977389cb1fac4a5ce52c9430b27d9d1ee92705ae1995d92bed5340477282";
+ name = "ksysguard-5.16.5.tar.xz";
+ };
+ };
+ kwallet-pam = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kwallet-pam-5.16.5.tar.xz";
+ sha256 = "4a12a8ed51973f9ea318a39a699523bcc99ae4e1cac932fccd19dedd45e758a8";
+ name = "kwallet-pam-5.16.5.tar.xz";
+ };
+ };
+ kwayland-integration = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kwayland-integration-5.16.5.tar.xz";
+ sha256 = "63724ecfb6db053ee949273979b393192309dbeed45b59bc193a605f90232282";
+ name = "kwayland-integration-5.16.5.tar.xz";
+ };
+ };
+ kwin = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kwin-5.16.5.tar.xz";
+ sha256 = "7ff0e114e323ff7e10d78a157f8242b1d3cfa03967898d9e3fd3c039b7c9918b";
+ name = "kwin-5.16.5.tar.xz";
+ };
+ };
+ kwrited = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/kwrited-5.16.5.tar.xz";
+ sha256 = "4b122099b0a362fc409b50b7523689ba8a112508dad26f58753c6b648e7c5313";
+ name = "kwrited-5.16.5.tar.xz";
+ };
+ };
+ libkscreen = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/libkscreen-5.16.5.tar.xz";
+ sha256 = "fd2d1e849315ac745ecfe757d6b2c5cc6486e0be5397f686dae3916c0252c938";
+ name = "libkscreen-5.16.5.tar.xz";
+ };
+ };
+ libksysguard = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/libksysguard-5.16.5.tar.xz";
+ sha256 = "f09b99737a937df890ecdd2a33720b6cba3c79fc8bc17ef1470572748a6e1976";
+ name = "libksysguard-5.16.5.tar.xz";
+ };
+ };
+ milou = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/milou-5.16.5.tar.xz";
+ sha256 = "bfcdba29262dda9f386ee99132053ad5751194b2df8219899fcbb0b3699afcd5";
+ name = "milou-5.16.5.tar.xz";
+ };
+ };
+ oxygen = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/oxygen-5.16.5.tar.xz";
+ sha256 = "0e85dcd874d2e69aaa2d4eefc379289c7dd572437f53e42f1d6d260d97c2f8a2";
+ name = "oxygen-5.16.5.tar.xz";
+ };
+ };
+ plasma-browser-integration = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-browser-integration-5.16.5.tar.xz";
+ sha256 = "99269c7e27fddb0c075bff28a5afba41298dc8d28297d69f35f6bc30f3af1d35";
+ name = "plasma-browser-integration-5.16.5.tar.xz";
+ };
+ };
+ plasma-desktop = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-desktop-5.16.5.tar.xz";
+ sha256 = "49dc4c9eff5742eb52fc0d12c139c194eda837945389cd09f498a0c4c352a20f";
+ name = "plasma-desktop-5.16.5.tar.xz";
+ };
+ };
+ plasma-integration = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-integration-5.16.5.tar.xz";
+ sha256 = "635f109e7b59bb440c6be0c7a4baae70d2f44e659ab0522e170693b664e6d709";
+ name = "plasma-integration-5.16.5.tar.xz";
+ };
+ };
+ plasma-nm = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-nm-5.16.5.tar.xz";
+ sha256 = "b519429bd784ff2ede0bf10e1e943822ef08ea5cf85e901363fda36d32907460";
+ name = "plasma-nm-5.16.5.tar.xz";
+ };
+ };
+ plasma-pa = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-pa-5.16.5.tar.xz";
+ sha256 = "e029563d50cc6266a4a3e22574c33fef4670e1aaab18630eb30769e2167acc96";
+ name = "plasma-pa-5.16.5.tar.xz";
+ };
+ };
+ plasma-sdk = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-sdk-5.16.5.tar.xz";
+ sha256 = "1b05f0501309099f241ebae857c24b31bc4e61fde8bfc33e854d3a1dd3d37385";
+ name = "plasma-sdk-5.16.5.tar.xz";
+ };
+ };
+ plasma-tests = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-tests-5.16.5.tar.xz";
+ sha256 = "236a83c2caa99801b6db1debce53a6c7390087115899410a8139ad3b7268b7f7";
+ name = "plasma-tests-5.16.5.tar.xz";
+ };
+ };
+ plasma-vault = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-vault-5.16.5.tar.xz";
+ sha256 = "2bb40a80c35f3eaedc729013a8b6b76641cc74eca4fd171f1cda99237f83198c";
+ name = "plasma-vault-5.16.5.tar.xz";
+ };
+ };
+ plasma-workspace = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-workspace-5.16.5.tar.xz";
+ sha256 = "43364fe4e7ea10ad7b5b1d7af4f1baa1d8796b60692f2dfc0d58693f63e458ff";
+ name = "plasma-workspace-5.16.5.tar.xz";
+ };
+ };
+ plasma-workspace-wallpapers = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plasma-workspace-wallpapers-5.16.5.tar.xz";
+ sha256 = "ff6e0eac42c540c72556439e6477fb78be2dab456386218813cce021f82d42d9";
+ name = "plasma-workspace-wallpapers-5.16.5.tar.xz";
+ };
+ };
+ plymouth-kcm = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/plymouth-kcm-5.16.5.tar.xz";
+ sha256 = "db839c5fe9f6df882b95f436983c129cd553dd50e6cf1065c4410a91b20f1dcc";
+ name = "plymouth-kcm-5.16.5.tar.xz";
+ };
+ };
+ polkit-kde-agent = {
+ version = "1-5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/polkit-kde-agent-1-5.16.5.tar.xz";
+ sha256 = "6f7a17990d72bb25c93acae919b764f95ac226754209b2e177075fbe9251f95f";
+ name = "polkit-kde-agent-1-5.16.5.tar.xz";
+ };
+ };
+ powerdevil = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/powerdevil-5.16.5.tar.xz";
+ sha256 = "ac868f31df8c6bcc6b1c850efa0640695ba698caabefcb21fc0b0c3405712139";
+ name = "powerdevil-5.16.5.tar.xz";
+ };
+ };
+ sddm-kcm = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/sddm-kcm-5.16.5.tar.xz";
+ sha256 = "4220d18f1a04c767649bffee1aed6c2b2c12c60cd7d6ca6fabc3dbec1ec3f127";
+ name = "sddm-kcm-5.16.5.tar.xz";
+ };
+ };
+ systemsettings = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/systemsettings-5.16.5.tar.xz";
+ sha256 = "57944cf3f566cf5e25d5859f5716b2ad5dbd87de259f8d77efdfdd50a16fe1ec";
+ name = "systemsettings-5.16.5.tar.xz";
+ };
+ };
+ user-manager = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/user-manager-5.16.5.tar.xz";
+ sha256 = "e9df3ec2718de68b0b46d0b86f993fe450b236e13dda6219f350121f08f4c468";
+ name = "user-manager-5.16.5.tar.xz";
+ };
+ };
+ xdg-desktop-portal-kde = {
+ version = "5.16.5";
+ src = fetchurl {
+ url = "${mirror}/stable/plasma/5.16.5/xdg-desktop-portal-kde-5.16.5.tar.xz";
+ sha256 = "4884652b642fb6e8db791a04e9d42b5fec53f28cc0f0d26f49eb2bdaaa1709df";
+ name = "xdg-desktop-portal-kde-5.16.5.tar.xz";
+ };
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/systemsettings.nix b/nixpkgs/pkgs/desktops/plasma-5/systemsettings.nix
new file mode 100644
index 00000000000..9ff906f7974
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/systemsettings.nix
@@ -0,0 +1,17 @@
+{
+ mkDerivation, extra-cmake-modules, kdoctools,
+ kcmutils, kconfig, kdbusaddons, khtml, ki18n, kiconthemes, kio, kitemviews,
+ kservice, kwindowsystem, kxmlgui, qtquickcontrols, qtquickcontrols2,
+ kactivities, kactivities-stats, kirigami2, kcrash, plasma-workspace
+}:
+
+mkDerivation {
+ name = "systemsettings";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kcmutils kconfig kdbusaddons khtml ki18n kiconthemes kio kitemviews kservice
+ kwindowsystem kxmlgui qtquickcontrols qtquickcontrols2
+ kactivities kactivities-stats kirigami2 kcrash plasma-workspace
+ ];
+ outputs = [ "bin" "dev" "out" ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/user-manager.nix b/nixpkgs/pkgs/desktops/plasma-5/user-manager.nix
new file mode 100644
index 00000000000..f46792fc48f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/user-manager.nix
@@ -0,0 +1,13 @@
+{
+ mkDerivation, extra-cmake-modules, kdoctools, kcmutils, kconfig, khtml,
+ ki18n, kiconthemes, kio, kwindowsystem, libpwquality
+}:
+
+mkDerivation {
+ name = "user-manager";
+ nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+ buildInputs = [
+ kcmutils kconfig khtml ki18n kiconthemes kio kwindowsystem
+ libpwquality
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/plasma-5/xdg-desktop-portal-kde.nix b/nixpkgs/pkgs/desktops/plasma-5/xdg-desktop-portal-kde.nix
new file mode 100644
index 00000000000..1e04eb1e2b0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/plasma-5/xdg-desktop-portal-kde.nix
@@ -0,0 +1,15 @@
+{
+ mkDerivation,
+ extra-cmake-modules, gettext, kdoctools, python,
+ kcoreaddons, knotifications, kwayland, kwidgetsaddons, kwindowsystem,
+ cups, pcre, pipewire, kio
+}:
+
+mkDerivation {
+ name = "xdg-desktop-portal-kde";
+ nativeBuildInputs = [ extra-cmake-modules gettext kdoctools python ];
+ buildInputs = [
+ cups pcre pipewire kio
+ kcoreaddons knotifications kwayland kwidgetsaddons kwindowsystem
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/rox/rox-filer/default.nix b/nixpkgs/pkgs/desktops/rox/rox-filer/default.nix
new file mode 100644
index 00000000000..543e3ca897f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/rox/rox-filer/default.nix
@@ -0,0 +1,79 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, gtk, libSM, shared-mime-info, hicolor-icon-theme }:
+
+let
+ version = "2.11";
+ name = "rox-filer-${version}";
+in stdenv.mkDerivation {
+ inherit name;
+
+ src = fetchurl {
+ url = "mirror://sourceforge/rox/rox-filer-${version}.tar.bz2";
+ sha256 = "a929bd32ee18ef7a2ed48b971574574592c42e34ae09f36604bf663d7c101ba8";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ libxml2 gtk shared-mime-info hicolor-icon-theme libSM ];
+ NIX_LDFLAGS = [ "-ldl" "-lm" ];
+
+ patches = [
+ ./rox-filer-2.11-in-source-build.patch
+ ];
+
+ # go to the source directory after unpacking the sources
+ setSourceRoot = "export sourceRoot=rox-filer-${version}/ROX-Filer/";
+
+ # patch source with defined patches
+ patchFlags = "-p0";
+
+ # patch the main.c to disable the lookup of the APP_DIR environment variable,
+ # which is used to lookup the location for certain images when rox-filer
+ # starts; rather override the location with an absolute path to the directory
+ # where images are stored to prevent having to use a wrapper, which sets the
+ # APP_DIR environment variable prior to starting rox-filer
+ preConfigure = ''
+ sed -i -e "s:g_strdup(getenv(\"APP_DIR\")):\"$out\":" src/main.c
+ mkdir build
+ cd build
+ '';
+
+ configureScript = "../src/configure";
+
+ installPhase = ''
+ mkdir -p "$out"
+ cd ..
+ cp -av Help Messages Options.xml ROX images style.css .DirIcon "$out"
+
+ # create the man/ directory, which will be moved from $out to share/ in the fixup phase
+ mkdir "$out/man/"
+ cp -av ../rox.1 "$out/man/"
+
+ # the main executable
+ mkdir "$out/bin/"
+ cp -v ROX-Filer "$out/bin/rox"
+
+ # mime types
+ mkdir -p "$out/ROX/MIME"
+ cd "$out/ROX/MIME"
+ ln -sv text-x-{diff,patch}.png
+ ln -sv application-x-font-{afm,type1}.png
+ ln -sv application-xml{,-dtd}.png
+ ln -sv application-xml{,-external-parsed-entity}.png
+ ln -sv application-{,rdf+}xml.png
+ ln -sv application-x{ml,-xbel}.png
+ ln -sv application-{x-shell,java}script.png
+ ln -sv application-x-{bzip,xz}-compressed-tar.png
+ ln -sv application-x-{bzip,lzma}-compressed-tar.png
+ ln -sv application-x-{bzip-compressed-tar,lzo}.png
+ ln -sv application-x-{bzip,xz}.png
+ ln -sv application-x-{gzip,lzma}.png
+ ln -sv application-{msword,rtf}.png
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Fast, lightweight, gtk2 file manager";
+ homepage = http://rox.sourceforge.net/desktop;
+ license = with licenses; [ gpl2 lgpl2 ];
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eleanor ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/rox/rox-filer/rox-filer-2.11-in-source-build.patch b/nixpkgs/pkgs/desktops/rox/rox-filer/rox-filer-2.11-in-source-build.patch
new file mode 100644
index 00000000000..11bd8004459
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/rox/rox-filer/rox-filer-2.11-in-source-build.patch
@@ -0,0 +1,16 @@
+--- src/configure 2011-10-09 16:32:14.000000000 +0200
++++ src/configure2 2016-03-20 09:26:31.640891863 +0100
+@@ -2132,13 +2132,6 @@
+
+
+ ac_config_headers="$ac_config_headers config.h"
+-
+-
+- if [ -f configure ]; then
+- as_fn_error $? "Please run configure from the build directory (try ../AppRun --compile)" "$LINENO" 5
+- exit 1
+-fi
+-
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
diff --git a/nixpkgs/pkgs/desktops/surf-display/default.nix b/nixpkgs/pkgs/desktops/surf-display/default.nix
new file mode 100644
index 00000000000..47b7e117206
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/surf-display/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchgit, makeWrapper
+, surf, wmctrl, matchbox, xdotool, unclutter
+, xorg, pulseaudio, xprintidle-ng }:
+
+stdenv.mkDerivation rec {
+ pname = "surf-display";
+ version = "unstable-2019-04-15";
+
+ src = fetchgit {
+ url = "https://code.it-zukunft-schule.de/cgit/surf-display";
+ rev = "972d6c4b7c4503dbb63fa6c92cdc24d1e32064a4";
+ sha256 = "03c68gg4kfmkri1gn5b7m1g8vh9ciawhajb29c17kkc7mn388hjm";
+ };
+
+ nativeBuildInputs = [ makeWrapper ];
+
+ buildInputs = [
+ surf
+ wmctrl
+ matchbox
+ pulseaudio
+ xprintidle-ng
+ xdotool
+ xorg.xmodmap
+ xorg.xkbutils
+ unclutter
+ ];
+
+ patches = [ ./pdf-makefile.patch ];
+
+ buildFlags = [ "man" ];
+
+ postFixup = ''
+ substituteInPlace $out/share/xsessions/surf-display.desktop \
+ --replace surf-display $out/bin/surf-display
+
+ substituteInPlace $out/bin/surf-display --replace /usr/share $out/share
+
+ patchShebangs $out/bin/surf-display
+ wrapProgram $out/bin/surf-display \
+ --prefix PATH ':' ${stdenv.lib.makeBinPath buildInputs}
+ '';
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ meta = with stdenv.lib; {
+ description = "Kiosk browser session manager based on the surf browser";
+ homepage = "https://code.it-zukunft-schule.de/cgit/surf-display/";
+ maintainers = with maintainers; [ etu ];
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/surf-display/pdf-makefile.patch b/nixpkgs/pkgs/desktops/surf-display/pdf-makefile.patch
new file mode 100644
index 00000000000..9c2541052c0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/surf-display/pdf-makefile.patch
@@ -0,0 +1,24 @@
+diff --git a/Makefile b/Makefile
+index 1081d64..499160c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -13,19 +13,10 @@ man::
+ gzip -9 -c -n data/surf-display.1 > data/surf-display.1.gz
+
+ install:
+- if [ ! -e data/surf-display.pdf.gz ]; then \
+- echo "Run 'make build' first, before running 'sudo make install'."; \
+- exit -1; \
+- fi
+-
+ # script
+ mkdir -p $(DESTDIR)$(PREFIX)/bin/
+ install -m 0755 bin/surf-display $(DESTDIR)$(PREFIX)/bin/
+
+- # LaTeX Beamer PDF: Impressive HowTo
+- mkdir -p $(DESTDIR)$(PREFIX)/share/doc/surf-display/
+- install -m 0644 data/*.pdf.gz $(DESTDIR)$(PREFIX)/share/doc/surf-display/
+-
+ # man page
+ mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1
+ install -m 0644 data/*.1.gz $(DESTDIR)$(PREFIX)/share/man/man1/
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/gigolo.nix b/nixpkgs/pkgs/desktops/xfce/applications/gigolo.nix
new file mode 100644
index 00000000000..d0fc55e77e8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/gigolo.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, python, gettext, intltool, pkgconfig, gtk, gvfs }:
+
+stdenv.mkDerivation rec {
+ p_name = "gigolo";
+ ver_maj = "0.4";
+ ver_min = "2";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0r4ij0mlnp0bqq44pyrdcpz18r1zwsksw6w5yc0jzgg7wj7wfgsm";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ python gettext intltool gtk gvfs];
+
+ meta = {
+ homepage = "https://goodies.xfce.org/projects/applications/${p_name}";
+ description = "A frontend to easily manage connections to remote filesystems";
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/mousepad-12134.patch b/nixpkgs/pkgs/desktops/xfce/applications/mousepad-12134.patch
new file mode 100644
index 00000000000..74a28ecf61a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/mousepad-12134.patch
@@ -0,0 +1,90 @@
+diff -urNZ a/mousepad/mousepad-action-group.c b/mousepad/mousepad-action-group.c
+--- a/mousepad/mousepad-action-group.c 2014-09-01 20:50:07.000000000 +0000
++++ b/mousepad/mousepad-action-group.c 2017-12-18 16:57:46.836538403 +0000
+@@ -302,11 +302,6 @@
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
+ self->locked = FALSE;
+
+- /* update the setting when the active action is changed */
+- self->locked = TRUE;
+- MOUSEPAD_SETTING_SET_STRING (COLOR_SCHEME, gtk_source_style_scheme_get_id (scheme));
+- self->locked = FALSE;
+-
+ g_object_notify (G_OBJECT (self), "active-style-scheme");
+ }
+
+@@ -473,6 +468,8 @@
+ mousepad_action_group_style_scheme_action_activate (MousepadActionGroup *self,
+ MousepadStyleSchemeAction *action)
+ {
++ const gchar *scheme_name = NULL;
++
+ /* only update the active action if we're not already in the process of
+ * setting it and the sender action is actually active */
+ if (! self->locked &&
+@@ -481,7 +478,14 @@
+ GtkSourceStyleScheme *scheme;
+
+ scheme = mousepad_style_scheme_action_get_style_scheme (action);
+- mousepad_action_group_set_active_style_scheme (self, scheme);
++
++ /* update the setting when the active action is changed */
++ if (scheme != NULL)
++ scheme_name = gtk_source_style_scheme_get_id(scheme);
++
++ self->locked = TRUE;
++ MOUSEPAD_SETTING_SET_STRING (COLOR_SCHEME, scheme_name);
++ self->locked = FALSE;
+ }
+ }
+
+diff -urNZ a/mousepad/mousepad-window.c b/mousepad/mousepad-window.c
+--- a/mousepad/mousepad-window.c 2014-09-01 20:58:02.000000000 +0000
++++ b/mousepad/mousepad-window.c 2017-12-18 17:07:51.099321408 +0000
+@@ -712,32 +712,6 @@
+
+
+ static void
+-mousepad_window_action_group_style_scheme_changed (MousepadWindow *window,
+- GParamSpec *pspec,
+- MousepadActionGroup *group)
+-{
+- GtkSourceStyleScheme *scheme;
+- const gchar *scheme_id;
+- gint npages, i;
+-
+- /* get the new active language */
+- scheme = mousepad_action_group_get_active_style_scheme (group);
+- scheme_id = gtk_source_style_scheme_get_id (scheme);
+-
+- /* update the color scheme on all the documents */
+- npages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (window->notebook));
+- for (i = 0; i < npages; i++)
+- {
+- MousepadDocument *document;
+-
+- document = MOUSEPAD_DOCUMENT (gtk_notebook_get_nth_page (GTK_NOTEBOOK (window->notebook), i));
+- mousepad_view_set_color_scheme (document->textview, scheme_id);
+- }
+-}
+-
+-
+-
+-static void
+ mousepad_window_create_style_schemes_menu (MousepadWindow *window)
+ {
+ GtkWidget *menu, *item;
+@@ -751,13 +725,6 @@
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
+ gtk_widget_show_all (menu);
+ gtk_widget_show (item);
+-
+- /* watch for activations of the style schemes actions */
+- g_signal_connect_object (window->action_group,
+- "notify::active-style-scheme",
+- G_CALLBACK (mousepad_window_action_group_style_scheme_changed),
+- window,
+- G_CONNECT_SWAPPED);
+ }
+
+
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/mousepad.nix b/nixpkgs/pkgs/desktops/xfce/applications/mousepad.nix
new file mode 100644
index 00000000000..2dca1fa29b0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/mousepad.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util
+, gtk, gtksourceview, dbus, dbus-glib, makeWrapper
+, dconf }:
+
+stdenv.mkDerivation rec {
+ p_name = "mousepad";
+ ver_maj = "0.4";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "60114431eac8db6bb6ce18bd38f1630cccb684375b97a445a1b6fd619848d132";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ patches = [ ./mousepad-12134.patch ];
+
+ buildInputs =
+ [ pkgconfig intltool libxfce4util
+ gtk gtksourceview dbus dbus-glib makeWrapper
+ dconf
+ ];
+
+ configureFlags = [ "--enable-keyfile-settings" ];
+
+ preFixup = ''
+ wrapProgram "$out/bin/mousepad" \
+ --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH:${gtksourceview}/share" \
+ --prefix GIO_EXTRA_MODULES : "${stdenv.lib.getLib dconf}/lib/gio/modules"
+ '';
+
+ meta = {
+ homepage = https://www.xfce.org/;
+ description = "A simple text editor for Xfce";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/orage.nix b/nixpkgs/pkgs/desktops/xfce/applications/orage.nix
new file mode 100644
index 00000000000..19bd560cbae
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/orage.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, bison, flex, intltool, gtk, libical, dbus-glib, tzdata
+, libnotify, popt, xfce }:
+
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+ p_name = "orage";
+ ver_maj = "4.12";
+ ver_min = "1";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0qlhvnl2m33vfxqlbkic2nmfpwyd4mq230jzhs48cg78392amy9w";
+ };
+
+ patches = [
+ # Fix build with libical 3.0
+ (fetchpatch {
+ name = "fix-libical3.patch";
+ url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/libical3.patch?h=packages/orage&id=7b1b06c42dda034d538977b9f3550b28e370057f;
+ sha256 = "1l8s106mcidmbx2p8c2pi8v9ngbv2x3fsgv36j8qk8wyd4qd1jbf";
+ })
+ ];
+
+ postPatch = ''
+ substituteInPlace src/parameters.c --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ substituteInPlace src/tz_zoneinfo_read.c --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ substituteInPlace tz_convert/tz_convert.c --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ '';
+
+ postConfigure = "rm -rf libical"; # ensure pkgs.libical is used instead of one included in the orage sources
+
+ nativeBuildInputs = [ pkgconfig intltool bison flex ];
+
+ buildInputs = [ gtk libical dbus-glib libnotify popt xfce.libxfce4util
+ xfce.xfce4-panel ];
+
+ meta = {
+ homepage = https://www.xfce.org/projects/;
+ description = "A simple calendar application with reminders";
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/parole.nix b/nixpkgs/pkgs/desktops/xfce/applications/parole.nix
new file mode 100644
index 00000000000..ac0180c20fe
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/parole.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, makeWrapper, pkgconfig, intltool, gst_all_1
+, gtk, dbus-glib, libxfce4ui, libxfce4util, xfconf
+, taglib, libnotify, hicolor-icon-theme
+, withGstPlugins ? true
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "parole";
+ ver_maj = "0.5";
+ ver_min = "4";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1hxzqg9dfghrhvmnnccwwa4278fh2awkcqy89sla05m08mxvvx60";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [
+ makeWrapper hicolor-icon-theme
+ gtk dbus-glib libxfce4ui libxfce4util xfconf
+ taglib libnotify
+ ] ++ (with gst_all_1; [ gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav]);
+
+ configureFlags = [ "--with-gstreamer=1.0" ];
+
+ postInstall = stdenv.lib.optionalString withGstPlugins ''
+ wrapProgram "$out/bin/parole" --prefix \
+ GST_PLUGIN_SYSTEM_PATH_1_0 ":" "$GST_PLUGIN_SYSTEM_PATH_1_0"
+ '';
+
+ meta = {
+ homepage = "https://goodies.xfce.org/projects/applications/${p_name}";
+ description = "Modern simple media player";
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/ristretto.nix b/nixpkgs/pkgs/desktops/xfce/applications/ristretto.nix
new file mode 100644
index 00000000000..3c0e8040c3b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/ristretto.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libexif, gtk
+, exo, dbus-glib, libxfce4util, libxfce4ui, xfconf
+, hicolor-icon-theme, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "ristretto";
+ ver_maj = "0.6";
+ ver_min = "3";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0y9d8w1plwp4vmxs44y8k8x15i0k0xln89k6jndhv6lf57g1cs1b";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ buildInputs =
+ [ pkgconfig intltool libexif gtk dbus-glib exo libxfce4util
+ libxfce4ui xfconf hicolor-icon-theme makeWrapper
+ ];
+
+ postInstall = ''
+ wrapProgram "$out/bin/ristretto" \
+ --prefix XDG_DATA_DIRS : "${hicolor-icon-theme}/share"
+ '';
+
+ meta = {
+ homepage = "https://goodies.xfce.org/projects/applications/${p_name}";
+ description = "A fast and lightweight picture-viewer for the Xfce desktop environment";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/terminal.nix b/nixpkgs/pkgs/desktops/xfce/applications/terminal.nix
new file mode 100644
index 00000000000..31e851a469d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/terminal.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, intltool, ncurses, gtk, vte, dbus-glib
+, exo, libxfce4util, libxfce4ui
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-terminal";
+ ver_maj = "0.6";
+ ver_min = "3";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "023y0lkfijifh05yz8grimxadqpi98mrivr00sl18nirq8b4fbwi";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool exo gtk vte libxfce4util ncurses dbus-glib libxfce4ui ];
+
+ meta = {
+ homepage = https://www.xfce.org/projects/terminal;
+ description = "A modern terminal emulator primarily for the Xfce desktop environment";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/xfce4-mixer.nix b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-mixer.nix
new file mode 100644
index 00000000000..e1646d93a61
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-mixer.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, pkgconfig, intltool, makeWrapper
+, glib, gstreamer, gst-plugins-base, gtk
+, libxfce4util, libxfce4ui, xfce4-panel, xfconf, libunique ? null
+, pulseaudioSupport ? false, gst-plugins-good
+}:
+
+let
+ # The usual Gstreamer plugins package has a zillion dependencies
+ # that we don't need for a simple mixer, so build a minimal package.
+ gst_plugins_minimal = gst-plugins-base.override {
+ minimalDeps = true;
+ };
+ gst_plugins_pulse = gst-plugins-good.override {
+ minimalDeps = true;
+ };
+ gst_plugins = [ gst_plugins_minimal ] ++ stdenv.lib.optional pulseaudioSupport gst_plugins_pulse;
+
+in
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-mixer";
+ ver_maj = "4.10";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1pnsd00583l7p5d80rxbh58brzy3jnccwikbbbm730a33c08kid8";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ buildInputs =
+ [ pkgconfig intltool glib gstreamer gtk
+ libxfce4util libxfce4ui xfce4-panel xfconf libunique makeWrapper
+ ] ++ gst_plugins;
+
+ postInstall =
+ ''
+ wrapProgram "$out/bin/xfce4-mixer" \
+ --prefix GST_PLUGIN_SYSTEM_PATH : "$GST_PLUGIN_SYSTEM_PATH"
+ '';
+
+ passthru = { inherit gst_plugins; };
+
+ meta = {
+ homepage = https://www.xfce.org/projects/xfce4-mixer; # referenced but inactive
+ description = "A volume control application for the Xfce desktop environment";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/xfce4-notifyd.nix b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-notifyd.nix
new file mode 100644
index 00000000000..19ecff29093
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-notifyd.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libnotify
+, gtk , libxfce4util, libxfce4ui, xfconf, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-notifyd";
+ ver_maj = "0.2";
+ ver_min = "4";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1l6fpfk0fkizdx7vwbyjdyzzj5i2ng8pf7r8j49nv0cnjhpxczlc";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libnotify gtk libxfce4util libxfce4ui xfconf hicolor-icon-theme ];
+
+ preFixup = ''
+ # to be able to run the daemon we need it in PATH
+ ln -rs $out/lib/xfce4/notifyd/xfce4-notifyd $out/bin
+ '';
+
+ doCheck = true;
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/applications/${p_name}";
+ description = "Notification daemon for Xfce";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/xfce4-screenshooter.nix b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-screenshooter.nix
new file mode 100644
index 00000000000..085cfd7b8f9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-screenshooter.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, intltool, xfce4-panel, libxfce4util, gtk, libsoup
+, glib-networking, exo, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-screenshooter";
+ ver_maj = "1.8";
+ ver_min = "2";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "9dce2ddfaa87f703e870e29bae13f3fc82a1b3f06b44f8386640e45a135f5f69";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [
+ pkgconfig intltool wrapGAppsHook
+ ];
+
+ buildInputs = [
+ xfce4-panel libxfce4util gtk libsoup exo hicolor-icon-theme glib-networking
+ ];
+
+ meta = {
+ homepage = https://goodies.xfce.org/projects/applications/xfce4-screenshooter;
+ description = "Xfce screenshooter";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix
new file mode 100644
index 00000000000..96f71e004a8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, intltool, pkgconfig, gtk, libwnck }:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-taskmanager";
+ ver_maj = "1.1";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1jwywmkkkmz7406m1jq40w6apiav25cznafhigbgpjv6z5hv27if";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool gtk libwnck ];
+
+ meta = {
+ homepage = "https://goodies.xfce.org/projects/applications/${p_name}";
+ description = "Easy to use task manager for Xfce";
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed-pulse.nix b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed-pulse.nix
new file mode 100644
index 00000000000..4344d34f13f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed-pulse.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, libpulseaudio
+, gtk2, libnotify
+, keybinder, xfconf
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-volumed-pulse";
+ ver_maj = "0.2";
+ ver_min = "2";
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0xjcs1b6ix6rwj9xgr9n89h315r3yhdm8wh5bkincd4lhz6ibhqf";
+ };
+
+ buildInputs =
+ [ libpulseaudio gtk2
+ keybinder xfconf libnotify
+ ];
+
+ nativeBuildInputs = [ pkgconfig ];
+
+ meta = with stdenv.lib; {
+ homepage = https://launchpad.net/xfce4-volumed-pulse;
+ description = "A volume keys control daemon for the Xfce desktop environment (Xubuntu fork)";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.abbradar ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed.nix b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed.nix
new file mode 100644
index 00000000000..dafb72582b3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/applications/xfce4-volumed.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, pkgconfig, makeWrapper
+, gstreamer, gtk2, gst-plugins-base, libnotify
+, keybinder, xfconf
+}:
+
+let
+ # The usual Gstreamer plugins package has a zillion dependencies
+ # that we don't need for a simple mixer, so build a minimal package.
+ gst_plugins_minimal = gst-plugins-base.override {
+ minimalDeps = true;
+ };
+
+in
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-volumed";
+ ver_maj = "0.1";
+ ver_min = "13";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/apps/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1aa0a1sbf9yzi7bc78kw044m0xzg1li3y4w9kf20wqv5kfjs7v2c";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ buildInputs =
+ [ gstreamer gst_plugins_minimal gtk2
+ keybinder xfconf libnotify
+ ];
+
+ nativeBuildInputs = [ pkgconfig makeWrapper ];
+
+ postInstall =
+ ''
+ wrapProgram "$out/bin/xfce4-volumed" \
+ --prefix GST_PLUGIN_SYSTEM_PATH : "$GST_PLUGIN_SYSTEM_PATH"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/projects/xfce4-volumed; # referenced but inactive
+ description = "A volume keys control daemon for the Xfce desktop environment";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.abbradar ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/art/xfce4-icon-theme.nix b/nixpkgs/pkgs/desktops/xfce/art/xfce4-icon-theme.nix
new file mode 100644
index 00000000000..6ac601c6685
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/art/xfce4-icon-theme.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk2 }:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-icon-theme";
+ ver_maj = "4.4";
+ ver_min = "3";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/art/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1yk6rx3zr9grm4jwpjvqdkl13pisy7qn1wm5cqzmd2kbsn96cy6l";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool gtk2 ];
+
+ meta = {
+ homepage = https://www.xfce.org/;
+ description = "Icons for Xfce";
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/art/xfwm4-themes.nix b/nixpkgs/pkgs/desktops/xfce/art/xfwm4-themes.nix
new file mode 100644
index 00000000000..783fbb13c83
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/art/xfwm4-themes.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+ p_name = "xfwm4-themes";
+ ver_maj = "4.10";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/art/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0xfmdykav4rf6gdxbd6fhmrfrvbdc1yjihz7r7lba0wp1vqda51j";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/;
+ description = "Themes for Xfce";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.volth ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/exo.nix b/nixpkgs/pkgs/desktops/xfce/core/exo.nix
new file mode 100644
index 00000000000..6b5ee4b3132
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/exo.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, intltool, URI, glib, gtk, libxfce4ui, libxfce4util
+, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ p_name = "exo";
+ ver_maj = "0.10";
+ ver_min = "7";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "521581481128af93e815f9690020998181f947ac9e9c2b232b1f144d76b1b35c";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ outputs = [ "out" "dev" "devdoc" ];
+ # lib/xfce4/exo-1/exo-compose-mail-1 is a perl script :-/
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs = [ URI glib gtk libxfce4ui libxfce4util hicolor-icon-theme ];
+
+ meta = with stdenv.lib; {
+ homepage = "http://www.xfce.org/projects/${p_name}";
+ description = "Application library for the Xfce desktop environment";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/garcon-10967.patch b/nixpkgs/pkgs/desktops/xfce/core/garcon-10967.patch
new file mode 100644
index 00000000000..aea12325547
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/garcon-10967.patch
@@ -0,0 +1,14 @@
+diff -urNZ a/garcon-gtk/garcon-gtk-menu.c b/garcon-gtk/garcon-gtk-menu.c
+--- a/garcon-gtk/garcon-gtk-menu.c 2017-11-16 19:22:33.551926068 +0000
++++ b/garcon-gtk/garcon-gtk-menu.c 2017-11-16 19:23:33.055497211 +0000
+@@ -676,6 +676,9 @@
+ G_CALLBACK (garcon_gtk_menu_deactivate), menu);
+ gtk_widget_show (mi);
+
++ /* submenu are child items, too. */
++ has_children = TRUE;
++
+ if (menu->priv->show_menu_icons)
+ {
+ icon_name = garcon_menu_element_get_icon_name (li->data);
+Binary files a/.git/index and b/.git/index differ
diff --git a/nixpkgs/pkgs/desktops/xfce/core/garcon-12700.patch b/nixpkgs/pkgs/desktops/xfce/core/garcon-12700.patch
new file mode 100644
index 00000000000..b95a65cc219
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/garcon-12700.patch
@@ -0,0 +1,44 @@
+From 222080e6d5fce85eb2a8a5c33df671bd9f21add8 Mon Sep 17 00:00:00 2001
+From: Yegor Timoshenko <yegortimoshenko@gmail.com>
+Date: Thu, 14 Dec 2017 22:04:04 +0000
+Subject: [PATCH] Decrement allocation counter on item unref (#12700)
+
+---
+ garcon/garcon-menu-item-pool.c | 7 ++++++-
+ garcon/garcon-menu-item.c | 2 ++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/garcon/garcon-menu-item-pool.c b/garcon/garcon-menu-item-pool.c
+index 2017180..355e520 100644
+--- a/garcon/garcon-menu-item-pool.c
++++ b/garcon/garcon-menu-item-pool.c
+@@ -191,7 +191,12 @@ garcon_menu_item_pool_filter_exclude (const gchar *desktop_id,
+ g_return_val_if_fail (GARCON_IS_MENU_ITEM (item), FALSE);
+ g_return_val_if_fail (node != NULL, FALSE);
+
+- return garcon_menu_node_tree_rule_matches (node, item);
++ gboolean matches = garcon_menu_node_tree_rule_matches (node, item);
++
++ if (matches)
++ garcon_menu_item_increment_allocated (item);
++
++ return matches;
+ }
+
+
+diff --git a/garcon/garcon-menu-item.c b/garcon/garcon-menu-item.c
+index 66a86bf..d61c88f 100644
+--- a/garcon/garcon-menu-item.c
++++ b/garcon/garcon-menu-item.c
+@@ -1516,6 +1516,8 @@ garcon_menu_item_unref (GarconMenuItem *item)
+ {
+ g_return_if_fail (GARCON_IS_MENU_ITEM (item));
+
++ garcon_menu_item_decrement_allocated (item);
++
+ /* Decrement the reference counter */
+ g_object_unref (G_OBJECT (item));
+ }
+--
+2.15.1
+
diff --git a/nixpkgs/pkgs/desktops/xfce/core/garcon.nix b/nixpkgs/pkgs/desktops/xfce/core/garcon.nix
new file mode 100644
index 00000000000..41d98f17516
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/garcon.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, libxfce4util, libxfce4ui, gtk }:
+let
+ p_name = "garcon";
+ ver_maj = "0.4";
+ ver_min = "0";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0wm9pjbwq53s3n3nwvsyf0q8lbmhiy2ln3bn5ncihr9vf5cwhzbq";
+ };
+
+ outputs = [ "out" "dev" ];
+ patches = [ ./garcon-10967.patch ./garcon-12700.patch ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool glib libxfce4util gtk libxfce4ui ];
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/;
+ description = "Xfce menu support library";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/gtk-xfce-engine.nix b/nixpkgs/pkgs/desktops/xfce/core/gtk-xfce-engine.nix
new file mode 100644
index 00000000000..567d3b80387
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/gtk-xfce-engine.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk2, withGtk3 ? false, gtk3 ? null }:
+
+assert withGtk3 -> (gtk3 != null);
+
+stdenv.mkDerivation rec {
+ p_name = "gtk-xfce-engine";
+ ver_maj = "3.2";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1va71f3gpl8gikfkmqsd5ikgp7qj8b64jii2l98g1ylnv8xrqp47";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool gtk2 ] ++ stdenv.lib.optional withGtk3 gtk3;
+
+ # `glib-mkenums' is unhappy that some source files are not valid UTF-8
+ postPatch = ''find . -type f -name '*.[ch]' -exec sed -r -i 's/\xD6/O/g' {} +'';
+
+ configureFlags = stdenv.lib.optional withGtk3 "--enable-gtk3";
+
+ meta = {
+ homepage = https://www.xfce.org/;
+ description = "GTK theme engine for Xfce";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/libxfce4ui.nix b/nixpkgs/pkgs/desktops/xfce/core/libxfce4ui.nix
new file mode 100644
index 00000000000..797b51de8e4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/libxfce4ui.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, intltool, xorg, gtk, libxfce4util, xfconf
+, libglade, libstartup_notification, hicolor-icon-theme
+, withGtk3 ? false, gtk3
+}:
+let
+ p_name = "libxfce4ui";
+ ver_maj = "4.12";
+ ver_min = "1";
+ inherit (stdenv.lib) optional;
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "3d619811bfbe7478bb984c16543d980cadd08586365a7bc25e59e3ca6384ff43";
+ };
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs =
+ [ gtk libxfce4util xfconf libglade
+ libstartup_notification hicolor-icon-theme
+ ] ++ optional withGtk3 gtk3;
+
+ propagatedBuildInputs = [ xorg.libICE xorg.libSM ];
+
+ #TODO: glade?
+ configureFlags = optional withGtk3 "--enable-gtk3";
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/;
+ description = "Basic GUI library for Xfce";
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/libxfce4util.nix b/nixpkgs/pkgs/desktops/xfce/core/libxfce4util.nix
new file mode 100644
index 00000000000..b68b7059f8d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/libxfce4util.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, glib, intltool }:
+let
+ p_name = "libxfce4util";
+ ver_maj = "4.12";
+ ver_min = "1";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "07c8r3xwx5is298zk77m3r784gmr5y4mh8bbca5zdjqk5vxdwsw7";
+ };
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ glib intltool ];
+
+ meta = {
+ homepage = https://www.xfce.org/;
+ description = "Basic utility non-GUI functions for Xfce";
+ license = "bsd";
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/libxfcegui4.nix b/nixpkgs/pkgs/desktops/xfce/core/libxfcegui4.nix
new file mode 100644
index 00000000000..5c61c16cbcc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/libxfcegui4.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk
+, libxfce4util, xfconf, libglade, libstartup_notification, hicolor-icon-theme }:
+let
+ p_name = "libxfcegui4";
+ ver_maj = "4.10";
+ ver_min = "0";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0cs5im0ib0cmr1lhr5765yliqjfyxvk4kwy8h1l8bn3mj6bzk0ib";
+ };
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ #TODO: gladeui
+ # By default, libxfcegui4 tries to install into libglade's prefix.
+ # Install into our own prefix instead.
+ configureFlags = [
+ "--with-libglade-module-path=$(out)/lib/libglade/2.0"
+ ];
+ #NOTE: missing keyboard library support is OK according to the mailing-list
+
+ buildInputs =
+ [ pkgconfig intltool gtk libxfce4util xfconf libglade
+ libstartup_notification hicolor-icon-theme
+ ];
+
+ meta = {
+ homepage = https://www.xfce.org/;
+ description = "Basic GUI library for Xfce";
+ license = stdenv.lib.licenses.lgpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/thunar-build.nix b/nixpkgs/pkgs/desktops/xfce/core/thunar-build.nix
new file mode 100644
index 00000000000..0b606ee5fdd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/thunar-build.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, pkgconfig, intltool
+, gtk, dbus-glib, libstartup_notification, libnotify, libexif, pcre, udev
+, exo, libxfce4util, xfconf, xfce4-panel, hicolor-icon-theme, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "thunar";
+ ver_maj = "1.6";
+ ver_min = "10";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/Thunar-${ver_maj}.${ver_min}.tar.bz2";
+ sha256 = "7e9d24067268900e5e44d3325e60a1a2b2f8f556ec238ec12574fbea15fdee8a";
+ };
+
+ name = "${p_name}-build-${ver_maj}.${ver_min}";
+
+ patches = [ ./thunarx_plugins_directory.patch ];
+
+ postPatch = ''
+ sed -i -e 's|thunar_dialogs_show_insecure_program (parent, _(".*"), file, exec)|1|' thunar/thunar-file.c
+ '';
+
+ nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+ buildInputs = [
+ intltool
+ gtk dbus-glib libstartup_notification libnotify libexif pcre udev
+ exo libxfce4util xfconf xfce4-panel
+ hicolor-icon-theme
+ ];
+ # TODO: optionality?
+
+ enableParallelBuilding = true;
+
+ meta = {
+ homepage = http://thunar.xfce.org/;
+ description = "Xfce file manager";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/thunar-volman.nix b/nixpkgs/pkgs/desktops/xfce/core/thunar-volman.nix
new file mode 100644
index 00000000000..eda3aab070a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/thunar-volman.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, intltool, exo, gtk, libxfce4util, libxfce4ui
+, xfconf, udev, libgudev, libnotify, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ p_name = "thunar-volman";
+ ver_maj = "0.8";
+ ver_min = "1";
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1gf259n1v3y23n1zlkhyr6r0i8j59rnl1cmxvxj6la9cwdfbn22s";
+ };
+
+
+ buildInputs =
+ [ pkgconfig intltool exo gtk udev libgudev libxfce4ui libxfce4util
+ xfconf libnotify hicolor-icon-theme
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = {
+ homepage = https://goodies.xfce.org/projects/thunar-plugins/thunar-volman;
+ description = "Thunar extension for automatic management of removable drives and media";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/thunar.nix b/nixpkgs/pkgs/desktops/xfce/core/thunar.nix
new file mode 100644
index 00000000000..83e3a2879d7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/thunar.nix
@@ -0,0 +1,68 @@
+{ stdenv, buildEnv, runCommand, makeWrapper, lndir, thunar-bare
+, thunarPlugins ? []
+}:
+
+with stdenv.lib;
+
+let
+
+ build = thunar-bare;
+
+ replaceLnExeListWithWrapped = exeDir: exeNameList: mkWrapArgs: ''
+ exeDir="${exeDir}"
+ oriDir=`realpath -e "$exeDir"`
+ unlink "$exeDir"
+ mkdir -p "$exeDir"
+ lndir "$oriDir" "$exeDir"
+
+ exeList="${concatStrings (intersperse " " (map (x: "${exeDir}/${x}") exeNameList))}"
+
+ for exe in $exeList; do
+ oriExe=`realpath -e "$exe"`
+ rm -f "$exe"
+ makeWrapper "$oriExe" "$exe" ${concatStrings (intersperse " " mkWrapArgs)}
+ done
+ '';
+
+ name = "${build.p_name}-${build.ver_maj}.${build.ver_min}";
+
+ meta = {
+ inherit (build.meta) homepage license platforms;
+
+ description = build.meta.description + optionalString
+ (0 != length thunarPlugins)
+ " (with plugins: ${concatStrings (intersperse ", " (map (x: x.name) thunarPlugins))})";
+ maintainers = build.meta.maintainers /*++ [ jraygauthier ]*/;
+ };
+
+in
+
+# TODO: To be replaced with `buildEnv` awaiting missing features.
+runCommand name {
+ inherit build;
+ inherit meta;
+
+ nativeBuildInputs = [ makeWrapper lndir ];
+
+ dontPatchELF = true;
+ dontStrip = true;
+
+}
+(let
+ buildWithPlugins = buildEnv {
+ name = "thunar-bare-with-plugins";
+ paths = [ build ] ++ thunarPlugins;
+ };
+
+in ''
+ mkdir -p $out
+ pushd ${buildWithPlugins} > /dev/null
+ for d in `find . -maxdepth 1 -name "*" -printf "%f\n" | tail -n+2`; do
+ ln -s "${buildWithPlugins}/$d" "$out/$d"
+ done
+ popd > /dev/null
+
+ ${replaceLnExeListWithWrapped "$out/bin" [ "thunar" "thunar-settings" ] [
+ "--set THUNARX_MODULE_DIR \"${buildWithPlugins}/lib/thunarx-2\""
+ ]}
+'')
diff --git a/nixpkgs/pkgs/desktops/xfce/core/thunarx_plugins_directory.patch b/nixpkgs/pkgs/desktops/xfce/core/thunarx_plugins_directory.patch
new file mode 100644
index 00000000000..e1431d86b14
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/thunarx_plugins_directory.patch
@@ -0,0 +1,48 @@
+diff --git a/thunarx/thunarx-provider-factory.c b/thunarx/thunarx-provider-factory.c
+index 31b8835..a3e7f4e 100644
+--- a/thunarx/thunarx-provider-factory.c
++++ b/thunarx/thunarx-provider-factory.c
+@@ -141,12 +141,19 @@ static GList*
+ thunarx_provider_factory_load_modules (ThunarxProviderFactory *factory)
+ {
+ ThunarxProviderModule *module;
++ const gchar *thunar_dir;
+ const gchar *name;
+ GList *modules = NULL;
+ GList *lp;
+ GDir *dp;
+
+- dp = g_dir_open (THUNARX_DIRECTORY, 0, NULL);
++ thunar_dir = g_getenv("THUNARX_MODULE_DIR");
++ if (NULL == thunar_dir)
++ {
++ thunar_dir = THUNARX_DIRECTORY;
++ }
++
++ dp = g_dir_open (thunar_dir, 0, NULL);
+ if (G_LIKELY (dp != NULL))
+ {
+ /* determine the types for all existing plugins */
+diff --git a/thunarx/thunarx-provider-module.c b/thunarx/thunarx-provider-module.c
+index 023ad2a..6c21997 100644
+--- a/thunarx/thunarx-provider-module.c
++++ b/thunarx/thunarx-provider-module.c
+@@ -174,10 +174,17 @@ static gboolean
+ thunarx_provider_module_load (GTypeModule *type_module)
+ {
+ ThunarxProviderModule *module = THUNARX_PROVIDER_MODULE (type_module);
++ const gchar *thunar_dir;
+ gchar *path;
++
++ thunar_dir = g_getenv("THUNARX_MODULE_DIR");
++ if (NULL == thunar_dir)
++ {
++ thunar_dir = THUNARX_DIRECTORY;
++ }
+
+ /* load the module using the runtime link editor */
+- path = g_build_filename (THUNARX_DIRECTORY, type_module->name, NULL);
++ path = g_build_filename (thunar_dir, type_module->name, NULL);
+ module->library = g_module_open (path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+ g_free (path);
+
diff --git a/nixpkgs/pkgs/desktops/xfce/core/tumbler.nix b/nixpkgs/pkgs/desktops/xfce/core/tumbler.nix
new file mode 100644
index 00000000000..9087d3a0255
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/tumbler.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, pkgconfig, intltool, dbus-glib, gdk-pixbuf, curl, freetype
+, libgsf, poppler, bzip2 }:
+let
+ p_name = "tumbler";
+ ver_maj = "0.1";
+ ver_min = "31";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0wvip28gm2w061hn84zp2q4dv947ihylrppahn4cjspzff935zfh";
+ };
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ intltool dbus-glib gdk-pixbuf curl freetype
+ poppler libgsf bzip2
+ ];
+
+ configureFlags = [
+ # Needs gst-tag
+ # "--enable-gstreamer-thumbnailer"
+
+ # Needs libffmpegthumbnailer
+ # "--enable-ffmpeg-thumbnailer"
+
+ "--enable-odf-thumbnailer"
+ "--enable-poppler-thumbnailer"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = http://git.xfce.org/xfce/tumbler/;
+ description = "A D-Bus thumbnailer service";
+ platforms = platforms.linux;
+ license = licenses.gpl2;
+ };
+}
+
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-appfinder.nix b/nixpkgs/pkgs/desktops/xfce/core/xfce4-appfinder.nix
new file mode 100644
index 00000000000..d39708dd523
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-appfinder.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, gtk, libxfce4util
+, libxfce4ui, garcon, xfconf }:
+let
+ p_name = "xfce4-appfinder";
+ ver_maj = "4.12";
+ ver_min = "0";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0ry5hin8xhgnkmm9vs7jq8blk1cnbyr0s18nm1j6nsm7360abm1a";
+ };
+
+ buildInputs =
+ [ pkgconfig intltool glib gtk libxfce4util libxfce4ui garcon xfconf ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = http://docs.xfce.org/xfce/xfce4-appfinder/;
+ description = "Xfce application finder, a tool to locate and launch programs on your system";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
+
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-dev-tools.nix b/nixpkgs/pkgs/desktops/xfce/core/xfce4-dev-tools.nix
new file mode 100644
index 00000000000..109c22f1e58
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-dev-tools.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, glib, autoconf, automake, libtool, intltool }:
+let
+ p_name = "xfce4-dev-tools";
+ ver_maj = "4.12";
+ ver_min = "0";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1jxmyp80pwbfgmqmwpjxs7z5dmm6pyf3qj62z20xy44izraadqz2";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ glib ];
+
+ # not needed to build it but to use it
+ propagatedBuildInputs = [ autoconf automake libtool intltool ];
+
+ meta = {
+ homepage = http://foo-projects.org/~benny/projects/xfce4-dev-tools/;
+ description = "Tools and M4 macros for Xfce4 developers";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.linux;
+ };
+}
+
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-light-locker.patch b/nixpkgs/pkgs/desktops/xfce/core/xfce4-light-locker.patch
new file mode 100644
index 00000000000..0fabdffd7ed
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-light-locker.patch
@@ -0,0 +1,25 @@
+--- ./scripts/xflock4.orig 2017-08-06 23:05:53.807688995 +0100
++++ ./scripts/xflock4 2017-08-06 23:09:06.171789989 +0100
+@@ -24,12 +24,19 @
+ PATH=/bin:/usr/bin
+ export PATH
+
+-# Lock by xscreensaver or gnome-screensaver, if a respective daemon is running
++# First test for the command set in the session's xfconf channel
++LOCK_CMD=$(xfconf-query -c xfce4-session -p /general/LockCommand)
++
++# Lock by xscreensaver, gnome-screensaver, or light-locker, if a respective daemon is running
+ for lock_cmd in \
++ "$LOCK_CMD" \
+ "xscreensaver-command -lock" \
+- "gnome-screensaver-command --lock"
++ "gnome-screensaver-command --lock" \
++ "light-locker-command -l"
+ do
+- $lock_cmd >/dev/null 2>&1 && exit
++ if [ ! -z "$lock_cmd" ]; then
++ $lock_cmd >/dev/null 2>&1 && exit
++ fi
+ done
+
+ # else run another access locking utility, if installed
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch b/nixpkgs/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch
new file mode 100644
index 00000000000..ed9df9ef36f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch
@@ -0,0 +1,24 @@
+diff --git a/panel/panel-module-factory.c b/panel/panel-module-factory.c
+index 529fe85..8c792b7 100644
+--- a/panel/panel-module-factory.c
++++ b/panel/panel-module-factory.c
+@@ -39,6 +39,7 @@
+ #include <panel/panel-module.h>
+ #include <panel/panel-module-factory.h>
+
++#define DATADIR "/run/current-system/sw/share/xfce4"
+ #define PANEL_PLUGINS_DATA_DIR (DATADIR G_DIR_SEPARATOR_S "panel" G_DIR_SEPARATOR_S "plugins")
+ #define PANEL_PLUGINS_DATA_DIR_OLD (DATADIR G_DIR_SEPARATOR_S "panel-plugins")
+
+diff --git a/panel/panel-module.c b/panel/panel-module.c
+index ba39320..519440b 100644
+--- a/panel/panel-module.c
++++ b/panel/panel-module.c
+@@ -35,6 +35,7 @@
+ #include <panel/panel-plugin-external-wrapper.h>
+ #include <panel/panel-plugin-external-46.h>
+
++#define LIBDIR "/run/current-system/sw/lib/xfce4"
+ #define PANEL_PLUGINS_LIB_DIR (LIBDIR G_DIR_SEPARATOR_S "panel" G_DIR_SEPARATOR_S "plugins")
+ #define PANEL_PLUGINS_LIB_DIR_OLD (LIBDIR G_DIR_SEPARATOR_S "panel-plugins")
+
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-panel.nix b/nixpkgs/pkgs/desktops/xfce/core/xfce4-panel.nix
new file mode 100644
index 00000000000..b8ecae7e4e6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-panel.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk, libxfce4util, libxfce4ui
+, libxfce4ui_gtk3, libwnck, exo, garcon, xfconf, libstartup_notification
+, makeWrapper, xfce4-mixer, hicolor-icon-theme, tzdata
+, withGtk3 ? false, gtk3, gettext, glib-networking
+}:
+let
+ inherit (stdenv.lib) optional;
+ p_name = "xfce4-panel";
+ ver_maj = "4.12";
+ ver_min = "2";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1s8cvsrgmkmmm84g6mghpj2k4777gm22g5lrsf8pdy5qh6xql1a2";
+ };
+
+ patches = [ ./xfce4-panel-datadir.patch ];
+ patchFlags = "-p1";
+
+ postPatch = ''
+ for f in $(find . -name \*.sh); do
+ substituteInPlace $f --replace gettext ${gettext}/bin/gettext
+ done
+ substituteInPlace plugins/clock/clock.c \
+ --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo" \
+ --replace "if (!g_file_test (filename, G_FILE_TEST_IS_SYMLINK))" ""
+ '';
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ buildInputs =
+ [ pkgconfig intltool gtk libxfce4util exo libwnck
+ garcon xfconf libstartup_notification makeWrapper hicolor-icon-theme
+ ] ++ xfce4-mixer.gst_plugins
+ ++ optional withGtk3 gtk3;
+
+ propagatedBuildInputs = [ (if withGtk3 then libxfce4ui_gtk3 else libxfce4ui) ];
+
+ configureFlags = optional withGtk3 "--enable-gtk3";
+
+ postInstall = ''
+ wrapProgram "$out/bin/xfce4-panel" \
+ --prefix GST_PLUGIN_SYSTEM_PATH : "$GST_PLUGIN_SYSTEM_PATH" \
+ --prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules"
+ '';
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/projects/xfce4-panel;
+ description = "Xfce panel";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-power-manager.nix b/nixpkgs/pkgs/desktops/xfce/core/xfce4-power-manager.nix
new file mode 100644
index 00000000000..266f3064507
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-power-manager.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchurl, pkgconfig, intltool, glib, gtk, dbus-glib, upower, xfconf
+, libxfce4ui, libxfce4util, libnotify, xfce4-panel, hicolor-icon-theme
+, withGtk3 ? false, gtk3, libxfce4ui_gtk3, xfce4panel_gtk3 }:
+let
+ p_name = "xfce4-power-manager";
+ ver_maj = if withGtk3 then "1.6" else "1.4";
+ ver_min = if withGtk3 then "0" else "4";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 =
+ if withGtk3
+ then "0avzhllpimcn7a6z9aa4jn0zg5ahxr9ks5ldchizycdb0rz1bqxx"
+ else "01rvqy1cif4s8lkidb7hhmsz7d9f2fwcwvc51xycaj3qgsmch3n5";
+ };
+
+ buildInputs =
+ [ pkgconfig intltool glib dbus-glib upower xfconf libxfce4util
+ libnotify hicolor-icon-theme
+ ] ++
+ (if withGtk3
+ then [ gtk3 libxfce4ui_gtk3 xfce4panel_gtk3 ]
+ else [ gtk libxfce4ui xfce4-panel ]);
+
+ postPatch = lib.optionalString withGtk3 ''
+ substituteInPlace configure --replace gio-2.0 gio-unix-2.0
+ '';
+
+ postConfigure = lib.optionalString withGtk3 ''
+ substituteInPlace src/Makefile --replace "xfce4_power_manager_CFLAGS = " "xfce4_power_manager_CFLAGS = \$(GIO_CFLAGS) "
+ substituteInPlace settings/Makefile --replace "xfce4_power_manager_settings_CFLAGS = " "xfce4_power_manager_settings_CFLAGS = \$(GIO_CFLAGS) "
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://goodies.xfce.org/projects/applications/xfce4-power-manager;
+ description = "A power manager for the Xfce Desktop Environment";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-session.nix b/nixpkgs/pkgs/desktops/xfce/core/xfce4-session.nix
new file mode 100644
index 00000000000..b57dd252033
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-session.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk, polkit
+, libxfce4util, libxfce4ui, xfce4-panel, libwnck, dbus-glib, xfconf, libglade, xorg
+, hicolor-icon-theme
+}:
+
+let
+ p_name = "xfce4-session";
+ ver_maj = "4.12";
+ ver_min = "1";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "97d7f2a2d0af7f3623b68d1f04091e02913b28f9555dab8b0d26c8a1299d08fd";
+ };
+
+ patches = [
+ # Fix "lock screen" not working for light-locker
+ ./xfce4-light-locker.patch
+ ];
+
+ buildInputs =
+ [ pkgconfig intltool gtk libxfce4util libxfce4ui libwnck dbus-glib
+ xfconf xfce4-panel libglade xorg.iceauth xorg.libSM
+ polkit hicolor-icon-theme
+ ]; #TODO: upower-glib, gconf (assistive?), gnome keyring
+
+ preBuild = ''
+ sed '/^PATH=/d' -i scripts/xflock4
+ sed '/^export PATH$/d' -i scripts/xflock4
+ '';
+
+ configureFlags = [ "--with-xsession-prefix=$(out)" ];
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/projects/xfce4-session;
+ description = "Session manager for Xfce";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-settings-default-icon-theme.patch b/nixpkgs/pkgs/desktops/xfce/core/xfce4-settings-default-icon-theme.patch
new file mode 100644
index 00000000000..2683b3c3dfd
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-settings-default-icon-theme.patch
@@ -0,0 +1,11 @@
+--- a/xfsettingsd/xsettings.xml 2015-02-28 22:32:02.681796319 +0100
++++ b/xfsettingsd/xsettings.xml 2015-02-28 22:32:27.881214735 +0100
+@@ -7,7 +7,7 @@
+ <channel name="xsettings" version="1.0">
+ <property name="Net" type="empty">
+ <property name="ThemeName" type="empty"/>
+- <property name="IconThemeName" type="empty"/>
++ <property name="IconThemeName" type="string" value="Rodent"/>
+ <property name="DoubleClickTime" type="int" value="400"/>
+ <property name="DoubleClickDistance" type="int" value="5"/>
+ <property name="DndDragThreshold" type="int" value="8"/> \ No newline at end of file
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfce4-settings.nix b/nixpkgs/pkgs/desktops/xfce/core/xfce4-settings.nix
new file mode 100644
index 00000000000..584055c8ddf
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfce4-settings.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, pkgconfig, intltool, exo, gtk, garcon, libxfce4util
+, libxfce4ui, xfconf, libXi, upower ? null, libnotify ? null
+, libXcursor ? null, xf86inputlibinput ? null, libxklavier ? null }:
+
+let
+ p_name = "xfce4-settings";
+ ver_maj = "4.12";
+ ver_min = "1";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0x35i1cvkqp0hib1knwa58mckdwrfbhaisz4bsx6bbbx385llj7n";
+ };
+
+ patches = [ ./xfce4-settings-default-icon-theme.patch ];
+
+ postPatch = ''
+ for f in $(find . -name \*.c); do
+ substituteInPlace $f --replace \"libinput-properties.h\" '<xorg/libinput-properties.h>'
+ done
+ '';
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [
+ exo
+ gtk
+ garcon
+ libxfce4util
+ libxfce4ui
+ xfconf
+ libXi
+ upower
+ libnotify
+ libXcursor
+ xf86inputlibinput
+ libxklavier
+ ];
+
+ configureFlags = [ "--enable-pluggable-dialogs" "--enable-sound-settings" ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/projects/xfce4-settings;
+ description = "Settings manager for Xfce";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfconf.nix b/nixpkgs/pkgs/desktops/xfce/core/xfconf.nix
new file mode 100644
index 00000000000..9af365c6f14
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfconf.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, libxfce4util, dbus-glib }:
+let
+ p_name = "xfconf";
+ ver_maj = "4.12";
+ ver_min = "1";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0dns190bwb615wy9ma2654sw4vz1d0rcv061zmaalkv9wmj8bx1m";
+ };
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ #TODO: no perl bingings yet (ExtUtils::Depends, ExtUtils::PkgConfig, Glib)
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool glib libxfce4util ];
+ propagatedBuildInputs = [ dbus-glib ];
+
+ doCheck = false; # requires dbus daemon
+
+ meta = with stdenv.lib; {
+ homepage = http://docs.xfce.org/xfce/xfconf/start;
+ description = "Simple client-server configuration storage and query system for Xfce";
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfdesktop.nix b/nixpkgs/pkgs/desktops/xfce/core/xfdesktop.nix
new file mode 100644
index 00000000000..091dd03c0bc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfdesktop.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, intltool, gtk, libxfce4util, libxfce4ui
+, libwnck, xfconf, libglade, xfce4-panel, thunar, exo, garcon, libnotify
+, hicolor-icon-theme }:
+let
+ p_name = "xfdesktop";
+ ver_maj = "4.12";
+ ver_min = "3";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "a8a8d93744d842ca6ac1f9bd2c8789ee178937bca7e170e5239cbdbef30520ac";
+ };
+
+ buildInputs = [
+ pkgconfig intltool gtk libxfce4util libxfce4ui libwnck xfconf
+ libglade xfce4-panel thunar exo garcon libnotify hicolor-icon-theme
+ ];
+
+ patches = [(fetchpatch {
+ url = https://git.xfce.org/xfce/xfdesktop/patch?id=157f5b55cfc3629d595ef38984278de5915aac27;
+ sha256 = "0ki7hnyfpz7bdmsxqnm9qvyk040iyv1fawnhzfbyyzrh4nc5jd3x";
+ })];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/projects/xfdesktop;
+ description = "Xfce desktop manager";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/core/xfwm4.nix b/nixpkgs/pkgs/desktops/xfce/core/xfwm4.nix
new file mode 100644
index 00000000000..d26649ee6ce
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/core/xfwm4.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, gtk, intltool, libglade, libxfce4util
+, libxfce4ui, xfconf, libwnck, libstartup_notification, xorg }:
+let
+ p_name = "xfwm4";
+ ver_maj = "4.12";
+ ver_min = "4";
+in
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/xfce/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0dpvdrd5lclkcrzmdpva38gfsgvdf3xkqfknvy96x6k4fn508x7s";
+ };
+
+ buildInputs =
+ [ pkgconfig intltool gtk libglade libxfce4util libxfce4ui xfconf
+ libwnck libstartup_notification
+ xorg.libXcomposite xorg.libXfixes xorg.libXdamage
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = https://www.xfce.org/projects/xfwm4;
+ description = "Window manager for Xfce";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.eelco ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/default.nix b/nixpkgs/pkgs/desktops/xfce/default.nix
new file mode 100644
index 00000000000..20d5175fed6
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/default.nix
@@ -0,0 +1,211 @@
+{ config, lib, pkgs }:
+
+lib.makeScope pkgs.newScope (self: with self; {
+ #### NixOS support
+
+ inherit (pkgs.gnome2) libglade vte gtksourceview;
+ inherit (pkgs.gnome3) dconf;
+ inherit (pkgs.perlPackages) URI;
+
+ gtk = pkgs.gtk2;
+
+ # Samba is a rather heavy dependency
+ gvfs = pkgs.gvfs.override { samba = null; };
+
+ xinitrc = "${xfce4-session}/etc/xdg/xfce4/xinitrc";
+
+ #### CORE
+
+ exo = callPackage ./core/exo.nix { };
+
+ garcon = callPackage ./core/garcon.nix { };
+
+ # When built with GTK 3, it was breaking GTK 3 app layout
+ gtk-xfce-engine = callPackage ./core/gtk-xfce-engine.nix { withGtk3 = false; };
+
+ libxfce4ui = callPackage ./core/libxfce4ui.nix { };
+
+ libxfce4util = callPackage ./core/libxfce4util.nix { };
+
+ libxfcegui4 = callPackage ./core/libxfcegui4.nix { };
+
+ thunar-bare = callPackage ./core/thunar-build.nix { };
+
+ thunar = callPackage ./core/thunar.nix { };
+
+ # NB: thunar already has it
+ thunar-volman = callPackage ./core/thunar-volman.nix { };
+
+ thunar-archive-plugin = callPackage ./thunar-plugins/archive { };
+
+ thunar-dropbox-plugin = callPackage ./thunar-plugins/dropbox { };
+
+ tumbler = callPackage ./core/tumbler.nix { };
+
+ # TODO: impure plugins from /run/current-system/sw/lib/xfce4
+ xfce4-panel = callPackage ./core/xfce4-panel.nix { };
+
+ xfce4-session = callPackage ./core/xfce4-session.nix { };
+
+ xfce4-settings = callPackage ./core/xfce4-settings.nix { };
+
+ xfce4-power-manager = callPackage ./core/xfce4-power-manager.nix { };
+
+ xfconf = callPackage ./core/xfconf.nix { };
+
+ xfdesktop = callPackage ./core/xfdesktop.nix { };
+
+ xfwm4 = callPackage ./core/xfwm4.nix { };
+
+ xfce4-appfinder = callPackage ./core/xfce4-appfinder.nix { };
+
+ xfce4-dev-tools = callPackage ./core/xfce4-dev-tools.nix { };
+
+ #### APPLICATIONS
+
+ gigolo = callPackage ./applications/gigolo.nix { };
+
+ mousepad = callPackage ./applications/mousepad.nix { };
+
+ orage = callPackage ./applications/orage.nix { };
+
+ parole = callPackage ./applications/parole.nix { };
+
+ ristretto = callPackage ./applications/ristretto.nix { };
+
+ xfce4-mixer = callPackage ./applications/xfce4-mixer.nix { };
+
+ xfce4-mixer-pulse = callPackage ./applications/xfce4-mixer.nix { pulseaudioSupport = true; };
+
+ xfce4-notifyd = callPackage ./applications/xfce4-notifyd.nix { };
+
+ xfce4-taskmanager = callPackage ./applications/xfce4-taskmanager.nix { };
+
+ xfce4-terminal = callPackage ./applications/terminal.nix { };
+
+ xfce4-screenshooter = callPackage ./applications/xfce4-screenshooter.nix { };
+
+ xfce4-volumed = callPackage ./applications/xfce4-volumed.nix { };
+
+ xfce4-volumed-pulse = callPackage ./applications/xfce4-volumed-pulse.nix { };
+
+ #### ART
+
+ xfce4-icon-theme = callPackage ./art/xfce4-icon-theme.nix { };
+
+ xfwm4-themes = callPackage ./art/xfwm4-themes.nix { };
+
+ #### PANEL PLUGINS
+
+ xfce4-vala-panel-appmenu-plugin = callPackage ./panel-plugins/xfce4-vala-panel-appmenu-plugin { };
+
+ xfce4-battery-plugin = callPackage ./panel-plugins/xfce4-battery-plugin.nix { };
+
+ xfce4-clipman-plugin = callPackage ./panel-plugins/xfce4-clipman-plugin.nix { };
+
+ xfce4-cpufreq-plugin = callPackage ./panel-plugins/xfce4-cpufreq-plugin.nix { };
+
+ xfce4-cpugraph-plugin = callPackage ./panel-plugins/xfce4-cpugraph-plugin.nix { };
+
+ xfce4-datetime-plugin = callPackage ./panel-plugins/xfce4-datetime-plugin.nix { };
+
+ xfce4-dict-plugin = callPackage ./panel-plugins/xfce4-dict-plugin.nix { };
+
+ xfce4-dockbarx-plugin = callPackage ./panel-plugins/xfce4-dockbarx-plugin.nix { };
+
+ xfce4-embed-plugin = callPackage ./panel-plugins/xfce4-embed-plugin.nix { };
+
+ xfce4-eyes-plugin = callPackage ./panel-plugins/xfce4-eyes-plugin.nix { };
+
+ xfce4-fsguard-plugin = callPackage ./panel-plugins/xfce4-fsguard-plugin.nix { };
+
+ xfce4-genmon-plugin = callPackage ./panel-plugins/xfce4-genmon-plugin.nix { };
+
+ xfce4-hardware-monitor-plugin = callPackage ./panel-plugins/xfce4-hardware-monitor-plugin.nix { };
+
+ xfce4-namebar-plugin = callPackage ./panel-plugins/xfce4-namebar-plugin.nix { };
+
+ xfce4-netload-plugin = callPackage ./panel-plugins/xfce4-netload-plugin.nix { };
+
+ xfce4-notes-plugin = callPackage ./panel-plugins/xfce4-notes-plugin.nix { };
+
+ xfce4-mailwatch-plugin = callPackage ./panel-plugins/xfce4-mailwatch-plugin.nix { };
+
+ xfce4-mpc-plugin = callPackage ./panel-plugins/xfce4-mpc-plugin.nix { };
+
+ xfce4-sensors-plugin = callPackage ./panel-plugins/xfce4-sensors-plugin.nix { };
+
+ xfce4-systemload-plugin = callPackage ./panel-plugins/xfce4-systemload-plugin.nix { };
+
+ xfce4-timer-plugin = callPackage ./panel-plugins/xfce4-timer-plugin.nix { };
+
+ xfce4-verve-plugin = callPackage ./panel-plugins/xfce4-verve-plugin.nix { };
+
+ xfce4-xkb-plugin = callPackage ./panel-plugins/xfce4-xkb-plugin.nix { };
+
+ xfce4-weather-plugin = callPackage ./panel-plugins/xfce4-weather-plugin.nix { };
+
+ xfce4-whiskermenu-plugin = callPackage ./panel-plugins/xfce4-whiskermenu-plugin.nix { };
+
+ xfce4-windowck-plugin = callPackage ./panel-plugins/xfce4-windowck-plugin.nix { };
+
+ xfce4-pulseaudio-plugin = callPackage ./panel-plugins/xfce4-pulseaudio-plugin.nix { };
+
+ #### GTK3 (deprecated, see NixOS/nixpkgs#32763)
+
+ libxfce4ui_gtk3 = libxfce4ui.override { withGtk3 = true; };
+
+ xfce4panel_gtk3 = xfce4-panel.override { withGtk3 = true; };
+
+ xfce4_power_manager_gtk3 = xfce4-power-manager.override { withGtk3 = true; };
+
+} // lib.optionalAttrs (config.allowAliases or true) {
+ #### ALIASES - added 2018-01
+
+ terminal = xfce4-terminal;
+ thunar-build = thunar-bare;
+ thunarx-2-dev = thunar-build;
+ thunar_volman = thunar-volman;
+ xfce4panel = xfce4-panel;
+ xfce4session = xfce4-session;
+ xfce4settings = xfce4-settings;
+ xfce4_power_manager = xfce4-power-manager;
+ xfce4_appfinder = xfce4-appfinder;
+ xfce4_dev_tools = xfce4-dev-tools;
+ xfce4mixer = xfce4-mixer;
+ xfce4mixer_pulse = xfce4-mixer-pulse;
+ xfce4notifyd = xfce4-notifyd;
+ xfce4taskmanager = xfce4-taskmanager;
+ xfce4terminal = xfce4-terminal;
+ xfce4volumed = xfce4-volumed;
+ xfce4volumed_pulse = xfce4-volumed-pulse;
+ xfce4icontheme = xfce4-icon-theme;
+ xfwm4themes = xfwm4-themes;
+
+ xfce4_battery_plugin = xfce4-battery-plugin;
+ xfce4_clipman_plugin = xfce4-clipman-plugin;
+ xfce4_cpufreq_plugin = xfce4-cpufreq-plugin;
+ xfce4_cpugraph_plugin = xfce4-cpugraph-plugin;
+ xfce4_datetime_plugin = xfce4-datetime-plugin;
+ xfce4_dict_plugin = xfce4-dict-plugin;
+ xfce4_dockbarx_plugin = xfce4-dockbarx-plugin;
+ xfce4_embed_plugin = xfce4-embed-plugin;
+ xfce4_eyes_plugin = xfce4-eyes-plugin;
+ xfce4_fsguard_plugin = xfce4-fsguard-plugin;
+ xfce4_genmon_plugin = xfce4-genmon-plugin;
+ xfce4_hardware_monitor_plugin = xfce4-hardware-monitor-plugin;
+ xfce4_namebar_plugin = xfce4-namebar-plugin;
+ xfce4_netload_plugin = xfce4-netload-plugin;
+ xfce4_notes_plugin = xfce4-notes-plugin;
+ xfce4_mailwatch_plugin = xfce4-mailwatch-plugin;
+ xfce4_mpc_plugin = xfce4-mpc-plugin;
+ xfce4_sensors_plugin = xfce4-sensors-plugin;
+ xfce4_systemload_plugin = xfce4-systemload-plugin;
+ xfce4_timer_plugin = xfce4-timer-plugin;
+ xfce4_verve_plugin = xfce4-verve-plugin;
+ xfce4_xkb_plugin = xfce4-xkb-plugin;
+ xfce4_weather_plugin = xfce4-weather-plugin;
+ xfce4_whiskermenu_plugin = xfce4-whiskermenu-plugin;
+ xfce4_windowck_plugin = xfce4-windowck-plugin;
+ xfce4_pulseaudio_plugin = xfce4-pulseaudio-plugin;
+})
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-battery-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-battery-plugin.nix
new file mode 100644
index 00000000000..6399aa3cc20
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-battery-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk, hicolor-icon-theme }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-battery-plugin";
+ ver_maj = "1.0";
+ ver_min = "5";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "04gbplcj8z4vg5xbks8cc2jjf62mmf9sdymg90scjwmb82pv2ngn";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk hicolor-icon-theme ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Battery plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-clipman-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-clipman-plugin.nix
new file mode 100644
index 00000000000..280f39f8d99
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-clipman-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, exo, libXtst, xorgproto, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk, hicolor-icon-theme }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-clipman-plugin";
+ ver_maj = "1.2";
+ ver_min = "6";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "19a8gwcqc0r5qqi8w28dc8arqip34m8yxdb87lgps9g5qfcky113";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool glib exo libXtst xorgproto libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk hicolor-icon-theme ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Clipboard manager for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix
new file mode 100644
index 00000000000..07838f8fe7c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk, hicolor-icon-theme }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-cpufreq-plugin";
+ ver_maj = "1.1";
+ ver_min = "3";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0crd21l5cw0xgm6w7s049xa36k203yx7l56ssnah9nq1w73n58bl";
+ };
+
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk hicolor-icon-theme ];
+
+ enableParallelBuilding = true;
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "CPU Freq load plugin for Xfce panel";
+ license = [ licenses.gpl2Plus ];
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpugraph-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpugraph-plugin.nix
new file mode 100644
index 00000000000..e088e74cfb1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-cpugraph-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, exo, libXtst, xorgproto, libxfce4util, xfce4-panel, libxfce4ui, xfconf, gtk, hicolor-icon-theme }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-cpugraph-plugin";
+ ver_maj = "1.0";
+ ver_min = "5";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1izl53q95m5xm2fiq7385vb1i9nwgjizxkmgpgh33zdckb40xnl5";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool glib exo libXtst xorgproto libxfce4util libxfce4ui xfce4-panel xfconf gtk hicolor-icon-theme ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "CPU graph show for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-datetime-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-datetime-plugin.nix
new file mode 100644
index 00000000000..c6317010031
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-datetime-plugin.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, libxfcegui4, xfce4-panel
+, gtk }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-datetime-plugin";
+ ver_maj = "0.6";
+ ver_min = "2";
+
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0b4yril07qgkmywjym1qp12r4g35bnh96879zbjps7cd3rkxld4p";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfcegui4 xfce4-panel gtk ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Shows the date and time in the panel, and a calendar appears when you left-click on it";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dict-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dict-plugin.nix
new file mode 100644
index 00000000000..8210fc62ccb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dict-plugin.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-dict-plugin";
+ ver_maj = "0.3";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.gz";
+ sha256 = "1x0imfnsdfq7fbhka8bc0yjjspkcljc1jafhrwzb08qi9bk2wbar";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Dictionary plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ broken = true; # see http://goodies.xfce.org/projects/panel-plugins/xfce4-dict-plugin
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dockbarx-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dockbarx-plugin.nix
new file mode 100644
index 00000000000..b33ba7770be
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-dockbarx-plugin.nix
@@ -0,0 +1,40 @@
+{ stdenv, pkgconfig, fetchFromGitHub, python2, bash, vala
+, dockbarx, gtk2, xfce, pythonPackages, wafHook }:
+
+stdenv.mkDerivation rec {
+ ver = "0.5";
+ rev = "a2dcb66";
+ name = "xfce4-dockbarx-plugin-${ver}-${rev}";
+
+ src = fetchFromGitHub {
+ owner = "TiZ-EX1";
+ repo = "xfce4-dockbarx-plugin";
+ rev = rev;
+ sha256 = "1f75iwlshnif60x0qqdqw5ffng2m4f4zp0ijkrbjz83wm73nsxfx";
+ };
+
+ pythonPath = [ dockbarx ];
+
+ nativeBuildInputs = [ pkgconfig wafHook ];
+ buildInputs = [ python2 vala gtk2 pythonPackages.wrapPython ]
+ ++ (with xfce; [ libxfce4util xfce4-panel xfconf xfce4-dev-tools ])
+ ++ pythonPath;
+
+ postPatch = ''
+ substituteInPlace wscript --replace /usr/share/ "\''${PREFIX}/share/"
+ substituteInPlace src/dockbarx.vala --replace /usr/share/ $out/share/
+ substituteInPlace src/dockbarx.vala --replace '/usr/bin/env python2' ${bash}/bin/bash
+ '';
+
+ postFixup = ''
+ wrapPythonProgramsIn "$out/share/xfce4/panel/plugins" "$out $pythonPath"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/TiZ-EX1/xfce4-dockbarx-plugin;
+ description = "A plugins to embed DockbarX into xfce4-panel";
+ license = licenses.mit;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.volth ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-embed-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-embed-plugin.nix
new file mode 100644
index 00000000000..e6d1f6da26b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-embed-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, xfconf, gtk2 }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-embed-plugin";
+ ver_maj = "1.6";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0a72kqsjjh45swimqlpyrahdnplp0383v0i4phr4n6g8c1ixyry7";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel xfconf gtk2 ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Embed arbitrary app windows on Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin.nix
new file mode 100644
index 00000000000..3a79f67068c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-eyes-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-eyes-plugin";
+ ver_maj = "4.4";
+ ver_min = "4";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1jh02hylvsvfpxrx0bq6fzgy6vnxf9qakgpbfvr63lfkd1dyh314";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Eyes following you!";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-fsguard-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-fsguard-plugin.nix
new file mode 100644
index 00000000000..6d0f8ee73a4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-fsguard-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-fsguard-plugin";
+ ver_maj = "1.0";
+ ver_min = "2";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1bj021h4q68bc03f32pkyqy4gfd1sz6s21nxdg7j6gdfhs9xbj52";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Filesystem monitor";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-genmon-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-genmon-plugin.nix
new file mode 100644
index 00000000000..039ac144094
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-genmon-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-genmon-plugin";
+ ver_maj = "3.4";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "11q3g6lmgz3d5lyh6614mxkd9cblfdyf9jgki7f26mn895xk79dh";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Cyclically spawns a command and captures its output";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-hardware-monitor-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-hardware-monitor-plugin.nix
new file mode 100644
index 00000000000..2782decf6c4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-hardware-monitor-plugin.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, intltool, autoreconfHook, gnome2, gtkmm2,
+ libgtop, libxfce4ui, libxfce4util, xfce4-panel, lm_sensors
+}:
+
+stdenv.mkDerivation rec {
+ pname = "xfce4-hardware-monitor-plugin";
+ version = "1.6.0";
+
+ src = fetchurl {
+ url = "https://git.xfce.org/panel-plugins/${pname}/snapshot/${pname}-${version}.tar.bz2";
+ sha256 = "0xg5har11fk1wmdymydxlbk1z8aa39j8k0p4gzw2iqslv3n0zf7b";
+ };
+
+ nativeBuildInputs = [
+ autoreconfHook
+ pkgconfig
+ intltool
+ ];
+
+ buildInputs = [
+ gtkmm2
+ gnome2.libgnomecanvas
+ gnome2.libgnomecanvasmm
+ libgtop
+ libxfce4ui
+ libxfce4util
+ xfce4-panel
+ lm_sensors
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${pname}";
+ description = "Hardware monitor plugin for the XFCE4 panel";
+ license = stdenv.lib.licenses.gpl3;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mailwatch-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mailwatch-plugin.nix
new file mode 100644
index 00000000000..541b30ec1b3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mailwatch-plugin.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui,
+libxfcegui4, xfconf, gtk, exo, gnutls, libgcrypt }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-mailwatch-plugin";
+ ver_maj = "1.2";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1bfw3smwivr9mzdyq768biqrl4aq94zqi3xjzq6kqnd8561cqjk2";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel
+ libxfcegui4 xfconf gtk exo gnutls libgcrypt ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Mailwatch plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mpc-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mpc-plugin.nix
new file mode 100644
index 00000000000..5331c29a454
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-mpc-plugin.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui,
+libxfcegui4, xfconf, gtk, exo }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-mpc-plugin";
+ ver_maj = "0.4";
+ ver_min = "5";
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1kvgq1pq7cykqdc3227dq0izad093ppfw3nfsrcp9i8mi6i5f7z7";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel
+ libxfcegui4 xfconf gtk exo ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "MPD plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-namebar-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-namebar-plugin.nix
new file mode 100644
index 00000000000..8c6c91e2519
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-namebar-plugin.nix
@@ -0,0 +1,31 @@
+{ stdenv, pkgconfig, fetchFromGitHub, python2, vala_0_40
+, gtk2, libwnck, libxfce4util, xfce4-panel, wafHook }:
+
+stdenv.mkDerivation rec {
+ ver = "0.3.1";
+ rev = "07a23b3";
+ name = "xfce4-namebar-plugin-${ver}";
+
+ src = fetchFromGitHub {
+ owner = "TiZ-EX1";
+ repo = "xfce4-namebar-plugin";
+ rev = rev;
+ sha256 = "1sl4qmjywfvv53ch7hyfysjfd91zl38y7gdw2y3k69vkzd3h18ad";
+ };
+
+ nativeBuildInputs = [ pkgconfig wafHook ];
+ buildInputs = [ python2 vala_0_40 gtk2 libwnck libxfce4util xfce4-panel ];
+
+ postPatch = ''
+ substituteInPlace src/preferences.vala --replace 'Environment.get_system_data_dirs()' "{ \"$out/share\" }"
+ substituteInPlace src/namebar.vala --replace 'Environment.get_system_data_dirs()' "{ \"$out/share\" }"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = https://github.com/TiZ-EX1/xfce4-namebar-plugin;
+ description = "A plugins which integrates titlebar and window controls into the xfce4-panel";
+ license = licenses.mit;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.volth ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-netload-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-netload-plugin.nix
new file mode 100644
index 00000000000..e82669cc1a3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-netload-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk, hicolor-icon-theme }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-netload-plugin";
+ ver_maj = "1.2";
+ ver_min = "4";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1lrhhzxmybcfl52hnadr2dvasis9wmk6a48pcy02s09ch8cfkb7z";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk hicolor-icon-theme ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Battery plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-notes-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-notes-plugin.nix
new file mode 100644
index 00000000000..d61dae6bdd5
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-notes-plugin.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, libxfcegui4, xfconf, gtk, libunique }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-notes-plugin";
+ ver_maj = "1.7";
+ ver_min = "7";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "05sjbwgch1j93m3r23ksbjnpfk11sf7xjmbb9pm5vl3snc2s3fm7";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf gtk libunique ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Sticky notes plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ broken = true;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-pulseaudio-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-pulseaudio-plugin.nix
new file mode 100644
index 00000000000..6f6f5699b6e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-pulseaudio-plugin.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4panel_gtk3, xfconf
+, gtk3, libpulseaudio, hicolor-icon-theme
+, withKeybinder ? true, keybinder3
+, withLibnotify ? true, libnotify
+}:
+
+assert withKeybinder -> keybinder3 != null;
+assert withLibnotify -> libnotify != null;
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-pulseaudio-plugin";
+ ver_maj = "0.2";
+ ver_min = "3";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "e82836bc8cf7d905b4e60d43dc630ba8e32dea785989700c71d4aeee9f583b33";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+ buildInputs = [ libxfce4util xfce4panel_gtk3 xfconf gtk3 libpulseaudio hicolor-icon-theme ]
+ ++ optional withKeybinder keybinder3
+ ++ optional withLibnotify libnotify;
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Adjust the audio volume of the PulseAudio sound system";
+ platforms = platforms.linux;
+ maintainers = [ ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-sensors-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-sensors-plugin.nix
new file mode 100644
index 00000000000..5a4dfee76fc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-sensors-plugin.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gnome2, libxfce4ui,
+ libxfce4util, xfce4-panel, libnotify, lm_sensors, hddtemp, netcat-gnu
+}:
+
+stdenv.mkDerivation rec {
+ name = "${pname}-${ver_maj}.${ver_min}";
+ pname = "xfce4-sensors-plugin";
+ ver_maj = "1.2";
+ ver_min = "6";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${pname}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1h0vpqxcziml3gwrbvd8xvy1mwh9mf2a68dvxsy03rs5pm1ghpi3";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ intltool
+ ];
+
+ buildInputs = [
+ gnome2.gtk
+ libxfce4ui
+ libxfce4util
+ xfce4-panel
+ libnotify
+ lm_sensors
+ hddtemp
+ netcat-gnu
+ ];
+
+ enableParallelBuilding = true;
+
+ configureFlags = [
+ "--with-pathhddtemp=${hddtemp}/bin/hddtemp"
+ "--with-pathnetcat=${netcat-gnu}/bin/netcat"
+ ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${pname}";
+ description = "A panel plug-in for different sensors using acpi, lm_sensors and hddtemp";
+ license = stdenv.lib.licenses.gpl2;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix
new file mode 100644
index 00000000000..698d4aae532
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel, libxfce4ui, gtk}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-systemload-plugin";
+ ver_maj = "1.1";
+ ver_min = "2";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0z4as6sxdz93d4jpgv0665dg4sykfvc5068mc689phlfl2rvcsdl";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel gtk ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "System load plugin for Xfce panel";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-timer-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-timer-plugin.nix
new file mode 100644
index 00000000000..57cd48c6f27
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-timer-plugin.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4-panel
+, libxfce4ui, libxfcegui4, xfconf, gtk, hicolor-icon-theme }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-timer-plugin";
+ ver_maj = "1.6";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "0z46gyw3ihcd1jf0m5z1dsc790xv1cpi8mk1dagj3i4v14gx5mrr";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel libxfcegui4 xfconf
+ gtk hicolor-icon-theme ];
+
+ nativeBuildInputs = [ pkgconfig ];
+
+ hardeningDisable = [ "format" ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "A simple XFCE panel plugin that lets the user run an alarm at a specified time or at the end of a specified countdown period";
+ platforms = platforms.linux;
+ license = licenses.gpl2;
+ maintainers = [ ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/appmenu-gtk-module.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/appmenu-gtk-module.nix
new file mode 100644
index 00000000000..39393dd39e9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/appmenu-gtk-module.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, cmake, vala, glib, gtk2, gtk3 }:
+stdenv.mkDerivation rec {
+ pname = "vala-panel-appmenu-xfce";
+ version = "0.6.94";
+
+ src = "${fetchFromGitHub {
+ owner = "rilian-la-te";
+ repo = "vala-panel-appmenu";
+ rev = version;
+ fetchSubmodules = true;
+
+ sha256 = "0xxn3zs60a9nfix8wrdp056wviq281cm1031hznzf1l38lp3wr5p";
+ }}/subprojects/appmenu-gtk-module";
+
+ nativeBuildInputs = [ cmake vala ];
+ buildInputs = [ glib gtk2 gtk3 ];
+
+ configurePhase = ''
+ cmake . -DGTK3_INCLUDE_GDK=
+ '';
+ installPhase = ''
+ make DESTDIR=output install
+ cp -r output/var/empty/* "$out"
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Port of the Unity GTK Module";
+ license = licenses.lgpl3;
+ maintainers = with maintainers; [ jD91mZM2 ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/default.nix
new file mode 100644
index 00000000000..144291da86d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, substituteAll, callPackage, pkgconfig, cmake, vala, libxml2,
+ glib, pcre, gtk2, gtk3, xorg, libxkbcommon, epoxy, at-spi2-core, dbus-glib, bamf,
+ xfce, libwnck3, libdbusmenu, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+ pname = "xfce4-vala-panel-appmenu-plugin";
+ version = "0.6.94";
+
+ src = fetchFromGitHub {
+ owner = "rilian-la-te";
+ repo = "vala-panel-appmenu";
+ rev = version;
+ fetchSubmodules = true;
+
+ sha256 = "0xxn3zs60a9nfix8wrdp056wviq281cm1031hznzf1l38lp3wr5p";
+ };
+
+ nativeBuildInputs = [ pkgconfig cmake vala libxml2.bin ];
+ buildInputs = [ (callPackage ./appmenu-gtk-module.nix {})
+ glib pcre gtk2 gtk3 xorg.libpthreadstubs xorg.libXdmcp libxkbcommon epoxy
+ at-spi2-core dbus-glib bamf xfce.xfce4panel_gtk3 xfce.libxfce4util xfce.xfconf
+ libwnck3 libdbusmenu gobject-introspection ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-bamf-dependency.patch;
+ bamf = bamf;
+ })
+ ];
+
+ cmakeFlags = [
+ "-DENABLE_XFCE=ON"
+ "-DENABLE_BUDGIE=OFF"
+ "-DENABLE_VALAPANEL=OFF"
+ "-DENABLE_MATE=OFF"
+ "-DENABLE_JAYATANA=OFF"
+ "-DENABLE_APPMENU_GTK_MODULE=OFF"
+ ];
+
+ preConfigure = ''
+ mv cmake/FallbackVersion.cmake.in cmake/FallbackVersion.cmake
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Global Menu applet for XFCE4";
+ license = licenses.lgpl3;
+ maintainers = with maintainers; [ jD91mZM2 ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/fix-bamf-dependency.patch b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/fix-bamf-dependency.patch
new file mode 100644
index 00000000000..1ed86a67f72
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-vala-panel-appmenu-plugin/fix-bamf-dependency.patch
@@ -0,0 +1,12 @@
++++ source/cmake/FindBAMF.cmake 2018-05-11 17:03:44.385917811 +0200
+@@ -80,9 +80,7 @@
+
+ find_program(BAMF_DAEMON_EXECUTABLE
+ bamfdaemon
+- HINTS ${CMAKE_INSTALL_FULL_LIBDIR}
+- ${CMAKE_INSTALL_FULL_LIBEXECDIR}
+- ${BAMF_LIBDIR}
++ HINTS "@bamf@/libexec/bamf/"
+ PATH_SUFFIXES bamf
+ )
+
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-verve-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-verve-plugin.nix
new file mode 100644
index 00000000000..96ef08cbeb7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-verve-plugin.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, intltool, glib, exo, pcre
+, libxfce4util, xfce4-panel, libxfce4ui, xfconf, gtk }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-verve-plugin";
+ ver_maj = "1.1";
+ ver_min = "0";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "114wkmgjxkim1jkswih20zg9d7rbzmlf30b5rlcpvmbsij0ny6d3";
+ };
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool glib exo pcre libxfce4util libxfce4ui xfce4-panel xfconf gtk ];
+
+ hardeningDisable = [ "format" ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "A command-line plugin";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-weather-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-weather-plugin.nix
new file mode 100644
index 00000000000..15cd526d6de
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-weather-plugin.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gtk, libxml2, libsoup, upower,
+libxfce4ui, libxfce4util, xfce4-panel, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ name = "${p_name}-${ver_maj}.${ver_min}";
+ p_name = "xfce4-weather-plugin";
+ ver_maj = "0.8";
+ ver_min = "10";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "1f7ac2zr5s5w6krdpgsq252wxhhmcblia3j783132ilh8k246vgf";
+ };
+
+ nativeBuildInputs = [ pkgconfig intltool ];
+
+ buildInputs = [ gtk libxml2 libsoup upower libxfce4ui libxfce4util
+ xfce4-panel hicolor-icon-theme ];
+
+ enableParallelBuilding = true;
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Weather plugin for the Xfce desktop environment";
+ license = stdenv.lib.licenses.gpl2Plus;
+ platforms = stdenv.lib.platforms.unix;
+ maintainers = [ stdenv.lib.maintainers.romildo ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-whiskermenu-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-whiskermenu-plugin.nix
new file mode 100644
index 00000000000..c29758452ae
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-whiskermenu-plugin.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, intltool, libxfce4util, libxfcegui4
+, xfce4-panel, gtk, exo, garcon }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-whiskermenu-plugin";
+ version = "1.7.2";
+
+ name = "${p_name}-${version}";
+
+ src = fetchFromGitHub {
+ owner = "gottcode";
+ repo = "xfce4-whiskermenu-plugin";
+ rev = "v${version}";
+ sha256 = "1rpazgnjp443abc31bgi6gp9q3sgbg13v7v74nn7vf6kl4v725ah";
+ };
+
+ nativeBuildInputs = [ cmake pkgconfig intltool ];
+
+ buildInputs = [ libxfce4util libxfcegui4 xfce4-panel gtk exo garcon ];
+
+ enableParallelBuilding = true;
+
+ preFixup = ''
+ substituteInPlace $out/bin/xfce4-popup-whiskermenu \
+ --replace $out/bin/xfce4-panel ${xfce4-panel.out}/bin/xfce4-panel
+ '';
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Alternate application launcher for Xfce";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = [ maintainers.pjbarnoy ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-windowck-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-windowck-plugin.nix
new file mode 100644
index 00000000000..8798851579d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-windowck-plugin.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, python3, imagemagick, libwnck, gtk2
+, exo, libxfce4ui, libxfce4util, xfce4-panel, xfconf, xfce4-dev-tools }:
+
+stdenv.mkDerivation rec {
+ p_name = "xfce4-windowck-plugin";
+ version = "0.4.4";
+
+ src = fetchFromGitHub {
+ owner = "cedl38";
+ repo = "xfce4-windowck-plugin";
+ rev = "v${version}";
+ sha256 = "0c6a1ibh39dpq9x0dha5lsg0vzmgaf051fgwz0nlky0s94nwzvgv";
+ };
+ name = "${p_name}-${version}";
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool python3 imagemagick libwnck gtk2
+ exo libxfce4ui libxfce4util xfce4-panel xfconf xfce4-dev-tools ];
+
+ preConfigure = ''
+ ./autogen.sh
+ patchShebangs .
+ '';
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Set of two plugins which allows you to put the maximized window title and windows buttons on the panel";
+ license = licenses.gpl2Plus;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.volth ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-xkb-plugin.nix b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-xkb-plugin.nix
new file mode 100644
index 00000000000..307d2e81bf2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/panel-plugins/xfce4-xkb-plugin.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, libxfce4ui, xfce4-panel
+, garcon, gtk, libxklavier, librsvg, libwnck
+}:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+ p_name = "xfce4-xkb-plugin";
+ ver_maj = "0.7";
+ ver_min = "1";
+
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "mirror://xfce/src/panel-plugins/${p_name}/${ver_maj}/${name}.tar.bz2";
+ sha256 = "10g65j5ia389ahhn3b9hr52ghpp0817fk0m60rfrv4wrzqrjxzk1";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ intltool libxfce4util libxfce4ui xfce4-panel garcon
+ gtk libxklavier librsvg libwnck ];
+
+ meta = {
+ homepage = "http://goodies.xfce.org/projects/panel-plugins/${p_name}";
+ description = "Allows you to setup and use multiple keyboard layouts";
+ platforms = platforms.linux;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/thunar-plugins/archive/default.nix b/nixpkgs/pkgs/desktops/xfce/thunar-plugins/archive/default.nix
new file mode 100644
index 00000000000..ea3a0f08443
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/thunar-plugins/archive/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchFromGitHub, pkgconfig, xfce4-dev-tools
+, gtk
+, thunar-bare
+, exo, libxfce4util, libxfce4ui
+, xfconf, udev, libnotify, hicolor-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "thunar-archive-plugin";
+ ver_maj = "0.3";
+ ver_min = "1";
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchFromGitHub {
+ owner = "xfce-mirror";
+ repo = p_name;
+ rev = "72b23eefc348bee31e06a04f968e430bc7dfa51e";
+ sha256 = "0l8715x23qmk0jkywiza3qx0xxmafxi4grp7p82kkc5df5ccs8kx";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ xfce4-dev-tools
+ thunar-bare
+ exo gtk libxfce4util libxfce4ui
+ xfconf udev libnotify hicolor-icon-theme
+ ];
+
+ preConfigure = ''
+ ./autogen.sh
+ '';
+
+ /*
+ File roller `*.desktop` situation
+ ---------------------------------
+
+ For some odd reason, in nix os, gnome file-roller's desktop file has the non-standard name
+ `org.gnome.FileRoller.desktop`. In order to be compatible with this odd context, create
+ a `*.tap` file of the same name.
+
+ IMPORTANT: Adapt or remove the symbolic link if the situation changes.
+ */
+ preFixup = ''
+ pushd $out/libexec/thunar-archive-plugin > /dev/null
+ ln -s ./file-roller.tap org.gnome.FileRoller.tap
+ popd > /dev/null
+ '';
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = http://foo-projects.org/~benny/projects/thunar-archive-plugin/;
+ description = "Thunar plugin providing file context menus for archives";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce/thunar-plugins/dropbox/default.nix b/nixpkgs/pkgs/desktops/xfce/thunar-plugins/dropbox/default.nix
new file mode 100644
index 00000000000..217cecf85a8
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce/thunar-plugins/dropbox/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig
+, gtk
+, thunar-bare, python2, hicolor-icon-theme
+, wafHook
+}:
+
+stdenv.mkDerivation rec {
+ p_name = "thunar-dropbox-plugin";
+ ver_maj = "0.2";
+ ver_min = "1";
+ name = "${p_name}-${ver_maj}.${ver_min}";
+
+ src = fetchurl {
+ url = "http://softwarebakery.com/maato/files/thunar-dropbox/thunar-dropbox-${ver_maj}.${ver_min}.tar.bz2";
+ sha256 = "08vhzzzwshyz371yl7fzfylmhvchhv3s5kml3dva4v39jhvrpnkf";
+ };
+
+ nativeBuildInputs = [ pkgconfig wafHook ];
+ buildInputs = [
+ gtk
+ thunar-bare python2 hicolor-icon-theme
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ homepage = http://softwarebakery.com/maato/thunar-dropbox.html;
+ description = "A plugin for thunar that adds context-menu items from dropbox";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/automakeAddFlags.sh b/nixpkgs/pkgs/desktops/xfce4-14/automakeAddFlags.sh
new file mode 100644
index 00000000000..92d5659d05c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/automakeAddFlags.sh
@@ -0,0 +1,7 @@
+automakeAddFlags() {
+ local file="$1"
+ local target="$2"
+ local source="$3"
+
+ sed "/$target/a\$($source) \\\\" -i $file
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/default.nix
new file mode 100644
index 00000000000..0e2c8c1696b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/default.nix
@@ -0,0 +1,116 @@
+{ lib, makeSetupHook, newScope, gnome3, gst_all_1 }:
+
+let
+ inherit (lib) makeScope;
+in
+
+makeScope newScope (self: with self; {
+ mkXfceDerivation = callPackage ./mkXfceDerivation.nix { };
+
+ automakeAddFlags = makeSetupHook { } ./automakeAddFlags.sh;
+
+ exo = callPackage ./exo { };
+
+ garcon = callPackage ./garcon { };
+
+ gigolo = callPackage ./gigolo { };
+
+ libxfce4util = callPackage ./libxfce4util { };
+
+ libxfce4ui = callPackage ./libxfce4ui { };
+
+ mousepad = callPackage ./mousepad { };
+
+ orage = callPackage ./orage { };
+
+ parole = callPackage ./parole {
+ inherit (gst_all_1) gst-plugins-bad gst-plugins-base gst-plugins-good;
+ gst-plugins-ugly = null;
+ };
+
+ ristretto = callPackage ./ristretto { };
+
+ thunar = callPackage ./thunar { };
+
+ thunar-volman = callPackage ./thunar-volman { };
+
+ tumbler = callPackage ./tumbler { };
+
+ xfburn = callPackage ./xfburn { };
+
+ xfconf = callPackage ./xfconf { };
+
+ xfdesktop = callPackage ./xfdesktop { };
+
+ xfce4-appfinder = callPackage ./xfce4-appfinder { };
+
+ xfce4-battery-plugin = callPackage ./xfce4-battery-plugin { };
+
+ xfce4-cpufreq-plugin = callPackage ./xfce4-cpufreq-plugin { };
+
+ xfce4-clipman-plugin = callPackage ./xfce4-clipman-plugin { };
+
+ xfce4-dev-tools = callPackage ./xfce4-dev-tools {
+ mkXfceDerivation = mkXfceDerivation.override {
+ xfce4-dev-tools = null;
+ };
+ };
+
+ xfce4-dict = callPackage ./xfce4-dict { };
+
+ xfce4-netload-plugin = callPackage ./xfce4-netload-plugin { };
+
+ xfce4-notifyd = callPackage ./xfce4-notifyd { };
+
+ xfce4-panel = callPackage ./xfce4-panel { };
+
+ xfce4-power-manager = callPackage ./xfce4-power-manager { };
+
+ xfce4-pulseaudio-plugin = callPackage ./xfce4-pulseaudio-plugin { };
+
+ xfce4-screenshooter = callPackage ./xfce4-screenshooter {
+ inherit (gnome3) libsoup;
+ };
+
+ xfce4-session = callPackage ./xfce4-session { };
+ xinitrc = "${xfce4-session}/etc/xdg/xfce4/xinitrc";
+
+ xfce4-settings = callPackage ./xfce4-settings { };
+
+ xfce4-taskmanager = callPackage ./xfce4-taskmanager { };
+
+ xfce4-terminal = callPackage ./xfce4-terminal { };
+
+ xfdashboard = callPackage ./xfdashboard { };
+
+ xfce4-volumed-pulse = callPackage ./xfce4-volumed-pulse { };
+
+ xfce4-whiskermenu-plugin = callPackage ./xfce4-whiskermenu-plugin { };
+
+ xfce4-xkb-plugin = callPackage ./xfce4-xkb-plugin { };
+
+ xfwm4 = callPackage ./xfwm4 { };
+
+ ## COMMON PARTS WITH XFCE 4.12
+
+ xfce4-icon-theme = callPackage ../xfce/art/xfce4-icon-theme.nix { };
+
+ xfwm4-themes = callPackage ../xfce/art/xfwm4-themes.nix { };
+
+ xfce4-embed-plugin = callPackage ../xfce/panel-plugins/xfce4-embed-plugin.nix { };
+
+ xfce4-hardware-monitor-plugin = callPackage ../xfce/panel-plugins/xfce4-hardware-monitor-plugin.nix { };
+
+ ## THIRD PARTY PLIGINS
+
+ xfce4-dockbarx-plugin = callPackage ../xfce/panel-plugins/xfce4-dockbarx-plugin.nix { };
+
+ xfce4-namebar-plugin = callPackage ../xfce/panel-plugins/xfce4-namebar-plugin.nix { };
+
+ xfce4-windowck-plugin = callPackage ../xfce/panel-plugins/xfce4-windowck-plugin.nix { };
+
+
+ ## ALIASES
+ xfce4-mixer = throw "deprecated 2019-08-18: obsoleted by xfce4-pulseaudio-plugin"; # added 2019-08-18
+ gtk-xfce-engine = throw "deprecated 2019-09-17: Xfce 4.14 deprecated gtk-xfce-engine"; # added 2019-09-17
+})
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/exo/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/exo/default.nix
new file mode 100644
index 00000000000..59ab5823314
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/exo/default.nix
@@ -0,0 +1,20 @@
+{ mkXfceDerivation, docbook_xsl, glib, libxslt, perlPackages, gtk3
+, libxfce4ui, libxfce4util }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "exo";
+ version = "0.12.8";
+
+ sha256 = "013am7q4pwfncf4hk2a3hv7yx2vxgzb5xm8qsi9mxkj29xdhrvs5";
+
+ nativeBuildInputs = [ libxslt perlPackages.URI docbook_xsl ];
+ buildInputs = [ gtk3 glib libxfce4ui libxfce4util ];
+
+ # Workaround https://bugzilla.xfce.org/show_bug.cgi?id=15825
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ meta = {
+ description = "Application library for Xfce";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/garcon/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/garcon/default.nix
new file mode 100644
index 00000000000..0d6cb8c410e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/garcon/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, gtk3, libxfce4ui, libxfce4util }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "garcon";
+ version = "0.6.4";
+
+ sha256 = "0pamhp1wffiw638s66nws2mpzmwkhvhb6iwccfy8b0kyr57wipjv";
+
+ buildInputs = [ gtk3 libxfce4ui libxfce4util ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/gigolo/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/gigolo/default.nix
new file mode 100644
index 00000000000..5b25e474af2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/gigolo/default.nix
@@ -0,0 +1,12 @@
+{ mkXfceDerivation, exo, gtk3, gvfs, glib }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "gigolo";
+ version = "0.5.0";
+
+ sha256 = "1lqsxb0d5i8p9vbzx8s4p3rga7va5h1q146xgmsa41j5v40wrlw6";
+
+ nativeBuildInputs = [ exo ];
+ buildInputs = [ gtk3 glib gvfs ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/libxfce4ui/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/libxfce4ui/default.nix
new file mode 100644
index 00000000000..79c8ec74b62
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/libxfce4ui/default.nix
@@ -0,0 +1,23 @@
+{ lib, mkXfceDerivation, gobject-introspection, gtk2, gtk3, libICE, libSM
+, libstartup_notification, libxfce4util, xfconf }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "libxfce4ui";
+ version = "4.14.1";
+
+ sha256 = "0fnncf30s51qhgixn57z4d021pjjhzgsg2x69w4dy68vff2347qy";
+
+ nativeBuildInputs = [ gobject-introspection ];
+ buildInputs = [ gtk2 gtk3 libstartup_notification xfconf ];
+ propagatedBuildInputs = [ libxfce4util libICE libSM ];
+
+ configureFlags = [
+ "--with-vendor-info='NixOS'"
+ ];
+
+ meta = with lib; {
+ description = "Widgets library for Xfce";
+ license = licenses.lgpl2Plus;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/libxfce4util/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/libxfce4util/default.nix
new file mode 100644
index 00000000000..4540d235251
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/libxfce4util/default.nix
@@ -0,0 +1,16 @@
+{ lib, mkXfceDerivation, gobject-introspection }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "libxfce4util";
+ version = "4.14.0";
+
+ sha256 = "0vq16bzmnykiikg4dhiaj0qbyj76nkdd54j6k6n568h3dc9ix6q4";
+
+ nativeBuildInputs = [ gobject-introspection ];
+
+ meta = with lib; {
+ description = "Extension library for Xfce";
+ license = licenses.lgpl2Plus;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/mkXfceDerivation.nix b/nixpkgs/pkgs/desktops/xfce4-14/mkXfceDerivation.nix
new file mode 100644
index 00000000000..b7dc8322569
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/mkXfceDerivation.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchgit, pkgconfig, xfce4-dev-tools, hicolor-icon-theme, wrapGAppsHook }:
+
+{ category, pname, version, rev ? "${pname}-${version}", sha256, ... } @ args:
+
+let
+ inherit (builtins) filter getAttr head isList;
+ inherit (stdenv.lib) attrNames concatLists recursiveUpdate zipAttrsWithNames;
+
+ filterAttrNames = f: attrs:
+ filter (n: f (getAttr n attrs)) (attrNames attrs);
+
+ concatAttrLists = attrsets:
+ zipAttrsWithNames (filterAttrNames isList (head attrsets)) (_: concatLists) attrsets;
+
+ template = {
+ name = "${pname}-${version}";
+
+ nativeBuildInputs = [ pkgconfig xfce4-dev-tools wrapGAppsHook ];
+ buildInputs = [ hicolor-icon-theme ];
+ configureFlags = [ "--enable-maintainer-mode" ];
+
+ src = fetchgit {
+ url = "git://git.xfce.org/${category}/${pname}";
+ inherit rev sha256;
+ };
+
+ enableParallelBuilding = true;
+ outputs = [ "out" "dev" ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://git.xfce.org/${category}/${pname}/about";
+ license = licenses.gpl2; # some libraries are under LGPLv2+
+ platforms = platforms.linux;
+ };
+ };
+
+ publicArgs = removeAttrs args [ "category" "pname" "sha256" ];
+in
+
+stdenv.mkDerivation (recursiveUpdate template publicArgs // concatAttrLists [ template args ])
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/mousepad/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/mousepad/default.nix
new file mode 100644
index 00000000000..77559aaf329
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/mousepad/default.nix
@@ -0,0 +1,15 @@
+{ mkXfceDerivation, exo, glib, gtk3, gtksourceview3, xfconf }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "mousepad";
+ version = "0.4.2";
+
+ sha256 = "0a35vaq4l0d8vzw7hqpvbgkr3wj1sqr2zvj7bc5z4ikz2cppqj7p";
+
+ nativeBuildInputs = [ exo ];
+ buildInputs = [ glib gtk3 gtksourceview3 xfconf ];
+
+ # See https://github.com/NixOS/nixpkgs/issues/36468
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/orage/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/orage/default.nix
new file mode 100644
index 00000000000..7bb10c2fd94
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/orage/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchpatch, mkXfceDerivation, dbus-glib, gtk2, libical, libnotify, tzdata
+, popt, libxfce4ui, xfce4-panel, withPanelPlugin ? true }:
+
+assert withPanelPlugin -> libxfce4ui != null && xfce4-panel != null;
+
+let
+ inherit (lib) optionals;
+in
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "orage";
+ version = "4.12.1";
+
+ sha256 = "04z6y1vfaz1im1zq1zr7cf8pjibjhj9zkyanbp7vn30q520yxa0m";
+ buildInputs = [ dbus-glib gtk2 libical libnotify popt ]
+ ++ optionals withPanelPlugin [ libxfce4ui xfce4-panel ];
+
+ postPatch = ''
+ substituteInPlace src/parameters.c --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ substituteInPlace src/tz_zoneinfo_read.c --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ substituteInPlace tz_convert/tz_convert.c --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ '';
+
+ postConfigure = "rm -rf libical"; # ensure pkgs.libical is used instead of one included in the orage sources
+
+ patches = [
+ # Fix build with libical 3.0
+ (fetchpatch {
+ name = "fix-libical3.patch";
+ url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/libical3.patch?h=packages/orage&id=7b1b06c42dda034d538977b9f3550b28e370057f;
+ sha256 = "1l8s106mcidmbx2p8c2pi8v9ngbv2x3fsgv36j8qk8wyd4qd1jbf";
+ })
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/parole/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/parole/default.nix
new file mode 100644
index 00000000000..ed3979072ed
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/parole/default.nix
@@ -0,0 +1,34 @@
+{ mkXfceDerivation, dbus, dbus-glib
+, gst-plugins-bad, gst-plugins-base, gst-plugins-good
+, gst-plugins-ugly, gtk3, libnotify, libxfce4ui, libxfce4util
+, taglib, xfconf }:
+
+# Doesn't seem to find H.264 codec even though built with gst-plugins-bad.
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "parole";
+ version = "1.0.4";
+
+ sha256 = "18j4bmny37crryh4pvxcjjvj99mln6ljq2vy69awxhvrjx9ljv13";
+
+ postPatch = ''
+ substituteInPlace src/plugins/mpris2/Makefile.am \
+ --replace GST_BASE_CFLAGS GST_VIDEO_CFLAGS
+ '';
+
+ buildInputs = [
+ dbus
+ dbus-glib
+ gst-plugins-bad
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-ugly
+ gtk3
+ libnotify
+ libxfce4ui
+ libxfce4util
+ taglib
+ xfconf
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/ristretto/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/ristretto/default.nix
new file mode 100644
index 00000000000..4a24bf90532
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/ristretto/default.nix
@@ -0,0 +1,13 @@
+{ mkXfceDerivation, automakeAddFlags, exo, gtk3, glib, libexif
+, libxfce4ui, libxfce4util, xfconf }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "ristretto";
+ version = "0.10.0";
+
+ sha256 = "07h7wbq3xh2ac6q4kp2ai1incfn0zfxxngap7hzqx47a5xw2mrm8";
+
+ nativeBuildInputs = [ exo ];
+ buildInputs = [ glib gtk3 libexif libxfce4ui libxfce4util xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/thunar-volman/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/thunar-volman/default.nix
new file mode 100644
index 00000000000..11b29c64b33
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/thunar-volman/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, exo, gtk3, libgudev, libxfce4ui, libxfce4util, xfconf }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "thunar-volman";
+ version = "0.9.5";
+
+ buildInputs = [ exo gtk3 libgudev libxfce4ui libxfce4util xfconf ];
+
+ sha256 = "1qrlpn0q5g9psd41l6y80r3bvbg8jaic92m6r400zzwcvivf95z0";
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/thunar/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/thunar/default.nix
new file mode 100644
index 00000000000..12a1a62991a
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/thunar/default.nix
@@ -0,0 +1,25 @@
+{ mkXfceDerivation, docbook_xsl, exo, gdk-pixbuf, gtk3, libgudev
+, libnotify, libX11, libxfce4ui, libxfce4util, libxslt, xfconf, gobject-introspection, gvfs }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "thunar";
+ version = "1.8.9";
+
+ sha256 = "01w60csbs2nq1bhb8n1bnmjmx48fm0va3qbnq84z0h2dxpr80b1w";
+
+ nativeBuildInputs = [ libxslt docbook_xsl gobject-introspection ];
+
+ buildInputs = [
+ exo
+ gdk-pixbuf
+ gtk3
+ libgudev
+ libnotify
+ libX11
+ libxfce4ui
+ libxfce4util
+ xfconf
+ gvfs
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/tumbler/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/tumbler/default.nix
new file mode 100644
index 00000000000..ecbc62d8ffb
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/tumbler/default.nix
@@ -0,0 +1,30 @@
+{ mkXfceDerivation
+, ffmpegthumbnailer
+, gdk-pixbuf
+, glib
+, freetype
+, libgsf
+, poppler
+, libjpeg
+, gst_all_1
+}:
+
+# TODO: add libopenraw
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "tumbler";
+ version = "0.2.7";
+
+ sha256 = "14ql3fcxyz81qr9s0vcwh6j2ks5fl8jf9scwnkilv5jy0ii9l0ry";
+
+ buildInputs = [
+ ffmpegthumbnailer
+ freetype
+ gdk-pixbuf
+ glib
+ gst_all_1.gst-plugins-base
+ libgsf
+ poppler # technically the glib binding
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfburn/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfburn/default.nix
new file mode 100644
index 00000000000..27fae12981c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfburn/default.nix
@@ -0,0 +1,12 @@
+{ mkXfceDerivation, docbook_xsl, exo, gtk2, libburn, libisofs, libxfce4ui, libxslt }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfburn";
+ version = "0.5.5";
+
+ sha256 = "1lmv48vqrlap1a2ha72g16vqly18zvcwj8y3f3f00l10pmn52bkp";
+
+ nativeBuildInputs = [ libxslt docbook_xsl ];
+ buildInputs = [ exo gtk2 libburn libisofs libxfce4ui ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-appfinder/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-appfinder/default.nix
new file mode 100644
index 00000000000..6c4af66c866
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-appfinder/default.nix
@@ -0,0 +1,12 @@
+{ mkXfceDerivation, exo, garcon, gtk3, libxfce4util, libxfce4ui, xfconf }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfce4-appfinder";
+ version = "4.14.0";
+
+ sha256 = "04h7jxfm3wkxnxfy8149dckay7i160vvk4p9lnq6xny22r4x20h8";
+
+ nativeBuildInputs = [ exo ];
+ buildInputs = [ garcon gtk3 libxfce4ui libxfce4util xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-battery-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-battery-plugin/default.nix
new file mode 100644
index 00000000000..376551b09c0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-battery-plugin/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, gtk3, libxfce4ui, libxfce4util, xfce4-panel, xfconf }:
+
+mkXfceDerivation rec {
+ category = "panel-plugins";
+ pname = "xfce4-battery-plugin";
+ version = "1.1.2";
+ rev = version;
+ sha256 = "0329miiclc8da6j0sz495p99hyrf9fjhvpmdl0556fphybz5agc0";
+
+ buildInputs = [ gtk3 libxfce4ui libxfce4util xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-clipman-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-clipman-plugin/default.nix
new file mode 100644
index 00000000000..74628a325d4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-clipman-plugin/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, gtk3, libXtst, libxfce4ui, libxfce4util, xfce4-panel, xfconf, exo }:
+
+mkXfceDerivation rec {
+ category = "panel-plugins";
+ pname = "xfce4-clipman-plugin";
+ version = "1.4.3";
+ rev = version;
+ sha256 = "1xk79xh1zk0x4r1z9m1dakp79pip0zh3naviybvl1dnpwwfc03gq";
+
+ buildInputs = [ exo gtk3 libXtst libxfce4ui libxfce4util xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-cpufreq-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-cpufreq-plugin/default.nix
new file mode 100644
index 00000000000..22793963df3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-cpufreq-plugin/default.nix
@@ -0,0 +1,10 @@
+{ mkXfceDerivation, gtk3, libxfce4ui, libxfce4util, xfce4-panel, xfconf }:
+
+mkXfceDerivation {
+ category = "panel-plugins";
+ pname = "xfce4-cpufreq-plugin";
+ version = "1.2.1";
+ sha256 = "1p7c4g3yfc19ksdckxpzq1q35jvplh5g55299cvv0afhdb5l8zhv";
+
+ buildInputs = [ gtk3 libxfce4ui libxfce4util xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/default.nix
new file mode 100644
index 00000000000..38fe82ffb01
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/default.nix
@@ -0,0 +1,32 @@
+{ mkXfceDerivation, autoreconfHook, autoconf, automake
+, glib, gtk-doc, intltool, libtool }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfce4-dev-tools";
+ version = "4.14.0";
+
+ sha256 = "10hcj88784faqrk08xb538355cla26vdk9ckx158hqdqv38sb42f";
+
+ nativeBuildInputs = [ autoreconfHook ];
+
+ propagatedBuildInputs = [
+ autoconf
+ automake
+ glib
+ gtk-doc
+ intltool
+ libtool
+ ];
+
+ preAutoreconf = ''
+ substitute configure.ac.in configure.ac \
+ --subst-var-by REVISION UNKNOWN
+ '';
+
+ setupHook = ./setup-hook.sh;
+
+ meta = {
+ description = "Autoconf macros and scripts to augment app build systems";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/setup-hook.sh b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/setup-hook.sh
new file mode 100644
index 00000000000..600bf47fd87
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dev-tools/setup-hook.sh
@@ -0,0 +1,12 @@
+xdtEnvHook() {
+ addToSearchPath ACLOCAL_PATH $1/share/xfce4/dev-tools/m4macros
+}
+
+envHooks+=(xdtEnvHook)
+
+xdtAutogenPhase() {
+ mkdir -p m4
+ NOCONFIGURE=1 xdt-autogen
+}
+
+preConfigurePhases+=(xdtAutogenPhase)
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/configure-gio.patch b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/configure-gio.patch
new file mode 100644
index 00000000000..787b63511a2
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/configure-gio.patch
@@ -0,0 +1,11 @@
+diff -urNZ a/configure.ac.in b/configure.ac.in
+--- a/configure.ac.in 2017-12-16 19:46:13.784914017 +0000
++++ b/configure.ac.in 2017-12-16 19:46:38.612477052 +0000
+@@ -53,6 +53,7 @@
+ dnl ***********************************
+ dnl *** Check for required packages ***
+ dnl ***********************************
++XDT_CHECK_PACKAGE([GIO], [gio-unix-2.0], [2.32.0])
+ XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.24.0])
+ XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.20.0])
+ XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2], [4.12.0])
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/default.nix
new file mode 100644
index 00000000000..66ca7affa48
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-dict/default.nix
@@ -0,0 +1,19 @@
+{ mkXfceDerivation, automakeAddFlags, gtk3, libxfce4ui, libxfce4util, xfce4-panel }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfce4-dict";
+ version = "0.8.2";
+
+ sha256 = "1zbb0k0984ny7wy4gbk6ymkh87rbfakpim54yq4r3h5ymslx7iv7";
+
+ patches = [ ./configure-gio.patch ];
+
+ nativeBuildInputs = [ automakeAddFlags ];
+
+ postPatch = ''
+ automakeAddFlags lib/Makefile.am libdict_la_CFLAGS GIO_CFLAGS
+ '';
+
+ buildInputs = [ gtk3 libxfce4ui libxfce4util xfce4-panel ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-netload-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-netload-plugin/default.nix
new file mode 100644
index 00000000000..d9f517981d3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-netload-plugin/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, gtk3, libxfce4ui, libxfce4util, xfce4-panel, xfconf }:
+
+mkXfceDerivation rec {
+ category = "panel-plugins";
+ pname = "xfce4-netload-plugin";
+ version = "1.3.1";
+ rev = "version-${version}";
+ sha256 = "0nm8advafw4jpc9p1qszyfqa56194sz51z216rdh4c6ilcrrpy1h";
+
+ buildInputs = [ gtk3 libxfce4ui libxfce4util xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-notifyd/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-notifyd/default.nix
new file mode 100644
index 00000000000..e468fea637e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-notifyd/default.nix
@@ -0,0 +1,12 @@
+{ mkXfceDerivation, glib, exo, gtk3, libnotify, libxfce4ui, libxfce4util
+, xfce4-panel, xfconf }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfce4-notifyd";
+ version = "0.4.4";
+
+ sha256 = "1lmm9h3ych8dz9jpjkxg91f9ln14xs527nxjxsryks00kmqk4kai";
+
+ buildInputs = [ exo gtk3 glib libnotify libxfce4ui libxfce4util xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-panel/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-panel/default.nix
new file mode 100644
index 00000000000..c571666e5c4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-panel/default.nix
@@ -0,0 +1,29 @@
+{ mkXfceDerivation, tzdata, exo, garcon, gtk2, gtk3, glib, gettext, glib-networking, libxfce4ui, libxfce4util, libwnck3, xfconf, gobject-introspection }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfce4-panel";
+ version = "4.14.0";
+
+ sha256 = "1v3f2xjz9gwa8maqqvv9w2dh1cgy03v89a9ny7nrv0cjsxwwrr15";
+
+ nativeBuildInputs = [ gobject-introspection ];
+ buildInputs = [ exo garcon gtk2 gtk3 glib glib-networking libxfce4ui libxfce4util libwnck3 xfconf ];
+
+ patches = [ ../../xfce/core/xfce4-panel-datadir.patch ];
+ patchFlags = "-p1";
+
+ postPatch = ''
+ for f in $(find . -name \*.sh); do
+ substituteInPlace $f --replace gettext ${gettext}/bin/gettext
+ done
+ substituteInPlace plugins/clock/clock.c \
+ --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+ '';
+
+ configureFlags = [ "--enable-gtk3" ];
+
+ meta = {
+ description = "Xfce's panel";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-power-manager/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-power-manager/default.nix
new file mode 100644
index 00000000000..985146c8257
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-power-manager/default.nix
@@ -0,0 +1,19 @@
+{ mkXfceDerivation, automakeAddFlags, exo, gtk3, libnotify
+, libxfce4ui, libxfce4util, upower, xfconf }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfce4-power-manager";
+ version = "1.6.5";
+
+ sha256 = "0zazm2cgkz5xj7rvy9gbh4kaay2anfcmawg4gj38pnq3a8zcwwd5";
+
+ nativeBuildInputs = [ automakeAddFlags exo ];
+ buildInputs = [ gtk3 libnotify libxfce4ui libxfce4util upower xfconf ];
+
+ postPatch = ''
+ substituteInPlace configure.ac.in --replace gio-2.0 gio-unix-2.0
+ automakeAddFlags src/Makefile.am xfce4_power_manager_CFLAGS GIO_CFLAGS
+ automakeAddFlags settings/Makefile.am xfce4_power_manager_settings_CFLAGS GIO_CFLAGS
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-pulseaudio-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-pulseaudio-plugin/default.nix
new file mode 100644
index 00000000000..6fca6069d1e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-pulseaudio-plugin/default.nix
@@ -0,0 +1,19 @@
+{ mkXfceDerivation, automakeAddFlags, dbus-glib, dbus, gtk3, libpulseaudio
+, libnotify, libxfce4ui, libxfce4util, xfce4-panel, xfconf }:
+
+mkXfceDerivation {
+ category = "panel-plugins";
+ pname = "xfce4-pulseaudio-plugin";
+ version = "0.4.1";
+ sha256 = "1c8krpg3l6ki00ldd9hifc4bddysdm0w3x5w43fkr31j0zrscvfp";
+
+ nativeBuildInputs = [ automakeAddFlags ];
+
+ NIX_CFLAGS_COMPILE = [ "-I${dbus-glib.dev}/include/dbus-1.0" "-I${dbus.dev}/include/dbus-1.0" ];
+
+ postPatch = ''
+ substituteInPlace configure.ac.in --replace gio-2.0 gio-unix-2.0
+ '';
+
+ buildInputs = [ gtk3 libnotify libpulseaudio libxfce4ui libxfce4util xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-screenshooter/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-screenshooter/default.nix
new file mode 100644
index 00000000000..f13a8fba6d0
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-screenshooter/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, exo, gtk3, libsoup, libxfce4ui, libxfce4util, xfce4-panel, glib-networking }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfce4-screenshooter";
+ version = "1.9.5";
+
+ sha256 = "1h14sywvk9l06p3z1cpb79911j8w2wqbk03ldknjkia2rfymjk06";
+
+ buildInputs = [ exo gtk3 libsoup libxfce4ui libxfce4util xfce4-panel glib-networking ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-session/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-session/default.nix
new file mode 100644
index 00000000000..d44cd8b0dd7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-session/default.nix
@@ -0,0 +1,20 @@
+{ mkXfceDerivation, polkit, exo, libxfce4util, libxfce4ui, xfconf, iceauth, gtk3, glib, libwnck3, xorg }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfce4-session";
+ version = "4.14.0";
+
+ sha256 = "0v0xzkdr5rgv6219c1dy96cghgw8bqnb313jccxihfgddf363104";
+
+ buildInputs = [ exo gtk3 glib libxfce4ui libxfce4util libwnck3 xfconf polkit iceauth ];
+
+ configureFlags = [ "--with-xsession-prefix=${placeholder "out"}" ];
+
+ # See https://github.com/NixOS/nixpkgs/issues/36468
+ NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+ meta = {
+ description = "Session manager for Xfce";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-settings/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-settings/default.nix
new file mode 100644
index 00000000000..8cda66359e3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-settings/default.nix
@@ -0,0 +1,36 @@
+{ mkXfceDerivation, automakeAddFlags, exo, garcon, gtk3, glib
+, libnotify, libxfce4ui, libxfce4util, libxklavier
+, upower, xfconf, xf86inputlibinput }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfce4-settings";
+ version = "4.14.0";
+
+ sha256 = "13gmxd4sfgd6wky7s03bar58w9vl4i6jv2wncd6iajww791y5akn";
+
+ postPatch = ''
+ for f in $(find . -name \*.c); do
+ substituteInPlace $f --replace \"libinput-properties.h\" '<xorg/libinput-properties.h>'
+ done
+ '';
+
+ buildInputs = [
+ exo
+ garcon
+ glib
+ gtk3
+ libnotify
+ libxfce4ui
+ libxfce4util
+ libxklavier
+ upower
+ xf86inputlibinput
+ xfconf
+ ];
+
+ configureFlags = [
+ "--enable-pluggable-dialogs"
+ "--enable-sound-settings"
+ ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-taskmanager/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-taskmanager/default.nix
new file mode 100644
index 00000000000..776b3797f76
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-taskmanager/default.nix
@@ -0,0 +1,12 @@
+{ lib, mkXfceDerivation, exo, gtk3, libwnck3, libXmu }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfce4-taskmanager";
+ version = "1.2.2";
+
+ sha256 = "03js0pmhrybxa7hrp3gx4rm7j061ansv0bp2dwhnbrdpmzjysysc";
+
+ nativeBuildInputs = [ exo ];
+ buildInputs = [ gtk3 libwnck3 libXmu ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-terminal/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-terminal/default.nix
new file mode 100644
index 00000000000..78e98e9ea7d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-terminal/default.nix
@@ -0,0 +1,15 @@
+{ mkXfceDerivation, gtk3, libxfce4ui, vte, xfconf }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfce4-terminal";
+ version = "0.8.8";
+
+ sha256 = "0sg9vwyvhh7pjp83biv7gvf42423a7ly4dc7q2gn28kp6bds2qcp";
+
+ buildInputs = [ gtk3 libxfce4ui vte xfconf ];
+
+ meta = {
+ description = "A modern terminal emulator";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-volumed-pulse/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-volumed-pulse/default.nix
new file mode 100644
index 00000000000..97a00e9b67f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-volumed-pulse/default.nix
@@ -0,0 +1,15 @@
+{ lib, mkXfceDerivation, gtk3, libnotify, libpulseaudio, keybinder3, xfconf }:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfce4-volumed-pulse";
+ version = "0.2.3";
+
+ sha256 = "1rsjng9qmq7vzrx5bfxq76h63y501cfl1mksrxkf1x39by9r628j";
+
+ buildInputs = [ gtk3 libnotify libpulseaudio keybinder3 xfconf ];
+
+ meta = with lib; {
+ license = licenses.gpl3Plus;
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-whiskermenu-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-whiskermenu-plugin/default.nix
new file mode 100644
index 00000000000..f943f2ab333
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-whiskermenu-plugin/default.nix
@@ -0,0 +1,18 @@
+{ mkXfceDerivation, gtk3, glib, cmake, exo, garcon, libxfce4ui, libxfce4util, xfce4-panel, xfconf }:
+
+mkXfceDerivation rec {
+ category = "panel-plugins";
+ pname = "xfce4-whiskermenu-plugin";
+ version = "2.3.3";
+ rev = "v${version}";
+ sha256 = "0agh0a5srsy6vi6r50ak9rb42r7vcnfv6nfvg4qbqi77yc44yqdb";
+
+ nativeBuildInputs = [ cmake ];
+
+ buildInputs = [ exo garcon gtk3 glib libxfce4ui libxfce4util xfce4-panel xfconf ];
+
+ postInstall = ''
+ substituteInPlace $out/bin/xfce4-popup-whiskermenu \
+ --replace $out/bin/xfce4-panel ${xfce4-panel.out}/bin/xfce4-panel
+ '';
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfce4-xkb-plugin/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-xkb-plugin/default.nix
new file mode 100644
index 00000000000..a024d3a88ba
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfce4-xkb-plugin/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, gtk3, librsvg, libwnck3, libxklavier, garcon, libxfce4ui, libxfce4util, xfce4-panel, xfconf }:
+
+mkXfceDerivation rec {
+ category = "panel-plugins";
+ pname = "xfce4-xkb-plugin";
+ version = "0.8.1";
+ rev = version;
+ sha256 = "1gyky4raynp2ggdnq0g96c6646fjm679fzipcsmf1q0aymr8d5ky";
+
+ buildInputs = [ garcon gtk3 librsvg libxfce4ui libxfce4util libxklavier libwnck3 xfce4-panel xfconf ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfconf/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfconf/default.nix
new file mode 100644
index 00000000000..a9d6ceaf469
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfconf/default.nix
@@ -0,0 +1,11 @@
+{ mkXfceDerivation, libxfce4util }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfconf";
+ version = "4.14.1";
+
+ sha256 = "1mbqc1463xgn7gafbh2fyshshdxin33iwk96y4nw2gl48nhx4sgs";
+
+ buildInputs = [ libxfce4util ];
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfdashboard/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfdashboard/default.nix
new file mode 100644
index 00000000000..a17c29f6723
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfdashboard/default.nix
@@ -0,0 +1,44 @@
+{ mkXfceDerivation
+, clutter
+, libXcomposite
+, libXinerama
+, libXdamage
+, libX11
+, libwnck3
+, libxfce4ui
+, libxfce4util
+, garcon
+, xfconf
+, gtk3
+, glib
+, dbus-glib
+}:
+
+mkXfceDerivation {
+ category = "apps";
+ pname = "xfdashboard";
+ version = "0.7.5";
+ rev = "0.7.5";
+
+ sha256 = "0d0kg90h3li41bs75z3xldljsglkz220pba39c54qznnzb8v8a2i";
+
+ buildInputs = [
+ clutter
+ dbus-glib
+ garcon
+ glib
+ gtk3
+ libX11
+ libXcomposite
+ libXdamage
+ libXinerama
+ libwnck3
+ libxfce4ui
+ libxfce4util
+ xfconf
+ ];
+
+ meta = {
+ description = "Gnome shell like dashboard";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfdesktop/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfdesktop/default.nix
new file mode 100644
index 00000000000..afcd0d19dc3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfdesktop/default.nix
@@ -0,0 +1,25 @@
+{ mkXfceDerivation, exo, gtk3, libxfce4ui, libxfce4util, libwnck3, xfconf, libnotify, garcon, thunar }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfdesktop";
+ version = "4.14.1";
+
+ sha256 = "006w4xwmpwp34q2qkkixr3xz0vb0kny79pw64yj4304wsb5jr14g";
+
+ buildInputs = [
+ exo
+ gtk3
+ libxfce4ui
+ libxfce4util
+ libwnck3
+ xfconf
+ libnotify
+ garcon
+ thunar
+ ];
+
+ meta = {
+ description = "Xfce's desktop manager";
+ };
+}
diff --git a/nixpkgs/pkgs/desktops/xfce4-14/xfwm4/default.nix b/nixpkgs/pkgs/desktops/xfce4-14/xfwm4/default.nix
new file mode 100644
index 00000000000..358e99c893f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/xfce4-14/xfwm4/default.nix
@@ -0,0 +1,26 @@
+{ mkXfceDerivation, exo, librsvg, dbus-glib, epoxy, gtk3, libXdamage
+, libstartup_notification, libxfce4ui, libxfce4util, libwnck3
+, libXpresent, xfconf }:
+
+mkXfceDerivation {
+ category = "xfce";
+ pname = "xfwm4";
+ version = "4.14.0";
+
+ sha256 = "1z5aqij2d8n9wnha88b0qzkvss54jvqs8w1w5m3mzjl4c9mn9n8m";
+
+ nativeBuildInputs = [ exo librsvg ];
+
+ buildInputs = [
+ dbus-glib
+ epoxy
+ gtk3
+ libXdamage
+ libstartup_notification
+ libxfce4ui
+ libxfce4util
+ libwnck3
+ libXpresent
+ xfconf
+ ];
+}