summary refs log tree commit diff
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2018-03-01 14:56:58 -0500
committerShea Levy <shea@shealevy.com>2018-03-01 14:56:58 -0500
commit95579af5ec0a282d8ab2fccfeeff445c2c63c74f (patch)
tree57b1bb741d574361f7e467d81f29b0eef0b20ebe
parenta486cb1af61dd88579de254637ecd4b4d3fc3173 (diff)
parent810dd0f9844e56efec66bfbf82c5e0412acbcba7 (diff)
downloadnixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.tar
nixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.tar.gz
nixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.tar.bz2
nixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.tar.lz
nixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.tar.xz
nixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.tar.zst
nixlib-95579af5ec0a282d8ab2fccfeeff445c2c63c74f.zip
Merge remote-tracking branch 'origin/staging' into cross-nixos
-rw-r--r--lib/maintainers.nix2
-rwxr-xr-xmaintainers/scripts/gnome.sh192
-rwxr-xr-xmaintainers/scripts/update.nix47
-rw-r--r--nixos/modules/misc/ids.nix2
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/network-filesystems/ceph.nix371
-rw-r--r--nixos/modules/system/boot/networkd.nix6
-rw-r--r--nixos/release.nix1
-rw-r--r--nixos/tests/ceph.nix140
-rw-r--r--pkgs/applications/audio/praat/default.nix4
-rw-r--r--pkgs/applications/audio/qmidiroute/default.nix4
-rw-r--r--pkgs/applications/audio/rosegarden/default.nix4
-rw-r--r--pkgs/applications/graphics/krita/default.nix2
-rw-r--r--pkgs/applications/misc/redshift/default.nix6
-rw-r--r--pkgs/applications/misc/regextester/default.nix54
-rw-r--r--pkgs/applications/networking/feedreaders/rssguard/default.nix10
-rw-r--r--pkgs/applications/office/skrooge/default.nix4
-rw-r--r--pkgs/applications/science/misc/root/default.nix4
-rw-r--r--pkgs/applications/search/recoll/default.nix44
-rw-r--r--pkgs/applications/version-management/rabbitvcs/default.nix4
-rw-r--r--pkgs/applications/video/mkvtoolnix/default.nix30
-rw-r--r--pkgs/applications/video/mpc-qt/default.nix27
-rw-r--r--pkgs/applications/video/mpv/scripts/convert.nix4
-rw-r--r--pkgs/applications/virtualization/remotebox/default.nix4
-rw-r--r--pkgs/applications/virtualization/rkt/default.nix2
-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/compilers/ocaml/4.06.nix4
-rw-r--r--pkgs/development/haskell-modules/configuration-nix.nix4
-rw-r--r--pkgs/development/haskell-modules/make-package-set.nix15
-rw-r--r--pkgs/development/interpreters/php/default.nix4
-rw-r--r--pkgs/development/libraries/catch/default.nix4
-rw-r--r--pkgs/development/libraries/elementary-cmake-modules/default.nix28
-rw-r--r--pkgs/development/libraries/elementary-cmake-modules/setup-hook.sh4
-rw-r--r--pkgs/development/libraries/liburcu/default.nix4
-rw-r--r--pkgs/development/libraries/readosm/default.nix4
-rw-r--r--pkgs/development/libraries/stfl/default.nix6
-rw-r--r--pkgs/development/node-packages/node-packages-v8.json1
-rw-r--r--pkgs/development/node-packages/node-packages-v8.nix42
-rw-r--r--pkgs/development/ocaml-modules/biniou/default.nix40
-rw-r--r--pkgs/development/python-modules/flake8-import-order/default.nix25
-rw-r--r--pkgs/development/python-modules/jsonrpc-async/default.nix1
-rw-r--r--pkgs/development/python-modules/jsonrpc-base/default.nix1
-rw-r--r--pkgs/development/python-modules/jsonrpc-websocket/default.nix1
-rw-r--r--pkgs/development/python-modules/pydocstyle/default.nix26
-rw-r--r--pkgs/development/python-modules/pylama/default.nix33
-rw-r--r--pkgs/development/python-modules/pylint/default.nix2
-rw-r--r--pkgs/development/python-modules/pyunifi/default.nix1
-rw-r--r--pkgs/development/python-modules/wakeonlan/default.nix1
-rw-r--r--pkgs/development/ruby-modules/gem-config/default.nix3
-rw-r--r--pkgs/development/tools/build-managers/bear/cmakepaths.patch13
-rw-r--r--pkgs/development/tools/build-managers/bear/default.nix4
-rw-r--r--pkgs/development/tools/geckodriver/default.nix16
-rw-r--r--pkgs/development/tools/misc/ccache/default.nix15
-rw-r--r--pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch42
-rw-r--r--pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch6
-rw-r--r--pkgs/development/tools/parsing/re2c/default.nix4
-rw-r--r--pkgs/games/freecell-solver/default.nix4
-rw-r--r--pkgs/games/pioneer/default.nix4
-rw-r--r--pkgs/games/rocksndiamonds/default.nix4
-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/tp_smapi/default.nix6
-rw-r--r--pkgs/servers/radarr/default.nix4
-rw-r--r--pkgs/servers/sql/mysql/5.7.x.nix1
-rw-r--r--pkgs/servers/sql/postgresql/pgroonga/default.nix4
-rw-r--r--pkgs/tools/compression/lzip/default.nix4
-rw-r--r--pkgs/tools/filesystems/reiser4progs/default.nix4
-rw-r--r--pkgs/tools/graphics/scanbd/default.nix4
-rw-r--r--pkgs/tools/misc/esptool/default.nix8
-rw-r--r--pkgs/tools/misc/exa/default.nix9
-rw-r--r--pkgs/tools/misc/phraseapp-client/default.nix4
-rw-r--r--pkgs/tools/networking/s3cmd/default.nix4
-rw-r--r--pkgs/top-level/all-packages.nix9
-rw-r--r--pkgs/top-level/python-packages.nix9
300 files changed, 2355 insertions, 1653 deletions
diff --git a/lib/maintainers.nix b/lib/maintainers.nix
index a2aa88a807de..76379a02ffbb 100644
--- a/lib/maintainers.nix
+++ b/lib/maintainers.nix
@@ -71,6 +71,7 @@
   auntie = "Jonathan Glines <auntieNeo@gmail.com>";
   avnik = "Alexander V. Nikolaev <avn@avnik.info>";
   aycanirican = "Aycan iRiCAN <iricanaycan@gmail.com>";
+  babariviere = "Bastien Riviere <babariviere@protonmail.com>";
   bachp = "Pascal Bach <pascal.bach@nextrem.ch>";
   backuitist = "Bruno Bieth";
   badi = "Badi' Abdul-Wahid <abdulwahidc@gmail.com>";
@@ -380,6 +381,7 @@
   ledif = "Adam Fidel <refuse@gmail.com>";
   leemachin = "Lee Machin <me@mrl.ee>";
   leenaars = "Michiel Leenaars <ml.software@leenaa.rs>";
+  lejonet = "Daniel Kuehn <daniel@kuehn.se>";
   leonardoce = "Leonardo Cecchi <leonardo.cecchi@gmail.com>";
   lethalman = "Luca Bruno <lucabru@src.gnome.org>";
   lewo = "Antoine Eiche <lewo@abesis.fr>";
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/modules/misc/ids.nix b/nixos/modules/misc/ids.nix
index c0c6a6ef9244..8d775ffc82d3 100644
--- a/nixos/modules/misc/ids.nix
+++ b/nixos/modules/misc/ids.nix
@@ -304,6 +304,7 @@
       mighttpd2 = 285;
       hass = 286;
       monero = 287;
+      ceph = 288;
 
       # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
 
@@ -576,6 +577,7 @@
       mighttpd2 = 285;
       hass = 286;
       monero = 287;
+      ceph = 288;
 
       # When adding a gid, make sure it doesn't match an existing
       # uid. Users and groups with the same name should have equal
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 13a32b968dcb..3bb65c6b295a 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -439,6 +439,7 @@
   ./services/network-filesystems/u9fs.nix
   ./services/network-filesystems/yandex-disk.nix
   ./services/network-filesystems/xtreemfs.nix
+  ./services/network-filesystems/ceph.nix
   ./services/networking/amuled.nix
   ./services/networking/aria2.nix
   ./services/networking/asterisk.nix
diff --git a/nixos/modules/services/network-filesystems/ceph.nix b/nixos/modules/services/network-filesystems/ceph.nix
new file mode 100644
index 000000000000..5de8ae79a246
--- /dev/null
+++ b/nixos/modules/services/network-filesystems/ceph.nix
@@ -0,0 +1,371 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  ceph = pkgs.ceph;
+  cfg  = config.services.ceph;
+  # function that translates "camelCaseOptions" to "camel case options", credits to tilpner in #nixos@freenode
+  translateOption = replaceStrings upperChars (map (s: " ${s}") lowerChars);
+  generateDaemonList = (daemonType: daemons: extraServiceConfig:
+    mkMerge (
+      map (daemon: 
+        { "ceph-${daemonType}-${daemon}" = generateServiceFile daemonType daemon cfg.global.clusterName ceph extraServiceConfig; }
+      ) daemons
+    )
+  );
+  generateServiceFile = (daemonType: daemonId: clusterName: ceph: extraServiceConfig: {
+    enable = true;
+    description = "Ceph ${builtins.replaceStrings lowerChars upperChars daemonType} daemon ${daemonId}";
+    after = [ "network-online.target" "local-fs.target" "time-sync.target" ] ++ optional (daemonType == "osd") "ceph-mon.target";
+    wants = [ "network-online.target" "local-fs.target" "time-sync.target" ];
+    partOf = [ "ceph-${daemonType}.target" ];
+    wantedBy = [ "ceph-${daemonType}.target" ];
+
+    serviceConfig = {
+      LimitNOFILE = 1048576;
+      LimitNPROC = 1048576;
+      Environment = "CLUSTER=${clusterName}";
+      ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
+      PrivateDevices = "yes";
+      PrivateTmp = "true";
+      ProtectHome = "true";
+      ProtectSystem = "full";
+      Restart = "on-failure";
+      StartLimitBurst = "5";
+      StartLimitInterval = "30min";
+      ExecStart = "${ceph.out}/bin/${if daemonType == "rgw" then "radosgw" else "ceph-${daemonType}"} -f --cluster ${clusterName} --id ${if daemonType == "rgw" then "client.${daemonId}" else daemonId} --setuser ceph --setgroup ceph";
+    } // extraServiceConfig
+      // optionalAttrs (daemonType == "osd") { ExecStartPre = "${ceph.out}/libexec/ceph/ceph-osd-prestart.sh --id ${daemonId} --cluster ${clusterName}"; };
+    } // optionalAttrs (builtins.elem daemonType [ "mds" "mon" "rgw" "mgr" ]) { preStart = ''
+        daemonPath="/var/lib/ceph/${if daemonType == "rgw" then "radosgw" else daemonType}/${clusterName}-${daemonId}"
+        if [ ! -d ''$daemonPath ]; then
+          mkdir -m 755 -p ''$daemonPath
+          chown -R ceph:ceph ''$daemonPath 
+        fi
+      '';
+    } // optionalAttrs (daemonType == "osd") { path = [ pkgs.getopt ]; }
+  );
+  generateTargetFile = (daemonType:
+    {
+      "ceph-${daemonType}" = {
+        description = "Ceph target allowing to start/stop all ceph-${daemonType} services at once";
+        partOf = [ "ceph.target" ];
+        before = [ "ceph.target" ];
+      };
+    }
+  );
+in 
+{
+  options.services.ceph = {
+    # Ceph has a monolithic configuration file but different sections for
+    # each daemon, a separate client section and a global section
+    enable = mkEnableOption "Ceph global configuration";
+
+    global = {
+      fsid = mkOption {
+        type = types.str;
+        example = ''
+          433a2193-4f8a-47a0-95d2-209d7ca2cca5
+        '';
+        description = ''
+          Filesystem ID, a generated uuid, its must be generated and set before
+          attempting to start a cluster
+        '';
+      };
+
+      clusterName = mkOption {
+        type = types.str;
+        default = "ceph";
+        description = ''
+          Name of cluster
+        '';
+      };
+
+      monInitialMembers = mkOption {
+        type = with types; nullOr commas;
+        default = null;
+        example = ''
+          node0, node1, node2 
+        '';
+        description = ''
+          List of hosts that will be used as monitors at startup.
+        '';
+      };
+
+      monHost = mkOption {
+        type = with types; nullOr commas;
+        default = null;
+        example = ''
+          10.10.0.1, 10.10.0.2, 10.10.0.3
+        '';
+        description = ''
+          List of hostname shortnames/IP addresses of the initial monitors.
+        '';
+      };
+
+      maxOpenFiles = mkOption {
+        type = types.int;
+        default = 131072;
+        description = ''
+          Max open files for each OSD daemon.
+        '';
+      };
+
+      authClusterRequired = mkOption {
+        type = types.enum [ "cephx" "none" ];
+        default = "cephx";
+        description = ''
+          Enables requiring daemons to authenticate with eachother in the cluster.
+        '';
+      };
+
+      authServiceRequired = mkOption {
+        type = types.enum [ "cephx" "none" ];
+        default = "cephx";
+        description = ''
+          Enables requiring clients to authenticate with the cluster to access services in the cluster (e.g. radosgw, mds or osd).
+        '';
+      };
+
+      authClientRequired = mkOption {
+        type = types.enum [ "cephx" "none" ];
+        default = "cephx";
+        description = ''
+          Enables requiring the cluster to authenticate itself to the client.
+        '';
+      };
+
+      publicNetwork = mkOption {
+        type = with types; nullOr commas;
+        default = null;
+        example = ''
+          10.20.0.0/24, 192.168.1.0/24
+        '';
+        description = ''
+          A comma-separated list of subnets that will be used as public networks in the cluster.
+        '';
+      };
+
+      clusterNetwork = mkOption {
+        type = with types; nullOr commas;
+        default = null;
+        example = ''
+          10.10.0.0/24, 192.168.0.0/24
+        '';
+        description = ''
+          A comma-separated list of subnets that will be used as cluster networks in the cluster.
+        '';
+      };
+    };
+
+    mgr = {
+      enable = mkEnableOption "Ceph MGR daemon";
+      daemons = mkOption {
+        type = with types; listOf str;
+        default = [];
+        example = ''
+          [ "name1" "name2" ];
+        '';
+        description = ''
+          A list of names for manager daemons that should have a service created. The names correspond
+          to the id part in ceph i.e. [ "name1" ] would result in mgr.name1
+        '';
+      };
+      extraConfig = mkOption {
+        type = with types; attrsOf str;
+        default = {};
+        description = ''
+          Extra configuration to add to the global section for manager daemons.
+        '';
+      };
+    };
+
+    mon = {
+      enable = mkEnableOption "Ceph MON daemon";
+      daemons = mkOption {
+        type = with types; listOf str;
+        default = [];
+        example = ''
+          [ "name1" "name2" ];
+        '';
+        description = ''
+          A list of monitor daemons that should have a service created. The names correspond
+          to the id part in ceph i.e. [ "name1" ] would result in mon.name1
+        '';
+      };
+      extraConfig = mkOption {
+        type = with types; attrsOf str;
+        default = {};
+        description = ''
+          Extra configuration to add to the monitor section.
+        '';
+      };
+    };
+
+    osd = {
+      enable = mkEnableOption "Ceph OSD daemon";
+      daemons = mkOption {
+        type = with types; listOf str;
+        default = [];
+        example = ''
+          [ "name1" "name2" ];
+        '';
+        description = ''
+          A list of OSD daemons that should have a service created. The names correspond
+          to the id part in ceph i.e. [ "name1" ] would result in osd.name1
+        '';
+      };
+      extraConfig = mkOption {
+        type = with types; attrsOf str;
+        default = {
+          "osd journal size" = "10000";
+          "osd pool default size" = "3";
+          "osd pool default min size" = "2";
+          "osd pool default pg num" = "200";
+          "osd pool default pgp num" = "200";
+          "osd crush chooseleaf type" = "1";
+        };
+        description = ''
+          Extra configuration to add to the OSD section.
+        '';
+      };
+    };
+
+    mds = {
+      enable = mkEnableOption "Ceph MDS daemon";
+      daemons = mkOption {
+        type = with types; listOf str;
+        default = [];
+        example = ''
+          [ "name1" "name2" ];
+        '';
+        description = ''
+          A list of metadata service daemons that should have a service created. The names correspond
+          to the id part in ceph i.e. [ "name1" ] would result in mds.name1
+        '';
+      };
+      extraConfig = mkOption {
+        type = with types; attrsOf str;
+        default = {};
+        description = ''
+          Extra configuration to add to the MDS section.
+        '';
+      };
+    };
+
+    rgw = {
+      enable = mkEnableOption "Ceph RadosGW daemon";
+      daemons = mkOption {
+        type = with types; listOf str;
+        default = [];
+        example = ''
+          [ "name1" "name2" ];
+        '';
+        description = ''
+          A list of rados gateway daemons that should have a service created. The names correspond
+          to the id part in ceph i.e. [ "name1" ] would result in client.name1, radosgw daemons
+          aren't daemons to cluster in the sense that OSD, MGR or MON daemons are. They are simply
+          daemons, from ceph, that uses the cluster as a backend.
+        '';
+      };
+    };
+
+    client = {
+      enable = mkEnableOption "Ceph client configuration";
+      extraConfig = mkOption {
+        type = with types; attrsOf str;
+        default = {};
+        example = ''
+          {
+            # This would create a section for a radosgw daemon named node0 and related
+            # configuration for it
+            "client.radosgw.node0" = { "some config option" = "true"; };
+          };
+        '';
+        description = ''
+          Extra configuration to add to the client section. Configuration for rados gateways
+          would be added here, with their own sections, see example.
+        '';
+      };
+    };
+  };
+
+  config = mkIf config.services.ceph.enable {
+    assertions = [
+      { assertion = cfg.global.fsid != "";
+        message = "fsid has to be set to a valid uuid for the cluster to function";
+      }
+      { assertion = cfg.mgr.enable == true;
+        message = "ceph 12.x requires atleast 1 MGR daemon enabled for the cluster to function";
+      }
+      { assertion = cfg.mon.enable == true -> cfg.mon.daemons != [];
+        message = "have to set id of atleast one MON if you're going to enable Monitor";
+      }
+      { assertion = cfg.mds.enable == true -> cfg.mds.daemons != [];
+        message = "have to set id of atleast one MDS if you're going to enable Metadata Service";
+      }
+      { assertion = cfg.osd.enable == true -> cfg.osd.daemons != [];
+        message = "have to set id of atleast one OSD if you're going to enable OSD";
+      }
+      { assertion = cfg.mgr.enable == true -> cfg.mgr.daemons != [];
+        message = "have to set id of atleast one MGR if you're going to enable MGR";
+      }
+    ];
+
+    warnings = optional (cfg.global.monInitialMembers == null) 
+      ''Not setting up a list of members in monInitialMembers requires that you set the host variable for each mon daemon or else the cluster won't function'';
+    
+    environment.etc."ceph/ceph.conf".text = let
+      # Translate camelCaseOptions to the expected camel case option for ceph.conf
+      translatedGlobalConfig = mapAttrs' (name: value: nameValuePair (translateOption name) value) cfg.global;
+      # Merge the extraConfig set for mgr daemons, as mgr don't have their own section
+      globalAndMgrConfig = translatedGlobalConfig // optionalAttrs cfg.mgr.enable cfg.mgr.extraConfig;
+      # Remove all name-value pairs with null values from the attribute set to avoid making empty sections in the ceph.conf
+      globalConfig = mapAttrs' (name: value: nameValuePair (translateOption name) value) (filterAttrs (name: value: value != null) globalAndMgrConfig);
+      totalConfig = {
+          "global" = globalConfig;
+        } // optionalAttrs (cfg.mon.enable && cfg.mon.extraConfig != {}) { "mon" = cfg.mon.extraConfig; }
+          // optionalAttrs (cfg.mds.enable && cfg.mds.extraConfig != {}) { "mds" = cfg.mds.extraConfig; }
+          // optionalAttrs (cfg.osd.enable && cfg.osd.extraConfig != {}) { "osd" = cfg.osd.extraConfig; }
+          // optionalAttrs (cfg.client.enable && cfg.client.extraConfig != {})  cfg.client.extraConfig;
+      in
+        generators.toINI {} totalConfig;
+
+    users.extraUsers = singleton {
+      name = "ceph";
+      uid = config.ids.uids.ceph;
+      description = "Ceph daemon user";
+    };
+
+    users.extraGroups = singleton {
+      name = "ceph";
+      gid = config.ids.gids.ceph;
+    };
+
+    systemd.services = let
+      services = [] 
+        ++ optional cfg.mon.enable (generateDaemonList "mon" cfg.mon.daemons { RestartSec = "10"; }) 
+        ++ optional cfg.mds.enable (generateDaemonList "mds" cfg.mds.daemons { StartLimitBurst = "3"; })
+        ++ optional cfg.osd.enable (generateDaemonList "osd" cfg.osd.daemons { StartLimitBurst = "30"; RestartSec = "20s"; })
+        ++ optional cfg.rgw.enable (generateDaemonList "rgw" cfg.rgw.daemons { })
+        ++ optional cfg.mgr.enable (generateDaemonList "mgr" cfg.mgr.daemons { StartLimitBurst = "3"; });
+      in 
+        mkMerge services;
+
+    systemd.targets = let
+      targets = [
+        { "ceph" = { description = "Ceph target allowing to start/stop all ceph service instances at once"; }; }
+      ] ++ optional cfg.mon.enable (generateTargetFile "mon")
+        ++ optional cfg.mds.enable (generateTargetFile "mds")
+        ++ optional cfg.osd.enable (generateTargetFile "osd")
+        ++ optional cfg.rgw.enable (generateTargetFile "rgw")
+        ++ optional cfg.mgr.enable (generateTargetFile "mgr");
+      in
+        mkMerge targets;
+
+    systemd.tmpfiles.rules = [
+      "d /run/ceph 0770 ceph ceph -"
+    ];
+  };
+}
diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index eea10613ea58..7bf7a51a2417 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -650,7 +650,11 @@ let
   unitFiles = map (name: {
     target = "systemd/network/${name}";
     source = "${cfg.units.${name}.unit}/${name}";
-  }) (attrNames cfg.units);
+  }) (attrNames cfg.units) ++
+  (map (entry: {
+    target = "systemd/network/${entry}";
+    source = "${config.systemd.package}/lib/systemd/network/${entry}";
+  }) (attrNames (builtins.readDir "${config.systemd.package}/lib/systemd/network")));
 in
 
 {
diff --git a/nixos/release.nix b/nixos/release.nix
index 558bbbf9a9d4..473b11313bef 100644
--- a/nixos/release.nix
+++ b/nixos/release.nix
@@ -230,6 +230,7 @@ in rec {
   tests.borgbackup = callTest tests/borgbackup.nix {};
   tests.buildbot = callTest tests/buildbot.nix {};
   tests.cadvisor = callTestOnTheseSystems ["x86_64-linux"] tests/cadvisor.nix {};
+  tests.ceph = callTestOnTheseSystems ["x86_64-linux"] tests/ceph.nix {};
   tests.chromium = (callSubTestsOnTheseSystems ["x86_64-linux"] tests/chromium.nix {}).stable;
   tests.cjdns = callTest tests/cjdns.nix {};
   tests.cloud-init = callTest tests/cloud-init.nix {};
diff --git a/nixos/tests/ceph.nix b/nixos/tests/ceph.nix
new file mode 100644
index 000000000000..b9993062c079
--- /dev/null
+++ b/nixos/tests/ceph.nix
@@ -0,0 +1,140 @@
+import ./make-test.nix ({pkgs, ...}: rec {
+  name = "All-in-one-basic-ceph-cluster";
+  meta = with pkgs.stdenv.lib.maintainers; {
+    maintainers = [ lejonet ];
+  };
+
+  nodes = {
+    aio = { config, pkgs, ... }: {
+      virtualisation = {
+        emptyDiskImages = [ 20480 20480 ];
+        vlans = [ 1 ];
+      };
+      
+      networking = {
+        firewall.allowPing = true;
+        useDHCP = false;
+        interfaces.eth1.ipv4.addresses = pkgs.lib.mkOverride 0 [
+          { address = "192.168.1.1"; prefixLength = 24; }
+        ];
+      };
+
+      environment.systemPackages = with pkgs; [
+        bash
+        sudo
+        ceph
+        xfsprogs
+      ];
+      nixpkgs.config.packageOverrides = super: {
+        ceph = super.ceph.override({ nss = super.nss; libxfs = super.libxfs; libaio = super.libaio; jemalloc = super.jemalloc; });
+      };
+
+      boot.kernelModules = [ "xfs" ];
+
+      services.ceph.enable = true;
+      services.ceph.global = {
+        fsid = "066ae264-2a5d-4729-8001-6ad265f50b03";
+        monInitialMembers = "aio";
+        monHost = "192.168.1.1";
+      };
+
+      services.ceph.mon = {
+        enable = true;
+        daemons = [ "aio" ];
+      };
+
+      services.ceph.mgr = {
+        enable = true;
+        daemons = [ "aio" ];
+      };
+
+      services.ceph.osd = {
+        enable = true;
+        daemons = [ "0" "1" ];
+      };
+    };
+  };
+  
+  testScript = { nodes, ... }: ''
+    startAll;
+
+    $aio->waitForUnit("network.target");
+
+    # Create the ceph-related directories
+    $aio->mustSucceed(
+      "mkdir -p /var/lib/ceph/mgr/ceph-aio/",
+      "mkdir -p /var/lib/ceph/mon/ceph-aio/",
+      "mkdir -p /var/lib/ceph/osd/ceph-{0..1}/",
+      "chown ceph:ceph -R /var/lib/ceph/"
+    );
+
+    # Bootstrap ceph-mon daemon
+    $aio->mustSucceed(
+      "mkdir -p /var/lib/ceph/bootstrap-osd && chown ceph:ceph /var/lib/ceph/bootstrap-osd",
+      "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
+      "ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
+      "ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
+            "monmaptool --create --add aio 192.168.1.1 --fsid 066ae264-2a5d-4729-8001-6ad265f50b03 /tmp/monmap",
+      "sudo -u ceph ceph-mon --mkfs -i aio --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
+      "touch /var/lib/ceph/mon/ceph-aio/done",
+      "systemctl start ceph-mon-aio"
+    );
+    $aio->waitForUnit("ceph-mon-aio");
+
+    # Can't check ceph status until a mon is up
+    $aio->succeed("ceph -s | grep 'mon: 1 daemons'");
+          
+    # Start the ceph-mgr daemon, it has no deps and hardly any setup
+    $aio->mustSucceed(
+      "ceph auth get-or-create mgr.aio mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-aio/keyring",
+      "systemctl start ceph-mgr-aio"
+    );
+    $aio->waitForUnit("ceph-mgr-aio");
+    $aio->waitUntilSucceeds("ceph -s | grep 'quorum aio'");
+
+    # Bootstrap both OSDs
+    $aio->mustSucceed(
+      "mkfs.xfs /dev/vdb",
+      "mkfs.xfs /dev/vdc",
+      "mount /dev/vdb /var/lib/ceph/osd/ceph-0",
+      "mount /dev/vdc /var/lib/ceph/osd/ceph-1",
+      "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-0/keyring --name osd.0 --add-key AQBCEJNa3s8nHRAANvdsr93KqzBznuIWm2gOGg==",
+      "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-1/keyring --name osd.1 --add-key AQBEEJNac00kExAAXEgy943BGyOpVH1LLlHafQ==",
+      "echo '{\"cephx_secret\": \"AQBCEJNa3s8nHRAANvdsr93KqzBznuIWm2gOGg==\"}' | ceph osd new 55ba2294-3e24-478f-bee0-9dca4c231dd9 -i -",
+      "echo '{\"cephx_secret\": \"AQBEEJNac00kExAAXEgy943BGyOpVH1LLlHafQ==\"}' | ceph osd new 5e97a838-85b6-43b0-8950-cb56d554d1e5 -i -"
+    );
+
+    # Initialize the OSDs with regular filestore
+    $aio->mustSucceed(
+      "ceph-osd -i 0 --mkfs --osd-uuid 55ba2294-3e24-478f-bee0-9dca4c231dd9",
+      "ceph-osd -i 1 --mkfs --osd-uuid 5e97a838-85b6-43b0-8950-cb56d554d1e5",
+      "chown -R ceph:ceph /var/lib/ceph/osd",
+      "systemctl start ceph-osd-0",
+      "systemctl start ceph-osd-1"
+    );
+
+    $aio->waitUntilSucceeds("ceph osd stat | grep '2 osds: 2 up, 2 in'");
+    $aio->waitUntilSucceeds("ceph -s | grep 'mgr: aio(active)'");
+    $aio->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
+
+    $aio->mustSucceed(
+      "ceph osd pool create aio-test 100 100",
+      "ceph osd pool ls | grep 'aio-test'",
+      "ceph osd pool rename aio-test aio-other-test",
+      "ceph osd pool ls | grep 'aio-other-test'",
+      "ceph -s | grep '1 pools, 100 pgs'",
+      "ceph osd getcrushmap -o crush",
+      "crushtool -d crush -o decrushed",
+      "sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush",
+      "crushtool -c modcrush -o recrushed",
+      "ceph osd setcrushmap -i recrushed",
+      "ceph osd pool set aio-other-test size 2"
+    );
+    $aio->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
+    $aio->waitUntilSucceeds("ceph -s | grep '100 active+clean'");
+    $aio->mustFail(
+      "ceph osd pool ls | grep 'aio-test'",
+      "ceph osd pool delete aio-other-test aio-other-test --yes-i-really-really-mean-it"
+    );
+  '';
+})
diff --git a/pkgs/applications/audio/praat/default.nix b/pkgs/applications/audio/praat/default.nix
index 2bb2960afbf1..94b240ebb028 100644
--- a/pkgs/applications/audio/praat/default.nix
+++ b/pkgs/applications/audio/praat/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "praat-${version}";
-  version = "5.4.17";
+  version = "6.0.37";
 
   src = fetchurl {
     url = "https://github.com/praat/praat/archive/v${version}.tar.gz";
-    sha256 = "0s2hrksghg686059vc90h3ywhd2702pqcvy99icw27q5mdk6dqsx";
+    sha256 = "1c675jfzcrwfn8lcswm5y5kmazkhnb0p4mzlf5sim57hms88ffjq";
   };
 
   configurePhase = ''
diff --git a/pkgs/applications/audio/qmidiroute/default.nix b/pkgs/applications/audio/qmidiroute/default.nix
index 1e76e769937b..7f5191a02c20 100644
--- a/pkgs/applications/audio/qmidiroute/default.nix
+++ b/pkgs/applications/audio/qmidiroute/default.nix
@@ -1,12 +1,12 @@
 { stdenv, fetchurl, pkgconfig, qt4, alsaLib }:
 
 stdenv.mkDerivation rec {
-  version = "0.3.0";
+  version = "0.4.0";
   name = "qmidiroute-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/project/alsamodular/QMidiRoute/${version}/${name}.tar.gz";
-    sha256 = "11bfjz14z37v6hk2xyg4vrw423b5h3qgcbviv07g00ws1fgjygm2";
+    sha256 = "0vmjwarsxr5540rafhmdcc62yarf0w2l05bjjl9s28zzr5m39z3n";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/applications/audio/rosegarden/default.nix b/pkgs/applications/audio/rosegarden/default.nix
index 5966d4253f51..d881afa7f5f0 100644
--- a/pkgs/applications/audio/rosegarden/default.nix
+++ b/pkgs/applications/audio/rosegarden/default.nix
@@ -3,12 +3,12 @@
 , liblo, liblrdf, libsamplerate, libsndfile, lirc ? null, qtbase }:
 
 stdenv.mkDerivation (rec {
-  version = "17.04";
+  version = "17.12.1";
   name = "rosegarden-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/rosegarden/${name}.tar.bz2";
-    sha256 = "1khfcj22asdhjh0jvhkqsz200wgmigkhsrcz09ffia5hqm0n32lq";
+    sha256 = "155kqbxg85wqv0w97cmmx8wq0r4xb3qpnk20lfma04vj8k6hc1mg";
   };
 
   patchPhase = ''
diff --git a/pkgs/applications/graphics/krita/default.nix b/pkgs/applications/graphics/krita/default.nix
index 791cd7be2d09..1f7e779e88ab 100644
--- a/pkgs/applications/graphics/krita/default.nix
+++ b/pkgs/applications/graphics/krita/default.nix
@@ -29,7 +29,7 @@ mkDerivation rec {
   NIX_CFLAGS_COMPILE = [ "-I${ilmbase.dev}/include/OpenEXR" ];
 
   meta = with lib; {
-    description = "A free an open source painting application";
+    description = "A free and open source painting application";
     homepage = https://krita.org/;
     maintainers = with maintainers; [ abbradar ];
     platforms = platforms.linux;
diff --git a/pkgs/applications/misc/redshift/default.nix b/pkgs/applications/misc/redshift/default.nix
index 594886149c5f..b7ab092bbc04 100644
--- a/pkgs/applications/misc/redshift/default.nix
+++ b/pkgs/applications/misc/redshift/default.nix
@@ -42,10 +42,8 @@ stdenv.mkDerivation rec {
   pythonPath = [ pygobject3 pyxdg ];
 
   preConfigure = "./bootstrap";
-  postFixup = ''
-    wrapPythonPrograms
-    rm "$out/share/icons/hicolor/icon-theme.cache"
-  '';
+
+  postFixup = "wrapPythonPrograms";
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/misc/regextester/default.nix b/pkgs/applications/misc/regextester/default.nix
new file mode 100644
index 000000000000..c1b1cfb48a28
--- /dev/null
+++ b/pkgs/applications/misc/regextester/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, gettext
+, libxml2
+, pkgconfig
+, gtk3
+, granite
+, gnome3
+, cmake
+, ninja
+, vala
+, elementary-cmake-modules
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  name = "regextester-${version}";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "artemanufrij";
+    repo = "regextester";
+    rev = version;
+    sha256 = "07shdm10dc7jz2hka5dc51yp81a0dgc47nmkrp6fs6r9wqx0j30n";
+  };
+
+  XDG_DATA_DIRS = stdenv.lib.concatStringsSep ":" [
+    "${granite}/share"
+    "${gnome3.libgee}/share"
+  ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    wrapGAppsHook
+    vala
+    cmake
+    ninja
+    gettext
+    libxml2
+    elementary-cmake-modules
+  ];
+  buildInputs = [
+    gtk3
+    granite
+    gnome3.libgee
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A desktop application to test regular expressions interactively";
+    homepage = https://github.com/artemanufrij/regextester;
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/pkgs/applications/networking/feedreaders/rssguard/default.nix b/pkgs/applications/networking/feedreaders/rssguard/default.nix
index 0a89ec6023be..297703cde696 100644
--- a/pkgs/applications/networking/feedreaders/rssguard/default.nix
+++ b/pkgs/applications/networking/feedreaders/rssguard/default.nix
@@ -3,25 +3,19 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "rssguard";
-  version = "3.5.5";
+  version = "3.5.6";
 
   src = fetchFromGitHub {
     owner = "martinrotter";
     repo = pname;
     rev = version;
-    sha256 = "0swjh664y1yqr1rn3ym2kicyx7r97ypr4qf7qrjl4a5q1spzsv48";
+    sha256 = "1pdas7hg3nzykm3qi951fk25c9s6gjb7my82b9xzjn2yd7ks71by";
   };
 
   buildInputs =  [ qtwebengine qttools ];
   nativeBuildInputs = [ qmake wrapGAppsHook ];
   qmakeFlags = [ "CONFIG+=release" ];
 
-  # FIXME: This shouldn't be needed after 3.5.5.
-  # See: https://github.com/martinrotter/rssguard/issues/175
-  preConfigure = ''
-    lrelease rssguard.pro
-  '';
-
   meta = with stdenv.lib; {
     description = "Simple RSS/Atom feed reader with online synchronization";
     longDescription = ''
diff --git a/pkgs/applications/office/skrooge/default.nix b/pkgs/applications/office/skrooge/default.nix
index 0e0cb2ecf1d2..de9bfe64e5cc 100644
--- a/pkgs/applications/office/skrooge/default.nix
+++ b/pkgs/applications/office/skrooge/default.nix
@@ -7,11 +7,11 @@
 
 mkDerivation rec {
   name = "skrooge-${version}";
-  version = "2.10.5";
+  version = "2.11.0";
 
   src = fetchurl {
     url = "http://download.kde.org/stable/skrooge/${name}.tar.xz";
-    sha256 = "1c1yihypb6qgbzfcrw4ylqr9zivyba10xzvibrmfkrilxi6i582n";
+    sha256 = "11ns0j3ss09aqd8snfzd52xf0cgsjjcgzalb031p7v17rn14yqaq";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/science/misc/root/default.nix b/pkgs/applications/science/misc/root/default.nix
index 676395d03d53..2899bee636eb 100644
--- a/pkgs/applications/science/misc/root/default.nix
+++ b/pkgs/applications/science/misc/root/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   name = "root-${version}";
-  version = "6.10.08";
+  version = "6.12.06";
 
   src = fetchurl {
     url = "https://root.cern.ch/download/root_v${version}.source.tar.gz";
-    sha256 = "12mddl6pqwwc9nr4jqzp6h1jm4zycazd3v88dz306m1nmk97dlic";
+    sha256 = "1557b9sdragsx9i15qh6lq7fn056bgi87d31kxdl4vl0awigvp5f";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/applications/search/recoll/default.nix b/pkgs/applications/search/recoll/default.nix
index da6ccf940c7a..ade8af254496 100644
--- a/pkgs/applications/search/recoll/default.nix
+++ b/pkgs/applications/search/recoll/default.nix
@@ -30,29 +30,31 @@ stdenv.mkDerivation rec {
   # 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 '"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
+    substituteInPlace  $f --replace '"lyx"' '"${lib.getBin lyx}/bin/lyx"'
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/applications/version-management/rabbitvcs/default.nix b/pkgs/applications/version-management/rabbitvcs/default.nix
index 2d77a9c32656..d3b027fada68 100644
--- a/pkgs/applications/version-management/rabbitvcs/default.nix
+++ b/pkgs/applications/version-management/rabbitvcs/default.nix
@@ -1,14 +1,14 @@
 { fetchFromGitHub, lib, python2Packages, meld, subversion, gvfs, xdg_utils }:
 python2Packages.buildPythonApplication rec {
   name = "rabbitvcs-${version}";
-  version = "0.16";
+  version = "0.17.1";
   namePrefix = "";
 
   src = fetchFromGitHub {
     owner = "rabbitvcs";
     repo = "rabbitvcs";
     rev = "v${version}";
-    sha256 = "0964pdylrx4n9c9l8ncwv4q1p63y4hadb5v4pgvm0m2fah2jlkly";
+    sha256 = "01cr16zf3gzsci1hhfli79m34fcx5m1pvswl16rkxxn212yc9fhy";
   };
 
   pythonPath = with python2Packages; [ configobj dbus-python pygobject2 pygtk simplejson pysvn dulwich tkinter gvfs xdg_utils ];
diff --git a/pkgs/applications/video/mkvtoolnix/default.nix b/pkgs/applications/video/mkvtoolnix/default.nix
index 9324b08efd72..7afc3b502ad5 100644
--- a/pkgs/applications/video/mkvtoolnix/default.nix
+++ b/pkgs/applications/video/mkvtoolnix/default.nix
@@ -1,32 +1,36 @@
 { stdenv, fetchFromGitLab, pkgconfig, autoconf, automake, libiconv
-, drake, ruby, docbook_xsl, file, xdg_utils, gettext, expat, qt5, boost
+, drake, ruby, docbook_xsl, file, xdg_utils, gettext, expat, boost
 , libebml, zlib, libmatroska, libogg, libvorbis, flac, libxslt, cmark
 , withGUI ? true
+  , qtbase ? null
+  , qtmultimedia ? null
 }:
 
-assert withGUI -> qt5 != null;
+assert withGUI -> qtbase != null && qtmultimedia != null;
 
 with stdenv.lib;
 
 stdenv.mkDerivation rec {
   name = "mkvtoolnix-${version}";
-  version = "20.0.0";
+  version = "21.0.0";
 
   src = fetchFromGitLab {
-    owner = "mbunkus";
-    repo = "mkvtoolnix";
-    rev = "release-${version}";
-    sha256 = "0qrjvvp0pvw9i91rh0zrxpclq7xap2dpjip0s5bm4gv14gh4l4mc";
+    owner  = "mbunkus";
+    repo   = "mkvtoolnix";
+    rev    = "release-${version}";
+    sha256 = "06nixp0qqa6g2fv40f7l0i0sqbc7qswpgq4534l98nan08wjbk2r";
   };
 
-  nativeBuildInputs = [ pkgconfig autoconf automake gettext drake ruby docbook_xsl libxslt ];
+  nativeBuildInputs = [
+    pkgconfig autoconf automake gettext
+    drake ruby docbook_xsl libxslt
+  ];
 
   buildInputs = [
-    expat file xdg_utils boost libebml zlib libmatroska libogg
-    libvorbis flac cmark
-  ]
-  ++ optional stdenv.isDarwin libiconv
-  ++ optionals withGUI [qt5.qtbase qt5.qtmultimedia];
+    expat file xdg_utils boost libebml zlib
+    libmatroska libogg libvorbis flac cmark
+  ] ++ optional  stdenv.isDarwin libiconv
+    ++ optionals withGUI [ qtbase qtmultimedia ];
 
   preConfigure = "./autogen.sh; patchShebangs .";
   buildPhase   = "drake -j $NIX_BUILD_CORES";
diff --git a/pkgs/applications/video/mpc-qt/default.nix b/pkgs/applications/video/mpc-qt/default.nix
new file mode 100644
index 000000000000..80ca213c06c1
--- /dev/null
+++ b/pkgs/applications/video/mpc-qt/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, pkgconfig, qmake, qtx11extras, qttools, mpv }:
+
+stdenv.mkDerivation rec {
+  name = "mpc-qt-${version}";
+  version = "17.11";
+
+  src = fetchFromGitHub {
+    owner = "cmdrkotori";
+    repo = "mpc-qt";
+    rev = "v${version}";
+    sha256 = "1vi4zsmbzxj6ms8wls9zv15vrskdrhgnj6l41m1fk4scs4jzvbkm";
+  };
+
+  nativeBuildInputs = [ pkgconfig qmake qttools ];
+
+  buildInputs = [ mpv qtx11extras ];
+
+  qmakeFlags = [ "QMAKE_LUPDATE=${qttools.dev}/bin/lupdate" ];
+
+  meta = with stdenv.lib; {
+    description = "Media Player Classic Qute Theater";
+    homepage = https://github.com/cmdrkotori/mpc-qt;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/pkgs/applications/video/mpv/scripts/convert.nix b/pkgs/applications/video/mpv/scripts/convert.nix
index cf77e3dfe663..faa21326fc0e 100644
--- a/pkgs/applications/video/mpv/scripts/convert.nix
+++ b/pkgs/applications/video/mpv/scripts/convert.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchgit, lib
-, yad, mkvtoolnix, libnotify }:
+, yad, mkvtoolnix-cli, libnotify }:
 
 stdenv.mkDerivation {
   name = "mpv-convert-script-2016-03-18.lua";
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
       substituteInPlace convert_script.lua \
         ${subs "NOTIFY_CMD" "notify-send" "${libnotify}/bin/notify-send"} \
         ${subs "YAD_CMD" "yad" "${yad}/bin/yad"} \
-        ${subs "MKVMERGE_CMD" "mkvmerge" "${mkvtoolnix}/bin/mkvmerge"}
+        ${subs "MKVMERGE_CMD" "mkvmerge" "${mkvtoolnix-cli}/bin/mkvmerge"}
   '';
 
   dontBuild = true;
diff --git a/pkgs/applications/virtualization/remotebox/default.nix b/pkgs/applications/virtualization/remotebox/default.nix
index cb84ad49aebd..40eadad68d09 100644
--- a/pkgs/applications/virtualization/remotebox/default.nix
+++ b/pkgs/applications/virtualization/remotebox/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "remotebox-${version}";
-  version = "2.2";
+  version = "2.4";
 
   src = fetchurl {
     url = "http://remotebox.knobgoblin.org.uk/downloads/RemoteBox-${version}.tar.bz2";
-    sha256 = "0g7lx5zk9fk5k8alpag45z2zw9bnrlx1zfs63rc3ilfyvm4k4zc5";
+    sha256 = "14zcpzpdb5gxkxvckcdwq3mfv8b18zirbdskzddhqxjddkzayckz";
   };
 
   buildInputs = with perlPackages; [ perl Glib Gtk2 Pango SOAPLite ];
diff --git a/pkgs/applications/virtualization/rkt/default.nix b/pkgs/applications/virtualization/rkt/default.nix
index 452f082e20e7..947f4454362b 100644
--- a/pkgs/applications/virtualization/rkt/default.nix
+++ b/pkgs/applications/virtualization/rkt/default.nix
@@ -58,7 +58,7 @@ in stdenv.mkDerivation rec {
     cp -Rv $BUILDDIR/target/bin/stage1-*.aci $out/${stage1Dir}/
 
     wrapProgram $out/bin/rkt \
-      --prefix LD_LIBRARY_PATH : ${systemd.lib}/lib \
+      --prefix LD_LIBRARY_PATH : "${systemd.lib}/lib:${acl.out}/lib" \
       --prefix PATH : ${iptables}/bin
   '';
 
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/compilers/ocaml/4.06.nix b/pkgs/development/compilers/ocaml/4.06.nix
index b913d169e97a..b54b8a6288fe 100644
--- a/pkgs/development/compilers/ocaml/4.06.nix
+++ b/pkgs/development/compilers/ocaml/4.06.nix
@@ -1,8 +1,8 @@
 import ./generic.nix {
   major_version = "4";
   minor_version = "06";
-  patch_version = "0";
-  sha256 = "1dy542yfnnw10zvh5s9qzswliq11mg7l0bcyss3501qw3vwvadhj";
+  patch_version = "1";
+  sha256 = "1n3pygfssd6nkrq876wszm5nm3v4605q4k16a66h1nmq9wvf01vg";
 
   # If the executable is stipped it does not work
   dontStrip = true;
diff --git a/pkgs/development/haskell-modules/configuration-nix.nix b/pkgs/development/haskell-modules/configuration-nix.nix
index d55c230dcc85..55f463885bdb 100644
--- a/pkgs/development/haskell-modules/configuration-nix.nix
+++ b/pkgs/development/haskell-modules/configuration-nix.nix
@@ -471,10 +471,6 @@ self: super: builtins.intersectAttrs super {
     '';
   });
 
-  # Fails to link against with newer gsl versions because a deprecrated function
-  # was removed
-  hmatrix-gsl = super.hmatrix-gsl.override { gsl = pkgs.gsl_1; };
-
   # tests run executable, relying on PATH
   # without this, tests fail with "Couldn't launch intero process"
   intero = overrideCabal super.intero (drv: {
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/php/default.nix b/pkgs/development/interpreters/php/default.nix
index 6940485788e9..07b93f7bf695 100644
--- a/pkgs/development/interpreters/php/default.nix
+++ b/pkgs/development/interpreters/php/default.nix
@@ -343,8 +343,8 @@ in {
   };
 
   php70 = generic {
-    version = "7.0.27";
-    sha256 = "0ca174kp2l3fjcp8z0mqnkbjfhijjzz7rs7bkzg1qk2cpdijbylr";
+    version = "7.0.28";
+    sha256 = "0zrw0saqlfv60f3nmff7288wqfhdsfiqns4ys3ii0drzc6s92m5f";
   };
 
   php71 = generic {
diff --git a/pkgs/development/libraries/catch/default.nix b/pkgs/development/libraries/catch/default.nix
index 6c20f4d6c910..116216d500e2 100644
--- a/pkgs/development/libraries/catch/default.nix
+++ b/pkgs/development/libraries/catch/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "catch-${version}";
-  version = "1.11.0";
+  version = "1.12.0";
 
   src = fetchFromGitHub {
     owner = "catchorg";
     repo = "Catch";
     rev = "v${version}";
-    sha256 = "0v9yw7ydvhydp78hh7cmaif4h73k5qxqpm1g7xn8i882i3s84s2s";
+    sha256 = "0hkcmycvyyazzi9dywnyiipnmbx399iirh5xk5g957c8zl0505kd";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/development/libraries/elementary-cmake-modules/default.nix b/pkgs/development/libraries/elementary-cmake-modules/default.nix
new file mode 100644
index 000000000000..5287db756094
--- /dev/null
+++ b/pkgs/development/libraries/elementary-cmake-modules/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, cmake, pkgconfig }:
+
+stdenv.mkDerivation {
+  name = "elementary-cmake-modules";
+
+  src = fetchFromGitHub {
+    owner = "elementary";
+    repo = "cmake-modules";
+    rev = "319ec5336e9f05f3f22b886cc2053ef3d4b6599e";
+    sha256 = "191hhvdxyqvh9axzndaqld7vrmv7xkn0czks908zhb2zpjhv9rby";
+  };
+
+  prePatch = ''
+    substituteInPlace CMakeLists.txt  \
+      --replace ' ''${CMAKE_ROOT}/Modules' " $out/lib/cmake"
+  '';
+
+  propagatedBuildInputs = [ cmake pkgconfig ];
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    platforms = platforms.linux ++ platforms.darwin;
+    homepage = https://github.com/elementary/cmake-modules;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.samdroid-apps ];
+  };
+}
diff --git a/pkgs/development/libraries/elementary-cmake-modules/setup-hook.sh b/pkgs/development/libraries/elementary-cmake-modules/setup-hook.sh
new file mode 100644
index 000000000000..6408ac471577
--- /dev/null
+++ b/pkgs/development/libraries/elementary-cmake-modules/setup-hook.sh
@@ -0,0 +1,4 @@
+_elementaryCMakeEnvHook() {
+  cmakeFlagsArray+=(-DCMAKE_MODULE_PATH=@out@/lib/cmake)
+}
+addEnvHooks "$targetOffset" _elementaryCMakeEnvHook
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/readosm/default.nix b/pkgs/development/libraries/readosm/default.nix
index cabd89dc9350..7faee7e69a2e 100644
--- a/pkgs/development/libraries/readosm/default.nix
+++ b/pkgs/development/libraries/readosm/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, expat, zlib, geos, libspatialite }:
 
 stdenv.mkDerivation rec {
-  name = "readosm-1.0.0b";
+  name = "readosm-1.1.0";
 
   src = fetchurl {
     url = "http://www.gaia-gis.it/gaia-sins/readosm-sources/${name}.tar.gz";
-    sha256 = "042pv31smc7l6y111rvp0hza5sw86wa8ldg2jyq78xgwzcbhszpd";
+    sha256 = "1v20pnda67imjd70fn0zw30aar525xicy3d3v49md5cvqklws265";
   };
 
   buildInputs = [ expat zlib geos libspatialite ];
diff --git a/pkgs/development/libraries/stfl/default.nix b/pkgs/development/libraries/stfl/default.nix
index 8a8680a498a0..fd9ab5a2036d 100644
--- a/pkgs/development/libraries/stfl/default.nix
+++ b/pkgs/development/libraries/stfl/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, ncurses, libiconv }:
 
 stdenv.mkDerivation rec {
-  name = "stfl-0.22";
+  name = "stfl-0.24";
 
   src = fetchurl {
     url = "http://www.clifford.at/stfl/${name}.tar.gz";
-    sha256 = "062lqlf3qhp8bcapbpc0k3wym7x6ngncql8jmx5x06p6679szp9d";
+    sha256 = "1460d5lc780p3q38l3wc9jfr2a7zlyrcra0li65aynj738cam9yl";
   };
 
   buildInputs = [ ncurses libiconv ];
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     DESTDIR=$out prefix=\"\" make install
 
     # some programs rely on libstfl.so.0 to be present, so link it
-    ln -s $out/lib/libstfl.so.0.22 $out/lib/libstfl.so.0
+    ln -s $out/lib/libstfl.so.0.24 $out/lib/libstfl.so.0
   '';
 
   meta = {
diff --git a/pkgs/development/node-packages/node-packages-v8.json b/pkgs/development/node-packages/node-packages-v8.json
index 744894de4ffd..8abdc0e608cd 100644
--- a/pkgs/development/node-packages/node-packages-v8.json
+++ b/pkgs/development/node-packages/node-packages-v8.json
@@ -11,4 +11,5 @@
 , "pnpm"
 , "semver"
 , "sloc"
+, "npm"
 ]
diff --git a/pkgs/development/node-packages/node-packages-v8.nix b/pkgs/development/node-packages/node-packages-v8.nix
index ce7b70b3fdcc..61752e7598c5 100644
--- a/pkgs/development/node-packages/node-packages-v8.nix
+++ b/pkgs/development/node-packages/node-packages-v8.nix
@@ -283,6 +283,15 @@ let
         sha512 = "1kvjv5hs1c53b5g2vghpnncn4zj397sa0vpbx1pzpn8ngq52s3xq9923gnl2kzkh1mhyrl277jrh87a766yks89qvz8b4jczr44xr9p";
       };
     };
+    "bencode-2.0.0" = {
+      name = "bencode";
+      packageName = "bencode";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bencode/-/bencode-2.0.0.tgz";
+        sha512 = "3rdjlprrhprwwygnw5aik9pgi1xyr09yvgq3rbr4g3pl1v70mcc1k903x3vh9z782jly6vmnvp44nrskl5rhcxgfdwz19fl1b1qggf2";
+      };
+    };
     "bitfield-rle-2.1.0" = {
       name = "bitfield-rle";
       packageName = "bitfield-rle";
@@ -1768,13 +1777,13 @@ let
         sha512 = "2nbjxg0x7jsa14zhvx68w1vri68hsxzbxz7b7ap76fdp0jkrgna2rq636yxnax04f3f8i2ambj2fpan6qli6vixmfryz78vrapdip8n";
       };
     };
-    "k-rpc-socket-1.7.2" = {
+    "k-rpc-socket-1.8.0" = {
       name = "k-rpc-socket";
       packageName = "k-rpc-socket";
-      version = "1.7.2";
+      version = "1.8.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.7.2.tgz";
-        sha512 = "02w1ih1lh86i5ap7c3dy2ml7g5a11r0w300iyxdf6v02qr0j1x3vf78hx5q9dgg3drifab018mgm851m457zzzi05i2z2r1s3zlflc3";
+        url = "https://registry.npmjs.org/k-rpc-socket/-/k-rpc-socket-1.8.0.tgz";
+        sha512 = "0pc9bjnmgfjcgh49lclvz5qnlkzypgirlx5ji2nx15vfn00gwczy5hvfahcxdzcdqsjlwh7q8jw4zj8abdk8qx2cwiqdw8fgg557zvz";
       };
     };
     "kind-of-3.2.2" = {
@@ -3514,8 +3523,12 @@ in
       sources."json-stringify-safe-5.0.1"
       sources."jsprim-1.4.1"
       sources."k-bucket-3.3.1"
-      sources."k-rpc-4.2.1"
-      sources."k-rpc-socket-1.7.2"
+      (sources."k-rpc-4.2.1" // {
+        dependencies = [
+          sources."bencode-2.0.0"
+        ];
+      })
+      sources."k-rpc-socket-1.8.0"
       sources."kind-of-3.2.2"
       sources."last-one-wins-1.0.4"
       sources."length-prefixed-message-3.0.3"
@@ -4127,4 +4140,21 @@ in
     production = true;
     bypassCache = true;
   };
+  npm = nodeEnv.buildNodePackage {
+    name = "npm";
+    packageName = "npm";
+    version = "5.6.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/npm/-/npm-5.6.0.tgz";
+      sha512 = "0nnr796ik5h8bsd3k9ygivivr3na2ksnf5iipf8dsnn20j10i9sgmhmsnzbimd2pqgjbrpp8gbpl2q7j5c7yjqjfirrh8xcc3v3gpws";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "a package manager for JavaScript";
+      homepage = https://docs.npmjs.com/;
+      license = "Artistic-2.0";
+    };
+    production = true;
+    bypassCache = true;
+  };
 }
\ No newline at end of file
diff --git a/pkgs/development/ocaml-modules/biniou/default.nix b/pkgs/development/ocaml-modules/biniou/default.nix
index 7047edf24b3e..97c4750002e6 100644
--- a/pkgs/development/ocaml-modules/biniou/default.nix
+++ b/pkgs/development/ocaml-modules/biniou/default.nix
@@ -1,26 +1,30 @@
 { stdenv, fetchFromGitHub, ocaml, findlib, jbuilder, easy-format }:
 
 stdenv.mkDerivation rec {
-	version = "1.2.0";
-	name = "ocaml${ocaml.version}-biniou-${version}";
-	src = fetchFromGitHub {
-		owner = "mjambon";
-		repo = "biniou";
-		rev = "v${version}";
-		sha256 = "0mjpgwyfq2b2izjw0flmlpvdjgqpq8shs89hxj1np2r50csr8dcb";
-	};
+  version = "1.2.0";
+  name = "ocaml${ocaml.version}-biniou-${version}";
+  src = fetchFromGitHub {
+    owner = "mjambon";
+    repo = "biniou";
+    rev = "v${version}";
+    sha256 = "0mjpgwyfq2b2izjw0flmlpvdjgqpq8shs89hxj1np2r50csr8dcb";
+  };
 
-	buildInputs = [ ocaml findlib jbuilder ];
+  buildInputs = [ ocaml findlib jbuilder ];
 
-	propagatedBuildInputs = [ easy-format ];
+  propagatedBuildInputs = [ easy-format ];
 
-	inherit (jbuilder) installPhase;
+  postPatch = ''
+   patchShebangs .
+  '';
 
-	meta = {
-		inherit (src.meta) homepage;
-		inherit (ocaml.meta) platforms;
-		description = "Binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve";
-		maintainers = [ stdenv.lib.maintainers.vbgl ];
-		license = stdenv.lib.licenses.bsd3;
-	};
+  inherit (jbuilder) installPhase;
+
+  meta = {
+    inherit (src.meta) homepage;
+    inherit (ocaml.meta) platforms;
+    description = "Binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve";
+    maintainers = [ stdenv.lib.maintainers.vbgl ];
+    license = stdenv.lib.licenses.bsd3;
+  };
 }
diff --git a/pkgs/development/python-modules/flake8-import-order/default.nix b/pkgs/development/python-modules/flake8-import-order/default.nix
new file mode 100644
index 000000000000..128a8d18d819
--- /dev/null
+++ b/pkgs/development/python-modules/flake8-import-order/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonPackage, fetchPypi, isPy3k, enum34, pycodestyle, pytest, flake8, pylama }:
+
+buildPythonPackage rec {
+  pname = "flake8-import-order";
+  version = "0.17";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "60ea6674c77e4d916071beabf2b31b9b45e2f5b3bbda48a34db65766a5b25678";
+  };
+
+  propagatedBuildInputs = [ pycodestyle ] ++ lib.optional (!isPy3k) enum34;
+
+  checkInputs = [ pytest flake8 pycodestyle pylama ];
+
+  checkPhase = ''
+    pytest --strict
+  '';
+
+  meta = with lib; {
+    description = "Flake8 and pylama plugin that checks the ordering of import statements";
+    homepage = https://github.com/PyCQA/flake8-import-order;
+    license = with licenses; [ lgpl3 mit ];
+  };
+}
diff --git a/pkgs/development/python-modules/jsonrpc-async/default.nix b/pkgs/development/python-modules/jsonrpc-async/default.nix
index a0056ce25000..1018c536ff7d 100644
--- a/pkgs/development/python-modules/jsonrpc-async/default.nix
+++ b/pkgs/development/python-modules/jsonrpc-async/default.nix
@@ -4,7 +4,6 @@
 buildPythonPackage rec {
   pname = "jsonrpc-async";
   version = "0.6";
-  name = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/jsonrpc-base/default.nix b/pkgs/development/python-modules/jsonrpc-base/default.nix
index 01c0c3f4aa18..8dbe07382889 100644
--- a/pkgs/development/python-modules/jsonrpc-base/default.nix
+++ b/pkgs/development/python-modules/jsonrpc-base/default.nix
@@ -3,7 +3,6 @@
 buildPythonPackage rec {
   pname = "jsonrpc-base";
   version = "1.0";
-  name = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/jsonrpc-websocket/default.nix b/pkgs/development/python-modules/jsonrpc-websocket/default.nix
index 8394913b2986..b8a0c07d5a5d 100644
--- a/pkgs/development/python-modules/jsonrpc-websocket/default.nix
+++ b/pkgs/development/python-modules/jsonrpc-websocket/default.nix
@@ -4,7 +4,6 @@
 buildPythonPackage rec {
   pname = "jsonrpc-websocket";
   version = "0.5";
-  name = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/pydocstyle/default.nix b/pkgs/development/python-modules/pydocstyle/default.nix
index fd1f0db0c1e5..a2f2daa2fe9c 100644
--- a/pkgs/development/python-modules/pydocstyle/default.nix
+++ b/pkgs/development/python-modules/pydocstyle/default.nix
@@ -1,20 +1,30 @@
-{ stdenv, buildPythonPackage, fetchPypi, snowballstemmer, configparser,
-  pytest, pytestpep8, mock, pathlib }:
+{ lib, buildPythonPackage, fetchFromGitHub, isPy3k, pythonOlder
+, snowballstemmer, six, configparser
+, pytest, pytestpep8, mock, pathlib }:
 
 buildPythonPackage rec {
   pname = "pydocstyle";
   version = "2.1.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "15ssv8l6cvrmzgwcdzw76rnl4np3qf0dbwr1wsx76y0hc7lwsnsd";
+  # no tests on PyPI
+  # https://github.com/PyCQA/pydocstyle/issues/302
+  src = fetchFromGitHub {
+    owner = "PyCQA";
+    repo = pname;
+    rev = version;
+    sha256 = "1h0k8lpx14svc8dini62j0kqiam10pck5sdzvxa4xhsx7y689g5l";
   };
 
-  propagatedBuildInputs = [ snowballstemmer configparser ];
+  propagatedBuildInputs = [ snowballstemmer six ] ++ lib.optional (!isPy3k) configparser;
 
-  checkInputs = [ pytest pytestpep8 mock pathlib ];
+  checkInputs = [ pytest pytestpep8 mock ] ++ lib.optional (pythonOlder "3.4") pathlib;
 
-  meta = with stdenv.lib; {
+  checkPhase = ''
+    # test_integration.py installs packages via pip
+    py.test --pep8 --cache-clear -vv src/tests -k "not test_integration"
+  '';
+
+  meta = with lib; {
     description = "Python docstring style checker";
     homepage = https://github.com/PyCQA/pydocstyle/;
     license = licenses.mit;
diff --git a/pkgs/development/python-modules/pylama/default.nix b/pkgs/development/python-modules/pylama/default.nix
new file mode 100644
index 000000000000..c4ef98b43ef6
--- /dev/null
+++ b/pkgs/development/python-modules/pylama/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildPythonPackage, fetchPypi, fetchpatch
+, mccabe, pycodestyle, pydocstyle, pyflakes
+, pytest, ipdb }:
+
+buildPythonPackage rec {
+  pname = "pylama";
+  version = "7.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "390c1dab1daebdf3d6acc923e551b035c3faa77d8b96b98530c230493f9ec712";
+  };
+
+  patches = fetchpatch {
+    url = "${meta.homepage}/pull/116.patch";
+    sha256 = "00jz5k2w0xahs1m3s603j6l4cwzz92qsbbk81fh17nq0f47999mv";
+  };
+
+  propagatedBuildInputs = [ mccabe pycodestyle pydocstyle pyflakes ];
+
+  checkInputs = [ pytest ipdb ];
+
+  # tries to mess with the file system
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Code audit tool for python";
+    homepage = https://github.com/klen/pylama;
+    # ambiguous license declarations: https://github.com/klen/pylama/issues/64
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/python-modules/pylint/default.nix b/pkgs/development/python-modules/pylint/default.nix
index 194d91341d8a..c38b71c7f47c 100644
--- a/pkgs/development/python-modules/pylint/default.nix
+++ b/pkgs/development/python-modules/pylint/default.nix
@@ -13,7 +13,7 @@ buildPythonPackage rec {
 
   buildInputs = [ pytest pytestrunner mccabe configparser backports_functools_lru_cache ];
 
-  propagatedBuildInputs = [ astroid configparser isort ];
+  propagatedBuildInputs = [ astroid configparser isort mccabe ];
 
   postPatch = ''
     # Remove broken darwin tests
diff --git a/pkgs/development/python-modules/pyunifi/default.nix b/pkgs/development/python-modules/pyunifi/default.nix
index bbf98c32874b..31ec613df4c8 100644
--- a/pkgs/development/python-modules/pyunifi/default.nix
+++ b/pkgs/development/python-modules/pyunifi/default.nix
@@ -4,7 +4,6 @@
 buildPythonPackage rec {
   pname = "pyunifi";
   version = "2.13";
-  name = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/python-modules/wakeonlan/default.nix b/pkgs/development/python-modules/wakeonlan/default.nix
index 3d57000e8898..d4a47138d4ab 100644
--- a/pkgs/development/python-modules/wakeonlan/default.nix
+++ b/pkgs/development/python-modules/wakeonlan/default.nix
@@ -3,7 +3,6 @@
 buildPythonPackage rec {
   pname = "wakeonlan";
   version = "1.0.0";
-  name = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/development/ruby-modules/gem-config/default.nix b/pkgs/development/ruby-modules/gem-config/default.nix
index 8da6355e0016..ac0b2dd07f83 100644
--- a/pkgs/development/ruby-modules/gem-config/default.nix
+++ b/pkgs/development/ruby-modules/gem-config/default.nix
@@ -139,8 +139,9 @@ in
   };
 
   grpc = attrs: {
-  nativeBuildInputs = [ pkgconfig ];
+    nativeBuildInputs = [ pkgconfig ];
     buildInputs = [ openssl ];
+    NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-overflow" "-Wno-error=implicit-fallthrough" ];
   };
 
   hitimes = attrs: {
diff --git a/pkgs/development/tools/build-managers/bear/cmakepaths.patch b/pkgs/development/tools/build-managers/bear/cmakepaths.patch
new file mode 100644
index 000000000000..d237267078e6
--- /dev/null
+++ b/pkgs/development/tools/build-managers/bear/cmakepaths.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 04c5c58..429ca47 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -24,7 +24,7 @@ set(CMAKE_OSX_ARCHITECTURES "i386;x86_64" CACHE STRING  "Rogue")
+ 
+ set(EAR_LIB_FILE ${CMAKE_SHARED_LIBRARY_PREFIX}ear${CMAKE_SHARED_LIBRARY_SUFFIX})
+ set(EAR_LIB_PATH "${CMAKE_INSTALL_LIBDIR}/bear")
+-set(DEFAULT_PRELOAD_FILE ${CMAKE_INSTALL_PREFIX}/${EAR_LIB_PATH}/${EAR_LIB_FILE} CACHE STRING "Default path to libear.")
++set(DEFAULT_PRELOAD_FILE ${EAR_LIB_PATH}/${EAR_LIB_FILE} CACHE STRING "Default path to libear.")
+ 
+ add_subdirectory(libear)
+ add_subdirectory(bear)
diff --git a/pkgs/development/tools/build-managers/bear/default.nix b/pkgs/development/tools/build-managers/bear/default.nix
index 6afec72de5fd..8f352f84b228 100644
--- a/pkgs/development/tools/build-managers/bear/default.nix
+++ b/pkgs/development/tools/build-managers/bear/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   doCheck = false; # all fail
 
-  patches = [ ./ignore_wrapper.patch ];
+  patches = [ ./ignore_wrapper.patch ./cmakepaths.patch ];
 
   meta = with stdenv.lib; {
     description = "Tool that generates a compilation database for clang tooling";
@@ -28,6 +28,6 @@ stdenv.mkDerivation rec {
     homepage = https://github.com/rizsotto/Bear;
     license = licenses.gpl3Plus;
     platforms = platforms.unix;
-    maintainers = [ maintainers.vcunat ];
+    maintainers = [ maintainers.vcunat maintainers.babariviere ];
   };
 }
diff --git a/pkgs/development/tools/geckodriver/default.nix b/pkgs/development/tools/geckodriver/default.nix
index 8f6e0dde5899..9bc760bf1126 100644
--- a/pkgs/development/tools/geckodriver/default.nix
+++ b/pkgs/development/tools/geckodriver/default.nix
@@ -1,20 +1,24 @@
 { lib
-, fetchurl
+, fetchFromGitHub
 , rustPlatform
 }:
 
 with rustPlatform; 
 
 buildRustPackage rec {
-  version = "0.19.1";
+  version = "unstable-2018-02-24";
   name = "geckodriver-${version}";
 
-  src = fetchurl {
-    url = "https://github.com/mozilla/geckodriver/archive/v${version}.tar.gz";
-    sha256 = "04zpv4aiwbig466yj24hhazl5hrapkyvwlhvg0za5599ykzdv47m";
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "gecko-dev";
+    rev = "ecb86060b4c5a9808798b81a57e79e821bb47082";
+    sha256 = "1am84a60adw0bb12rlhdqbiwyywhza4qp5sf4f4fmssjl2qcr6nl";
   };
 
-  cargoSha256 = "1cny8caqcd9p98hra1k7y4d3lb8sxsyaplr0svbwam0d2qc1c257";
+  sourceRoot = "${src.name}/testing/geckodriver";
+
+  cargoSha256 = "0dvcvdb623jla29i93glx20nf8pbpfw6jj548ii6brzkcpafxxm8";
 
   meta = with lib; {
     description = "Proxy for using W3C WebDriver-compatible clients to interact with Gecko-based browsers";
diff --git a/pkgs/development/tools/misc/ccache/default.nix b/pkgs/development/tools/misc/ccache/default.nix
index ff4ad83b642c..34d1d8a829b1 100644
--- a/pkgs/development/tools/misc/ccache/default.nix
+++ b/pkgs/development/tools/misc/ccache/default.nix
@@ -1,18 +1,25 @@
-{ stdenv, fetchurl, fetchpatch, runCommand, zlib, makeWrapper }:
+{ stdenv, fetchurl, fetchpatch, runCommand, perl, zlib, makeWrapper }:
 
 let ccache = stdenv.mkDerivation rec {
   name = "ccache-${version}";
-  version = "3.3.5";
+  version = "3.4.1";
 
   src = fetchurl {
-    sha256 = "1iih5d171rq29366c1z90dri2h8173yyc8rm2740wxiqx6k7c18r";
+    sha256 = "1pppi4jbkkj641cdynmc35jaj40jjicw7gj75ran5qs5886jcblc";
     url = "mirror://samba/ccache/${name}.tar.xz";
   };
 
+  nativeBuildInputs = [ perl ];
+
   buildInputs = [ zlib ];
 
+  outputs = [ "out" "man" ];
+
   # non to be fail on filesystems with unconventional blocksizes (zfs on Hydra?)
-  patches = [ ./skip-fs-dependent-test.patch ];
+  patches = [
+    ./fix-debug-prefix-map-suite.patch
+    ./skip-fs-dependent-test.patch
+  ];
 
   postPatch = ''
     substituteInPlace Makefile.in --replace 'objs) $(extra_libs)' 'objs)'
diff --git a/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch b/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch
new file mode 100644
index 000000000000..98a6fbf10bf1
--- /dev/null
+++ b/pkgs/development/tools/misc/ccache/fix-debug-prefix-map-suite.patch
@@ -0,0 +1,42 @@
+--- a/test/suites/debug_prefix_map.bash
++++ b/test/suites/debug_prefix_map.bash
+@@ -29,7 +29,7 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+
+@@ -39,7 +39,7 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+
+@@ -52,10 +52,10 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+-    if ! grep "name" test.o >/dev/null 2>&1; then
++    if ! objdump -g test.o | grep ": name$" >/dev/null 2>&1; then
+         test_failed "Relocation (name) not found in test.o"
+     fi
+
+@@ -65,7 +65,7 @@
+     expect_stat 'cache hit (preprocessed)' 0
+     expect_stat 'cache miss' 1
+     expect_stat 'files in cache' 2
+-    if grep -E "[^=]`pwd`[^=]" test.o >/dev/null 2>&1; then
++    if objdump -g test.o | grep ": `pwd`$" >/dev/null 2>&1; then
+         test_failed "Source dir (`pwd`) found in test.o"
+     fi
+ }
diff --git a/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch b/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch
index 3bc3a95e4204..7b233df6531b 100644
--- a/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch
+++ b/pkgs/development/tools/misc/ccache/skip-fs-dependent-test.patch
@@ -1,6 +1,6 @@
---- a/test.sh
-+++ b/test.sh
-@@ -2669,23 +2669,6 @@ SUITE_cleanup() {
+--- a/test/suites/cleanup.bash
++++ b/test/suites/cleanup.bash
+@@ -94,23 +94,6 @@
 
      $CCACHE -F 0 -M 256K >/dev/null
      CCACHE_LOGFILE=/tmp/foo $CCACHE -c >/dev/null
diff --git a/pkgs/development/tools/parsing/re2c/default.nix b/pkgs/development/tools/parsing/re2c/default.nix
index dcf89d1604d9..da1bcced32ec 100644
--- a/pkgs/development/tools/parsing/re2c/default.nix
+++ b/pkgs/development/tools/parsing/re2c/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   name = "re2c-${version}";
-  version = "0.16";
+  version = "1.0.3";
 
   sourceRoot = "${src.name}/re2c";
 
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     owner  = "skvadrik";
     repo   = "re2c";
     rev    = version;
-    sha256 = "0cijgmbyx34nwl2jmsswggkgvzy364871rkbxz8biq9x8xrhhjw5";
+    sha256 = "0grx7nl9fwcn880v5ssjljhcb9c5p2a6xpwil7zxpmv0rwnr3yqi";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
diff --git a/pkgs/games/freecell-solver/default.nix b/pkgs/games/freecell-solver/default.nix
index dd14edf8eb12..263bf5c29dfc 100644
--- a/pkgs/games/freecell-solver/default.nix
+++ b/pkgs/games/freecell-solver/default.nix
@@ -6,11 +6,11 @@ with stdenv.lib;
 stdenv.mkDerivation rec{
 
   name = "freecell-solver-${version}";
-  version = "4.8.0";
+  version = "4.16.0";
 
   src = fetchurl {
     url = "http://fc-solve.shlomifish.org/downloads/fc-solve/${name}.tar.xz";
-    sha256 = "0274l1p71ps222i62whqfkg80fcc8m4w2hmpbrbbd5gh8kfpman3";
+    sha256 = "1ihrmxbsli7c1lm5gw9xgrakyn4nsmaj1zgk5gza2ywnfpgdb0ac";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/games/pioneer/default.nix b/pkgs/games/pioneer/default.nix
index c0053088db76..071218c1600e 100644
--- a/pkgs/games/pioneer/default.nix
+++ b/pkgs/games/pioneer/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   name = "pioneer-${version}";
-  version = "20171001";
+  version = "20180203";
 
   src = fetchFromGitHub{
     owner = "pioneerspacesim";
     repo = "pioneer";
     rev = version;
-    sha256 = "0yxw1zdvidrwc28vxfi3qpx2nq2dix2d6ylwgzq9ph8kgwv9fl5n";
+    sha256 = "0hp2mf36kj2v93hka8m8lxw2qhmnjc62wjlpw7c7ix0r8xa01i6h";
   };
 
   nativeBuildInputs = [ autoconf automake pkgconfig ];
diff --git a/pkgs/games/rocksndiamonds/default.nix b/pkgs/games/rocksndiamonds/default.nix
index caaedc44ee0c..d563a8265b5d 100644
--- a/pkgs/games/rocksndiamonds/default.nix
+++ b/pkgs/games/rocksndiamonds/default.nix
@@ -3,11 +3,11 @@
 stdenv.mkDerivation rec {
   name = "${project}-${version}";
   project = "rocksndiamonds";
-  version = "4.0.0.2";
+  version = "4.0.1.1";
 
   src = fetchurl {
     url = "https://www.artsoft.org/RELEASES/unix/${project}/${name}.tar.gz";
-    sha256 = "0dzn6vlayvnkjm64zwva337rn07lc21kq93m2h8zz8j3wpl11pb4";
+    sha256 = "0f2m29m53sngg2kv4km91nxbr53rzhchbpqx5dzrv3p5hq1hp936";
   };
 
   desktopItem = makeDesktopItem {
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/tp_smapi/default.nix b/pkgs/os-specific/linux/tp_smapi/default.nix
index 9c8bf5597514..25eeb889cc28 100644
--- a/pkgs/os-specific/linux/tp_smapi/default.nix
+++ b/pkgs/os-specific/linux/tp_smapi/default.nix
@@ -3,13 +3,13 @@
 
 stdenv.mkDerivation rec {
   name = "tp_smapi-${version}-${kernel.version}";
-  version = "unstable-2017-12-04";
+  version = "0.43";
 
   src = fetchFromGitHub {
     owner = "evgeni";
     repo = "tp_smapi";
-    rev = "76c5120f7be4880cf2c6801f872327e4e70c449f";
-    sha256 = "0g8l7rmylspl17qnqpa2h4yj7h3zvy6xlmj5nlnixds9avnbz2vy";
+    rev = "tp-smapi/${version}";
+    sha256 = "1rjb0njckczc2mj05cagvj0lkyvmyk6bw7wkiinv81lw8m90g77g";
     name = "tp-smapi-${version}";
   };
 
diff --git a/pkgs/servers/radarr/default.nix b/pkgs/servers/radarr/default.nix
index 3eba04f44fba..dc3bc22af49c 100644
--- a/pkgs/servers/radarr/default.nix
+++ b/pkgs/servers/radarr/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "radarr-${version}";
-  version = "0.2.0.910";
+  version = "0.2.0.980";
 
   src = fetchurl {
     url = "https://github.com/Radarr/Radarr/releases/download/v${version}/Radarr.develop.${version}.linux.tar.gz";
-    sha256 = "0c4msk6hvlqyy81xkjhsvsy4igpc01s4a00zwhqnds2gj4y9yplk";
+    sha256 = "1939mmlp9hsmw0hd4c8m8p5fk6igvml30gk9ffi9mfhankas6fnf";
   };
 
   buildInputs = [ makeWrapper ];
diff --git a/pkgs/servers/sql/mysql/5.7.x.nix b/pkgs/servers/sql/mysql/5.7.x.nix
index 0b2778218760..0c04f910e5bb 100644
--- a/pkgs/servers/sql/mysql/5.7.x.nix
+++ b/pkgs/servers/sql/mysql/5.7.x.nix
@@ -49,6 +49,7 @@ self = stdenv.mkDerivation rec {
     "-DINSTALL_SHAREDIR=share/mysql"
   ];
 
+  CXXFLAGS = "-fpermissive";
   NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
 
   prePatch = ''
diff --git a/pkgs/servers/sql/postgresql/pgroonga/default.nix b/pkgs/servers/sql/postgresql/pgroonga/default.nix
index 78ad88bc9047..1e995537c88b 100644
--- a/pkgs/servers/sql/postgresql/pgroonga/default.nix
+++ b/pkgs/servers/sql/postgresql/pgroonga/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "pgroonga-${version}";
-  version = "1.1.9";
+  version = "2.0.2";
 
   src = fetchurl {
     url = "http://packages.groonga.org/source/pgroonga/${name}.tar.gz";
-    sha256 = "07afgwll8nxfb7ziw3qrvw0ryjjw3994vj2f6alrjwpg7ynb46ag";
+    sha256 = "0023747i2x3j50z54l78maq7dya5ldd2sdydn6l5l7k6b6g4yr2d";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/tools/compression/lzip/default.nix b/pkgs/tools/compression/lzip/default.nix
index 2f6f9aca4323..25d09e6e947b 100644
--- a/pkgs/tools/compression/lzip/default.nix
+++ b/pkgs/tools/compression/lzip/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "lzip-${version}";
-  version = "1.19";
+  version = "1.20";
 
   buildInputs = [ texinfo ];
 
   src = fetchurl {
     url = "mirror://savannah/lzip/${name}.tar.gz";
-    sha256 = "1abbch762gv8rjr579q3qyyk6c80plklbv2mw4x0vg71dgsw9bgz";
+    sha256 = "0319q59kb8g324wnj7xzbr7vvlx5bcs13lr34j0zb3kqlyjq2fy9";
   };
 
   configureFlags = "CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3" + stdenv.lib.optionalString stdenv.isCross " CXX=${stdenv.cc.targetPrefix}c++";
diff --git a/pkgs/tools/filesystems/reiser4progs/default.nix b/pkgs/tools/filesystems/reiser4progs/default.nix
index 681fc1c80ef0..59d8e8aa4389 100644
--- a/pkgs/tools/filesystems/reiser4progs/default.nix
+++ b/pkgs/tools/filesystems/reiser4progs/default.nix
@@ -1,12 +1,12 @@
 {stdenv, fetchurl, libaal}:
 
-let version = "1.1.0"; in
+let version = "1.2.1"; in
 stdenv.mkDerivation rec {
   name = "reiser4progs-${version}";
 
   src = fetchurl {
     url = "mirror://sourceforge/reiser4/reiser4-utils/${name}.tar.gz";
-    sha256 = "18bgv0wd75q53642x5dsk4g0mil1hw1zrp7a4xkb0pxx4bzjlbqg";
+    sha256 = "03vdqvpyd48wxrpqpb9kg76giaffw9b8k334kr4wc0zxgybknhl7";
   };
 
   buildInputs = [libaal];
diff --git a/pkgs/tools/graphics/scanbd/default.nix b/pkgs/tools/graphics/scanbd/default.nix
index ba376af1c3cd..402628f0fc8f 100644
--- a/pkgs/tools/graphics/scanbd/default.nix
+++ b/pkgs/tools/graphics/scanbd/default.nix
@@ -3,10 +3,10 @@
 
 stdenv.mkDerivation rec {
   name = "scanbd-${version}";
-  version = "1.4.4";
+  version = "1.5.1";
 
   src = fetchurl {
-    sha256 = "07a59jk9b2hh49v5lcpckp64f5lny9sq8h0h2p2jcs9cqazf6q9s";
+    sha256 = "0pvy4qirfjdfm8aj6x5rkbgl7hk3jfa2s21qkk8ic5dqfjjab75n";
     url = "mirror://sourceforge/scanbd/${name}.tgz";
   };
 
diff --git a/pkgs/tools/misc/esptool/default.nix b/pkgs/tools/misc/esptool/default.nix
index 33624302ebcc..1d7c47c2c9ab 100644
--- a/pkgs/tools/misc/esptool/default.nix
+++ b/pkgs/tools/misc/esptool/default.nix
@@ -2,23 +2,23 @@
 
 python3.pkgs.buildPythonApplication rec {
   name = "esptool-${version}";
-  version = "2.1";
+  version = "2.3.1";
 
   src = fetchFromGitHub {
     owner = "espressif";
     repo = "esptool";
     rev = "v${version}";
-    sha256 = "137p0kcscly95qpjzgx1yxm8k2wf5y9v3srvlhp2ajniirgv8ijv";
+    sha256 = "0gwnl6z5s2ax07l3n38h9hdyz71pn8lzn4fybcwyrii0bj2kapvc";
   };
 
-  buildInputs = with python3.pkgs; [ flake8 flake8-future-import ];
+  checkInputs = with python3.pkgs; [ flake8 flake8-future-import flake8-import-order ];
   propagatedBuildInputs = with python3.pkgs; [ pyserial pyaes ecdsa openssl ];
 
   meta = with stdenv.lib; {
     description = "ESP8266 and ESP32 serial bootloader utility";
     homepage = https://github.com/espressif/esptool;
     license = licenses.gpl2;
-    maintainers = [ maintainers.dezgeg ];
+    maintainers = with maintainers; [ dezgeg dotlambda ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/exa/default.nix b/pkgs/tools/misc/exa/default.nix
index 503f0df331cf..c07420821ed4 100644
--- a/pkgs/tools/misc/exa/default.nix
+++ b/pkgs/tools/misc/exa/default.nix
@@ -1,4 +1,6 @@
-{ stdenv, fetchFromGitHub, rustPlatform, cmake, perl, pkgconfig, zlib }:
+{ stdenv, fetchFromGitHub, rustPlatform, cmake, perl, pkgconfig, zlib
+, darwin, libiconv
+}:
 
 with rustPlatform;
 
@@ -16,7 +18,10 @@ buildRustPackage rec {
   };
 
   nativeBuildInputs = [ cmake pkgconfig perl ];
-  buildInputs = [ zlib ];
+  buildInputs = [ zlib ]
+  ++ stdenv.lib.optionals stdenv.isDarwin [
+    libiconv darwin.apple_sdk.frameworks.Security ]
+  ;
 
   # Some tests fail, but Travis ensures a proper build
   doCheck = false;
diff --git a/pkgs/tools/misc/phraseapp-client/default.nix b/pkgs/tools/misc/phraseapp-client/default.nix
index d5908210cbdd..b4cfe7b26c0e 100644
--- a/pkgs/tools/misc/phraseapp-client/default.nix
+++ b/pkgs/tools/misc/phraseapp-client/default.nix
@@ -2,7 +2,7 @@
 
 buildGoPackage rec {
   name = "phraseapp-client-${version}";
-  version = "1.4.5";
+  version = "1.6.0";
 
   goPackagePath = "github.com/phrase/phraseapp-client";
   subPackages = [ "." ];
@@ -11,7 +11,7 @@ buildGoPackage rec {
     owner = "phrase";
     repo = "phraseapp-client";
     rev = version;
-    sha256 = "0zky7jcs7h6zmvkb0na4la6h7g63jlrziifqk831fd1gspdzgajp";
+    sha256 = "0rgwl0rgkci045hg36s0q8jwkni1hzapqpi0mc0gk3rl7nagw622";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/tools/networking/s3cmd/default.nix b/pkgs/tools/networking/s3cmd/default.nix
index 887cd09b6eb3..c3d60d8e87b9 100644
--- a/pkgs/tools/networking/s3cmd/default.nix
+++ b/pkgs/tools/networking/s3cmd/default.nix
@@ -2,13 +2,13 @@
 
 python2Packages.buildPythonApplication rec {
   name = "s3cmd-${version}";
-  version = "1.6.1";
+  version = "2.0.1";
   
   src = fetchFromGitHub {
     owner  = "s3tools";
     repo   = "s3cmd";
     rev    = "v${version}";
-    sha256 = "0aan6v1qj0pdkddhhkbaky44d54irm1pa8mkn52i2j86nb2rkcf9";
+    sha256 = "198hzzplci57sb8hdan30nbakslawmijfw0j71wjvq85n3xn6qsl";
   };
 
   propagatedBuildInputs = with python2Packages; [ python_magic dateutil ];
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 2db002876c57..b1016bca2ab5 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -7162,6 +7162,8 @@ with pkgs;
 
   red = callPackage ../development/interpreters/red { };
 
+  regextester = callPackage ../applications/misc/regextester { };
+
   regina = callPackage ../development/interpreters/regina { };
 
   inherit (ocamlPackages) reason;
@@ -9120,6 +9122,7 @@ with pkgs;
   gnome-sharp = callPackage ../development/libraries/gnome-sharp {};
 
   granite = callPackage ../development/libraries/granite { };
+  elementary-cmake-modules = callPackage ../development/libraries/elementary-cmake-modules { };
 
   gtk2 = callPackage ../development/libraries/gtk+/2.x.nix {
     cupsSupport = config.gtk2.cups or stdenv.isLinux;
@@ -10464,7 +10467,7 @@ with pkgs;
     ffmpeg = ffmpeg_2;
   };
 
-  mkvtoolnix = callPackage ../applications/video/mkvtoolnix { };
+  mkvtoolnix = libsForQt5.callPackage ../applications/video/mkvtoolnix { };
 
   mkvtoolnix-cli = callPackage ../applications/video/mkvtoolnix {
     withGUI = false;
@@ -16536,6 +16539,8 @@ with pkgs;
 
   mm = callPackage ../applications/networking/instant-messengers/mm { };
 
+  mpc-qt = libsForQt5.callPackage ../applications/video/mpc-qt { };
+
   mplayer = callPackage ../applications/video/mplayer ({
     pulseSupport = config.pulseaudio or false;
     libdvdnav = libdvdnav_4_2_1;
@@ -20844,8 +20849,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 { };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 3a62945849a9..5dcfd9b348f0 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -6004,6 +6004,8 @@ in {
 
   pyhomematic = callPackage ../development/python-modules/pyhomematic { };
 
+  pylama = callPackage ../development/python-modules/pylama { };
+
   pyphen = callPackage ../development/python-modules/pyphen {};
 
   pypoppler = buildPythonPackage rec {
@@ -7183,12 +7185,12 @@ in {
 
   hg-git = buildPythonPackage rec {
     name = "hg-git-${version}";
-    version = "0.8.10";
+    version = "0.8.11";
     disabled = isPy3k;
 
     src = pkgs.fetchurl {
       url = "mirror://pypi/h/hg-git/${name}.tar.gz";
-      sha256 = "03dzcs4l7hzq59sgjhngxgmi34xfyd7jcxyjl0f68rwq8b1yqrp3";
+      sha256 = "08kw1sj3sq1q1571hwkc51w20ks9ysmlg93pcnmd6gr66bz02dyn";
     };
 
     propagatedBuildInputs = with self; [ dulwich ];
@@ -7197,6 +7199,7 @@ in {
       description = "Push and pull from a Git server using Mercurial";
       homepage = http://hg-git.github.com/;
       maintainers = with maintainers; [ koral ];
+      license = stdenv.lib.licenses.gpl2;
     };
   };
 
@@ -7555,6 +7558,8 @@ in {
 
   flake8-future-import = callPackage ../development/python-modules/flake8-future-import { };
 
+  flake8-import-order = callPackage ../development/python-modules/flake8-import-order { };
+
   flaky = buildPythonPackage rec {
     name = "flaky-${version}";
     version = "3.1.0";