aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/desktops/gnome-3')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix73
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix60
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix134
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix41
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix54
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix84
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix48
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix141
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix41
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix85
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix87
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix109
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix25
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix86
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix57
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix113
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix89
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix60
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix42
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix89
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix46
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix54
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/make-thumbnailer-wrappable.patch24
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix85
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix34
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix34
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix54
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix147
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix93
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix111
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix133
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix64
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch526
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix103
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch60
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch40
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/org.gnome.login-screen.gschema.override2
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch20
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix22
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix52
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix46
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix66
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix27
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix64
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix184
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch192
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch15
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix53
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix45
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix108
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/fix-paths.patch67
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/vendor.conf5
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix73
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix43
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix79
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch40
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix124
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch15
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch26
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix65
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix221
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/wrap-services.patch57
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix65
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix50
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-tour/default.nix81
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix96
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix108
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/0001-Fix-glitches-in-gala.patch29
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/default.nix166
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/drop-inheritable.patch132
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-paths.patch13
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-sysprof.patch25
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix154
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/drop-inheritable.patch132
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch13
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix107
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch24
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix106
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix87
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix86
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix57
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix50
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/default.nix362
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix80
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix25
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix40
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix71
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix28
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix29
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch32
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/emoji-selector/default.nix38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/freon/default.nix37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix85
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/material-shell/default.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix42
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch56
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix34
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix43
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch22
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix50
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch33
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix42
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch99
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix28
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-is-ready-remover/default.nix28
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py74
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix77
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix40
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix43
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix41
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix66
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix40
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix38
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/installer.nix15
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix87
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix97
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix84
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix48
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix198
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix99
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix54
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix81
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch37
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix27
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix70
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix62
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix73
-rw-r--r--infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/update.nix26
183 files changed, 11068 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix
new file mode 100644
index 000000000000..c0ca54d6fec8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/accerciser/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, gnome3
+, gtk3
+, wrapGAppsHook
+, gobject-introspection
+, itstool
+, libxml2
+, python3
+, at-spi2-core
+, dbus
+, gettext
+, libwnck3
+, adwaita-icon-theme
+}:
+
+ python3.pkgs.buildPythonApplication rec {
+ pname = "accerciser";
+ version = "3.36.3";
+
+ format = "other";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0zfhmpaqqwm89k8p4apq4la191icjvqh0097p5aig3yhy87fahp9";
+ };
+
+ 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
+ setuptools
+ 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 = teams.gnome.members;
+ license = licenses.bsd3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix
new file mode 100644
index 000000000000..05a1cdbc088e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/cheese/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, gettext, fetchurl, wrapGAppsHook, gnome-video-effects, libcanberra-gtk3
+, pkgconfig, gtk3, glib, clutter-gtk, clutter-gst, udev, gst_all_1, itstool
+, libgudev, 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
+, meson, ninja, dbus, python3 }:
+
+stdenv.mkDerivation rec {
+ pname = "cheese";
+ version = "3.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/cheese/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0wvyc9wb0avrprvm529m42y5fkv3lirdphqydc9jw0c8mh05d1ni";
+ };
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "cheese"; attrPath = "gnome3.cheese"; };
+ };
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig gettext itstool vala wrapGAppsHook libxml2 appstream-glib
+ libxslt docbook_xml_dtd_43 docbook_xsl
+ gtk-doc yelp-tools gnome-common python3
+ ];
+ 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 dbus ];
+
+ outputs = [ "out" "man" "devdoc" ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix
new file mode 100644
index 000000000000..f27050cd68f7
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/evolution/default.nix
@@ -0,0 +1,134 @@
+{ stdenv
+, cmake
+, ninja
+, intltool
+, fetchurl
+, libxml2
+, webkitgtk
+, highlight
+, pkgconfig
+, gtk3
+, glib
+, libnotify
+, gspell
+, 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
+, spamassassin
+}:
+
+stdenv.mkDerivation rec {
+ pname = "evolution";
+ version = "3.36.5";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/evolution/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1hpjd5d3z52xcjcc1hg5z8ypnx2y6ml9snyrlpflg9bx16yhxm1x";
+ };
+
+ 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
+ gspell
+ 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"
+ "-DWITH_SPAMASSASSIN=${spamassassin}/bin/spamassassin"
+ "-DWITH_SA_LEARN=${spamassassin}/bin/sa-learn"
+ "-DWITH_BOGOFILTER=${bogofilter}/bin/bogofilter"
+ "-DWITH_OPENLDAP=${openldap}"
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.lgpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/file-roller/default.nix
new file mode 100644
index 000000000000..7c518c4acd9f
--- /dev/null
+++ b/infra/libkookie/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.36.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1dw1vfnfc44k57b6mip8fv565d2xv5wrigi4js044x3sbl5f2n89";
+ };
+
+ 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix
new file mode 100644
index 000000000000..ea33bc29324f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gedit/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, meson, fetchurl, python3
+, pkgconfig, gtk3, glib, adwaita-icon-theme
+, libpeas, gtksourceview4, gsettings-desktop-schemas
+, wrapGAppsHook, ninja, libsoup, tepl
+, gnome3, gspell, perl, itstool, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gedit";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gedit/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "15s1almlhjlgl3m8lxg6jpzln8jhgdxxjr635a3b7cf58d35b1v8";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig wrapGAppsHook meson ninja
+ python3 perl itstool desktop-file-utils
+ ];
+
+ buildInputs = [
+ gtk3 glib
+ adwaita-icon-theme libsoup
+ libpeas gtksourceview4
+ gsettings-desktop-schemas gspell
+ tepl
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix
new file mode 100644
index 000000000000..7de5ffc1add0
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/ghex/default.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, pkgconfig
+, meson
+, ninja
+, python3
+, gnome3
+, 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
+ 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-books/default.nix
new file mode 100644
index 000000000000..7432e8e96ed2
--- /dev/null
+++ b/infra/libkookie/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.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "153vknqisjn5f105avzm933fsc3v0pjzzbwxlqxf8vjjksh1cmya";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
new file mode 100644
index 000000000000..4acc687da8ba
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
@@ -0,0 +1,141 @@
+{ 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
+, libusb1
+, libarchive
+, acl
+, libgudev
+, libsecret
+, libcap_ng
+, numactl
+, xen
+, libapparmor
+, json-glib
+, webkitgtk
+, vte
+, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-boxes";
+ version = "3.36.6";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0c3cw90xqqcpacc2z06ljs0gg8saxizfgjzg9alhpwgz3gl4c5pg";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ gobject-introspection
+ itstool
+ meson
+ ninja
+ pkgconfig
+ python3
+ vala
+ wrapGAppsHook
+ ];
+
+ # Required for USB redirection PolicyKit rules file
+ propagatedUserEnvPkgs = [
+ spice-gtk
+ ];
+
+ buildInputs = [
+ acl
+ cyrus_sasl
+ freerdp
+ gdbm
+ glib
+ glib-networking
+ gmp
+ gnome3.adwaita-icon-theme
+ gtk-vnc
+ gtk3
+ json-glib
+ libapparmor
+ libarchive
+ libcap
+ libcap_ng
+ libgudev
+ libosinfo
+ librsvg
+ libsecret
+ libsoup
+ libusb1
+ libvirt
+ libvirt-glib
+ libxml2
+ numactl
+ spice-gtk
+ spice-protocol
+ systemd
+ tracker
+ tracker-miners
+ vte
+ webkitgtk
+ xen
+ yajl
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(--prefix PATH : "${stdenv.lib.makeBinPath [ mtools cdrkit libcdio ]}")
+ '';
+
+ postPatch = ''
+ chmod +x build-aux/post_install.py # patchShebangs requires executable file
+ patchShebangs build-aux/post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
new file mode 100644
index 000000000000..988cb1ed2a33
--- /dev/null
+++ b/infra/libkookie/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, libhandy }:
+
+let
+ pname = "gnome-calendar";
+ version = "3.36.2";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "07sc1kn65dzxsxpv0vl5dj1a5awljjsfl9jldrg0hnjmq12m7c6h";
+ };
+
+ 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 libhandy
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
new file mode 100644
index 000000000000..987fa594ae52
--- /dev/null
+++ b/infra/libkookie/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.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-characters/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0mqaxsa7hcmvid3zbzvxpfkp7s01ghiq6kaibmd3169axrr8ahql";
+ };
+
+ 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
+
+ wrapGApp "$file"
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
new file mode 100644
index 000000000000..5e3ff58b2901
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
@@ -0,0 +1,87 @@
+{ 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
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-clocks";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-clocks/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1rjicycgh9jvkqir2m8hx9m4jlaa3w5lqs43k185wa0zxhi1n6zi";
+ };
+
+ 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
+ libhandy
+ ];
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Fallback sound theme
+ --prefix XDG_DATA_DIRS : "${sound-theme-freedesktop}/share"
+ )
+ '';
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-clocks";
+ attrPath = "gnome3.gnome-clocks";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = "https://wiki.gnome.org/Apps/Clocks";
+ description = "Clock application designed for GNOME 3";
+ maintainers = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
new file mode 100644
index 000000000000..8d5501537a0f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
@@ -0,0 +1,109 @@
+{ 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.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-documents/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1qph567mapg3s1a26k7b8y57g9bklhj2mh8xm758z9zkms20xafq";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ gettext
+ itstool
+ libxslt
+ desktop-file-utils
+ docbook_xsl
+ docbook_xml_dtd_42
+ wrapGAppsHook
+ python3
+
+ # building getting started
+ inkscape
+ poppler_utils
+ ];
+
+ 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
+ ];
+
+ doCheck = true;
+
+ mesonFlags = [
+ "-Dgetting_started=true"
+ ];
+
+ 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 = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = "https://wiki.gnome.org/Apps/Documents";
+ description = "Document manager application designed to work with GNOME 3";
+ maintainers = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
new file mode 100644
index 000000000000..bd02a5f0cc60
--- /dev/null
+++ b/infra/libkookie/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.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-getting-started-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1ihxa9g687rbb4s2gxd2pf726adx98ahq4kfad868swl7a8vi504";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.cc-by-sa-30;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
new file mode 100644
index 000000000000..45675b791cd8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, pkgconfig
+, gnome3
+, glib
+, gtk3
+, wrapGAppsHook
+, gettext
+, itstool
+, libxml2
+, libxslt
+, docbook_xsl
+, docbook_xml_dtd_43
+, systemd
+, python3
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-logs";
+ version = "3.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-logs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0w1nfdxbv3f0wnhmdy21ydvr4swfc108hypda561p7l9lrhnnxj4";
+ };
+
+ patches = [
+ # https://gitlab.gnome.org/GNOME/gnome-logs/-/issues/52
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-logs/-/commit/b42defceefc775220b525f665a3b662ab9593b81.patch";
+ sha256 = "1s0zscmhwy7r0xff17wh8ik8x9xw1vrkipw5vl5i770bxnljps8n";
+ })
+ ];
+
+ nativeBuildInputs = [
+ python3
+ meson
+ ninja
+ pkgconfig
+ wrapGAppsHook
+ gettext
+ itstool
+ libxml2
+ libxslt
+ docbook_xsl
+ docbook_xml_dtd_43
+ ];
+
+ buildInputs = [
+ glib
+ gtk3
+ systemd
+ gsettings-desktop-schemas
+ gnome3.adwaita-icon-theme
+ ];
+
+ mesonFlags = [
+ "-Dman=true"
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
new file mode 100644
index 000000000000..57ba6fd0766f
--- /dev/null
+++ b/infra/libkookie/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.36.4";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1ila7li9yi4lyjc84a787qr33wr7ayppphxn451jzg410pfcamhz";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
new file mode 100644
index 000000000000..92c40f4a0086
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
@@ -0,0 +1,113 @@
+{ stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, gdk-pixbuf
+, tracker
+, libxml2
+, python3
+, libnotify
+, wrapGAppsHook
+, libmediaart
+, gobject-introspection
+, gnome-online-accounts
+, grilo
+, grilo-plugins
+, pkgconfig
+, gtk3
+, pango
+, 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.36.4.1";
+
+ format = "other";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0zdpjgwf48bqb66wrl6k33pzcmc2g3m1046ma7z8xaj9idpi37jh";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ gettext
+ itstool
+ pkgconfig
+ libxml2
+ wrapGAppsHook
+ desktop-file-utils
+ appstream-glib
+ gobject-introspection
+ ];
+
+ buildInputs = [
+ gtk3
+ pango
+ glib
+ libmediaart
+ gnome-online-accounts
+ gobject-introspection
+ gdk-pixbuf
+ gnome3.adwaita-icon-theme
+ python3
+ grilo
+ grilo-plugins
+ libnotify
+ libdazzle
+ libsoup
+ gsettings-desktop-schemas
+ tracker
+ ] ++ (with gst_all_1; [
+ 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;
+
+ # handle setup hooks better
+ strictDeps = 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 = teams.gnome.members;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-nettool/default.nix
new file mode 100644
index 000000000000..88072912b663
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
new file mode 100644
index 000000000000..c32289d70d79
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
@@ -0,0 +1,89 @@
+{ stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, pkgconfig
+, wrapGAppsHook
+, itstool
+, desktop-file-utils
+, python3
+, glib
+, gtk3
+, evolution-data-server
+, gnome-online-accounts
+, libuuid
+, libhandy
+, webkitgtk
+, zeitgeist
+, gnome3
+, libxml2
+, gsettings-desktop-schemas
+, tracker
+}:
+
+let
+ version = "3.36.3";
+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 = "1midnphyg038s94ahhzv0pvbzzzn62ccky28c9nazxqvw4hvdsbh";
+ };
+
+ 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
+ libhandy
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix
new file mode 100644
index 000000000000..4a92052763ef
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix
new file mode 100644
index 000000000000..f4a72fdfb482
--- /dev/null
+++ b/infra/libkookie/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, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-sound-recorder";
+ version = "3.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1i442qas2dkp5d9j9j1z1jicb4cb7jkgbcl4c36bmhvaq3hddwa9";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig gettext meson ninja gobject-introspection
+ wrapGAppsHook python3 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix
new file mode 100644
index 000000000000..d837ce3968e4
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-todo/default.nix
@@ -0,0 +1,89 @@
+{ 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 libecal 2.0
+ (fetchpatch {
+ name = "gnome-todo-eds-libecal-2.0.patch";
+ url = "https://src.fedoraproject.org/rpms/gnome-todo/raw/bed44b8530f3c79589982e03b430b3a125e9bceb/f/gnome-todo-eds-libecal-2.0.patch";
+ sha256 = "1ghrz973skal36j90wm2z13m3panw983r6y0k7z9gpj5lxgz92mq";
+ })
+ ];
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
new file mode 100644
index 000000000000..84be3f527434
--- /dev/null
+++ b/infra/libkookie/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.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-weather/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "11z75ky6xp9hx7lm24xng7ydr20bzh4d6p9sbi9c8ccz2m3fdrk8";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix
new file mode 100644
index 000000000000..514eecc17365
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/default.nix
@@ -0,0 +1,54 @@
+{ 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, webkitgtk, gobject-introspection, appstream-glib
+, gnome3, wrapGAppsHook, telepathy-logger, gspell, gsettings-desktop-schemas }:
+
+let
+ pname = "polari";
+ version = "3.36.3";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0fpmrvhd40yay051bzn4x3gsrzdv42nav0pm5ps0np8wk1z689jg";
+ };
+
+ patches = [
+ # Upstream runs the thumbnailer by passing it to gjs.
+ # If we wrap it in a shell script, gjs can no longer run it.
+ # Let’s change the code to run the script directly by making it executable and having gjs in shebang.
+ ./make-thumbnailer-wrappable.patch
+ ];
+
+ 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 webkitgtk
+ ];
+
+ postFixup = ''
+ wrapGApp "$out/share/polari/thumbnailer.js"
+ '';
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/make-thumbnailer-wrappable.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/make-thumbnailer-wrappable.patch
new file mode 100644
index 000000000000..0fb09eb154af
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/polari/make-thumbnailer-wrappable.patch
@@ -0,0 +1,24 @@
+diff --git a/src/thumbnailer.js b/src/thumbnailer.js
+old mode 100644
+new mode 100755
+index e2ad0a5..7ebf08a
+--- a/src/thumbnailer.js
++++ b/src/thumbnailer.js
+@@ -1,3 +1,4 @@
++#!/usr/bin/env gjs
+ imports.gi.versions.Gdk = '3.0';
+ imports.gi.versions.Gtk = '3.0';
+
+diff --git a/src/urlPreview.js b/src/urlPreview.js
+index f17e0be..ccffc32 100644
+--- a/src/urlPreview.js
++++ b/src/urlPreview.js
+@@ -44,7 +44,7 @@ class Thumbnailer {
+ _generateThumbnail(data) {
+ let { filename, uri } = data;
+ this._subProc = Gio.Subprocess.new(
+- ['gjs', `${pkg.pkgdatadir}/thumbnailer.js`, uri, filename],
++ [`${pkg.pkgdatadir}/thumbnailer.js`, uri, filename],
+ Gio.SubprocessFlags.NONE);
+ this._subProc.wait_async(null, (o, res) => {
+ try {
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix
new file mode 100644
index 000000000000..3668fc171b36
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/seahorse/default.nix
@@ -0,0 +1,85 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, vala
+, meson
+, ninja
+, libpwquality
+, pkgconfig
+, gtk3
+, glib
+, wrapGAppsHook
+, itstool
+, gnupg
+, libsoup
+, gnome3
+, gpgme
+, python3
+, openldap
+, gcr
+, libsecret
+, avahi
+, p11-kit
+, openssh
+, gsettings-desktop-schemas
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+ pname = "seahorse";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "16wmxxppgcgfj8zkagcny5af1c81x32ysm9d6j9f2k7bmik21ss5";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ vala
+ itstool
+ wrapGAppsHook
+ python3
+ ];
+
+ buildInputs = [
+ gtk3
+ glib
+ gcr
+ gsettings-desktop-schemas
+ gnupg
+ gnome3.adwaita-icon-theme
+ gpgme
+ libsecret
+ avahi
+ libsoup
+ p11-kit
+ openssh
+ openldap
+ libpwquality
+ libhandy
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/apps/vinagre/default.nix
new file mode 100644
index 000000000000..e04238b4b16f
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
new file mode 100644
index 000000000000..68c09cc9180c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, intltool, gnome3
+, iconnamingutils, gtk3, gdk-pixbuf, librsvg, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "adwaita-icon-theme";
+ version = "3.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/adwaita-icon-theme/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0kgiq712lfidd81yzx0yk7qwlj3q8cymp6npnxyzsk844y353674";
+ };
+
+ # For convenience, we can specify adwaita-icon-theme only in packages
+ propagatedBuildInputs = [ hicolor-icon-theme ];
+
+ buildInputs = [ gdk-pixbuf librsvg ];
+
+ nativeBuildInputs = [ pkgconfig intltool iconnamingutils gtk3 ];
+
+ dontDropIconThemeCache = true;
+
+ # 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/baobab/default.nix
new file mode 100644
index 000000000000..dce14d6d1de9
--- /dev/null
+++ b/infra/libkookie/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.34.1";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1i90gc1cpw5507zn54k46hj4mjgdxsq8cvpnlgxq0ksy2d7iv63z";
+ };
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/caribou/default.nix
new file mode 100644
index 000000000000..b9da1ab1c163
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
new file mode 100644
index 000000000000..c6b02917ce42
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, meson, ninja, vala, libxslt, pkgconfig, glib, gtk3, gnome3, python3, dconf
+, libxml2, gettext, docbook_xsl, wrapGAppsHook, gobject-introspection }:
+
+let
+ pname = "dconf-editor";
+ version = "3.36.4";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0y9yll77wkvr9ly132icfsl12sdz5aba9qc3aqm5rc90r6xhkhry";
+ };
+
+ nativeBuildInputs = [
+ meson ninja vala libxslt pkgconfig wrapGAppsHook
+ gettext docbook_xsl libxml2 gobject-introspection python3
+ ];
+
+ buildInputs = [ glib gtk3 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix
new file mode 100644
index 000000000000..83c1f5d4a56f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/empathy/default.nix
@@ -0,0 +1,147 @@
+{ stdenv
+, intltool
+, fetchurl
+, webkitgtk
+, pkgconfig
+, gtk3
+, glib
+, file
+, librsvg
+, gnome3
+, gdk-pixbuf
+, python3
+, telepathy-glib
+, telepathy-farstream
+, 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";
+ };
+
+ propagatedBuildInputs = [
+ folks
+ telepathy-logger
+ evolution-data-server
+ telepathy-mission-control
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ libtool
+ intltool
+ itstool
+ file
+ wrapGAppsHook
+ libxml2
+ libxslt
+ yelp-xsl
+ python3
+ ];
+
+ 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
+ ];
+
+ enableParallelBuilding = true;
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ )
+ '';
+
+ 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 = teams.gnome.members;
+ license = [ licenses.gpl2 ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix
new file mode 100644
index 000000000000..6ad0834724d1
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/eog/default.nix
@@ -0,0 +1,93 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, gettext
+, itstool
+, pkg-config
+, 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
+}:
+
+stdenv.mkDerivation rec {
+ pname = "eog";
+ version = "3.36.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1p1lrnsgk5iyw7h02qzax4s74dqqsh5lk85b0qsj7hwx91qm61xp";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkg-config
+ 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 = teams.gnome.members;
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix
new file mode 100644
index 000000000000..ad2d67972a97
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/epiphany/default.nix
@@ -0,0 +1,111 @@
+{ 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
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+ pname = "epiphany";
+ version = "3.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1gs2a94fzpciv58rljgbirsc2kqgiaiyc2yg6ff50nlgb2qpb2jq";
+ };
+
+ # Tests need an X display
+ mesonFlags = [
+ "-Dunit_tests=disabled"
+ ];
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ itstool
+ libxslt
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ buildPackages.glib
+ buildPackages.gtk3
+ ];
+
+ buildInputs = [
+ gcr
+ gdk-pixbuf
+ glib
+ glib-networking
+ gnome-desktop
+ gnome3.adwaita-icon-theme
+ gst_all_1.gst-libav
+ gst_all_1.gst-plugins-bad
+ gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good
+ gst_all_1.gst-plugins-ugly
+ gst_all_1.gstreamer
+ gtk3
+ icu
+ isocodes
+ json-glib
+ libdazzle
+ libhandy
+ libnotify
+ libsecret
+ libsoup
+ libxml2
+ nettle
+ p11-kit
+ sqlite
+ webkitgtk
+ ];
+
+ postPatch = ''
+ chmod +x post_install.py # patchShebangs requires executable file
+ patchShebangs post_install.py
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = "https://wiki.gnome.org/Apps/Epiphany";
+ description = "WebKit based web browser for GNOME";
+ maintainers = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix
new file mode 100644
index 000000000000..11a5bcbd0f78
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evince/default.nix
@@ -0,0 +1,133 @@
+{ stdenv
+, fetchurl
+, 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
+, gtk-doc
+, docbook-xsl-nons
+, docbook_xml_dtd_43
+, supportMultimedia ? true # PDF multimedia
+, libgxps
+, supportXPS ? true # Open XML Paper Specification via libgxps
+}:
+
+stdenv.mkDerivation rec {
+ pname = "evince";
+ version = "3.36.7";
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/evince/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0clg9fhgjyj23mmcmw7dp512wzgv5m18fppn05qf1frz7r11mmk5";
+ };
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ nativeBuildInputs = [
+ appstream
+ docbook-xsl-nons
+ docbook_xml_dtd_43
+ gettext
+ gobject-introspection
+ gtk-doc
+ itstool
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ yelp-tools
+ ];
+
+ buildInputs = [
+ adwaita-icon-theme
+ atk
+ dbus # only needed to find the service directory
+ djvulibre
+ gdk-pixbuf
+ ghostscriptX
+ glib
+ gnome-desktop
+ gsettings-desktop-schemas
+ gspell
+ gtk3
+ libarchive
+ librsvg
+ libsecret
+ libspectre
+ libxml2
+ pango
+ poppler
+ t1lib
+ texlive.bin.core # kpathsea for DVI support
+ ] ++ 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"
+ ];
+
+ 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
new file mode 100644
index 000000000000..721b38d85641
--- /dev/null
+++ b/infra/libkookie/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.36.5";
+
+ outputs = [ "out" "dev" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/evolution-data-server/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1nbzzqxlck3jz42wnxl281yfzpylcvbsbb0fvkh7nibdaj654mf5";
+ };
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/fix-paths.patch
new file mode 100644
index 000000000000..334235516591
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/evolution-data-server/hardcode-gsettings.patch
new file mode 100644
index 000000000000..4e345c3cb3ca
--- /dev/null
+++ b/infra/libkookie/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
+@@ -1650,7 +1650,21 @@ static void
+ e_reminders_widget_init (ERemindersWidget *reminders)
+ {
+ reminders->priv = e_reminders_widget_get_instance_private (reminders);
+- 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix
new file mode 100644
index 000000000000..58c898a5f0dd
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/default.nix
@@ -0,0 +1,103 @@
+{ stdenv, fetchurl, substituteAll, pkgconfig, glib, itstool, libxml2, xorg
+, accountsservice, libX11, gnome3, systemd, autoreconfHook, dconf
+, gtk3, libcanberra-gtk3, pam, libtool, gobject-introspection, plymouth
+, librsvg, coreutils, xwayland, nixos-icons, fetchpatch }:
+
+let
+
+ icon = fetchurl {
+ url = "https://raw.githubusercontent.com/NixOS/nixos-artwork/4f041870efa1a6f0799ef4b32bb7be2cafee7a74/logo/nixos.svg";
+ sha256 = "0b0dj408c1wxmzy6k0pjwc4bzwq286f1334s3cqqwdwjshxskshk";
+ };
+
+ override = substituteAll {
+ src = ./org.gnome.login-screen.gschema.override;
+ inherit icon;
+ };
+
+in
+
+stdenv.mkDerivation rec {
+ pname = "gdm";
+ version = "3.34.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gdm/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1lyqvcwxhwxklbxn4xjswjzr6fhjix6h28mi9ypn34wdm9bzcpg8";
+ };
+
+ # Only needed to make it build
+ preConfigure = ''
+ substituteInPlace ./configure --replace "/usr/bin/X" "${xorg.xorgserver.out}/bin/X"
+ '';
+
+ initialVT = "7";
+
+ configureFlags = [
+ "--sysconfdir=/etc"
+ "--localstatedir=/var"
+ "--with-plymouth=yes"
+ "--enable-gdm-xsession"
+ "--with-initial-vt=${initialVT}"
+ "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+ "--with-udevdir=$(out)/lib/udev"
+ ];
+
+ nativeBuildInputs = [ pkgconfig libxml2 itstool autoreconfHook libtool 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"
+ ];
+
+ preInstall = ''
+ schema_dir=${glib.makeSchemaPath "$out" "${pname}-${version}"}
+ install -D ${override} $schema_dir/org.gnome.login-screen.gschema.override
+ '';
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch
new file mode 100644
index 000000000000..6b5bd6152bd6
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-session-worker_forward-vars.patch
new file mode 100644
index 000000000000..401b6aea0c28
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_extra_args.patch
new file mode 100644
index 000000000000..66071aa4af80
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/gdm-x-session_session-wrapper.patch
new file mode 100644
index 000000000000..58481f0730fa
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/org.gnome.login-screen.gschema.override b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/org.gnome.login-screen.gschema.override
new file mode 100644
index 000000000000..8c17f494b0f2
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/org.gnome.login-screen.gschema.override
@@ -0,0 +1,2 @@
+[org.gnome.login-screen]
+logo='@icon@'
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gdm/reset-environment.patch
new file mode 100644
index 000000000000..61defd9c4bc2
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
new file mode 100644
index 000000000000..e8463c5b704e
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-backgrounds/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "02xvfwfi3133mjljl731z2hj9hfmjas3a1jl4fxmy24xrzj83jxq";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-backgrounds"; attrPath = "gnome3.gnome-backgrounds"; };
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext ];
+
+ meta = with stdenv.lib; {
+ platforms = platforms.unix;
+ maintainers = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
new file mode 100644
index 000000000000..ed647bb87d81
--- /dev/null
+++ b/infra/libkookie/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.34.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 = "11nk8nvz5yrbx7wp75vsiaf4rniv7ik2g3nwmgwx2b42q9v11j9y";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
new file mode 100644
index 000000000000..e14d8d136cd8
--- /dev/null
+++ b/infra/libkookie/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, libgee }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-calculator";
+ version = "3.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-calculator/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1cqd4b25qp1i0p04m669jssg1l5sdapc1mniv9jssvw5r7wk1s52";
+ };
+
+ 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 libgee
+ 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix
new file mode 100644
index 000000000000..69655e2364d3
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-color-manager/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gettext
+, itstool
+, desktop-file-utils
+, gnome3
+, glib
+, gtk3
+, libexif
+, libtiff
+, colord
+, colord-gtk
+, libcanberra-gtk3
+, lcms2
+, vte
+, exiv2
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-color-manager";
+ version = "3.32.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1vpxa2zjz3lkq9ldjg0fl65db9s6b4kcs8nyaqfz3jygma7ifg3w";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ gettext
+ itstool
+ desktop-file-utils
+ ];
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-common/default.nix
new file mode 100644
index 000000000000..fb0b0f875440
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
new file mode 100644
index 000000000000..5372552a7208
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
@@ -0,0 +1,64 @@
+{ 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
+, vala, meson, ninja, libhandy, gsettings-desktop-schemas
+# , telepathy-glib
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-contacts";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-contacts/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "048l07biy8xrfidfyzrjd5lrnfzqhb767ih2gl7w6c4mmhj4g2dy";
+ };
+
+ 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 libhandy
+ libxml2 gnome-online-accounts cheese
+ gnome3.adwaita-icon-theme libchamplain clutter-gtk geocode-glib
+ # telepathy-glib 3.35.90 fails to build with telepathy
+ ];
+
+ mesonFlags = [
+ # Upstream does not seem to maintain this properly: https://gitlab.gnome.org/GNOME/gnome-contacts/issues/103
+ "-Dtelepathy=false"
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
new file mode 100644
index 000000000000..ea28d651eba9
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
@@ -0,0 +1,184 @@
+{ 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
+, libnma
+, ninja
+, pkgconfig
+, polkit
+, python3
+, samba
+, shared-mime-info
+, sound-theme-freedesktop
+, tracker
+, tzdata
+, udisks2
+, upower
+, epoxy
+, gnome-user-share
+, gnome-remote-desktop
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-control-center";
+ version = "3.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0m7pxjgymc7aqqz0vcmlq91nxnwzd1v7v1gdhrfam49krxmk80mc";
+ };
+
+ 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
+ libnma
+ polkit
+ samba
+ tracker
+ udisks2
+ upower
+ epoxy
+ ];
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
new file mode 100644
index 000000000000..361972f2635a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
@@ -0,0 +1,192 @@
+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-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c
+index 4541986db..da7826bfe 100644
+--- a/panels/info-overview/cc-info-overview-panel.c
++++ b/panels/info-overview/cc-info-overview-panel.c
+@@ -169,7 +169,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
+@@ -278,9 +278,9 @@ net_connection_editor_do_fallback (NetConnectionEditor *self, const gchar *type)
+ g_autoptr(GError) error = NULL;
+
+ if (self->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 (self->connection));
+ }
+
+diff --git a/panels/network/net-device-bluetooth.c b/panels/network/net-device-bluetooth.c
+--- a/panels/network/net-device-bluetooth.c
++++ b/panels/network/net-device-bluetooth.c
+@@ -90,7 +90,7 @@ nm_device_bluetooth_refresh_ui (NetDeviceBluetooth *self)
+ update_off_switch_from_device_state (self->device_off_switch, state, self);
+
+ /* set up the Options button */
+- path = g_find_program_in_path ("nm-connection-editor");
++ path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor");
+ gtk_widget_set_visible (GTK_WIDGET (self->options_button), state != NM_DEVICE_STATE_UNMANAGED && path != NULL);
+ }
+
+@@ -141,7 +141,7 @@ options_button_clicked_cb (NetDeviceBluetooth *self)
+
+ connection = net_device_get_find_connection (self->client, self->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);
+@@ -185,7 +185,7 @@ net_device_bluetooth_init (NetDeviceBluetooth *self)
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+- path = g_find_program_in_path ("nm-connection-editor");
++ path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor");
+ gtk_widget_set_visible (GTK_WIDGET (self->options_button), path != NULL);
+ }
+
+diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c
+--- a/panels/network/net-device-mobile.c
++++ b/panels/network/net-device-mobile.c
+@@ -484,7 +484,7 @@ options_button_clicked_cb (NetDeviceMobile *self)
+
+ connection = net_device_get_find_connection (self->client, self->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);
+@@ -776,7 +776,7 @@ net_device_mobile_init (NetDeviceMobile *self)
+
+ self->cancellable = g_cancellable_new ();
+
+- path = g_find_program_in_path ("nm-connection-editor");
++ path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor");
+ gtk_widget_set_visible (GTK_WIDGET (self->options_button), path != NULL);
+ }
+
+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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/bubblewrap-paths.patch
new file mode 100644
index 000000000000..57eb4b3d44a9
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
new file mode 100644
index 000000000000..e558eb66d40f
--- /dev/null
+++ b/infra/libkookie/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.36.5";
+
+ outputs = [ "out" "dev" "devdoc" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-desktop/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0lxpgb199hn37vq822qg9g43pwixbki3x5lkazqa77qhjhlj98gf";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig meson ninja gettext libxslt libxml2 gobject-introspection
+ gtk-doc docbook_xsl glib
+ ];
+ 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
new file mode 100644
index 000000000000..02941743f556
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, fetchpatch, 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";
+ };
+
+ patches = [
+ # fix AppStream validation
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-dictionary/commit/1c94d612030ef87c6e26a01a490470b71c39e341.patch";
+ sha256 = "0cbswmhs9mks3gsc0iy4wnidsa8sfzzf4s1kgvb80qwffgxz5m8b";
+ })
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
new file mode 100644
index 000000000000..40085e501b62
--- /dev/null
+++ b/infra/libkookie/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, systemd }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-disk-utility";
+ version = "3.36.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-disk-utility/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yhnjmjzkixj29vcw6rzaijpg4mlwm2k1kqp4g3hn1xb6qzks0yx";
+ };
+
+ 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 systemd
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
new file mode 100644
index 000000000000..d0ceef61c25a
--- /dev/null
+++ b/infra/libkookie/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.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-font-viewer/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "12xrsqwmvid7hksiw4zhj4jd1qwxn8w0czskbq4yqfprwn1havxa";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix
new file mode 100644
index 000000000000..ff7b1f45e454
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix
@@ -0,0 +1,108 @@
+{ stdenv
+, fetchurl
+, substituteAll
+, gettext
+, meson
+, ninja
+, pkgconfig
+, wrapGAppsHook
+, gnome3
+, accountsservice
+, fontconfig
+, gdm
+, geoclue2
+, geocode-glib
+, glib
+, gnome-desktop
+, gnome-getting-started-docs
+, gnome-online-accounts
+, gtk3
+, libgweather
+, json-glib
+, krb5
+, libpwquality
+, librest
+, libsecret
+, networkmanager
+, pango
+, polkit
+, webkitgtk
+, systemd
+, libnma
+, tzdata
+, yelp
+, libgnomekbd
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-initial-setup";
+ version = "3.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "17szzz2a5wpi7kwjnhimiwf8vg0bfliyk3k0adgv1pw2mcfpxp5s";
+ };
+
+ nativeBuildInputs = [
+ gettext
+ meson
+ ninja
+ pkgconfig
+ systemd
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ accountsservice
+ fontconfig
+ gdm
+ geoclue2
+ geocode-glib
+ glib
+ gnome-desktop
+ gnome-getting-started-docs
+ gnome-online-accounts
+ gtk3
+ json-glib
+ krb5
+ libgweather
+ libpwquality
+ librest
+ libsecret
+ networkmanager
+ pango
+ polkit
+ webkitgtk
+ libnma
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit tzdata libgnomekbd;
+ yelp = "${yelp}/bin/yelp"; # gnome-welcome-tour
+ })
+ ];
+
+ mesonFlags = [
+ "-Dcheese=disabled"
+ "-Dibus=disabled"
+ "-Dparental_controls=disabled"
+ "-Dvendor-conf-file=${./vendor.conf}"
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Simple, easy, and safe way to prepare a new system";
+ homepage = "https://gitlab.gnome.org/GNOME/gnome-initial-setup";
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ maintainers = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/fix-paths.patch
new file mode 100644
index 000000000000..94e14f688b3c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/fix-paths.patch
@@ -0,0 +1,67 @@
+diff --git a/data/gnome-welcome-tour b/data/gnome-welcome-tour
+index c479296..3dd629c 100755
+--- a/data/gnome-welcome-tour
++++ b/data/gnome-welcome-tour
+@@ -3,7 +3,7 @@
+ cfgdir=${XDG_CONFIG_DIR:-$HOME/.config}
+
+ # Don't do anything if yelp isn't installed
+-yelp_path=$(which yelp 2>/dev/null)
++yelp_path=@yelp@
+ if test -z "${yelp_path}"; then
+ rm -f $cfgdir/run-welcome-tour
+ exit
+@@ -17,5 +17,5 @@ geometry=(1024, 709)
+ EOF
+ fi
+
+-yelp help:gnome-help/getting-started
++$yelp_path help:gnome-help/getting-started
+ rm -f $cfgdir/run-welcome-tour
+diff --git a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+index 1c34ef7..a1e7f93 100644
+--- a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
++++ b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+@@ -177,9 +177,9 @@ preview_cb (GtkLabel *label,
+ return TRUE;
+
+ if (variant[0])
+- commandline = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"", layout, variant);
++ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l \"%s\t%s\"", layout, variant);
+ else
+- commandline = g_strdup_printf ("gkbd-keyboard-display -l %s", layout);
++ commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l %s", layout);
+ g_spawn_command_line_async (commandline, NULL);
+ g_free (commandline);
+
+@@ -829,7 +829,7 @@ cc_input_chooser_class_init (CcInputChooserClass *klass)
+ g_param_spec_string ("showing-extra", "", "", "",
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+- signals[CHANGED] =
++ signals[CHANGED] =
+ g_signal_new ("changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST,
+diff --git a/gnome-initial-setup/pages/timezone/tz.h b/gnome-initial-setup/pages/timezone/tz.h
+index 93905b3..e7ee785 100644
+--- a/gnome-initial-setup/pages/timezone/tz.h
++++ b/gnome-initial-setup/pages/timezone/tz.h
+@@ -4,7 +4,7 @@
+ * Copyright (C) 2000-2001 Ximian, Inc.
+ *
+ * Authors: Hans Petter Jansson <hpj@ximian.com>
+- *
++ *
+ * Largely based on Michael Fulbright's work on Anaconda.
+ *
+ * This program is free software; you can redistribute it and/or modify
+@@ -28,7 +28,7 @@
+ #include <glib.h>
+
+ #ifndef __sun
+-# define TZ_DATA_FILE "/usr/share/zoneinfo/zone.tab"
++# define TZ_DATA_FILE "@tzdata@/share/zoneinfo/zone.tab"
+ #else
+ # define TZ_DATA_FILE "/usr/share/lib/zoneinfo/tab/zone_sun.tab"
+ #endif
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/vendor.conf b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/vendor.conf
new file mode 100644
index 000000000000..a06b37e100ed
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-initial-setup/vendor.conf
@@ -0,0 +1,5 @@
+# Disable pages not right for NixOS
+# For example user accounts should be preconfigured
+# and we can't modify system time with systemd.
+[pages]
+skip=account;software;password;timezone;
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
new file mode 100644
index 000000000000..9ffd32e85f70
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-keyring/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "11sgffrrpss5cmv3b717pqlbhgq17l1xd33fsvqgsw8simxbar52";
+ };
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix
new file mode 100644
index 000000000000..ede2f2792483
--- /dev/null
+++ b/infra/libkookie/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.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-online-miners/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1n2jz9i8a42zwxx5h8j2gdy6q1vyydh4vl00r0al7w8jzdh24p44";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-remote-desktop/default.nix
new file mode 100644
index 000000000000..a77aee4b890c
--- /dev/null
+++ b/infra/libkookie/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 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-remote-desktop";
+ version = "0.1.8";
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "jadahl";
+ repo = "gnome-remote-desktop";
+ rev = version;
+ sha256 = "1wcvk0w4p0wnqnrjkbwvqcby9dd4nj0cm9cz0fqna31qfjrvb913";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
new file mode 100644
index 000000000000..2eacfc2de777
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0rhj6fkpxfm26jv3vsn7yb2ybkc2k86ggy23nxa945q74y4msj9k";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix
new file mode 100644
index 000000000000..b25688ea5a9d
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/default.nix
@@ -0,0 +1,79 @@
+{ 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.36.0";
+
+ outputs = ["out" "sessions"];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-session/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0ymvf1bap35348rpjqp63qwnwnnawdwi4snch95zc4n832w3hjym";
+ };
+
+ 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"
+ '';
+
+ # We move the GNOME sessions to another output since gnome-session is a dependency of
+ # GDM itself. If we do not hide them, it will show broken GNOME sessions when GDM is
+ # enabled without proper GNOME installation.
+ postInstall = ''
+ mkdir $sessions
+ moveToOutput share/wayland-sessions "$sessions"
+ moveToOutput share/xsessions "$sessions"
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "gnome-session";
+ attrPath = "gnome3.gnome-session";
+ };
+ providedSessions = [ "gnome" "gnome-xorg" ];
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME session manager";
+ homepage = "https://wiki.gnome.org/Projects/SessionManagement";
+ license = licenses.gpl2Plus;
+ maintainers = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch
new file mode 100644
index 000000000000..2399c656016a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-session/fix-paths.patch
@@ -0,0 +1,40 @@
+--- a/gnome-session/gnome-session.in
++++ b/gnome-session/gnome-session.in
+@@ -3,11 +3,13 @@
+ 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 $*'"
++ # Make sure the shell actually sets up the environment
++ unset __NIXOS_SET_ENVIRONMENT_DONE
++ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
new file mode 100644
index 000000000000..2ee07fb09aa8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
@@ -0,0 +1,124 @@
+{ stdenv
+, substituteAll
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gnome3
+, perl
+, gettext
+, gtk3
+, glib
+, libnotify
+, libgnomekbd
+, lcms2
+, libpulseaudio
+, alsaLib
+, libcanberra-gtk3
+, upower
+, colord
+, libgweather
+, polkit
+, gsettings-desktop-schemas
+, geoclue2
+, systemd
+, libgudev
+, libwacom
+, libxslt
+, libxml2
+, modemmanager
+, networkmanager
+, gnome-desktop
+, geocode-glib
+, docbook_xsl
+, wrapGAppsHook
+, python3
+, tzdata
+, nss
+, gcr
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-settings-daemon";
+ version = "3.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-settings-daemon/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0jzf2nznpcrjqq7fjwk66kw8a6x87kgbdjidc2msaqmm379xncry";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit tzdata;
+ })
+ ];
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ perl
+ gettext
+ libxml2
+ libxslt
+ docbook_xsl
+ wrapGAppsHook
+ python3
+ ];
+
+ buildInputs = [
+ gtk3
+ glib
+ gsettings-desktop-schemas
+ modemmanager
+ 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
+ gcr
+ ];
+
+ mesonFlags = [
+ "-Dudev_dir=${placeholder "out"}/lib/udev"
+ ];
+
+ # Default for release buildtype but passed manually because
+ # we're using plain
+ NIX_CFLAGS_COMPILE = "-DG_DISABLE_CAST_CHECKS";
+
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch
new file mode 100644
index 000000000000..2229302cab7c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/fix-paths.patch
@@ -0,0 +1,15 @@
+--- a/plugins/datetime/tz.h
++++ b/plugins/datetime/tz.h
+@@ -27,11 +27,7 @@
+
+ #include <glib.h>
+
+-#ifndef __sun
+-# define TZ_DATA_FILE "/usr/share/zoneinfo/zone.tab"
+-#else
+-# define TZ_DATA_FILE "/usr/share/lib/zoneinfo/tab/zone_sun.tab"
+-#endif
++#define TZ_DATA_FILE "@tzdata@/share/zoneinfo/zone.tab"
+
+ typedef struct _TzDB TzDB;
+ typedef struct _TzLocation TzLocation;
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-settings-daemon/global-backlight-helper.patch
new file mode 100644
index 000000000000..8f3951af2da8
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
new file mode 100644
index 000000000000..ba1b0faedb20
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, meson, ninja, gettext, pkgconfig, spidermonkey_68, glib
+, gnome3, gnome-menus, substituteAll }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extensions";
+ version = "3.36.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-shell-extensions/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1cg3dqvvxg8zrdqs2rci8sds2hxjahbhm87f0xpy8b3gq56lqrrb";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix_gmenu.patch;
+ gmenu_path = "${gnome-menus}/lib/girepository-1.0";
+ })
+ ];
+
+ doCheck = true;
+ # 60 is required for tests
+ # https://gitlab.gnome.org/GNOME/gnome-shell-extensions/blob/3.34.0/meson.build#L23
+ checkInputs = [ spidermonkey_68 ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell-extensions/fix_gmenu.patch
new file mode 100644
index 000000000000..555664e8ae25
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
new file mode 100644
index 000000000000..8f2e78c639c2
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
@@ -0,0 +1,221 @@
+{ fetchurl
+, fetchpatch
+, substituteAll
+, stdenv
+, meson
+, ninja
+, pkg-config
+, gnome3
+, json-glib
+, gettext
+, libsecret
+, python3
+, polkit
+, networkmanager
+, gtk-doc
+, docbook-xsl-nons
+, at-spi2-core
+, libstartup_notification
+, telepathy-glib
+, telepathy-logger
+, unzip
+, shared-mime-info
+, libgweather
+, librsvg
+, geoclue2
+, perl
+, docbook_xml_dtd_412
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, desktop-file-utils
+, libpulseaudio
+, libical
+, gobject-introspection
+, wrapGAppsHook
+, libxslt
+, gcr
+, accountsservice
+, gdk-pixbuf
+, gdm
+, upower
+, ibus
+, libnma
+, 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
+, gnome-autoar
+, asciidoc-full
+, bash-completion
+}:
+
+# 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.36.5";
+
+ outputs = [ "out" "devdoc" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1hj7gmjmy92xndlgw7pzk5m6j2fbzcgfd1pxc32k38gml8qg19d4";
+ };
+
+ patches = [
+ # Hardcode paths to various dependencies so that they can be found at runtime.
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit libgnomekbd unzip;
+ gsettings = "${glib.bin}/bin/gsettings";
+ })
+
+ # Install bash-completions to correct prefix.
+ # https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1194
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-shell/commit/9f1ad5d86ddbabaa840eb2860279d53f4e635453.patch";
+ sha256 = "18amnqw342vllcrjpfcq232z9xr28vgjsf2z8k73xx70nwah7hvz";
+ })
+
+ # Use absolute path for libshew installation to make our patched gobject-introspection
+ # aware of the location to hardcode in the generated GIR file.
+ ./shew-gir-path.patch
+
+ # Make D-Bus services wrappable.
+ ./wrap-services.patch
+
+ # Fix greeter logo being too big.
+ # https://gitlab.gnome.org/GNOME/gnome-shell/issues/2591
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-shell/commit/ffb8bd5fa7704ce70ce7d053e03549dd15dce5ae.patch";
+ revert = true;
+ sha256 = "14h7ahlxgly0n3sskzq9dhxzbyb04fn80pv74vz1526396676dzl";
+ })
+ ];
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkg-config
+ gettext
+ docbook-xsl-nons
+ docbook_xml_dtd_412
+ docbook_xml_dtd_42
+ docbook_xml_dtd_43
+ gtk-doc
+ perl
+ wrapGAppsHook
+ sassc
+ desktop-file-utils
+ libxslt.bin
+ python3
+ asciidoc-full
+ ];
+
+ buildInputs = [
+ systemd
+ gsettings-desktop-schemas
+ gnome-keyring
+ glib
+ gcr
+ accountsservice
+ libsecret
+ polkit
+ gdk-pixbuf
+ librsvg
+ networkmanager
+ libstartup_notification
+ telepathy-glib
+ gjs
+ mutter
+ libpulseaudio
+ evolution-data-server
+ libical
+ gtk3
+ gdm
+ geoclue2
+ adwaita-icon-theme
+ gnome-bluetooth
+ gnome-clocks # schemas needed
+ at-spi2-core
+ upower
+ ibus
+ gnome-desktop
+ telepathy-logger
+ gnome-settings-daemon
+ gobject-introspection
+
+ # recording
+ gst_all_1.gstreamer
+ gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good
+
+ # not declared at build time, but typelib is needed at runtime
+ libgweather
+ libnma
+
+ # for gnome-extension tool
+ bash-completion
+ gnome-autoar
+ json-glib
+ ];
+
+ mesonFlags = [
+ "-Dgtk_doc=true"
+ ];
+
+ postPatch = ''
+ patchShebangs src/data-to-c.pl
+ chmod +x meson/postinstall.py
+ patchShebangs meson/postinstall.py
+
+ substituteInPlace src/gnome-shell-extension-tool.in --replace "@PYTHON@" "${pythonEnv}/bin/python"
+ substituteInPlace src/gnome-shell-perf-tool.in --replace "@PYTHON@" "${pythonEnv}/bin/python"
+ '';
+
+ 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"
+ )
+ '';
+
+ postFixup = ''
+ # The services need typelibs.
+ for svc in org.gnome.Shell.Extensions org.gnome.Shell.Notifications; do
+ wrapGApp $out/share/gnome-shell/$svc
+ done
+ '';
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch
new file mode 100644
index 000000000000..7b93475619b2
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/fix-paths.patch
@@ -0,0 +1,30 @@
+--- 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
+@@ -1062,6 +1062,6 @@ class InputSourceIndicator extends PanelMenu.Button {
+ if (xkbVariant.length > 0)
+ description = `${description}\t${xkbVariant}`;
+
+- Util.spawn(['gkbd-keyboard-display', '-l', description]);
++ Util.spawn(['@libgnomekbd@/bin/gkbd-keyboard-display', '-l', description]);
+ }
+ });
+--- a/data/gnome-shell-disable-extensions.service
++++ b/data/gnome-shell-disable-extensions.service
+@@ -10,5 +10,5 @@ Requisite=gnome-session-stable.timer
+ [Service]
+ Type=simple
+ # Disable extensions
+-ExecStart=gsettings set org.gnome.shell disable-user-extensions true
++ExecStart=@gsettings@ set org.gnome.shell disable-user-extensions true
+ Restart=no
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch
new file mode 100644
index 000000000000..2d7bdf303151
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch
@@ -0,0 +1,11 @@
+--- a/subprojects/shew/src/meson.build
++++ b/subprojects/shew/src/meson.build
+@@ -13,7 +13,7 @@ shew_sources = [
+ libshew = library(full_name,
+ sources: shew_sources,
+ dependencies: [gtk_dep],
+- install_dir: pkglibdir,
++ install_dir: get_option('prefix') / pkglibdir,
+ install: true,
+ )
+
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/wrap-services.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/wrap-services.patch
new file mode 100644
index 000000000000..bc494caea9dd
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-shell/wrap-services.patch
@@ -0,0 +1,57 @@
+diff --git a/js/dbusServices/dbus-service.in b/js/dbusServices/dbus-service.in
+old mode 100644
+new mode 100755
+index 524166102..100b81a63
+--- a/js/dbusServices/dbus-service.in
++++ b/js/dbusServices/dbus-service.in
+@@ -1,3 +1,9 @@
++#!@gjs@
++
++// gjs determines the package name from argv[0], which is .*-wrapped
++// so we need to override it to the original one.
++imports.package._findEffectiveEntryPointName = () => '@service@'
++
+ imports.package.start({
+ name: '@PACKAGE_NAME@',
+ prefix: '@prefix@',
+diff --git a/js/dbusServices/dbus-service.service.in b/js/dbusServices/dbus-service.service.in
+index 3b0d09abe..4fd4bb66d 100644
+--- a/js/dbusServices/dbus-service.service.in
++++ b/js/dbusServices/dbus-service.service.in
+@@ -1,3 +1,3 @@
+ [D-BUS Service]
+ Name=@service@
+-Exec=@gjs@ @pkgdatadir@/@service@
++Exec=@pkgdatadir@/@service@
+diff --git a/js/dbusServices/meson.build b/js/dbusServices/meson.build
+index c749f45dc..11bcb0c9e 100644
+--- a/js/dbusServices/meson.build
++++ b/js/dbusServices/meson.build
+@@ -2,6 +2,7 @@ launcherconf = configuration_data()
+ launcherconf.set('PACKAGE_NAME', meson.project_name())
+ launcherconf.set('prefix', prefix)
+ launcherconf.set('libdir', libdir)
++launcherconf.set('gjs', gjs.path())
+
+ dbus_services = {
+ 'org.gnome.Shell.Extensions': 'extensions',
+@@ -11,16 +12,17 @@ dbus_services = {
+ config_dir = '@0@/..'.format(meson.current_build_dir())
+
+ foreach service, dir : dbus_services
++ svc_launcherconf = launcherconf
++ svc_launcherconf.set('service', service)
+ configure_file(
+ input: 'dbus-service.in',
+ output: service,
+- configuration: launcherconf,
++ configuration: svc_launcherconf,
+ install_dir: pkgdatadir,
+ )
+
+ serviceconf = configuration_data()
+ serviceconf.set('service', service)
+- serviceconf.set('gjs', gjs.path())
+ serviceconf.set('pkgdatadir', pkgdatadir)
+
+ configure_file(
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix
new file mode 100644
index 000000000000..9f51227f235a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/default.nix
@@ -0,0 +1,65 @@
+{ 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
+, 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.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-software/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0vkgpy2afb33rrk94zqlm2q728xhzjj8s24n9wh9ylw00z3nckad";
+ };
+
+ 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
+ ];
+
+ 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"
+ # FIXME: package malcontent parental controls
+ "-Dmalcontent=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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-software/fix-paths.patch
new file mode 100644
index 000000000000..6f443a8a43ed
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
new file mode 100644
index 000000000000..2dd4ae9e7f7b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, gettext, fetchurl, pkgconfig, gtkmm3, libxml2
+, 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.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-system-monitor/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "18dwwwmw4m2kzvfmxyaxmnm66d1plwvh6c6naznb0xac1ymlfsw6";
+ };
+
+ doCheck = true;
+
+ nativeBuildInputs = [
+ pkgconfig gettext itstool wrapGAppsHook meson ninja python3
+ ];
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
new file mode 100644
index 000000000000..821d5707c7c9
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, gnome3, dconf, nautilus
+, gtk3, gsettings-desktop-schemas, vte, gettext, which, libuuid, vala
+, desktop-file-utils, itstool, wrapGAppsHook, glib, pcre2 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-terminal";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-terminal/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0inzmkmxv8xw4px2zjfw7236d08yjcv7znxcjki6dh4pvjivdla1";
+ };
+
+ buildInputs = [
+ gtk3 gsettings-desktop-schemas vte libuuid dconf
+ # For extension
+ nautilus
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig gettext itstool which libxml2
+ vala desktop-file-utils wrapGAppsHook pcre2
+ ];
+
+ # 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix
new file mode 100644
index 000000000000..fa2f4921fd91
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-themes-extra/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, intltool, gtk3, gnome3, librsvg, pkgconfig, pango, atk, gtk2
+, gdk-pixbuf, hicolor-icon-theme }:
+
+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 ];
+ propagatedBuildInputs = [ gnome3.adwaita-icon-theme hicolor-icon-theme ];
+
+ dontDropIconThemeCache = true;
+
+ postInstall = ''
+ gtk-update-icon-cache "$out"/share/icons/HighContrast
+ '';
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-tour/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-tour/default.nix
new file mode 100644
index 000000000000..719e97647f7a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-tour/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, rustPlatform
+, gettext
+, meson
+, ninja
+, fetchFromGitLab
+, pkg-config
+, gtk3
+, glib
+, gdk-pixbuf
+, desktop-file-utils
+, appstream-glib
+, wrapGAppsHook
+, python3
+, gnome3
+, config
+}:
+
+rustPlatform.buildRustPackage rec {
+ pname = "gnome-tour";
+ version = "0.0.1";
+
+ # We don't use the uploaded tar.xz because it comes pre-vendored
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "GNOME";
+ repo = "gnome-tour";
+ rev = version;
+ sha256 = "0lbkspnlziq3z177071w3jpghmdwflzra1krdwchzmkfmrhy50ch";
+ };
+
+ cargoSha256 = "0k1wp9wswr57fv2d9bysxn97fchd4vz29n5r8gfyp0gcm8rclmij";
+
+ mesonFlags = [
+ "-Ddistro_name=NixOS"
+ "-Ddistro_icon_name=nix-snowflake"
+ "-Ddistro_version=20.09"
+ ];
+
+ nativeBuildInputs = [
+ appstream-glib
+ desktop-file-utils
+ gettext
+ meson
+ ninja
+ pkg-config
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gdk-pixbuf
+ glib
+ gtk3
+ ];
+
+ # Don't use buildRustPackage phases, only use it for rust deps setup
+ configurePhase = null;
+ buildPhase = null;
+ checkPhase = null;
+ installPhase = null;
+
+ postPatch = ''
+ chmod +x build-aux/meson_post_install.py
+ patchShebangs build-aux/meson_post_install.py
+ '';
+
+ # passthru = {
+ # updateScript = gnome3.updateScript {
+ # packageName = pname;
+ # };
+ # };
+
+ meta = with stdenv.lib; {
+ homepage = "https://gitlab.gnome.org/GNOME/gnome-tour";
+ description = "GNOME Greeter & Tour";
+ maintainers = teams.gnome.members;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
new file mode 100644
index 000000000000..90acee076a34
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
@@ -0,0 +1,96 @@
+{ stdenv
+, gettext
+, meson
+, ninja
+, fetchurl
+, fetchpatch
+, apacheHttpd
+, nautilus
+, pkgconfig
+, gtk3
+, glib
+, libxml2
+, systemd
+, wrapGAppsHook
+, itstool
+, libnotify
+, mod_dnssd
+, gnome3
+, libcanberra-gtk3
+, python3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-user-share";
+ version = "3.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "04r9ck9v4i0d31grbli1d4slw2d6dcsfkpaybkwbzi7wnj72l30x";
+ };
+
+ patches = [
+ # fix gio-unix-2.0 lookup
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/gnome-user-share/commit/8772980d4732c15505b15dccff2ca3c97e96d49d.patch";
+ sha256 = "03clzhrx72pq1cbmg2y24hvw4i1xsvrg9ip113fi5bc3w4gcji7p";
+ })
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ 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
+ '';
+
+ mesonFlags = [
+ "-Dhttpd=${apacheHttpd.out}/bin/httpd"
+ "-Dmodules_path=${apacheHttpd.dev}/modules"
+ "-Dsystemduserunitdir=${placeholder "out"}/etc/systemd/user"
+ # In 3.34.0 it defaults to false but it is silently ignored and always installed.
+ # Let’s add it anyway in case they decide to make build respect the option in the future.
+ "-Dnautilus_extension=true"
+ ];
+
+ nativeBuildInputs = [
+ pkgconfig
+ meson
+ ninja
+ gettext
+ itstool
+ libxml2
+ wrapGAppsHook
+ python3
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix
new file mode 100644
index 000000000000..fe24ac8708a0
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/gucharmap/default.nix
@@ -0,0 +1,108 @@
+{ stdenv
+, intltool
+, fetchFromGitLab
+, meson
+, ninja
+, pkgconfig
+, python3
+, gtk3
+, adwaita-icon-theme
+, glib
+, desktop-file-utils
+, gtk-doc
+, wrapGAppsHook
+, gnome3
+, itstool
+, libxml2
+, yelp-tools
+, docbook_xsl
+, docbook_xml_dtd_412
+, gsettings-desktop-schemas
+, callPackage
+, unzip
+, unicode-character-database
+, unihan-database
+, runCommand
+, symlinkJoin
+, gobject-introspection
+}:
+
+let
+ # TODO: make upstream patch allowing to use the uncompressed file,
+ # preferably from XDG_DATA_DIRS.
+ # https://gitlab.gnome.org/GNOME/gucharmap/issues/13
+ unihanZip = runCommand "unihan" {} ''
+ mkdir -p $out/share/unicode
+ ln -s ${unihan-database.src} $out/share/unicode/Unihan.zip
+ '';
+ ucd = symlinkJoin {
+ name = "ucd+unihan";
+ paths = [
+ unihanZip
+ unicode-character-database
+ ];
+ };
+in stdenv.mkDerivation rec {
+ pname = "gucharmap";
+ version = "13.0.2";
+
+ outputs = [ "out" "lib" "dev" "devdoc" ];
+
+ src = fetchFromGitLab {
+ domain = "gitlab.gnome.org";
+ owner = "GNOME";
+ repo = pname;
+ rev = version;
+ sha256 = "099za9mc6qdq9pwcbjp3d7hxjbaa43vk2w9qw4yiyswl1xq3jw62";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ unzip
+ intltool
+ itstool
+ 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
+ ];
+
+ mesonFlags = [
+ "-Ducd_path=${ucd}/share/unicode"
+ "-Dvapi=false"
+ ];
+
+ doCheck = true;
+
+ postPatch = ''
+ patchShebangs data/meson_desktopfile.py gucharmap/gen-guch-unicode-tables.pl gucharmap/meson_compileschemas.py
+ '';
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix
new file mode 100644
index 000000000000..0b9aacf0ddfa
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/0001-Fix-glitches-in-gala.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/0001-Fix-glitches-in-gala.patch
new file mode 100644
index 000000000000..7be00b33bba5
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/0001-Fix-glitches-in-gala.patch
@@ -0,0 +1,29 @@
+From e10186284103d3ad8e425980b096eac813cae631 Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@protonmail.ch>
+Date: Sun, 5 Apr 2020 23:06:03 -0400
+Subject: [PATCH] Fix glitches in gala
+
+This fixes 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 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
+index ecf9a597d..07b8b7155 100644
+--- a/clutter/clutter/clutter-actor.c
++++ b/clutter/clutter/clutter-actor.c
+@@ -17831,7 +17831,7 @@ _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;
++ //priv->needs_paint_volume_update = FALSE;
+ return &priv->paint_volume;
+ }
+ else
+--
+2.25.1
+
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/default.nix
new file mode 100644
index 000000000000..876969878506
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/default.nix
@@ -0,0 +1,166 @@
+{ fetchurl
+, fetchpatch
+, substituteAll
+, stdenv
+, pkgconfig
+, gnome3
+, pantheon
+, gettext
+, gobject-introspection
+, upower
+, cairo
+, pango
+, cogl
+, json-glib
+, libstartup_notification
+, zenity
+, libcanberra-gtk3
+, ninja
+, xkeyboard_config
+, libxkbfile
+, libxkbcommon
+, libXtst
+, libinput
+, gsettings-desktop-schemas
+, glib
+, gtk3
+, gnome-desktop
+, geocode-glib
+, pipewire_0_2
+, libgudev
+, libwacom
+, xwayland
+, meson
+, gnome-settings-daemon
+, xorgserver
+, python3
+, wrapGAppsHook
+, sysprof
+, desktop-file-utils
+, libcap_ng
+, egl-wayland
+}:
+
+stdenv.mkDerivation rec {
+ pname = "mutter";
+ version = "3.34.5";
+
+ outputs = [ "out" "dev" "man" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/mutter/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1i3r51ghfld1rf1rczzi3jhybz3mhywqcj2jyiqhfcyp1svlklfi";
+ };
+
+ mesonFlags = [
+ "-Degl_device=true"
+ "-Dinstalled_tests=false" # TODO: enable these
+ "-Dwayland_eglstream=true"
+ "-Dxwayland-path=${xwayland}/bin/Xwayland"
+ ];
+
+ propagatedBuildInputs = [
+ # required for pkgconfig to detect mutter-clutter
+ json-glib
+ libXtst
+ libcap_ng
+ ];
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ xorgserver # for cvt command
+ ];
+
+ buildInputs = [
+ cairo
+ cogl
+ egl-wayland
+ geocode-glib
+ glib
+ gnome-desktop
+ gnome-settings-daemon
+ gobject-introspection
+ gsettings-desktop-schemas
+ gtk3
+ libcanberra-gtk3
+ libgudev
+ libinput
+ libstartup_notification
+ libwacom
+ libxkbcommon
+ libxkbfile
+ pango
+ pipewire_0_2 # TODO: backport pipewire 0.3 support
+ sysprof
+ upower
+ xkeyboard_config
+ xwayland
+ zenity
+ ];
+
+ patches = [
+ # Fix build with libglvnd provided headers
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/mutter/commit/a444a4c5f58ea516ad3cd9d6ddc0056c3ca9bc90.patch";
+ sha256 = "0imy2j8af9477jliwdq4jc40yw1cifsjjf196gnmwxr9rkj0hbrd";
+ })
+
+ # gnome-3-34 2020-04-24
+ # also fixes https://mail.gnome.org/archives/distributor-list/2020-April/msg00001.html
+ (fetchpatch {
+ url = "https://github.com/GNOME/mutter/compare/3.34.5..3bafd234248fdcd84bc62fef5e31c29fbb613909.patch";
+ sha256 = "1a7krbdfmvx204p6av44rbp4ckp6ddg1mms8wkixxh2p871zq1pi";
+ })
+
+ # Drop inheritable cap_sys_nice, to prevent the ambient set from leaking
+ # from mutter/gnome-shell, see https://github.com/NixOS/nixpkgs/issues/71381
+ ./drop-inheritable.patch
+
+ # See commit message for details
+ ./0001-Fix-glitches-in-gala.patch
+
+ # https://gitlab.gnome.org/GNOME/mutter/merge_requests/1094
+ # https://gitlab.gnome.org/GNOME/mutter/merge_requests/957
+ ./fix-sysprof.patch
+
+ # profiler: track changes in GLib and Sysprof
+ # https://gitlab.gnome.org/GNOME/mutter/merge_requests/908
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/mutter/-/commit/605171291993460f31d470a8143d6438d0c6169c.patch";
+ sha256 = "10fxzj0lmic2sp57w26w3r0bv1szngjjs50p3ka22wr9pxqmzl7l";
+ })
+
+ # Fixes https://github.com/elementary/wingpanel/issues/305
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/GNOME/mutter/-/commit/9d390ee49fb1f6300336e82ae94cc8061c6bae12.patch";
+ sha256 = "12hmi07rvspwhp8h1y1vmcvmvbh8fihcrb07ja5g0qnh28ip5qfi";
+ })
+
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit zenity;
+ })
+ ];
+
+ postPatch = ''
+ patchShebangs src/backends/native/gen-default-modes.py
+ '';
+
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas "$out/share/glib-2.0/schemas"
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A window manager for GNOME";
+ homepage = "https://gitlab.gnome.org/GNOME/mutter";
+ license = licenses.gpl2;
+ maintainers = pantheon.maintainers;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/drop-inheritable.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/drop-inheritable.patch
new file mode 100644
index 000000000000..0f60be3a1217
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/drop-inheritable.patch
@@ -0,0 +1,132 @@
+From e9c772e265b2293af031c79f4bbc99b5847dfe3c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= <torhedinbronner@gmail.com>
+Date: Sat, 19 Oct 2019 13:26:05 +0200
+Subject: [PATCH] drop inheritable
+
+Adapted from https://gitlab.gnome.org/GNOME/mutter/commit/c53c47ae123b03cc66044d2b846342123ecb3a01
+
+We only want to drop inheritable though, to prevent the ambient set leaking further than gnome-shell.
+
+---
+ config.h.meson | 3 +++
+ meson.build | 5 +++++
+ meson_options.txt | 6 ++++++
+ src/core/main.c | 11 +++++++++++
+ src/meson.build | 1 +
+ 5 files changed, 26 insertions(+)
+
+diff --git a/config.h.meson b/config.h.meson
+index 0bab71848..202fb7ed1 100644
+--- a/config.h.meson
++++ b/config.h.meson
+@@ -58,6 +58,9 @@
+ /* Xwayland applications allowed to issue keyboard grabs */
+ #mesondefine XWAYLAND_GRAB_DEFAULT_ACCESS_RULES
+
++/* Defined if libcap-ng is available */
++#mesondefine HAVE_LIBCAPNG
++
+ /* XKB base prefix */
+ #mesondefine XKB_BASE
+
+diff --git a/meson.build b/meson.build
+index 3322bd3b1..01c8020fa 100644
+--- a/meson.build
++++ b/meson.build
+@@ -35,6 +35,7 @@ libstartup_notification_req = '>= 0.7'
+ libcanberra_req = '>= 0.26'
+ libwacom_req = '>= 0.13'
+ atk_req = '>= 2.5.3'
++libcapng_req = '>= 0.7.9'
+
+ # optional version requirements
+ udev_req = '>= 228'
+@@ -125,6 +126,7 @@ xau_dep = dependency('xau')
+ ice_dep = dependency('ice')
+ atk_dep = dependency('atk', version: atk_req)
+ libcanberra_dep = dependency('libcanberra', version: libcanberra_req)
++libcapng_dep = dependency('libcap-ng', required: get_option('libcapng'))
+
+ # For now always require X11 support
+ have_x11 = true
+@@ -256,6 +258,7 @@ have_core_tests = false
+ have_cogl_tests = false
+ have_clutter_tests = false
+ have_installed_tests = false
++have_libcapng = libcapng_dep.found()
+
+ if have_tests
+ have_core_tests = get_option('core_tests')
+@@ -361,6 +364,7 @@ cdata.set('HAVE_LIBWACOM', have_libwacom)
+ cdata.set('HAVE_SM', have_sm)
+ cdata.set('HAVE_STARTUP_NOTIFICATION', have_startup_notification)
+ cdata.set('HAVE_INTROSPECTION', have_introspection)
++cdata.set('HAVE_LIBCAPNG', have_libcapng)
+ cdata.set('HAVE_PROFILER', have_profiler)
+
+ xkb_base = xkeyboard_config_dep.get_pkgconfig_variable('xkb_base')
+@@ -443,6 +447,7 @@ output = [
+ ' Startup notification..... ' + have_startup_notification.to_string(),
+ ' Introspection............ ' + have_introspection.to_string(),
+ ' Profiler................. ' + have_profiler.to_string(),
++ ' libcap-ng................ ' + have_libcapng.to_string(),
+ '',
+ ' Tests:',
+ '',
+diff --git a/meson_options.txt b/meson_options.txt
+index 73aa7adde..8bfaacd9a 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -152,3 +152,9 @@ option('xwayland_grab_default_access_rules',
+ value: 'gnome-boxes,remote-viewer,virt-viewer,virt-manager,vinagre,vncviewer,Xephyr',
+ description: 'Comma delimited list of applications ressources or class allowed to issue X11 grabs in Xwayland'
+ )
++
++option('libcapng',
++ type: 'feature',
++ value: 'auto',
++ description: 'Enable libcap-ng support'
++)
+diff --git a/src/core/main.c b/src/core/main.c
+index 7f4f666d2..b27968f13 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -66,6 +66,10 @@
+ #include <girepository.h>
+ #endif
+
++#ifdef HAVE_LIBCAPNG
++#include <cap-ng.h>
++#endif
++
+ #if defined(HAVE_NATIVE_BACKEND) && defined(HAVE_WAYLAND)
+ #include <systemd/sd-login.h>
+ #endif /* HAVE_WAYLAND && HAVE_NATIVE_BACKEND */
+@@ -673,6 +677,12 @@ meta_run (void)
+ if (!meta_display_open ())
+ meta_exit (META_EXIT_ERROR);
+
++#ifdef HAVE_LIBCAPNG
++ capng_clear(CAPNG_SELECT_BOTH);
++ capng_update(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED, CAP_SYS_NICE);
++ capng_apply(CAPNG_SELECT_BOTH);
++#endif
++
+ g_main_loop_run (meta_main_loop);
+
+ meta_finalize ();
+diff --git a/src/meson.build b/src/meson.build
+index 90d80734f..a9fffa2c2 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -18,6 +18,7 @@ mutter_pkg_deps = [
+ glib_dep,
+ gsettings_desktop_schemas_dep,
+ gtk3_dep,
++ libcapng_dep,
+ pango_dep,
+ ]
+
+--
+2.23.0
+
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-paths.patch
new file mode 100644
index 000000000000..1986c65e8f49
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-sysprof.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-sysprof.patch
new file mode 100644
index 000000000000..481a0ab89cb0
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/3.34/fix-sysprof.patch
@@ -0,0 +1,25 @@
+From 71acfd5258b4d12323fc51dda48e83830e62e696 Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@protonmail.ch>
+Date: Mon, 16 Sep 2019 11:18:27 -0400
+Subject: [PATCH] build: use get_pkgconfig_variable for sysprof dbusdir
+
+---
+ src/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/meson.build b/src/meson.build
+index 182f7f5f5..43060865b 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -710,7 +710,7 @@ if have_profiler
+ 'backends/meta-profiler.h',
+ ]
+
+- dbus_interfaces_dir = join_paths(datadir, 'dbus-1', 'interfaces')
++ dbus_interfaces_dir = join_paths(sysprof_dep.get_pkgconfig_variable('prefix'), 'share', 'dbus-1', 'interfaces')
+ sysprof3_dbus_file = join_paths(dbus_interfaces_dir, 'org.gnome.Sysprof3.Profiler.xml')
+
+ dbus_sysprof3_profiler_built_sources = gnome.gdbus_codegen('meta-dbus-sysprof3-profiler',
+--
+2.22.1
+
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix
new file mode 100644
index 000000000000..79cbbb9f5a8c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/default.nix
@@ -0,0 +1,154 @@
+{ fetchurl
+, fetchpatch
+, substituteAll
+, runCommand
+, stdenv
+, pkgconfig
+, gnome3
+, gettext
+, gobject-introspection
+, cairo
+, pango
+, json-glib
+, libstartup_notification
+, zenity
+, libcanberra
+, ninja
+, xkeyboard_config
+, libxkbfile
+, libxkbcommon
+, libXtst
+, libinput
+, gsettings-desktop-schemas
+, glib
+, gtk3
+, gnome-desktop
+, pipewire
+, libgudev
+, libwacom
+, xwayland
+, meson
+, gnome-settings-daemon
+, xorgserver
+, python3
+, wrapGAppsHook
+, sysprof
+, desktop-file-utils
+, libcap_ng
+, egl-wayland
+, graphene
+, wayland-protocols
+}:
+
+let self = stdenv.mkDerivation rec {
+ pname = "mutter";
+ version = "3.36.5";
+
+ outputs = [ "out" "dev" "man" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/mutter/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1py7sqrpvg2qvswxclshysx7hd9jk65i6cwqsagd6rg6rnjhblp0";
+ };
+
+ patches = [
+ # Drop inheritable cap_sys_nice, to prevent the ambient set from leaking
+ # from mutter/gnome-shell, see https://github.com/NixOS/nixpkgs/issues/71381
+ ./drop-inheritable.patch
+
+ (substituteAll {
+ src = ./fix-paths.patch;
+ inherit zenity;
+ })
+ ];
+
+ mesonFlags = [
+ "-Degl_device=true"
+ "-Dinstalled_tests=false" # TODO: enable these
+ "-Dwayland_eglstream=true"
+ "-Dprofiler=true"
+ "-Dxwayland_path=${xwayland}/bin/Xwayland"
+ # This should be auto detected, but it looks like it manages a false
+ # positive.
+ "-Dxwayland_initfd=disabled"
+ ];
+
+ propagatedBuildInputs = [
+ # required for pkgconfig to detect mutter-clutter
+ json-glib
+ libXtst
+ libcap_ng
+ graphene
+ ];
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ xorgserver # for cvt command
+ ];
+
+ buildInputs = [
+ cairo
+ egl-wayland
+ glib
+ gnome-desktop
+ gnome-settings-daemon
+ gobject-introspection
+ gsettings-desktop-schemas
+ gtk3
+ libcanberra
+ libgudev
+ libinput
+ libstartup_notification
+ libwacom
+ libxkbcommon
+ libxkbfile
+ pango
+ pipewire
+ sysprof
+ xkeyboard_config
+ xwayland
+ wayland-protocols
+ ];
+
+ postPatch = ''
+ patchShebangs src/backends/native/gen-default-modes.py
+ '';
+
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas "$out/share/glib-2.0/schemas"
+ '';
+
+ passthru = {
+ libdir = "${self}/lib/mutter-6";
+
+ tests = {
+ libdirExists = runCommand "mutter-libdir-exists" {} ''
+ if [[ ! -d ${self.libdir} ]]; then
+ echo "passthru.libdir should contain a directory, “${self.libdir}” is not one."
+ exit 1
+ fi
+ touch $out
+ '';
+ };
+
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "A window manager for GNOME";
+ homepage = "https://gitlab.gnome.org/GNOME/mutter";
+ license = licenses.gpl2;
+ maintainers = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+};
+in self
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/drop-inheritable.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/drop-inheritable.patch
new file mode 100644
index 000000000000..1600db1e705b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/drop-inheritable.patch
@@ -0,0 +1,132 @@
+From e9c772e265b2293af031c79f4bbc99b5847dfe3c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= <torhedinbronner@gmail.com>
+Date: Sat, 19 Oct 2019 13:26:05 +0200
+Subject: [PATCH] drop inheritable
+
+Adapted from https://gitlab.gnome.org/GNOME/mutter/commit/c53c47ae123b03cc66044d2b846342123ecb3a01
+
+We only want to drop inheritable though, to prevent the ambient set leaking further than gnome-shell.
+
+---
+ config.h.meson | 3 +++
+ meson.build | 5 +++++
+ meson_options.txt | 6 ++++++
+ src/core/main.c | 11 +++++++++++
+ src/meson.build | 1 +
+ 5 files changed, 26 insertions(+)
+
+diff --git a/config.h.meson b/config.h.meson
+index 0bab71848..202fb7ed1 100644
+--- a/config.h.meson
++++ b/config.h.meson
+@@ -58,6 +58,9 @@
+ /* Xwayland applications allowed to issue keyboard grabs */
+ #mesondefine XWAYLAND_GRAB_DEFAULT_ACCESS_RULES
+
++/* Defined if libcap-ng is available */
++#mesondefine HAVE_LIBCAPNG
++
+ /* XKB base prefix */
+ #mesondefine XKB_BASE
+
+diff --git a/meson.build b/meson.build
+index 3322bd3b1..01c8020fa 100644
+--- a/meson.build
++++ b/meson.build
+@@ -35,6 +35,7 @@ libstartup_notification_req = '>= 0.7'
+ libcanberra_req = '>= 0.26'
+ libwacom_req = '>= 0.13'
+ atk_req = '>= 2.5.3'
++libcapng_req = '>= 0.7.9'
+
+ # optional version requirements
+ udev_req = '>= 228'
+@@ -131,6 +131,7 @@ ice_dep = dependency('ice')
+ atk_dep = dependency('atk', version: atk_req)
+ libcanberra_dep = dependency('libcanberra', version: libcanberra_req)
+ dbus_dep = dependency('dbus-1')
++libcapng_dep = dependency('libcap-ng', required: get_option('libcapng'))
+
+ # For now always require X11 support
+ have_x11 = true
+@@ -256,6 +258,7 @@ have_core_tests = false
+ have_cogl_tests = false
+ have_clutter_tests = false
+ have_installed_tests = false
++have_libcapng = libcapng_dep.found()
+
+ if have_tests
+ have_core_tests = get_option('core_tests')
+@@ -361,6 +364,7 @@ cdata.set('HAVE_LIBWACOM', have_libwacom)
+ cdata.set('HAVE_SM', have_sm)
+ cdata.set('HAVE_STARTUP_NOTIFICATION', have_startup_notification)
+ cdata.set('HAVE_INTROSPECTION', have_introspection)
++cdata.set('HAVE_LIBCAPNG', have_libcapng)
+ cdata.set('HAVE_PROFILER', have_profiler)
+
+ xkb_base = xkeyboard_config_dep.get_pkgconfig_variable('xkb_base')
+@@ -465,6 +465,7 @@ output = [
+ ' Introspection............ ' + have_introspection.to_string(),
+ ' Profiler................. ' + have_profiler.to_string(),
+ ' Xwayland initfd.......... ' + have_xwayland_initfd.to_string(),
++ ' libcap-ng................ ' + have_libcapng.to_string(),
+ '',
+ ' Tests:',
+ '',
+diff --git a/meson_options.txt b/meson_options.txt
+index 73aa7adde..8bfaacd9a 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -152,3 +152,9 @@ option('xwayland_grab_default_access_rules',
+ value: 'gnome-boxes,remote-viewer,virt-viewer,virt-manager,vinagre,vncviewer,Xephyr',
+ description: 'Comma delimited list of applications ressources or class allowed to issue X11 grabs in Xwayland'
+ )
++
++option('libcapng',
++ type: 'feature',
++ value: 'auto',
++ description: 'Enable libcap-ng support'
++)
+diff --git a/src/core/main.c b/src/core/main.c
+index 7f4f666d2..b27968f13 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -66,6 +66,10 @@
+ #include <girepository.h>
+ #endif
+
++#ifdef HAVE_LIBCAPNG
++#include <cap-ng.h>
++#endif
++
+ #if defined(HAVE_NATIVE_BACKEND) && defined(HAVE_WAYLAND)
+ #include <systemd/sd-login.h>
+ #endif /* HAVE_WAYLAND && HAVE_NATIVE_BACKEND */
+@@ -673,6 +677,12 @@ meta_run (void)
+ if (!meta_display_open ())
+ meta_exit (META_EXIT_ERROR);
+
++#ifdef HAVE_LIBCAPNG
++ capng_clear(CAPNG_SELECT_BOTH);
++ capng_update(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED, CAP_SYS_NICE);
++ capng_apply(CAPNG_SELECT_BOTH);
++#endif
++
+ g_main_loop_run (meta_main_loop);
+
+ meta_finalize ();
+diff --git a/src/meson.build b/src/meson.build
+index 90d80734f..a9fffa2c2 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -18,6 +18,7 @@ mutter_pkg_deps = [
+ glib_dep,
+ gsettings_desktop_schemas_dep,
+ gtk3_dep,
++ libcapng_dep,
+ pango_dep,
+ ]
+
+--
+2.23.0
+
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/mutter/fix-paths.patch
new file mode 100644
index 000000000000..6ac0a431f61f
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix
new file mode 100644
index 000000000000..6145178de1e0
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/default.nix
@@ -0,0 +1,107 @@
+{ 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
+, gnome-desktop
+, gst_all_1
+, gsettings-desktop-schemas
+, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+ pname = "nautilus";
+ version = "3.36.3";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1y0fsd7j48v4qkc051cg41mz7jycgw4vd4g37lw682p7n5xgrjmn";
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ gobject-introspection
+ libxml2
+ meson
+ ninja
+ pkgconfig
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ exempi
+ gexiv2
+ glib-networking
+ gnome-desktop
+ gnome3.adwaita-icon-theme
+ gsettings-desktop-schemas
+ gst_all_1.gst-plugins-base
+ gtk3
+ libexif
+ libnotify
+ libseccomp
+ libselinux
+ shared-mime-info
+ tracker
+ tracker-miners
+ ];
+
+ 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
+ ];
+
+ 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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/nautilus/extension_dir.patch
new file mode 100644
index 000000000000..e1313999675d
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/rygel/add-option-for-installation-sysconfdir.patch
new file mode 100644
index 000000000000..4259f93eb24c
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/rygel/default.nix
new file mode 100644
index 000000000000..529091e5fd61
--- /dev/null
+++ b/infra/libkookie/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.4";
+
+ # TODO: split out lib
+ outputs = [ "out" "dev" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0rm1m1z8rcvyj9873wqcz5i3qdg8j6gv6k1p01xifk0y9phg7rzc";
+ };
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix
new file mode 100644
index 000000000000..eebd307a3064
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/simple-scan/default.nix
@@ -0,0 +1,87 @@
+{ 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.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "09gmzrlljdqkj3w6wa1c27wypy6j8z9dw3jzv9izfqvp38liibsn";
+ };
+
+ nativeBuildInputs = [
+ meson
+ ninja
+ gettext
+ itstool
+ pkgconfig
+ python3
+ wrapGAppsHook
+ libxml2
+ gobject-introspection # For setup hook
+ ];
+
+ buildInputs = [
+ cairo
+ gdk-pixbuf
+ colord
+ glib
+ gnome3.adwaita-icon-theme
+ gusb
+ gtk3
+ libwebp
+ packagekit
+ sane-backends
+ vala
+ ];
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix
new file mode 100644
index 000000000000..4bdc409d8166
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/sushi/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, meson
+, gettext
+, gobject-introspection
+, glib
+, clutter-gtk
+, clutter-gst
+, gnome3
+, gtksourceview4
+, gjs
+, webkitgtk
+, libmusicbrainz5
+, icu
+, wrapGAppsHook
+, gst_all_1
+, gdk-pixbuf
+, librsvg
+, gtk3
+, harfbuzz
+, ninja
+, epoxy
+}:
+
+stdenv.mkDerivation rec {
+ pname = "sushi";
+ version = "3.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/sushi/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1zcr8wi5bgvvpb5ha1v96aiaz4vqqrsn6cvvalwzah6am85k78m8";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ meson
+ ninja
+ gettext
+ gobject-introspection
+ wrapGAppsHook
+ ];
+ buildInputs = [
+ glib
+ gtk3
+ gnome3.evince
+ icu
+ harfbuzz
+ clutter-gtk
+ clutter-gst
+ gjs
+ gtksourceview4
+ gdk-pixbuf
+ librsvg
+ libmusicbrainz5
+ webkitgtk
+ epoxy
+ gst_all_1.gstreamer
+ gst_all_1.gst-plugins-base
+ gst_all_1.gst-plugins-good
+ ];
+
+ # See https://github.com/NixOS/nixpkgs/issues/31168
+ postInstall = ''
+ for file in $out/libexec/org.gnome.NautilusPreviewer
+ do
+ sed -e $"2iimports.package._findEffectiveEntryPointName = () => \'$(basename $file)\' " \
+ -i $file
+ done
+ '';
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix
new file mode 100644
index 000000000000..50ab50e58b2c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/totem/default.nix
@@ -0,0 +1,57 @@
+{ 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.34.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/totem/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "028sc6xbyi7rs884862d8f3di6zhcm0lhvlpc3r69ifzjsq9my3b";
+ };
+
+ 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 .
+ '';
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
new file mode 100644
index 000000000000..09019e6758c1
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, gettext
+, fetchurl
+, pkgconfig
+, itstool
+, libxml2
+, libxslt
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "yelp-xsl";
+ version = "3.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/yelp-xsl/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1hsfj3q3a3kca0cf9i02xlq2qd4vy12qsjb89hh4r6mp6c11rrag";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ gettext
+ itstool
+ libxml2
+ libxslt
+ ];
+
+ doCheck = true;
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = pname;
+ attrPath = "gnome3.${pname}";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ homepage = "https://wiki.gnome.org/Apps/Yelp";
+ description = "Yelp's universal stylesheets for Mallard and DocBook";
+ maintainers = teams.gnome.members;
+ license = [licenses.gpl2 licenses.lgpl2];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/yelp/default.nix
new file mode 100644
index 000000000000..1235447c032a
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/yelp/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "097djjyl096zmicjpxlb858yz6rd5cj813xc8azbxlhsscikwjzx";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix
new file mode 100644
index 000000000000..5750fa0d001c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/core/zenity/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, libxml2
+, gnome3
+, gtk3
+, yelp-tools
+, gettext
+, libX11
+, 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";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig
+ gettext
+ yelp-tools
+ itstool
+ libxml2
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ gtk3
+ libX11
+ ];
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "zenity";
+ attrPath = "gnome3.zenity";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "Tool to display dialogs from the commandline and shell scripts";
+ homepage = "https://wiki.gnome.org/Projects/Zenity";
+ platforms = platforms.linux;
+ maintainers = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/default.nix
new file mode 100644
index 000000000000..846eefa9fa98
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/default.nix
@@ -0,0 +1,362 @@
+{ 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
+ namesToRemove = map lib.getName packagesToRemove;
+ in
+ lib.filter (x: !(builtins.elem (lib.getName x) namesToRemove)) packages;
+
+ libsoup = pkgs.libsoup.override { gnomeSupport = true; };
+ libchamplain = pkgs.libchamplain.override { libsoup = libsoup; };
+ gnome3 = self // { recurseForDerivations = false; };
+
+# 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-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 { };
+
+ 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-initial-setup = callPackage ./core/gnome-initial-setup { };
+
+ 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-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 3.36 support has more bugfixes
+ # https://github.com/elementary/gala/issues/763
+ mutter334 = callPackage ./core/mutter/3.34 { };
+
+ 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;
+ };
+
+ rygel = callPackage ./core/rygel { };
+
+ simple-scan = callPackage ./core/simple-scan { };
+
+ sushi = callPackage ./core/sushi { };
+
+ totem = callPackage ./core/totem { };
+
+ yelp = callPackage ./core/yelp { };
+
+ yelp-xsl = callPackage ./core/yelp-xsl { };
+
+ 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 { };
+
+ 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 { };
+
+ 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-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 libpeas libgee geocode-glib libgweather librest libzapojit libmediaart gfbgraph gexiv2 folks totem-pl-parser gcr gsound libgnomekbd vte vte_290 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 "gnome3.corePackages is removed since 2019-08-25: please use `services.gnome3.core-shell.enable`";
+ optionalPackages = throw "gnome3.optionalPackages is removed since 2019-08-25: please use `services.gnome3.core-utilities.enable`";
+ gamesPackages = throw "gnome3.gamesPackages is removed since 2019-08-25: please use `services.gnome3.games.enable`";
+
+ nautilus-sendto = throw "nautilus-sendto is removed since 2019-09-17: abandoned upstream";
+
+ inherit (pkgs) vala; # added 2019-10-10
+
+ inherit (pkgs) gnome-user-docs; # added 2019-11-20
+
+ inherit (pkgs) gegl_0_4; # added 2019-10-31
+
+ inherit (pkgs) gjs; # added 2019-01-05
+
+ inherit (pkgs) yelp-tools; # added 2019-11-20
+
+ inherit (pkgs) dconf; # added 2019-11-30
+
+ inherit (pkgs) networkmanagerapplet; # added 2019-12-12
+
+ inherit (pkgs) glade; # added 2020-05-15
+
+ vino = throw "vino is deprecated, use gnome-remote-desktop instead."; # added 2020-03-13
+
+ gnome-screensaver = throw "gnome-screensaver is deprecated. If you are using GNOME Flashback, it now has a built-in lock screen. If you are using it elsewhere, you can try xscreenlock or other alternatives."; # added 2020-03-19
+
+ maintainers = lib.teams.gnome.members;
+
+ mutter328 = throw "Removed as Pantheon is upgraded to mutter334.";
+})
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
new file mode 100644
index 000000000000..efd36d4d4aff
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, gjs, flex, bison, libxml2, intltool,
+ gdl, libgda, gtksourceview, gsettings-desktop-schemas,
+ itstool, python3, ncurses, makeWrapper }:
+
+stdenv.mkDerivation rec {
+ pname = "anjuta";
+ version = "3.34.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/anjuta/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "13ql7axw6zz387s7pa1m7wmh7qps3x7fk53h9832vq1yxlq33aa2";
+ };
+
+ 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 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
new file mode 100644
index 000000000000..11bad7b89d1d
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gnome3
+, gtk3
+, wrapGAppsHook
+, glib
+, amtk
+, appstream-glib
+, gobject-introspection
+, python3
+, webkitgtk
+, gettext
+, itstool
+, gsettings-desktop-schemas
+, shared-mime-info
+}:
+
+stdenv.mkDerivation rec {
+ pname = "devhelp";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/devhelp/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0phcjdxnwgg0a0z9kyidp977jy365pny6bh2qhdyzcpvkqqq8nlb";
+ };
+
+ 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
+ '';
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # Fix pages being blank
+ # https://gitlab.gnome.org/GNOME/devhelp/issues/14
+ --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+ )
+ '';
+
+ 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.gpl3Plus;
+ maintainers = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
new file mode 100644
index 000000000000..3a53e592b5fc
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ license = licenses.fdl12;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix
new file mode 100644
index 000000000000..0638241df53b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/appindicator/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-appindicator";
+ version = "34";
+
+ src = fetchFromGitHub {
+ owner = "Ubuntu";
+ repo = "gnome-shell-extension-appindicator";
+ rev = "v${version}";
+ sha256 = "0p9sk8cv2z242d5783gx2m4l1x9vg5fy1a7yr1wcfshvajlrj23m";
+ };
+
+ # 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 = ''
+ runHook preInstall
+ 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}
+ runHook postInstall
+ '';
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix
new file mode 100644
index 000000000000..336820b7938e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitLab, glib, gettext, substituteAll, gnome-menus }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-arc-menu";
+ version = "47";
+
+ src = fetchFromGitLab {
+ owner = "arcmenu-team";
+ repo = "Arc-Menu";
+ rev = "v${version}-Stable";
+ sha256 = "1hhjxdm1sm9pddhkkxx532hqqiv9ghvqgn9xszg1jwhj29380fv6";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix_gmenu.patch;
+ gmenu_path = "${gnome-menus}/lib/girepository-1.0";
+ })
+ ];
+
+ buildInputs = [
+ glib gettext
+ ];
+
+ makeFlags = [ "INSTALLBASE=${placeholder "out"}/share/gnome-shell/extensions" ];
+
+ uuid = "arc-menu@linxgem33.com";
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch
new file mode 100644
index 000000000000..5d8584f52a6a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/arc-menu/fix_gmenu.patch
@@ -0,0 +1,11 @@
+--- a/extension.js
++++ b/extension.js
+@@ -23,6 +23,8 @@
+
+ const Me = imports.misc.extensionUtils.getCurrentExtension();
+
++imports.gi.GIRepository.Repository.prepend_search_path('@gmenu_path@');
++
+ const {GLib, Gio, St} = imports.gi;
+ const Constants = Me.imports.constants;
+ const Controller = Me.imports.controller;
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix
new file mode 100644
index 000000000000..c6518201da01
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/battery-status/default.nix
@@ -0,0 +1,30 @@
+{ 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 = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions/
+ runHook postInstall
+ '';
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix
new file mode 100644
index 000000000000..770c32f21e79
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/caffeine/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, glib, gettext, bash, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-caffeine-unstable";
+ version = "2020-03-13";
+
+ src = fetchFromGitHub {
+ owner = "eonpatapon";
+ repo = "gnome-shell-extension-caffeine";
+ rev = "f25fa5cd586271f080c2304d0ad1273b55e864f5";
+ sha256 = "12a76g1ydw677pjnj00r3vw31k4xybc63ynqzx3s4g0wi6lipng7";
+ };
+
+ uuid = "caffeine@patapon.info";
+
+ nativeBuildInputs = [
+ glib gettext
+ ];
+
+ buildPhase = ''
+ runHook preBuild
+ ${bash}/bin/bash ./update-locale.sh
+ glib-compile-schemas --strict --targetdir=caffeine@patapon.info/schemas/ caffeine@patapon.info/schemas
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix
new file mode 100644
index 000000000000..5308d4bee5ac
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/chrome-gnome-shell/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchurl
+, cmake
+, ninja
+, jq
+, python3
+, gnome3
+, wrapGAppsHook
+, gobject-introspection
+}:
+
+let
+ inherit (python3.pkgs) python pygobject3 requests;
+in
+stdenv.mkDerivation rec {
+ pname = "chrome-gnome-shell";
+ version = "10.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/chrome-gnome-shell/${version}/${pname}-${version}.tar.xz";
+ sha256 = "0f54xyamm383ypbh0ndkza0pif6ljddg2f947p265fkqj3p4zban";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ ninja
+ jq
+ wrapGAppsHook
+ gobject-introspection # for setup-hook
+ ];
+
+ buildInputs = [
+ gnome3.gnome-shell
+ python
+ pygobject3
+ requests
+ gobject-introspection # for Gio typelib
+ ];
+
+ cmakeFlags = [
+ "-DBUILD_EXTENSION=OFF"
+ ];
+
+ wrapPrefixVariables = [
+ "PYTHONPATH"
+ ];
+
+ # cmake setup hook changes /etc/opt into /var/empty
+ dontFixCmake = true;
+
+ preConfigure = ''
+ substituteInPlace CMakeLists.txt --replace "/etc" "$out/etc"
+ '';
+
+ passthru = {
+ updateScript = gnome3.updateScript {
+ packageName = "chrome-gnome-shell";
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell integration for Chrome";
+ homepage = "https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome";
+ longDescription = ''
+ To use the integration, install the <link xlink:href="https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome/Installation">browser extension</link>, and then set <option>services.gnome3.chrome-gnome-shell.enable</option> to <literal>true</literal>.
+ '';
+ license = licenses.gpl3;
+ maintainers = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix
new file mode 100644
index 000000000000..3e6903c56423
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/clipboard-indicator/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-clipboard-indicator";
+ version = "34";
+
+ src = fetchFromGitHub {
+ owner = "Tudmotu";
+ repo = "gnome-shell-extension-clipboard-indicator";
+ rev = "v${version}";
+ sha256 = "0i00psc1ky70zljd14jzr627y7nd8xwnwrh4xpajl1f6djabh12s";
+ };
+
+ uuid = "clipboard-indicator@tudmotu.com";
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r * $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix
new file mode 100644
index 000000000000..59d9319eb54a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-dock/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, fetchFromGitHub
+, glib
+, gettext
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-dash-to-dock";
+ version = "69";
+
+ src = fetchFromGitHub {
+ owner = "micheleg";
+ repo = "dash-to-dock";
+ rev = "extensions.gnome.org-v" + version;
+ hash = "sha256-YuLtC7E8dK57JSuFdbDQe5Ml+KQfl9qSdrHdVhFaNiE=";
+ };
+
+ nativeBuildInputs = [
+ glib
+ gettext
+ ];
+
+ makeFlags = [
+ "INSTALLBASE=${placeholder "out"}/share/gnome-shell/extensions"
+ ];
+
+ uuid = "dash-to-dock@micxgx.gmail.com";
+
+ meta = with stdenv.lib; {
+ description = "A dock for the Gnome Shell";
+ homepage = "https://micheleg.github.io/dash-to-dock/";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ eperuffo jtojnar ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix
new file mode 100644
index 000000000000..8a0314cd8b4e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/dash-to-panel/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-dash-to-panel";
+ version = "39";
+
+ src = fetchFromGitHub {
+ owner = "home-sweet-gnome";
+ repo = "dash-to-panel";
+ rev = "v${version}";
+ sha256 = "0r7kbmrizl9ilqy7gzzvjwxcv8xpp13n5n0a8s84blg97cih0hw2";
+ };
+
+ buildInputs = [
+ glib gettext
+ ];
+
+ makeFlags = [ "INSTALLBASE=$(out)/share/gnome-shell/extensions" ];
+
+ uuid = "dash-to-panel@jderose9.github.com";
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix
new file mode 100644
index 000000000000..5e6f7b89e1d9
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/draw-on-your-screen/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchgit, gettext, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-draw-on-your-screen";
+ version = "6";
+
+ src = fetchgit {
+ url = "https://framagit.org/abakkk/DrawOnYourScreen/";
+ rev = "v${version}";
+ sha256 = "05i20ii8lv6mg56rz8lng80dx35l6g45j8wr7jgbp591hg0spj1w";
+ };
+
+ uuid = "drawOnYourScreen@abakkk.framagit.org";
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r . $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A drawing extension for GNOME Shell";
+ license = licenses.gpl2Plus;
+ maintainers = with maintainers; [ ericdallo ];
+ platforms = gnome3.gnome-shell.meta.platforms;
+ homepage = "https://framagit.org/abakkk/DrawOnYourScreen";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix
new file mode 100644
index 000000000000..3c6d181178b4
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, substituteAll, gjs, vte, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-drop-down-terminal";
+ version = "unstable-2020-03-25";
+
+ src = fetchFromGitHub {
+ owner = "zzrough";
+ repo = "gs-extensions-drop-down-terminal";
+ rev = "a59669afdb395b3315619f62c1f740f8b2f0690d";
+ sha256 = "0igfxgrjdqq6z6xg4rsawxn261pk25g5dw2pm3bhwz5sqsy4bq3i";
+ };
+
+ uuid = "drop-down-terminal@gs-extensions.zzrough.org";
+
+ patches = [
+ (substituteAll {
+ src = ./fix_vte_and_gjs.patch;
+ inherit gjs vte;
+ })
+ ];
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions/
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Configurable drop down terminal shell";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ ericdallo ];
+ homepage = "https://github.com/zzrough/gs-extensions-drop-down-terminal";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch
new file mode 100644
index 000000000000..3544c91ee895
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/drop-down-terminal/fix_vte_and_gjs.patch
@@ -0,0 +1,32 @@
+--- a/drop-down-terminal@gs-extensions.zzrough.org/extension.js
++++ b/drop-down-terminal@gs-extensions.zzrough.org/extension.js
+@@ -15,6 +15,8 @@
+
+ // Author: Stéphane Démurget <stephane.demurget@free.fr>
+
++imports.gi.GIRepository.Repository.prepend_search_path('@vte@/lib/girepository-1.0')
++
+ const Lang = imports.lang;
+ const Gettext = imports.gettext.domain("drop-down-terminal");
+ const Mainloop = imports.mainloop;
+@@ -653,7 +655,7 @@ const DropDownTerminalExtension = new Lang.Class({
+ this._killingChild = false;
+
+ // finds the forking arguments
+- let args = ["gjs", GLib.build_filenamev([Me.path, "terminal.js"]), Me.path];
++ let args = ["@gjs@/bin/gjs", GLib.build_filenamev([Me.path, "terminal.js"]), Me.path];
+
+ // forks the process
+ debug("forking '" + args.join(" ") + "'");
+--- a/drop-down-terminal@gs-extensions.zzrough.org/terminal.js
++++ b/drop-down-terminal@gs-extensions.zzrough.org/terminal.js
+@@ -14,6 +14,9 @@
+ // along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ // Author: Stéphane Démurget <stephane.demurget@free.fr>
++
++imports.gi.GIRepository.Repository.prepend_search_path('@vte@/lib/girepository-1.0')
++
+ const Lang = imports.lang;
+
+ const Pango = imports.gi.Pango;
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/emoji-selector/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/emoji-selector/default.nix
new file mode 100644
index 000000000000..c4db4702193a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/emoji-selector/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, glib, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-emoji-selector";
+ version = "19";
+
+ src = fetchFromGitHub {
+ owner = "maoschanz";
+ repo = "emoji-selector-for-gnome";
+ rev = version;
+ sha256 = "0x60pg5nl5d73av494dg29hyfml7fbf2d03wm053vx1q8a3pxbyb";
+ };
+
+ uuid = "emoji-selector@maestroschan.fr";
+
+ nativeBuildInputs = [ glib ];
+
+ buildPhase = ''
+ runHook preBuild
+ glib-compile-schemas ./${uuid}/schemas
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description =
+ "GNOME Shell extension providing a searchable popup menu displaying most emojis";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ rawkode ];
+ homepage = "https://github.com/maoschanz/emoji-selector-for-gnome";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/freon/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/freon/default.nix
new file mode 100644
index 000000000000..5224e4863ae2
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/freon/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-freon";
+ version = "40";
+
+ uuid = "freon@UshakovVasilii_Github.yahoo.com";
+
+ src = fetchFromGitHub {
+ owner = "UshakovVasilii";
+ repo = "gnome-shell-extension-freon";
+ rev = "EGO-${version}";
+ sha256 = "0ak6f5dds9kk3kqww681gs3l1mj3vf22icrvb5m257s299rq8yzl";
+ };
+
+ nativeBuildInputs = [ glib ];
+
+ buildPhase = ''
+ runHook preBuild
+ glib-compile-schemas --strict --targetdir=${uuid}/schemas ${uuid}/schemas
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell extension for displaying CPU, GPU, disk temperatures, voltage and fan RPM in the top panel";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ justinas ];
+ homepage = "https://github.com/UshakovVasilii/gnome-shell-extension-freon";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
new file mode 100644
index 000000000000..98827fd3f6a2
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
@@ -0,0 +1,85 @@
+{ stdenv, fetchFromGitHub, substituteAll, python3, openssl, gsound
+, meson, ninja, libxml2, pkgconfig, gobject-introspection, wrapGAppsHook
+, glib, gtk3, at-spi2-core, upower, openssh, gnome3, gjs }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-gsconnect";
+ version = "41";
+
+ src = fetchFromGitHub {
+ owner = "andyholmes";
+ repo = "gnome-shell-extension-gsconnect";
+ rev = "v${version}";
+ sha256 = "0lcj7k16jki54bsyh01j4ss4hhfddnahcw02zlmlkl637qdv1b5j";
+ };
+
+ patches = [
+ # Make typelibs available in the extension
+ (substituteAll {
+ src = ./fix-paths.patch;
+ gapplication = "${glib.bin}/bin/gapplication";
+ })
+ ];
+
+ nativeBuildInputs = [
+ meson ninja pkgconfig
+ gobject-introspection # for locating typelibs
+ wrapGAppsHook # for wrapping daemons
+ libxml2 # xmllint
+ ];
+
+ buildInputs = [
+ glib # libgobject
+ gtk3
+ at-spi2-core # atspi
+ gnome3.nautilus # TODO: this contaminates the package with nautilus and gnome-autoar typelibs but it is only needed for the extension
+ gnome3.nautilus-python
+ gsound
+ upower
+ gnome3.caribou
+ gjs # for running daemon
+ gnome3.evolution-data-server # for libebook-contacts typelib
+ ];
+
+ mesonFlags = [
+ "-Dgnome_shell_libdir=${gnome3.gnome-shell}/lib"
+ "-Dgsettings_schemadir=${glib.makeSchemaPath (placeholder "out") "${pname}-${version}"}"
+ "-Dchrome_nmhdir=${placeholder "out"}/etc/opt/chrome/native-messaging-hosts"
+ "-Dchromium_nmhdir=${placeholder "out"}/etc/chromium/native-messaging-hosts"
+ "-Dopenssl_path=${openssl}/bin/openssl"
+ "-Dsshadd_path=${openssh}/bin/ssh-add"
+ "-Dsshkeygen_path=${openssh}/bin/ssh-keygen"
+ "-Dsession_bus_services_dir=${placeholder "out"}/share/dbus-1/services"
+ "-Dpost_install=true"
+ ];
+
+ postPatch = ''
+ patchShebangs meson/nmh.sh
+ patchShebangs meson/post-install.sh
+
+ # TODO: do not include every typelib everywhere
+ # for example, we definitely do not need nautilus
+ for file in src/extension.js src/prefs.js; do
+ substituteInPlace "$file" \
+ --subst-var-by typelibPath "$GI_TYPELIB_PATH"
+ done
+ '';
+
+ postFixup = ''
+ # Let’s wrap the daemons
+ for file in $out/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/{daemon,nativeMessagingHost}.js; do
+ echo "Wrapping program $file"
+ wrapGApp "$file"
+ done
+ '';
+
+ uuid = "gsconnect@andyholmes.github.io";
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch
new file mode 100644
index 000000000000..58c02a92eb2e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/gsconnect/fix-paths.patch
@@ -0,0 +1,37 @@
+diff --git i/data/org.gnome.Shell.Extensions.GSConnect.desktop.in w/data/org.gnome.Shell.Extensions.GSConnect.desktop.in
+index ffb23342..b405c73b 100644
+--- i/data/org.gnome.Shell.Extensions.GSConnect.desktop.in
++++ w/data/org.gnome.Shell.Extensions.GSConnect.desktop.in
+@@ -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
+diff --git i/src/extension.js w/src/extension.js
+index 5f32aa68..872c0c61 100644
+--- i/src/extension.js
++++ w/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 GObject = imports.gi.GObject;
+ const Gtk = imports.gi.Gtk;
+diff --git i/src/prefs.js w/src/prefs.js
+index 07e93099..1c166710 100644
+--- i/src/prefs.js
++++ w/src/prefs.js
+@@ -1,5 +1,7 @@
+ 'use strict';
+
++'@typelibPath@'.split(':').forEach(path => imports.gi.GIRepository.Repository.prepend_search_path(path));
++
+ const Gio = imports.gi.Gio;
+ const GLib = imports.gi.GLib;
+ const Gtk = imports.gi.Gtk;
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix
new file mode 100644
index 000000000000..844c8ad84d79
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/icon-hider/default.nix
@@ -0,0 +1,31 @@
+{ 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 = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Icon Hider is a GNOME Shell extension for managing status area items";
+ license = licenses.bsd3;
+ maintainers = with maintainers; [ jonafato ];
+ platforms = gnome3.gnome-shell.meta.platforms;
+ homepage = "https://github.com/ikalnytskyi/gnome-shell-extension-icon-hider";
+ broken = versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesn't support 3.34
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix
new file mode 100644
index 000000000000..073a4301cc5e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/impatience/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-impatience";
+ version = "unstable-2019-09-23";
+
+ src = fetchFromGitHub {
+ owner = "timbertson";
+ repo = "gnome-shell-impatience";
+ rev = "43e4e0a1e0eeb334a2da5224ce3ab4fdddf4f1b2";
+ sha256 = "0kvdhlz41fjyqdgcfw6mrr9nali6wg2qwji3dvykzfi0aypljzpx";
+ };
+
+ buildInputs = [
+ glib
+ ];
+
+ buildPhase = ''
+ runHook preBuild
+ make schemas
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r impatience $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ uuid = "impatience@gfxmonk.net";
+
+ meta = with stdenv.lib; {
+ description = "Speed up builtin gnome-shell animations";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ timbertson tiramiseb ];
+ homepage = "http://gfxmonk.net/dist/0install/gnome-shell-impatience.xml";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/material-shell/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/material-shell/default.nix
new file mode 100644
index 000000000000..36de0e0a66a0
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/material-shell/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchFromGitHub, gnome3, fetchpatch }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-material-shell";
+ version = "7";
+
+ src = fetchFromGitHub {
+ owner = "material-shell";
+ repo = "material-shell";
+ rev = version;
+ sha256 = "076cv1l5qr5x71przjwvbzx0m91n4z0byc2gc3r48l8vsr2d0hwf";
+ };
+
+ patches = [
+ # Fix for https://github.com/material-shell/material-shell/issues/284
+ # (Remove this patch when updating to version >= 8)
+ (fetchpatch {
+ url = "https://github.com/material-shell/material-shell/commit/fc27489a1ec503a4a5c7cb2f4e1eefa84a7ea2f1.patch";
+ sha256 = "0x2skg955c4jqgwbkfhk7plm8bh1qnk66cdds796bzkp3hb5syw8";
+ })
+ ];
+
+ # 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;
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r * $out/share/gnome-shell/extensions/${uuid}/
+ runHook postInstall
+ '';
+
+ uuid = "material-shell@papyelgringo";
+
+ meta = with stdenv.lib; {
+ description = "A modern desktop interface for Linux";
+ license = licenses.mit;
+ maintainers = with maintainers; [ benley ];
+ homepage = "https://github.com/material-shell/material-shell";
+ platforms = gnome3.gnome-shell.meta.platforms;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix
new file mode 100644
index 000000000000..4bf4b7508176
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/mpris-indicator-button/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, fetchFromGitHub
+, nix-update-script
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-mpris-indicator-button-unstable";
+ version = "2020-03-21";
+
+ src = fetchFromGitHub {
+ owner = "JasonLG1979";
+ repo = "gnome-shell-extension-mpris-indicator-button";
+ rev = "de54160e7d905b8c48c0fe30a437f7c51efc1aa3";
+ sha256 = "0n5qlx51fxjq1nn10zhdwfy905j20sv7pwh2jc6fns757ac4pwwk";
+ };
+
+ uuid = "mprisindicatorbutton@JasonLG1979.github.io";
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ passthru = {
+ updateScript = nix-update-script {
+ attrPath = "gnomeExtensions.${pname}";
+ };
+ };
+
+
+ meta = with stdenv.lib; {
+ description = "A simple MPRIS indicator button for GNOME Shell";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ worldofpeace ];
+ platforms = gnome3.gnome-shell.meta.platforms;
+ homepage = "https://github.com/JasonLG1979/gnome-shell-extension-mpris-indicator-button";
+ broken = versionOlder gnome3.gnome-shell.version "3.34";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix
new file mode 100644
index 000000000000..f170a2fb1907
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitLab, glib, gnome3, unzip }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-night-theme-switcher";
+ version = "36";
+
+ src = fetchFromGitLab {
+ owner = "rmnvgr";
+ repo = "nightthemeswitcher-gnome-shell-extension";
+ rev = "v${version}";
+ sha256 = "1c88979qprwb5lj0v7va017w7rdr89a648anhw4k5q135jwyskpz";
+ };
+
+ buildInputs = [ glib gnome3.gnome-shell unzip ];
+
+ uuid = "nightthemeswitcher@romainvigier.fr";
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/
+ unzip build/${uuid}.shell-extension.zip -d $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Automatically change the GTK theme to dark variant when Night Light activates";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ jonafato ];
+ homepage = "https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension/";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix
new file mode 100644
index 000000000000..25ef7ddf8279
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/default.nix
@@ -0,0 +1,38 @@
+{ 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" ];
+
+ uuid = "no-title-bar@franglais125.gmail.com";
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/no-title-bar/fix-paths.patch
new file mode 100644
index 000000000000..9a53d63860da
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix
new file mode 100644
index 000000000000..f5ffac9b2f34
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/paperwm/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-paperwm";
+ version = "36.0";
+
+ src = fetchFromGitHub {
+ owner = "paperwm";
+ repo = "PaperWM";
+ rev = version;
+ sha256 = "1ssnabwxrns36c61ppspjkr9i3qifv08pf2jpwl7cjv3pvyn4kly";
+ };
+
+ uuid = "paperwm@hedning:matrix.org";
+
+ dontBuild = true;
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r . $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Tiled scrollable window management for Gnome Shell";
+ homepage = "https://github.com/paperwm/PaperWM";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ hedning zowoq ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix
new file mode 100644
index 000000000000..dfcfd63b59db
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/pidgin-im-integration/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, glib, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-pidgin-im-integration";
+ version = "32";
+
+ src = fetchFromGitHub {
+ owner = "muffinmad";
+ repo = "pidgin-im-gnome-shell-extension";
+ rev = "v${version}";
+ sha256 = "1jyg8r0s1v83sgg6y0jbsj2v37mglh8rvd8vi27fxnjq9xmg8kpc";
+ };
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ installPhase = ''
+ runHook preInstall
+ 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"
+ runHook postInstall
+ '';
+
+ uuid = "pidgin@muffinmad";
+
+ meta = with stdenv.lib; {
+ homepage = "https://github.com/muffinmad/pidgin-im-gnome-shell-extension";
+ description = "Make Pidgin IM conversations appear in the Gnome Shell message tray";
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ maintainers = with maintainers; [ ];
+ broken = versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesn't support 3.34
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix
new file mode 100644
index 000000000000..6d6a04a386cc
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/remove-dropdown-arrows/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-remove-dropdown-arrows";
+ version = "13";
+
+ src = fetchFromGitHub {
+ owner = "mpdeimos";
+ repo = "gnome-shell-remove-dropdown-arrows";
+ rev = "version/${version}";
+ sha256 = "09b2hnfbqym20pb1sfc8xiz7gs2kbs6b1s7xl8swc8dydhsbambk";
+ };
+
+ # This package has a Makefile, but it's used for publishing and linting, not
+ # for building. Disable the build phase so installing doesn't attempt to
+ # publish the extension.
+ dontBuild = true;
+
+ uuid = "remove-dropdown-arrows@mpdeimos.com";
+ installPhase = ''
+ runHook preInstall
+ 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}
+ runHook postInstall
+ '';
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix
new file mode 100644
index 000000000000..870ac448bb4e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, substituteAll
+, fetchFromGitHub
+, libpulseaudio
+, python3
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-sound-output-device-chooser";
+ version = "28";
+
+ src = fetchFromGitHub {
+ owner = "kgshank";
+ repo = "gse-sound-output-device-chooser";
+ rev = version;
+ sha256 = "1vmf8mgb52x7my3sidaw8kh26d5niadn18bgrl6bjcakmj5x8q16";
+ };
+
+ patches = [
+ (substituteAll {
+ src = ./fix-paths.patch;
+ libpulse = "${libpulseaudio}/lib/libpulse.so";
+ python = python3.interpreter;
+ })
+ ];
+
+ dontBuild = true;
+
+ uuid = "sound-output-device-chooser@kgshank.net";
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch
new file mode 100644
index 000000000000..a0a6551fcf81
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/sound-output-device-chooser/fix-paths.patch
@@ -0,0 +1,22 @@
+--- a/sound-output-device-chooser@kgshank.net/convenience.js
++++ b/sound-output-device-chooser@kgshank.net/convenience.js
+@@ -111,7 +111,7 @@ function refreshCards() {
+ log("New logic");
+ let pyLocation = Me.dir.get_child('utils/pa_helper.py').get_path();
+ try {
+- let [result, out, err, exit_code] = GLib.spawn_command_line_sync('python ' + pyLocation);
++ let [result, out, err, exit_code] = GLib.spawn_command_line_sync('@python@ ' + pyLocation);
+ // log("result" + result +" out"+out + " exit_code" + exit_code + "
+ // err" +err);
+ if(result && !exit_code) {
+--- a/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
++++ b/sound-output-device-chooser@kgshank.net/utils/libpulse_introspect.py
+@@ -86,7 +86,7 @@ else:
+
+ _libraries = {}
+
+-libpulse_library_name = find_library('pulse')
++libpulse_library_name = '@libpulse@'
+ if libpulse_library_name is None:
+ raise Exception('No libpulse.so library found!')
+
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix
new file mode 100644
index 000000000000..1b1da50b7fa7
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, substituteAll, fetchpatch, fetchFromGitHub, glib, glib-networking, libgtop, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-system-monitor";
+ version = "2020-04-27-unstable";
+
+ src = fetchFromGitHub {
+ owner = "paradoxxxzero";
+ repo = "gnome-shell-system-monitor-applet";
+ rev = "7f8f0a7b255473941f14d1dcaa35ebf39d3bccd0";
+ sha256 = "tUUvBY0UEUE+T79zVZEAICpKoriFZuuZzi9ArdHdXks=";
+ };
+
+ buildInputs = [
+ glib
+ glib-networking
+ libgtop
+ ];
+
+ patches = [
+ (substituteAll {
+ src = ./paths_and_nonexisting_dirs.patch;
+ clutter_path = gnome3.mutter.libdir; # this should not be used in settings but 🤷‍♀️
+ gtop_path = "${libgtop}/lib/girepository-1.0";
+ glib_net_path = "${glib-networking}/lib/girepository-1.0";
+ })
+ ];
+
+ buildPhase = ''
+ runHook preBuild
+ glib-compile-schemas --targetdir=${uuid}/schemas ${uuid}/schemas
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ uuid = "system-monitor@paradoxxx.zero.gmail.com";
+
+ meta = with stdenv.lib; {
+ description = "Display system informations in gnome shell status bar";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ tiramiseb ];
+ homepage = "https://github.com/paradoxxxzero/gnome-shell-system-monitor-applet";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch
new file mode 100644
index 000000000000..280af965af3f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/system-monitor/paths_and_nonexisting_dirs.patch
@@ -0,0 +1,33 @@
+diff --git a/system-monitor@paradoxxx.zero.gmail.com/extension.js b/system-monitor@paradoxxx.zero.gmail.com/extension.js
+index de5e3d7..2d7824d 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 */
+
+@@ -407,7 +410,7 @@ const smMountsMonitor = class SystemMonitor_smMountsMonitor {
+ this.connected = false;
+
+ 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((sMount) => {
+ if (this.is_sys_mount(sMount + '/')) {
+diff --git a/system-monitor@paradoxxx.zero.gmail.com/prefs.js b/system-monitor@paradoxxx.zero.gmail.com/prefs.js
+index 81d667c..0da4809 100644
+--- a/system-monitor@paradoxxx.zero.gmail.com/prefs.js
++++ b/system-monitor@paradoxxx.zero.gmail.com/prefs.js
+@@ -1,3 +1,5 @@
++imports.gi.GIRepository.Repository.prepend_search_path('@clutter_path@');
++
+ const Gtk = imports.gi.Gtk;
+ const Gio = imports.gi.Gio;
+ const Gdk = imports.gi.Gdk;
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix
new file mode 100644
index 000000000000..a6f45e3b574c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, substituteAll, fetchFromGitHub, taskwarrior, gettext, runtimeShell, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-taskwhisperer";
+ version = "16";
+
+ src = fetchFromGitHub {
+ owner = "cinatic";
+ repo = "taskwhisperer";
+ rev = "v${version}";
+ sha256 = "05w2dfpr5vrydb7ij4nd2gb7c31nxix3j48rb798r4jzl1rakyah";
+ };
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/taskwhisperer/fix-paths.patch
new file mode 100644
index 000000000000..2ea54f4b0897
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix
new file mode 100644
index 000000000000..57f5a9377baa
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/tilingnome/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchFromGitHub, glib, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-tilingnome-unstable";
+ version = "unstable-2019-09-19";
+
+ src = fetchFromGitHub {
+ owner = "rliang";
+ repo = "gnome-shell-extension-tilingnome";
+ rev = "f401c20c9721d85e6b3e30d1e822a200db370407";
+ sha256 = "1hq9g9bxqpzqrdj9zm0irld8r6q4w1m4b00jya7wsny8rzb1s0y2";
+ };
+
+ nativeBuildInputs = [ glib ];
+
+ buildPhase = ''
+ runHook preBuild
+ glib-compile-schemas .
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r * $out/share/gnome-shell/extensions/${uuid}/
+ runHook postInstall
+ '';
+
+ uuid = "tilingnome@rliang.github.com";
+
+ meta = with stdenv.lib; {
+ description = "Tiling window management for GNOME Shell";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ benley ];
+ homepage = "https://github.com/rliang/gnome-shell-extension-tilingnome";
+ platforms = gnome3.gnome-shell.meta.platforms;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix
new file mode 100644
index 000000000000..f1c53eda6bdf
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/timepp/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-timepp";
+ version = "unstable-2020-03-15";
+
+ src = fetchFromGitHub {
+ owner = "zagortenay333";
+ repo = "timepp__gnome";
+ rev = "34ae477a51267cc1e85992a80cf85a1a7b7005c1";
+ sha256 = "1v0xbrp0x5dwizscxh7h984pax4n92bj8iyw3qvjk27ynpxq8ag1";
+ };
+
+ uuid = "timepp@zagortenay333";
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/${uuid}
+ cp -r . $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix
new file mode 100644
index 000000000000..860a77d2856b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/topicons-plus/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, glib, gnome3, gettext }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-topicons-plus";
+ version = "22";
+
+ src = fetchFromGitHub {
+ owner = "phocean";
+ repo = "TopIcons-plus";
+ rev = "v${version}";
+ sha256 = "196s1gdir52gbc444pzrb5l7gn5xr5vqk5ajqaiqryqlmp3i8vil";
+ };
+
+ buildInputs = [ glib ];
+
+ nativeBuildInputs = [ gettext ];
+
+ makeFlags = [ "INSTALL_PATH=$(out)/share/gnome-shell/extensions" ];
+
+ uuid = "TopIcons@phocean.net";
+
+ meta = with stdenv.lib; {
+ description = "Brings all icons back to the top panel, so that it's easier to keep track of apps running in the backround";
+ license = licenses.gpl2;
+ maintainers = with maintainers; [ eperuffo ];
+ homepage = "https://github.com/phocean/TopIcons-plus";
+ # Unmaintained and no longer working with GNOME Shell 3.34+
+ broken = stdenv.lib.versionAtLeast gnome3.gnome-shell.version "3.32";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix
new file mode 100644
index 000000000000..9c5d5266ce27
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-corner-preview/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, gnome3 }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-window-corner-preview";
+ version = "unstable-2019-04-03";
+
+ src = fetchFromGitHub {
+ owner = "medenagan";
+ repo = "window-corner-preview";
+ rev = "a95bb1389d94474efab7509aac592fb58fff6006";
+ sha256 = "03v18j9l0fb64xrg3swf1vcgl0kpgwjlp8ddn068bpvghrsvgfah";
+ };
+
+ dontBuild = true;
+
+ uuid = "window-corner-preview@fabiomereu.it";
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell extension showing a video preview on the corner of the screen";
+ license = licenses.mit;
+ maintainers = with maintainers; [ jtojnar ];
+ homepage = "https://github.com/medenagan/window-corner-preview";
+ broken = stdenv.lib.versionAtLeast gnome3.gnome-shell.version "3.32"; # Doesn't support 3.34
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-is-ready-remover/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-is-ready-remover/default.nix
new file mode 100644
index 000000000000..45ac75baf8bf
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/window-is-ready-remover/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-window-is-ready-remover";
+ version = "1.02";
+
+ src = fetchFromGitHub {
+ owner = "nunofarruca";
+ repo = "WindowIsReady_Remover";
+ rev = "v${version}";
+ sha256 = "1xaf95gn0if44avvkjxyf8fl29y28idn9shnrks0m9k67jcwv8ns";
+ };
+
+ uuid = "windowIsReady_Remover@nunofarruca@gmail.com";
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions/
+ cp -r ${uuid} $out/share/gnome-shell/extensions/${uuid}
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "GNOME Shell extension removing window is ready notification";
+ homepage = "https://github.com/nunofarruca/WindowIsReady_Remover";
+ license = licenses.asl20;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix
new file mode 100644
index 000000000000..4dcb4a8941cd
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, findutils, glib }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-shell-extension-workspace-matrix";
+ version = "4.0.1";
+
+ src = fetchFromGitHub {
+ owner = "mzur";
+ repo = "gnome-shell-wsmatrix";
+ rev = "v${version}";
+ sha256 = "1xx2h8k981657lws614f7x4mqjk900xq9907j2h5jdhbbic5ppy6";
+ };
+
+ uuid = "wsmatrix@martin.zurowietz.de";
+
+ nativeBuildInputs = [
+ findutils
+ glib
+ ];
+
+ buildFlags = "schemas";
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/share/gnome-shell/extensions
+ cp -r ${uuid} $out/share/gnome-shell/extensions
+ runHook postInstall
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Arrange workspaces in a two dimensional grid with workspace thumbnails";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ chkno ];
+ homepage = "https://github.com/mzur/gnome-shell-wsmatrix";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py
new file mode 100644
index 000000000000..ad80af24bcb8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/find-latest-version.py
@@ -0,0 +1,74 @@
+import argparse
+import math
+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, upper_bound):
+ if not upper_bound:
+ upper_bound = [math.inf, math.inf]
+ else:
+ upper_bound = version_to_list(upper_bound)
+
+ return lambda version: version_predicate(version, selected) and version_to_list(version) < upper_bound
+
+
+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")
+parser.add_argument("--upper-bound", dest="upper-bound", help="Only look for versions older than this one (useful for pinning dependencies).")
+
+
+if __name__ == "__main__":
+ args = parser.parse_args()
+
+ package_name = getattr(args, "package-name")
+ requested_release = getattr(args, "requested-release")
+ upper_bound = getattr(args, "upper-bound")
+ version_predicate = version_policies[getattr(args, "version-policy")]
+ version_policy = make_version_policy(version_predicate, requested_release, upper_bound)
+
+ # The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
+ cache = json.loads(requests.get(f"https://ftp.gnome.org/pub/GNOME/sources/{package_name}/cache.json").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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix
new file mode 100644
index 000000000000..9ea68b02ea87
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/aisleriot/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, fetchFromGitLab
+, pkg-config
+, gnome3
+, itstool
+, gtk3
+, wrapGAppsHook
+, meson
+, librsvg
+, libxml2
+, desktop-file-utils
+, pysolfc
+, guile
+, libcanberra-gtk3
+, ninja
+, appstream-glib
+, yelp-tools
+}:
+
+stdenv.mkDerivation rec {
+ pname = "aisleriot";
+ version = "3.22.11";
+
+ src = fetchFromGitLab {
+ owner = "GNOME";
+ repo = pname;
+ domain = "gitlab.gnome.org";
+ rev = "${version}";
+ sha256 = "1asm0y6485xqsysdg586y3hzz8bhxqwnc82k6vhfnxpxz7l62qa1";
+ };
+
+ nativeBuildInputs = [
+ wrapGAppsHook
+ meson
+ ninja
+ appstream-glib
+ pkg-config
+ itstool
+ libxml2
+ desktop-file-utils
+ yelp-tools
+ ];
+
+ buildInputs = [
+ gtk3
+ librsvg
+ guile
+ libcanberra-gtk3
+ pysolfc
+ ];
+
+ prePatch = ''
+ patchShebangs cards/meson_svgz.sh
+ patchShebangs data/meson_desktopfile.py
+ patchShebangs data/icons/meson_updateiconcache.py
+ patchShebangs src/lib/meson_compileschemas.py
+ '';
+
+ mesonFlags = [
+ "-Dtheme_kde=false"
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl3Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/atomix/default.nix
new file mode 100644
index 000000000000..28cc020b2d80
--- /dev/null
+++ b/infra/libkookie/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.34.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0h909a4mccf160hi0aimyicqhq2b0gk1dmqp7qwf87qghfrw6m00";
+ };
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/five-or-more/default.nix
new file mode 100644
index 000000000000..ca69395eb235
--- /dev/null
+++ b/infra/libkookie/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.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/five-or-more/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "19pf8wzbf3ciqf2k4bj9sddvyhckfd62x86pnqr6s8h4vn9jc6ii";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
new file mode 100644
index 000000000000..3960f233003c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, gettext, meson, gsound, librsvg, itstool, vala
+, python3, ninja, desktop-file-utils }:
+
+stdenv.mkDerivation rec {
+ pname = "four-in-a-row";
+ version = "3.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/four-in-a-row/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1y1ihh72zk0bgyj197dpwgwj1q91dhvp0rasrib8k18sisrdq31h";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig wrapGAppsHook gettext meson itstool vala
+ ninja python3 desktop-file-utils
+ ];
+ buildInputs = [ gtk3 gsound 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
new file mode 100644
index 000000000000..7747676f09e3
--- /dev/null
+++ b/infra/libkookie/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.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-chess/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "165bk8s3nngyqbikggspj4rff5nxxfkfcmgzjb4grmsrgbqwk5di";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
new file mode 100644
index 000000000000..eb6f4b10dbd6
--- /dev/null
+++ b/infra/libkookie/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.36.3";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0fj1hlkqpjdb4hxd0di16ahm5j2r5j218ckyk88pmhjf8whb2g6z";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix
new file mode 100644
index 000000000000..fc706b89f1dc
--- /dev/null
+++ b/infra/libkookie/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.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-mahjongg/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "15xfp2acqdnn0pcwg5d77dpv758jjyclwb042wm12gg07rbg3s6j";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
new file mode 100644
index 000000000000..011b9569fd84
--- /dev/null
+++ b/infra/libkookie/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.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0m2680r94nk61imym4x73j03jwfjd8cxm592m5ybiqdfdw6i723i";
+ };
+
+ # 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
new file mode 100644
index 000000000000..a9757de63938
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, gsound, clutter-gtk, gettext, itstool, vala, python3
+, libxml2, libgee, libgnome-games-support, meson, ninja
+, desktop-file-utils, hicolor-icon-theme}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-nibbles";
+ version = "3.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-nibbles/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "17n6ji6yr521kzxfbfm0yxvrlnw4hlzacbwn0jqmw7xf3pdq35z6";
+ };
+
+ nativeBuildInputs = [
+ meson ninja vala python3
+ pkgconfig wrapGAppsHook gettext itstool libxml2
+ desktop-file-utils hicolor-icon-theme
+ ];
+ buildInputs = [
+ gtk3 librsvg gsound 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
new file mode 100644
index 000000000000..2ba6d4e7044c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, gsound, gettext, itstool, libxml2, libgnome-games-support
+, libgee, meson, ninja, python3, desktop-file-utils, adwaita-icon-theme }:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-robots";
+ version = "3.36.1";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-robots/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0qmdwrl70ccs3blgwmpcf3sg9k8mcvsl1dr1gds4ba3fq9ca8ipb";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-robots"; attrPath = "gnome3.gnome-robots"; };
+ };
+
+ nativeBuildInputs = [
+ pkgconfig meson ninja python3
+ libxml2 wrapGAppsHook gettext itstool desktop-file-utils
+ ];
+ buildInputs = [
+ gtk3 librsvg gsound 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
new file mode 100644
index 000000000000..0a84e1065f3a
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-sudoku/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "17a1r2jk5yygrxil1dycmamxyvyi64mr29mbyfgcx5hm2fylxxwm";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
new file mode 100644
index 000000000000..99bdffe16ade
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, gnome3, gtk3, wrapGAppsHook
+, librsvg, gsound, gettext, itstool, libxml2
+, meson, ninja, vala, python3, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-taquin";
+ version = "3.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-taquin/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0awfssqpswsyla4gn80ifj53biwq34hcadxlknnlm7jpz0z38cp0";
+ };
+
+ 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 gsound
+ 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix
new file mode 100644
index 000000000000..f80012e22bb9
--- /dev/null
+++ b/infra/libkookie/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.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-tetravex/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0amnmd12mpny3vnf946wnphlsnbvjrvkx29sarplm57m1571qdc5";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/hitori/default.nix
new file mode 100644
index 000000000000..8d1c9e3dd65b
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/hitori/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0mq1jv8rbmvksnhbm1d25kcvcfr9lq58qipcacn7wa26xpx7cvs5";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix
new file mode 100644
index 000000000000..0263de1c9b02
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/iagno/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, gnome3, gdk-pixbuf, librsvg, wrapGAppsHook
+, itstool, gsound, libxml2
+, meson, ninja, python3, vala, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "iagno";
+ version = "3.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/iagno/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "1fh2cvyqbz8saf2wij0bz2r9bja2k4gy6fqvbvig4gv0lx66gl29";
+ };
+
+ nativeBuildInputs = [
+ meson ninja python3 vala desktop-file-utils
+ pkgconfig wrapGAppsHook itstool libxml2
+ ];
+ buildInputs = [ gtk3 gnome3.adwaita-icon-theme gdk-pixbuf librsvg gsound ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/lightsoff/default.nix
new file mode 100644
index 000000000000..fd44bbece996
--- /dev/null
+++ b/infra/libkookie/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.36.0";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/lightsoff/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0qvafpciqbqmpan9i8ans3lqs29v02zblz6k0hzj4p3qq4sch3a3";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
new file mode 100644
index 000000000000..a5302fee7abb
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, gnome3, gdk-pixbuf
+, librsvg, gsound, libmanette
+, gettext, itstool, libxml2, clutter, clutter-gtk, wrapGAppsHook
+, meson, ninja, python3, vala, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "quadrapassel";
+ version = "3.36.05";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "04abxmimh5npw8rhz1sfi6wxilgc6i1wka9mlnfwp8v1p1cb00cv";
+ };
+
+ nativeBuildInputs = [
+ meson ninja python3 vala desktop-file-utils
+ pkgconfig gnome3.adwaita-icon-theme
+ libxml2 itstool gettext wrapGAppsHook
+ ];
+ buildInputs = [
+ gtk3 gdk-pixbuf librsvg libmanette
+ gsound clutter libxml2 clutter-gtk
+ ];
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/swell-foop/default.nix
new file mode 100644
index 000000000000..4b12609d3f3d
--- /dev/null
+++ b/infra/libkookie/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.34.1";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1032psxm59nissi268bh3j964m4a0n0ah4dy1pf0ph27j3zvdik1";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/games/tali/default.nix
new file mode 100644
index 000000000000..2fd1d034db3e
--- /dev/null
+++ b/infra/libkookie/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.36.4";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/tali/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "12h6783m4634zzprlk31j0dmvgzrfjklhl0z49fdwcziw5bszr3c";
+ };
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/installer.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/installer.nix
new file mode 100644
index 000000000000..4999e1f3343c
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix
new file mode 100644
index 000000000000..0326e38aba76
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/geary/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, fetchurl, pkgconfig, gtk3, vala, enchant2, wrapGAppsHook, meson, ninja
+, desktop-file-utils, gnome-online-accounts, gsettings-desktop-schemas, adwaita-icon-theme
+, libpeas, libsecret, gmime3, isocodes, libxml2, gettext, fetchpatch
+, sqlite, gcr, json-glib, itstool, libgee, gnome3, webkitgtk, python3
+, xvfb_run, dbus, shared-mime-info, libunwind, folks, glib-networking
+, gobject-introspection, gspell, appstream-glib, libytnef, libhandy }:
+
+stdenv.mkDerivation rec {
+ pname = "geary";
+ version = "3.36.2";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "09l2lbcn3ar3scw6iylmdqi1lhpb408iqs6056d0wzx2l9nkmqis";
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils gettext itstool libxml2 meson ninja
+ pkgconfig vala wrapGAppsHook python3 appstream-glib
+ gobject-introspection
+ ];
+
+ buildInputs = [
+ adwaita-icon-theme enchant2 gcr gmime3 gnome-online-accounts
+ gsettings-desktop-schemas gtk3 isocodes json-glib libpeas
+ libgee libsecret sqlite webkitgtk glib-networking
+ libunwind folks gspell libytnef libhandy
+ ];
+
+ checkInputs = [ xvfb_run dbus ];
+
+ mesonFlags = [
+ "-Dcontractor=true" # install the contractor file (Pantheon specific)
+ ];
+
+ patches = [
+ # Longer timeout for client test.
+ (fetchpatch {
+ url = "https://salsa.debian.org/gnome-team/geary/raw/04be1e058a2e65075dd8cf8843d469ee45a9e09a/debian/patches/Bump-client-test-timeout-to-300s.patch";
+ sha256 = "1zvnq8bgla160531bjdra8hcg15mp8r1j1n53m1xfgm0ssnj5knx";
+ })
+ ];
+
+ # NOTE: Remove `build-auxyaml_to_json.py` when no longer needed, see:
+ # https://gitlab.gnome.org/GNOME/geary/commit/f7f72143e0f00ca5e0e6a798691805c53976ae31#0cc1139e3347f573ae1feee5b73dbc8a8a21fcfa
+ postPatch = ''
+ chmod +x build-aux/post_install.py build-aux/git_version.py
+
+ patchShebangs build-aux/post_install.py build-aux/git_version.py
+
+ chmod +x build-aux/yaml_to_json.py
+ patchShebangs build-aux/yaml_to_json.py
+
+ chmod +x desktop/geary-attach
+ '';
+
+ # FIXME: fix tests
+ doCheck = false;
+
+ 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 = teams.gnome.members;
+ license = licenses.lgpl21Plus;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix
new file mode 100644
index 000000000000..c4849f00d3b9
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gitg/default.nix
@@ -0,0 +1,97 @@
+{ 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
+, 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
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
new file mode 100644
index 000000000000..a33376618c2c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, fetchurl
+, intltool
+, itstool
+, libxml2
+, libxslt
+, pkgconfig
+, gnome-panel
+, gtk3
+, glib
+, libwnck3
+, libgtop
+, libnotify
+, upower
+, wirelesstools
+, linuxPackages
+, adwaita-icon-theme
+, libgweather
+, gucharmap
+, tracker
+, polkit
+, gnome3
+}:
+
+let
+ pname = "gnome-applets";
+ version = "3.36.4";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1cd7y2air9cjznqmnynadbsayvq4dpsi39avnz46vv0bavx1aiwz";
+ };
+
+ nativeBuildInputs = [
+ intltool
+ itstool
+ pkgconfig
+ libxml2
+ libxslt
+ ];
+
+ buildInputs = [
+ gnome-panel
+ gtk3
+ glib
+ libxml2
+ libwnck3
+ libgtop
+ libnotify
+ upower
+ adwaita-icon-theme
+ libgweather
+ gucharmap
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
new file mode 100644
index 000000000000..baa43bdedb3e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, gnome3
+, gtk3
+, glib
+, gobject-introspection
+, libarchive
+, vala
+}:
+
+stdenv.mkDerivation rec {
+ pname = "gnome-autoar";
+ version = "0.2.4";
+
+ outputs = [ "out" "dev" ];
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/gnome-autoar/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+ sha256 = "0yk56ch46n3wfy633mq31kif9n7v06rlij4vqbsbn6l4z1vw6d0a";
+ };
+
+ passthru = {
+ updateScript = gnome3.updateScript { packageName = "gnome-autoar"; attrPath = "gnome3.gnome-autoar"; };
+ };
+
+ nativeBuildInputs = [
+ gobject-introspection
+ pkgconfig
+ vala
+ ];
+
+ buildInputs = [
+ gtk3
+ ];
+
+ propagatedBuildInputs = [
+ libarchive
+ glib
+ ];
+
+ meta = with stdenv.lib; {
+ platforms = platforms.linux;
+ maintainers = teams.gnome.members;
+ license = licenses.lgpl21;
+ description = "Library to integrate compressed files management with GNOME";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
new file mode 100644
index 000000000000..cde21551a8a3
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
@@ -0,0 +1,198 @@
+{ 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
+, gdm
+, systemd
+, upower
+, pam
+, wrapGAppsHook
+, writeTextFile
+, writeShellScriptBin
+, xkeyboard_config
+, runCommand
+}:
+
+let
+ pname = "gnome-flashback";
+ version = "3.36.3";
+
+ # From data/sessions/Makefile.am
+ requiredComponentsCommon = [
+ "gnome-flashback"
+ "gnome-panel"
+ ];
+ requiredComponentsGsd = [
+ "org.gnome.SettingsDaemon.A11ySettings"
+ "org.gnome.SettingsDaemon.Color"
+ "org.gnome.SettingsDaemon.Datetime"
+ "org.gnome.SettingsDaemon.Housekeeping"
+ "org.gnome.SettingsDaemon.Keyboard"
+ "org.gnome.SettingsDaemon.MediaKeys"
+ "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.UsbProtection"
+ "org.gnome.SettingsDaemon.Wacom"
+ "org.gnome.SettingsDaemon.XSettings"
+ ];
+ requiredComponents = wmName: "RequiredComponents=${stdenv.lib.concatStringsSep ";" ([wmName] ++ requiredComponentsCommon ++ requiredComponentsGsd)};";
+ gnome-flashback = stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "19y1a4kq6db6a19basss76l4rypiz0lwr32ajli1ra1d1yj9xfid";
+ };
+
+ # make .desktop Execs absolute
+ postPatch = ''
+ patch -p0 <<END_PATCH
+ +++ data/applications/gnome-flashback.desktop.in.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
+ gdm
+ gnome-panel
+ systemd
+ upower
+ pam
+ xkeyboard_config
+ ];
+
+ doCheck = true;
+
+ enableParallelBuilding = true;
+
+ PKG_CONFIG_LIBGNOME_PANEL_LAYOUTSDIR = "${placeholder "out"}/share/gnome-panel/layouts";
+ PKG_CONFIG_LIBGNOME_PANEL_MODULESDIR = "${placeholder "out"}/lib/gnome-panel/modules";
+
+ 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;
+ '';
+ } // {
+ providedSessions = [ "gnome-flashback-${wmName}" ];
+ };
+
+ mkSystemdTargetForWm = { wmName }:
+ runCommand "gnome-flashback-${wmName}.target" {} ''
+ mkdir -p $out/lib/systemd/user
+ cp "${gnome-flashback}/lib/systemd/user/gnome-session-x11@gnome-flashback-metacity.target" \
+ "$out/lib/systemd/user/gnome-session-x11@gnome-flashback-${wmName}.target"
+ '';
+ };
+
+ meta = with stdenv.lib; {
+ description = "GNOME 2.x-like session for GNOME 3";
+ homepage = "https://wiki.gnome.org/Projects/GnomeFlashback";
+ license = licenses.gpl2;
+ maintainers = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+ };
+ in gnome-flashback
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
new file mode 100644
index 000000000000..63a651258823
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, meson, ninja, gettext, gnome3, packagekit, polkit
+, gtk3, systemd, wrapGAppsHook, desktop-file-utils }:
+
+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
+ ];
+
+ 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 = teams.gnome.members;
+ license = licenses.gpl2;
+ description = "Tools for installing software on the GNOME desktop using PackageKit";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
new file mode 100644
index 000000000000..037c7812105c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
@@ -0,0 +1,99 @@
+{ stdenv
+, fetchurl
+, autoreconfHook
+, dconf
+, evolution-data-server
+, gdm
+, gettext
+, glib
+, gnome-desktop
+, gnome-menus
+, gnome3
+, gtk3
+, itstool
+, libgweather
+, libsoup
+, libwnck3
+, libxml2
+, pkgconfig
+, polkit
+, systemd
+, wrapGAppsHook }:
+
+let
+ pname = "gnome-panel";
+ version = "3.36.2";
+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 = "0z0f64rgcwkv48kfd1ifzjvnmg3c386hwi9cj11mr5198rah0p4p";
+ };
+
+ # 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"
+ --prefix XDG_CONFIG_DIRS : "${gnome-menus}/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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-screensaver/fix-dbus-service-dir.patch
new file mode 100644
index 000000000000..81e037ee690d
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
new file mode 100644
index 000000000000..0271992b6407
--- /dev/null
+++ b/infra/libkookie/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, libhandy
+, gnome3, gdk-pixbuf, libnotify, gobject-introspection, wrapGAppsHook }:
+
+let
+ pname = "gnome-tweaks";
+ version = "3.34.0";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "0l2j42ba7v866iknygamnkiq7igh0fjvq92r93cslvvfnkx2ccq0";
+ };
+
+ 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 libhandy
+ # 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 = teams.gnome.members;
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix
new file mode 100644
index 000000000000..59b87c3367f5
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/default.nix
@@ -0,0 +1,81 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, appstream-glib
+, clutter
+, gjs
+, glib
+, gobject-introspection
+, gtk3
+, meson
+, mutter
+, ninja
+, pango
+, pkgconfig
+, vala
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ version = "3.36.3";
+ pname = "gpaste";
+
+ src = fetchFromGitHub {
+ owner = "Keruspe";
+ repo = "GPaste";
+ rev = "v${version}";
+ sha256 = "1p1p2ng095lkly5fp9120b23wlvkj1xf4fhivzsd72css0szy7mi";
+ };
+
+ 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 = [
+ appstream-glib
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ clutter # required by mutter-clutter
+ gjs
+ glib
+ gtk3
+ mutter
+ pango
+ ];
+
+ mesonFlags = [
+ "-Dcontrol-center-keybindings-dir=${placeholder "out"}/share/gnome-control-center/keybindings"
+ "-Ddbus-services-dir=${placeholder "out"}/share/dbus-1/services"
+ "-Dsystemd-user-unit-dir=${placeholder "out"}/etc/systemd/user"
+ ];
+
+ postInstall = ''
+ ${glib.dev}/bin/glib-compile-schemas "$out/share/glib-2.0/schemas"
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = "https://github.com/Keruspe/GPaste";
+ description = "Clipboard management system with GNOME 3 integration";
+ license = licenses.gpl3;
+ platforms = platforms.linux;
+ maintainers = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
new file mode 100644
index 000000000000..c8a3fad2272b
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
new file mode 100644
index 000000000000..9550de32fbea
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
new file mode 100644
index 000000000000..1f9afefd2e48
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, pkgconfig, glib, gtk3, libgee, gettext, vala, gnome3
+, libintl, meson, ninja }:
+
+let
+ pname = "libgnome-games-support";
+ version = "1.6.1";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "1gq8p38k92lsr6dbav6pgmw0adnzzhcs06jqdkr37p145vv6ls7v";
+ };
+
+ nativeBuildInputs = [ meson ninja pkgconfig gettext vala ];
+ 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 = teams.gnome.members;
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/default.nix
new file mode 100644
index 000000000000..e62c6fe7fee3
--- /dev/null
+++ b/infra/libkookie/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.36.1";
+in stdenv.mkDerivation rec {
+ name = "${pname}-${version}";
+
+ src = fetchurl {
+ url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+ sha256 = "08xkq5i6czvms0ygbj7ywzl70q1l0z44nfh6b43q8rmjwa9pdw0i";
+ };
+
+ 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 = teams.gnome.members;
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/metacity/fix-paths.patch
new file mode 100644
index 000000000000..ff3a244e67d9
--- /dev/null
+++ b/infra/libkookie/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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
new file mode 100644
index 000000000000..e8c523277e18
--- /dev/null
+++ b/infra/libkookie/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 = teams.gnome.members;
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/misc/pomodoro/default.nix
new file mode 100644
index 000000000000..b9489526dd71
--- /dev/null
+++ b/infra/libkookie/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.17.0";
+
+ src = fetchFromGitHub {
+ owner = "codito";
+ repo = "gnome-pomodoro";
+ rev = version;
+ sha256 = "0s9wzx7wbynpqgj7nlgs5wwx4w2akz7nli89sy7pxcn4xpnahqgn";
+ };
+
+ 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/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/update.nix b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/update.nix
new file mode 100644
index 000000000000..1bceddf77eb5
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/desktops/gnome-3/update.nix
@@ -0,0 +1,26 @@
+{ stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }:
+{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable", freeze ? false }:
+
+let
+ python = python3.withPackages (p: [ p.requests ]);
+ upperBoundFlag =
+ let
+ package = lib.attrByPath (lib.splitString "." attrPath) (throw "Cannot find attribute ‘${attrPath}’.") pkgs;
+ packageVersion = lib.getVersion package;
+ versionComponents = lib.versions.splitVersion packageVersion;
+ minorVersion = lib.versions.minor packageVersion;
+ minorAvailable = builtins.length versionComponents > 1 && builtins.match "[0-9]+" minorVersion != null;
+ nextMinor = builtins.fromJSON minorVersion + 1;
+ upperBound = "${lib.versions.major packageVersion}.${builtins.toString nextMinor}";
+ in lib.optionalString (freeze && minorAvailable) ''--upper-bound="${upperBound}"'';
+ 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" ${upperBoundFlag})
+ update-source-version "$attr_path" "$latest_tag"
+ '';
+in [ updateScript packageName attrPath versionPolicy ]