about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTuomas Tynkkynen <tuomas@tuxera.com>2018-03-01 06:09:20 +0200
committerTuomas Tynkkynen <tuomas@tuxera.com>2018-03-01 06:09:20 +0200
commitb8b2225f6b2f9416b18906e28b294ed8b099095a (patch)
treea06db55819007a3105d4499e7a9c8bb097fc9941
parentbcc04c75f8f3d82cd1a86bec6af21daa42e09385 (diff)
parent4a7fc5f062a438cf1199e917bad501a9cfdf7e0a (diff)
downloadnixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.tar
nixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.tar.gz
nixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.tar.bz2
nixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.tar.lz
nixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.tar.xz
nixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.tar.zst
nixlib-b8b2225f6b2f9416b18906e28b294ed8b099095a.zip
Merge remote-tracking branch 'upstream/master' into staging
-rwxr-xr-xmaintainers/scripts/gnome.sh192
-rwxr-xr-xmaintainers/scripts/update.nix47
-rw-r--r--nixos/doc/manual/release-notes/rl-1803.xml7
-rw-r--r--nixos/modules/programs/bash/bash.nix3
-rw-r--r--nixos/modules/services/misc/disnix.nix14
-rw-r--r--nixos/modules/services/misc/nix-ssh-serve.nix24
-rw-r--r--nixos/modules/services/security/usbguard.nix2
-rw-r--r--nixos/release.nix1
-rw-r--r--nixos/tests/nix-ssh-serve.nix39
-rw-r--r--nixos/tests/openssh.nix17
-rw-r--r--nixos/tests/ssh-keys.nix15
-rw-r--r--pkgs/applications/misc/redshift/default.nix3
-rw-r--r--pkgs/applications/misc/tilda/default.nix4
-rw-r--r--pkgs/applications/misc/urh/default.nix4
-rw-r--r--pkgs/applications/networking/tcpkali/default.nix4
-rw-r--r--pkgs/applications/science/misc/tulip/default.nix4
-rw-r--r--pkgs/applications/search/recoll/default.nix55
-rw-r--r--pkgs/build-support/safe-discard-string-context.nix14
-rw-r--r--pkgs/desktops/gnome-3/apps/accerciser/default.nix21
-rw-r--r--pkgs/desktops/gnome-3/apps/accerciser/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/bijiben/default.nix13
-rw-r--r--pkgs/desktops/gnome-3/apps/bijiben/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/cheese/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/cheese/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/evolution/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/evolution/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/file-roller/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/file-roller/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gedit/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gedit/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/ghex/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/ghex/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/glade/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/glade/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-boxes/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-calendar/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-characters/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-characters/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-clocks/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-documents/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-documents/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-logs/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-logs/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-maps/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-maps/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-music/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-music/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-photos/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-photos/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-power-manager/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-weather/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-weather/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/polari/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/polari/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/seahorse/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/seahorse/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/apps/vinagre/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/vinagre/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/adwaita-icon-theme/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/baobab/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/baobab/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/dconf-editor/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/dconf-editor/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/empathy/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/empathy/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/eog/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/eog/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/epiphany/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/epiphany/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/evince/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/evince/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/evolution-data-server/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/evolution-data-server/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/folks/default.nix17
-rw-r--r--pkgs/desktops/gnome-3/core/gcr/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gcr/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gdm/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gdm/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/geocode-glib/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/geocode-glib/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gjs/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gjs/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-backgrounds/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-bluetooth/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-calculator/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-calculator/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-common/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-common/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-contacts/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-contacts/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-control-center/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-control-center/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-desktop/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-desktop/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-dictionary/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-disk-utility/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-font-viewer/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-keyring/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-keyring/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-online-accounts/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-online-accounts/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-online-miners/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-screenshot/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-session/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-session/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-settings-daemon/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell-extensions/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell/default.nix9
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-software/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-software/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-system-monitor/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-terminal/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-terminal/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-themes-standard/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-themes-standard/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-user-docs/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-user-share/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-user-share/src.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gtksourceview/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gtksourceview/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gtksourceviewmm/default.nix14
-rw-r--r--pkgs/desktops/gnome-3/core/gtksourceviewmm/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gucharmap/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/gucharmap/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/libgnomekbd/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/libgnomekbd/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/libgweather/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/libgweather/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/libpeas/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/libpeas/src.nix13
-rw-r--r--pkgs/desktops/gnome-3/core/mutter/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/mutter/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/nautilus/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/nautilus/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/simple-scan/default.nix13
-rw-r--r--pkgs/desktops/gnome-3/core/simple-scan/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/sushi/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/sushi/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/totem-pl-parser/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/totem-pl-parser/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/totem/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/totem/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/tracker-miners/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/tracker-miners/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/tracker/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/tracker/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/vino/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/vino/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/vte/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/vte/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/yelp-tools/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/yelp-tools/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/yelp-xsl/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/yelp-xsl/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/yelp/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/yelp/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/zenity/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/core/zenity/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/default.nix8
-rw-r--r--pkgs/desktops/gnome-3/devtools/anjuta/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/devtools/anjuta/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/devtools/devhelp/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/devtools/devhelp/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/devtools/gdl/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/devtools/gdl/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/devtools/gnome-devel-docs/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/devtools/nemiver/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/devtools/nemiver/src.nix11
-rw-r--r--pkgs/desktops/gnome-3/find-latest-version.py58
-rw-r--r--pkgs/desktops/gnome-3/games/aisleriot/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/aisleriot/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/five-or-more/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/five-or-more/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/four-in-a-row/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/four-in-a-row/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-chess/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-chess/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-klotski/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-klotski/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-mahjongg/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-mines/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-mines/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-nibbles/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-robots/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-robots/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-sudoku/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-taquin/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-taquin/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-tetravex/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/hitori/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/hitori/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/iagno/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/iagno/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/lightsoff/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/lightsoff/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/quadrapassel/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/quadrapassel/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/swell-foop/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/swell-foop/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/games/tali/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/games/tali/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/gitg/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/misc/gitg/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-autoar/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-packagekit/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-tweak-tool/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-tweak-tool/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/gspell/default.nix18
-rw-r--r--pkgs/desktops/gnome-3/misc/gspell/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/gtkhtml/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/misc/gtkhtml/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/libgda/default.nix15
-rw-r--r--pkgs/desktops/gnome-3/misc/libgda/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/misc/libgit2-glib/default.nix16
-rw-r--r--pkgs/desktops/gnome-3/misc/libgit2-glib/src.nix10
-rw-r--r--pkgs/desktops/gnome-3/update.nix11
-rw-r--r--pkgs/development/haskell-modules/make-package-set.nix15
-rw-r--r--pkgs/development/interpreters/supercollider/default.nix4
-rw-r--r--pkgs/development/libraries/liburcu/default.nix4
-rw-r--r--pkgs/development/libraries/soundtouch/default.nix4
-rw-r--r--pkgs/development/libraries/unixODBC/default.nix4
-rw-r--r--pkgs/development/tools/build-managers/waf/default.nix4
-rw-r--r--pkgs/development/tools/database/squirrel-sql/default.nix4
-rw-r--r--pkgs/development/tools/wiggle/default.nix6
-rw-r--r--pkgs/misc/drivers/sc-controller/default.nix18
-rw-r--r--pkgs/os-specific/linux/rtlwifi_new/default.nix6
-rw-r--r--pkgs/os-specific/linux/usbguard/daemon_read_only_config.patch13
-rw-r--r--pkgs/os-specific/linux/usbguard/default.nix18
-rw-r--r--pkgs/os-specific/linux/usbguard/documentation.patch32
-rw-r--r--pkgs/servers/computing/slurm/default.nix4
-rw-r--r--pkgs/shells/nix-bash-completions/default.nix4
-rw-r--r--pkgs/tools/archivers/xarchiver/default.nix4
-rw-r--r--pkgs/tools/misc/unclutter-xfixes/default.nix4
-rw-r--r--pkgs/tools/networking/surfraw/default.nix6
-rw-r--r--pkgs/tools/networking/swagger-codegen/default.nix4
-rw-r--r--pkgs/tools/package-management/mynewt-newt/default.nix4
-rw-r--r--pkgs/tools/system/sleuthkit/default.nix4
-rw-r--r--pkgs/tools/system/ts/default.nix4
-rw-r--r--pkgs/top-level/all-packages.nix2
267 files changed, 1555 insertions, 1631 deletions
diff --git a/maintainers/scripts/gnome.sh b/maintainers/scripts/gnome.sh
deleted file mode 100755
index d44bda53f8d6..000000000000
--- a/maintainers/scripts/gnome.sh
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/usr/bin/env bash
-
-set -o pipefail
-
-GNOME_FTP=ftp.gnome.org/pub/GNOME/sources
-
-# projects that don't follow the GNOME major versioning, or that we don't want to
-# programmatically update
-NO_GNOME_MAJOR="ghex gtkhtml gdm gucharmap"
-
-usage() {
-  echo "Usage: $0 <show project>|<update project>|<update-all> [major.minor]" >&2
-  exit 0
-}
-
-if [ "$#" -lt 1 ]; then
-  usage
-fi
-
-GNOME_TOP=pkgs/desktops/gnome-3
-
-action=$1
-
-# curl -l ftp://... doesn't work from my office in HSE, and I don't want to have
-# any conversations with sysadmin. Somehow lftp works.
-if [ "$FTP_CLIENT" = "lftp" ]; then
-  ls_ftp() {
-    lftp -c "open $1; cls"
-  }
-else
-  ls_ftp() {
-    curl -s -l "$1"/
-  }
-fi
-
-find_project() {
-  exec find "$GNOME_TOP" -mindepth 2 -maxdepth 2 -type d "$@"
-}
-
-show_project() {
-  local project=$1
-  local majorVersion=$2
-  local version=
-
-  if [ -z "$majorVersion" ]; then
-    echo "Looking for available versions..." >&2
-    local available_baseversions=$(ls_ftp ftp://${GNOME_FTP}/${project} | grep '[0-9]\.[0-9]' | sort -t. -k1,1n -k 2,2n)
-    if [ "$?" -ne 0 ]; then
-      echo "Project $project not found" >&2
-      return 1
-    fi
-    
-    echo -e "The following versions are available:\n ${available_baseversions[@]}" >&2
-    echo -en "Choose one of them: " >&2
-    read majorVersion
-  fi
-  
-  if echo "$majorVersion" | grep -q "[0-9]\+\.[0-9]\+\.[0-9]\+"; then
-    # not a major version
-    version=$majorVersion
-    majorVersion=$(echo "$majorVersion" | cut -d '.' -f 1,2)
-  fi
-  
-  local FTPDIR=${GNOME_FTP}/${project}/${majorVersion}
-  
-  #version=`curl -l ${FTPDIR}/ 2>/dev/null | grep LATEST-IS | sed -e s/LATEST-IS-//`
-  # gnome's LATEST-IS is broken. Do not trust it.
-  
-  if [ -z "$version" ]; then
-  	local files=$(ls_ftp "${FTPDIR}")
-  	declare -A versions
-  	
-  	for f in $files; do
-  		case $f in
-      (LATEST-IS-*|*.news|*.changes|*.sha256sum|*.diff*):
-  		;;
-      ($project-*.*.9*.tar.*):
-  		tmp=${f#$project-}
-  		tmp=${tmp%.tar*}
-  		echo "Ignored unstable version ${tmp}" >&2
-  		;;
-      ($project-*.tar.*):
-  		tmp=${f#$project-}
-  		tmp=${tmp%.tar*}
-  		versions[${tmp}]=1
-  		;;
-      (*):
-  		echo "UNKNOWN FILE $f" >&2
-  		;;
-  		esac
-  	done
-  	echo "Found versions ${!versions[@]}" >&2
-  	version=$(echo ${!versions[@]} | sed -e 's/ /\n/g' | sort -t. -k1,1n -k 2,2n -k 3,3n | tail -n1)
-        if [ -z "$version" ]; then
-          echo "No version available for major $majorVersion" >&2
-          return 1
-        fi
-
-  	echo "Latest version is: ${version}" >&2
-  fi
-  
-  local name=${project}-${version}
-  echo "Fetching .sha256 file" >&2
-  local sha256out=$(curl -s -f http://"${FTPDIR}"/"${name}".sha256sum)
-  
-  if [ "$?" -ne "0" ]; then
-  	echo "Version not found" >&2
-  	return 1
-  fi
-  
-  extensions=( "xz" "bz2" "gz" )
-  echo "Choosing archive extension (known are ${extensions[@]})..." >&2
-  for ext in ${extensions[@]}; do
-    if echo -e "$sha256out" | grep -q "\\.tar\\.${ext}$"; then
-      ext_pref=$ext
-      sha256=$(echo -e "$sha256out" | grep "\\.tar\\.${ext}$" | cut -f1 -d\ )
-      break
-    fi
-  done
-  echo "Chosen ${ext_pref}, hash is ${sha256}" >&2
-  
-  echo "# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = \"${project}-${version}\";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/${project}/${majorVersion}/${project}-${version}.tar.${ext_pref};
-    sha256 = \"${sha256}\";
-  };
-}"
-
-  return 0
-}
-
-update_project() {
-  local project=$1
-  local majorVersion=$2
-
-  # find project in nixpkgs tree
-  projectPath=$(find_project -name "$project" -print)
-  if [ -z "$projectPath" ]; then
-    echo "Project $project not found under $GNOME_TOP"
-    exit 1
-  fi
-
-  src=$(show_project "$project" "$majorVersion")
-  
-  if [ "$?" -eq "0" ]; then
-    echo "Updating $projectPath/src.nix" >&2
-    echo -e "$src" > "$projectPath"/src.nix
-  fi
-
-  return 0
-}
-
-if [ "$action" = "update-all" ]; then
-  majorVersion=$2
-  if [ -z "$majorVersion" ]; then
-    echo "No major version specified" >&2
-    usage
-  fi
-
-  # find projects
-  projects=$(find_project -exec basename '{}' \;)
-  for project in $projects; do
-    if echo "$NO_GNOME_MAJOR"|grep -q $project; then
-      echo "Skipping $project"
-    else
-      echo "= Updating $project to $majorVersion" >&2
-      update_project "$project" "$majorVersion"
-      echo >&2
-    fi
-  done
-else
-  project=$2
-  majorVersion=$3
-
-  if [ -z "$project" ]; then
-    echo "No project specified, exiting" >&2
-    usage
-  fi
-
-  if [ "$action" = show ]; then
-    show_project "$project" "$majorVersion"
-  elif [ "$action" = update ]; then
-    update_project "$project" "$majorVersion"
-  else
-    echo "Unknown action $action" >&2
-    usage
-  fi
-fi
diff --git a/maintainers/scripts/update.nix b/maintainers/scripts/update.nix
index 2035950da3e3..7c54821f66cb 100755
--- a/maintainers/scripts/update.nix
+++ b/maintainers/scripts/update.nix
@@ -1,5 +1,6 @@
 { package ? null
 , maintainer ? null
+, path ? null
 }:
 
 # TODO: add assert statements
@@ -9,22 +10,24 @@ let
   pkgs = import ./../../default.nix { };
 
   packagesWith = cond: return: set:
-    pkgs.lib.flatten
-      (pkgs.lib.mapAttrsToList
-        (name: pkg:
-          let
-            result = builtins.tryEval (
-              if pkgs.lib.isDerivation pkg && cond name pkg
-                then [(return name pkg)]
-              else if pkg.recurseForDerivations or false || pkg.recurseForRelease or false
-                then packagesWith cond return pkg
+    pkgs.lib.unique
+      (pkgs.lib.flatten
+        (pkgs.lib.mapAttrsToList
+          (name: pkg:
+            let
+              result = builtins.tryEval (
+                if pkgs.lib.isDerivation pkg && cond name pkg
+                  then [(return name pkg)]
+                else if pkg.recurseForDerivations or false || pkg.recurseForRelease or false
+                  then packagesWith cond return pkg
+                else []
+              );
+            in
+              if result.success then result.value
               else []
-            );
-          in
-            if result.success then result.value
-            else []
+          )
+          set
         )
-        set
       );
 
   packagesWithUpdateScriptAndMaintainer = maintainer':
@@ -47,6 +50,14 @@ let
                    (name: pkg: pkg)
                    pkgs;
 
+  packagesWithUpdateScript = path:
+    let
+      attrSet = pkgs.lib.attrByPath (pkgs.lib.splitString "." path) null pkgs;
+    in
+      packagesWith (name: pkg: builtins.hasAttr "updateScript" pkg)
+                     (name: pkg: pkg)
+                     attrSet;
+
   packageByName = name:
     let
         package = pkgs.lib.attrByPath (pkgs.lib.splitString "." name) null pkgs;
@@ -63,6 +74,8 @@ let
       [ (packageByName package) ]
     else if maintainer != null then
       packagesWithUpdateScriptAndMaintainer maintainer
+    else if path != null then
+      packagesWithUpdateScript path
     else
       builtins.throw "No arguments provided.\n\n${helpText}";
 
@@ -76,7 +89,11 @@ let
 
         % nix-shell maintainers/scripts/update.nix --argstr package garbas
 
-    to run update script for specific package.
+    to run update script for specific package, or
+
+        % nix-shell maintainers/scripts/update.nix --argstr path gnome3
+
+    to run update script for all package under an attribute path.
   '';
 
   runUpdateScript = package: ''
diff --git a/nixos/doc/manual/release-notes/rl-1803.xml b/nixos/doc/manual/release-notes/rl-1803.xml
index 29b252753830..9f80dcc29341 100644
--- a/nixos/doc/manual/release-notes/rl-1803.xml
+++ b/nixos/doc/manual/release-notes/rl-1803.xml
@@ -430,6 +430,13 @@ following incompatible changes:</para>
       and <literal>stopJob</literal> provide an optional <literal>$user</literal> argument for that purpose.
     </para>
   </listitem>
+  <listitem>
+    <para>
+      Enabling bash completion on NixOS, <literal>programs.bash.enableCompletion</literal>, will now also enable
+      completion for the Nix command line tools by installing the
+      <link xlink:href="https://github.com/hedning/nix-bash-completions">nix-bash-completions</link> package.
+    </para>
+  </listitem>
 </itemizedlist>
 
 </section>
diff --git a/nixos/modules/programs/bash/bash.nix b/nixos/modules/programs/bash/bash.nix
index 1abdb4973a44..1a62f04972df 100644
--- a/nixos/modules/programs/bash/bash.nix
+++ b/nixos/modules/programs/bash/bash.nix
@@ -211,6 +211,9 @@ in
       "/share/bash-completion"
     ];
 
+    environment.systemPackages = optional cfg.enableCompletion
+      pkgs.nix-bash-completions;
+
     environment.shells =
       [ "/run/current-system/sw/bin/bash"
         "/var/run/current-system/sw/bin/bash"
diff --git a/nixos/modules/services/misc/disnix.nix b/nixos/modules/services/misc/disnix.nix
index e96645c79c77..39d23610b064 100644
--- a/nixos/modules/services/misc/disnix.nix
+++ b/nixos/modules/services/misc/disnix.nix
@@ -32,11 +32,17 @@ in
         description = "Whether to enable Disnix";
       };
 
+      enableMultiUser = mkOption {
+        type = types.bool;
+        default = true;
+        description = "Whether to support multi-user mode by enabling the Disnix D-Bus service";
+      };
+
       useWebServiceInterface = mkOption {
         default = false;
         description = "Whether to enable the DisnixWebService interface running on Apache Tomcat";
       };
-      
+
       package = mkOption {
         type = types.path;
         description = "The Disnix package";
@@ -52,7 +58,7 @@ in
 
   config = mkIf cfg.enable {
     dysnomia.enable = true;
-    
+
     environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService;
 
     services.dbus.enable = true;
@@ -71,7 +77,7 @@ in
       };
 
     systemd.services = {
-      disnix = {
+      disnix = mkIf cfg.enableMultiUser {
         description = "Disnix server";
         wants = [ "dysnomia.target" ];
         wantedBy = [ "multi-user.target" ];
@@ -92,7 +98,7 @@ in
         }
         // (if config.environment.variables ? DYSNOMIA_CONTAINERS_PATH then { inherit (config.environment.variables) DYSNOMIA_CONTAINERS_PATH; } else {})
         // (if config.environment.variables ? DYSNOMIA_MODULES_PATH then { inherit (config.environment.variables) DYSNOMIA_MODULES_PATH; } else {});
-        
+
         serviceConfig.ExecStart = "${cfg.package}/bin/disnix-service";
       };
 
diff --git a/nixos/modules/services/misc/nix-ssh-serve.nix b/nixos/modules/services/misc/nix-ssh-serve.nix
index 66148431709f..5bd9cf9086f1 100644
--- a/nixos/modules/services/misc/nix-ssh-serve.nix
+++ b/nixos/modules/services/misc/nix-ssh-serve.nix
@@ -1,8 +1,12 @@
 { config, lib, pkgs, ... }:
 
 with lib;
-
-{
+let cfg = config.nix.sshServe;
+    command =
+      if cfg.protocol == "ssh"
+        then "nix-store --serve"
+      else "nix-daemon --stdio";
+in {
   options = {
 
     nix.sshServe = {
@@ -10,7 +14,7 @@ with lib;
       enable = mkOption {
         type = types.bool;
         default = false;
-        description = "Whether to enable serving the Nix store as a binary cache via SSH.";
+        description = "Whether to enable serving the Nix store as a remote store via SSH.";
       };
 
       keys = mkOption {
@@ -20,14 +24,20 @@ with lib;
         description = "A list of SSH public keys allowed to access the binary cache via SSH.";
       };
 
+      protocol = mkOption {
+        type = types.enum [ "ssh" "ssh-ng" ];
+        default = "ssh";
+        description = "The specific Nix-over-SSH protocol to use.";
+      };
+
     };
 
   };
 
-  config = mkIf config.nix.sshServe.enable {
+  config = mkIf cfg.enable {
 
     users.extraUsers.nix-ssh = {
-      description = "Nix SSH substituter user";
+      description = "Nix SSH store user";
       uid = config.ids.uids.nix-ssh;
       useDefaultShell = true;
     };
@@ -41,11 +51,11 @@ with lib;
         PermitTTY no
         PermitTunnel no
         X11Forwarding no
-        ForceCommand ${config.nix.package.out}/bin/nix-store --serve
+        ForceCommand ${config.nix.package.out}/bin/${command}
       Match All
     '';
 
-    users.extraUsers.nix-ssh.openssh.authorizedKeys.keys = config.nix.sshServe.keys;
+    users.extraUsers.nix-ssh.openssh.authorizedKeys.keys = cfg.keys;
 
   };
 }
diff --git a/nixos/modules/services/security/usbguard.nix b/nixos/modules/services/security/usbguard.nix
index 4e685e633354..5d469cabe2cb 100644
--- a/nixos/modules/services/security/usbguard.nix
+++ b/nixos/modules/services/security/usbguard.nix
@@ -192,7 +192,7 @@ in {
 
       serviceConfig = {
         Type = "simple";
-        ExecStart = ''${pkgs.usbguard}/bin/usbguard-daemon -d -k -c ${daemonConfFile}'';
+        ExecStart = ''${pkgs.usbguard}/bin/usbguard-daemon -P -d -k -c ${daemonConfFile}'';
         Restart = "on-failure";
       };
     };
diff --git a/nixos/release.nix b/nixos/release.nix
index 23f050367d69..558bbbf9a9d4 100644
--- a/nixos/release.nix
+++ b/nixos/release.nix
@@ -319,6 +319,7 @@ in rec {
   tests.nfs4 = callTest tests/nfs.nix { version = 4; };
   tests.nginx = callTest tests/nginx.nix { };
   tests.nghttpx = callTest tests/nghttpx.nix { };
+  tests.nix-ssh-serve = callTest tests/nix-ssh-serve.nix { };
   tests.novacomd = callTestOnTheseSystems ["x86_64-linux"] tests/novacomd.nix { };
   tests.leaps = callTest tests/leaps.nix { };
   tests.nsd = callTest tests/nsd.nix {};
diff --git a/nixos/tests/nix-ssh-serve.nix b/nixos/tests/nix-ssh-serve.nix
new file mode 100644
index 000000000000..aa366d8612d7
--- /dev/null
+++ b/nixos/tests/nix-ssh-serve.nix
@@ -0,0 +1,39 @@
+import ./make-test.nix ({ pkgs, lib, ... }:
+let inherit (import ./ssh-keys.nix pkgs)
+      snakeOilPrivateKey snakeOilPublicKey;
+    ssh-config = builtins.toFile "ssh.conf" ''
+      UserKnownHostsFile=/dev/null
+      StrictHostKeyChecking=no
+    '';
+in
+   { name = "nix-ssh-serve";
+     meta.maintainers = [ lib.maintainers.shlevy ];
+     nodes =
+       { server.nix.sshServe =
+           { enable = true;
+             keys = [ snakeOilPublicKey ];
+             protocol = "ssh-ng";
+           };
+         server.nix.package = pkgs.nixUnstable;
+         client.nix.package = pkgs.nixUnstable;
+       };
+     testScript = ''
+       startAll;
+
+       $client->succeed("mkdir -m 700 /root/.ssh");
+       $client->copyFileFromHost("${ssh-config}", "/root/.ssh/config");
+       $client->succeed("cat ${snakeOilPrivateKey} > /root/.ssh/id_ecdsa");
+       $client->succeed("chmod 600 /root/.ssh/id_ecdsa");
+
+       $client->succeed("nix-store --add /etc/machine-id > mach-id-path");
+
+       $server->waitForUnit("sshd");
+
+       $client->fail("diff /root/other-store\$(cat mach-id-path) /etc/machine-id");
+       # Currently due to shared store this is a noop :(
+       $client->succeed("nix copy --to ssh-ng://nix-ssh\@server \$(cat mach-id-path)");
+       $client->succeed("nix-store --realise \$(cat mach-id-path) --store /root/other-store --substituters ssh-ng://nix-ssh\@server");
+       $client->succeed("diff /root/other-store\$(cat mach-id-path) /etc/machine-id");
+     '';
+   }
+)
diff --git a/nixos/tests/openssh.nix b/nixos/tests/openssh.nix
index 291544996889..b2d254e9d9d9 100644
--- a/nixos/tests/openssh.nix
+++ b/nixos/tests/openssh.nix
@@ -1,20 +1,7 @@
 import ./make-test.nix ({ pkgs, ... }:
 
-let
-  snakeOilPrivateKey = pkgs.writeText "privkey.snakeoil" ''
-    -----BEGIN EC PRIVATE KEY-----
-    MHcCAQEEIHQf/khLvYrQ8IOika5yqtWvI0oquHlpRLTZiJy5dRJmoAoGCCqGSM49
-    AwEHoUQDQgAEKF0DYGbBwbj06tA3fd/+yP44cvmwmHBWXZCKbS+RQlAKvLXMWkpN
-    r1lwMyJZoSGgBHoUahoYjTh9/sJL7XLJtA==
-    -----END EC PRIVATE KEY-----
-  '';
-
-  snakeOilPublicKey = pkgs.lib.concatStrings [
-    "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHA"
-    "yNTYAAABBBChdA2BmwcG49OrQN33f/sj+OHL5sJhwVl2Qim0vkUJQCry1zFpKTa"
-    "9ZcDMiWaEhoAR6FGoaGI04ff7CS+1yybQ= sakeoil"
-  ];
-
+let inherit (import ./ssh-keys.nix pkgs)
+      snakeOilPrivateKey snakeOilPublicKey;
 in {
   name = "openssh";
   meta = with pkgs.stdenv.lib.maintainers; {
diff --git a/nixos/tests/ssh-keys.nix b/nixos/tests/ssh-keys.nix
new file mode 100644
index 000000000000..07d422196efa
--- /dev/null
+++ b/nixos/tests/ssh-keys.nix
@@ -0,0 +1,15 @@
+pkgs:
+{ snakeOilPrivateKey = pkgs.writeText "privkey.snakeoil" ''
+    -----BEGIN EC PRIVATE KEY-----
+    MHcCAQEEIHQf/khLvYrQ8IOika5yqtWvI0oquHlpRLTZiJy5dRJmoAoGCCqGSM49
+    AwEHoUQDQgAEKF0DYGbBwbj06tA3fd/+yP44cvmwmHBWXZCKbS+RQlAKvLXMWkpN
+    r1lwMyJZoSGgBHoUahoYjTh9/sJL7XLJtA==
+    -----END EC PRIVATE KEY-----
+  '';
+
+  snakeOilPublicKey = pkgs.lib.concatStrings [
+    "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHA"
+    "yNTYAAABBBChdA2BmwcG49OrQN33f/sj+OHL5sJhwVl2Qim0vkUJQCry1zFpKTa"
+    "9ZcDMiWaEhoAR6FGoaGI04ff7CS+1yybQ= sakeoil"
+  ];
+}
diff --git a/pkgs/applications/misc/redshift/default.nix b/pkgs/applications/misc/redshift/default.nix
index c0e481ae8788..594886149c5f 100644
--- a/pkgs/applications/misc/redshift/default.nix
+++ b/pkgs/applications/misc/redshift/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchFromGitHub, fetchurl, autoconf, automake, gettext, intltool
 , libtool, pkgconfig, wrapGAppsHook, wrapPython, geoclue2, gobjectIntrospection
-, gtk3, python, pygobject3, pyxdg, libdrm, libxcb }:
+, gtk3, python, pygobject3, pyxdg, libdrm, libxcb, hicolor-icon-theme }:
 
 stdenv.mkDerivation rec {
   name = "redshift-${version}";
@@ -36,6 +36,7 @@ stdenv.mkDerivation rec {
     libdrm
     libxcb
     python
+    hicolor-icon-theme
   ];
 
   pythonPath = [ pygobject3 pyxdg ];
diff --git a/pkgs/applications/misc/tilda/default.nix b/pkgs/applications/misc/tilda/default.nix
index 7378950b189b..d5b927bb536c 100644
--- a/pkgs/applications/misc/tilda/default.nix
+++ b/pkgs/applications/misc/tilda/default.nix
@@ -6,11 +6,11 @@
 stdenv.mkDerivation rec {
 
   name = "tilda-${version}";
-  version = "1.3.3";
+  version = "1.4.1";
 
   src = fetchurl {
     url = "https://github.com/lanoxx/tilda/archive/${name}.tar.gz";
-    sha256 = "1cc4qbg1m3i04lj5p6i6xbd0zvy1320pxdgmjhz5p3j95ibsbfki";
+    sha256 = "0w2hry2bqcqrkik4l100b1a9jlsih6sq8zwhfpl8zzfq20i00lfs";
   };
 
   nativeBuildInputs = [ autoreconfHook pkgconfig ];
diff --git a/pkgs/applications/misc/urh/default.nix b/pkgs/applications/misc/urh/default.nix
index 78305675f17f..6aba4e751503 100644
--- a/pkgs/applications/misc/urh/default.nix
+++ b/pkgs/applications/misc/urh/default.nix
@@ -2,13 +2,13 @@
 
 python3Packages.buildPythonApplication rec {
   name = "urh-${version}";
-  version = "1.7.1";
+  version = "1.9.2";
 
   src = fetchFromGitHub {
     owner = "jopohl";
     repo = "urh";
     rev = "v${version}";
-    sha256 = "00l1zs3qw89z1hlylprzrpf6nf7h22h0nw43h97gv775vaqqgczv";
+    sha256 = "02jq2jas6gm08z4l09azi6dcsydaaaqbxfv4mb7pnrc1w8m593zr";
   };
 
   buildInputs = [ hackrf rtl-sdr ];
diff --git a/pkgs/applications/networking/tcpkali/default.nix b/pkgs/applications/networking/tcpkali/default.nix
index 79bc32dfa40d..8a056e21692b 100644
--- a/pkgs/applications/networking/tcpkali/default.nix
+++ b/pkgs/applications/networking/tcpkali/default.nix
@@ -1,6 +1,6 @@
 {stdenv, autoreconfHook, fetchFromGitHub, bison}:
 
-let version = "0.9"; in
+let version = "1.1.1"; in
 
 stdenv.mkDerivation rec {
   name = "tcpkali-${version}";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     owner = "machinezone";
     repo = "tcpkali";
     rev = "v${version}";
-    sha256 = "03cbmnc60wkd7f4bapn5cbm3c4zas2l0znsbpci2mn8ms8agif82";
+    sha256 = "09ky3cccaphcqc6nhfs00pps99lasmzc2pf5vk0gi8hlqbbhilxf";
   };
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ bison];
diff --git a/pkgs/applications/science/misc/tulip/default.nix b/pkgs/applications/science/misc/tulip/default.nix
index 9b8035fcefe7..af58aaafc9c9 100644
--- a/pkgs/applications/science/misc/tulip/default.nix
+++ b/pkgs/applications/science/misc/tulip/default.nix
@@ -1,13 +1,13 @@
 { fetchurl, stdenv, libxml2, freetype, mesa, glew, qt4
 , cmake, makeWrapper, libjpeg, python }:
 
-let version = "4.9.0"; in
+let version = "5.1.0"; in
 stdenv.mkDerivation rec {
   name = "tulip-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/auber/${name}_src.tar.gz";
-    sha256 = "0phc7972brvm0v6lfk4ghq9b2b4jsj6c15xlbgnvhhcxhc99wba3";
+    sha256 = "1i70y8b39gkpxfalr9844pa3l4bnnyw5y7ngxdqibil96k2b9q9h";
   };
 
   buildInputs = [ libxml2 freetype glew mesa qt4 libjpeg python ];
diff --git a/pkgs/applications/search/recoll/default.nix b/pkgs/applications/search/recoll/default.nix
index ada68e47aa04..ade8af254496 100644
--- a/pkgs/applications/search/recoll/default.nix
+++ b/pkgs/applications/search/recoll/default.nix
@@ -15,37 +15,46 @@ stdenv.mkDerivation rec {
     sha256 = "186bj8zx2xw9hwrzvzxdgdin9nj7msiqh5j57w5g7j4abdlsisjn";
   };
 
-  configureFlags = [ "--with-inotify" ];
+  configureFlags = [ "--enable-recollq" ] ++
+    (if stdenv.isLinux then [ "--with-inotify" ] else [ "--without-inotify" ]);
 
-  buildInputs = [ qt4 xapian file python bison];
+  buildInputs = [ qt4 xapian file python bison ];
+
+  patchPhase = stdenv.lib.optionalString stdenv.isDarwin ''
+    sed -i 's/-Wl,--no-undefined -Wl,--warn-unresolved-symbols//' Makefile.am
+    sed -i 's/-Wl,--no-undefined -Wl,--warn-unresolved-symbols//' Makefile.in
+  '';
 
   # the filters search through ${PATH} using a sh proc 'checkcmds' for the
   # filtering utils. Short circuit this by replacing the filtering command with
   # the absolute path to the filtering command. 
   postInstall = ''
     for f in $out/share/recoll/filters/* ; do
-      substituteInPlace  $f --replace antiword      ${lib.getBin antiword}/bin/antiword
-      substituteInPlace  $f --replace awk           ${lib.getBin gawk}/bin/awk
-      substituteInPlace  $f --replace catppt        ${lib.getBin catdoc}/bin/catppt
-      substituteInPlace  $f --replace djvused       ${lib.getBin djvulibre}/bin/djvused
-      substituteInPlace  $f --replace djvutxt       ${lib.getBin djvulibre}/bin/djvutxt
-      substituteInPlace  $f --replace egrep         ${lib.getBin gnugrep}/bin/egrep
-      substituteInPlace  $f --replace groff         ${lib.getBin groff}/bin/groff
-      substituteInPlace  $f --replace gunzip        ${lib.getBin gzip}/bin/gunzip
-      substituteInPlace  $f --replace iconv         ${lib.getBin libiconv}/bin/iconv
-      substituteInPlace  $f --replace lyx           ${lib.getBin lyx}/bin/lyx
-      substituteInPlace  $f --replace pdftotext     ${lib.getBin poppler_utils}/bin/pdftotext
-      substituteInPlace  $f --replace pstotext      ${lib.getBin ghostscript}/bin/ps2ascii
-      substituteInPlace  $f --replace sed           ${lib.getBin gnused}/bin/sed
-      substituteInPlace  $f --replace tar           ${lib.getBin gnutar}/bin/tar
-      substituteInPlace  $f --replace unzip         ${lib.getBin unzip}/bin/unzip
-      substituteInPlace  $f --replace xls2csv       ${lib.getBin catdoc}/bin/xls2csv
-      substituteInPlace  $f --replace xsltproc      ${lib.getBin libxslt}/bin/xsltproc
-      substituteInPlace  $f --replace unrtf         ${lib.getBin unrtf}/bin/unrtf
-      substituteInPlace  $f --replace untex         ${lib.getBin untex}/bin/untex
-      substituteInPlace  $f --replace wpd2html      ${lib.getBin libwpd}/bin/wpd2html
-      substituteInPlace  $f --replace /usr/bin/perl ${lib.getBin perl}/bin/perl
+      if [[ ! "$f" =~ \.zip$ ]]; then
+        substituteInPlace  $f --replace '"antiword"'      '"${lib.getBin antiword}/bin/antiword"'
+        substituteInPlace  $f --replace '"awk"'           '"${lib.getBin gawk}/bin/awk"'
+        substituteInPlace  $f --replace '"catppt"'        '"${lib.getBin catdoc}/bin/catppt"'
+        substituteInPlace  $f --replace '"djvused"'       '"${lib.getBin djvulibre}/bin/djvused"'
+        substituteInPlace  $f --replace '"djvutxt"'       '"${lib.getBin djvulibre}/bin/djvutxt"'
+        substituteInPlace  $f --replace '"egrep"'         '"${lib.getBin gnugrep}/bin/egrep"'
+        substituteInPlace  $f --replace '"groff"'         '"${lib.getBin groff}/bin/groff"'
+        substituteInPlace  $f --replace '"gunzip"'        '"${lib.getBin gzip}/bin/gunzip"'
+        substituteInPlace  $f --replace '"iconv"'         '"${lib.getBin libiconv}/bin/iconv"'
+        substituteInPlace  $f --replace '"pdftotext"'     '"${lib.getBin poppler_utils}/bin/pdftotext"'
+        substituteInPlace  $f --replace '"pstotext"'      '"${lib.getBin ghostscript}/bin/ps2ascii"'
+        substituteInPlace  $f --replace '"sed"'           '"${lib.getBin gnused}/bin/sed"'
+        substituteInPlace  $f --replace '"tar"'           '"${lib.getBin gnutar}/bin/tar"'
+        substituteInPlace  $f --replace '"unzip"'         '"${lib.getBin unzip}/bin/unzip"'
+        substituteInPlace  $f --replace '"xls2csv"'       '"${lib.getBin catdoc}/bin/xls2csv"'
+        substituteInPlace  $f --replace '"xsltproc"'      '"${lib.getBin libxslt}/bin/xsltproc"'
+        substituteInPlace  $f --replace '"unrtf"'         '"${lib.getBin unrtf}/bin/unrtf"'
+        substituteInPlace  $f --replace '"untex"'         '"${lib.getBin untex}/bin/untex"'
+        substituteInPlace  $f --replace '"wpd2html"'      '"${lib.getBin libwpd}/bin/wpd2html"'
+        substituteInPlace  $f --replace /usr/bin/perl ${lib.getBin perl}/bin/perl
+      fi
     done
+  '' + stdenv.lib.optionalString stdenv.isLinux ''
+    substituteInPlace  $f --replace '"lyx"' '"${lib.getBin lyx}/bin/lyx"'
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/build-support/safe-discard-string-context.nix b/pkgs/build-support/safe-discard-string-context.nix
deleted file mode 100644
index 293a15295d55..000000000000
--- a/pkgs/build-support/safe-discard-string-context.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-# | Discard the context of a string while ensuring that expected path
-# validity invariants hold.
-#
-# This relies on import-from-derivation, but it is only useful in
-# contexts where the string is going to be used in an
-# import-from-derivation anyway.
-#
-# safeDiscardStringContext : String → String
-{ writeText }: s:
-  builtins.seq
-    (import (writeText
-               "discard.nix"
-               "${builtins.substring 0 0 s}null\n"))
-    (builtins.unsafeDiscardStringContext s)
diff --git a/pkgs/desktops/gnome-3/apps/accerciser/default.nix b/pkgs/desktops/gnome-3/apps/accerciser/default.nix
index bf823426f603..a96d4f7a8eaf 100644
--- a/pkgs/desktops/gnome-3/apps/accerciser/default.nix
+++ b/pkgs/desktops/gnome-3/apps/accerciser/default.nix
@@ -3,17 +3,30 @@
 , dbus, intltool, libwnck3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) src name;
+  name = "accerciser-${version}";
+  version = "3.22.0";
 
-  nativeBuildInputs = [ pkgconfig ];
+  src = fetchurl {
+    url = "mirror://gnome/sources/accerciser/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "883306274442c7ecc076b24afca5190c835c40871ded1b9790da69347e9ca3c5";
+  };
+
+  nativeBuildInputs = [ pkgconfig wrapGAppsHook itstool intltool ];
   buildInputs = [
-    gtk3 wrapGAppsHook itstool libxml2 python3Packages.python python3Packages.pyatspi
+    gtk3 libxml2 python3Packages.python python3Packages.pyatspi
     python3Packages.pygobject3 python3Packages.ipython
-    at-spi2-core dbus intltool libwnck3 gnome3.defaultIconTheme
+    at-spi2-core dbus libwnck3 gnome3.defaultIconTheme
   ];
 
   wrapPrefixVariables = [ "PYTHONPATH" ];
 
+  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";
diff --git a/pkgs/desktops/gnome-3/apps/accerciser/src.nix b/pkgs/desktops/gnome-3/apps/accerciser/src.nix
deleted file mode 100644
index 20bd00839649..000000000000
--- a/pkgs/desktops/gnome-3/apps/accerciser/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "accerciser-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/accerciser/3.22/accerciser-3.22.0.tar.xz;
-    sha256 = "883306274442c7ecc076b24afca5190c835c40871ded1b9790da69347e9ca3c5";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/bijiben/default.nix b/pkgs/desktops/gnome-3/apps/bijiben/default.nix
index 802002d266a1..eaf8528b6ffb 100644
--- a/pkgs/desktops/gnome-3/apps/bijiben/default.nix
+++ b/pkgs/desktops/gnome-3/apps/bijiben/default.nix
@@ -5,7 +5,17 @@
 , gnome3, librsvg, gdk_pixbuf, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "bijiben-${version}";
+  version = "3.27.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/bijiben/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7b4623467f3cb745c4b268d6fb2d9da32cbc96ffb5b1bbf2a153b692e295ac64";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "bijiben"; attrPath = "gnome3.bijiben"; };
+  };
 
   doCheck = true;
 
@@ -34,7 +44,6 @@ stdenv.mkDerivation rec {
   meta = with stdenv.lib; {
     homepage = https://wiki.gnome.org/Apps/Bijiben;
     description = "Note editor designed to remain simple to use";
-    broken = true;
     maintainers = gnome3.maintainers;
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/desktops/gnome-3/apps/bijiben/src.nix b/pkgs/desktops/gnome-3/apps/bijiben/src.nix
deleted file mode 100644
index ee573eaef8eb..000000000000
--- a/pkgs/desktops/gnome-3/apps/bijiben/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "bijiben-3.27.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/bijiben/3.27/bijiben-3.27.1.tar.xz;
-    sha256 = "7b4623467f3cb745c4b268d6fb2d9da32cbc96ffb5b1bbf2a153b692e295ac64";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/cheese/default.nix b/pkgs/desktops/gnome-3/apps/cheese/default.nix
index 42e5cb4bc4d9..77ee086a950c 100644
--- a/pkgs/desktops/gnome-3/apps/cheese/default.nix
+++ b/pkgs/desktops/gnome-3/apps/cheese/default.nix
@@ -5,7 +5,17 @@
 , adwaita-icon-theme, librsvg, totem, gdk_pixbuf, gnome3, gnome-desktop, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "cheese-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/cheese/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "8ef52fc41de1817c4e4274e23eb7c29d28b64ae0f0d1fec52e184e99aea6c605";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "cheese"; attrPath = "gnome3.cheese"; };
+  };
 
   nativeBuildInputs = [
     pkgconfig intltool itstool vala wrapGAppsHook libxml2 appstream-glib
diff --git a/pkgs/desktops/gnome-3/apps/cheese/src.nix b/pkgs/desktops/gnome-3/apps/cheese/src.nix
deleted file mode 100644
index 0237606ae35c..000000000000
--- a/pkgs/desktops/gnome-3/apps/cheese/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "cheese-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/cheese/3.26/cheese-3.26.0.tar.xz;
-    sha256 = "8ef52fc41de1817c4e4274e23eb7c29d28b64ae0f0d1fec52e184e99aea6c605";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/evolution/default.nix b/pkgs/desktops/gnome-3/apps/evolution/default.nix
index ebbaccf9606a..1119cf86a4c9 100644
--- a/pkgs/desktops/gnome-3/apps/evolution/default.nix
+++ b/pkgs/desktops/gnome-3/apps/evolution/default.nix
@@ -7,7 +7,17 @@
 let
   majVer = gnome3.version;
 in stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "evolution-${version}";
+  version = "3.26.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/evolution/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "091621f21827e2dfb8057f3b2c3a215c4e97a692c59d0a4ee33108af571de60e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "evolution"; attrPath = "gnome3.evolution"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/evolution/src.nix b/pkgs/desktops/gnome-3/apps/evolution/src.nix
deleted file mode 100644
index 0c8155efde20..000000000000
--- a/pkgs/desktops/gnome-3/apps/evolution/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "evolution-3.26.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/evolution/3.26/evolution-3.26.3.tar.xz;
-    sha256 = "091621f21827e2dfb8057f3b2c3a215c4e97a692c59d0a4ee33108af571de60e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/file-roller/default.nix b/pkgs/desktops/gnome-3/apps/file-roller/default.nix
index 181888293777..89f20ed6f150 100644
--- a/pkgs/desktops/gnome-3/apps/file-roller/default.nix
+++ b/pkgs/desktops/gnome-3/apps/file-roller/default.nix
@@ -2,7 +2,17 @@
 , attr, bzip2, acl, wrapGAppsHook, librsvg, gdk_pixbuf, libnotify, nautilus }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "file-roller-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/file-roller/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "3e677b8e1c2f19aead69cf4fc419a19fc3373aaf5d7bf558b4f077f10bbba8a5";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "file-roller"; attrPath = "gnome3.file-roller"; };
+  };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
 
diff --git a/pkgs/desktops/gnome-3/apps/file-roller/src.nix b/pkgs/desktops/gnome-3/apps/file-roller/src.nix
deleted file mode 100644
index 090c88e1d3e3..000000000000
--- a/pkgs/desktops/gnome-3/apps/file-roller/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "file-roller-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/file-roller/3.26/file-roller-3.26.2.tar.xz;
-    sha256 = "3e677b8e1c2f19aead69cf4fc419a19fc3373aaf5d7bf558b4f077f10bbba8a5";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gedit/default.nix b/pkgs/desktops/gnome-3/apps/gedit/default.nix
index f087b3129c48..d8f272931d9a 100644
--- a/pkgs/desktops/gnome-3/apps/gedit/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gedit/default.nix
@@ -4,7 +4,17 @@
 , gnome3, librsvg, gdk_pixbuf, file, gspell }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gedit-${version}";
+  version = "3.22.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gedit/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "aa7bc3618fffa92fdb7daf2f57152e1eb7962e68561a9c92813d7bbb7fc9492b";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gedit"; attrPath = "gnome3.gedit"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/apps/gedit/src.nix b/pkgs/desktops/gnome-3/apps/gedit/src.nix
deleted file mode 100644
index 7a68b75eb2a7..000000000000
--- a/pkgs/desktops/gnome-3/apps/gedit/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gedit-3.22.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gedit/3.22/gedit-3.22.1.tar.xz;
-    sha256 = "aa7bc3618fffa92fdb7daf2f57152e1eb7962e68561a9c92813d7bbb7fc9492b";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/ghex/default.nix b/pkgs/desktops/gnome-3/apps/ghex/default.nix
index 1179b2fdc5cf..1f8077ff4af8 100644
--- a/pkgs/desktops/gnome-3/apps/ghex/default.nix
+++ b/pkgs/desktops/gnome-3/apps/ghex/default.nix
@@ -2,7 +2,17 @@
   wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "ghex-${version}";
+  version = "3.18.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/ghex/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "c67450f86f9c09c20768f1af36c11a66faf460ea00fbba628a9089a6804808d3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "ghex"; attrPath = "gnome3.ghex"; };
+  };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
 
diff --git a/pkgs/desktops/gnome-3/apps/ghex/src.nix b/pkgs/desktops/gnome-3/apps/ghex/src.nix
deleted file mode 100644
index edaa51d94784..000000000000
--- a/pkgs/desktops/gnome-3/apps/ghex/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "ghex-3.18.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/ghex/3.18/ghex-3.18.3.tar.xz;
-    sha256 = "c67450f86f9c09c20768f1af36c11a66faf460ea00fbba628a9089a6804808d3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/glade/default.nix b/pkgs/desktops/gnome-3/apps/glade/default.nix
index 6f79eeb7aedf..0a6921bce6e3 100644
--- a/pkgs/desktops/gnome-3/apps/glade/default.nix
+++ b/pkgs/desktops/gnome-3/apps/glade/default.nix
@@ -4,7 +4,17 @@
 , gnome3, gdk_pixbuf, libxslt }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "glade-${version}";
+  version = "3.20.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/glade/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "07d1545570951aeded20e9fdc6d3d8a56aeefe2538734568c5335be336c6abed";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "glade"; attrPath = "gnome3.glade"; };
+  };
 
   nativeBuildInputs = [
     pkgconfig intltool itstool wrapGAppsHook docbook_xsl libxslt gobjectIntrospection
diff --git a/pkgs/desktops/gnome-3/apps/glade/src.nix b/pkgs/desktops/gnome-3/apps/glade/src.nix
deleted file mode 100644
index b244d2434c9e..000000000000
--- a/pkgs/desktops/gnome-3/apps/glade/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "glade-3.20.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/glade/3.20/glade-3.20.2.tar.xz;
-    sha256 = "07d1545570951aeded20e9fdc6d3d8a56aeefe2538734568c5335be336c6abed";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix b/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
index 8f9a33f01b4d..674aa84dbc27 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
@@ -9,7 +9,17 @@
 # TODO: ovirt (optional)
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-boxes-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-boxes/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "d00fc083182963dc1bbdee5e743ceb28ba03fbf5a9ea87c78d29dca5fb5b9210";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-boxes"; attrPath = "gnome3.gnome-boxes"; };
+  };
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-boxes/src.nix b/pkgs/desktops/gnome-3/apps/gnome-boxes/src.nix
deleted file mode 100644
index b2c2f378bff4..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-boxes/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-boxes-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-boxes/3.26/gnome-boxes-3.26.2.tar.xz;
-    sha256 = "d00fc083182963dc1bbdee5e743ceb28ba03fbf5a9ea87c78d29dca5fb5b9210";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix b/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
index a464b823ba2b..e82d004995da 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
@@ -3,7 +3,17 @@
 , glib, gnome-online-accounts, gsettings-desktop-schemas }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-calendar-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-calendar/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "19a2c737b9662be926fb68e7dc731d94c523d23fa7a49e435e6a0346770dc50e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-calendar"; attrPath = "gnome3.gnome-calendar"; };
+  };
 
   NIX_CFLAGS_COMPILE = "-I${gnome3.glib.dev}/include/gio-unix-2.0";
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-calendar/src.nix b/pkgs/desktops/gnome-3/apps/gnome-calendar/src.nix
deleted file mode 100644
index 39f7f333495e..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-calendar/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-calendar-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-calendar/3.26/gnome-calendar-3.26.2.tar.xz;
-    sha256 = "19a2c737b9662be926fb68e7dc731d94c523d23fa7a49e435e6a0346770dc50e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix b/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
index c1efd7e24ccd..5b36ea83ee13 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
@@ -2,7 +2,17 @@
 , intltool, gobjectIntrospection, gjs, gdk_pixbuf, librsvg }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-characters-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-characters/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "69d0218b4ce16451bef0e6ee9f9f18f5b7851aa3a758b13315d592b077374f7b";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-characters"; attrPath = "gnome3.gnome-characters"; };
+  };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook intltool ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/apps/gnome-characters/src.nix b/pkgs/desktops/gnome-3/apps/gnome-characters/src.nix
deleted file mode 100644
index d7ac2cd8829b..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-characters/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-characters-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-characters/3.26/gnome-characters-3.26.2.tar.xz;
-    sha256 = "69d0218b4ce16451bef0e6ee9f9f18f5b7851aa3a758b13315d592b077374f7b";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix b/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
index 219a52b9843e..47fd071bf839 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
@@ -4,7 +4,17 @@
 , gnome3, gdk_pixbuf, geoclue2, libgweather }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-clocks-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-clocks/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2bd8d8df1d6aa0feddd4afc15d84b1308202fda59a3c3be42e3bce7e9ccd11f7";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-clocks"; attrPath = "gnome3.gnome-clocks"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-clocks/src.nix b/pkgs/desktops/gnome-3/apps/gnome-clocks/src.nix
deleted file mode 100644
index ea7878f48695..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-clocks/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-clocks-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-clocks/3.26/gnome-clocks-3.26.1.tar.xz;
-    sha256 = "2bd8d8df1d6aa0feddd4afc15d84b1308202fda59a3c3be42e3bce7e9ccd11f7";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix b/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
index f565b9b8aae1..15c597980838 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-documents/default.nix
@@ -6,7 +6,17 @@
 , gmp, desktop-file-utils, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-documents-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-documents/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "ba0d3084359d666b90733bb43206d24190fa85304bfe45f674ab6e6a27cb7fc9";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-documents"; attrPath = "gnome3.gnome-documents"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-documents/src.nix b/pkgs/desktops/gnome-3/apps/gnome-documents/src.nix
deleted file mode 100644
index de0332ea4037..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-documents/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-documents-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-documents/3.26/gnome-documents-3.26.1.tar.xz;
-    sha256 = "ba0d3084359d666b90733bb43206d24190fa85304bfe45f674ab6e6a27cb7fc9";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix b/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
index 0c75ebd7c783..8531fc1c7c04 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, gnome3, intltool, itstool, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-getting-started-docs-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-getting-started-docs/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "34f45f6b5759a46547e834f1b706ae7485fd94e1af5354154420d8910ec67775";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-getting-started-docs"; attrPath = "gnome3.gnome-getting-started-docs"; };
+  };
 
   buildInputs = [ intltool itstool libxml2 ];
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/src.nix b/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/src.nix
deleted file mode 100644
index 3f1341b7cab8..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-getting-started-docs-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-getting-started-docs/3.26/gnome-getting-started-docs-3.26.2.tar.xz;
-    sha256 = "34f45f6b5759a46547e834f1b706ae7485fd94e1af5354154420d8910ec67775";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix b/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
index 416975a88a5d..66596d916a93 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-logs/default.nix
@@ -2,7 +2,17 @@
 , intltool, itstool, libxml2, systemd }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-logs-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-logs/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "e17ca011e7bea756bd841e027e56cfe8c214bed4817cb35732ace4aa73ff8f5c";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-logs"; attrPath = "gnome3.gnome-logs"; };
+  };
 
   configureFlags = [ "--disable-tests" ];
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-logs/src.nix b/pkgs/desktops/gnome-3/apps/gnome-logs/src.nix
deleted file mode 100644
index 951620986685..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-logs/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-logs-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-logs/3.26/gnome-logs-3.26.2.tar.xz;
-    sha256 = "e17ca011e7bea756bd841e027e56cfe8c214bed4817cb35732ace4aa73ff8f5c";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix b/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
index 1389c8f4994f..c03397a40d89 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
@@ -4,7 +4,17 @@
 , webkitgtk }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-maps-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-maps/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "031d5c4a1aa79f1fbaf87f01fb790f7aab1d8dcd5d061cb5daf0fa96eaa18050";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-maps"; attrPath = "gnome3.gnome-maps"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-maps/src.nix b/pkgs/desktops/gnome-3/apps/gnome-maps/src.nix
deleted file mode 100644
index 0fac7f865ca6..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-maps/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-maps-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-maps/3.26/gnome-maps-3.26.2.tar.xz;
-    sha256 = "031d5c4a1aa79f1fbaf87f01fb790f7aab1d8dcd5d061cb5daf0fa96eaa18050";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-music/default.nix b/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
index 58160f089735..86ea9b6590e1 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
@@ -4,7 +4,17 @@
 , makeWrapper, itstool, gnome3, librsvg, gst_all_1 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-music-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-music/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7197dff12f441a52b4011512bfe8ec926f2ce4ca511f79b078e0e612d612f8c3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-music"; attrPath = "gnome3.gnome-music"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-music/src.nix b/pkgs/desktops/gnome-3/apps/gnome-music/src.nix
deleted file mode 100644
index 3ac99e146d46..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-music/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-music-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-music/3.26/gnome-music-3.26.1.tar.xz;
-    sha256 = "7197dff12f441a52b4011512bfe8ec926f2ce4ca511f79b078e0e612d612f8c3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-photos/default.nix b/pkgs/desktops/gnome-3/apps/gnome-photos/default.nix
index c261aa1f1ef2..2837e1d093f5 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-photos/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-photos/default.nix
@@ -6,7 +6,17 @@
 , dleyna-renderer }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-photos-${version}";
+  version = "3.26.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-photos/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "028de4c8662b7d1dc3ca6c3fbe3ce7f6bb90dd097708e99f235a409756dbadab";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-photos"; attrPath = "gnome3.gnome-photos"; };
+  };
 
   # doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-photos/src.nix b/pkgs/desktops/gnome-3/apps/gnome-photos/src.nix
deleted file mode 100644
index b9bba1ab6a47..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-photos/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-photos-3.26.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-photos/3.26/gnome-photos-3.26.3.tar.xz;
-    sha256 = "028de4c8662b7d1dc3ca6c3fbe3ce7f6bb90dd097708e99f235a409756dbadab";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix b/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix
index 8e06f674c69c..a295ef456df4 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-power-manager/default.nix
@@ -12,7 +12,17 @@
 , gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-power-manager-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-power-manager/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "20aee0b0b4015e7cc6fbabc3cbc4344c07c230fe3d195e90c8ae0dc5d55a2d4e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-power-manager"; attrPath = "gnome3.gnome-power-manager"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-power-manager/src.nix b/pkgs/desktops/gnome-3/apps/gnome-power-manager/src.nix
deleted file mode 100644
index bdffa453504f..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-power-manager/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-power-manager-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-power-manager/3.26/gnome-power-manager-3.26.0.tar.xz;
-    sha256 = "20aee0b0b4015e7cc6fbabc3cbc4344c07c230fe3d195e90c8ae0dc5d55a2d4e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix b/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
index a82f075f5731..9e43a3c52b45 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
@@ -2,7 +2,17 @@
 , libgweather, intltool, itstool, geoclue2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-weather-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-weather/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "965cc0d1b4d4e53c06d494db96f0b124d232af5c0e731ca900edd10f77a74c78";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-weather"; attrPath = "gnome3.gnome-weather"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/apps/gnome-weather/src.nix b/pkgs/desktops/gnome-3/apps/gnome-weather/src.nix
deleted file mode 100644
index d12db5132536..000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-weather/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-weather-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-weather/3.26/gnome-weather-3.26.0.tar.xz;
-    sha256 = "965cc0d1b4d4e53c06d494db96f0b124d232af5c0e731ca900edd10f77a74c78";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/polari/default.nix b/pkgs/desktops/gnome-3/apps/polari/default.nix
index f2bd38709f14..f1d6dba21b08 100644
--- a/pkgs/desktops/gnome-3/apps/polari/default.nix
+++ b/pkgs/desktops/gnome-3/apps/polari/default.nix
@@ -4,7 +4,17 @@
 , gnome3, wrapGAppsHook, telepathy-logger, gspell }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "polari-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/polari/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2f36361dacf5d924d134f231fdb36ec4539f7495fce325d9b2f2728bd17cc190";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "polari"; attrPath = "gnome3.polari"; };
+  };
 
   propagatedUserEnvPkgs = [ telepathy-idle telepathy-logger ];
 
diff --git a/pkgs/desktops/gnome-3/apps/polari/src.nix b/pkgs/desktops/gnome-3/apps/polari/src.nix
deleted file mode 100644
index 8af7c33846db..000000000000
--- a/pkgs/desktops/gnome-3/apps/polari/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "polari-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/polari/3.26/polari-3.26.2.tar.xz;
-    sha256 = "2f36361dacf5d924d134f231fdb36ec4539f7495fce325d9b2f2728bd17cc190";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/seahorse/default.nix b/pkgs/desktops/gnome-3/apps/seahorse/default.nix
index 14e59407d6a8..1a8c2f55b1b0 100644
--- a/pkgs/desktops/gnome-3/apps/seahorse/default.nix
+++ b/pkgs/desktops/gnome-3/apps/seahorse/default.nix
@@ -5,7 +5,17 @@
 , libsecret, avahi, p11-kit, openssh }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "seahorse-${version}";
+  version = "3.20.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/seahorse/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "e2b07461ed54a8333e5628e9b8e517ec2b731068377bf376570aad998274c6df";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "seahorse"; attrPath = "gnome3.seahorse"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/apps/seahorse/src.nix b/pkgs/desktops/gnome-3/apps/seahorse/src.nix
deleted file mode 100644
index 0ae195a0a7ba..000000000000
--- a/pkgs/desktops/gnome-3/apps/seahorse/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "seahorse-3.20.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/seahorse/3.20/seahorse-3.20.0.tar.xz;
-    sha256 = "e2b07461ed54a8333e5628e9b8e517ec2b731068377bf376570aad998274c6df";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/vinagre/default.nix b/pkgs/desktops/gnome-3/apps/vinagre/default.nix
index e719fbf9f219..4f358cf0b4f6 100644
--- a/pkgs/desktops/gnome-3/apps/vinagre/default.nix
+++ b/pkgs/desktops/gnome-3/apps/vinagre/default.nix
@@ -2,7 +2,17 @@
 , libsecret, itstool, makeWrapper, librsvg }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "vinagre-${version}";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/vinagre/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "cd1cdbacca25c8d1debf847455155ee798c3e67a20903df8b228d4ece5505e82";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "vinagre"; attrPath = "gnome3.vinagre"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 vte libxml2 gtkvnc intltool libsecret
diff --git a/pkgs/desktops/gnome-3/apps/vinagre/src.nix b/pkgs/desktops/gnome-3/apps/vinagre/src.nix
deleted file mode 100644
index 3d1357c49898..000000000000
--- a/pkgs/desktops/gnome-3/apps/vinagre/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "vinagre-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/vinagre/3.22/vinagre-3.22.0.tar.xz;
-    sha256 = "cd1cdbacca25c8d1debf847455155ee798c3e67a20903df8b228d4ece5505e82";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix b/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
index 780a315ca660..2178004a43ac 100644
--- a/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
+++ b/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
@@ -2,7 +2,17 @@
 , iconnamingutils, gtk, gdk_pixbuf, librsvg, hicolor-icon-theme }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "adwaita-icon-theme-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/adwaita-icon-theme/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "28ba7392c7761996efd780779167ea6c940eedfb1bf37cfe9bccb7021f54d79d";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "adwaita-icon-theme"; attrPath = "gnome3.adwaita-icon-theme"; };
+  };
 
   # For convenience, we can specify adwaita-icon-theme only in packages
   propagatedBuildInputs = [ hicolor-icon-theme ];
diff --git a/pkgs/desktops/gnome-3/core/adwaita-icon-theme/src.nix b/pkgs/desktops/gnome-3/core/adwaita-icon-theme/src.nix
deleted file mode 100644
index 24f0955659ec..000000000000
--- a/pkgs/desktops/gnome-3/core/adwaita-icon-theme/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "adwaita-icon-theme-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/adwaita-icon-theme/3.26/adwaita-icon-theme-3.26.1.tar.xz;
-    sha256 = "28ba7392c7761996efd780779167ea6c940eedfb1bf37cfe9bccb7021f54d79d";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/baobab/default.nix b/pkgs/desktops/gnome-3/core/baobab/default.nix
index f94cb3c57c46..1ff67e35f0fd 100644
--- a/pkgs/desktops/gnome-3/core/baobab/default.nix
+++ b/pkgs/desktops/gnome-3/core/baobab/default.nix
@@ -4,7 +4,17 @@
 , gnome3, librsvg, gdk_pixbuf, file }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "baobab-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/baobab/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7a59ab5945f5d90725231b10d85a1893403f56660b1627c111d2b4eeb1ef787e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "baobab"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/baobab/src.nix b/pkgs/desktops/gnome-3/core/baobab/src.nix
deleted file mode 100644
index d3e2f03feb8b..000000000000
--- a/pkgs/desktops/gnome-3/core/baobab/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "baobab-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/baobab/3.26/baobab-3.26.1.tar.xz;
-    sha256 = "7a59ab5945f5d90725231b10d85a1893403f56660b1627c111d2b4eeb1ef787e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/dconf-editor/default.nix b/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
index 49780aeea607..47ddf6b64861 100644
--- a/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
+++ b/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
@@ -2,7 +2,17 @@
 , libxml2, intltool, docbook_xsl_ns, docbook_xsl, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "dconf-editor-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/dconf-editor/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "28b453fe49c49d7dfaf07c85c01d7495913f93ab64a0b223c117eb17d1cb8ad1";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "dconf-editor"; attrPath = "gnome3.dconf-editor"; };
+  };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
 
diff --git a/pkgs/desktops/gnome-3/core/dconf-editor/src.nix b/pkgs/desktops/gnome-3/core/dconf-editor/src.nix
deleted file mode 100644
index b21630641d94..000000000000
--- a/pkgs/desktops/gnome-3/core/dconf-editor/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "dconf-editor-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/dconf-editor/3.26/dconf-editor-3.26.2.tar.xz;
-    sha256 = "28b453fe49c49d7dfaf07c85c01d7495913f93ab64a0b223c117eb17d1cb8ad1";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/empathy/default.nix b/pkgs/desktops/gnome-3/core/empathy/default.nix
index 0263a152f7dc..bf83c7aa8a15 100644
--- a/pkgs/desktops/gnome-3/core/empathy/default.nix
+++ b/pkgs/desktops/gnome-3/core/empathy/default.nix
@@ -10,7 +10,17 @@
 , isocodes, enchant, libchamplain, geoclue2, geocode-glib, cheese, libgudev }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "empathy-${version}";
+  version = "3.12.14";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/empathy/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7d86942ce97edd10ade0e6ae6a210d35e4d627fe4d223377d71fd1840bc6e3a3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "empathy"; };
+  };
 
   propagatedUserEnvPkgs = [
     gnome-online-accounts shared-mime-info
diff --git a/pkgs/desktops/gnome-3/core/empathy/src.nix b/pkgs/desktops/gnome-3/core/empathy/src.nix
deleted file mode 100644
index 7e54ed38fd36..000000000000
--- a/pkgs/desktops/gnome-3/core/empathy/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "empathy-3.12.14";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/empathy/3.12/empathy-3.12.14.tar.xz;
-    sha256 = "7d86942ce97edd10ade0e6ae6a210d35e4d627fe4d223377d71fd1840bc6e3a3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/eog/default.nix b/pkgs/desktops/gnome-3/core/eog/default.nix
index b41be5c9d14c..1acd6eb69425 100644
--- a/pkgs/desktops/gnome-3/core/eog/default.nix
+++ b/pkgs/desktops/gnome-3/core/eog/default.nix
@@ -2,7 +2,17 @@
 , shared-mime-info, wrapGAppsHook, librsvg, libexif, gobjectIntrospection }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "eog-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/eog/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "b53e3d4dfa7d0085b829a5fb95f148a099803c00ef276be7685efd5ec38807ad";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "eog"; attrPath = "gnome3.eog"; };
+  };
 
   nativeBuildInputs = [ pkgconfig gettext itstool wrapGAppsHook gobjectIntrospection ];
 
diff --git a/pkgs/desktops/gnome-3/core/eog/src.nix b/pkgs/desktops/gnome-3/core/eog/src.nix
deleted file mode 100644
index d0046d899bec..000000000000
--- a/pkgs/desktops/gnome-3/core/eog/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "eog-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/eog/3.26/eog-3.26.2.tar.xz;
-    sha256 = "b53e3d4dfa7d0085b829a5fb95f148a099803c00ef276be7685efd5ec38807ad";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/epiphany/default.nix b/pkgs/desktops/gnome-3/core/epiphany/default.nix
index aa8722f53f2e..18a27af7977e 100644
--- a/pkgs/desktops/gnome-3/core/epiphany/default.nix
+++ b/pkgs/desktops/gnome-3/core/epiphany/default.nix
@@ -5,7 +5,17 @@
 , gdk_pixbuf, gnome-common, gst_all_1, json-glib }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "epiphany-${version}";
+  version = "3.26.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/epiphany/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "390d50f975f8ab9228016eb60bf4b8ea9a39be0b31467e2d6c27ae75fa1e84ea";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "epiphany"; };
+  };
 
   # Tests need an X display
   mesonFlags = [ "-Dunit_tests=false" ];
diff --git a/pkgs/desktops/gnome-3/core/epiphany/src.nix b/pkgs/desktops/gnome-3/core/epiphany/src.nix
deleted file mode 100644
index 3365261b7bcf..000000000000
--- a/pkgs/desktops/gnome-3/core/epiphany/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "epiphany-3.26.4";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/epiphany/3.26/epiphany-3.26.4.tar.xz;
-    sha256 = "390d50f975f8ab9228016eb60bf4b8ea9a39be0b31467e2d6c27ae75fa1e84ea";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/evince/default.nix b/pkgs/desktops/gnome-3/core/evince/default.nix
index de5b20a49919..2d52e22c54cd 100644
--- a/pkgs/desktops/gnome-3/core/evince/default.nix
+++ b/pkgs/desktops/gnome-3/core/evince/default.nix
@@ -8,7 +8,17 @@
 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "evince-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/evince/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "79567bdb743cf0c3ed7b638da32afc9b850298f9b4edd532455df4a7e2a4c9d8";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "evince"; };
+  };
 
   nativeBuildInputs = [
     pkgconfig gobjectIntrospection intltool itstool wrapGAppsHook yelp-tools autoreconfHook
diff --git a/pkgs/desktops/gnome-3/core/evince/src.nix b/pkgs/desktops/gnome-3/core/evince/src.nix
deleted file mode 100644
index 6627be550884..000000000000
--- a/pkgs/desktops/gnome-3/core/evince/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "evince-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/evince/3.26/evince-3.26.0.tar.xz;
-    sha256 = "79567bdb743cf0c3ed7b638da32afc9b850298f9b4edd532455df4a7e2a4c9d8";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix b/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
index bb45952f1d53..f5723f673bb2 100644
--- a/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
+++ b/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
@@ -4,7 +4,17 @@
 , vala, cmake, kerberos, openldap, webkitgtk, libaccounts-glib, json-glib }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "evolution-data-server-${version}";
+  version = "3.26.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/evolution-data-server/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "63b1ae5f76be818862f455bf841b5ebb1ec3e1f4df6d3a16dc2be348b7e0a1c5";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "evolution-data-server"; };
+  };
 
   nativeBuildInputs = [
     cmake pkgconfig intltool python3 gperf makeWrapper
diff --git a/pkgs/desktops/gnome-3/core/evolution-data-server/src.nix b/pkgs/desktops/gnome-3/core/evolution-data-server/src.nix
deleted file mode 100644
index 906df1b2160a..000000000000
--- a/pkgs/desktops/gnome-3/core/evolution-data-server/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "evolution-data-server-3.26.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/evolution-data-server/3.26/evolution-data-server-3.26.3.tar.xz;
-    sha256 = "63b1ae5f76be818862f455bf841b5ebb1ec3e1f4df6d3a16dc2be348b7e0a1c5";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/folks/default.nix b/pkgs/desktops/gnome-3/core/folks/default.nix
index 89f01341e9cd..776f76642222 100644
--- a/pkgs/desktops/gnome-3/core/folks/default.nix
+++ b/pkgs/desktops/gnome-3/core/folks/default.nix
@@ -5,13 +5,12 @@
 # TODO: enable more folks backends
 
 let
-  majorVersion = "0.11";
-in
-stdenv.mkDerivation rec {
-  name = "folks-${majorVersion}.4";
+  version = "0.11.4";
+in stdenv.mkDerivation rec {
+  name = "folks-${version}";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/folks/${majorVersion}/${name}.tar.xz";
+    url = "mirror://gnome/sources/folks/${gnome3.versionBranch version}/${name}.tar.xz";
     sha256 = "16hqh2gxlbx0b0hgq216hndr1m72vj54jvryzii9zqkk0g9kxc57";
   };
 
@@ -30,6 +29,14 @@ stdenv.mkDerivation rec {
 
   postBuild = "rm -rf $out/share/gtk-doc";
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "folks";
+      attrPath = "gnome3.folks";
+      versionPolicy = "none";
+    };
+  };
+
   meta = {
     description = "Folks";
 
diff --git a/pkgs/desktops/gnome-3/core/gcr/default.nix b/pkgs/desktops/gnome-3/core/gcr/default.nix
index 7ecf79391f0c..aa26c660768b 100644
--- a/pkgs/desktops/gnome-3/core/gcr/default.nix
+++ b/pkgs/desktops/gnome-3/core/gcr/default.nix
@@ -3,7 +3,17 @@
 , gobjectIntrospection, makeWrapper, libxslt, vala, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gcr-${version}";
+  version = "3.20.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gcr/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "90572c626d8a708225560c42b4421f7941315247fa1679d4ef569bde7f4bb379";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gcr"; attrPath = "gnome3.gcr"; };
+  };
 
   outputs = [ "out" "dev" ];
 
diff --git a/pkgs/desktops/gnome-3/core/gcr/src.nix b/pkgs/desktops/gnome-3/core/gcr/src.nix
deleted file mode 100644
index d166f033266c..000000000000
--- a/pkgs/desktops/gnome-3/core/gcr/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gcr-3.20.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gcr/3.20/gcr-3.20.0.tar.xz;
-    sha256 = "90572c626d8a708225560c42b4421f7941315247fa1679d4ef569bde7f4bb379";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gdm/default.nix b/pkgs/desktops/gnome-3/core/gdm/default.nix
index a6c8375e9b52..ef9439a30291 100644
--- a/pkgs/desktops/gnome-3/core/gdm/default.nix
+++ b/pkgs/desktops/gnome-3/core/gdm/default.nix
@@ -4,7 +4,17 @@
 , librsvg, coreutils }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gdm-${version}";
+  version = "3.26.2.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gdm/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "17ddcb00602c2b426de58bb4b0d99af9de27450a8557dcc5ec850c080d55ad57";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gdm"; attrPath = "gnome3.gdm"; };
+  };
 
   # Only needed to make it build
   preConfigure = ''
diff --git a/pkgs/desktops/gnome-3/core/gdm/src.nix b/pkgs/desktops/gnome-3/core/gdm/src.nix
deleted file mode 100644
index 8d92167a0391..000000000000
--- a/pkgs/desktops/gnome-3/core/gdm/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gdm-3.26.2.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gdm/3.26/gdm-3.26.2.1.tar.xz;
-    sha256 = "17ddcb00602c2b426de58bb4b0d99af9de27450a8557dcc5ec850c080d55ad57";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/geocode-glib/default.nix b/pkgs/desktops/gnome-3/core/geocode-glib/default.nix
index 341f1c4f095e..e97e557e87a0 100644
--- a/pkgs/desktops/gnome-3/core/geocode-glib/default.nix
+++ b/pkgs/desktops/gnome-3/core/geocode-glib/default.nix
@@ -1,7 +1,17 @@
 { fetchurl, stdenv, pkgconfig, gnome3, intltool, libsoup, json-glib }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "geocode-glib-${version}";
+  version = "3.24.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/geocode-glib/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "19c1fef4fd89eb4bfe6decca45ac45a2eca9bb7933be560ce6c172194840c35e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "geocode-glib"; attrPath = "gnome3.geocode-glib"; };
+  };
 
   buildInputs = with gnome3;
     [ intltool pkgconfig glib libsoup json-glib ];
diff --git a/pkgs/desktops/gnome-3/core/geocode-glib/src.nix b/pkgs/desktops/gnome-3/core/geocode-glib/src.nix
deleted file mode 100644
index 394e3a68c35c..000000000000
--- a/pkgs/desktops/gnome-3/core/geocode-glib/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "geocode-glib-3.24.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/geocode-glib/3.24/geocode-glib-3.24.0.tar.xz;
-    sha256 = "19c1fef4fd89eb4bfe6decca45ac45a2eca9bb7933be560ce6c172194840c35e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gjs/default.nix b/pkgs/desktops/gnome-3/core/gjs/default.nix
index e2ae74931030..6e9f6c464df1 100644
--- a/pkgs/desktops/gnome-3/core/gjs/default.nix
+++ b/pkgs/desktops/gnome-3/core/gjs/default.nix
@@ -3,7 +3,17 @@
 , makeWrapper }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gjs-${version}";
+  version = "1.50.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gjs/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "b336e8709347e3c94245f6cbc3465f9a49f3ae491a25f49f8a97268f5235b93a";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gjs"; attrPath = "gnome3.gjs"; };
+  };
 
   outputs = [ "out" "installedTests" ];
 
diff --git a/pkgs/desktops/gnome-3/core/gjs/src.nix b/pkgs/desktops/gnome-3/core/gjs/src.nix
deleted file mode 100644
index d42b2e845585..000000000000
--- a/pkgs/desktops/gnome-3/core/gjs/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gjs-1.50.4";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gjs/1.50/gjs-1.50.4.tar.xz;
-    sha256 = "b336e8709347e3c94245f6cbc3465f9a49f3ae491a25f49f8a97268f5235b93a";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix b/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
index eb801caf5657..0aea3c4eac48 100644
--- a/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, pkgconfig, gnome3, intltool }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-backgrounds-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-backgrounds/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "3a8ba8d3463d70bce2377b168218e32367c0020f2d0caf611e7e39066081f94f";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-backgrounds"; attrPath = "gnome3.gnome-backgrounds"; };
+  };
 
   nativeBuildInputs = [ pkgconfig intltool ];
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-backgrounds/src.nix b/pkgs/desktops/gnome-3/core/gnome-backgrounds/src.nix
deleted file mode 100644
index 9d86b7168ad0..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-backgrounds/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-backgrounds-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-backgrounds/3.26/gnome-backgrounds-3.26.2.tar.xz;
-    sha256 = "3a8ba8d3463d70bce2377b168218e32367c0020f2d0caf611e7e39066081f94f";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix b/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
index 12e91b8e431e..11816f68ff48 100644
--- a/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
@@ -2,7 +2,17 @@
 , udev, itstool, libxml2, wrapGAppsHook, libnotify, libcanberra-gtk3, gobjectIntrospection }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-bluetooth-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-bluetooth/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "1d2c7b94fc76a833dad0d4d91344e9a5a7b4aad740c5a90944bd25c5be7e784f";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-bluetooth"; attrPath = "gnome3.gnome-bluetooth"; };
+  };
 
   nativeBuildInputs = [ meson ninja intltool itstool pkgconfig libxml2 wrapGAppsHook gobjectIntrospection ];
   buildInputs = [ glib gtk3 udev libnotify libcanberra-gtk3
diff --git a/pkgs/desktops/gnome-3/core/gnome-bluetooth/src.nix b/pkgs/desktops/gnome-3/core/gnome-bluetooth/src.nix
deleted file mode 100644
index 31aab6649d75..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-bluetooth/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-bluetooth-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-bluetooth/3.26/gnome-bluetooth-3.26.1.tar.xz;
-    sha256 = "1d2c7b94fc76a833dad0d4d91344e9a5a7b4aad740c5a90944bd25c5be7e784f";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix b/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
index 5382bce44a01..8376bea1a038 100644
--- a/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
@@ -3,7 +3,17 @@
 , itstool, gnome3, librsvg, gdk_pixbuf, mpfr, gmp, libsoup, libmpc }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-calculator-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-calculator/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "62215b37fcd73a6bbb106ebd0f25051c81ff0cf6ad84fd4a3ea176bceb5863c7";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-calculator"; attrPath = "gnome3.gnome-calculator"; };
+  };
 
   NIX_CFLAGS_COMPILE = "-I${gnome3.glib.dev}/include/gio-unix-2.0";
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-calculator/src.nix b/pkgs/desktops/gnome-3/core/gnome-calculator/src.nix
deleted file mode 100644
index 517220c94572..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-calculator/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-calculator-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-calculator/3.26/gnome-calculator-3.26.0.tar.xz;
-    sha256 = "62215b37fcd73a6bbb106ebd0f25051c81ff0cf6ad84fd4a3ea176bceb5863c7";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-common/default.nix b/pkgs/desktops/gnome-3/core/gnome-common/default.nix
index 8623e598dc20..23fd157a528a 100644
--- a/pkgs/desktops/gnome-3/core/gnome-common/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-common/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, which, gnome3, autoconf, automake }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-common-${version}";
+  version = "3.18.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-common/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "22569e370ae755e04527b76328befc4c73b62bfd4a572499fde116b8318af8cf";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-common"; attrPath = "gnome3.gnome-common"; };
+  };
 
   patches = [(fetchurl {
     name = "gnome-common-patch";
diff --git a/pkgs/desktops/gnome-3/core/gnome-common/src.nix b/pkgs/desktops/gnome-3/core/gnome-common/src.nix
deleted file mode 100644
index 8ffe7e20e1a9..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-common/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-common-3.18.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-common/3.18/gnome-common-3.18.0.tar.xz;
-    sha256 = "22569e370ae755e04527b76328befc4c73b62bfd4a572499fde116b8318af8cf";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix b/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
index d05ab4470c56..eb2f7631ba8c 100644
--- a/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
@@ -6,7 +6,17 @@
 , libsoup, vala, dbus-glib, automake, autoconf }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-contacts-${version}";
+  version = "3.26";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-contacts/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f819ac74b2ad581f9741614627f49ef519713324afd9e4fc0ea5ac261a5f68c1";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-contacts"; attrPath = "gnome3.gnome-contacts"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-contacts/src.nix b/pkgs/desktops/gnome-3/core/gnome-contacts/src.nix
deleted file mode 100644
index bf3df1bc84fe..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-contacts/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-contacts-3.26";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-contacts/3.26/gnome-contacts-3.26.tar.xz;
-    sha256 = "f819ac74b2ad581f9741614627f49ef519713324afd9e4fc0ea5ac261a5f68c1";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix b/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
index 1c4d4858bf52..8774de41c4b2 100644
--- a/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
@@ -8,7 +8,17 @@
 , fontconfig, sound-theme-freedesktop, grilo }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-control-center-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-control-center/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "07aed27d6317f2cad137daa6d94a37ad02c32b958dcd30c8f07d0319abfb04c5";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-control-center"; attrPath = "gnome3.gnome-control-center"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-control-center/src.nix b/pkgs/desktops/gnome-3/core/gnome-control-center/src.nix
deleted file mode 100644
index 948768904aea..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-control-center/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-control-center-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-control-center/3.26/gnome-control-center-3.26.2.tar.xz;
-    sha256 = "07aed27d6317f2cad137daa6d94a37ad02c32b958dcd30c8f07d0319abfb04c5";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix b/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
index deabb41224f0..7e85e27d6be9 100644
--- a/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
@@ -3,7 +3,17 @@
 , libseccomp, bubblewrap, gobjectIntrospection }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-desktop-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-desktop/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f7561a7a313fc474b2c390cd9696df1f5c1e1556080e43f4afe042b1060e5f2a";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-desktop"; attrPath = "gnome3.gnome-desktop"; };
+  };
 
   # this should probably be setuphook for glib
   NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
diff --git a/pkgs/desktops/gnome-3/core/gnome-desktop/src.nix b/pkgs/desktops/gnome-3/core/gnome-desktop/src.nix
deleted file mode 100644
index f3c0d446d3f1..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-desktop/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-desktop-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-desktop/3.26/gnome-desktop-3.26.2.tar.xz;
-    sha256 = "f7561a7a313fc474b2c390cd9696df1f5c1e1556080e43f4afe042b1060e5f2a";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix b/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
index 0327ce9862bc..95fcfac1d751 100644
--- a/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
@@ -3,7 +3,17 @@
 , gnome3, gtk, glib }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-dictionary-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-dictionary/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "16b8bc248dcf68987826d5e39234b1bb7fd24a2607fcdbf4258fde88f012f300";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-dictionary"; attrPath = "gnome3.gnome-dictionary"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-dictionary/src.nix b/pkgs/desktops/gnome-3/core/gnome-dictionary/src.nix
deleted file mode 100644
index 92a50430bd1f..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-dictionary/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-dictionary-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-dictionary/3.26/gnome-dictionary-3.26.1.tar.xz;
-    sha256 = "16b8bc248dcf68987826d5e39234b1bb7fd24a2607fcdbf4258fde88f012f300";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix b/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
index c37f824a5613..0937f5c30823 100644
--- a/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
@@ -4,7 +4,17 @@
 , libcanberra-gtk3, libxslt, docbook_xsl, libpwquality }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-disk-utility-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-disk-utility/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "aa2b96c2c64d8bde6cf802ff8da5796720d0becb21111342ced0637961e256f2";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-disk-utility"; attrPath = "gnome3.gnome-disk-utility"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-disk-utility/src.nix b/pkgs/desktops/gnome-3/core/gnome-disk-utility/src.nix
deleted file mode 100644
index e3241153a930..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-disk-utility/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-disk-utility-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-disk-utility/3.26/gnome-disk-utility-3.26.2.tar.xz;
-    sha256 = "aa2b96c2c64d8bde6cf802ff8da5796720d0becb21111342ced0637961e256f2";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix b/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
index 6908a5161a06..3774ff32db04 100644
--- a/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
@@ -3,7 +3,17 @@
 , wrapGAppsHook, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-font-viewer-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-font-viewer/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "02768a62b4033de5ef9d00602e8c29e5de05255f879b0d9b4d731be9648fe9a0";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-font-viewer"; attrPath = "gnome3.gnome-font-viewer"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-font-viewer/src.nix b/pkgs/desktops/gnome-3/core/gnome-font-viewer/src.nix
deleted file mode 100644
index c31f09938c92..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-font-viewer/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-font-viewer-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-font-viewer/3.26/gnome-font-viewer-3.26.0.tar.xz;
-    sha256 = "02768a62b4033de5ef9d00602e8c29e5de05255f879b0d9b4d731be9648fe9a0";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix b/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
index 9c1282ecc4cd..f7f06e35d3ac 100644
--- a/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
@@ -3,7 +3,17 @@
 , docbook_xsl, docbook_xml_dtd_42, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-keyring-${version}";
+  version = "3.20.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-keyring/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "134ci3mn6jjap59z3lrvyiip7zf2nlw5xvanr44yajs57xr4x5lp";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-keyring"; attrPath = "gnome3.gnome-keyring"; };
+  };
 
   outputs = [ "out" "dev" ];
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-keyring/src.nix b/pkgs/desktops/gnome-3/core/gnome-keyring/src.nix
deleted file mode 100644
index ffee6211232e..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-keyring/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-keyring-3.20.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-keyring/3.20/gnome-keyring-3.20.1.tar.xz;
-    sha256 = "134ci3mn6jjap59z3lrvyiip7zf2nlw5xvanr44yajs57xr4x5lp";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-online-accounts/default.nix b/pkgs/desktops/gnome-3/core/gnome-online-accounts/default.nix
index b0edf4f978f1..2abe8b28c039 100644
--- a/pkgs/desktops/gnome-3/core/gnome-online-accounts/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-online-accounts/default.nix
@@ -5,7 +5,17 @@
 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-online-accounts-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-online-accounts/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "49f8760d86fe33057eaeeb4f1667bc7f6163e428591e7aed9575563be10b17d1";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-online-accounts"; attrPath = "gnome3.gnome-online-accounts"; };
+  };
 
   NIX_CFLAGS_COMPILE = "-I${dbus-glib.dev}/include/dbus-1.0 -I${dbus_libs.dev}/include/dbus-1.0";
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-online-accounts/src.nix b/pkgs/desktops/gnome-3/core/gnome-online-accounts/src.nix
deleted file mode 100644
index c43183c7c57d..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-online-accounts/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-online-accounts-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-online-accounts/3.26/gnome-online-accounts-3.26.2.tar.xz;
-    sha256 = "49f8760d86fe33057eaeeb4f1667bc7f6163e428591e7aed9575563be10b17d1";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix b/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix
index 2ef1ae2fa3e0..1df5465382a9 100644
--- a/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-online-miners/default.nix
@@ -2,7 +2,17 @@
 , libsoup, json-glib, gmp, openssl, dleyna-server, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-online-miners-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-online-miners/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7f404db5eccb87524a5dfcef5b6f38b11047b371081559afbe48c34dbca2a98e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-online-miners"; attrPath = "gnome3.gnome-online-miners"; };
+  };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
   buildInputs = [ glib gnome3.libgdata libxml2 libsoup gmp openssl
diff --git a/pkgs/desktops/gnome-3/core/gnome-online-miners/src.nix b/pkgs/desktops/gnome-3/core/gnome-online-miners/src.nix
deleted file mode 100644
index 3b8306c6a1a5..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-online-miners/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-online-miners-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-online-miners/3.26/gnome-online-miners-3.26.0.tar.xz;
-    sha256 = "7f404db5eccb87524a5dfcef5b6f38b11047b371081559afbe48c34dbca2a98e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix b/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
index c4030f38d5d5..1f7aa4d874ad 100644
--- a/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
@@ -3,7 +3,17 @@
 , gnome3, librsvg, gdk_pixbuf }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-screenshot-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-screenshot/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "1bbc11595d3822f4b92319cdf9ba49dd00f5471b6046c590847dc424a874c8bb";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-screenshot"; attrPath = "gnome3.gnome-screenshot"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-screenshot/src.nix b/pkgs/desktops/gnome-3/core/gnome-screenshot/src.nix
deleted file mode 100644
index 72b1e6625452..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-screenshot/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-screenshot-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-screenshot/3.26/gnome-screenshot-3.26.0.tar.xz;
-    sha256 = "1bbc11595d3822f4b92319cdf9ba49dd00f5471b6046c590847dc424a874c8bb";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-session/default.nix b/pkgs/desktops/gnome-3/core/gnome-session/default.nix
index c12b96f60905..c8bc61462213 100644
--- a/pkgs/desktops/gnome-3/core/gnome-session/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-session/default.nix
@@ -2,7 +2,17 @@
 , libxslt, intltool, makeWrapper, systemd, xorg, epoxy }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-session-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-session/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "d9414b368db982d3837ca106e64019f18e6cdd5b13965bea6c7d02ddf5103708";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-session"; attrPath = "gnome3.gnome-session"; };
+  };
 
   configureFlags = "--enable-systemd";
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-session/src.nix b/pkgs/desktops/gnome-3/core/gnome-session/src.nix
deleted file mode 100644
index bb9dec1efc23..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-session/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-session-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-session/3.26/gnome-session-3.26.1.tar.xz;
-    sha256 = "d9414b368db982d3837ca106e64019f18e6cdd5b13965bea6c7d02ddf5103708";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix b/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
index 6741eb81ade6..e3c84dfa9fd8 100644
--- a/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
@@ -4,7 +4,17 @@
 , docbook_xsl, docbook_xsl_ns, wrapGAppsHook, ibus, xkeyboard_config, tzdata }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-settings-daemon-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-settings-daemon/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "5a3d156b35e03fa3c28fddd0321f6726082a711973dee2af686370faae2e75e4";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-settings-daemon"; attrPath = "gnome3.gnome-settings-daemon"; };
+  };
 
   # fatal error: gio/gunixfdlist.h: No such file or directory
   NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
diff --git a/pkgs/desktops/gnome-3/core/gnome-settings-daemon/src.nix b/pkgs/desktops/gnome-3/core/gnome-settings-daemon/src.nix
deleted file mode 100644
index 1c3fbbfc2efa..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-settings-daemon/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-settings-daemon-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-settings-daemon/3.26/gnome-settings-daemon-3.26.2.tar.xz;
-    sha256 = "5a3d156b35e03fa3c28fddd0321f6726082a711973dee2af686370faae2e75e4";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix b/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
index fd90b8867d7b..a76dd35711a8 100644
--- a/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
@@ -2,7 +2,17 @@
 , bash, makeWrapper, itstool, gnome3, file }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-shell-extensions-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-shell-extensions/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "aefda4d810ef5ceb9402e2d620f4bdc1dc40c9cc4f6a51749840f7dd08628ab6";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-shell-extensions"; attrPath = "gnome3.gnome-shell-extensions"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-shell-extensions/src.nix b/pkgs/desktops/gnome-3/core/gnome-shell-extensions/src.nix
deleted file mode 100644
index 150a15d0a5f3..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-shell-extensions/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-shell-extensions-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-shell-extensions/3.26/gnome-shell-extensions-3.26.2.tar.xz;
-    sha256 = "aefda4d810ef5ceb9402e2d620f4bdc1dc40c9cc4f6a51749840f7dd08628ab6";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-shell/default.nix b/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
index 29b2bdd84068..026f5436237a 100644
--- a/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
@@ -12,7 +12,13 @@ let
   pythonEnv = python3Packages.python.withPackages ( ps: with ps; [ pygobject3 ] );
 
 in stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-shell-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-shell/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "e5a87f2f838d981db9823352b90b2ce2f40d24d31ed9f062dccfa41b820e0b1c";
+  };
 
   # Needed to find /etc/NetworkManager/VPN
   mesonFlags = [ "--sysconfdir=/etc" ];
@@ -70,6 +76,7 @@ in stdenv.mkDerivation rec {
 
   passthru = {
     mozillaPlugin = "/lib/mozilla/plugins";
+    updateScript = gnome3.updateScript { packageName = "gnome-shell"; attrPath = "gnome3.gnome-shell"; };
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/desktops/gnome-3/core/gnome-shell/src.nix b/pkgs/desktops/gnome-3/core/gnome-shell/src.nix
deleted file mode 100644
index 83cdd0682fda..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-shell/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-shell-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-shell/3.26/gnome-shell-3.26.2.tar.xz;
-    sha256 = "e5a87f2f838d981db9823352b90b2ce2f40d24d31ed9f062dccfa41b820e0b1c";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-software/default.nix b/pkgs/desktops/gnome-3/core/gnome-software/default.nix
index dda6e78661ba..354924c5c436 100644
--- a/pkgs/desktops/gnome-3/core/gnome-software/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-software/default.nix
@@ -3,7 +3,17 @@
 , json-glib, libsecret, valgrind-light, docbook_xsl, docbook_xml_dtd_42, gtk-doc, desktop-file-utils }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-software-${version}";
+  version = "3.26.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-software/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2f74fd5fb222c99d4fcb91500cea0c62a0eb8022700bdea51acecb41c63f8e48";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-software"; attrPath = "gnome3.gnome-software"; };
+  };
 
   nativeBuildInputs = [ pkgconfig meson ninja gettext wrapGAppsHook libxslt docbook_xml_dtd_42
                         valgrind-light docbook_xsl gtk-doc desktop-file-utils ];
diff --git a/pkgs/desktops/gnome-3/core/gnome-software/src.nix b/pkgs/desktops/gnome-3/core/gnome-software/src.nix
deleted file mode 100644
index 99c6415e83dc..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-software/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-software-3.26.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-software/3.26/gnome-software-3.26.3.tar.xz;
-    sha256 = "2f74fd5fb222c99d4fcb91500cea0c62a0eb8022700bdea51acecb41c63f8e48";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix b/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
index 07eed05762d6..0e64bc4362c7 100644
--- a/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
@@ -3,7 +3,17 @@
 , itstool, gnome3, librsvg, gdk_pixbuf, libgtop, systemd }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-system-monitor-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-system-monitor/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f848a8c2ca5e164cf09d3a205dd49e4e4bf4b60d43b0969c10443eb519d0e6b3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-system-monitor"; attrPath = "gnome3.gnome-system-monitor"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-system-monitor/src.nix b/pkgs/desktops/gnome-3/core/gnome-system-monitor/src.nix
deleted file mode 100644
index b5d527632efe..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-system-monitor/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-system-monitor-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-system-monitor/3.26/gnome-system-monitor-3.26.0.tar.xz;
-    sha256 = "f848a8c2ca5e164cf09d3a205dd49e4e4bf4b60d43b0969c10443eb519d0e6b3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix b/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
index 4ce393ad4e45..703bb6fe110e 100644
--- a/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
@@ -3,7 +3,17 @@
 , desktop-file-utils, itstool, wrapGAppsHook, appdata-tools }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-terminal-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-terminal/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "3a9ba414a814569476515275ad303d8056f296b2669234447712559aa97005b0";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-terminal"; attrPath = "gnome3.gnome-terminal"; };
+  };
 
   buildInputs = [ gnome3.gtk gnome3.gsettings-desktop-schemas gnome3.vte appdata-tools
                   gnome3.dconf itstool gnome3.nautilus ];
diff --git a/pkgs/desktops/gnome-3/core/gnome-terminal/src.nix b/pkgs/desktops/gnome-3/core/gnome-terminal/src.nix
deleted file mode 100644
index a6072ba7ca5e..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-terminal/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-terminal-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-terminal/3.26/gnome-terminal-3.26.2.tar.xz;
-    sha256 = "3a9ba414a814569476515275ad303d8056f296b2669234447712559aa97005b0";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-themes-standard/default.nix b/pkgs/desktops/gnome-3/core/gnome-themes-standard/default.nix
index 3db252d063f2..720120b392de 100644
--- a/pkgs/desktops/gnome-3/core/gnome-themes-standard/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-themes-standard/default.nix
@@ -2,7 +2,17 @@
 , gdk_pixbuf }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-themes-standard-${version}";
+  version = "3.22.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-themes-standard/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "61dc87c52261cfd5b94d65e8ffd923ddeb5d3944562f84942eeeb197ab8ab56a";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-themes-standard"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ intltool gtk3 librsvg pango atk gtk2 gdk_pixbuf
diff --git a/pkgs/desktops/gnome-3/core/gnome-themes-standard/src.nix b/pkgs/desktops/gnome-3/core/gnome-themes-standard/src.nix
deleted file mode 100644
index dcda746c8dd1..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-themes-standard/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-themes-standard-3.22.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-themes-standard/3.22/gnome-themes-standard-3.22.3.tar.xz;
-    sha256 = "61dc87c52261cfd5b94d65e8ffd923ddeb5d3944562f84942eeeb197ab8ab56a";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix b/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
index 6ab72ab7826d..8854e7a2d0c3 100644
--- a/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-user-docs/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, pkgconfig, file, gnome3, itstool, libxml2, intltool }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-user-docs-${version}";
+  version = "3.26.2.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-user-docs/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "93136f5baffd160c14e1b39f0ac60b9768975edac2da2b30c945faef534af8f5";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-user-docs"; attrPath = "gnome3.gnome-user-docs"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gnome3.yelp itstool libxml2 intltool ];
diff --git a/pkgs/desktops/gnome-3/core/gnome-user-docs/src.nix b/pkgs/desktops/gnome-3/core/gnome-user-docs/src.nix
deleted file mode 100644
index c18bad6b4cd8..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-user-docs/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-user-docs-3.26.2.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-user-docs/3.26/gnome-user-docs-3.26.2.1.tar.xz;
-    sha256 = "93136f5baffd160c14e1b39f0ac60b9768975edac2da2b30c945faef534af8f5";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix b/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
index 5d551dff1c0a..642ee0badf1e 100644
--- a/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-user-share/default.nix
@@ -4,7 +4,17 @@
 , gnome3, librsvg, gdk_pixbuf, file, libcanberra-gtk3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-user-share-${version}";
+  version = "3.18.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-user-share/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "3092fa7ad137531e35484195dde4ecbbc75a8a3d9b8209aef4c852717cf4bbf1";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-user-share"; attrPath = "gnome3.gnome-user-share"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gnome-user-share/src.nix b/pkgs/desktops/gnome-3/core/gnome-user-share/src.nix
deleted file mode 100644
index 2d06f9e7a7cf..000000000000
--- a/pkgs/desktops/gnome-3/core/gnome-user-share/src.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: rec {
-  major = "3.18";
-  minor = "3";
-  name = "gnome-user-share-${major}.${minor}";
-
-  src = fetchurl {
-    url = "mirror://gnome/sources/gnome-user-share/${major}/${name}.tar.xz";
-    sha256 = "3092fa7ad137531e35484195dde4ecbbc75a8a3d9b8209aef4c852717cf4bbf1";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/default.nix b/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/default.nix
index 836d178f09db..89614a327a6a 100644
--- a/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/default.nix
+++ b/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/default.nix
@@ -3,7 +3,17 @@
 , gnome3, gtk3, gsettings-desktop-schemas }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gsettings-desktop-schemas-${version}";
+  version = "3.24.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gsettings-desktop-schemas/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "76a3fa309f9de6074d66848987214f0b128124ba7184c958c15ac78a8ac7eea7";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gsettings-desktop-schemas"; };
+  };
 
   preInstall = ''
     mkdir -p $out/share/gsettings-schemas/${name}/glib-2.0/schemas
diff --git a/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/src.nix b/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/src.nix
deleted file mode 100644
index 1eca56c509bf..000000000000
--- a/pkgs/desktops/gnome-3/core/gsettings-desktop-schemas/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gsettings-desktop-schemas-3.24.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gsettings-desktop-schemas/3.24/gsettings-desktop-schemas-3.24.1.tar.xz;
-    sha256 = "76a3fa309f9de6074d66848987214f0b128124ba7184c958c15ac78a8ac7eea7";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gtksourceview/default.nix b/pkgs/desktops/gnome-3/core/gtksourceview/default.nix
index 88e6a0bd7853..b3948942c12b 100644
--- a/pkgs/desktops/gnome-3/core/gtksourceview/default.nix
+++ b/pkgs/desktops/gnome-3/core/gtksourceview/default.nix
@@ -4,7 +4,17 @@
 let
   checkInputs = [ xvfb_run dbus ];
 in stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gtksourceview-${version}";
+  version = "3.24.6";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gtksourceview/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7aa6bdfebcdc73a763dddeaa42f190c40835e6f8495bb9eb8f78587e2577c188";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gtksourceview"; attrPath = "gnome3.gtksourceview"; };
+  };
 
   propagatedBuildInputs = [
     # Required by gtksourceview-3.0.pc
diff --git a/pkgs/desktops/gnome-3/core/gtksourceview/src.nix b/pkgs/desktops/gnome-3/core/gtksourceview/src.nix
deleted file mode 100644
index ec7a8a6aaa57..000000000000
--- a/pkgs/desktops/gnome-3/core/gtksourceview/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gtksourceview-3.24.6";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gtksourceview/3.24/gtksourceview-3.24.6.tar.xz;
-    sha256 = "7aa6bdfebcdc73a763dddeaa42f190c40835e6f8495bb9eb8f78587e2577c188";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gtksourceviewmm/default.nix b/pkgs/desktops/gnome-3/core/gtksourceviewmm/default.nix
index 7763867bcbff..ae4f75bf76a7 100644
--- a/pkgs/desktops/gnome-3/core/gtksourceviewmm/default.nix
+++ b/pkgs/desktops/gnome-3/core/gtksourceviewmm/default.nix
@@ -1,7 +1,17 @@
-{ stdenv, fetchurl, pkgconfig, gtkmm, glibmm, gtksourceview }:
+{ stdenv, fetchurl, pkgconfig, gtkmm, glibmm, gtksourceview, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gtksourceviewmm-${version}";
+  version = "3.21.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gtksourceviewmm/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "d21296d8624a1046841bfec082021b7b966df0b62e19ee300828519bc54dd9c6";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gtksourceviewmm"; attrPath = "gnome3.gtksourceviewmm"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ glibmm gtkmm gtksourceview ];
diff --git a/pkgs/desktops/gnome-3/core/gtksourceviewmm/src.nix b/pkgs/desktops/gnome-3/core/gtksourceviewmm/src.nix
deleted file mode 100644
index 21618c45e051..000000000000
--- a/pkgs/desktops/gnome-3/core/gtksourceviewmm/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gtksourceviewmm-3.21.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gtksourceviewmm/3.21/gtksourceviewmm-3.21.2.tar.xz;
-    sha256 = "d21296d8624a1046841bfec082021b7b966df0b62e19ee300828519bc54dd9c6";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/gucharmap/default.nix b/pkgs/desktops/gnome-3/core/gucharmap/default.nix
index 40b7a4c7d9f1..ff9b232cb7a8 100644
--- a/pkgs/desktops/gnome-3/core/gucharmap/default.nix
+++ b/pkgs/desktops/gnome-3/core/gucharmap/default.nix
@@ -7,7 +7,17 @@
 # use packaged gnome3.adwaita-icon-theme
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gucharmap-${version}";
+  version = "10.0.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gucharmap/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "ac07d75924e2d8f436d9492e8f7d54cf109404d34de06886a3967563cd1726a4";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gucharmap"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/gucharmap/src.nix b/pkgs/desktops/gnome-3/core/gucharmap/src.nix
deleted file mode 100644
index fb38e3bf386b..000000000000
--- a/pkgs/desktops/gnome-3/core/gucharmap/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gucharmap-10.0.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gucharmap/10.0/gucharmap-10.0.3.tar.xz;
-    sha256 = "ac07d75924e2d8f436d9492e8f7d54cf109404d34de06886a3967563cd1726a4";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/libgnomekbd/default.nix b/pkgs/desktops/gnome-3/core/libgnomekbd/default.nix
index 319f089b9206..6301f6f4ab65 100644
--- a/pkgs/desktops/gnome-3/core/libgnomekbd/default.nix
+++ b/pkgs/desktops/gnome-3/core/libgnomekbd/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, pkgconfig, file, intltool, glib, gtk3, libxklavier, makeWrapper, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "libgnomekbd-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/libgnomekbd/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "ea3b418c57c30615f7ee5b6f718def7c9d09ce34637324361150744258968875";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "libgnomekbd"; attrPath = "gnome3.libgnomekbd"; };
+  };
 
   nativeBuildInputs = [ pkgconfig file intltool makeWrapper ];
   buildInputs = [ glib gtk3 libxklavier ];
diff --git a/pkgs/desktops/gnome-3/core/libgnomekbd/src.nix b/pkgs/desktops/gnome-3/core/libgnomekbd/src.nix
deleted file mode 100644
index 431006daf4fb..000000000000
--- a/pkgs/desktops/gnome-3/core/libgnomekbd/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "libgnomekbd-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/libgnomekbd/3.26/libgnomekbd-3.26.0.tar.xz;
-    sha256 = "ea3b418c57c30615f7ee5b6f718def7c9d09ce34637324361150744258968875";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/libgweather/default.nix b/pkgs/desktops/gnome-3/core/libgweather/default.nix
index 40f02886101d..ad14abb10008 100644
--- a/pkgs/desktops/gnome-3/core/libgweather/default.nix
+++ b/pkgs/desktops/gnome-3/core/libgweather/default.nix
@@ -2,7 +2,17 @@
 , pango, gdk_pixbuf, atk, tzdata, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "libgweather-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/libgweather/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "fca78470b345bce948e0333cab0a7c52c32562fc4a75de37061248a64e8fc4b8";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "libgweather"; attrPath = "gnome3.libgweather"; };
+  };
 
   configureFlags = [ "--with-zoneinfo-dir=${tzdata}/share/zoneinfo" "--enable-vala" ];
   propagatedBuildInputs = [ libxml2 gtk libsoup gconf pango gdk_pixbuf atk gnome3.geocode-glib ];
diff --git a/pkgs/desktops/gnome-3/core/libgweather/src.nix b/pkgs/desktops/gnome-3/core/libgweather/src.nix
deleted file mode 100644
index 799713c28a4a..000000000000
--- a/pkgs/desktops/gnome-3/core/libgweather/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "libgweather-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/libgweather/3.26/libgweather-3.26.1.tar.xz;
-    sha256 = "fca78470b345bce948e0333cab0a7c52c32562fc4a75de37061248a64e8fc4b8";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/libpeas/default.nix b/pkgs/desktops/gnome-3/core/libpeas/default.nix
index 998a1a02b3f9..8eaa927ac7b9 100644
--- a/pkgs/desktops/gnome-3/core/libpeas/default.nix
+++ b/pkgs/desktops/gnome-3/core/libpeas/default.nix
@@ -3,7 +3,17 @@
 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "libpeas-${version}";
+  version = "1.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/libpeas/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "0qm908kisyjzjxvygdl18hjqxvvgkq9w0phs2g55pck277sw0bsv";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "libpeas"; attrPath = "gnome3.libpeas"; };
+  };
 
   configureFlags = [ "--enable-python3" ];
 
diff --git a/pkgs/desktops/gnome-3/core/libpeas/src.nix b/pkgs/desktops/gnome-3/core/libpeas/src.nix
deleted file mode 100644
index 6f2cd82fb215..000000000000
--- a/pkgs/desktops/gnome-3/core/libpeas/src.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: rec {
-  major = "1.22";
-  minor = "0";
-  version = "${major}.${minor}";
-  name = "libpeas-${version}";
-
-  src = fetchurl {
-    url = "mirror://gnome/sources/libpeas/${major}/${name}.tar.xz";
-    sha256 = "0qm908kisyjzjxvygdl18hjqxvvgkq9w0phs2g55pck277sw0bsv";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/mutter/default.nix b/pkgs/desktops/gnome-3/core/mutter/default.nix
index 92c2fee8e46c..dc89c8c674ab 100644
--- a/pkgs/desktops/gnome-3/core/mutter/default.nix
+++ b/pkgs/desktops/gnome-3/core/mutter/default.nix
@@ -4,7 +4,17 @@
 , pipewire, libgudev, libwacom, xwayland, autoreconfHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "mutter-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/mutter/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "83309feb05a4635c47713665c0592af8ab6d7f17a36e4bd626d67609b6422fab";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "mutter"; attrPath = "gnome3.mutter"; };
+  };
 
   configureFlags = [
     "--with-x"
diff --git a/pkgs/desktops/gnome-3/core/mutter/src.nix b/pkgs/desktops/gnome-3/core/mutter/src.nix
deleted file mode 100644
index b3d0841a2e5c..000000000000
--- a/pkgs/desktops/gnome-3/core/mutter/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "mutter-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/mutter/3.26/mutter-3.26.2.tar.xz;
-    sha256 = "83309feb05a4635c47713665c0592af8ab6d7f17a36e4bd626d67609b6422fab";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/nautilus/default.nix b/pkgs/desktops/gnome-3/core/nautilus/default.nix
index ebabc269e814..8ed7bb2f01a0 100644
--- a/pkgs/desktops/gnome-3/core/nautilus/default.nix
+++ b/pkgs/desktops/gnome-3/core/nautilus/default.nix
@@ -3,7 +3,17 @@
 , exempi, librsvg, tracker, tracker-miners, libselinux, gdk_pixbuf }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "nautilus-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/nautilus/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "79c99404c665ea76b3db86f261fbd28a62b54c51429b05c3314462c9de2614b4";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "nautilus"; attrPath = "gnome3.nautilus"; };
+  };
 
   nativeBuildInputs = [ meson ninja pkgconfig libxml2 gettext wrapGAppsHook desktop-file-utils ];
 
diff --git a/pkgs/desktops/gnome-3/core/nautilus/src.nix b/pkgs/desktops/gnome-3/core/nautilus/src.nix
deleted file mode 100644
index 1cc14391e394..000000000000
--- a/pkgs/desktops/gnome-3/core/nautilus/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "nautilus-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/nautilus/3.26/nautilus-3.26.2.tar.xz;
-    sha256 = "79c99404c665ea76b3db86f261fbd28a62b54c51429b05c3314462c9de2614b4";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/simple-scan/default.nix b/pkgs/desktops/gnome-3/core/simple-scan/default.nix
index e4213b240a28..f982af2d56db 100644
--- a/pkgs/desktops/gnome-3/core/simple-scan/default.nix
+++ b/pkgs/desktops/gnome-3/core/simple-scan/default.nix
@@ -3,7 +3,17 @@
 , libxml2, sane-backends, vala, gnome3, gobjectIntrospection }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "simple-scan-${version}";
+  version = "3.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/simple-scan/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "d172825b1b77e2e32c21fc847fd670c4711a504b09688f8567a98ac9516fe212";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "simple-scan"; };
+  };
 
   buildInputs = [ cairo gdk_pixbuf colord glib gnome3.defaultIconTheme gusb
                 gtk libwebp packagekit sane-backends vala ];
@@ -51,6 +61,7 @@ stdenv.mkDerivation rec {
     '';
     homepage = https://launchpad.net/simple-scan;
     license = licenses.gpl3Plus;
+    maintainers = gnome3.maintainers;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/core/simple-scan/src.nix b/pkgs/desktops/gnome-3/core/simple-scan/src.nix
deleted file mode 100644
index fb430db7d844..000000000000
--- a/pkgs/desktops/gnome-3/core/simple-scan/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "simple-scan-3.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/simple-scan/3.26/simple-scan-3.26.2.tar.xz;
-    sha256 = "d172825b1b77e2e32c21fc847fd670c4711a504b09688f8567a98ac9516fe212";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/sushi/default.nix b/pkgs/desktops/gnome-3/core/sushi/default.nix
index 3e568f8639a2..00cec2f93b9f 100644
--- a/pkgs/desktops/gnome-3/core/sushi/default.nix
+++ b/pkgs/desktops/gnome-3/core/sushi/default.nix
@@ -4,7 +4,17 @@
 , gdk_pixbuf, librsvg, gtk3, harfbuzz }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "sushi-${version}";
+  version = "3.24.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/sushi/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f90bb95172664486f8d529995007fd12f0df9d0c998e20658b6203f46ce70d48";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "sushi"; attrPath = "gnome3.sushi"; };
+  };
 
   propagatedUserEnvPkgs = [ gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good ];
 
diff --git a/pkgs/desktops/gnome-3/core/sushi/src.nix b/pkgs/desktops/gnome-3/core/sushi/src.nix
deleted file mode 100644
index a713aef6f7f0..000000000000
--- a/pkgs/desktops/gnome-3/core/sushi/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "sushi-3.24.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/sushi/3.24/sushi-3.24.0.tar.xz;
-    sha256 = "f90bb95172664486f8d529995007fd12f0df9d0c998e20658b6203f46ce70d48";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/totem-pl-parser/default.nix b/pkgs/desktops/gnome-3/core/totem-pl-parser/default.nix
index c763621564c7..ef6bc97b1c67 100644
--- a/pkgs/desktops/gnome-3/core/totem-pl-parser/default.nix
+++ b/pkgs/desktops/gnome-3/core/totem-pl-parser/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, meson, ninja, pkgconfig, gettext, gmime, libxml2, libsoup, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "totem-pl-parser-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/totem-pl-parser/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f153a53391e9b42fed5cb6ce62322a58e323fde6ec4a54d8ba4d376cf4c1fbcb";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "totem-pl-parser"; attrPath = "gnome3.totem-pl-parser"; };
+  };
 
   nativeBuildInputs = [ meson ninja pkgconfig gettext ];
   buildInputs = [ gmime libxml2 libsoup ];
diff --git a/pkgs/desktops/gnome-3/core/totem-pl-parser/src.nix b/pkgs/desktops/gnome-3/core/totem-pl-parser/src.nix
deleted file mode 100644
index 2935111df27d..000000000000
--- a/pkgs/desktops/gnome-3/core/totem-pl-parser/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "totem-pl-parser-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/totem-pl-parser/3.26/totem-pl-parser-3.26.0.tar.xz;
-    sha256 = "f153a53391e9b42fed5cb6ce62322a58e323fde6ec4a54d8ba4d376cf4c1fbcb";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/totem/default.nix b/pkgs/desktops/gnome-3/core/totem/default.nix
index deb56e3c51cf..a9d8b2ad11cb 100644
--- a/pkgs/desktops/gnome-3/core/totem/default.nix
+++ b/pkgs/desktops/gnome-3/core/totem/default.nix
@@ -5,7 +5,17 @@
 , gdk_pixbuf, file, tracker, nautilus }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "totem-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/totem/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "e32fb9a68097045e75c87ad1b8177f5c01aea2a13dcb3b2e71a0f9570fe9ee13";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "totem"; attrPath = "gnome3.totem"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/totem/src.nix b/pkgs/desktops/gnome-3/core/totem/src.nix
deleted file mode 100644
index e051b13dee8d..000000000000
--- a/pkgs/desktops/gnome-3/core/totem/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "totem-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/totem/3.26/totem-3.26.0.tar.xz;
-    sha256 = "e32fb9a68097045e75c87ad1b8177f5c01aea2a13dcb3b2e71a0f9570fe9ee13";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/tracker-miners/default.nix b/pkgs/desktops/gnome-3/core/tracker-miners/default.nix
index 7213bbdfdb22..6cb3aa39c214 100644
--- a/pkgs/desktops/gnome-3/core/tracker-miners/default.nix
+++ b/pkgs/desktops/gnome-3/core/tracker-miners/default.nix
@@ -10,7 +10,17 @@
 , libiptcdata }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "tracker-miners-${version}";
+  version = "2.0.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/tracker-miners/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "12413a9f8dfa705a48a2697dcbb3eef12ee91bb98f392a23ba4bda7813e41d1b";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "tracker-miners"; attrPath = "gnome3.tracker-miners"; };
+  };
 
   NIX_CFLAGS_COMPILE = "-I${poppler.dev}/include/poppler";
 
diff --git a/pkgs/desktops/gnome-3/core/tracker-miners/src.nix b/pkgs/desktops/gnome-3/core/tracker-miners/src.nix
deleted file mode 100644
index 1c5ee9b35fa1..000000000000
--- a/pkgs/desktops/gnome-3/core/tracker-miners/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "tracker-miners-2.0.3";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/tracker-miners/2.0/tracker-miners-2.0.3.tar.xz;
-    sha256 = "12413a9f8dfa705a48a2697dcbb3eef12ee91bb98f392a23ba4bda7813e41d1b";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/tracker/default.nix b/pkgs/desktops/gnome-3/core/tracker/default.nix
index 2596709c0bac..f75de96669d2 100644
--- a/pkgs/desktops/gnome-3/core/tracker/default.nix
+++ b/pkgs/desktops/gnome-3/core/tracker/default.nix
@@ -3,7 +3,17 @@
 , gnome3, icu, libuuid, networkmanager, libsoup, json-glib }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "tracker-${version}";
+  version = "2.0.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/tracker/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "ece71a56c29151a76fc1b6e43c15dd1b657b37162dc948fa2487faf5ddb47fda";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "tracker"; attrPath = "gnome3.tracker"; };
+  };
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/desktops/gnome-3/core/tracker/src.nix b/pkgs/desktops/gnome-3/core/tracker/src.nix
deleted file mode 100644
index 887ae9a865a9..000000000000
--- a/pkgs/desktops/gnome-3/core/tracker/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "tracker-2.0.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/tracker/2.0/tracker-2.0.2.tar.xz;
-    sha256 = "ece71a56c29151a76fc1b6e43c15dd1b657b37162dc948fa2487faf5ddb47fda";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/vino/default.nix b/pkgs/desktops/gnome-3/core/vino/default.nix
index 4eadcc05760b..4365451636ae 100644
--- a/pkgs/desktops/gnome-3/core/vino/default.nix
+++ b/pkgs/desktops/gnome-3/core/vino/default.nix
@@ -10,7 +10,17 @@
 with lib;
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "vino-${version}";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/vino/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2911c779b6a2c46e5bc8e5a0c94c2a4d5bd4a1ee7e35f2818702cb13d9d23bab";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "vino"; attrPath = "gnome3.vino"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/vino/src.nix b/pkgs/desktops/gnome-3/core/vino/src.nix
deleted file mode 100644
index 8cf55272da97..000000000000
--- a/pkgs/desktops/gnome-3/core/vino/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "vino-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/vino/3.22/vino-3.22.0.tar.xz;
-    sha256 = "2911c779b6a2c46e5bc8e5a0c94c2a4d5bd4a1ee7e35f2818702cb13d9d23bab";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/vte/default.nix b/pkgs/desktops/gnome-3/core/vte/default.nix
index ef33cc34023c..4abeb2ba9618 100644
--- a/pkgs/desktops/gnome-3/core/vte/default.nix
+++ b/pkgs/desktops/gnome-3/core/vte/default.nix
@@ -4,7 +4,17 @@
 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "vte-${version}";
+  version = "0.50.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/vte/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "79dd316bfaff48f2fb74d066baae0d830e1f44436796fe410a57297e5c5f09cf";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "vte"; attrPath = "gnome3.vte"; };
+  };
 
   nativeBuildInputs = [ gobjectIntrospection intltool pkgconfig vala gperf libxml2 ];
   buildInputs = [ gnome3.glib gnome3.gtk3 ncurses ];
diff --git a/pkgs/desktops/gnome-3/core/vte/src.nix b/pkgs/desktops/gnome-3/core/vte/src.nix
deleted file mode 100644
index c63873767dc4..000000000000
--- a/pkgs/desktops/gnome-3/core/vte/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "vte-0.50.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/vte/0.50/vte-0.50.2.tar.xz;
-    sha256 = "79dd316bfaff48f2fb74d066baae0d830e1f44436796fe410a57297e5c5f09cf";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/yelp-tools/default.nix b/pkgs/desktops/gnome-3/core/yelp-tools/default.nix
index d849178ae09c..28e89cad9fb8 100644
--- a/pkgs/desktops/gnome-3/core/yelp-tools/default.nix
+++ b/pkgs/desktops/gnome-3/core/yelp-tools/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, libxml2, libxslt, itstool, gnome3, pkgconfig }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "yelp-tools-${version}";
+  version = "3.18.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/yelp-tools/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "c6c1d65f802397267cdc47aafd5398c4b60766e0a7ad2190426af6c0d0716932";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "yelp-tools"; attrPath = "gnome3.yelp-tools"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ libxml2 libxslt itstool gnome3.yelp-xsl ];
diff --git a/pkgs/desktops/gnome-3/core/yelp-tools/src.nix b/pkgs/desktops/gnome-3/core/yelp-tools/src.nix
deleted file mode 100644
index f03c6d1bc311..000000000000
--- a/pkgs/desktops/gnome-3/core/yelp-tools/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "yelp-tools-3.18.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/yelp-tools/3.18/yelp-tools-3.18.0.tar.xz;
-    sha256 = "c6c1d65f802397267cdc47aafd5398c4b60766e0a7ad2190426af6c0d0716932";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix b/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
index 353b9ccb55e3..341a7d7582ca 100644
--- a/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
+++ b/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
@@ -2,7 +2,17 @@
 , itstool, libxml2, libxslt, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "yelp-xsl-${version}";
+  version = "3.20.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/yelp-xsl/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "dc61849e5dca473573d32e28c6c4e3cf9c1b6afe241f8c26e29539c415f97ba0";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "yelp-xsl"; attrPath = "gnome3.yelp-xsl"; };
+  };
 
   doCheck = true;
 
diff --git a/pkgs/desktops/gnome-3/core/yelp-xsl/src.nix b/pkgs/desktops/gnome-3/core/yelp-xsl/src.nix
deleted file mode 100644
index de5d68d1fab1..000000000000
--- a/pkgs/desktops/gnome-3/core/yelp-xsl/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "yelp-xsl-3.20.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/yelp-xsl/3.20/yelp-xsl-3.20.1.tar.xz;
-    sha256 = "dc61849e5dca473573d32e28c6c4e3cf9c1b6afe241f8c26e29539c415f97ba0";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/yelp/default.nix b/pkgs/desktops/gnome-3/core/yelp/default.nix
index 16e314462858..661ddc1f12f4 100644
--- a/pkgs/desktops/gnome-3/core/yelp/default.nix
+++ b/pkgs/desktops/gnome-3/core/yelp/default.nix
@@ -4,7 +4,17 @@
 , wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "yelp-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/yelp/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "e4cb02ed2f44cfec3c352c957f8a461d9689cbc06eb3b503a58ffe92e1753f1b";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "yelp"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/core/yelp/src.nix b/pkgs/desktops/gnome-3/core/yelp/src.nix
deleted file mode 100644
index dd06a6bf1ebb..000000000000
--- a/pkgs/desktops/gnome-3/core/yelp/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "yelp-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/yelp/3.26/yelp-3.26.0.tar.xz;
-    sha256 = "e4cb02ed2f44cfec3c352c957f8a461d9689cbc06eb3b503a58ffe92e1753f1b";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/core/zenity/default.nix b/pkgs/desktops/gnome-3/core/zenity/default.nix
index e7d14188b0c4..fd55fd9f87a6 100644
--- a/pkgs/desktops/gnome-3/core/zenity/default.nix
+++ b/pkgs/desktops/gnome-3/core/zenity/default.nix
@@ -2,7 +2,17 @@
 , gnome-doc-utils, intltool, libX11, which, itstool, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "zenity-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/zenity/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "6a7f34626dd62b751fe22bcdb32f3558f8a8fdddcc9406893dd264f0ac18e830";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "zenity"; attrPath = "gnome3.zenity"; };
+  };
 
   preBuild = ''
     mkdir -p $out/include
diff --git a/pkgs/desktops/gnome-3/core/zenity/src.nix b/pkgs/desktops/gnome-3/core/zenity/src.nix
deleted file mode 100644
index ad0ce2f4d733..000000000000
--- a/pkgs/desktops/gnome-3/core/zenity/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "zenity-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/zenity/3.26/zenity-3.26.0.tar.xz;
-    sha256 = "6a7f34626dd62b751fe22bcdb32f3558f8a8fdddcc9406893dd264f0ac18e830";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/default.nix b/pkgs/desktops/gnome-3/default.nix
index 9388c9198966..80e9058bfb1c 100644
--- a/pkgs/desktops/gnome-3/default.nix
+++ b/pkgs/desktops/gnome-3/default.nix
@@ -1,4 +1,4 @@
-{ pkgs }:
+{ pkgs, lib }:
 
 let
 
@@ -13,6 +13,12 @@ let
 
   callPackage = pkgs.newScope self;
 
+  # Convert a version to branch (3.26.18 → 3.26)
+  # Used for finding packages on GNOME mirrors
+  versionBranch = version: builtins.concatStringsSep "." (lib.take 2 (lib.splitString "." version));
+
+  updateScript = callPackage ./update.nix { };
+
   version = "3.26";
   maintainers = with pkgs.lib.maintainers; [ lethalman jtojnar ];
 
diff --git a/pkgs/desktops/gnome-3/devtools/anjuta/default.nix b/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
index c81b160ae716..419588f86842 100644
--- a/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/anjuta/default.nix
@@ -2,7 +2,17 @@
   itstool, python3, ncurses, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "anjuta-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/anjuta/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "fb895464c1a3c915bb2bb3ea5d236fd17202caa7205f6792f70a75affc343d70";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "anjuta"; attrPath = "gnome3.anjuta"; };
+  };
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/desktops/gnome-3/devtools/anjuta/src.nix b/pkgs/desktops/gnome-3/devtools/anjuta/src.nix
deleted file mode 100644
index 32843b14d8e4..000000000000
--- a/pkgs/desktops/gnome-3/devtools/anjuta/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "anjuta-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/anjuta/3.26/anjuta-3.26.0.tar.xz;
-    sha256 = "fb895464c1a3c915bb2bb3ea5d236fd17202caa7205f6792f70a75affc343d70";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
index 6ecac28f96a0..321e887cba6d 100644
--- a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
@@ -2,7 +2,17 @@
 , webkitgtk, intltool, gsettings-desktop-schemas }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "devhelp-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/devhelp/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "10bd468ae2188abd98af9ba7b81aced337d2206e9d843eb44520be5b00d77d8e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "devhelp"; attrPath = "gnome3.devhelp"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/devtools/devhelp/src.nix b/pkgs/desktops/gnome-3/devtools/devhelp/src.nix
deleted file mode 100644
index 15c4671e31fb..000000000000
--- a/pkgs/desktops/gnome-3/devtools/devhelp/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "devhelp-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/devhelp/3.26/devhelp-3.26.1.tar.xz;
-    sha256 = "10bd468ae2188abd98af9ba7b81aced337d2206e9d843eb44520be5b00d77d8e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/devtools/gdl/default.nix b/pkgs/desktops/gnome-3/devtools/gdl/default.nix
index f12bbb0ca41d..07fc15f0d553 100644
--- a/pkgs/desktops/gnome-3/devtools/gdl/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/gdl/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, pkgconfig, libxml2, gtk3, gnome3, intltool }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gdl-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gdl/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f3ad03f9a34f751f52464e22d962c0dec8ff867b7b7b37fe24907f3dcd54c079";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gdl"; attrPath = "gnome3.gdl"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ libxml2 gtk3 intltool ];
diff --git a/pkgs/desktops/gnome-3/devtools/gdl/src.nix b/pkgs/desktops/gnome-3/devtools/gdl/src.nix
deleted file mode 100644
index 6475b36508cb..000000000000
--- a/pkgs/desktops/gnome-3/devtools/gdl/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gdl-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gdl/3.26/gdl-3.26.0.tar.xz;
-    sha256 = "f3ad03f9a34f751f52464e22d962c0dec8ff867b7b7b37fe24907f3dcd54c079";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix b/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
index 50960f41a312..3949e29089c8 100644
--- a/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
@@ -1,7 +1,17 @@
 { stdenv, fetchurl, gnome3, intltool, itstool, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-devel-docs-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-devel-docs/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "12eea77b550acfa617e14a89e4d24f93881294340abcc2c3abc7092c851703c3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-devel-docs"; attrPath = "gnome3.gnome-devel-docs"; };
+  };
 
   buildInputs = [ intltool itstool libxml2 ];
 
diff --git a/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/src.nix b/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/src.nix
deleted file mode 100644
index 4838b8f9d09e..000000000000
--- a/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-devel-docs-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-devel-docs/3.26/gnome-devel-docs-3.26.0.tar.xz;
-    sha256 = "12eea77b550acfa617e14a89e4d24f93881294340abcc2c3abc7092c851703c3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/devtools/nemiver/default.nix b/pkgs/desktops/gnome-3/devtools/nemiver/default.nix
index cf200cb32925..19853b19fcae 100644
--- a/pkgs/desktops/gnome-3/devtools/nemiver/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/nemiver/default.nix
@@ -3,7 +3,17 @@
   gtksourceviewmm, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "nemiver-${version}";
+  version = "0.9.6";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/nemiver/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "85ab8cf6c4f83262f441cb0952a6147d075c3c53d0687389a3555e946b694ef2";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "nemiver"; attrPath = "gnome3.nemiver"; };
+  };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
 
diff --git a/pkgs/desktops/gnome-3/devtools/nemiver/src.nix b/pkgs/desktops/gnome-3/devtools/nemiver/src.nix
deleted file mode 100644
index 2fcf639fe1b4..000000000000
--- a/pkgs/desktops/gnome-3/devtools/nemiver/src.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "nemiver-0.9.6";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/nemiver/0.9/nemiver-0.9.6.tar.xz;
-    sha256 = "85ab8cf6c4f83262f441cb0952a6147d075c3c53d0687389a3555e946b694ef2";
-  };
-}
-
diff --git a/pkgs/desktops/gnome-3/find-latest-version.py b/pkgs/desktops/gnome-3/find-latest-version.py
new file mode 100644
index 000000000000..e6089c69c042
--- /dev/null
+++ b/pkgs/desktops/gnome-3/find-latest-version.py
@@ -0,0 +1,58 @@
+import argparse
+import json
+import requests
+import sys
+
+def version_to_list(version):
+    return list(map(int, version.split('.')))
+
+def odd_unstable(version_str, selected):
+    version = version_to_list(version_str)
+    if len(version) < 2:
+        return True
+
+    even = version[1] % 2 == 0
+    if selected == 'stable':
+        return even
+    else:
+        return not even
+
+def no_policy(version, selected):
+    return True
+
+version_policies = {
+    'odd-unstable': odd_unstable,
+    'none': no_policy,
+}
+
+def make_version_policy(version_predicate, selected):
+    return lambda version: version_predicate(version, selected)
+
+parser = argparse.ArgumentParser(description='Find latest version for a GNOME package by crawling their release server.')
+parser.add_argument('package-name', help='Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.')
+parser.add_argument('version-policy', help='Policy determining which versions are considered stable. For most GNOME packages, odd minor versions are unstable but there are exceptions.', choices=version_policies.keys(), nargs='?', default='odd-unstable')
+parser.add_argument('requested-release', help='Most of the time, we will want to update to stable version but sometimes it is useful to test.', choices=['stable', 'unstable'], nargs='?', default='stable')
+
+
+if __name__ == '__main__':
+    args = parser.parse_args()
+
+    package_name = getattr(args, 'package-name')
+    requested_release = getattr(args, 'requested-release')
+    version_predicate = version_policies[getattr(args, 'version-policy')]
+    version_policy = make_version_policy(version_predicate, requested_release)
+
+    # The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
+    cache = json.loads(requests.get('https://ftp.gnome.org/pub/GNOME/sources/{}/cache.json'.format(package_name)).text)
+    if type(cache) != list or cache[0] != 4:
+        print('Unknown format of cache.json file.', file=sys.stderr)
+        sys.exit(1)
+
+    versions = cache[2][package_name]
+    versions = sorted(filter(version_policy, versions), key=version_to_list)
+
+    if len(versions) == 0:
+        print('No versions matched.', file=sys.stderr)
+        sys.exit(1)
+
+    print(versions[-1])
diff --git a/pkgs/desktops/gnome-3/games/aisleriot/default.nix b/pkgs/desktops/gnome-3/games/aisleriot/default.nix
index a6f0a65832f7..b194ac42bf24 100644
--- a/pkgs/desktops/gnome-3/games/aisleriot/default.nix
+++ b/pkgs/desktops/gnome-3/games/aisleriot/default.nix
@@ -3,7 +3,17 @@
 , guile_2_0, libcanberra-gtk3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "aisleriot-${version}";
+  version = "3.22.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/aisleriot/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "fe8dee3ad771ab778d37740a26410778aa5c61e8eb75dd42b9a5e5719c6e34fb";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "aisleriot"; attrPath = "gnome3.aisleriot"; };
+  };
 
   configureFlags = [ "--with-card-theme-formats=svg" ];
 
diff --git a/pkgs/desktops/gnome-3/games/aisleriot/src.nix b/pkgs/desktops/gnome-3/games/aisleriot/src.nix
deleted file mode 100644
index 7fee97bae1df..000000000000
--- a/pkgs/desktops/gnome-3/games/aisleriot/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "aisleriot-3.22.4";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/aisleriot/3.22/aisleriot-3.22.4.tar.xz;
-    sha256 = "fe8dee3ad771ab778d37740a26410778aa5c61e8eb75dd42b9a5e5719c6e34fb";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/five-or-more/default.nix b/pkgs/desktops/gnome-3/games/five-or-more/default.nix
index 48b2b3823729..8806344f3b38 100644
--- a/pkgs/desktops/gnome-3/games/five-or-more/default.nix
+++ b/pkgs/desktops/gnome-3/games/five-or-more/default.nix
@@ -2,7 +2,17 @@
 , librsvg, intltool, itstool, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "five-or-more-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/five-or-more/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "7c24f7f2603df99299d38b40b14c005aaad88820113ed71e4b3765ac3b027772";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "five-or-more"; attrPath = "gnome3.five-or-more"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/five-or-more/src.nix b/pkgs/desktops/gnome-3/games/five-or-more/src.nix
deleted file mode 100644
index 676e1a7d75a3..000000000000
--- a/pkgs/desktops/gnome-3/games/five-or-more/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "five-or-more-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/five-or-more/3.26/five-or-more-3.26.0.tar.xz;
-    sha256 = "7c24f7f2603df99299d38b40b14c005aaad88820113ed71e4b3765ac3b027772";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix b/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
index a2623c5115b7..22032f16f477 100644
--- a/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
+++ b/pkgs/desktops/gnome-3/games/four-in-a-row/default.nix
@@ -2,7 +2,17 @@
 , intltool, itstool, libcanberra-gtk3, librsvg, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "four-in-a-row-${version}";
+  version = "3.22.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/four-in-a-row/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "bc4194e8ab6d1d2a6a63a2e91945cd5465f49ebf0dae2eecacc66e69db56a420";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "four-in-a-row"; attrPath = "gnome3.four-in-a-row"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/four-in-a-row/src.nix b/pkgs/desktops/gnome-3/games/four-in-a-row/src.nix
deleted file mode 100644
index 9e2b23f3996b..000000000000
--- a/pkgs/desktops/gnome-3/games/four-in-a-row/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "four-in-a-row-3.22.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/four-in-a-row/3.22/four-in-a-row-3.22.2.tar.xz;
-    sha256 = "bc4194e8ab6d1d2a6a63a2e91945cd5465f49ebf0dae2eecacc66e69db56a420";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-chess/default.nix b/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
index bfa345c4a40b..f50542770c4f 100644
--- a/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
@@ -2,7 +2,17 @@
 , intltool, itstool, librsvg, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-chess-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-chess/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "a0f6f862ab7067626a3a86cdc9c14dde595e38e6719e0198cb967e11facf1f12";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-chess"; attrPath = "gnome3.gnome-chess"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-chess/src.nix b/pkgs/desktops/gnome-3/games/gnome-chess/src.nix
deleted file mode 100644
index ee682d3801bd..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-chess/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-chess-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-chess/3.26/gnome-chess-3.26.0.tar.xz;
-    sha256 = "a0f6f862ab7067626a3a86cdc9c14dde595e38e6719e0198cb967e11facf1f12";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix b/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
index 13afae2eb2cb..c1f91092bb0d 100644
--- a/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
@@ -2,7 +2,17 @@
 , librsvg, libxml2, intltool, itstool, libgee, libgames-support }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-klotski-${version}";
+  version = "3.22.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-klotski/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "16hd6yk01rhb4pj8m01fyn72wykf41d72gsms81q0n4zm5bm1a4h";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-klotski"; attrPath = "gnome3.gnome-klotski"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-klotski/src.nix b/pkgs/desktops/gnome-3/games/gnome-klotski/src.nix
deleted file mode 100644
index e37f3642c82e..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-klotski/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-klotski-3.22.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-klotski/3.22/gnome-klotski-3.22.2.tar.xz;
-    sha256 = "16hd6yk01rhb4pj8m01fyn72wykf41d72gsms81q0n4zm5bm1a4h";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix b/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix
index 3d0d5d6df467..b9a4638a947c 100644
--- a/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-mahjongg/default.nix
@@ -2,7 +2,17 @@
 , librsvg, intltool, itstool, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-mahjongg-${version}";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-mahjongg/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f5972a14fa4ad04153bd6e68475b85cd79c6b44f6cac1fe1edb64dbad4135218";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-mahjongg"; attrPath = "gnome3.gnome-mahjongg"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-mahjongg/src.nix b/pkgs/desktops/gnome-3/games/gnome-mahjongg/src.nix
deleted file mode 100644
index c021136ee304..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-mahjongg/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-mahjongg-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-mahjongg/3.22/gnome-mahjongg-3.22.0.tar.xz;
-    sha256 = "f5972a14fa4ad04153bd6e68475b85cd79c6b44f6cac1fe1edb64dbad4135218";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-mines/default.nix b/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
index d76e585bb4eb..ce5dc8bc14c0 100644
--- a/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
@@ -2,7 +2,17 @@
 , librsvg, intltool, itstool, libxml2, libgames-support, libgee }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-mines-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-mines/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2b041eaf0d57307498c56d8e285b2e539f634fdba95d689f6af75aa4ed6edde9";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-mines"; attrPath = "gnome3.gnome-mines"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-mines/src.nix b/pkgs/desktops/gnome-3/games/gnome-mines/src.nix
deleted file mode 100644
index 39096f00e42c..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-mines/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-mines-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-mines/3.26/gnome-mines-3.26.0.tar.xz;
-    sha256 = "2b041eaf0d57307498c56d8e285b2e539f634fdba95d689f6af75aa4ed6edde9";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix b/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
index 7489cf6111bb..302d8fb21010 100644
--- a/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
@@ -3,7 +3,17 @@
 , libxml2, libgee, libgames-support }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-nibbles-${version}";
+  version = "3.24.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-nibbles/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "0ddc1fe03483958dd5513d04f5919ade991902d12da18a4c2d3307f818a5cb4f";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-nibbles"; attrPath = "gnome3.gnome-nibbles"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-nibbles/src.nix b/pkgs/desktops/gnome-3/games/gnome-nibbles/src.nix
deleted file mode 100644
index 133e9651fa74..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-nibbles/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-nibbles-3.24.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-nibbles/3.24/gnome-nibbles-3.24.0.tar.xz;
-    sha256 = "0ddc1fe03483958dd5513d04f5919ade991902d12da18a4c2d3307f818a5cb4f";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-robots/default.nix b/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
index e46736351a1b..aa5e00606c7a 100644
--- a/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
@@ -3,7 +3,17 @@
 , libgee}:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-robots-${version}";
+  version = "3.22.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-robots/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "c5d63f0fcae66d0df9b10e39387d09875555909f0aa7e57ef8552621d852082f";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-robots"; attrPath = "gnome3.gnome-robots"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-robots/src.nix b/pkgs/desktops/gnome-3/games/gnome-robots/src.nix
deleted file mode 100644
index 09e4ad6c9673..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-robots/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-robots-3.22.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-robots/3.22/gnome-robots-3.22.2.tar.xz;
-    sha256 = "c5d63f0fcae66d0df9b10e39387d09875555909f0aa7e57ef8552621d852082f";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix b/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
index 2234d696d240..b3380e6bb96c 100644
--- a/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
@@ -2,7 +2,17 @@
 , json-glib, qqwing, itstool, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-sudoku-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-sudoku/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "8774c7093a97131b94d39142f1e044c8619cfdb6ad2546176271589fbb12d3a0";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-sudoku"; attrPath = "gnome3.gnome-sudoku"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ intltool wrapGAppsHook gtk3 gnome3.libgee
diff --git a/pkgs/desktops/gnome-3/games/gnome-sudoku/src.nix b/pkgs/desktops/gnome-3/games/gnome-sudoku/src.nix
deleted file mode 100644
index f19142cf251e..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-sudoku/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-sudoku-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-sudoku/3.26/gnome-sudoku-3.26.0.tar.xz;
-    sha256 = "8774c7093a97131b94d39142f1e044c8619cfdb6ad2546176271589fbb12d3a0";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix b/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
index 3935afe3eb6b..4f87fb50d619 100644
--- a/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
@@ -2,7 +2,17 @@
 , librsvg, libcanberra-gtk3, intltool, itstool, libxml2 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-taquin-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-taquin/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "de352bb2dfcd759de37f6bccf1e4790760e020b4bb06a1bc8d5f03d89613b6fd";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-taquin"; attrPath = "gnome3.gnome-taquin"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-taquin/src.nix b/pkgs/desktops/gnome-3/games/gnome-taquin/src.nix
deleted file mode 100644
index 30a33e28e2de..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-taquin/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-taquin-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-taquin/3.26/gnome-taquin-3.26.1.tar.xz;
-    sha256 = "de352bb2dfcd759de37f6bccf1e4790760e020b4bb06a1bc8d5f03d89613b6fd";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix b/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix
index 37218776f123..f456b7ee6831 100644
--- a/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-tetravex/default.nix
@@ -2,7 +2,17 @@
 , libxml2, intltool, itstool }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-tetravex-${version}";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-tetravex/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "0a6d7ff5ffcd6c05454a919d46a2e389d6b5f87bc80e82c52c2f20d9d914e18d";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-tetravex"; attrPath = "gnome3.gnome-tetravex"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-tetravex/src.nix b/pkgs/desktops/gnome-3/games/gnome-tetravex/src.nix
deleted file mode 100644
index e79b18263b99..000000000000
--- a/pkgs/desktops/gnome-3/games/gnome-tetravex/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-tetravex-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-tetravex/3.22/gnome-tetravex-3.22.0.tar.xz;
-    sha256 = "0a6d7ff5ffcd6c05454a919d46a2e389d6b5f87bc80e82c52c2f20d9d914e18d";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/hitori/default.nix b/pkgs/desktops/gnome-3/games/hitori/default.nix
index 857aec9700f3..db01eb86f173 100644
--- a/pkgs/desktops/gnome-3/games/hitori/default.nix
+++ b/pkgs/desktops/gnome-3/games/hitori/default.nix
@@ -2,7 +2,17 @@
 , libxml2, intltool, itstool }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "hitori-${version}";
+  version = "3.22.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/hitori/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "dcac6909b6007857ee425ac8c65fed179f2c71da138d5e5300cd62c8b9ea15d3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "hitori"; attrPath = "gnome3.hitori"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/hitori/src.nix b/pkgs/desktops/gnome-3/games/hitori/src.nix
deleted file mode 100644
index 93dcd5de62e3..000000000000
--- a/pkgs/desktops/gnome-3/games/hitori/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "hitori-3.22.4";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/hitori/3.22/hitori-3.22.4.tar.xz;
-    sha256 = "dcac6909b6007857ee425ac8c65fed179f2c71da138d5e5300cd62c8b9ea15d3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/iagno/default.nix b/pkgs/desktops/gnome-3/games/iagno/default.nix
index e7e1696dda44..d31457f868c4 100644
--- a/pkgs/desktops/gnome-3/games/iagno/default.nix
+++ b/pkgs/desktops/gnome-3/games/iagno/default.nix
@@ -2,7 +2,17 @@
 , intltool, itstool, libcanberra-gtk3, libxml2, dconf }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "iagno-${version}";
+  version = "3.26.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/iagno/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "3476810d0c42aa1600484de2c111c94e0cf5247a98f071b23a0b5e3036362121";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "iagno"; attrPath = "gnome3.iagno"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 gnome3.defaultIconTheme gdk_pixbuf librsvg
diff --git a/pkgs/desktops/gnome-3/games/iagno/src.nix b/pkgs/desktops/gnome-3/games/iagno/src.nix
deleted file mode 100644
index 86c1f30e5d66..000000000000
--- a/pkgs/desktops/gnome-3/games/iagno/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "iagno-3.26.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/iagno/3.26/iagno-3.26.1.tar.xz;
-    sha256 = "3476810d0c42aa1600484de2c111c94e0cf5247a98f071b23a0b5e3036362121";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/lightsoff/default.nix b/pkgs/desktops/gnome-3/games/lightsoff/default.nix
index 78663b99ae04..1a163352cfc8 100644
--- a/pkgs/desktops/gnome-3/games/lightsoff/default.nix
+++ b/pkgs/desktops/gnome-3/games/lightsoff/default.nix
@@ -2,7 +2,17 @@
 , intltool, itstool, clutter, clutter-gtk, libxml2, dconf }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "lightsoff-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/lightsoff/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "d12572bc7b70481320ec90c6130ad794b559a9990d08bef158a1d826aaa35976";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "lightsoff"; attrPath = "gnome3.lightsoff"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 gnome3.defaultIconTheme gdk_pixbuf librsvg dconf
diff --git a/pkgs/desktops/gnome-3/games/lightsoff/src.nix b/pkgs/desktops/gnome-3/games/lightsoff/src.nix
deleted file mode 100644
index 18528df24a38..000000000000
--- a/pkgs/desktops/gnome-3/games/lightsoff/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "lightsoff-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/lightsoff/3.26/lightsoff-3.26.0.tar.xz;
-    sha256 = "d12572bc7b70481320ec90c6130ad794b559a9990d08bef158a1d826aaa35976";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/quadrapassel/default.nix b/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
index be3b5f6ee01a..b0572f981ded 100644
--- a/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
+++ b/pkgs/desktops/gnome-3/games/quadrapassel/default.nix
@@ -3,7 +3,17 @@
 , intltool, itstool, libxml2, clutter, clutter-gtk, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "quadrapassel-${version}";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/quadrapassel/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "0ed44ef73c8811cbdfc3b44c8fd80eb6e2998d102d59ac324e4748f5d9dddb55";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "quadrapassel"; attrPath = "gnome3.quadrapassel"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 gnome3.defaultIconTheme gdk_pixbuf librsvg
diff --git a/pkgs/desktops/gnome-3/games/quadrapassel/src.nix b/pkgs/desktops/gnome-3/games/quadrapassel/src.nix
deleted file mode 100644
index 57bdb4771ddf..000000000000
--- a/pkgs/desktops/gnome-3/games/quadrapassel/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "quadrapassel-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/quadrapassel/3.22/quadrapassel-3.22.0.tar.xz;
-    sha256 = "0ed44ef73c8811cbdfc3b44c8fd80eb6e2998d102d59ac324e4748f5d9dddb55";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/swell-foop/default.nix b/pkgs/desktops/gnome-3/games/swell-foop/default.nix
index 1df746f4f28b..92da14fb5597 100644
--- a/pkgs/desktops/gnome-3/games/swell-foop/default.nix
+++ b/pkgs/desktops/gnome-3/games/swell-foop/default.nix
@@ -2,7 +2,17 @@
 , clutter, clutter-gtk, intltool, itstool, libxml2, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "swell-foop-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/swell-foop/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "122e2b5a51ad0144ea6b5fd2736ac43b101c7892198948e697bfc4c014bbba22";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "swell-foop"; attrPath = "gnome3.swell-foop"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 gnome3.defaultIconTheme gdk_pixbuf librsvg
diff --git a/pkgs/desktops/gnome-3/games/swell-foop/src.nix b/pkgs/desktops/gnome-3/games/swell-foop/src.nix
deleted file mode 100644
index 082081ca36c7..000000000000
--- a/pkgs/desktops/gnome-3/games/swell-foop/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "swell-foop-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/swell-foop/3.26/swell-foop-3.26.0.tar.xz;
-    sha256 = "122e2b5a51ad0144ea6b5fd2736ac43b101c7892198948e697bfc4c014bbba22";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/games/tali/default.nix b/pkgs/desktops/gnome-3/games/tali/default.nix
index 6f6beee89615..f8d799b69141 100644
--- a/pkgs/desktops/gnome-3/games/tali/default.nix
+++ b/pkgs/desktops/gnome-3/games/tali/default.nix
@@ -2,7 +2,17 @@
 , librsvg, intltool, itstool, libxml2, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "tali-${version}";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/tali/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "5ba17794d6fb06b794daaffa62a6aaa372b7de8886ce5ec596c37e62bb71728b";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "tali"; attrPath = "gnome3.tali"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 gnome3.defaultIconTheme gdk_pixbuf librsvg
diff --git a/pkgs/desktops/gnome-3/games/tali/src.nix b/pkgs/desktops/gnome-3/games/tali/src.nix
deleted file mode 100644
index 108144cc3eef..000000000000
--- a/pkgs/desktops/gnome-3/games/tali/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "tali-3.22.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/tali/3.22/tali-3.22.0.tar.xz;
-    sha256 = "5ba17794d6fb06b794daaffa62a6aaa372b7de8886ce5ec596c37e62bb71728b";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/gitg/default.nix b/pkgs/desktops/gnome-3/misc/gitg/default.nix
index 208f0e6a1c79..314539b7f9e6 100644
--- a/pkgs/desktops/gnome-3/misc/gitg/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gitg/default.nix
@@ -4,7 +4,17 @@
 , libsoup }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gitg-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gitg/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "26730d437d6a30d6e341b9e8da99d2134dce4b96022c195609f45062f82b54d5";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gitg"; };
+  };
 
   preCheck = ''
     substituteInPlace tests/libgitg/test-commit.c --replace "/bin/bash" "${bash}/bin/bash"
diff --git a/pkgs/desktops/gnome-3/misc/gitg/src.nix b/pkgs/desktops/gnome-3/misc/gitg/src.nix
deleted file mode 100644
index c72e2830ad1e..000000000000
--- a/pkgs/desktops/gnome-3/misc/gitg/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gitg-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gitg/3.26/gitg-3.26.0.tar.xz;
-    sha256 = "26730d437d6a30d6e341b9e8da99d2134dce4b96022c195609f45062f82b54d5";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix b/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
index 3a35a87ceafc..48c14461daa3 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
@@ -3,7 +3,17 @@
 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-autoar-${version}";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-autoar/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "e1fe2c06eed30305c38bf0939c72b0e51b4716658e2663a0cf4a4bf57874ca62";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-autoar"; attrPath = "gnome3.gnome-autoar"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 glib ];
diff --git a/pkgs/desktops/gnome-3/misc/gnome-autoar/src.nix b/pkgs/desktops/gnome-3/misc/gnome-autoar/src.nix
deleted file mode 100644
index ee2ade83ee6c..000000000000
--- a/pkgs/desktops/gnome-3/misc/gnome-autoar/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-autoar-0.2.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-autoar/0.2/gnome-autoar-0.2.2.tar.xz;
-    sha256 = "e1fe2c06eed30305c38bf0939c72b0e51b4716658e2663a0cf4a4bf57874ca62";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix b/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
index e2236913170e..ecc0711482fa 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-packagekit/default.nix
@@ -2,7 +2,17 @@
 , fontconfig, libcanberra-gtk3, systemd, libnotify, wrapGAppsHook, dbus-glib, dbus_libs, desktop-file-utils }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-packagekit-${version}";
+  version = "3.26.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-packagekit/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "6a219e16923d3976f424416c944bef06913922da24bc9e6644ec114c2d563417";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-packagekit"; attrPath = "gnome3.gnome-packagekit"; };
+  };
 
   NIX_CFLAGS_COMPILE = "-I${dbus-glib.dev}/include/dbus-1.0 -I${dbus_libs.dev}/include/dbus-1.0";
 
diff --git a/pkgs/desktops/gnome-3/misc/gnome-packagekit/src.nix b/pkgs/desktops/gnome-3/misc/gnome-packagekit/src.nix
deleted file mode 100644
index 5448eb8a83a7..000000000000
--- a/pkgs/desktops/gnome-3/misc/gnome-packagekit/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-packagekit-3.26.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-packagekit/3.26/gnome-packagekit-3.26.0.tar.xz;
-    sha256 = "6a219e16923d3976f424416c944bef06913922da24bc9e6644ec114c2d563417";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/default.nix b/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/default.nix
index 58d8f90cb86a..35c3a678e843 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/default.nix
@@ -4,7 +4,17 @@
 , gnome3, librsvg, gdk_pixbuf, file, libnotify, gobjectIntrospection, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gnome-tweak-tool-${version}";
+  version = "3.26.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-tweak-tool/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "fda08044d22c258bbd93dbad326d282d4d1184b98795ae8e3e5f07f8275005df";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gnome-tweak-tool"; attrPath = "gnome3.gnome-tweak-tool"; };
+  };
 
   propagatedUserEnvPkgs = [ gnome3.gnome-themes-standard ];
 
diff --git a/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/src.nix b/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/src.nix
deleted file mode 100644
index 8af28e17dcd1..000000000000
--- a/pkgs/desktops/gnome-3/misc/gnome-tweak-tool/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gnome-tweak-tool-3.26.4";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gnome-tweak-tool/3.26/gnome-tweak-tool-3.26.4.tar.xz;
-    sha256 = "fda08044d22c258bbd93dbad326d282d4d1184b98795ae8e3e5f07f8275005df";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/gspell/default.nix b/pkgs/desktops/gnome-3/misc/gspell/default.nix
index 2bbf219e3f3a..5d2dc08e7e35 100644
--- a/pkgs/desktops/gnome-3/misc/gspell/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gspell/default.nix
@@ -1,7 +1,17 @@
-{ stdenv, fetchurl, pkgconfig, glib, gtk3, enchant, isocodes, vala, gobjectIntrospection }:
+{ stdenv, fetchurl, pkgconfig, glib, gtk3, enchant, isocodes, vala, gobjectIntrospection, gnome3 }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gspell-${version}";
+  version = "1.6.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gspell/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "f4d329348775374eec18158f8dcbbacf76f85be5ce002a92d93054ece70ec4de";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gspell"; attrPath = "gnome3.gspell"; };
+  };
 
   propagatedBuildInputs = [ enchant ]; # required for pkgconfig
 
@@ -9,6 +19,10 @@ stdenv.mkDerivation rec {
   buildInputs = [ glib gtk3 isocodes ];
 
   meta = with stdenv.lib; {
+    description = "A spell-checking library for GTK+ applications";
+    homepage = https://wiki.gnome.org/Projects/gspell;
+    license = licenses.lgpl21Plus;
+    maintainers = gnome3.maintainers;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/misc/gspell/src.nix b/pkgs/desktops/gnome-3/misc/gspell/src.nix
deleted file mode 100644
index 9ae78f39e4e1..000000000000
--- a/pkgs/desktops/gnome-3/misc/gspell/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gspell-1.6.1";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gspell/1.6/gspell-1.6.1.tar.xz;
-    sha256 = "f4d329348775374eec18158f8dcbbacf76f85be5ce002a92d93054ece70ec4de";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix b/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
index 10e3c5618a98..1b912109cfd5 100644
--- a/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gtkhtml/default.nix
@@ -2,7 +2,17 @@
 , gnome3, enchant, isocodes }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "gtkhtml-${version}";
+  version = "4.10.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gtkhtml/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "ca3b6424fb2c7ac5d9cb8fdafb69318fa2e825c9cf6ed17d1e38d9b29e5606c3";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "gtkhtml"; attrPath = "gnome3.gtkhtml"; };
+  };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ gtk3 intltool gnome3.adwaita-icon-theme
diff --git a/pkgs/desktops/gnome-3/misc/gtkhtml/src.nix b/pkgs/desktops/gnome-3/misc/gtkhtml/src.nix
deleted file mode 100644
index 21876ec9c399..000000000000
--- a/pkgs/desktops/gnome-3/misc/gtkhtml/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "gtkhtml-4.10.0";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/gtkhtml/4.10/gtkhtml-4.10.0.tar.xz;
-    sha256 = "ca3b6424fb2c7ac5d9cb8fdafb69318fa2e825c9cf6ed17d1e38d9b29e5606c3";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/libgda/default.nix b/pkgs/desktops/gnome-3/misc/libgda/default.nix
index dd551a1caed6..ce7bb6f75b5c 100644
--- a/pkgs/desktops/gnome-3/misc/libgda/default.nix
+++ b/pkgs/desktops/gnome-3/misc/libgda/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, intltool, itstool, libxml2, gtk3, openssl
+{ stdenv, fetchurl, fetchpatch, pkgconfig, intltool, itstool, libxml2, gtk3, openssl, gnome3
 , mysqlSupport ? false, mysql ? null
 , postgresSupport ? false, postgresql ? null
 }:
@@ -7,7 +7,17 @@ assert mysqlSupport -> mysql != null;
 assert postgresSupport -> postgresql != null;
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "libgda-${version}";
+  version = "5.2.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/libgda/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2cee38dd583ccbaa5bdf6c01ca5f88cc08758b9b144938a51a478eb2684b765e";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "libgda"; attrPath = "gnome3.libgda"; };
+  };
 
   patches = [
     (fetchurl {
@@ -34,6 +44,7 @@ stdenv.mkDerivation rec {
     description = "Database access library";
     homepage = http://www.gnome-db.org/;
     license = [ licenses.lgpl2 licenses.gpl2 ];
+    maintainers = gnome3.maintainers;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/misc/libgda/src.nix b/pkgs/desktops/gnome-3/misc/libgda/src.nix
deleted file mode 100644
index 8812ccc8ccd9..000000000000
--- a/pkgs/desktops/gnome-3/misc/libgda/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "libgda-5.2.4";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/libgda/5.2/libgda-5.2.4.tar.xz;
-    sha256 = "2cee38dd583ccbaa5bdf6c01ca5f88cc08758b9b144938a51a478eb2684b765e";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/misc/libgit2-glib/default.nix b/pkgs/desktops/gnome-3/misc/libgit2-glib/default.nix
index c28ab402a124..865586b51192 100644
--- a/pkgs/desktops/gnome-3/misc/libgit2-glib/default.nix
+++ b/pkgs/desktops/gnome-3/misc/libgit2-glib/default.nix
@@ -2,7 +2,17 @@
 , gtk-doc, gobjectIntrospection, libgit2, glib }:
 
 stdenv.mkDerivation rec {
-  inherit (import ./src.nix fetchurl) name src;
+  name = "libgit2-glib-${version}";
+  version = "0.26.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/libgit2-glib/${gnome3.versionBranch version}/${name}.tar.xz";
+    sha256 = "2ad6f20db2e38bbfdb6cb452704fe8a911036b86de82dc75bb0f3b20db40ce9c";
+  };
+
+  passthru = {
+    updateScript = gnome3.updateScript { packageName = "libgit2-glib"; attrPath = "gnome3.libgit2-glib"; };
+  };
 
   nativeBuildInputs = [
     gnome3.gnome-common libtool pkgconfig vala gtk-doc gobjectIntrospection
@@ -16,6 +26,10 @@ stdenv.mkDerivation rec {
   buildInputs = [ libssh2 ];
 
   meta = with stdenv.lib; {
+    description = "A glib wrapper library around the libgit2 git access library";
+    homepage = https://wiki.gnome.org/Projects/Libgit2-glib;
+    license = licenses.lgpl21;
+    maintainers = gnome3.maintainers;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/misc/libgit2-glib/src.nix b/pkgs/desktops/gnome-3/misc/libgit2-glib/src.nix
deleted file mode 100644
index d233dc3a4015..000000000000
--- a/pkgs/desktops/gnome-3/misc/libgit2-glib/src.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-# Autogenerated by maintainers/scripts/gnome.sh update
-
-fetchurl: {
-  name = "libgit2-glib-0.26.2";
-
-  src = fetchurl {
-    url = mirror://gnome/sources/libgit2-glib/0.26/libgit2-glib-0.26.2.tar.xz;
-    sha256 = "2ad6f20db2e38bbfdb6cb452704fe8a911036b86de82dc75bb0f3b20db40ce9c";
-  };
-}
diff --git a/pkgs/desktops/gnome-3/update.nix b/pkgs/desktops/gnome-3/update.nix
new file mode 100644
index 000000000000..b7a6ce16d11f
--- /dev/null
+++ b/pkgs/desktops/gnome-3/update.nix
@@ -0,0 +1,11 @@
+{ lib, writeScript, python3, common-updater-scripts, coreutils, gnugrep, gnused }:
+{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable" }:
+
+let
+  python = python3.withPackages (p: [ p.requests ]);
+in writeScript "update-${packageName}" ''
+  set -o errexit
+  PATH=${lib.makeBinPath [ common-updater-scripts coreutils gnugrep gnused python ]}
+  latest_tag=$(python "${./find-latest-version.py}" "${packageName}" "${versionPolicy}" "stable")
+  update-source-version "${attrPath}" "$latest_tag"
+''
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix
index 2c628eff5622..458c4eae136d 100644
--- a/pkgs/development/haskell-modules/make-package-set.nix
+++ b/pkgs/development/haskell-modules/make-package-set.nix
@@ -148,14 +148,13 @@ in package-set { inherit pkgs stdenv callPackage; } self // {
     callCabal2nix = name: src: args:
       overrideCabal (self.callPackage (haskellSrc2nix {
         inherit name;
-        src = pkgs.lib.cleanSourceWith
-          { src = if pkgs.lib.canCleanSource src
-                    then src
-                    else pkgs.safeDiscardStringContext src;
-            filter = path: type:
-              pkgs.lib.hasSuffix "${name}.cabal" path ||
-              pkgs.lib.hasSuffix "package.yaml" path;
-          };
+        src =
+          let filter = path: type:
+                pkgs.lib.hasSuffix "${name}.cabal" path ||
+                baseNameOf path == "package.yaml";
+          in if pkgs.lib.canCleanSource src
+               then pkgs.lib.cleanSourceWith { inherit src filter; }
+             else src;
       }) args) (_: { inherit src; });
 
     # : { root : Path
diff --git a/pkgs/development/interpreters/supercollider/default.nix b/pkgs/development/interpreters/supercollider/default.nix
index 19abfe1cea27..13184ad50e86 100644
--- a/pkgs/development/interpreters/supercollider/default.nix
+++ b/pkgs/development/interpreters/supercollider/default.nix
@@ -9,12 +9,12 @@ in
 
 stdenv.mkDerivation rec {
   name = "supercollider-${version}";
-  version = "3.8.1";
+  version = "3.9.1";
 
 
   src = fetchurl {
     url = "https://github.com/supercollider/supercollider/releases/download/Version-${version}/SuperCollider-${version}-Source-linux.tar.bz2";
-    sha256 = "1y8yb20k3lvj7c93qz2srrkvfv175n4n7p3qj89w0dp085mj0qmw";
+    sha256 = "150fgnjcmb06r3pa3mbsvb4iwnqlimjwdxgbs6p55zz6g8wbln7a";
   };
 
   hardeningDisable = [ "stackprotector" ];
diff --git a/pkgs/development/libraries/liburcu/default.nix b/pkgs/development/libraries/liburcu/default.nix
index 0c88f9871041..aa106baf8152 100644
--- a/pkgs/development/libraries/liburcu/default.nix
+++ b/pkgs/development/libraries/liburcu/default.nix
@@ -1,12 +1,12 @@
 { stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
-  version = "0.9.5";
+  version = "0.10.1";
   name = "liburcu-${version}";
 
   src = fetchurl {
     url = "http://lttng.org/files/urcu/userspace-rcu-${version}.tar.bz2";
-    sha256 = "19iq7985rhvbrj99hlmbyq2wjrkhssvigh5454mhaprn3c7jaj6r";
+    sha256 = "01pbg67qy5hcssy2yi0ckqapzfclgdq93li2rmzw4pa3wh5j42cw";
   };
 
   nativeBuildInputs = stdenv.lib.optional doCheck perl;
diff --git a/pkgs/development/libraries/soundtouch/default.nix b/pkgs/development/libraries/soundtouch/default.nix
index 729967ea1b7f..c338d6762a4d 100644
--- a/pkgs/development/libraries/soundtouch/default.nix
+++ b/pkgs/development/libraries/soundtouch/default.nix
@@ -2,10 +2,10 @@
 
 stdenv.mkDerivation rec {
   pName = "soundtouch";
-  name = "${pName}-1.9.2";
+  name = "${pName}-2.0.0";
   src = fetchurl {
     url = "http://www.surina.net/soundtouch/${name}.tar.gz";
-    sha256 = "04y5l56yn4jvwpv9mn1p3m2vi5kdym9xpdac8pmhwhl13r8qdsya";
+    sha256 = "09cxr02mfyj2bg731bj0i9hh565x8l9p91aclxs8wpqv8b8zf96j";
   };
 
   buildInputs = [ autoconf automake libtool ];
diff --git a/pkgs/development/libraries/unixODBC/default.nix b/pkgs/development/libraries/unixODBC/default.nix
index 99ab8a056162..7d59866d0431 100644
--- a/pkgs/development/libraries/unixODBC/default.nix
+++ b/pkgs/development/libraries/unixODBC/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "unixODBC-${version}";
-  version = "2.3.4";
+  version = "2.3.5";
 
   src = fetchurl {
     url = "ftp://ftp.unixodbc.org/pub/unixODBC/${name}.tar.gz";
-    sha256 = "0f8y88rcc2akjvjv5y66yx7k0ms9h1s0vbcfy25j93didflhj59f";
+    sha256 = "0ns93daph4wmk92d7m2w48x0yki4m1yznxnn97p1ldn6bkh742bn";
   };
 
   configureFlags = [ "--disable-gui" "--sysconfdir=/etc" ];
diff --git a/pkgs/development/tools/build-managers/waf/default.nix b/pkgs/development/tools/build-managers/waf/default.nix
index 61184cb6ba1a..65501b2b9350 100644
--- a/pkgs/development/tools/build-managers/waf/default.nix
+++ b/pkgs/development/tools/build-managers/waf/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "waf-${version}";
-  version = "1.9.0";
+  version = "2.0.4";
 
   src = fetchurl {
     url = "https://waf.io/waf-${version}.tar.bz2";
-    sha256 = "1sjpqzm2fzm8pxi3fwfinpsbw4z9040qkrzbg3lxik7ppsbjhn58";
+    sha256 = "0zmnwgccq5j7ipfi2j0k5s40q27krp1m6v2bd650axgzdbpa7ain";
   };
 
   buildInputs = [ python2 ];
diff --git a/pkgs/development/tools/database/squirrel-sql/default.nix b/pkgs/development/tools/database/squirrel-sql/default.nix
index afac17e121ad..7d4cf6ea5d5e 100644
--- a/pkgs/development/tools/database/squirrel-sql/default.nix
+++ b/pkgs/development/tools/database/squirrel-sql/default.nix
@@ -5,13 +5,13 @@
 , drivers ? []
 }:
 let
-  version = "3.7.1";
+  version = "3.8.1";
 in stdenv.mkDerivation rec {
   name = "squirrel-sql-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/project/squirrel-sql/1-stable/${version}-plainzip/squirrelsql-${version}-standard.zip";
-    sha256 = "1v141ply57k5krwbnnmz4mbs9hs8rbys0bkjz69gvxlqjizyiq23";
+    sha256 = "1vv38i4rwm8c8h0p9mmz21dyafd71pqprj7b8i5vx7f4q8xns2d2";
   };
 
   buildInputs = [
diff --git a/pkgs/development/tools/wiggle/default.nix b/pkgs/development/tools/wiggle/default.nix
index ffa6d4aac0ca..df32d68767fb 100644
--- a/pkgs/development/tools/wiggle/default.nix
+++ b/pkgs/development/tools/wiggle/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation {
 
-  name = "wiggle-1.0";
+  name = "wiggle-1.1";
 
   src = fetchurl {
-    url = "https://github.com/neilbrown/wiggle/archive/v1.0.tar.gz";
-    sha256 = "0552dkdvl001b2jasj0jwb69s7zy6wbc8gcysqj69b4qgl9c54cs";
+    url = "https://github.com/neilbrown/wiggle/archive/v1.1.tar.gz";
+    sha256 = "0gg1c0zcrd5fgawvjccmdscm3fka8h1qz4v807kvy1b2y1cf9c4w";
   };
 
   buildInputs = [ ncurses groff ];
diff --git a/pkgs/misc/drivers/sc-controller/default.nix b/pkgs/misc/drivers/sc-controller/default.nix
index dc62f4b1fbd4..93e8ffbc3ca8 100644
--- a/pkgs/misc/drivers/sc-controller/default.nix
+++ b/pkgs/misc/drivers/sc-controller/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonApplication rec {
   pname = "sc-controller";
-  version = "0.4.0.2";
+  version = "0.4.1";
 
   src = fetchFromGitHub {
-    owner = "kozec";
-    repo = "sc-controller";
-    rev = "v${version}";
-    sha256 = "0v1fgmnsi70z52l6c3fg49vki5rrdswr38mc82wbpmgi68vxwnyy";
+    owner  = "kozec";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "0zal8sl3j17gqmynig8jhqrhj7zfqql8vci4whn19gymchwjalzi";
   };
 
   nativeBuildInputs = [ wrapGAppsHook ];
@@ -52,11 +52,11 @@ buildPythonApplication rec {
   '';
 
   meta = with lib; {
-    homepage = https://github.com/kozec/sc-controller;
+    homepage    = https://github.com/kozec/sc-controller;
     # donations: https://www.patreon.com/kozec
     description = "User-mode driver and GUI for Steam Controller and other controllers";
-    license = licenses.gpl2;
-    platforms = platforms.linux;
-    maintainers = [ maintainers.orivej ];
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ orivej rnhmjoj ];
   };
 }
diff --git a/pkgs/os-specific/linux/rtlwifi_new/default.nix b/pkgs/os-specific/linux/rtlwifi_new/default.nix
index 4bf3ef82978e..b29b1f639cf7 100644
--- a/pkgs/os-specific/linux/rtlwifi_new/default.nix
+++ b/pkgs/os-specific/linux/rtlwifi_new/default.nix
@@ -6,13 +6,13 @@ let modDestDir = "$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/wi
 
 in stdenv.mkDerivation rec {
   name = "rtlwifi_new-${version}";
-  version = "2017-07-18";
+  version = "2018-02-17";
 
   src = fetchFromGitHub {
     owner = "lwfinger";
     repo = "rtlwifi_new";
-    rev = "a24cb561b4d23187ea103255336daa7ca88791a7";
-    sha256 = "1w9rx5wafcp1vc4yh7lj332bv78szl6gmx3ckr8yl6c39alqcv0d";
+    rev = "0588ac0cc5f530e7764705416370b70d3c2afedc";
+    sha256 = "1vs8rfw19lcs04bapa97zlnl5x0kf02sdw5ik0hdm27wgk0z969m";
   };
 
   hardeningDisable = [ "pic" "format" ];
diff --git a/pkgs/os-specific/linux/usbguard/daemon_read_only_config.patch b/pkgs/os-specific/linux/usbguard/daemon_read_only_config.patch
deleted file mode 100644
index eb4d5df698ac..000000000000
--- a/pkgs/os-specific/linux/usbguard/daemon_read_only_config.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/Library/ConfigFilePrivate.cpp b/src/Library/ConfigFilePrivate.cpp
-index 8aefa65..40914f7 100644
---- a/src/Library/ConfigFilePrivate.cpp
-+++ b/src/Library/ConfigFilePrivate.cpp
-@@ -51,7 +51,7 @@ namespace usbguard
- 
-   void ConfigFilePrivate::open(const std::string& path)
-   {
--    _stream.open(path, std::ios::in|std::ios::out);
-+    _stream.open(path, std::ios::in);
-     if (!_stream.is_open()) {
-       throw std::runtime_error("Can't open " + path);
-     }
diff --git a/pkgs/os-specific/linux/usbguard/default.nix b/pkgs/os-specific/linux/usbguard/default.nix
index 8ed4735dd278..2ca825a27d71 100644
--- a/pkgs/os-specific/linux/usbguard/default.nix
+++ b/pkgs/os-specific/linux/usbguard/default.nix
@@ -1,7 +1,8 @@
 {
   stdenv, fetchurl, lib,
-  libxslt, pandoc, pkgconfig,
+  libxslt, pandoc, asciidoctor, pkgconfig,
   dbus-glib, libcap_ng, libqb, libseccomp, polkit, protobuf, qtbase, qttools, qtsvg,
+  audit,
   libgcrypt ? null,
   libsodium ? null
 }:
@@ -11,23 +12,19 @@ with stdenv.lib;
 assert libgcrypt != null -> libsodium == null;
 
 stdenv.mkDerivation rec {
-  version = "0.7.0";
+  version = "0.7.2";
   name = "usbguard-${version}";
 
-  repo = "https://github.com/dkopecek/usbguard";
+  repo = "https://github.com/USBGuard/usbguard";
 
   src = fetchurl {
     url = "${repo}/releases/download/${name}/${name}.tar.gz";
-    sha256 = "1e1485a2b47ba3bde9de2851b371d2552a807047a21e0b81553cf80d7f722709";
+    sha256 = "5bd3e5219c590c3ae27b21315bd10b60e823cef64e5deff3305ff5b4087fc2d6";
   };
 
-  patches = [
-    ./daemon_read_only_config.patch
-    ./documentation.patch
-  ];
-
   nativeBuildInputs = [
     libxslt
+    asciidoctor
     pandoc # for rendering documentation
     pkgconfig
   ];
@@ -39,6 +36,7 @@ stdenv.mkDerivation rec {
     libseccomp
     polkit
     protobuf
+    audit
 
     qtbase
     qtsvg
@@ -61,7 +59,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "The USBGuard software framework helps to protect your computer against BadUSB.";
-    homepage = "https://dkopecek.github.io/usbguard/";
+    homepage = "https://usbguard.github.io/";
     license = licenses.gpl2;
     maintainers = [ maintainers.tnias ];
   };
diff --git a/pkgs/os-specific/linux/usbguard/documentation.patch b/pkgs/os-specific/linux/usbguard/documentation.patch
deleted file mode 100644
index 89de627131f5..000000000000
--- a/pkgs/os-specific/linux/usbguard/documentation.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff --git a/doc/usbguard-daemon.conf.5.md b/doc/usbguard-daemon.conf.5.md
-index ea86ad1..63aec70 100644
---- a/doc/usbguard-daemon.conf.5.md
-+++ b/doc/usbguard-daemon.conf.5.md
-@@ -30,21 +30,21 @@ The **usbguard-daemon.conf** file is loaded by the USBGuard daemon after it pars
- **RestoreControllerDeviceState**=<*boolean*>
- :   The USBGuard daemon modifies some attributes of controller devices like the default authorization state of new child device instances. Using this setting, you can control whether the daemon will try to restore the attribute values to the state before modification on shutdown.
- 
-+**DeviceManagerBackend**=<*backend*>
-+:   Which device manager backend implementation to use. Backend should be one of `uevent` (default) or `dummy`.
-+
- **IPCAllowedUsers**=<*username*> [<*username*> ...]
- :   A space delimited list of usernames that the daemon will accept IPC connections from.
- 
- **IPCAllowedGroups**=<*groupname*> [<*groupname*> ...]
- :   A space delimited list of groupnames that the daemon will accept IPC connections from.
- 
--**IPCAccessControlFiles**=<*path*>
--:   Path to a directory holding the IPC access control files.
--
--**DeviceManagerBackend**=<*backend*>
--:   Which device manager backend implementation to use. Backend should be one of `uevent` (default) or `dummy`.
--
- **IPCAccessControlFiles**=<*path*>
- :   The files at this location will be interpreted by the daemon as IPC access control definition files. See the **IPC ACCESS CONTROL** section for more details.
- 
-+**DeviceRulesWithPort**=<*boolean*>
-+:   Generate device specific rules including the "via-port" attribute.
-+
- **AuditFilePath**=<*filepath*>
- :   USBGuard audit events log file path.
- 
diff --git a/pkgs/servers/computing/slurm/default.nix b/pkgs/servers/computing/slurm/default.nix
index 59d627901131..fe028cf812e7 100644
--- a/pkgs/servers/computing/slurm/default.nix
+++ b/pkgs/servers/computing/slurm/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   name = "slurm-${version}";
-  version = "17.02.9";
+  version = "17.11.3";
 
   src = fetchurl {
     url = "https://download.schedmd.com/slurm/${name}.tar.bz2";
-    sha256 = "0w8v7fzbn7b3f9kg6lcj2jpkzln3vcv9s2cz37xbdifz0m2p1x7s";
+    sha256 = "1x3i6z03d9m46fvj1cslrapm1drvgyqch9pn4xf23kvbz4gkhaps";
   };
 
   outputs = [ "out" "dev" ];
diff --git a/pkgs/shells/nix-bash-completions/default.nix b/pkgs/shells/nix-bash-completions/default.nix
index fb6fa24ac334..c8582366d1a3 100644
--- a/pkgs/shells/nix-bash-completions/default.nix
+++ b/pkgs/shells/nix-bash-completions/default.nix
@@ -1,14 +1,14 @@
 { stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
-  version = "0.6.3";
+  version = "0.6.4";
   name = "nix-bash-completions-${version}";
 
   src = fetchFromGitHub {
     owner = "hedning";
     repo = "nix-bash-completions";
     rev = "v${version}";
-    sha256 = "1zmk9f53xpwk5j6qqisjlddgm2fr68p1q6pn3wa14bd777lranhj";
+    sha256 = "1kdysrfc8dx24q438wj3aisn64g2w5yb6mx91qa385p5hz7b1yz2";
   };
 
   # To enable lazy loading via. bash-completion we need a symlink to the script
diff --git a/pkgs/tools/archivers/xarchiver/default.nix b/pkgs/tools/archivers/xarchiver/default.nix
index 1c8d8367793a..189035a8c8b7 100644
--- a/pkgs/tools/archivers/xarchiver/default.nix
+++ b/pkgs/tools/archivers/xarchiver/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, gtk3, pkgconfig, intltool, libxslt }:
+{ stdenv, fetchFromGitHub, gtk3, pkgconfig, intltool, libxslt, hicolor-icon-theme }:
 
 stdenv.mkDerivation rec {
   version = "0.5.4.12";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gtk3 intltool libxslt ];
+  buildInputs = [ gtk3 intltool libxslt hicolor-icon-theme ];
 
   meta = {
     description = "GTK+ frontend to 7z,zip,rar,tar,bzip2, gzip,arj, lha, rpm and deb (open and extract only)";
diff --git a/pkgs/tools/misc/unclutter-xfixes/default.nix b/pkgs/tools/misc/unclutter-xfixes/default.nix
index dd13a0d9adce..9f43a7bd699f 100644
--- a/pkgs/tools/misc/unclutter-xfixes/default.nix
+++ b/pkgs/tools/misc/unclutter-xfixes/default.nix
@@ -2,7 +2,7 @@
   xlibsWrapper, libev, libXi, libXfixes,
   pkgconfig, asciidoc, libxslt, docbook_xsl }:
 
-let version = "1.2"; in
+let version = "1.3"; in
 
 stdenv.mkDerivation {
   name = "unclutter-xfixes-${version}";
@@ -12,7 +12,7 @@ stdenv.mkDerivation {
     owner = "Airblader";
     repo = "unclutter-xfixes";
     rev = "v${version}";
-    sha256 = "1pw567mj7mq5kr8mqnyrvy7jj62qfg6zgqfyzz21nncslddnjzg8";
+    sha256 = "1iikrz0023wygv29ny20xj1hlv9ry7hghlwjii6rj4jm59vl0mlz";
   };
 
   nativeBuildInputs = [pkgconfig];
diff --git a/pkgs/tools/networking/surfraw/default.nix b/pkgs/tools/networking/surfraw/default.nix
index 8624efeb3f77..b23616c57e92 100644
--- a/pkgs/tools/networking/surfraw/default.nix
+++ b/pkgs/tools/networking/surfraw/default.nix
@@ -1,11 +1,11 @@
 {stdenv, fetchurl, perl}:
 
 stdenv.mkDerivation rec {
-  name = "surfraw-2.2.9";
+  name = "surfraw-2.3.0";
 
   src = fetchurl {
-    url = "http://surfraw.alioth.debian.org/dist/surfraw-2.2.9.tar.gz";
-    sha256 = "1fy4ph5h9kp0jzj1m6pfylxnnmgdk0mmdppw76z9jhna4jndk5xa";
+    url = "http://surfraw.alioth.debian.org/dist/surfraw-2.3.0.tar.gz";
+    sha256 = "099nbif0x5cbcf18snc58nx1a3q7z0v9br9p2jiq9pcc7ic2015d";
   };
 
   configureFlags = [
diff --git a/pkgs/tools/networking/swagger-codegen/default.nix b/pkgs/tools/networking/swagger-codegen/default.nix
index 0c3af79628e1..4fc456523f7d 100644
--- a/pkgs/tools/networking/swagger-codegen/default.nix
+++ b/pkgs/tools/networking/swagger-codegen/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchurl, jre, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  version = "2.2.1";
+  version = "2.3.1";
   pname = "swagger-codegen";
   name = "${pname}-${version}";
 
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "https://oss.sonatype.org/content/repositories/releases/io/swagger/${pname}-cli/${version}/${jarfilename}";
-    sha256 = "1pwxkl3r93c8hsif9xm0h1hmbjrxz1q7hr5qn5n0sni1x3c3k0d1";
+    sha256 = "171qr0zx7i6cykv54vqjf3mplrf7w4a1fpq47wsj861lbf8xm322";
   };
 
   phases = [ "installPhase" ];
diff --git a/pkgs/tools/package-management/mynewt-newt/default.nix b/pkgs/tools/package-management/mynewt-newt/default.nix
index 1b8c1b2f6402..74c2fd59d4e3 100644
--- a/pkgs/tools/package-management/mynewt-newt/default.nix
+++ b/pkgs/tools/package-management/mynewt-newt/default.nix
@@ -2,7 +2,7 @@
 
 buildGoPackage rec {
   name = "mynewt-newt-${version}";
-  version = "1.0.0";
+  version = "1.3.0";
 
   goPackagePath = "mynewt.apache.org/newt";
   goDeps = ./deps.nix;
@@ -11,7 +11,7 @@ buildGoPackage rec {
     owner = "apache";
     repo = "incubator-mynewt-newt";
     rev = "mynewt_${builtins.replaceStrings ["."] ["_"] version}_tag";
-    sha256 = "1ixqxqizd957prd4j2nijgnkv84rffj8cx5f7aqyjq9nkawjksf6";
+    sha256 = "0ia6q1wf3ki2yw8ngw5gnbdrb7268qwi078j05f8gs1sppb3g563";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/tools/system/sleuthkit/default.nix b/pkgs/tools/system/sleuthkit/default.nix
index c4347da44607..616498593972 100644
--- a/pkgs/tools/system/sleuthkit/default.nix
+++ b/pkgs/tools/system/sleuthkit/default.nix
@@ -1,14 +1,14 @@
 { stdenv, fetchFromGitHub, autoreconfHook, libewf, afflib, openssl, zlib }:
 
 stdenv.mkDerivation rec {
-  version = "4.5.0";
+  version = "4.6.0";
   name = "sleuthkit-${version}";
 
   src = fetchFromGitHub {
     owner = "sleuthkit";
     repo = "sleuthkit";
     rev = name;
-    sha256 = "0h9l9yl5ibbgriq12gizg8k0r6jw6bnii3iljjp4p963wc0ms9b9";
+    sha256 = "0m5ll5sx0pxkn58y582b3v90rsfdrh8dm02kmv61psd0k6q0p91x";
   };
 
   postPatch = ''
diff --git a/pkgs/tools/system/ts/default.nix b/pkgs/tools/system/ts/default.nix
index 0e51b0610910..79ba7d893040 100644
--- a/pkgs/tools/system/ts/default.nix
+++ b/pkgs/tools/system/ts/default.nix
@@ -4,7 +4,7 @@
 
 stdenv.mkDerivation rec {
 
-  name = "ts-0.7.6";
+  name = "ts-1.0";
 
   installPhase=''make install "PREFIX=$out"'';
 
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "http://viric.name/~viric/soft/ts/${name}.tar.gz";
-    sha256 = "07b61sx3hqpdxlg5a1xrz9sxww9yqdix3bmr0sm917r3rzk87lwk";
+    sha256 = "15dkzczx10fhl0zs9bmcgkxfbwq2znc7bpscljm4rchbzx7y6lsg";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d6cd3e3f5f7a..4c2f6d583431 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -20841,8 +20841,6 @@ with pkgs;
 
   tlwg = callPackage ../data/fonts/tlwg { };
 
-  safeDiscardStringContext = callPackage ../build-support/safe-discard-string-context.nix { };
-
   simplehttp2server = callPackage ../servers/simplehttp2server { };
 
   diceware = callPackage ../tools/security/diceware { };