summary refs log tree commit diff
diff options
context:
space:
mode:
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2021-05-07 12:23:21 +0000
committerGitHub <noreply@github.com>2021-05-07 12:23:21 +0000
commit12193913a1bbc203bafe0bf9059d80b500814ef1 (patch)
tree3399469359e54e9084543938ebebc4d26d3a31ae
parenteb47bbf4acb8b4d530ba8013caa0baa4dc23c915 (diff)
parentdb767c789d4327883b44bf4987e3a6348153aa41 (diff)
Merge staging-next into staging
-rw-r--r--doc/languages-frameworks/gnome.section.md2
-rwxr-xr-xmaintainers/scripts/update.nix14
-rw-r--r--maintainers/scripts/update.py3
-rw-r--r--nixos/doc/manual/release-notes/rl-2105.xml2
-rw-r--r--nixos/modules/services/x11/desktop-managers/gnome3.nix3
-rw-r--r--nixos/modules/services/x11/display-managers/gdm.nix8
-rw-r--r--nixos/tests/installed-tests/default.nix1
-rw-r--r--nixos/tests/installed-tests/librsvg.nix9
-rw-r--r--pkgs/applications/audio/mousai/default.nix4
-rw-r--r--pkgs/applications/audio/sound-juicer/default.nix64
-rw-r--r--pkgs/applications/audio/sublime-music/default.nix15
-rw-r--r--pkgs/applications/audio/sunvox/default.nix4
-rw-r--r--pkgs/applications/backup/deja-dup/default.nix8
-rw-r--r--pkgs/applications/editors/emacs/generic.nix6
-rw-r--r--pkgs/applications/editors/emacs/site-start.el4
-rw-r--r--pkgs/applications/editors/gnome-builder/default.nix10
-rw-r--r--pkgs/applications/editors/gnome-latex/default.nix53
-rw-r--r--pkgs/applications/graphics/ImageMagick/7.0.nix10
-rw-r--r--pkgs/applications/graphics/gimp/default.nix13
-rw-r--r--pkgs/applications/graphics/gnome-photos/default.nix24
-rw-r--r--pkgs/applications/graphics/gthumb/default.nix5
-rw-r--r--pkgs/applications/graphics/inkscape/default.nix8
-rw-r--r--pkgs/applications/misc/font-manager/default.nix59
-rw-r--r--pkgs/applications/misc/gnome-multi-writer/default.nix4
-rw-r--r--pkgs/applications/misc/hello/default.nix10
-rw-r--r--pkgs/applications/misc/kratos/default.nix42
-rw-r--r--pkgs/applications/misc/orca/default.nix6
-rw-r--r--pkgs/applications/misc/orca/fix-paths.patch26
-rw-r--r--pkgs/applications/networking/calls/default.nix2
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix16
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix18
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution/default.nix9
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch21
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix8
-rw-r--r--pkgs/applications/networking/seaweedfs/default.nix8
-rw-r--r--pkgs/applications/office/elementary-planner/default.nix2
-rw-r--r--pkgs/applications/office/gnucash/default.nix14
-rw-r--r--pkgs/applications/office/gnumeric/default.nix1
-rw-r--r--pkgs/applications/science/logic/key/default.nix13
-rw-r--r--pkgs/applications/version-management/meld/default.nix1
-rw-r--r--pkgs/applications/video/pitivi/default.nix6
-rw-r--r--pkgs/build-support/emacs/wrapper.nix4
-rw-r--r--pkgs/build-support/trivial-builders.nix33
-rw-r--r--pkgs/data/documentation/gnome-user-docs/default.nix6
-rw-r--r--pkgs/data/fonts/cantarell-fonts/default.nix12
-rw-r--r--pkgs/data/misc/mobile-broadband-provider-info/default.nix11
-rw-r--r--pkgs/desktops/gnome-3/apps/accerciser/default.nix1
-rw-r--r--pkgs/desktops/gnome-3/apps/cheese/default.nix50
-rw-r--r--pkgs/desktops/gnome-3/apps/file-roller/default.nix15
-rw-r--r--pkgs/desktops/gnome-3/apps/gedit/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-books/default.nix11
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix12
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix19
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-calendar/gtk_image_reset_crash.patch17
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-characters/default.nix15
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix25
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-maps/default.nix11
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-music/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-notes/default.nix17
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/apps/gnome-weather/default.nix46
-rw-r--r--pkgs/desktops/gnome-3/apps/seahorse/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/baobab/default.nix54
-rw-r--r--pkgs/desktops/gnome-3/core/dconf-editor/default.nix49
-rw-r--r--pkgs/desktops/gnome-3/core/eog/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/epiphany/default.nix20
-rw-r--r--pkgs/desktops/gnome-3/core/evince/default.nix8
-rw-r--r--pkgs/desktops/gnome-3/core/evolution-data-server/default.nix5
-rw-r--r--pkgs/desktops/gnome-3/core/gdm/default.nix15
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix62
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-calculator/default.nix65
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-contacts/default.nix8
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-control-center/default.nix45
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch94
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-desktop/default.nix79
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix16
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix68
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-initial-setup/0001-fix-paths.patch21
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix24
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-keyring/default.nix71
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-session/ctl.nix9
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-session/default.nix15
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix16
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell/default.nix32
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch2
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-software/default.nix13
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix59
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-terminal/default.nix4
-rw-r--r--pkgs/desktops/gnome-3/core/gnome-tour/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/gvc-with-ucm-prePatch.nix17
-rw-r--r--pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix7
-rw-r--r--pkgs/desktops/gnome-3/core/mutter/default.nix17
-rw-r--r--pkgs/desktops/gnome-3/core/nautilus/default.nix10
-rw-r--r--pkgs/desktops/gnome-3/core/rygel/default.nix1
-rw-r--r--pkgs/desktops/gnome-3/core/simple-scan/default.nix8
-rw-r--r--pkgs/desktops/gnome-3/core/sushi/default.nix5
-rw-r--r--pkgs/desktops/gnome-3/core/yelp-xsl/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/core/yelp/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/default.nix4
-rw-r--r--pkgs/desktops/gnome-3/devtools/devhelp/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/extensions/gsconnect/default.nix4
-rw-r--r--pkgs/desktops/gnome-3/extensions/hot-edge/default.nix33
-rw-r--r--pkgs/desktops/gnome-3/find-latest-version.py39
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-chess/default.nix49
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-klotski/default.nix4
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-mines/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix63
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-robots/default.nix63
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/games/gnome-taquin/default.nix60
-rw-r--r--pkgs/desktops/gnome-3/games/iagno/default.nix14
-rw-r--r--pkgs/desktops/gnome-3/games/lightsoff/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/games/swell-foop/default.nix67
-rw-r--r--pkgs/desktops/gnome-3/games/tali/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/misc/geary/Bump-client-test-timeout-to-300s.patch10
-rw-r--r--pkgs/desktops/gnome-3/misc/geary/default.nix33
-rw-r--r--pkgs/desktops/gnome-3/misc/gitg/default.nix44
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-applets/default.nix8
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix4
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix5
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-panel/default.nix5
-rw-r--r--pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix14
-rw-r--r--pkgs/desktops/gnome-3/misc/gpaste/default.nix4
-rw-r--r--pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch2
-rw-r--r--pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix5
-rw-r--r--pkgs/desktops/gnome-3/misc/metacity/default.nix5
-rw-r--r--pkgs/desktops/gnome-3/misc/nautilus-python/default.nix1
-rw-r--r--pkgs/desktops/gnome-3/update.nix4
-rw-r--r--pkgs/desktops/pantheon/apps/appcenter/default.nix11
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-calendar/default.nix2
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-code/default.nix9
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-music/default.nix9
-rw-r--r--pkgs/desktops/pantheon/apps/elementary-photos/default.nix9
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix8
-rw-r--r--pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix9
-rw-r--r--pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix2
-rw-r--r--pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix15
-rw-r--r--pkgs/development/compilers/compcert/default.nix27
-rw-r--r--pkgs/development/compilers/ghc/8.10.2-binary.nix12
-rw-r--r--pkgs/development/compilers/ghc/8.6.5-binary.nix10
-rw-r--r--pkgs/development/compilers/gleam/default.nix6
-rw-r--r--pkgs/development/compilers/vala/default.nix13
-rw-r--r--pkgs/development/coq-modules/VST/default.nix6
-rw-r--r--pkgs/development/libraries/amtk/default.nix15
-rw-r--r--pkgs/development/libraries/appstream/default.nix70
-rw-r--r--pkgs/development/libraries/at-spi2-atk/default.nix1
-rw-r--r--pkgs/development/libraries/at-spi2-core/default.nix9
-rw-r--r--pkgs/development/libraries/atk/default.nix1
-rw-r--r--pkgs/development/libraries/atkmm/default.nix1
-rw-r--r--pkgs/development/libraries/cairomm/1.16.nix70
-rw-r--r--pkgs/development/libraries/clutter-gst/default.nix1
-rw-r--r--pkgs/development/libraries/clutter-gtk/default.nix1
-rw-r--r--pkgs/development/libraries/clutter/default.nix1
-rw-r--r--pkgs/development/libraries/cogl/default.nix1
-rw-r--r--pkgs/development/libraries/dconf/default.nix5
-rw-r--r--pkgs/development/libraries/folks/default.nix33
-rw-r--r--pkgs/development/libraries/gcr/default.nix5
-rw-r--r--pkgs/development/libraries/gdk-pixbuf/default.nix46
-rw-r--r--pkgs/development/libraries/gegl/4.0.nix11
-rw-r--r--pkgs/development/libraries/gexiv2/default.nix1
-rw-r--r--pkgs/development/libraries/gfbgraph/default.nix1
-rw-r--r--pkgs/development/libraries/gjs/default.nix30
-rw-r--r--pkgs/development/libraries/glib-networking/default.nix5
-rw-r--r--pkgs/development/libraries/glib/default.nix4
-rw-r--r--pkgs/development/libraries/glibmm/2.68.nix59
-rw-r--r--pkgs/development/libraries/glibmm/default.nix1
-rw-r--r--pkgs/development/libraries/gnome-online-accounts/default.nix5
-rw-r--r--pkgs/development/libraries/gobject-introspection/absolute_gir_path.patch6
-rw-r--r--pkgs/development/libraries/gobject-introspection/absolute_shlib_path.patch15
-rw-r--r--pkgs/development/libraries/gobject-introspection/default.nix5
-rw-r--r--pkgs/development/libraries/goffice/default.nix1
-rw-r--r--pkgs/development/libraries/gom/default.nix1
-rw-r--r--pkgs/development/libraries/goocanvasmm/default.nix1
-rw-r--r--pkgs/development/libraries/grilo-plugins/default.nix4
-rw-r--r--pkgs/development/libraries/gsettings-desktop-schemas/default.nix6
-rw-r--r--pkgs/development/libraries/gsound/default.nix1
-rw-r--r--pkgs/development/libraries/gstreamer/bad/default.nix10
-rw-r--r--pkgs/development/libraries/gstreamer/gstreamermm/default.nix4
-rw-r--r--pkgs/development/libraries/gtk/4.x.nix59
-rw-r--r--pkgs/development/libraries/gtkmm/3.x.nix5
-rw-r--r--pkgs/development/libraries/gtkmm/4.x.nix91
-rw-r--r--pkgs/development/libraries/gtksourceview/4.x.nix88
-rw-r--r--pkgs/development/libraries/gtksourceview/5.x.nix99
-rw-r--r--pkgs/development/libraries/gupnp-av/default.nix1
-rw-r--r--pkgs/development/libraries/gupnp-dlna/default.nix1
-rw-r--r--pkgs/development/libraries/gupnp-igd/default.nix1
-rw-r--r--pkgs/development/libraries/gvfs/default.nix5
-rw-r--r--pkgs/development/libraries/json-glib/default.nix1
-rw-r--r--pkgs/development/libraries/jsonrpc-glib/default.nix1
-rw-r--r--pkgs/development/libraries/lasem/default.nix1
-rw-r--r--pkgs/development/libraries/libblockdev/default.nix9
-rw-r--r--pkgs/development/libraries/libchamplain/default.nix1
-rw-r--r--pkgs/development/libraries/libcint/default.nix4
-rw-r--r--pkgs/development/libraries/libcryptui/default.nix1
-rw-r--r--pkgs/development/libraries/libdazzle/default.nix4
-rw-r--r--pkgs/development/libraries/libepc/default.nix1
-rw-r--r--pkgs/development/libraries/libgda/6.x.nix1
-rw-r--r--pkgs/development/libraries/libgda/default.nix1
-rw-r--r--pkgs/development/libraries/libgdamm/default.nix1
-rw-r--r--pkgs/development/libraries/libgee/default.nix5
-rw-r--r--pkgs/development/libraries/libgnomekbd/default.nix11
-rw-r--r--pkgs/development/libraries/libgsf/default.nix1
-rw-r--r--pkgs/development/libraries/libgtop/default.nix1
-rw-r--r--pkgs/development/libraries/libgudev/default.nix27
-rw-r--r--pkgs/development/libraries/libgweather/default.nix62
-rw-r--r--pkgs/development/libraries/libhandy/default.nix44
-rw-r--r--pkgs/development/libraries/libhttpseverywhere/default.nix1
-rw-r--r--pkgs/development/libraries/libmanette/default.nix1
-rw-r--r--pkgs/development/libraries/libpeas/default.nix5
-rw-r--r--pkgs/development/libraries/libpst/default.nix7
-rw-r--r--pkgs/development/libraries/librest/default.nix31
-rw-r--r--pkgs/development/libraries/librsvg/default.nix89
-rw-r--r--pkgs/development/libraries/libsigcxx/3.0.nix42
-rw-r--r--pkgs/development/libraries/libsigcxx/default.nix9
-rw-r--r--pkgs/development/libraries/libsoup/default.nix1
-rw-r--r--pkgs/development/libraries/libunity/default.nix22
-rw-r--r--pkgs/development/libraries/libunity/fix-vala.patch44
-rw-r--r--pkgs/development/libraries/libvirt-glib/default.nix44
-rw-r--r--pkgs/development/libraries/libwnck/3.x.nix1
-rw-r--r--pkgs/development/libraries/libxmlxx/default.nix1
-rw-r--r--pkgs/development/libraries/libzapojit/default.nix1
-rw-r--r--pkgs/development/libraries/mpich/default.nix13
-rw-r--r--pkgs/development/libraries/nss/default.nix4
-rw-r--r--pkgs/development/libraries/pango/default.nix14
-rw-r--r--pkgs/development/libraries/pangomm/2.48.nix65
-rw-r--r--pkgs/development/libraries/pangomm/default.nix1
-rw-r--r--pkgs/development/libraries/poppler/default.nix17
-rw-r--r--pkgs/development/libraries/presage/default.nix69
-rw-r--r--pkgs/development/libraries/presage/fixed-cppunit-detection.patch46
-rw-r--r--pkgs/development/libraries/rarian/default.nix6
-rw-r--r--pkgs/development/libraries/speechd/default.nix8
-rw-r--r--pkgs/development/libraries/template-glib/default.nix1
-rw-r--r--pkgs/development/libraries/tepl/default.nix9
-rw-r--r--pkgs/development/libraries/totem-pl-parser/default.nix1
-rw-r--r--pkgs/development/libraries/tracker-miners/default.nix4
-rw-r--r--pkgs/development/libraries/tracker/default.nix32
-rw-r--r--pkgs/development/libraries/tracker/fix-docs.patch28
-rw-r--r--pkgs/development/libraries/umockdev/default.nix43
-rw-r--r--pkgs/development/libraries/vte/default.nix41
-rw-r--r--pkgs/development/libraries/webkitgtk/default.nix33
-rw-r--r--pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix4
-rw-r--r--pkgs/development/libraries/zeitgeist/default.nix10
-rw-r--r--pkgs/development/misc/msp430/mspds/binary.nix35
-rw-r--r--pkgs/development/misc/msp430/mspds/bsl430.patch51
-rw-r--r--pkgs/development/misc/msp430/mspds/default.nix56
-rw-r--r--pkgs/development/misc/yelp-tools/default.nix30
-rw-r--r--pkgs/development/python-modules/dask-glm/default.nix8
-rw-r--r--pkgs/development/python-modules/dask-ml/default.nix5
-rw-r--r--pkgs/development/python-modules/dask/default.nix5
-rw-r--r--pkgs/development/python-modules/hdate/default.nix63
-rw-r--r--pkgs/development/python-modules/pg8000/default.nix4
-rw-r--r--pkgs/development/python-modules/pyatspi/default.nix5
-rw-r--r--pkgs/development/python-modules/pygobject/3.36.nix7
-rw-r--r--pkgs/development/python-modules/pygobject/3.nix51
-rw-r--r--pkgs/development/python-modules/tappy/default.nix29
-rw-r--r--pkgs/development/tools/profiling/sysprof/capture.nix1
-rw-r--r--pkgs/development/tools/profiling/sysprof/default.nix19
-rw-r--r--pkgs/development/tools/vala-lint/default.nix12
-rw-r--r--pkgs/servers/home-assistant/component-packages.nix2
-rw-r--r--pkgs/servers/home-assistant/default.nix1
-rw-r--r--pkgs/servers/keycloak/default.nix4
-rw-r--r--pkgs/servers/x11/xorg/overrides.nix6
-rw-r--r--pkgs/tools/admin/gtk-vnc/default.nix16
-rw-r--r--pkgs/tools/misc/routino/default.nix7
-rw-r--r--pkgs/tools/networking/gupnp-tools/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/applet/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/fortisslvpn/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/libnma/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/openconnect/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/openvpn/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/vpnc/default.nix1
-rw-r--r--pkgs/tools/security/httpx/default.nix6
-rw-r--r--pkgs/tools/text/gtranslator/default.nix8
-rw-r--r--pkgs/top-level/all-packages.nix37
-rw-r--r--pkgs/top-level/coq-packages.nix8
-rw-r--r--pkgs/top-level/python-packages.nix4
283 files changed, 3448 insertions, 1321 deletions
diff --git a/doc/languages-frameworks/gnome.section.md b/doc/languages-frameworks/gnome.section.md
index 00bd524b0c50c..734bf2b638992 100644
--- a/doc/languages-frameworks/gnome.section.md
+++ b/doc/languages-frameworks/gnome.section.md
@@ -68,7 +68,7 @@ preFixup = ''
 
 Fortunately, there is [`wrapGAppsHook`]{#ssec-gnome-hooks-wrapgappshook}. It works in conjunction with other setup hooks that populate environment variables, and it will then wrap all executables in `bin` and `libexec` directories using said variables.
 
-For convenience, it also adds `dconf.lib` for a GIO module implementing a GSettings backend using `dconf`, `gtk3` for GSettings schemas, and `librsvg` for GdkPixbuf loader to the closure. In case you are packaging a program without a graphical interface, you might want to use [`wrapGAppsNoGuiHook`]{#ssec-gnome-hooks-wrapgappsnoguihook}, which runs the same script as `wrapGAppsHook` but does not bring `gtk3` and `librsvg` into the closure.
+For convenience, it also adds `dconf.lib` for a GIO module implementing a GSettings backend using `dconf`, `gtk3` for GSettings schemas, and `librsvg` for GdkPixbuf loader to the closure. There is also [`wrapGAppsHook4`]{#ssec-gnome-hooks-wrapgappshook4}, which replaces GTK 3 with GTK 4. And in case you are packaging a program without a graphical interface, you might want to use [`wrapGAppsNoGuiHook`]{#ssec-gnome-hooks-wrapgappsnoguihook}, which runs the same script as `wrapGAppsHook` but does not bring `gtk3` and `librsvg` into the closure.
 
 - `wrapGAppsHook` itself will add the package’s `share` directory to `XDG_DATA_DIRS`.
 
diff --git a/maintainers/scripts/update.nix b/maintainers/scripts/update.nix
index 1305e0947c726..5317bdb9f42cb 100755
--- a/maintainers/scripts/update.nix
+++ b/maintainers/scripts/update.nix
@@ -1,5 +1,6 @@
 { package ? null
 , maintainer ? null
+, predicate ? null
 , path ? null
 , max-workers ? null
 , include-overlays ? false
@@ -69,6 +70,11 @@ let
    */
   packagesWith = packagesWithPath [];
 
+  /* Recursively find all packages in `pkgs` with updateScript matching given predicate.
+   */
+  packagesWithUpdateScriptMatchingPredicate = cond:
+    packagesWith (path: pkg: builtins.hasAttr "updateScript" pkg && cond path pkg);
+
   /* Recursively find all packages in `pkgs` with updateScript by given maintainer.
    */
   packagesWithUpdateScriptAndMaintainer = maintainer':
@@ -79,7 +85,7 @@ let
         else
           builtins.getAttr maintainer' lib.maintainers;
     in
-      packagesWith (path: pkg: builtins.hasAttr "updateScript" pkg &&
+      packagesWithUpdateScriptMatchingPredicate (path: pkg:
                          (if builtins.hasAttr "maintainers" pkg.meta
                            then (if builtins.isList pkg.meta.maintainers
                                    then builtins.elem maintainer pkg.meta.maintainers
@@ -120,6 +126,8 @@ let
   packages =
     if package != null then
       [ (packageByName package pkgs) ]
+    else if predicate != null then
+      packagesWithUpdateScriptMatchingPredicate predicate pkgs
     else if maintainer != null then
       packagesWithUpdateScriptAndMaintainer maintainer pkgs
     else if path != null then
@@ -139,6 +147,10 @@ let
 
     to run update script for specific package, or
 
+        % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: builtins.isList pkg.updateScript && builtins.length pkg.updateScript >= 1 && (let script = builtins.head pkg.updateScript; in builtins.isAttrs script && script.name == "gnome-update-script"))'
+
+    to run update script for all packages matching given predicate, or
+
         % nix-shell maintainers/scripts/update.nix --argstr path gnome3
 
     to run update script for all package under an attribute path.
diff --git a/maintainers/scripts/update.py b/maintainers/scripts/update.py
index 8cc2bcbd67c96..eb26a472e9265 100644
--- a/maintainers/scripts/update.py
+++ b/maintainers/scripts/update.py
@@ -39,6 +39,9 @@ async def run_update_script(nixpkgs_root: str, merge_lock: asyncio.Lock, temp_di
     if temp_dir is not None:
         worktree, _branch = temp_dir
 
+        # Ensure the worktree is clean before update.
+        await check_subprocess('git', 'reset', '--hard', '--quiet', 'HEAD', cwd=worktree)
+
         # Update scripts can use $(dirname $0) to get their location but we want to run
         # their clones in the git worktree, not in the main nixpkgs repo.
         update_script_command = map(lambda arg: re.sub(r'^{0}'.format(re.escape(nixpkgs_root)), worktree, arg), update_script_command)
diff --git a/nixos/doc/manual/release-notes/rl-2105.xml b/nixos/doc/manual/release-notes/rl-2105.xml
index 95c01820e7e69..96bd3010e5a9f 100644
--- a/nixos/doc/manual/release-notes/rl-2105.xml
+++ b/nixos/doc/manual/release-notes/rl-2105.xml
@@ -27,7 +27,7 @@
     <para>The default Linux kernel was updated to the 5.10 LTS series, coming from the 5.4 LTS series.</para>
    </listitem>
    <listitem>
-    <para>GNOME desktop environment was upgraded to 3.38, see its <link xlink:href="https://help.gnome.org/misc/release-notes/3.38/">release notes</link>.</para>
+    <para>GNOME desktop environment was upgraded to 40, see the release notes for <link xlink:href="https://help.gnome.org/misc/release-notes/40.0/">40.0</link> and <link xlink:href="https://help.gnome.org/misc/release-notes/3.38/">3.38</link>.</para>
    </listitem>
    <listitem>
     <para>
diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix
index 99e6edfba26e2..81203c7622af5 100644
--- a/nixos/modules/services/x11/desktop-managers/gnome3.nix
+++ b/nixos/modules/services/x11/desktop-managers/gnome3.nix
@@ -273,6 +273,7 @@ in
       services.accounts-daemon.enable = true;
       services.dleyna-renderer.enable = mkDefault true;
       services.dleyna-server.enable = mkDefault true;
+      services.power-profiles-daemon.enable = mkDefault true;
       services.gnome3.at-spi2-core.enable = true;
       services.gnome3.evolution-data-server.enable = true;
       services.gnome3.gnome-keyring.enable = true;
@@ -365,10 +366,10 @@ in
         gnome-bluetooth
         gnome-color-manager
         gnome-control-center
-        gnome-getting-started-docs
         gnome-shell
         gnome-shell-extensions
         gnome-themes-extra
+        pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in.
         pkgs.nixos-artwork.wallpapers.simple-dark-gray
         pkgs.nixos-artwork.wallpapers.simple-dark-gray-bottom
         pkgs.gnome-user-docs
diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix
index f79eb64b5a6a2..a214e91cfd358 100644
--- a/nixos/modules/services/x11/display-managers/gdm.nix
+++ b/nixos/modules/services/x11/display-managers/gdm.nix
@@ -218,14 +218,14 @@ in
     # We duplicate upstream's udev rules manually to make wayland with nvidia configurable
     services.udev.extraRules = ''
       # disable Wayland on Cirrus chipsets
-      ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="${gdm}/libexec/gdm-disable-wayland"
+      ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="${gdm}/libexec/gdm-runtime-config set daemon WaylandEnable false"
       # disable Wayland on Hi1710 chipsets
-      ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="${gdm}/libexec/gdm-disable-wayland"
+      ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="${gdm}/libexec/gdm-runtime-config set daemon WaylandEnable false"
       ${optionalString (!cfg.gdm.nvidiaWayland) ''
-        DRIVER=="nvidia", RUN+="${gdm}/libexec/gdm-disable-wayland"
+        DRIVER=="nvidia", RUN+="${gdm}/libexec/gdm-runtime-config set daemon WaylandEnable false"
       ''}
       # disable Wayland when modesetting is disabled
-      IMPORT{cmdline}="nomodeset", RUN+="${gdm}/libexec/gdm-disable-wayland"
+      IMPORT{cmdline}="nomodeset", RUN+="${gdm}/libexec/gdm-runtime-config set daemon WaylandEnable false"
     '';
 
     systemd.user.services.dbus.wantedBy = [ "default.target" ];
diff --git a/nixos/tests/installed-tests/default.nix b/nixos/tests/installed-tests/default.nix
index e5d7009bb7b9a..6c2846a1636bd 100644
--- a/nixos/tests/installed-tests/default.nix
+++ b/nixos/tests/installed-tests/default.nix
@@ -97,6 +97,7 @@ in
   gsconnect = callInstalledTest ./gsconnect.nix {};
   ibus = callInstalledTest ./ibus.nix {};
   libgdata = callInstalledTest ./libgdata.nix {};
+  librsvg = callInstalledTest ./librsvg.nix {};
   glib-testing = callInstalledTest ./glib-testing.nix {};
   libjcat = callInstalledTest ./libjcat.nix {};
   libxmlb = callInstalledTest ./libxmlb.nix {};
diff --git a/nixos/tests/installed-tests/librsvg.nix b/nixos/tests/installed-tests/librsvg.nix
new file mode 100644
index 0000000000000..378e7cce3ff4c
--- /dev/null
+++ b/nixos/tests/installed-tests/librsvg.nix
@@ -0,0 +1,9 @@
+{ pkgs, makeInstalledTest, ... }:
+
+makeInstalledTest {
+  tested = pkgs.librsvg;
+
+  testConfig = {
+    virtualisation.memorySize = 2047;
+  };
+}
diff --git a/pkgs/applications/audio/mousai/default.nix b/pkgs/applications/audio/mousai/default.nix
index 502842c7aa734..e705c3590adca 100644
--- a/pkgs/applications/audio/mousai/default.nix
+++ b/pkgs/applications/audio/mousai/default.nix
@@ -18,7 +18,7 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "mousai";
-  version = "0.3.1";
+  version = "0.3.2";
 
   format = "other";
 
@@ -26,7 +26,7 @@ python3.pkgs.buildPythonApplication rec {
     owner = "SeaDve";
     repo = "Mousai";
     rev = "v${version}";
-    sha256 = "0x57dci0prhlj79h74yh79cazn48rn0bckz5j3z4njk4fwc3fvfx";
+    sha256 = "sha256-sBB2kqlC+2qPgQinhGxY8lq9unxgQoOOhDP5o1pUWMo=";
   };
 
   postPatch = ''
diff --git a/pkgs/applications/audio/sound-juicer/default.nix b/pkgs/applications/audio/sound-juicer/default.nix
index 740757a639e31..ba51fc1af5646 100644
--- a/pkgs/applications/audio/sound-juicer/default.nix
+++ b/pkgs/applications/audio/sound-juicer/default.nix
@@ -1,29 +1,59 @@
-{ lib, stdenv, fetchurl, pkg-config, glib, gtk3, intltool, itstool, libxml2, brasero
-, libcanberra-gtk3, gnome3, gst_all_1, libmusicbrainz5, libdiscid, isocodes
-, gsettings-desktop-schemas, wrapGAppsHook }:
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, glib
+, gtk3
+, itstool
+, libxml2
+, brasero
+, libcanberra-gtk3
+, gnome3
+, gst_all_1
+, libmusicbrainz5
+, libdiscid
+, isocodes
+, gsettings-desktop-schemas
+, wrapGAppsHook
+}:
 
-let
+stdenv.mkDerivation rec {
   pname = "sound-juicer";
-  version = "3.24.0";
-in stdenv.mkDerivation rec {
-  name = "${pname}-${version}";
+  version = "3.38.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "19qg4xv0f9rkq34lragkmhii1llxsa87llbl28i759b0ks4f6sny";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "08d5d81rz9sj3m5paw8fwbgxmhlbr7bcjdzpmzj832qvg8smydxf";
   };
 
-  nativeBuildInputs = [ pkg-config intltool itstool libxml2 wrapGAppsHook ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    itstool
+    libxml2
+    wrapGAppsHook
+  ];
+
   buildInputs = [
-    glib gtk3 brasero libcanberra-gtk3 gnome3.adwaita-icon-theme
-    gsettings-desktop-schemas libmusicbrainz5 libdiscid isocodes
-    gst_all_1.gstreamer gst_all_1.gst-plugins-base
-    gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad
+    glib
+    gtk3
+    brasero
+    libcanberra-gtk3
+    gnome3.adwaita-icon-theme
+    gsettings-desktop-schemas
+    libmusicbrainz5
+    libdiscid
+    isocodes
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
     gst_all_1.gst-libav
   ];
 
-  NIX_CFLAGS_COMPILE="-Wno-error=format-nonliteral";
-
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
@@ -34,7 +64,7 @@ in stdenv.mkDerivation rec {
     description = "A Gnome CD Ripper";
     homepage = "https://wiki.gnome.org/Apps/SoundJuicer";
     maintainers = [ maintainers.bdimcheff ];
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/audio/sublime-music/default.nix b/pkgs/applications/audio/sublime-music/default.nix
index 15963faf06b4c..cd43b5d53a276 100644
--- a/pkgs/applications/audio/sublime-music/default.nix
+++ b/pkgs/applications/audio/sublime-music/default.nix
@@ -1,5 +1,4 @@
 { fetchFromGitLab
-, fetchpatch
 , lib
 , python3Packages
 , gobject-introspection
@@ -16,26 +15,16 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "sublime-music";
-  version = "0.11.11";
+  version = "0.11.12";
   format = "pyproject";
 
   src = fetchFromGitLab {
     owner = "sublime-music";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-r4Tn/7CGDny8Aa4kF4PM5ZKMYthMJ7801X3zPdvXh4Q=";
+    sha256 = "sha256-fcEdpht+xKJRTaD3gKoRdf6O2SAPlZHZ61Jy8bdTKjs=";
   };
 
-  patches = [
-    # Switch to poetry-core:
-    # https://gitlab.com/sublime-music/sublime-music/-/merge_requests/60
-    (fetchpatch {
-      name = "use-poetry-core.patch";
-      url = "https://gitlab.com/sublime-music/sublime-music/-/commit/9b0af19dbdfdcc5a0fa23e73bb34c7135a8c2855.patch";
-      sha256 = "sha256-cXG0RvrnBpme6yKWM0nfqMqoK0qPT6spflJ9AaaslVg=";
-    })
-  ];
-
   nativeBuildInputs = [
     gobject-introspection
     python3Packages.poetry-core
diff --git a/pkgs/applications/audio/sunvox/default.nix b/pkgs/applications/audio/sunvox/default.nix
index ef7133630b5ef..577175fcff2a7 100644
--- a/pkgs/applications/audio/sunvox/default.nix
+++ b/pkgs/applications/audio/sunvox/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "http://www.warmplace.ru/soft/sunvox/sunvox-${version}.zip";
-    sha256 = "0lqzr68n2c6aifw2vbyars91wn1chmgb9xfdk463g4vjqiava3ih";
+    sha256 = "10lqbm1grw0sqasx7i6528cishv5ksdf9zbb3ygxd8c1iwaxzhb9";
   };
 
   nativeBuildInputs = [ unzip ];
@@ -44,7 +44,5 @@ stdenv.mkDerivation rec {
     homepage = "http://www.warmplace.ru/soft/sunvox/";
     maintainers = with maintainers; [ puffnfresh ];
     platforms = [ "i686-linux" "x86_64-linux" ];
-    # hash mismatch
-    broken = true;
   };
 }
diff --git a/pkgs/applications/backup/deja-dup/default.nix b/pkgs/applications/backup/deja-dup/default.nix
index 4ab491cb9a9d4..ccd121f5da700 100644
--- a/pkgs/applications/backup/deja-dup/default.nix
+++ b/pkgs/applications/backup/deja-dup/default.nix
@@ -12,7 +12,7 @@
 , coreutils
 , libsoup
 , libsecret
-, libhandy_0
+, libhandy
 , wrapGAppsHook
 , libgpgerror
 , json-glib
@@ -21,14 +21,14 @@
 
 stdenv.mkDerivation rec {
   pname = "deja-dup";
-  version = "42.6";
+  version = "42.7";
 
   src = fetchFromGitLab {
     domain = "gitlab.gnome.org";
     owner = "World";
     repo = pname;
     rev = version;
-    sha256 = "0grwlfakrnr9ij7h8lsfazlws6qix8pl50dr94cpxnnbjga9xn9z";
+    sha256 = "1q66wccnph78cp1r5mln2iq4bcqdrrchxq3c1pjrzkmzwc6l93gz";
   };
 
   patches = [
@@ -53,7 +53,7 @@ stdenv.mkDerivation rec {
     glib
     gtk3
     libsecret
-    libhandy_0
+    libhandy
     libgpgerror
     json-glib
   ];
diff --git a/pkgs/applications/editors/emacs/generic.nix b/pkgs/applications/editors/emacs/generic.nix
index b093c7e0529d1..ad044d3968e82 100644
--- a/pkgs/applications/editors/emacs/generic.nix
+++ b/pkgs/applications/editors/emacs/generic.nix
@@ -94,8 +94,8 @@ let emacs = stdenv.mkDerivation (lib.optionalAttrs nativeComp {
         ]));
     in ''
       substituteInPlace lisp/emacs-lisp/comp.el --replace \
-        "(defcustom comp-native-driver-options nil" \
-        "(defcustom comp-native-driver-options '(${backendPath})"
+        "(defcustom native-comp-driver-options nil" \
+        "(defcustom native-comp-driver-options '(${backendPath})"
     ''))
     ""
   ];
@@ -175,7 +175,7 @@ let emacs = stdenv.mkDerivation (lib.optionalAttrs nativeComp {
           (comp-trampoline-compile (intern (pop argv))))"
     mkdir -p $out/share/emacs/native-lisp
     $out/bin/emacs --batch \
-      --eval "(add-to-list 'comp-eln-load-path \"$out/share/emacs/native-lisp\")" \
+      --eval "(add-to-list 'native-comp-eln-load-path \"$out/share/emacs/native-lisp\")" \
       -f batch-native-compile $out/share/emacs/site-lisp/site-start.el
   '';
 
diff --git a/pkgs/applications/editors/emacs/site-start.el b/pkgs/applications/editors/emacs/site-start.el
index 01a6422d731fa..3f9ec25d99f0f 100644
--- a/pkgs/applications/editors/emacs/site-start.el
+++ b/pkgs/applications/editors/emacs/site-start.el
@@ -47,11 +47,11 @@ least specific (the system profile)"
 ;;; Set up native-comp load path.
 (when (featurep 'comp)
   ;; Append native-comp subdirectories from `NIX_PROFILES'.
-  (setq comp-eln-load-path
+  (setq native-comp-eln-load-path
         (append (mapcar (lambda (profile-dir)
                           (concat profile-dir "/share/emacs/native-lisp/"))
                         (nix--profile-paths))
-                comp-eln-load-path)))
+                native-comp-eln-load-path)))
 
 ;;; Make `woman' find the man pages
 (defvar woman-manpath)
diff --git a/pkgs/applications/editors/gnome-builder/default.nix b/pkgs/applications/editors/gnome-builder/default.nix
index da7b70cecd2ab..50f2990104264 100644
--- a/pkgs/applications/editors/gnome-builder/default.nix
+++ b/pkgs/applications/editors/gnome-builder/default.nix
@@ -39,11 +39,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-builder";
-  version = "3.38.2";
+  version = "3.40.2";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "jFNco64yoZC1TZbTIHGVf+wBYYQHo2JRiMZFHngzYTs=";
+    sha256 = "16kikslvcfjqj4q3j857mq9i8cyd965b3lvfzcwijc91x3ylr15j";
   };
 
   nativeBuildInputs = [
@@ -99,7 +99,6 @@ stdenv.mkDerivation rec {
   '';
 
   mesonFlags = [
-    "-Dpython_libprefix=${python3.libPrefix}"
     "-Ddocs=true"
 
     # Making the build system correctly detect clang header and library paths
@@ -135,7 +134,10 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  passthru.updateScript = gnome3.updateScript { packageName = pname; };
+  passthru.updateScript = gnome3.updateScript {
+    packageName = pname;
+    versionPolicy = "odd-unstable";
+  };
 
   meta = with lib; {
     description = "An IDE for writing GNOME-based software";
diff --git a/pkgs/applications/editors/gnome-latex/default.nix b/pkgs/applications/editors/gnome-latex/default.nix
index 7967b78f13c28..277863244a594 100644
--- a/pkgs/applications/editors/gnome-latex/default.nix
+++ b/pkgs/applications/editors/gnome-latex/default.nix
@@ -1,21 +1,49 @@
-{ lib, stdenv, fetchurl, wrapGAppsHook, gsettings-desktop-schemas, gspell, gtksourceview4, libgee
-, tepl, amtk, gnome3, glib, pkg-config, intltool, itstool, libxml2 }:
-let
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, gtk-doc
+, vala
+, gobject-introspection
+, wrapGAppsHook
+, gsettings-desktop-schemas
+, gspell
+, gtksourceview4
+, libgee
+, tepl
+, amtk
+, gnome3
+, glib
+, pkg-config
+, intltool
+, itstool
+, libxml2
+}:
+
+stdenv.mkDerivation rec {
   version = "3.38.0";
   pname = "gnome-latex";
-in stdenv.mkDerivation {
-  name = "${pname}-${version}";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "0xqd49pgi82dygqnxj08i1v22b0vwwhx3zvdinhrx4jny339yam8";
   };
 
-  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
-  configureFlags = ["--disable-dconf-migration"];
+  patches = [
+    # Fix build with latest tepl.
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/Archive/gnome-latex/commit/e1b01186f8a4e5d3fee4c9ccfbedd6d098517df9.patch";
+      sha256 = "H8cbp5hDZoXytEdKE2D/oYHNKIbEFwxQoEaC4JMfGHY=";
+    })
+  ];
 
   nativeBuildInputs = [
     pkg-config
+    autoreconfHook
+    gtk-doc
+    vala
+    gobject-introspection
     wrapGAppsHook
     itstool
     intltool
@@ -33,9 +61,18 @@ in stdenv.mkDerivation {
     tepl
   ];
 
+  configureFlags = [
+    "--disable-dconf-migration"
+  ];
+
   doCheck = true;
 
-  passthru.updateScript = gnome3.updateScript { packageName = pname; };
+  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+  passthru.updateScript = gnome3.updateScript {
+    packageName = pname;
+    versionPolicy = "odd-unstable";
+  };
 
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Apps/GNOME-LaTeX";
diff --git a/pkgs/applications/graphics/ImageMagick/7.0.nix b/pkgs/applications/graphics/ImageMagick/7.0.nix
index 70ffac5cf5846..c4e1f3406f6d6 100644
--- a/pkgs/applications/graphics/ImageMagick/7.0.nix
+++ b/pkgs/applications/graphics/ImageMagick/7.0.nix
@@ -2,6 +2,8 @@
 , bzip2, zlib, libX11, libXext, libXt, fontconfig, freetype, ghostscript, libjpeg, djvulibre
 , lcms2, openexr, libpng, librsvg, libtiff, libxml2, openjpeg, libwebp, libheif
 , ApplicationServices
+, Foundation
+, testVersion, imagemagick
 }:
 
 let
@@ -50,7 +52,10 @@ stdenv.mkDerivation rec {
     ]
     ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
       [ openexr librsvg openjpeg ]
-    ++ lib.optional stdenv.isDarwin ApplicationServices;
+    ++ lib.optionals stdenv.isDarwin [
+      ApplicationServices
+      Foundation
+    ];
 
   propagatedBuildInputs =
     [ bzip2 freetype libjpeg lcms2 ]
@@ -72,6 +77,9 @@ stdenv.mkDerivation rec {
     done
   '';
 
+  passthru.tests.version =
+    testVersion { package = imagemagick; };
+
   meta = with lib; {
     homepage = "http://www.imagemagick.org/";
     description = "A software suite to create, edit, compose, or convert bitmap images";
diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix
index 2491d8d3a8ab4..08d3f122aab50 100644
--- a/pkgs/applications/graphics/gimp/default.nix
+++ b/pkgs/applications/graphics/gimp/default.nix
@@ -1,7 +1,6 @@
 { stdenv
 , lib
 , fetchurl
-, fetchpatch
 , substituteAll
 , autoreconfHook
 , pkg-config
@@ -34,6 +33,7 @@
 , libexif
 , gettext
 , makeWrapper
+, gtk-doc
 , xorg
 , glib-networking
 , libmypaint
@@ -53,13 +53,13 @@ let
   python = python2.withPackages (pp: [ pp.pygtk ]);
 in stdenv.mkDerivation rec {
   pname = "gimp";
-  version = "2.10.22";
+  version = "2.10.24";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
-    sha256 = "1fqqyshakvdarf1jipk2n33ibqr23ni22z3d8srq13bpydblpf1d";
+    sha256 = "17lq6ns5qhspd171zqh76yf98xnn5n0hcl7hbhbx63cc6ribf6xx";
   };
 
   patches = [
@@ -73,12 +73,6 @@ in stdenv.mkDerivation rec {
     # Use absolute paths instead of relying on PATH
     # to make sure plug-ins are loaded by the correct interpreter.
     ./hardcode-plugin-interpreters.patch
-
-    # Fix crash without dot.
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gimp/-/commit/f83fd22c4b8701ffc4ce14383e5e22756a4bce04.patch";
-      sha256 = "POuvBhOSStO7hBGp4HgNx5F9pElFRoqN3W+i3u4zOnk=";
-    })
   ];
 
   nativeBuildInputs = [
@@ -87,6 +81,7 @@ in stdenv.mkDerivation rec {
     intltool
     gettext
     makeWrapper
+    gtk-doc
   ];
 
   buildInputs = [
diff --git a/pkgs/applications/graphics/gnome-photos/default.nix b/pkgs/applications/graphics/gnome-photos/default.nix
index a710d6c1e4794..358847086a128 100644
--- a/pkgs/applications/graphics/gnome-photos/default.nix
+++ b/pkgs/applications/graphics/gnome-photos/default.nix
@@ -1,6 +1,5 @@
 { lib, stdenv
 , fetchurl
-, fetchpatch
 , at-spi2-core
 , babl
 , dbus
@@ -22,6 +21,7 @@
 , gtk3
 , itstool
 , libdazzle
+, libhandy
 , libgdata
 , libxml2
 , meson
@@ -36,32 +36,17 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-photos";
-  version = "3.38.0";
+  version = "40.0";
 
   outputs = [ "out" "installedTests" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1i64w69kk3sdf9vn7npnwrhy8qjwn0vizq200x3pgmbrfm3kjzv6";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1bzi79plw6ji6qlckhxnwfnswy6jpnhzmmyanml2i2xg73hp6bg0";
   };
 
   patches = [
     ./installed-tests-path.patch
-
-    # Port to Tracker 3
-    # https://gitlab.gnome.org/GNOME/gnome-photos/-/merge_requests/135
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-photos/commit/f39a85bb1a82093f4ba615494ff7e95609674fc2.patch";
-      sha256 = "M5r5WuB1JpUBVN3KxNvpMiPWj0pIpT+ImQMOiGtUgT4=";
-    })
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-photos/commit/3d847ff80d429cadf0bc59aa50caa37bf27c0201.patch";
-      sha256 = "zGjSL1qpWVJ/5Ifgh2CbhFSBR/WDAra8F+YUOemyxyU=";
-    })
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-photos/commit/2eb923726147b05c936dee64b205d833525db1df.patch";
-      sha256 = "vCA6NXHzmNf2GoLqzWwIyziC6puJgJ0QTLeKWsAEFAE=";
-    })
   ];
 
   nativeBuildInputs = [
@@ -99,6 +84,7 @@ stdenv.mkDerivation rec {
     gsettings-desktop-schemas
     gtk3
     libdazzle
+    libhandy
     libgdata
     tracker
     tracker-miners # For 'org.freedesktop.Tracker.Miner.Files' GSettings schema
diff --git a/pkgs/applications/graphics/gthumb/default.nix b/pkgs/applications/graphics/gthumb/default.nix
index 26de91ee2252d..14993f6f533ae 100644
--- a/pkgs/applications/graphics/gthumb/default.nix
+++ b/pkgs/applications/graphics/gthumb/default.nix
@@ -32,11 +32,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gthumb";
-  version = "3.10.2";
+  version = "3.11.3";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "/erkKBg3j5s8qwBgTu61t8Cnpez+ad4IuZOGd0ZDXJM=";
+    sha256 = "11bvcimamdcksgqj1ymh54yzhpwc5j8glda8brqqhwq3h2wj0j9d";
   };
 
   nativeBuildInputs = [
@@ -97,6 +97,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix
index 11340fa74686b..bea288e295860 100644
--- a/pkgs/applications/graphics/inkscape/default.nix
+++ b/pkgs/applications/graphics/inkscape/default.nix
@@ -5,6 +5,7 @@
 , cmake
 , double-conversion
 , fetchurl
+, fetchpatch
 , gettext
 , gdl
 , ghostscript
@@ -71,6 +72,13 @@ stdenv.mkDerivation rec {
       # e.g., those from the "Effects" menu.
       python3 = "${python3Env}/bin/python";
     })
+
+    # Fix build with glib 2.68
+    # https://gitlab.com/inkscape/inkscape/-/merge_requests/2790
+    (fetchpatch {
+      url = "https://gitlab.com/inkscape/inkscape/-/commit/eb24388f1730918edd9565d9e5d09340ec0b3b08.patch";
+      sha256 = "d2FHRWcOzi0Vsr6t0MuLu3rWpvhFKuuvoXd4/NKUSJI=";
+    })
   ];
 
   postPatch = ''
diff --git a/pkgs/applications/misc/font-manager/default.nix b/pkgs/applications/misc/font-manager/default.nix
index 766ec9a55d9c0..0c5afe6cb4efe 100644
--- a/pkgs/applications/misc/font-manager/default.nix
+++ b/pkgs/applications/misc/font-manager/default.nix
@@ -1,20 +1,61 @@
-{ lib, stdenv, fetchFromGitHub, meson, ninja, gettext, python3,
-  pkg-config, libxml2, json-glib , sqlite, itstool, yelp-tools,
-  vala, gtk3, gnome3, desktop-file-utils, wrapGAppsHook, gobject-introspection,
-  libsoup, webkitgtk
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, fetchpatch
+, ninja
+, gettext
+, python3
+, pkg-config
+, libxml2
+, json-glib
+, sqlite
+, itstool
+, yelp-tools
+, vala
+, gsettings-desktop-schemas
+, gtk3
+, gnome3
+, desktop-file-utils
+, wrapGAppsHook
+, gobject-introspection
+, libsoup
+, glib-networking
+, webkitgtk
 }:
 
 stdenv.mkDerivation rec {
   pname = "font-manager";
-  version = "0.8.5-1";
+  version = "0.8.6";
 
   src = fetchFromGitHub {
     owner = "FontManager";
     repo = "master";
     rev = version;
-    sha256 = "1p0hfnf06892hn25a6zv8fnhbh4ln11nn2fv1vjqs63rr59fprbk";
+    sha256 = "0a18rbdy9d0fj0vnsc2rm7xlh17vjqn4kdyrq0ldzlzkb6zbdk2k";
   };
 
+  patches = [
+    # Fix some Desktop Settings with GNOME 40.
+    # https://github.com/FontManager/font-manager/issues/215
+    (fetchpatch {
+      url = "https://github.com/FontManager/font-manager/commit/b28f325d7951a66ebf1a2a432ee09fd22048a033.patch";
+      sha256 = "dKbrXGb9a4JuG/4x9vprMlh5J17HKJFifRWq9BWp1ow=";
+    })
+    (fetchpatch {
+      url = "https://github.com/FontManager/font-manager/commit/2147204d4c4c6b58161230500186c3a5d4eeb1c1.patch";
+      sha256 = "2/PFLwf7h76fIIN4+lyjg/L0KVU1hhRQCfwCAGDpb00=";
+    })
+    (fetchpatch {
+      url = "https://github.com/FontManager/font-manager/commit/3abc541ef8606727c72af7631c021809600336ac.patch";
+      sha256 = "rJPnW+7uuFLxTf5tk+Rzo+xkw2+uzU6BkzPXLeR/RGc=";
+    })
+    (fetchpatch {
+      url = "https://github.com/FontManager/font-manager/commit/03a822f0d7b72442cd2ffcc8668da265d3535e0d.patch";
+      sha256 = "3Z2UqK5VV2bIwpGd1tA7fivd7ooIuV6CxTJhzgOAkIM=";
+    })
+  ];
+
   nativeBuildInputs = [
     pkg-config
     meson
@@ -34,12 +75,18 @@ stdenv.mkDerivation rec {
     libxml2
     json-glib
     sqlite
+    gsettings-desktop-schemas # for font settings
     gtk3
     gnome3.adwaita-icon-theme
     libsoup
+    glib-networking # for SSL so that Google Fonts can load
     webkitgtk
   ];
 
+  mesonFlags = [
+    "-Dreproducible=true" # Do not hardcode build directory…
+  ];
+
   postPatch = ''
     chmod +x meson_post_install.py
     patchShebangs meson_post_install.py
diff --git a/pkgs/applications/misc/gnome-multi-writer/default.nix b/pkgs/applications/misc/gnome-multi-writer/default.nix
index 89a967d718bf5..c97a492e1bdf3 100644
--- a/pkgs/applications/misc/gnome-multi-writer/default.nix
+++ b/pkgs/applications/misc/gnome-multi-writer/default.nix
@@ -19,11 +19,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-multi-writer";
-  version = "3.32.1";
+  version = "3.35.90";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1apdd8yi12zagf82k376a9wmdm27wzwdxpm2wf2pnwkaf786rmdw";
+    sha256 = "07vgzjjdrxcp7h73z13h9agafxb4vmqx5i81bcfyw0ilw9kkdzmp";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/misc/hello/default.nix b/pkgs/applications/misc/hello/default.nix
index a885b1643fe23..b446fe6223df1 100644
--- a/pkgs/applications/misc/hello/default.nix
+++ b/pkgs/applications/misc/hello/default.nix
@@ -1,4 +1,9 @@
-{ lib, stdenv, fetchurl }:
+{ lib
+, stdenv
+, fetchurl
+, testVersion
+, hello
+}:
 
 stdenv.mkDerivation rec {
   pname = "hello";
@@ -11,6 +16,9 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
+  passthru.tests.version =
+    testVersion { package = hello; };
+
   meta = with lib; {
     description = "A program that produces a familiar, friendly greeting";
     longDescription = ''
diff --git a/pkgs/applications/misc/kratos/default.nix b/pkgs/applications/misc/kratos/default.nix
new file mode 100644
index 0000000000000..7f7b89618eb82
--- /dev/null
+++ b/pkgs/applications/misc/kratos/default.nix
@@ -0,0 +1,42 @@
+{ fetchFromGitHub, buildGoModule, lib, stdenv }:
+
+buildGoModule rec {
+  pname = "kratos";
+  version = "0.6.0-alpha.1";
+
+  src = fetchFromGitHub {
+    owner = "ory";
+    repo = "kratos";
+    rev = "v${version}";
+    sha256 = "0lnrm7ma203b5a0vxgm9zqsbs3nigx0kng5zymrjvrzll1gd79wm";
+  };
+
+  vendorSha256 = "16qg44k97l6719hib8vbv0j15x6gvs9d6738d2y990a2qiqbsqpw";
+
+  subPackages = [ "." ];
+
+  buildFlags = [ "-tags sqlite" ];
+
+  doCheck = false;
+
+  preBuild = ''
+    # Patch shebangs
+    files=(
+       test/e2e/run.sh
+       script/testenv.sh
+       script/test-envs.sh
+       persistence/sql/migratest/update_fixtures.sh
+    )
+    patchShebangs "''${files[@]}"
+
+    # patchShebangs doesn't work for this Makefile, do it manually
+    substituteInPlace Makefile --replace '/bin/bash' '${stdenv.shell}'
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ mrmebelman ];
+    homepage = "https://www.ory.sh/kratos/";
+    license = licenses.asl20;
+    description = "An API-first Identity and User Management system that is built according to cloud architecture best practices";
+  };
+}
diff --git a/pkgs/applications/misc/orca/default.nix b/pkgs/applications/misc/orca/default.nix
index 72d68431b8c08..71bc4daad7718 100644
--- a/pkgs/applications/misc/orca/default.nix
+++ b/pkgs/applications/misc/orca/default.nix
@@ -35,13 +35,13 @@
 
 buildPythonApplication rec {
   pname = "orca";
-  version = "3.38.2";
+  version = "40.0";
 
   format = "other";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "UAX/LhHdH3E/WswZA6JwEZvFjDD9uMn4K8rHFJfGwjw=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0hq0zdcn80ficpcffbk667907v6m7dih3dhyc7ss01mrj3iyw000";
   };
 
   patches = [
diff --git a/pkgs/applications/misc/orca/fix-paths.patch b/pkgs/applications/misc/orca/fix-paths.patch
index ffb56dbe239c4..037b323c8cb1a 100644
--- a/pkgs/applications/misc/orca/fix-paths.patch
+++ b/pkgs/applications/misc/orca/fix-paths.patch
@@ -1,6 +1,8 @@
+diff --git a/src/orca/debug.py b/src/orca/debug.py
+index e79482ed4..cbf3a24ec 100644
 --- a/src/orca/debug.py
 +++ b/src/orca/debug.py
-@@ -474,7 +474,7 @@
+@@ -502,7 +502,7 @@ def traceit(frame, event, arg):
      return traceit
  
  def getOpenFDCount(pid):
@@ -9,7 +11,7 @@
      procs = procs.decode('UTF-8').split('\n')
      files = list(filter(lambda s: s and s[0] == 'f' and s[1:].isdigit(), procs))
  
-@@ -482,7 +482,7 @@
+@@ -510,7 +510,7 @@ def getOpenFDCount(pid):
  
  def getCmdline(pid):
      try:
@@ -18,7 +20,7 @@
          cmdline = openFile.read()
          openFile.close()
      except:
-@@ -492,7 +492,7 @@
+@@ -520,7 +520,7 @@ def getCmdline(pid):
      return cmdline
  
  def pidOf(procName):
@@ -27,9 +29,11 @@
                                  shell=True,
                                  stdout=subprocess.PIPE).stdout
      pids = openFile.read()
+diff --git a/src/orca/orca.py b/src/orca/orca.py
+index 2fe0a0bf2..087526556 100644
 --- a/src/orca/orca.py
 +++ b/src/orca/orca.py
-@@ -239,7 +239,7 @@
+@@ -285,7 +285,7 @@ def updateKeyMap(keyboardEvent):
  
  def _setXmodmap(xkbmap):
      """Set the keyboard map using xkbcomp."""
@@ -38,7 +42,7 @@
          stdin=subprocess.PIPE, stdout=None, stderr=None)
      p.communicate(xkbmap)
  
-@@ -297,7 +297,7 @@
+@@ -363,7 +363,7 @@ def _storeXmodmap(keyList):
      """
  
      global _originalXmodmap
@@ -47,7 +51,7 @@
  
  def _restoreXmodmap(keyList=[]):
      """Restore the original xmodmap values for the keys in keyList.
-@@ -309,7 +309,7 @@
+@@ -375,7 +375,7 @@ def _restoreXmodmap(keyList=[]):
  
      global _capsLockCleared
      _capsLockCleared = False
@@ -56,9 +60,11 @@
          stdin=subprocess.PIPE, stdout=None, stderr=None)
      p.communicate(_originalXmodmap)
  
+diff --git a/src/orca/orca_bin.py.in b/src/orca/orca_bin.py.in
+index 8c9d40153..eec0d5437 100644
 --- a/src/orca/orca_bin.py.in
 +++ b/src/orca/orca_bin.py.in
-@@ -59,7 +59,7 @@
+@@ -62,7 +62,7 @@ class ListApps(argparse.Action):
                  name = "[DEAD]"
  
              try:
@@ -67,12 +73,12 @@
              except:
                  cmdline = '(exception encountered)'
              else:
-@@ -192,7 +192,7 @@
+@@ -197,7 +197,7 @@ def inGraphicalDesktop():
  def otherOrcas():
      """Returns the pid of any other instances of Orca owned by this user."""
  
--    openFile = subprocess.Popen('pgrep -u %s orca' % os.getuid(),
-+    openFile = subprocess.Popen('@pgrep@ -u %s orca' % os.getuid(),
+-    openFile = subprocess.Popen('pgrep -u %s -x orca' % os.getuid(),
++    openFile = subprocess.Popen('@pgrep@ -u %s -x orca' % os.getuid(),
                                  shell=True,
                                  stdout=subprocess.PIPE).stdout
      pids = openFile.read()
diff --git a/pkgs/applications/networking/calls/default.nix b/pkgs/applications/networking/calls/default.nix
index 8937404e91d33..d17dd059c8101 100644
--- a/pkgs/applications/networking/calls/default.nix
+++ b/pkgs/applications/networking/calls/default.nix
@@ -17,6 +17,7 @@
 , desktop-file-utils
 , appstream-glib
 , libpeas
+, libgdata
 , dbus
 , vala
 , wrapGAppsHook
@@ -65,6 +66,7 @@ stdenv.mkDerivation rec {
     callaudiod
     gtk3
     libpeas
+    libgdata # required by some dependency transitively
   ];
 
   checkInputs = [
diff --git a/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix b/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
index 468d7f64c4cf3..fa314e82dac84 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, pidgin, intltool, libxml2, gmime, nss }:
+{ lib, stdenv, fetchurl, fetchpatch, pidgin, intltool, libxml2, gmime, nss }:
 
 stdenv.mkDerivation rec {
   pname = "pidgin-sipe";
@@ -9,6 +9,20 @@ stdenv.mkDerivation rec {
     sha256 = "0262sz00iqxylx0xfyr48xikhiqzr8pg7b4b7vwj5iv4qxpxv939";
   };
 
+  patches = [
+    # add sipe_utils_memdup() function
+    (fetchpatch {
+      url = "https://repo.or.cz/siplcs.git/patch/567d0ddc0692adfef5f15d0d383825a9b2ea4b49";
+      sha256 = "24L8ZfoOGc3JoTCGxuTNjuHzt5QgFDu1+vSoJpGvde4=";
+    })
+    # replace g_memdup() with sipe_utils_memdup()
+    # g_memdup is deprecatein newer Glib
+    (fetchpatch {
+      url = "https://repo.or.cz/siplcs.git/patch/583a734e63833f03d11798b7b0d59a17d08ae60f";
+      sha256 = "Ai6Czpy/FYvBi4GZR7yzch6OcouJgfreI9HcojhGVV4=";
+    })
+  ];
+
   nativeBuildInputs = [ intltool ];
   buildInputs = [ pidgin gmime libxml2 nss ];
   enableParallelBuilding = true;
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix b/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
index 3471795b435b2..3bf5b5075c66a 100644
--- a/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
@@ -3,11 +3,11 @@
 
 stdenv.mkDerivation rec {
   pname = "evolution-ews";
-  version = "3.38.3";
+  version = "3.40.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1s2jpviliazmhnpkh8dc57ga3c3612f2rnc0nfya5ndbi6lpzxhi";
+    sha256 = "1kgxdacqqcq8yfkij6vyqlk5r4yqvw7gh7mxqii670hrn1mb2s50";
   };
 
   nativeBuildInputs = [ cmake gettext intltool pkg-config ];
@@ -19,23 +19,17 @@ stdenv.mkDerivation rec {
     libmspack
   ];
 
-  # Building with libmspack as reccommended: https://wiki.gnome.org/Apps/Evolution/Building#Build_evolution-ews
   cmakeFlags = [
+    # Building with libmspack as recommended: https://wiki.gnome.org/Apps/Evolution/Building#Build_evolution-ews
     "-DWITH_MSPACK=ON"
+    # don't try to install into ${evolution}
+    "-DFORCE_INSTALL_PREFIX=ON"
   ];
 
-  PKG_CONFIG_EVOLUTION_SHELL_3_0_ERRORDIR = "${placeholder "out"}/share/evolution/errors";
-  PKG_CONFIG_EVOLUTION_SHELL_3_0_PRIVLIBDIR = "${placeholder "out"}/lib/evolution";
-  PKG_CONFIG_CAMEL_1_2_CAMEL_PROVIDERDIR = "${placeholder "out"}/lib/evolution-data-server/camel-providers";
-  PKG_CONFIG_LIBEDATA_BOOK_1_2_BACKENDDIR = "${placeholder "out"}/lib/evolution-data-server/addressbook-backends";
-  PKG_CONFIG_LIBEDATA_CAL_2_0_BACKENDDIR = "${placeholder "out"}/lib/evolution-data-server/calendar-backends";
-  PKG_CONFIG_LIBEBACKEND_1_2_MODULEDIR = "${placeholder "out"}/lib/evolution-data-server/registry-modules";
-  PKG_CONFIG_EVOLUTION_SHELL_3_0_MODULEDIR = "${placeholder "out"}/lib/evolution/modules";
-  PKG_CONFIG_EVOLUTION_DATA_SERVER_1_2_PRIVDATADIR = "${placeholder "out"}/share/evolution-data-server";
-
    passthru = {
     updateScript = gnome3.updateScript {
       packageName = "evolution-ews";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix b/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
index e17507366ffa8..e703f5d7401b2 100644
--- a/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
@@ -42,11 +42,11 @@
 
 stdenv.mkDerivation rec {
   pname = "evolution";
-  version = "3.38.4";
+  version = "3.40.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/evolution/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "NB+S0k4rRMJ4mwA38aiU/xZUh9qksAuA+uMTii4Fr9Q=";
+    sha256 = "07n4sbgsh0y9hrn52ymvy45ah65ll55gglgvqqi3h9nhkyy64y9g";
   };
 
   nativeBuildInputs = [
@@ -114,13 +114,10 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  patches = [
-    ./moduledir_from_env.patch
-  ];
-
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = "evolution";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch b/pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch
deleted file mode 100644
index 2a5edfb9a5a1b..0000000000000
--- a/pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/src/shell/main.c b/src/shell/main.c
-index 5d089225ca..030908d684 100644
---- a/src/shell/main.c
-+++ b/src/shell/main.c
-@@ -407,7 +407,15 @@ create_default_shell (void)
- 	}
-
- 	/* Load all shared library modules. */
--	module_types = e_module_load_all_in_directory (EVOLUTION_MODULEDIR);
-+	const gchar *modules_directory = EVOLUTION_MODULEDIR;
-+	const gchar *modules_directory_env;
-+
-+	modules_directory_env = g_getenv ("EVOLUTION_MODULEDIR");
-+	if (modules_directory_env &&
-+	    g_file_test (modules_directory_env, G_FILE_TEST_IS_DIR))
-+		modules_directory = g_strdup (modules_directory_env);
-+
-+	module_types = e_module_load_all_in_directory (modules_directory);
- 	g_list_free_full (module_types, (GDestroyNotify) g_type_module_unuse);
-
- 	flags = G_APPLICATION_HANDLES_OPEN |
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix b/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
index ea3f09b8f4c3d..cfbaa988c7124 100644
--- a/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
@@ -10,13 +10,7 @@ symlinkJoin {
     for i in $out/bin/* $out/libexec/**; do
     if [ ! -d $i ]; then
       echo wrapping $i
-      wrapProgram $i \
-        --set LD_LIBRARY_PATH "$out/lib" \
-        --set EDS_ADDRESS_BOOK_MODULES "$out/lib/evolution-data-server/addressbook-backends/" \
-        --set EDS_CALENDAR_MODULES "$out/lib/evolution-data-server/calendar-backends/" \
-        --set EDS_CAMEL_PROVIDER_DIR "$out/lib/evolution-data-server/camel-providers/" \
-        --set EDS_REGISTRY_MODULES "$out/lib/evolution-data-server/registry-modules/" \
-        --set EVOLUTION_MODULEDIR "$out/lib/evolution/modules"
+      wrapProgram $i --set EDS_EXTRA_PREFIXES "${lib.concatStringsSep ":" plugins}"
     fi
     done
 
diff --git a/pkgs/applications/networking/seaweedfs/default.nix b/pkgs/applications/networking/seaweedfs/default.nix
index 61f318009f727..86a3e48ae8ff8 100644
--- a/pkgs/applications/networking/seaweedfs/default.nix
+++ b/pkgs/applications/networking/seaweedfs/default.nix
@@ -1,7 +1,7 @@
 { lib
 , fetchFromGitHub
 , buildGoModule
-, runCommand
+, testVersion
 , seaweedfs
 }:
 
@@ -20,10 +20,8 @@ buildGoModule rec {
 
   subPackages = [ "weed" ];
 
-  passthru.tests.check-version = runCommand "weed-version" { meta.timeout = 3; } ''
-    ${seaweedfs}/bin/weed version | grep -Fw ${version}
-    touch $out
-  '';
+  passthru.tests.version =
+    testVersion { package = seaweedfs; command = "weed version"; };
 
   meta = with lib; {
     description = "Simple and highly scalable distributed file system";
diff --git a/pkgs/applications/office/elementary-planner/default.nix b/pkgs/applications/office/elementary-planner/default.nix
index 8633f1daecdc6..88a063158bd18 100644
--- a/pkgs/applications/office/elementary-planner/default.nix
+++ b/pkgs/applications/office/elementary-planner/default.nix
@@ -15,6 +15,7 @@
 , glib-networking
 , sqlite
 , libsoup
+, libgdata
 , gtk3
 , pantheon /* granite, icons, maintainers */
 , webkitgtk
@@ -56,6 +57,7 @@ stdenv.mkDerivation rec {
     pantheon.granite
     sqlite
     webkitgtk
+    libgdata # required by some dependency transitively
   ];
 
   postPatch = ''
diff --git a/pkgs/applications/office/gnucash/default.nix b/pkgs/applications/office/gnucash/default.nix
index 959aa30c0371a..d2251da700738 100644
--- a/pkgs/applications/office/gnucash/default.nix
+++ b/pkgs/applications/office/gnucash/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, lib, stdenv, pkg-config, makeWrapper, cmake, gtest
+{ fetchurl, fetchpatch, lib, stdenv, pkg-config, makeWrapper, cmake, gtest
 , boost, icu, libxml2, libxslt, gettext, swig, isocodes, gtk3, glibcLocales
 , webkitgtk, dconf, hicolor-icon-theme, libofx, aqbanking, gwenhywfar, libdbi
 , libdbiDrivers, guile, perl, perlPackages
@@ -25,13 +25,21 @@ in
 
 stdenv.mkDerivation rec {
   pname = "gnucash";
-  version = "4.4";
+  version = "4.5";
 
   src = fetchurl {
     url = "mirror://sourceforge/gnucash/${pname}-${version}.tar.bz2";
-    sha256 = "sha256-2R4NEmtGHXHeG8GyDZzxQnBDU97AfT5lmdE4QidZ5no=";
+    sha256 = "sha256-vB9IqEU0iKLp9rg7aGE6pVyuvk0pg0YL2sfghLRs/9w=";
   };
 
+  patches = [
+    # Fix build with GLib 2.68.
+    (fetchpatch {
+      url = "https://github.com/Gnucash/gnucash/commit/bbb4113a5a996dcd7bb3494e0be900b275b49a4f.patch";
+      sha256 = "Pnvwoq5zutFw7ByduEEANiLM2J50WiXpm2aZ8B2MDMQ=";
+    })
+  ];
+
   nativeBuildInputs = [ pkg-config makeWrapper cmake gtest ];
 
   buildInputs = [
diff --git a/pkgs/applications/office/gnumeric/default.nix b/pkgs/applications/office/gnumeric/default.nix
index 263a555ab4c1a..f65781352b3f3 100644
--- a/pkgs/applications/office/gnumeric/default.nix
+++ b/pkgs/applications/office/gnumeric/default.nix
@@ -29,6 +29,7 @@ in stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/applications/science/logic/key/default.nix b/pkgs/applications/science/logic/key/default.nix
index 531081beafaf3..e9b0cc7540b59 100644
--- a/pkgs/applications/science/logic/key/default.nix
+++ b/pkgs/applications/science/logic/key/default.nix
@@ -5,7 +5,7 @@
 , ant
 , jre
 , makeWrapper
-, runCommand
+, testVersion
 , key
 }:
 
@@ -51,10 +51,13 @@ in stdenv.mkDerivation rec {
       --add-flags "-cp $out/share/java/KeY.jar de.uka.ilkd.key.core.Main"
   '';
 
-  passthru.tests.check-version = runCommand "key-help" {} ''
-    ${key}/bin/KeY --help | grep 2.5 # Wrong version in the code. On next version change to ${version}
-    touch $out
-  '';
+  passthru.tests.version =
+    testVersion {
+      package = key;
+      command = "KeY --help";
+      # Wrong '2.5' version in the code. On next version change to ${version}
+      version = "2.5";
+    };
 
   meta = with lib; {
     description = "Java formal verification tool";
diff --git a/pkgs/applications/version-management/meld/default.nix b/pkgs/applications/version-management/meld/default.nix
index 89e3a5ea0b53c..95a9f2d724244 100644
--- a/pkgs/applications/version-management/meld/default.nix
+++ b/pkgs/applications/version-management/meld/default.nix
@@ -59,6 +59,7 @@ python3.pkgs.buildPythonApplication rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/applications/video/pitivi/default.nix b/pkgs/applications/video/pitivi/default.nix
index 45c96fb180d3b..b9707e7c24937 100644
--- a/pkgs/applications/video/pitivi/default.nix
+++ b/pkgs/applications/video/pitivi/default.nix
@@ -21,13 +21,13 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "pitivi";
-  version = "2020.09.2";
+  version = "2021.01";
 
   format = "other";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/pitivi/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0hzvv4wia4rk0kvq16y27imq2qd4q5lg3vx99hdcjdb1x3zqqfg0";
+    url = "mirror://gnome/sources/pitivi/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0krzsrv19v3mwhbsm72ica6m3p8ijy0lbd0c3s87yd7pmbwld2c1";
   };
 
   patches = [
diff --git a/pkgs/build-support/emacs/wrapper.nix b/pkgs/build-support/emacs/wrapper.nix
index fcbf5bcabe6d0..571d0eb687ce5 100644
--- a/pkgs/build-support/emacs/wrapper.nix
+++ b/pkgs/build-support/emacs/wrapper.nix
@@ -159,7 +159,7 @@ runCommand
         (add-to-list 'load-path "$out/share/emacs/site-lisp")
         (add-to-list 'exec-path "$out/bin")
         ${optionalString nativeComp ''
-          (add-to-list 'comp-eln-load-path "$out/share/emacs/native-lisp/")
+          (add-to-list 'native-comp-eln-load-path "$out/share/emacs/native-lisp/")
         ''}
         EOF
         # Link subdirs.el from the emacs distribution
@@ -170,7 +170,7 @@ runCommand
 
         ${optionalString nativeComp ''
           $emacs/bin/emacs --batch \
-            --eval "(add-to-list 'comp-eln-load-path \"$out/share/emacs/native-lisp/\")" \
+            --eval "(add-to-list 'native-comp-eln-load-path \"$out/share/emacs/native-lisp/\")" \
             -f batch-native-compile "$siteStart" "$subdirs"
         ''}
       '';
diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix
index 4995efd9a4bfc..142a04f9a10c4 100644
--- a/pkgs/build-support/trivial-builders.nix
+++ b/pkgs/build-support/trivial-builders.nix
@@ -541,4 +541,37 @@ rec {
       phases = "unpackPhase patchPhase installPhase";
       installPhase = "cp -R ./ $out";
     };
+
+  /* Checks the command output contains the specified version
+   *
+   * Although simplistic, this test assures that the main program
+   * can run. While there's no substitute for a real test case,
+   * it does catch dynamic linking errors and such. It also provides
+   * some protection against accidentally building the wrong version,
+   * for example when using an 'old' hash in a fixed-output derivation.
+   *
+   * Examples:
+   *
+   * passthru.tests.version = testVersion { package = hello; };
+   *
+   * passthru.tests.version = testVersion {
+   *   package = seaweedfs;
+   *   command = "weed version";
+   * };
+   *
+   * passthru.tests.version = testVersion {
+   *   package = key;
+   *   command = "KeY --help";
+   *   # Wrong '2.5' version in the code. Drop on next version.
+   *   version = "2.5";
+   * };
+   */
+  testVersion =
+    { package,
+      command ? "${package.meta.mainProgram or package.pname or package.name} --version",
+      version ? package.version,
+    }: runCommand "test-version" { nativeBuildInputs = [ package ]; meta.timeout = 60; } ''
+      ${command} | grep -Fw ${version}
+      touch $out
+    '';
 }
diff --git a/pkgs/data/documentation/gnome-user-docs/default.nix b/pkgs/data/documentation/gnome-user-docs/default.nix
index 6e21220918725..39fe4235f1355 100644
--- a/pkgs/data/documentation/gnome-user-docs/default.nix
+++ b/pkgs/data/documentation/gnome-user-docs/default.nix
@@ -9,11 +9,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-user-docs";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-user-docs/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1h9lyn80zccmgi6gpymabgrcj7km0sb1axll5z490qnx74xbn37m";
+    url = "mirror://gnome/sources/gnome-user-docs/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "09ld9r29nz64s04fmp3b2wwldmfnwxp4w36dkh7mbz5pdd3z7fwk";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/data/fonts/cantarell-fonts/default.nix b/pkgs/data/fonts/cantarell-fonts/default.nix
index 5129cf2718866..dc0b8cc23eb65 100644
--- a/pkgs/data/fonts/cantarell-fonts/default.nix
+++ b/pkgs/data/fonts/cantarell-fonts/default.nix
@@ -1,14 +1,12 @@
 { lib, stdenv, fetchurl, meson, ninja, gettext, appstream-glib, gnome3 }:
 
-let
+stdenv.mkDerivation rec {
   pname = "cantarell-fonts";
-  version = "0.111";
-in stdenv.mkDerivation rec {
-  name = "${pname}-${version}";
+  version = "0.301";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "05hpnhihwm9sxlq1qn993g03pwkmpjbn0dvnba71r1gfjv0jp2w5";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "3d35db0ac03f9e6b0d5a53577591b714238985f4cfc31a0aa17f26cd74675e83";
   };
 
   nativeBuildInputs = [ meson ninja gettext appstream-glib ];
@@ -21,7 +19,7 @@ in stdenv.mkDerivation rec {
 
   outputHashAlgo = "sha256";
   outputHashMode = "recursive";
-  outputHash = "12ps2gjv1lmzbmkv16vgjmaahl3ayadpniyrx0z31sqn443r57hq";
+  outputHash = "1sczskw2kv3qy39i9mzw2lkl94a90bjgv5ln9acy5kh4gb2zmy7z";
 
   passthru = {
     updateScript = gnome3.updateScript {
diff --git a/pkgs/data/misc/mobile-broadband-provider-info/default.nix b/pkgs/data/misc/mobile-broadband-provider-info/default.nix
index f487edba98156..fba9580107aea 100644
--- a/pkgs/data/misc/mobile-broadband-provider-info/default.nix
+++ b/pkgs/data/misc/mobile-broadband-provider-info/default.nix
@@ -1,14 +1,19 @@
-{ lib, stdenv, fetchurl, gnome3 }:
+{ lib, stdenv, fetchurl, gnome3, libxslt }:
 
 stdenv.mkDerivation rec {
   pname = "mobile-broadband-provider-info";
-  version = "20190116";
+  version = "20201225";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${version}/${pname}-${version}.tar.xz";
-    sha256 = "16y5lc7pfdvai9c8xwb825zc3v46039gghbip13fqslf5gw11fic";
+    sha256 = "1g9x2i4xjm2sagaha07n9psacbylrwfrmfqkp17gjwhpyi6w0zqd";
   };
 
+  nativeBuildInputs = [
+    # fixes configure: error: xsltproc not found
+    libxslt
+  ];
+
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
diff --git a/pkgs/desktops/gnome-3/apps/accerciser/default.nix b/pkgs/desktops/gnome-3/apps/accerciser/default.nix
index 2f8163adc7289..e634037b87194 100644
--- a/pkgs/desktops/gnome-3/apps/accerciser/default.nix
+++ b/pkgs/desktops/gnome-3/apps/accerciser/default.nix
@@ -60,6 +60,7 @@ python3.pkgs.buildPythonApplication rec {
     updateScript = gnome3.updateScript {
       packageName = "accerciser";
       attrPath = "gnome3.accerciser";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/apps/cheese/default.nix b/pkgs/desktops/gnome-3/apps/cheese/default.nix
index 04c6b31563cd4..75c3060f51dff 100644
--- a/pkgs/desktops/gnome-3/apps/cheese/default.nix
+++ b/pkgs/desktops/gnome-3/apps/cheese/default.nix
@@ -1,6 +1,8 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , gettext
 , fetchurl
+, fetchpatch
 , wrapGAppsHook
 , gnome-video-effects
 , libcanberra-gtk3
@@ -9,17 +11,13 @@
 , glib
 , clutter-gtk
 , clutter-gst
-, udev
 , gst_all_1
 , itstool
-, libgudev
 , vala
 , docbook_xml_dtd_43
-, docbook_xsl
+, docbook-xsl-nons
 , appstream-glib
 , libxslt
-, yelp-tools
-, gnome-common
 , gtk-doc
 , adwaita-icon-theme
 , librsvg
@@ -38,37 +36,37 @@ stdenv.mkDerivation rec {
   pname = "cheese";
   version = "3.38.0";
 
+  outputs = [ "out" "man" "devdoc" ];
+
   src = fetchurl {
     url = "mirror://gnome/sources/cheese/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "0vyim2avlgq3a48rgdfz5g21kqk11mfb53b2l883340v88mp7ll8";
   };
 
-  postPatch = ''
-    chmod +x meson_post_install.py
-    patchShebangs meson_post_install.py
-  '';
-
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = "cheese"; attrPath = "gnome3.cheese"; };
-  };
+  patches = [
+    # Fix build with latest Vala or GLib
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/cheese/commit/7cf6268e54620bbbe5e6e61800c50fb0cb4bea57.patch";
+      sha256 = "WJgGNrpZLTahe7Sxr8HdTl+4Mf4VcmJb6DdiInlDcT4=";
+    })
+  ];
 
   nativeBuildInputs = [
     appstream-glib
     docbook_xml_dtd_43
-    docbook_xsl
+    docbook-xsl-nons
     gettext
-    gnome-common
     gtk-doc
     itstool
     libxml2
-    libxslt
+    libxslt # for xsltproc
     meson
     ninja
     pkg-config
     python3
     vala
     wrapGAppsHook
-    yelp-tools
+    glib # for glib-compile-schemas
   ];
 
   buildInputs = [
@@ -86,12 +84,13 @@ stdenv.mkDerivation rec {
     gst_all_1.gstreamer
     gtk3
     libcanberra-gtk3
-    libgudev
     librsvg
-    udev
   ];
 
-  outputs = [ "out" "man" "devdoc" ];
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
 
   preFixup = ''
     gappsWrapperArgs+=(
@@ -105,13 +104,18 @@ stdenv.mkDerivation rec {
     )
   '';
 
-  enableParallelBuilding = true;
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "cheese";
+      attrPath = "gnome3.cheese";
+    };
+  };
 
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Apps/Cheese";
     description = "Take photos and videos with your webcam, with fun graphical effects";
     maintainers = teams.gnome.members;
-    license = licenses.gpl3;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/apps/file-roller/default.nix b/pkgs/desktops/gnome-3/apps/file-roller/default.nix
index 02801cd5a78e7..c6a2a3a640094 100644
--- a/pkgs/desktops/gnome-3/apps/file-roller/default.nix
+++ b/pkgs/desktops/gnome-3/apps/file-roller/default.nix
@@ -1,20 +1,21 @@
 { lib, stdenv, fetchurl, glib, gtk3, meson, ninja, pkg-config, gnome3, gettext, itstool, libxml2, libarchive
-, file, json-glib, python3, wrapGAppsHook, desktop-file-utils, libnotify, nautilus, glibcLocales }:
+, file, json-glib, python3, wrapGAppsHook, desktop-file-utils, libnotify, nautilus, glibcLocales
+, unzip, cpio }:
 
 stdenv.mkDerivation rec {
   pname = "file-roller";
-  version = "3.38.1";
+  version = "3.40.0";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0mxwdbfqizakxq65fa8zlvjf48v5f44lv8ckjw8sl8fk2871784l";
+    sha256 = "039w1dcpa5ypmv6sm634alk9vbcdkyvy595vkh5gn032jsiqca2a";
   };
 
   LANG = "en_US.UTF-8"; # postinstall.py
 
   nativeBuildInputs = [ meson ninja gettext itstool pkg-config libxml2 python3 wrapGAppsHook glibcLocales desktop-file-utils ];
 
-  buildInputs = [ glib gtk3 json-glib libarchive file gnome3.adwaita-icon-theme libnotify nautilus ];
+  buildInputs = [ glib gtk3 json-glib libarchive file gnome3.adwaita-icon-theme libnotify nautilus cpio ];
 
   PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
 
@@ -24,6 +25,12 @@ stdenv.mkDerivation rec {
     patchShebangs data/set-mime-type-entry.py
   '';
 
+  postFixup = ''
+    # Workaround because of https://gitlab.gnome.org/GNOME/file-roller/issues/40
+    wrapProgram "$out/bin/file-roller" \
+      --prefix PATH : ${lib.makeBinPath [ unzip ]}
+  '';
+
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = "file-roller";
diff --git a/pkgs/desktops/gnome-3/apps/gedit/default.nix b/pkgs/desktops/gnome-3/apps/gedit/default.nix
index 79d31c3b8c70e..1458d509e61d8 100644
--- a/pkgs/desktops/gnome-3/apps/gedit/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gedit/default.nix
@@ -23,11 +23,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gedit";
-  version = "3.38.1";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gedit/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0kc48a399achcz6vlqq0jk0b8ixbrzyv9xb22s5av76m5hyqalq0";
+    url = "mirror://gnome/sources/gedit/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "149ngl9qw6h59546lir1pa7hvw23ppsnqlj9mfqphmmn5jl99qsm";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/apps/gnome-books/default.nix b/pkgs/desktops/gnome-3/apps/gnome-books/default.nix
index bff7c5fb281cf..2b0aedc9e3e7a 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-books/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-books/default.nix
@@ -18,7 +18,7 @@
 , gdk-pixbuf
 , gsettings-desktop-schemas
 , adwaita-icon-theme
-, docbook_xsl
+, docbook-xsl-nons
 , docbook_xml_dtd_42
 , desktop-file-utils
 , python3
@@ -28,11 +28,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-books";
-  version = "3.34.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "153vknqisjn5f105avzm933fsc3v0pjzzbwxlqxf8vjjksh1cmya";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0c41l8m2di8h39bmk2fnhpwglwp6qhljmwqqbihzp4ay9976zrc5";
   };
 
   nativeBuildInputs = [
@@ -42,7 +42,7 @@ stdenv.mkDerivation rec {
     gettext
     libxslt
     desktop-file-utils
-    docbook_xsl
+    docbook-xsl-nons
     docbook_xml_dtd_42
     wrapGAppsHook
     python3
@@ -77,7 +77,6 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    broken = true; # Tracker 3 not supported and it cannot start Tracker 2.
     homepage = "https://wiki.gnome.org/Apps/Books";
     description = "An e-book manager application for GNOME";
     maintainers = teams.gnome.members;
diff --git a/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix b/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
index 302fb7f8127c1..779bfe6886d89 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-boxes/default.nix
@@ -19,7 +19,7 @@
 , python3
 , appstream-glib
 , spice-protocol
-, libhandy_0
+, libhandy
 , libsoup
 , libosinfo
 , systemd
@@ -53,11 +53,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-boxes";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1zjvng0izbws3506998l3dwsxjbm7wnhqipb8nmqzvi096czvajl";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "seKPLH+3a/T7uGLQ1S6BG5TL6f8W8GdAiWRWhpCILvg=";
   };
 
   doCheck = true;
@@ -99,7 +99,7 @@ stdenv.mkDerivation rec {
     libcap
     libcap_ng
     libgudev
-    libhandy_0
+    libhandy
     libosinfo
     librsvg
     libsecret
@@ -138,7 +138,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Simple GNOME 3 application to access remote or virtual systems";
     homepage = "https://wiki.gnome.org/Apps/Boxes";
-    license = licenses.gpl3;
+    license = licenses.lgpl2Plus;
     platforms = platforms.linux;
     maintainers = teams.gnome.members;
   };
diff --git a/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix b/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
index e15125a00bf29..fae4149a13107 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-calendar/default.nix
@@ -1,6 +1,5 @@
 { lib, stdenv
 , fetchurl
-, fetchpatch
 , meson
 , ninja
 , pkg-config
@@ -25,25 +24,17 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-calendar";
-  version = "3.38.2";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0SG7NLCLbqYB9du6Q6SxYTpuVJP8Cx4uzJDGZnEakS0=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0d74hng9jdmwdcjgj4xfrcink2gwkbp1k1mad4wanaf7q31c6f38";
   };
 
   patches = [
-    # Port to libhandy-1
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-calendar/-/commit/8be361b6ce8f0f8053e1609decbdbdc164ec8448.patch";
-      sha256 = "Ue0pWwcbYyCZPHPPoR0dXW5n948/AZ3wVDMTIZDOnyE=";
-    })
-
     # https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/84
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/84.patch";
-      sha256 = "czG3uIHl3tBnjDUvCOPm8IRp2o7yZYCb0/jWtv3uzIY=";
-    })
+    # A refactor has caused the PR patch to drift enough to need rebasing
+    ./gtk_image_reset_crash.patch
   ];
 
   passthru = {
diff --git a/pkgs/desktops/gnome-3/apps/gnome-calendar/gtk_image_reset_crash.patch b/pkgs/desktops/gnome-3/apps/gnome-calendar/gtk_image_reset_crash.patch
new file mode 100644
index 0000000000000..5065295b57b77
--- /dev/null
+++ b/pkgs/desktops/gnome-3/apps/gnome-calendar/gtk_image_reset_crash.patch
@@ -0,0 +1,17 @@
+diff --git a/src/gui/views/gcal-year-view.c b/src/gui/views/gcal-year-view.c
+index ac32a8f9..532425c1 100644
+--- a/src/gui/views/gcal-year-view.c
++++ b/src/gui/views/gcal-year-view.c
+@@ -2158,7 +2158,11 @@ update_weather (GcalYearView *self)
+   if (!updated)
+     {
+       gtk_label_set_text (self->temp_label, "");
+-      gtk_image_clear (self->weather_icon);
++      /* FIXME: This should never be NULL, but it somehow is.
++       * https://gitlab.gnome.org/GNOME/gnome-calendar/issues/299
++       */
++      if (self->weather_icon != NULL)
++        gtk_image_clear (self->weather_icon);
+     }
+ }
+ 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix b/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
index 3a65be9440e50..b5abee2838099 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
 , meson
 , ninja
@@ -13,6 +14,7 @@
 , gobject-introspection
 , gjs
 , libunistring
+, libhandy
 , gsettings-desktop-schemas
 , adwaita-icon-theme
 , gnome-desktop
@@ -20,11 +22,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-characters";
-  version = "3.34.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-characters/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0mqaxsa7hcmvid3zbzvxpfkp7s01ghiq6kaibmd3169axrr8ahql";
+    url = "mirror://gnome/sources/gnome-characters/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0z2xa4w921bzpzj6gv88pvbrijcnnwni6jxynwz0ybaravyzaqha";
   };
 
   nativeBuildInputs = [
@@ -46,6 +48,7 @@ stdenv.mkDerivation rec {
     gsettings-desktop-schemas
     gtk3
     libunistring
+    libhandy
     pango
   ];
 
@@ -76,10 +79,10 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    homepage = "https://wiki.gnome.org/Design/Apps/CharacterMap";
+    homepage = "https://wiki.gnome.org/Apps/Characters";
     description = "Simple utility application to find and insert unusual characters";
     maintainers = teams.gnome.members;
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix b/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
index a2caaf068eb75..cd91cef668714 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-clocks/default.nix
@@ -27,11 +27,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-clocks";
-  version = "3.38.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-clocks/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0f24g76ax59qnms1rjfyf1i0sa84nadgbr0r6m26p90w1w2wnmnr";
+    url = "mirror://gnome/sources/gnome-clocks/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "02d3jg46sn8d9gd4dsaly22gg5vkbz2gpq4pmwpvncb4rsqk7sn2";
   };
 
   nativeBuildInputs = [
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
deleted file mode 100644
index 82c40fc429d55..0000000000000
--- a/pkgs/desktops/gnome-3/apps/gnome-getting-started-docs/default.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ lib, stdenv, fetchurl, gnome3, intltool, itstool, libxml2 }:
-
-stdenv.mkDerivation rec {
-  pname = "gnome-getting-started-docs";
-  version = "3.38.1";
-
-  src = fetchurl {
-    url = "mirror://gnome/sources/gnome-getting-started-docs/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "EPviPyw85CdTmk4wekYWlNOHCyMgBGT3BbfYGvmTyFk=";
-  };
-
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = "gnome-getting-started-docs"; attrPath = "gnome3.gnome-getting-started-docs"; };
-  };
-
-  buildInputs = [ intltool itstool libxml2 ];
-
-  meta = with lib; {
-    homepage = "https://live.gnome.org/DocumentationProject";
-    description = "Help a new user get started in GNOME";
-    maintainers = teams.gnome.members;
-    license = licenses.cc-by-sa-30;
-    platforms = platforms.linux;
-  };
-}
diff --git a/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix b/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
index f0a80bc525ada..673013c8e600b 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-maps/default.nix
@@ -29,11 +29,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-maps";
-  version = "3.38.4";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-1WQekf/kePsqqcpIliJczxjsLqTZjjV2UXmBin2+RKM=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-mAXUwFs6NpV0bTdisoFr/+bZ19VuF7y7nZ1B3C0CYxo=";
   };
 
   doCheck = true;
@@ -82,6 +82,11 @@ stdenv.mkDerivation rec {
                   "Exec=$out/bin/gnome-maps"
   '';
 
+  preCheck = ''
+    # “time.js” included by “timeTest” and “translationsTest” depends on “org.gnome.desktop.interface” schema.
+    export XDG_DATA_DIRS="${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:$XDG_DATA_DIRS"
+  '';
+
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
diff --git a/pkgs/desktops/gnome-3/apps/gnome-music/default.nix b/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
index be456071e41d5..b50ce59980f51 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-music/default.nix
@@ -30,13 +30,13 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "gnome-music";
-  version = "3.38.2";
+  version = "40.0";
 
   format = "other";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0c2051wngf3jrifl5bv5kyqcci459n62vixxkryiryjcaqwbd1am";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1djqhd4jccvk352hwxjhiwjgbnv1qnpv450f2c6w6581vcn9pq38";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix b/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
index c6d4a30ab0a72..afeddd1bb9917 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-notes/default.nix
@@ -12,10 +12,11 @@
 , gtk3
 , evolution-data-server
 , gnome-online-accounts
+, json-glib
 , libuuid
-, libhandy_0
+, curl
+, libhandy
 , webkitgtk
-, zeitgeist
 , gnome3
 , libxml2
 , gsettings-desktop-schemas
@@ -24,11 +25,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-notes";
-  version = "3.38.0";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/bijiben/${lib.versions.majorMinor version}/bijiben-${version}.tar.xz";
-    sha256 = "H/bMCsbGKQe/KgmhchXt0vF7dNrKs6XIminDBJFyvis=";
+    url = "mirror://gnome/sources/bijiben/${lib.versions.major version}/bijiben-${version}.tar.xz";
+    sha256 = "1gvvb2klkzbmyzwkjgmscdiqcl8lyz9b0rxb4igjz079csq6z805";
   };
 
   doCheck = true;
@@ -53,19 +54,19 @@ stdenv.mkDerivation rec {
   buildInputs = [
     glib
     gtk3
+    json-glib
     libuuid
-    libhandy_0 # doesn't support libhandy-1 yet
+    curl
+    libhandy
     webkitgtk
     tracker
     gnome-online-accounts
-    zeitgeist
     gsettings-desktop-schemas
     evolution-data-server
     gnome3.adwaita-icon-theme
   ];
 
   mesonFlags = [
-    "-Dzeitgeist=true"
     "-Dupdate_mimedb=false"
   ];
 
diff --git a/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix b/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix
index 6cc5c2ab78330..3b34fae714cc2 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-sound-recorder/default.nix
@@ -19,11 +19,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-sound-recorder";
-  version = "3.38.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "2Z6k+WPsEInpzVl6fUQ5ihHs7xMeQUInGhyQwVuqRSE=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "00b55vsfzx877b7mj744abzjws7zclz71wbvh0axsrbl9l84ranl";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix b/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
index 9a5079dfc6437..6cbfea0f5cf37 100644
--- a/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
+++ b/pkgs/desktops/gnome-3/apps/gnome-weather/default.nix
@@ -1,19 +1,49 @@
-{ lib, stdenv, fetchurl, pkg-config, gnome3, gtk3, wrapGAppsHook, gjs, gobject-introspection
-, libgweather, meson, ninja, geoclue2, gnome-desktop, python3, gsettings-desktop-schemas }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, gnome3
+, gtk3
+, libhandy
+, wrapGAppsHook
+, gjs
+, gobject-introspection
+, libgweather
+, meson
+, ninja
+, geoclue2
+, gnome-desktop
+, python3
+, gsettings-desktop-schemas
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-weather";
-  version = "3.36.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-weather/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "11z75ky6xp9hx7lm24xng7ydr20bzh4d6p9sbi9c8ccz2m3fdrk8";
+    url = "mirror://gnome/sources/gnome-weather/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1vxfcvga5waangq3rzwdrdxyy5sw40vv0l463lc651s0n8xafd9a";
   };
 
-  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook python3 ];
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    wrapGAppsHook
+    python3
+  ];
+
   buildInputs = [
-    gtk3 gjs gobject-introspection gnome-desktop
-    libgweather gnome3.adwaita-icon-theme geoclue2 gsettings-desktop-schemas
+    gtk3
+    libhandy
+    gjs
+    gobject-introspection
+    gnome-desktop
+    libgweather
+    gnome3.adwaita-icon-theme
+    geoclue2
+    gsettings-desktop-schemas
   ];
 
   postPatch = ''
diff --git a/pkgs/desktops/gnome-3/apps/seahorse/default.nix b/pkgs/desktops/gnome-3/apps/seahorse/default.nix
index 60ec6792e5dd7..e44f094be1bf4 100644
--- a/pkgs/desktops/gnome-3/apps/seahorse/default.nix
+++ b/pkgs/desktops/gnome-3/apps/seahorse/default.nix
@@ -26,11 +26,11 @@
 
 stdenv.mkDerivation rec {
   pname = "seahorse";
-  version = "3.38.0.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    hash = "sha256-x0XdHebhog8ZorB6Q4uO98yiNaaqc0ENt/E3sCHpsqI=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    hash = "sha256-fscFezhousbqBB/aghQKOfXsnlsYi0UJFNRTvC1V0Cw=";
   };
 
   doCheck = true;
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 a1be29b01830a..ceffe2f012b4c 100644
--- a/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
+++ b/pkgs/desktops/gnome-3/core/adwaita-icon-theme/default.nix
@@ -3,11 +3,11 @@
 
 stdenv.mkDerivation rec {
   pname = "adwaita-icon-theme";
-  version = "3.38.0";
+  version = "40.1.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/adwaita-icon-theme/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "15xgz9wzk07442x3s3052as95g0223z4pp9qlsgcs323yama30v6";
+    url = "mirror://gnome/sources/adwaita-icon-theme/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "C2xDbtatmIeoitofcqAZex63OwINjTRKurTH+nJQ+PY=";
   };
 
   # For convenience, we can specify adwaita-icon-theme only in packages
diff --git a/pkgs/desktops/gnome-3/core/baobab/default.nix b/pkgs/desktops/gnome-3/core/baobab/default.nix
index 81faf79cbb691..386502a854b88 100644
--- a/pkgs/desktops/gnome-3/core/baobab/default.nix
+++ b/pkgs/desktops/gnome-3/core/baobab/default.nix
@@ -1,20 +1,50 @@
-{ lib, stdenv, gettext, fetchurl, vala, desktop-file-utils
-, meson, ninja, pkg-config, python3, gtk3, glib, libxml2
-, wrapGAppsHook, itstool, gnome3 }:
+{ stdenv
+, lib
+, gettext
+, fetchurl
+, vala
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, python3
+, gtk3
+, libhandy
+, glib
+, libxml2
+, wrapGAppsHook
+, itstool
+, gnome3
+}:
 
-let
+stdenv.mkDerivation rec {
   pname = "baobab";
-  version = "3.38.0";
-in stdenv.mkDerivation rec {
-  name = "${pname}-${version}";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "0ac3fbl15l836yvgw724q4whbkws9v4b6l2xy6bnp0b0g0a6i104";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "19yii3bdgivxrcka1c4g6dpbmql5nyawwhzlsph7z6bs68nambm6";
   };
 
-  nativeBuildInputs = [ meson ninja pkg-config vala gettext itstool libxml2 desktop-file-utils wrapGAppsHook python3 ];
-  buildInputs = [ gtk3 glib gnome3.adwaita-icon-theme ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    vala
+    gettext
+    itstool
+    libxml2
+    desktop-file-utils
+    wrapGAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    gtk3
+    libhandy
+    glib
+    gnome3.adwaita-icon-theme
+  ];
 
   doCheck = true;
 
@@ -27,7 +57,7 @@ in stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Graphical application to analyse disk usage in any GNOME environment";
     homepage = "https://wiki.gnome.org/Apps/DiskUsageAnalyzer";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = teams.gnome.members;
     platforms = platforms.linux;
   };
diff --git a/pkgs/desktops/gnome-3/core/dconf-editor/default.nix b/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
index 1374cfc9358af..aab9a0db42b63 100644
--- a/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
+++ b/pkgs/desktops/gnome-3/core/dconf-editor/default.nix
@@ -1,21 +1,51 @@
-{ lib, stdenv, fetchurl, meson, ninja, vala, libxslt, pkg-config, glib, gtk3, gnome3, python3, dconf
-, libxml2, gettext, docbook_xsl, wrapGAppsHook, gobject-introspection }:
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, vala
+, libxslt
+, pkg-config
+, glib
+, gtk3
+, gnome3
+, python3
+, dconf
+, libxml2
+, gettext
+, docbook-xsl-nons
+, wrapGAppsHook
+, gobject-introspection
+}:
 
 stdenv.mkDerivation rec {
   pname = "dconf-editor";
-  version = "3.38.2";
+  version = "3.38.3";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-ElPa2H5iE/vzE/+eydxDWKobECYfKAcsHcDgmXuS+DU=";
+    sha256 = "sha256-Vxr0x9rU8Em1PmzXKLea3fCMJ92ra8V7OW0hGGbueeM=";
   };
 
   nativeBuildInputs = [
-    meson ninja vala libxslt pkg-config wrapGAppsHook
-    gettext docbook_xsl libxml2 gobject-introspection python3
+    meson
+    ninja
+    vala
+    libxslt
+    pkg-config
+    wrapGAppsHook
+    gettext
+    docbook-xsl-nons
+    libxml2
+    gobject-introspection
+    python3
   ];
 
-  buildInputs = [ glib gtk3 dconf ];
+  buildInputs = [
+    glib
+    gtk3
+    dconf
+  ];
 
   postPatch = ''
     chmod +x meson_post_install.py
@@ -30,7 +60,10 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    platforms = platforms.linux;
+    description = "GSettings editor for GNOME";
+    homepage = "https://wiki.gnome.org/Apps/DconfEditor";
+    license = licenses.gpl3Plus;
     maintainers = teams.gnome.members;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/core/eog/default.nix b/pkgs/desktops/gnome-3/core/eog/default.nix
index cec0ac7a6815c..671a664567481 100644
--- a/pkgs/desktops/gnome-3/core/eog/default.nix
+++ b/pkgs/desktops/gnome-3/core/eog/default.nix
@@ -28,11 +28,11 @@
 
 stdenv.mkDerivation rec {
   pname = "eog";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-ilT9+T4wag9khToYgxrIwEg4IEdxBqrgvcAKrDc4bw4=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-e+CGA3/tm2v4S6yXqD48kYMBt+nJavEwsnJS0KURFok=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/core/epiphany/default.nix b/pkgs/desktops/gnome-3/core/epiphany/default.nix
index 9f949b60738e6..349a1c024e48f 100644
--- a/pkgs/desktops/gnome-3/core/epiphany/default.nix
+++ b/pkgs/desktops/gnome-3/core/epiphany/default.nix
@@ -19,6 +19,7 @@
 , libsecret
 , gnome-desktop
 , libnotify
+, libarchive
 , p11-kit
 , sqlite
 , gcr
@@ -36,18 +37,13 @@
 
 stdenv.mkDerivation rec {
   pname = "epiphany";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0v8iymg72m83ikxxyhapvz5v8zh8hlr1pw7n215cy3p8q6yg41cb";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1l0sb1xg16g4wg3z99xb0w2kbyczbn7q4mphs3w4lxq22xml4sk9";
   };
 
-  # Tests need an X display
-  mesonFlags = [
-    "-Dunit_tests=disabled"
-  ];
-
   nativeBuildInputs = [
     desktop-file-utils
     gettext
@@ -83,6 +79,7 @@ stdenv.mkDerivation rec {
     libhandy
     libportal
     libnotify
+    libarchive
     libsecret
     libsoup
     libxml2
@@ -92,6 +89,11 @@ stdenv.mkDerivation rec {
     webkitgtk
   ];
 
+  # Tests need an X display
+  mesonFlags = [
+    "-Dunit_tests=disabled"
+  ];
+
   postPatch = ''
     chmod +x post_install.py # patchShebangs requires executable file
     patchShebangs post_install.py
@@ -107,7 +109,7 @@ stdenv.mkDerivation rec {
     homepage = "https://wiki.gnome.org/Apps/Epiphany";
     description = "WebKit based web browser for GNOME";
     maintainers = teams.gnome.members;
-    license = licenses.gpl2;
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/core/evince/default.nix b/pkgs/desktops/gnome-3/core/evince/default.nix
index 31828bad0af11..59eb31e19180c 100644
--- a/pkgs/desktops/gnome-3/core/evince/default.nix
+++ b/pkgs/desktops/gnome-3/core/evince/default.nix
@@ -19,6 +19,7 @@
 , djvulibre
 , libspectre
 , libarchive
+, libhandy
 , libsecret
 , wrapGAppsHook
 , librsvg
@@ -43,13 +44,13 @@
 
 stdenv.mkDerivation rec {
   pname = "evince";
-  version = "3.38.2";
+  version = "40.1";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/evince/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "J9QZ1f7WMF4HRijtz94MtzT//aIF1jysMjORwEkDvZQ=";
+    url = "mirror://gnome/sources/evince/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0bfg7prmjk3z8irx1nfkkqph3igg3cy4pwd7pcxjxbshqdin6rks";
   };
 
   postPatch = ''
@@ -86,6 +87,7 @@ stdenv.mkDerivation rec {
     gspell
     gtk3
     libarchive
+    libhandy
     librsvg
     libsecret
     libspectre
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 dc43bdfd4932f..dc3f4b493b0c1 100644
--- a/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
+++ b/pkgs/desktops/gnome-3/core/evolution-data-server/default.nix
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation rec {
   pname = "evolution-data-server";
-  version = "3.38.4";
+  version = "3.40.1";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/evolution-data-server/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "rFPxay1R8+f/gCX5yhn0otTOOEHXKun+K7iX3ICZ1wU=";
+    sha256 = "08iykha7zhk21b3axsp3v1jfwda612v0m8rz8zlzppm5i8s5ziza";
   };
 
   patches = [
@@ -52,6 +52,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = "evolution-data-server";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/core/gdm/default.nix b/pkgs/desktops/gnome-3/core/gdm/default.nix
index 324ab865b11e5..6c1db6cebd9e7 100644
--- a/pkgs/desktops/gnome-3/core/gdm/default.nix
+++ b/pkgs/desktops/gnome-3/core/gdm/default.nix
@@ -42,13 +42,13 @@ in
 
 stdenv.mkDerivation rec {
   pname = "gdm";
-  version = "3.38.2.1";
+  version = "40.0";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gdm/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "yliiBdXr/L2rVqEXFriY4Wrl3/Ia7nnQdgRkRGKOxNo=";
+    url = "mirror://gnome/sources/gdm/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "XtdLc506Iy/7HkoTK8+WW9/pVdmVtSh3NYh3WwLylQ4=";
   };
 
   mesonFlags = [
@@ -90,10 +90,13 @@ stdenv.mkDerivation rec {
   ];
 
   patches = [
-    # https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/112
+    # GDM fails to find g-s with the following error in the journal.
+    # gdm-x-session[976]: dbus-run-session: failed to exec 'gnome-session': No such file or directory
+    # https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/92
     (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gdm/-/commit/1d28d4b3568381b8590d2235737b924aefd1746c.patch";
-      sha256 = "ZUXKZS4T0o0hzrApxaqcR0txCRv5zBgqeQ9K9fLNX1o=";
+      url = "https://gitlab.gnome.org/GNOME/gdm/-/commit/ccecd9c975d04da80db4cd547b67a1a94fa83292.patch";
+      sha256 = "5hKS9wjjhuSAYwXct5vS0dPbmPRIINJoLC0Zm1naz6Q=";
+      revert = true;
     })
 
     # Change hardcoded paths to nix store paths.
diff --git a/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix b/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
index 36bf7b3e92c91..2ce5291159552 100644
--- a/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-backgrounds/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-backgrounds";
-  version = "3.38.0";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-backgrounds/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1qqygm15rcdgm36vz2iy7b9axndjzvpi29lmygyakjc07a3jlwgp";
+    url = "mirror://gnome/sources/gnome-backgrounds/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "YN+KDaMBzkJbcEPUKuMuxAEf8I8Y4Pxi8pQBMF2jpw4=";
   };
 
   passthru = {
diff --git a/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix b/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
index 2397b9d7be90d..e057cc61da81c 100644
--- a/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-bluetooth/default.nix
@@ -1,28 +1,62 @@
-{ lib, stdenv, fetchurl, gnome3, meson, ninja, pkg-config, gtk3, intltool, glib
-, udev, itstool, libxml2, wrapGAppsHook, libnotify, libcanberra-gtk3, gobject-introspection
-, gtk-doc, docbook_xsl, docbook_xml_dtd_43, python3, gsettings-desktop-schemas }:
+{ lib
+, stdenv
+, fetchurl
+, gnome3
+, meson
+, ninja
+, pkg-config
+, gtk3
+, gettext
+, glib
+, udev
+, itstool
+, libxml2
+, wrapGAppsHook
+, libnotify
+, libcanberra-gtk3
+, gobject-introspection
+, gtk-doc
+, docbook-xsl-nons
+, docbook_xml_dtd_43
+, python3
+, gsettings-desktop-schemas
+}:
 
-let
+stdenv.mkDerivation rec {
   pname = "gnome-bluetooth";
-in stdenv.mkDerivation rec {
-  name = "${pname}-${version}";
-  version = "3.34.3";
+  version = "3.34.5";
 
   # TODO: split out "lib"
   outputs = [ "out" "dev" "devdoc" "man" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "08k4jak4r72pvn5kjhm21planyc514j6c7jjj5lv9nmvvlxqw1ha";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1a9ynlwwkb3wpg293ym517vmrkk63y809mmcv9a21k5yr199x53c";
   };
 
   nativeBuildInputs = [
-    meson ninja intltool itstool pkg-config libxml2 wrapGAppsHook gobject-introspection
-    gtk-doc docbook_xsl docbook_xml_dtd_43 python3
+    meson
+    ninja
+    gettext
+    itstool
+    pkg-config
+    libxml2
+    wrapGAppsHook
+    gobject-introspection
+    gtk-doc
+    docbook-xsl-nons
+    docbook_xml_dtd_43
+    python3
   ];
+
   buildInputs = [
-    glib gtk3 udev libnotify libcanberra-gtk3
-    gnome3.adwaita-icon-theme gsettings-desktop-schemas
+    glib
+    gtk3
+    udev
+    libnotify
+    libcanberra-gtk3
+    gnome3.adwaita-icon-theme
+    gsettings-desktop-schemas
   ];
 
   mesonFlags = [
@@ -46,7 +80,7 @@ in stdenv.mkDerivation rec {
     homepage = "https://help.gnome.org/users/gnome-bluetooth/stable/index.html.en";
     description = "Application that let you manage Bluetooth in the GNOME destkop";
     maintainers = teams.gnome.members;
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix b/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
index e033197b3475d..4bf317a4a2605 100644
--- a/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-calculator/default.nix
@@ -1,25 +1,63 @@
-{ lib, stdenv, meson, ninja, vala, gettext, itstool, fetchurl, pkg-config, libxml2
-, gtk3, glib, gtksourceview4, wrapGAppsHook, gobject-introspection, python3
-, gnome3, mpfr, gmp, libsoup, libmpc, gsettings-desktop-schemas, libgee }:
+{ stdenv
+, lib
+, meson
+, ninja
+, vala
+, gettext
+, itstool
+, fetchurl
+, pkg-config
+, libxml2
+, gtk3
+, glib
+, gtksourceview4
+, wrapGAppsHook
+, gobject-introspection
+, python3
+, gnome3
+, mpfr
+, gmp
+, libsoup
+, libmpc
+, libhandy
+, gsettings-desktop-schemas
+, libgee
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-calculator";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-calculator/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0sri58cp6v07cqpdsf8dhf9dnykz305kvkx0l9dd25g06djcr0wc";
+    url = "mirror://gnome/sources/gnome-calculator/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1xkazxbkpn1z5pfphhps7fc5q4yc8lp7f6b222n8bx5iyxhwbrkz";
   };
 
   nativeBuildInputs = [
-    meson ninja pkg-config vala gettext itstool wrapGAppsHook python3
+    meson
+    ninja
+    pkg-config
+    vala
+    gettext
+    itstool
+    wrapGAppsHook
+    python3
     gobject-introspection # for finding vapi files
   ];
 
   buildInputs = [
-    gtk3 glib libxml2 gtksourceview4 mpfr gmp
-    gnome3.adwaita-icon-theme libgee
-    gsettings-desktop-schemas libsoup libmpc
+    gtk3
+    glib
+    libxml2
+    gtksourceview4
+    mpfr
+    gmp
+    gnome3.adwaita-icon-theme
+    libgee
+    gsettings-desktop-schemas
+    libsoup
+    libmpc
+    libhandy
   ];
 
   doCheck = true;
@@ -29,6 +67,11 @@ stdenv.mkDerivation rec {
     patchShebangs meson_post_install.py
   '';
 
+  preCheck = ''
+    # Currency conversion test tries to store currency data in $HOME/.cache.
+    export HOME=$TMPDIR
+  '';
+
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = "gnome-calculator";
@@ -40,7 +83,7 @@ stdenv.mkDerivation rec {
     homepage = "https://wiki.gnome.org/Apps/Calculator";
     description = "Application that solves mathematical equations and is suitable as a default application in a Desktop environment";
     maintainers = teams.gnome.members;
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix b/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
index ef5e564beb957..3146ca717d35d 100644
--- a/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-contacts/default.nix
@@ -17,6 +17,7 @@
 , gnome-online-accounts
 , wrapGAppsHook
 , folks
+, libgdata
 , libxml2
 , gnome3
 , vala
@@ -28,11 +29,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-contacts";
-  version = "3.38.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-contacts/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0hsq0dwxjahcaxnm1m4r1lync9k2fkwzybfmkchrmn95vqcwwvf9";
+    url = "mirror://gnome/sources/gnome-contacts/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0w2g5xhw65adzvwzakrj5kaim4sw1w7s8qqwm3nm6inq50znzpn9";
   };
 
   propagatedUserEnvPkgs = [
@@ -58,6 +59,7 @@ stdenv.mkDerivation rec {
     evolution-data-server
     gsettings-desktop-schemas
     folks
+    libgdata # required by some dependency transitively
     gnome-desktop
     libhandy
     libxml2
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 f8c458a3df1fe..371f2d794a005 100644
--- a/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-control-center/default.nix
@@ -1,6 +1,7 @@
 { fetchurl
-, fetchFromGitLab
-, lib, stdenv
+, fetchpatch
+, lib
+, stdenv
 , substituteAll
 , accountsservice
 , adwaita-icon-theme
@@ -10,7 +11,7 @@
 , colord
 , colord-gtk
 , cups
-, docbook_xsl
+, docbook-xsl-nons
 , fontconfig
 , gdk-pixbuf
 , gettext
@@ -69,20 +70,32 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-control-center";
-  version = "3.38.4";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-SdxjeNTTXBxu1ZIk9WNpFsK2+km7+4tW6xmoTW6QzRk=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-zMmlc2UXOFEJrlpZkGwlgkTdh5t1A61ZhM9BZVyzAvE=";
   };
 
-  # See https://mail.gnome.org/archives/distributor-list/2020-September/msg00001.html
-  prePatch = (import ../gvc-with-ucm-prePatch.nix {
-    inherit fetchFromGitLab;
-  });
+  patches = [
+    (substituteAll {
+      src = ./paths.patch;
+      gcm = gnome-color-manager;
+      gnome_desktop = gnome-desktop;
+      inherit glibc libgnomekbd tzdata;
+      inherit cups networkmanagerapplet;
+    })
+
+    # Fix startup assertion in power panel.
+    # https://gitlab.gnome.org/GNOME/gnome-control-center/merge_requests/974
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-control-center/commit/9acaa10567c94048657c69538e5d7813f82c4224.patch";
+      sha256 = "59GeTPcG2UiVTL4VTS/TP0p0QkAQpm3VgvuAiw64wUU=";
+    })
+  ];
 
   nativeBuildInputs = [
-    docbook_xsl
+    docbook-xsl-nons
     gettext
     libxslt
     meson
@@ -142,16 +155,6 @@ stdenv.mkDerivation rec {
     upower
   ];
 
-  patches = [
-    (substituteAll {
-      src = ./paths.patch;
-      gcm = gnome-color-manager;
-      gnome_desktop = gnome-desktop;
-      inherit glibc libgnomekbd tzdata;
-      inherit cups networkmanagerapplet;
-    })
-  ];
-
   postPatch = ''
     chmod +x build-aux/meson/meson_post_install.py # patchShebangs requires executable file
     patchShebangs build-aux/meson/meson_post_install.py
diff --git a/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch b/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
index 361972f2635af..a6787477b8144 100644
--- a/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
+++ b/pkgs/desktops/gnome-3/core/gnome-control-center/paths.patch
@@ -1,26 +1,26 @@
 diff --git a/panels/color/cc-color-panel.c b/panels/color/cc-color-panel.c
-index 49ca35220..adefb87b9 100644
+index 603178efc..c363a6a5c 100644
 --- a/panels/color/cc-color-panel.c
 +++ b/panels/color/cc-color-panel.c
-@@ -599,7 +599,7 @@ gcm_prefs_calibrate_cb (GtkWidget *widget, CcColorPanel *prefs)
+@@ -591,7 +591,7 @@ gcm_prefs_calibrate_cb (CcColorPanel *prefs)
  
    /* run with modal set */
    argv = g_ptr_array_new_with_free_func (g_free);
--  g_ptr_array_add (argv, g_build_filename (BINDIR, "gcm-calibrate", NULL));
+-  g_ptr_array_add (argv, g_strdup ("gcm-calibrate"));
 +  g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-calibrate", NULL));
    g_ptr_array_add (argv, g_strdup ("--device"));
    g_ptr_array_add (argv, g_strdup (cd_device_get_id (prefs->current_device)));
    g_ptr_array_add (argv, g_strdup ("--parent-window"));
-@@ -1038,7 +1038,7 @@ gcm_prefs_profile_view (CcColorPanel *prefs, CdProfile *profile)
+@@ -1029,7 +1029,7 @@ gcm_prefs_profile_view (CcColorPanel *prefs, CdProfile *profile)
  
    /* open up gcm-viewer as a info pane */
    argv = g_ptr_array_new_with_free_func (g_free);
--  g_ptr_array_add (argv, g_build_filename (BINDIR, "gcm-viewer", NULL));
+-  g_ptr_array_add (argv, g_strdup ("gcm-viewer"));
 +  g_ptr_array_add (argv, g_build_filename ("@gcm@", "bin", "gcm-viewer", NULL));
    g_ptr_array_add (argv, g_strdup ("--profile"));
    g_ptr_array_add (argv, g_strdup (cd_profile_get_id (profile)));
    g_ptr_array_add (argv, g_strdup ("--parent-window"));
-@@ -1288,15 +1288,12 @@ gcm_prefs_device_clicked (CcColorPanel *prefs, CdDevice *device)
+@@ -1275,15 +1275,12 @@ gcm_prefs_device_clicked (CcColorPanel *prefs, CdDevice *device)
  static void
  gcm_prefs_profile_clicked (CcColorPanel *prefs, CdProfile *profile, CdDevice *device)
  {
@@ -38,12 +38,12 @@ index 49ca35220..adefb87b9 100644
    else
      gtk_widget_set_sensitive (prefs->toolbutton_profile_view, FALSE);
 diff --git a/panels/datetime/tz.h b/panels/datetime/tz.h
-index 96b25140c..1ad704d4a 100644
+index a2376f8a4..98769e08f 100644
 --- a/panels/datetime/tz.h
 +++ b/panels/datetime/tz.h
 @@ -27,11 +27,7 @@
  
- #include <glib.h>
+ G_BEGIN_DECLS
  
 -#ifndef __sun
 -#  define TZ_DATA_FILE "/usr/share/zoneinfo/zone.tab"
@@ -55,25 +55,42 @@ index 96b25140c..1ad704d4a 100644
  typedef struct _TzDB TzDB;
  typedef struct _TzLocation TzLocation;
 diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c
-index 4541986db..da7826bfe 100644
+index bd0e07762..0e71351f8 100644
 --- a/panels/info-overview/cc-info-overview-panel.c
 +++ b/panels/info-overview/cc-info-overview-panel.c
-@@ -169,7 +169,7 @@ load_gnome_version (char **version,
+@@ -172,7 +172,7 @@ load_gnome_version (char **version,
    gsize length;
    g_autoptr(VersionData) data = NULL;
-
+ 
 -  if (!g_file_get_contents (DATADIR "/gnome/gnome-version.xml",
 +  if (!g_file_get_contents ("@gnome_desktop@/share/gnome/gnome-version.xml",
                              &contents,
                              &length,
                              &error))
+diff --git a/panels/keyboard/cc-input-list-box.c b/panels/keyboard/cc-input-list-box.c
+index 6c2cb5614..8f57159cc 100644
+--- a/panels/keyboard/cc-input-list-box.c
++++ b/panels/keyboard/cc-input-list-box.c
+@@ -223,10 +223,10 @@ row_layout_cb (CcInputListBox *self,
+   layout_variant = cc_input_source_get_layout_variant (source);
+ 
+   if (layout_variant && layout_variant[0])
+-    commandline = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"",
++    commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l \"%s\t%s\"",
+ 				   layout, layout_variant);
+   else
+-    commandline = g_strdup_printf ("gkbd-keyboard-display -l %s",
++    commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l %s",
+ 				   layout);
+ 
+   g_spawn_command_line_async (commandline, NULL);
 diff --git a/panels/network/connection-editor/net-connection-editor.c b/panels/network/connection-editor/net-connection-editor.c
-index 9390a3308..d30b4a68e 100644
+index 505b8ee25..62e94009f 100644
 --- a/panels/network/connection-editor/net-connection-editor.c
 +++ b/panels/network/connection-editor/net-connection-editor.c
-@@ -278,9 +278,9 @@ net_connection_editor_do_fallback (NetConnectionEditor *self, const gchar *type)
+@@ -267,9 +267,9 @@ net_connection_editor_do_fallback (NetConnectionEditor *self, const gchar *type)
          g_autoptr(GError) error = NULL;
-
+ 
          if (self->is_new_connection) {
 -                cmdline = g_strdup_printf ("nm-connection-editor --type='%s' --create", type);
 +                cmdline = g_strdup_printf ("@networkmanagerapplet@/bin/nm-connection-editor --type='%s' --create", type);
@@ -84,19 +101,20 @@ index 9390a3308..d30b4a68e 100644
          }
  
 diff --git a/panels/network/net-device-bluetooth.c b/panels/network/net-device-bluetooth.c
+index 74dfb0e9a..5f53d1a20 100644
 --- a/panels/network/net-device-bluetooth.c
 +++ b/panels/network/net-device-bluetooth.c
 @@ -90,7 +90,7 @@ nm_device_bluetooth_refresh_ui (NetDeviceBluetooth *self)
          update_off_switch_from_device_state (self->device_off_switch, state, self);
-
+ 
          /* set up the Options button */
 -        path = g_find_program_in_path ("nm-connection-editor");
 +        path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor");
          gtk_widget_set_visible (GTK_WIDGET (self->options_button), state != NM_DEVICE_STATE_UNMANAGED && path != NULL);
  }
-
+ 
 @@ -141,7 +141,7 @@ options_button_clicked_cb (NetDeviceBluetooth *self)
-
+ 
          connection = net_device_get_find_connection (self->client, self->device);
          uuid = nm_connection_get_uuid (connection);
 -        cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid);
@@ -105,19 +123,20 @@ diff --git a/panels/network/net-device-bluetooth.c b/panels/network/net-device-b
          if (!g_spawn_command_line_async (cmdline, &error))
                  g_warning ("Failed to launch nm-connection-editor: %s", error->message);
 @@ -185,7 +185,7 @@ net_device_bluetooth_init (NetDeviceBluetooth *self)
-
+ 
          gtk_widget_init_template (GTK_WIDGET (self));
-
+ 
 -        path = g_find_program_in_path ("nm-connection-editor");
 +        path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor");
          gtk_widget_set_visible (GTK_WIDGET (self->options_button), path != NULL);
  }
-
+ 
 diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c
+index 34eb86241..50d0a2bed 100644
 --- a/panels/network/net-device-mobile.c
 +++ b/panels/network/net-device-mobile.c
-@@ -484,7 +484,7 @@ options_button_clicked_cb (NetDeviceMobile *self)
-
+@@ -508,7 +508,7 @@ options_button_clicked_cb (NetDeviceMobile *self)
+ 
          connection = net_device_get_find_connection (self->client, self->device);
          uuid = nm_connection_get_uuid (connection);
 -        cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid);
@@ -125,21 +144,21 @@ diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobi
          g_debug ("Launching '%s'\n", cmdline);
          if (!g_spawn_command_line_async (cmdline, &error))
                  g_warning ("Failed to launch nm-connection-editor: %s", error->message);
-@@ -776,7 +776,7 @@ net_device_mobile_init (NetDeviceMobile *self)
-
+@@ -797,7 +797,7 @@ net_device_mobile_init (NetDeviceMobile *self)
+ 
          self->cancellable = g_cancellable_new ();
-
+ 
 -        path = g_find_program_in_path ("nm-connection-editor");
 +        path = g_find_program_in_path ("@networkmanagerapplet@/bin/nm-connection-editor");
          gtk_widget_set_visible (GTK_WIDGET (self->options_button), path != NULL);
  }
-
+ 
 diff --git a/panels/printers/pp-host.c b/panels/printers/pp-host.c
-index f53ba217e..d24bcaeb9 100644
+index a31a606e3..ed5133d29 100644
 --- a/panels/printers/pp-host.c
 +++ b/panels/printers/pp-host.c
 @@ -256,7 +256,7 @@ _pp_host_get_snmp_devices_thread (GTask        *task,
-   devices = g_new0 (PpDevicesList, 1);
+   devices = g_ptr_array_new_with_free_func (g_object_unref);
  
    argv = g_new0 (gchar *, 3);
 -  argv[0] = g_strdup ("/usr/lib/cups/backend/snmp");
@@ -147,25 +166,8 @@ index f53ba217e..d24bcaeb9 100644
    argv[1] = g_strdup (priv->hostname);
  
    /* Use SNMP to get printer's informations */
-diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c
-index 35859526d..21486c917 100644
---- a/panels/region/cc-region-panel.c
-+++ b/panels/region/cc-region-panel.c
-@@ -755,10 +755,10 @@ row_layout_cb (CcRegionPanel *self,
-         layout_variant = cc_input_source_get_layout_variant (source);
- 
-         if (layout_variant && layout_variant[0])
--                commandline = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"",
-+                commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l \"%s\t%s\"",
-                                                layout, layout_variant);
-         else
--                commandline = g_strdup_printf ("gkbd-keyboard-display -l %s",
-+                commandline = g_strdup_printf ("@libgnomekbd@/bin/gkbd-keyboard-display -l %s",
-                                                layout);
- 
-         g_spawn_command_line_async (commandline, NULL);
 diff --git a/panels/user-accounts/run-passwd.c b/panels/user-accounts/run-passwd.c
-index 00239ce0f..617c98870 100644
+index 86f53d4fc..0b052856f 100644
 --- a/panels/user-accounts/run-passwd.c
 +++ b/panels/user-accounts/run-passwd.c
 @@ -150,7 +150,7 @@ spawn_passwd (PasswdHandler *passwd_handler, GError **error)
diff --git a/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix b/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
index c6d8b319308d7..4294e2db24066 100644
--- a/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-desktop/default.nix
@@ -1,29 +1,40 @@
-{ lib, stdenv, fetchurl, substituteAll, pkg-config, libxslt, ninja, gnome3, gtk3, glib
-, gettext, libxml2, xkeyboard_config, isocodes, meson, wayland
-, libseccomp, systemd, bubblewrap, gobject-introspection, gtk-doc, docbook_xsl, gsettings-desktop-schemas }:
+{ lib
+, stdenv
+, fetchurl
+, substituteAll
+, pkg-config
+, libxslt
+, ninja
+, gnome3
+, gtk3
+, glib
+, gettext
+, libxml2
+, xkeyboard_config
+, libxkbcommon
+, isocodes
+, meson
+, wayland
+, libseccomp
+, systemd
+, bubblewrap
+, gobject-introspection
+, gtk-doc
+, docbook-xsl-nons
+, gsettings-desktop-schemas
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-desktop";
-  version = "3.38.4";
+  version = "40.1";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-desktop/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-P2A+pb/UdyLJLPybiFRGtGJg6gnIz7Y/a92f7+NC5Iw=";
+    url = "mirror://gnome/sources/gnome-desktop/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-igeJcwUhnFaZVJriBI9xVVFe+Xx85NZYXd2hXVhZ4c8=";
   };
 
-  nativeBuildInputs = [
-    pkg-config meson ninja gettext libxslt libxml2 gobject-introspection
-    gtk-doc docbook_xsl glib
-  ];
-  buildInputs = [
-    bubblewrap xkeyboard_config isocodes wayland
-    gtk3 glib libseccomp systemd
-  ];
-
-  propagatedBuildInputs = [ gsettings-desktop-schemas ];
-
   patches = [
     (substituteAll {
       src = ./bubblewrap-paths.patch;
@@ -32,11 +43,42 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    gettext
+    libxslt
+    libxml2
+    gobject-introspection
+    gtk-doc
+    docbook-xsl-nons
+    glib
+  ];
+
+  buildInputs = [
+    bubblewrap
+    xkeyboard_config
+    libxkbcommon # for xkbregistry
+    isocodes
+    wayland
+    gtk3
+    glib
+    libseccomp
+    systemd
+  ];
+
+  propagatedBuildInputs = [
+    gsettings-desktop-schemas
+  ];
+
   mesonFlags = [
     "-Dgtk_doc=true"
     "-Ddesktop_docs=false"
   ];
 
+  separateDebugInfo = stdenv.isLinux;
+
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = "gnome-desktop";
@@ -46,7 +88,8 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Library with common API for various GNOME modules";
-    license = with licenses; [ gpl2 lgpl2 ];
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-desktop";
+    license = with licenses; [ gpl2Plus lgpl2Plus ];
     platforms = platforms.linux;
     maintainers = teams.gnome.members;
   };
diff --git a/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix b/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
index bb602c8b3fa13..8ff4145a271a2 100644
--- a/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-dictionary/default.nix
@@ -1,24 +1,16 @@
-{ lib, stdenv, fetchurl, fetchpatch, meson, ninja, pkg-config, desktop-file-utils, appstream-glib, libxslt
+{ lib, stdenv, fetchurl, meson, ninja, pkg-config, desktop-file-utils, appstream-glib, libxslt
 , libxml2, gettext, itstool, wrapGAppsHook, docbook_xsl, docbook_xml_dtd_43
 , gnome3, gtk3, glib, gsettings-desktop-schemas }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-dictionary";
-  version = "3.26.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-dictionary/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "16b8bc248dcf68987826d5e39234b1bb7fd24a2607fcdbf4258fde88f012f300";
+    url = "mirror://gnome/sources/gnome-dictionary/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1d8dhcfys788vv27v34i3s3x3jdvdi2kqn2a5p8c937a9hm0qr9f";
   };
 
-  patches = [
-    # fix AppStream validation
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-dictionary/commit/1c94d612030ef87c6e26a01a490470b71c39e341.patch";
-      sha256 = "0cbswmhs9mks3gsc0iy4wnidsa8sfzzf4s1kgvb80qwffgxz5m8b";
-    })
-  ];
-
   doCheck = true;
 
   nativeBuildInputs = [
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 5c573d2502c2d..87b89c3a05ba1 100644
--- a/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-disk-utility/default.nix
@@ -1,26 +1,66 @@
-{ lib, stdenv, gettext, fetchurl, pkg-config, udisks2, libsecret, libdvdread
-, meson, ninja, gtk3, glib, wrapGAppsHook, python3, libnotify
-, itstool, gnome3, libxml2, gsettings-desktop-schemas
-, libcanberra-gtk3, libxslt, docbook_xsl, libpwquality, systemd }:
+{ lib
+, stdenv
+, gettext
+, fetchurl
+, pkg-config
+, udisks2
+, libhandy
+, libsecret
+, libdvdread
+, meson
+, ninja
+, gtk3
+, glib
+, wrapGAppsHook
+, python3
+, libnotify
+, itstool
+, gnome3
+, libxml2
+, gsettings-desktop-schemas
+, libcanberra-gtk3
+, libxslt
+, docbook-xsl-nons
+, libpwquality
+, systemd
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-disk-utility";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-disk-utility/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-EL7d5UlL6zTjoiDW8w2TIMiCUv7rhCa9mM760YNteOk=";
+    url = "mirror://gnome/sources/gnome-disk-utility/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-KkuZrBHKIzlLKMVYS56WKE6MWk2mXPBiB95U9Csf8UE=";
   };
 
   nativeBuildInputs = [
-    meson ninja pkg-config gettext itstool libxslt docbook_xsl
-    wrapGAppsHook python3 libxml2
+    meson
+    ninja
+    pkg-config
+    gettext
+    itstool
+    libxslt
+    docbook-xsl-nons
+    wrapGAppsHook
+    python3
+    libxml2
   ];
 
   buildInputs = [
-    gtk3 glib libsecret libpwquality libnotify libdvdread libcanberra-gtk3
-    udisks2 gnome3.adwaita-icon-theme systemd
-    gnome3.gnome-settings-daemon gsettings-desktop-schemas
+    gtk3
+    glib
+    libhandy
+    libsecret
+    libpwquality
+    libnotify
+    libdvdread
+    libcanberra-gtk3
+    udisks2
+    gnome3.adwaita-icon-theme
+    systemd
+    gnome3.gnome-settings-daemon
+    gsettings-desktop-schemas
   ];
 
   postPatch = ''
@@ -36,10 +76,10 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    homepage = "https://en.wikipedia.org/wiki/GNOME_Disks";
+    homepage = "https://wiki.gnome.org/Apps/Disks";
     description = "A udisks graphical front-end";
     maintainers = teams.gnome.members;
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
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 83563c7d212c9..6e9b6d22f57cb 100644
--- a/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-font-viewer/default.nix
@@ -1,20 +1,20 @@
 { lib, stdenv, meson, ninja, gettext, fetchurl
-, pkg-config, gtk3, glib, libxml2, gnome-desktop, adwaita-icon-theme
+, pkg-config, gtk3, glib, libxml2, gnome-desktop, adwaita-icon-theme, libhandy
 , wrapGAppsHook, gnome3, harfbuzz }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-font-viewer";
-  version = "3.34.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-font-viewer/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "12xrsqwmvid7hksiw4zhj4jd1qwxn8w0czskbq4yqfprwn1havxa";
+    url = "mirror://gnome/sources/gnome-font-viewer/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0hpyi0sz3gcqqs9lkwyk8b6hr39m3n27432x98kxr436jj37dk6j";
   };
 
   doCheck = true;
 
   nativeBuildInputs = [ meson ninja pkg-config gettext wrapGAppsHook libxml2 ];
-  buildInputs = [ gtk3 glib gnome-desktop adwaita-icon-theme harfbuzz ];
+  buildInputs = [ gtk3 glib gnome-desktop adwaita-icon-theme harfbuzz libhandy ];
 
   # Do not run meson-postinstall.sh
   preConfigure = "sed -i '2,$ d'  meson-postinstall.sh";
diff --git a/pkgs/desktops/gnome-3/core/gnome-initial-setup/0001-fix-paths.patch b/pkgs/desktops/gnome-3/core/gnome-initial-setup/0001-fix-paths.patch
index d4065c144996c..2323759522535 100644
--- a/pkgs/desktops/gnome-3/core/gnome-initial-setup/0001-fix-paths.patch
+++ b/pkgs/desktops/gnome-3/core/gnome-initial-setup/0001-fix-paths.patch
@@ -5,29 +5,10 @@ Date: Sun, 20 Sep 2020 14:46:59 -0400
 Subject: [PATCH] fix paths
 
 ---
- data/gnome-welcome-tour                               | 4 ++--
  gnome-initial-setup/pages/keyboard/cc-input-chooser.c | 6 +++---
  gnome-initial-setup/pages/timezone/tz.h               | 4 ++--
- 3 files changed, 7 insertions(+), 7 deletions(-)
+ 3 files changed, 5 insertions(+), 5 deletions(-)
 
-diff --git a/data/gnome-welcome-tour b/data/gnome-welcome-tour
-index 51c9b59..68ab0c4 100755
---- a/data/gnome-welcome-tour
-+++ b/data/gnome-welcome-tour
-@@ -3,11 +3,11 @@
- cfgdir=${XDG_CONFIG_DIR:-$HOME/.config}
- 
- # Don't do anything if gnome-tour isn't installed
--gnome_tour_path=$(which gnome-tour 2>/dev/null)
-+gnome_tour_path="@gnome_tour@"
- if test -z "${gnome_tour_path}"; then
-     rm -f $cfgdir/run-welcome-tour
-     exit
- fi
- 
--gnome-tour
-+@gnome_tour@
- rm -f $cfgdir/run-welcome-tour
 diff --git a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
 index 196abf6..613d0e5 100644
 --- a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
diff --git a/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix b/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix
index 435da4e3720ab..6cf549dc5cab5 100644
--- a/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-initial-setup/default.nix
@@ -14,7 +14,6 @@
 , geocode-glib
 , glib
 , gnome-desktop
-, gnome-getting-started-docs
 , gnome-online-accounts
 , gtk3
 , libgweather
@@ -32,18 +31,24 @@
 , tzdata
 , libgnomekbd
 , gsettings-desktop-schemas
-, gnome-tour
 }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-initial-setup";
-  version = "3.38.4";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "001jdzsvc541qracn68r609pr5qwymrh85xrqmvzzc1dbg5w3mlg";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "10zf87n6c947k9rkk2rqc9cbfwcvq23axq3rf7x1an7npv3414gi";
   };
 
+  patches = [
+    (substituteAll {
+      src = ./0001-fix-paths.patch;
+      inherit tzdata libgnomekbd;
+    })
+  ];
+
   nativeBuildInputs = [
     gettext
     meson
@@ -61,7 +66,6 @@ stdenv.mkDerivation rec {
     geocode-glib
     glib
     gnome-desktop
-    gnome-getting-started-docs
     gnome-online-accounts
     gsettings-desktop-schemas
     gtk3
@@ -78,14 +82,6 @@ stdenv.mkDerivation rec {
     webkitgtk
   ];
 
-  patches = [
-    (substituteAll {
-      src = ./0001-fix-paths.patch;
-      inherit tzdata libgnomekbd;
-      gnome_tour = "${gnome-tour}/bin/gnome-tour";
-    })
-  ];
-
   mesonFlags = [
     "-Dcheese=disabled"
     "-Dibus=disabled"
diff --git a/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix b/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
index 93453cc72e949..833f58f74a45e 100644
--- a/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-keyring/default.nix
@@ -1,51 +1,72 @@
-{ lib, stdenv, fetchurl, fetchpatch, pkg-config, dbus, libgcrypt, pam, python2, glib, libxslt
-, gettext, gcr, libcap_ng, libselinux, p11-kit, openssh, wrapGAppsHook
-, docbook_xsl, docbook_xml_dtd_43, gnome3 }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, dbus
+, libgcrypt
+, pam
+, python2
+, glib
+, libxslt
+, gettext
+, gcr
+, libcap_ng
+, libselinux
+, p11-kit
+, openssh
+, wrapGAppsHook
+, docbook-xsl-nons
+, docbook_xml_dtd_43
+, gnome3
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-keyring";
-  version = "3.36.0";
+  version = "40.0";
+
+  outputs = [ "out" "dev" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-keyring/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "11sgffrrpss5cmv3b717pqlbhgq17l1xd33fsvqgsw8simxbar52";
+    url = "mirror://gnome/sources/gnome-keyring/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0cdrlcw814zayhvlaxqs1sm9bqlfijlp22dzzd0g5zg2isq4vlm3";
   };
 
-  patches = [
-    # version 3.36.0 is incompatible with libncap_ng >= 0.8.1. remove patch after update.
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-keyring/-/commit/ebc7bc9efacc17049e54da8d96a4a29943621113.diff";
-      sha256 = "07bx7zmdswqsa3dj37m729g35n1prhylkw7ya8a7h64i10la12cs";
-    })
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    libxslt
+    docbook-xsl-nons
+    docbook_xml_dtd_43
+    wrapGAppsHook
   ];
 
-  outputs = [ "out" "dev" ];
-
   buildInputs = [
-    glib libgcrypt pam openssh libcap_ng libselinux
-    gcr p11-kit
+    glib
+    libgcrypt
+    pam
+    openssh
+    libcap_ng
+    libselinux
+    gcr
+    p11-kit
   ];
 
-  nativeBuildInputs = [
-    pkg-config gettext libxslt docbook_xsl docbook_xml_dtd_43 wrapGAppsHook
-  ];
+  # In 3.20.1, tests do not support Python 3
+  checkInputs = [ dbus python2 ];
 
   configureFlags = [
     "--with-pkcs11-config=${placeholder "out"}/etc/pkcs11/" # installation directories
     "--with-pkcs11-modules=${placeholder "out"}/lib/pkcs11/"
   ];
 
-  postPatch = ''
-    patchShebangs build
-  '';
-
   # Tends to fail non-deterministically.
   # - https://github.com/NixOS/nixpkgs/issues/55293
   # - https://github.com/NixOS/nixpkgs/issues/51121
   doCheck = false;
 
-  # In 3.20.1, tests do not support Python 3
-  checkInputs = [ dbus python2 ];
+  postPatch = ''
+    patchShebangs build
+  '';
 
   checkPhase = ''
     export HOME=$(mktemp -d)
diff --git a/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix b/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
index 432f7d9e2ad5b..35e7b1a0b0233 100644
--- a/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-screenshot/default.nix
@@ -4,13 +4,13 @@
 
 let
   pname = "gnome-screenshot";
-  version = "3.38.0";
+  version = "40.0";
 in stdenv.mkDerivation rec {
   name = "${pname}-${version}";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "1h4zsaybjrlkfcrvriyybg4gfr7v9d1ndh2p516k94ad2gfx6mp5";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${name}.tar.xz";
+    sha256 = "1qm544ymwibk31s30k47vnn79xg30m18r7l4di0c57g375dak31n";
   };
 
   doCheck = true;
diff --git a/pkgs/desktops/gnome-3/core/gnome-session/ctl.nix b/pkgs/desktops/gnome-3/core/gnome-session/ctl.nix
index 05d28de768a8e..6a274e35bf568 100644
--- a/pkgs/desktops/gnome-3/core/gnome-session/ctl.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-session/ctl.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
 , meson
 , ninja
@@ -10,13 +11,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-session-ctl";
-  version = "3.38.0";
+  version = "40.0";
 
   src = fetchFromGitHub {
     owner = "nix-community";
     repo = pname;
-    rev = "c20907fea27fa96568b8375a6756c40d0bfb9e40"; # main
-    hash = "sha256-y9/yOH6N8wf93+gPqnqzRzV/lPXYD0M6v7dsLFF8lWo=";
+    rev = version;
+    hash = "sha256-gvBmLx8Qoj1vPsOwaZsd9+pTDvU5D7uUts7ZT1pXwNo=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/core/gnome-session/default.nix b/pkgs/desktops/gnome-3/core/gnome-session/default.nix
index 1fa0a0b0fc64d..49363568eab08 100644
--- a/pkgs/desktops/gnome-3/core/gnome-session/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-session/default.nix
@@ -1,17 +1,16 @@
 { fetchurl, lib, stdenv, substituteAll, meson, ninja, pkg-config, gnome3, glib, gtk3, gsettings-desktop-schemas
 , gnome-desktop, dbus, json-glib, libICE, xmlto, docbook_xsl, docbook_xml_dtd_412, python3
-, libxslt, gettext, makeWrapper, systemd, xorg, epoxy, gnugrep, bash, gnome-session-ctl
-, fetchpatch }:
+, libxslt, gettext, makeWrapper, systemd, xorg, epoxy, gnugrep, bash, gnome-session-ctl }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-session";
-  version = "3.38.0";
+  version = "40.1.1";
 
   outputs = ["out" "sessions"];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-session/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0rrxjk3vbqy3cdgnl7rw71dvcyrvhwq3m6s53dnkyjxsrnr0xk3v";
+    url = "mirror://gnome/sources/gnome-session/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "10nzyhmgkrzk6i70kj7690na0hmsv6qy5bmr10akxq9jxqlphy4w";
   };
 
   patches = [
@@ -22,12 +21,6 @@ stdenv.mkDerivation rec {
       grep = "${gnugrep}/bin/grep";
       bash = "${bash}/bin/bash";
     })
-    # Fixes 2 minute delay at poweroff.
-    # https://gitlab.gnome.org/GNOME/gnome-session/issues/74
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gnome-session/-/commit/9de6e40f12e8878f524f8d429d85724c156a0517.diff";
-      sha256 = "19vrjdf7d6dfl7sqxvbc5h5lcgk1krgzg5rkssrdzd1h4ma6y8fz";
-    })
   ];
 
   mesonFlags = [ "-Dsystemd=true" "-Dsystemd_session=default" ];
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 e5923e6b56abd..d7e549e289393 100644
--- a/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-settings-daemon/default.nix
@@ -42,11 +42,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-settings-daemon";
-  version = "3.38.1";
+  version = "40.0.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-settings-daemon/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0r010wzw3dj87mapzvq15zv93i86wg0x0rpii3x2wapq3bcj30g2";
+    url = "mirror://gnome/sources/gnome-settings-daemon/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "08bv32hvsmd8izw0llvldg0c2d71srch4hi8j94jwgm5d4dsrprp";
   };
 
   patches = [
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 8b882df3b0078..035633d676adf 100644
--- a/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-shell-extensions/default.nix
@@ -1,13 +1,13 @@
-{ lib, stdenv, fetchurl, meson, ninja, gettext, pkg-config, spidermonkey_68, glib
+{ lib, stdenv, fetchurl, fetchpatch, meson, ninja, gettext, pkg-config, spidermonkey_68, glib
 , gnome3, gnome-menus, substituteAll }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-shell-extensions";
-  version = "3.38.2";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-shell-extensions/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0hzn975v49rv3nsqp8m0mzv8gcm7nyvn54gj3zsml8ahlxwl592p";
+    url = "mirror://gnome/sources/gnome-shell-extensions/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "15hak4prx2nx1svfii39clxy1lll8crdf7p91if85jcsh6r8ab8p";
   };
 
   passthru = {
@@ -22,6 +22,14 @@ stdenv.mkDerivation rec {
       src = ./fix_gmenu.patch;
       gmenu_path = "${gnome-menus}/lib/girepository-1.0";
     })
+
+    # Do not show welcome dialog in gnome-classic.
+    # Needed for gnome-shell 40.1.
+    # https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/169
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-shell-extensions/commit/3e8bbb07ea7109c44d5ac7998f473779e742d041.patch";
+      sha256 = "jSmPwSBgRBfPPP9mGVjw1mSWumIXQqtA6tSqHr3U+3w=";
+    })
   ];
 
   doCheck = true;
diff --git a/pkgs/desktops/gnome-3/core/gnome-shell/default.nix b/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
index 97a72e379a58e..078582f439f8b 100644
--- a/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-shell/default.nix
@@ -1,5 +1,6 @@
 { fetchurl
 , fetchpatch
+, fetchgit
 , substituteAll
 , lib, stdenv
 , meson
@@ -22,8 +23,7 @@
 , librsvg
 , geoclue2
 , perl
-, docbook_xml_dtd_42
-, docbook_xml_dtd_43
+, docbook_xml_dtd_45
 , desktop-file-utils
 , libpulseaudio
 , libical
@@ -46,6 +46,7 @@
 , mutter
 , evolution-data-server
 , gtk3
+, gtk4
 , sassc
 , systemd
 , pipewire
@@ -66,14 +67,20 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "gnome-shell";
-  version = "3.38.3";
+  version = "40.0-unstable-2021-05-01";
 
   outputs = [ "out" "devdoc" ];
 
-  src = fetchurl {
-    url = "mirror://gnome/sources/gnome-shell/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-U0W0GMsSqXKVXOXM6u1mYkgAJzNrXFHa6lcwV1tiHO0=";
+  src = fetchgit {
+    url = "https://gitlab.gnome.org/GNOME/gnome-shell.git";
+    rev = "a8a79c03330427808e776c344f7ebc42782a1b5a";
+    sha256 = "ivHV0SRpnBqsdC7fu1Xhtd/BA55O0UdbUyDLy5KHNYs=";
+    fetchSubmodules = true;
   };
+  # src = fetchurl {
+  #   url = "mirror://gnome/sources/gnome-shell/${lib.versions.major version}/${pname}-${version}.tar.xz";
+  #   sha256 = "sha256-vOcfQC36qcXiab9lv0iiI0PYlubPmiw0ZpOS1/v2hHg=";
+  # };
 
   patches = [
     # Hardcode paths to various dependencies so that they can be found at runtime.
@@ -97,6 +104,12 @@ stdenv.mkDerivation rec {
       revert = true;
       sha256 = "14h7ahlxgly0n3sskzq9dhxzbyb04fn80pv74vz1526396676dzl";
     })
+
+    # Work around failing fingerprint auth
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gnome-shell/raw/9a647c460b651aaec0b8a21f046cc289c1999416/f/0001-gdm-Work-around-failing-fingerprint-auth.patch";
+      sha256 = "pFvZli3TilUt6YwdZztpB8Xq7O60XfuWUuPMMVSpqLw=";
+    })
   ];
 
   nativeBuildInputs = [
@@ -105,9 +118,7 @@ stdenv.mkDerivation rec {
     pkg-config
     gettext
     docbook-xsl-nons
-    # Switch to 4.5 in the 40.
-    docbook_xml_dtd_42
-    docbook_xml_dtd_43
+    docbook_xml_dtd_45
     gtk-doc
     perl
     wrapGAppsHook
@@ -137,6 +148,7 @@ stdenv.mkDerivation rec {
     evolution-data-server
     libical
     gtk3
+    gtk4
     gdm
     geoclue2
     adwaita-icon-theme
@@ -189,7 +201,7 @@ stdenv.mkDerivation rec {
 
   postFixup = ''
     # The services need typelibs.
-    for svc in org.gnome.Shell.Extensions org.gnome.Shell.Notifications org.gnome.Shell.Screencast; do
+    for svc in org.gnome.ScreenSaver org.gnome.Shell.Extensions org.gnome.Shell.Notifications org.gnome.Shell.Screencast; do
       wrapGApp $out/share/gnome-shell/$svc
     done
   '';
diff --git a/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch b/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch
index 2d7bdf303151d..6d888725b5d2e 100644
--- a/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch
+++ b/pkgs/desktops/gnome-3/core/gnome-shell/shew-gir-path.patch
@@ -3,7 +3,7 @@
 @@ -13,7 +13,7 @@ shew_sources = [
  libshew = library(full_name,
    sources: shew_sources,
-   dependencies: [gtk_dep],
+   dependencies: [gtk_dep, x11_dep],
 -  install_dir: pkglibdir,
 +  install_dir: get_option('prefix') / pkglibdir,
    install: true,
diff --git a/pkgs/desktops/gnome-3/core/gnome-software/default.nix b/pkgs/desktops/gnome-3/core/gnome-software/default.nix
index ff80efaa4de4d..d26dc801d693d 100644
--- a/pkgs/desktops/gnome-3/core/gnome-software/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-software/default.nix
@@ -11,8 +11,9 @@
 , packagekit
 , ostree
 , glib
-, appstream-glib
+, appstream
 , libsoup
+, libhandy
 , polkit
 , isocodes
 , gspell
@@ -42,11 +43,11 @@ in
 
 stdenv.mkDerivation rec {
   pname = "gnome-software";
-  version = "3.38.0";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-software/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0rjm486vgn6gi9mv1rqdcvr9cilmw6in4r6djqkxbxqll89cp2l7";
+    url = "mirror://gnome/sources/gnome-software/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "16q2902swxsjdxb1nj335sv1bb76rvq4w6dn4yszkwf3s0fd86in";
   };
 
   patches = [
@@ -76,8 +77,9 @@ stdenv.mkDerivation rec {
     gtk3
     glib
     packagekit
-    appstream-glib
+    appstream
     libsoup
+    libhandy
     gsettings-desktop-schemas
     gnome-desktop
     gspell
@@ -94,7 +96,6 @@ stdenv.mkDerivation rec {
   ];
 
   mesonFlags = [
-    "-Dubuntu_reviews=false"
     "-Dgudev=false"
     # FIXME: package malcontent parental controls
     "-Dmalcontent=false"
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 db978f953b794..44e24e7cdf645 100644
--- a/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-system-monitor/default.nix
@@ -1,26 +1,63 @@
-{ lib, stdenv, gettext, fetchurl, pkg-config, gtkmm3, libxml2
-, bash, gtk3, glib, wrapGAppsHook, meson, ninja, python3
-, gsettings-desktop-schemas, itstool, gnome3, librsvg, gdk-pixbuf, libgtop, systemd }:
+{ lib
+, stdenv
+, gettext
+, fetchurl
+, pkg-config
+, gtkmm3
+, libxml2
+, bash
+, gtk3
+, libhandy
+, glib
+, wrapGAppsHook
+, meson
+, ninja
+, python3
+, gsettings-desktop-schemas
+, itstool
+, gnome3
+, librsvg
+, gdk-pixbuf
+, libgtop
+, systemd
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-system-monitor";
-  version = "3.38.0";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-system-monitor/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1x5gd30g87im7fnqj63njlac69zywfd1r0vgsxkjag2hsns7mgvk";
+    url = "mirror://gnome/sources/gnome-system-monitor/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "06hxd4igxas2kyind5jwfq5qbfkknykpdfy2sy3anylhcx1hzczx";
   };
 
-  doCheck = true;
-
   nativeBuildInputs = [
-    pkg-config gettext itstool wrapGAppsHook meson ninja python3
+    pkg-config
+    gettext
+    itstool
+    wrapGAppsHook
+    meson
+    ninja
+    python3
   ];
+
   buildInputs = [
-    bash gtk3 glib libxml2 gtkmm3 libgtop gdk-pixbuf gnome3.adwaita-icon-theme librsvg
-    gsettings-desktop-schemas systemd
+    bash
+    gtk3
+    libhandy
+    glib
+    libxml2
+    gtkmm3
+    libgtop
+    gdk-pixbuf
+    gnome3.adwaita-icon-theme
+    librsvg
+    gsettings-desktop-schemas
+    systemd
   ];
 
+  doCheck = true;
+
   postPatch = ''
     chmod +x meson_post_install.py # patchShebangs requires executable file
     patchShebangs meson_post_install.py
diff --git a/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix b/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
index 52aee2a004a7e..de5cb767d543d 100644
--- a/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-terminal/default.nix
@@ -5,11 +5,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-terminal";
-  version = "3.38.3";
+  version = "3.40.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/gnome-terminal/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "EaWw1jXxX9znUINRpRD79OkqpTMVKlD/DHhF4xAuR2Q=";
+    sha256 = "1r6qd6w18gk83w32y6bvn4hg2hd7qvngak4ymwpgndyp41rwqw07";
   };
 
   buildInputs = [
diff --git a/pkgs/desktops/gnome-3/core/gnome-tour/default.nix b/pkgs/desktops/gnome-3/core/gnome-tour/default.nix
index 61f8761ce8175..4e6c58a14e8f6 100644
--- a/pkgs/desktops/gnome-3/core/gnome-tour/default.nix
+++ b/pkgs/desktops/gnome-3/core/gnome-tour/default.nix
@@ -22,11 +22,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-tour";
-  version = "3.38.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    hash = "sha256-hV/C/Lyz6e9zhe3FRw4Sox5gMqThDP57wVCTgcekjng=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    hash = "sha256-cGMiOGmgdHJ0FL7H23ONhQYhbuhMz8O8p9rFLkmMG/k=";
   };
 
   cargoVendorDir = "vendor";
diff --git a/pkgs/desktops/gnome-3/core/gvc-with-ucm-prePatch.nix b/pkgs/desktops/gnome-3/core/gvc-with-ucm-prePatch.nix
deleted file mode 100644
index b2db2baf025da..0000000000000
--- a/pkgs/desktops/gnome-3/core/gvc-with-ucm-prePatch.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ fetchFromGitLab }:
-
-let
-  # We need a gvc different then that which is shipped in the source tarball of
-  # whatever package that imports this file
-  gvc-src-with-ucm = fetchFromGitLab {
-    domain = "gitlab.gnome.org";
-    owner = "GNOME";
-    repo = "libgnome-volume-control";
-    rev = "7a621180b46421e356b33972e3446775a504139c";
-    sha256 = "07rkgh9f7qcmlpy6jqh944axzh3z38f47g48ii842f2i3a1mrbw9";
-  };
-in
-''
-  rm -r ./subprojects/gvc
-  cp -r ${gvc-src-with-ucm} ./subprojects/gvc
-''
diff --git a/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix b/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix
index 65d2bbc2157a4..f4b76996ac4b3 100644
--- a/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix
+++ b/pkgs/desktops/gnome-3/core/libgnome-keyring/default.nix
@@ -17,13 +17,6 @@ stdenv.mkDerivation rec {
   propagatedBuildInputs = [ glib gobject-introspection dbus libgcrypt ];
   nativeBuildInputs = [ pkg-config intltool ];
 
-  passthru = {
-    updateScript = gnome3.updateScript {
-      packageName = pname;
-      attrPath = "gnome3.${pname}";
-    };
-  };
-
   meta = {
     description = "Framework for managing passwords and other secrets";
     homepage = "https://wiki.gnome.org/Projects/GnomeKeyring";
diff --git a/pkgs/desktops/gnome-3/core/mutter/default.nix b/pkgs/desktops/gnome-3/core/mutter/default.nix
index 03c20e1ef6a70..2dda38bb4e7da 100644
--- a/pkgs/desktops/gnome-3/core/mutter/default.nix
+++ b/pkgs/desktops/gnome-3/core/mutter/default.nix
@@ -45,24 +45,31 @@
 
 let self = stdenv.mkDerivation rec {
   pname = "mutter";
-  version = "3.38.3";
+  version = "40.0";
 
   outputs = [ "out" "dev" "man" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/mutter/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-sjIec9Hj/i6Q5jAfQrugf02UvGR1aivxPXWunW+qIB8=";
+    url = "mirror://gnome/sources/mutter/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-enGzEuWmZ8U3SJUYilBqP2tnF2i8s2K2jv3FYnc9GY4=";
   };
 
   patches = [
     # Drop inheritable cap_sys_nice, to prevent the ambient set from leaking
     # from mutter/gnome-shell, see https://github.com/NixOS/nixpkgs/issues/71381
-    ./drop-inheritable.patch
+    # ./drop-inheritable.patch
 
     (substituteAll {
       src = ./fix-paths.patch;
       inherit zenity;
     })
+
+    # Fix non-deterministic build failure:
+    # https://gitlab.gnome.org/GNOME/mutter/-/issues/1682
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/mutter/commit/91117bb052ed0d69c8ea4159c1df15c814d90627.patch";
+      sha256 = "ek8hEoPP4S2TGOm6SGGOhUVIp4OT68nz0SQzZrceFUU=";
+    })
   ];
 
   mesonFlags = [
@@ -155,7 +162,7 @@ let self = stdenv.mkDerivation rec {
   meta = with lib; {
     description = "A window manager for GNOME";
     homepage = "https://gitlab.gnome.org/GNOME/mutter";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = teams.gnome.members;
     platforms = platforms.linux;
   };
diff --git a/pkgs/desktops/gnome-3/core/nautilus/default.nix b/pkgs/desktops/gnome-3/core/nautilus/default.nix
index 5ca1efe1ca329..29c44ecd6e901 100644
--- a/pkgs/desktops/gnome-3/core/nautilus/default.nix
+++ b/pkgs/desktops/gnome-3/core/nautilus/default.nix
@@ -9,6 +9,8 @@
 , python3
 , wrapGAppsHook
 , gtk3
+, libhandy
+, libportal
 , gnome3
 , gnome-autoar
 , glib-networking
@@ -32,11 +34,11 @@
 
 stdenv.mkDerivation rec {
   pname = "nautilus";
-  version = "3.38.2";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "19ln84d6s05h6cvx3c500bg5pvkz4k6p6ykmr2201rblq9afp76h";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0cwxr7bfa19dvzra81s9wfshzv0zv7ycpfffn4amigd0fh0vkkwf";
   };
 
   patches = [
@@ -71,6 +73,8 @@ stdenv.mkDerivation rec {
     gsettings-desktop-schemas
     gst_all_1.gst-plugins-base
     gtk3
+    libhandy
+    libportal
     libexif
     libnotify
     libseccomp
diff --git a/pkgs/desktops/gnome-3/core/rygel/default.nix b/pkgs/desktops/gnome-3/core/rygel/default.nix
index 75b2bd292704f..da82d30214ee3 100644
--- a/pkgs/desktops/gnome-3/core/rygel/default.nix
+++ b/pkgs/desktops/gnome-3/core/rygel/default.nix
@@ -96,6 +96,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "gnome3.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/core/simple-scan/default.nix b/pkgs/desktops/gnome-3/core/simple-scan/default.nix
index 64009cd75eb33..59d61febc06ac 100644
--- a/pkgs/desktops/gnome-3/core/simple-scan/default.nix
+++ b/pkgs/desktops/gnome-3/core/simple-scan/default.nix
@@ -14,6 +14,7 @@
 , gtk3
 , gusb
 , packagekit
+, libhandy
 , libwebp
 , libxml2
 , sane-backends
@@ -24,11 +25,11 @@
 
 stdenv.mkDerivation rec {
   pname = "simple-scan";
-  version = "3.38.2";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-qI2AcpaCiIZJzfzfqGkrCjSs3ladwICIjyea/DqcTQs=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-E4EbsqhhnmOkP8Lva3E1ny1cQITG1cizqtYXJLIHUa8=";
   };
 
   nativeBuildInputs = [
@@ -51,6 +52,7 @@ stdenv.mkDerivation rec {
     gnome3.adwaita-icon-theme
     gusb
     gtk3
+    libhandy
     libwebp
     packagekit
     sane-backends
diff --git a/pkgs/desktops/gnome-3/core/sushi/default.nix b/pkgs/desktops/gnome-3/core/sushi/default.nix
index f5e85a1f16cde..73097f99e516c 100644
--- a/pkgs/desktops/gnome-3/core/sushi/default.nix
+++ b/pkgs/desktops/gnome-3/core/sushi/default.nix
@@ -5,8 +5,6 @@
 , gettext
 , gobject-introspection
 , glib
-, clutter-gtk
-, clutter-gst
 , gnome3
 , gtksourceview4
 , gjs
@@ -40,14 +38,13 @@ stdenv.mkDerivation rec {
     gobject-introspection
     wrapGAppsHook
   ];
+
   buildInputs = [
     glib
     gtk3
     gnome3.evince
     icu
     harfbuzz
-    clutter-gtk
-    clutter-gst
     gjs
     gtksourceview4
     gdk-pixbuf
diff --git a/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix b/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
index 22ce6c72011d4..c5e859954fff4 100644
--- a/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
+++ b/pkgs/desktops/gnome-3/core/yelp-xsl/default.nix
@@ -10,11 +10,11 @@
 
 stdenv.mkDerivation rec {
   pname = "yelp-xsl";
-  version = "3.38.3";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/yelp-xsl/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-GTtqvUaXt7Qh6Yw21NMTXaCw/bUapT5gLtNo3YTR/QM=";
+    url = "mirror://gnome/sources/yelp-xsl/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-Nh7NTTP8zbO7CKaH9g5cPpCdLp47Ai2ETgSYINDPYrA=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/core/yelp/default.nix b/pkgs/desktops/gnome-3/core/yelp/default.nix
index 754a77486682f..1e1d679f852ed 100644
--- a/pkgs/desktops/gnome-3/core/yelp/default.nix
+++ b/pkgs/desktops/gnome-3/core/yelp/default.nix
@@ -5,11 +5,11 @@
 
 stdenv.mkDerivation rec {
   pname = "yelp";
-  version = "3.38.3";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/yelp/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-r9RqTQrrRrtCXFIAcdgY+LKzLmnnVqv9mXlodpphVJ0=";
+    url = "mirror://gnome/sources/yelp/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-B3dfoGzSg2Xs2Cm7FqhaaCiXqyHYzONFlrvvXNRVquA=";
   };
 
   nativeBuildInputs = [ pkg-config gettext itstool wrapGAppsHook ];
diff --git a/pkgs/desktops/gnome-3/default.nix b/pkgs/desktops/gnome-3/default.nix
index c4e203913bea5..7d72e16c326d9 100644
--- a/pkgs/desktops/gnome-3/default.nix
+++ b/pkgs/desktops/gnome-3/default.nix
@@ -176,8 +176,6 @@ lib.makeScope pkgs.newScope (self: with self; {
 
   gnome-documents = callPackage ./apps/gnome-documents { };
 
-  gnome-getting-started-docs = callPackage ./apps/gnome-getting-started-docs { };
-
   gnome-logs = callPackage ./apps/gnome-logs { };
 
   gnome-maps = callPackage ./apps/gnome-maps { };
@@ -361,4 +359,6 @@ lib.makeScope pkgs.newScope (self: with self; {
   maintainers = lib.teams.gnome.members;
 
   mutter328 = throw "Removed as Pantheon is upgraded to mutter334.";
+
+  gnome-getting-started-docs = throw "Removed in favour of gnome-tour.";
 })
diff --git a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
index 173e4a9e5b8c8..9a68f151b4ad5 100644
--- a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix
@@ -20,11 +20,11 @@
 
 stdenv.mkDerivation rec {
   pname = "devhelp";
-  version = "3.38.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/devhelp/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "13sa25mmlc49kn520hdfbskma65y7smvwmyhfggj0n9s3fazba2d";
+    url = "mirror://gnome/sources/devhelp/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0zr64qp5c6jcc3x5hmfp7jhzpi96qwr6xplyfkmz4kjzvr9xidjd";
   };
 
   nativeBuildInputs = [
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 bdbe73d2f88ca..6349a318456c7 100644
--- a/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
+++ b/pkgs/desktops/gnome-3/devtools/gnome-devel-docs/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-devel-docs";
-  version = "3.38.2";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-devel-docs/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1h6481hbz1c5p69r6h96hbgf560lhp1jibszscgw0s2yikdh6q8n";
+    url = "mirror://gnome/sources/gnome-devel-docs/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0zqp01ks8m3s6jn5xqd05rw4fwbvxy5qvcfg9g50b2ar2j7v1ar8";
   };
 
   passthru = {
diff --git a/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix b/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
index cb8ece571e71b..d432043d380bf 100644
--- a/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
+++ b/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
@@ -19,7 +19,7 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-shell-gsconnect";
-  version = "44";
+  version = "46";
 
   outputs = [ "out" "installedTests" ];
 
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     owner = "andyholmes";
     repo = "gnome-shell-extension-gsconnect";
     rev = "v${version}";
-    sha256 = "C+8mhK4UOs2iZplDyY45bCX0mMGgwVV/ZfaPpYUlWxA=";
+    sha256 = "161379kipr6z6gbhchb5b17djrkg5fbvblyyabzkc2gv05r3h6fw";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome-3/extensions/hot-edge/default.nix b/pkgs/desktops/gnome-3/extensions/hot-edge/default.nix
new file mode 100644
index 0000000000000..aaa5870996aba
--- /dev/null
+++ b/pkgs/desktops/gnome-3/extensions/hot-edge/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-hot-edge";
+  version = "jdoda";
+
+  src = fetchFromGitHub {
+    owner = "jdoda";
+    repo = "hotedge";
+    rev = "bb7f651becea5287241caf7cda246a68ab07dac8";
+    sha256 = "oeTs0kRan6b5relxzhK1IKbV0Yv2d5YdvvUPJ3fM9ik=";
+  };
+
+  dontBuild = true;
+
+  uuid = "hotedge@jonathan.jdoda.ca";
+
+  installPhase = ''
+    runHook preInstall
+    install -Dt $out/share/gnome-shell/extensions/${uuid} extension.js metadata.json stylesheet.css
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Replace the top-left hot corner with a bottom hot edge";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jtojnar ];
+    homepage = "https://github.com/jdoda/hotedge";
+  };
+}
diff --git a/pkgs/desktops/gnome-3/find-latest-version.py b/pkgs/desktops/gnome-3/find-latest-version.py
index ad80af24bcb8a..3078999e3e5bf 100644
--- a/pkgs/desktops/gnome-3/find-latest-version.py
+++ b/pkgs/desktops/gnome-3/find-latest-version.py
@@ -3,14 +3,21 @@ import math
 import json
 import requests
 import sys
+from libversion import Version
+from typing import Optional
 
 
 def version_to_list(version):
     return list(map(int, version.split(".")))
 
 
-def odd_unstable(version_str, selected):
-    version = version_to_list(version_str)
+def odd_unstable(version: Version, selected):
+    try:
+        version = version_to_list(version.value)
+    except:
+        # Failing to parse as a list of numbers likely means the version contains a string tag like “beta”, therefore it is not a stable release.
+        return selected != "stable"
+
     if len(version) < 2:
         return True
 
@@ -23,28 +30,34 @@ def odd_unstable(version_str, selected):
         return True
 
 
-def no_policy(version, selected):
+def tagged(version: Version, selected):
+    if selected == "stable":
+        return not ("alpha" in version.value or "beta" in version.value or "rc" in version.value)
+    else:
+        return True
+
+
+def no_policy(version: Version, selected):
     return True
 
 
 version_policies = {
     "odd-unstable": odd_unstable,
+    "tagged": tagged,
     "none": no_policy,
 }
 
 
-def make_version_policy(version_predicate, selected, upper_bound):
+def make_version_policy(version_predicate, selected, upper_bound: Optional[Version]):
     if not upper_bound:
-        upper_bound = [math.inf, math.inf]
+        return lambda version: version_predicate(version, selected)
     else:
-        upper_bound = version_to_list(upper_bound)
-
-    return lambda version: version_predicate(version, selected) and version_to_list(version) < upper_bound
+        return lambda version: version_predicate(version, selected) and version < upper_bound
 
 
 parser = argparse.ArgumentParser(description="Find latest version for a GNOME package by crawling their release server.")
 parser.add_argument("package-name", help="Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.")
-parser.add_argument("version-policy", help="Policy determining which versions are considered stable. For most GNOME packages, odd minor versions are unstable but there are exceptions.", choices=version_policies.keys(), nargs="?", default="odd-unstable")
+parser.add_argument("version-policy", help="Policy determining which versions are considered stable. GNOME packages usually denote stability by alpha/beta/rc tag in the version. For older packages, odd minor versions are unstable but there are exceptions.", choices=version_policies.keys(), nargs="?", default="tagged")
 parser.add_argument("requested-release", help="Most of the time, we will want to update to stable version but sometimes it is useful to test.", choices=["stable", "unstable"], nargs="?", default="stable")
 parser.add_argument("--upper-bound", dest="upper-bound", help="Only look for versions older than this one (useful for pinning dependencies).")
 
@@ -55,6 +68,8 @@ if __name__ == "__main__":
     package_name = getattr(args, "package-name")
     requested_release = getattr(args, "requested-release")
     upper_bound = getattr(args, "upper-bound")
+    if upper_bound:
+        upper_bound = Version(upper_bound)
     version_predicate = version_policies[getattr(args, "version-policy")]
     version_policy = make_version_policy(version_predicate, requested_release, upper_bound)
 
@@ -64,11 +79,11 @@ if __name__ == "__main__":
         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)
+    versions = map(Version, cache[2][package_name])
+    versions = sorted(filter(version_policy, versions))
 
     if len(versions) == 0:
         print("No versions matched.", file=sys.stderr)
         sys.exit(1)
 
-    print(versions[-1])
+    print(versions[-1].value)
diff --git a/pkgs/desktops/gnome-3/games/gnome-chess/default.nix b/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
index 918adc0eccffe..c8bea5a98d2db 100644
--- a/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-chess/default.nix
@@ -1,17 +1,50 @@
-{ lib, stdenv, fetchurl, meson, ninja, vala, pkg-config, wrapGAppsHook, gobject-introspection
-, gettext, itstool, libxml2, python3, gnome3, glib, gtk3, librsvg }:
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, vala
+, pkg-config
+, wrapGAppsHook4
+, gobject-introspection
+, gettext
+, itstool
+, libxml2
+, python3
+, gnome3
+, glib
+, gtk4
+, librsvg
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-chess";
-  version = "3.38.1";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-chess/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1bpmi5p5vvjdq2rlm5x9k4gpci8jbrjvdxr1q62h5znzq0vz0w0l";
+    url = "mirror://gnome/sources/gnome-chess/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "132nc96z0bryyi9d5gljsbwsa71rl8wm5w57jbhpwiv4fyjhgybk";
   };
 
-  nativeBuildInputs = [ meson ninja vala pkg-config gettext itstool libxml2 python3 wrapGAppsHook gobject-introspection ];
-  buildInputs = [ glib gtk3 librsvg gnome3.adwaita-icon-theme ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    gettext
+    itstool
+    libxml2
+    python3
+    wrapGAppsHook4
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    librsvg
+    gnome3.adwaita-icon-theme
+  ];
 
   postPatch = ''
     chmod +x meson_post_install.py
@@ -29,7 +62,7 @@ stdenv.mkDerivation rec {
     homepage = "https://wiki.gnome.org/Apps/Chess";
     description = "Play the classic two-player boardgame of chess";
     maintainers = teams.gnome.members;
-    license = licenses.gpl2;
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix b/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
index fe1f092fbf0f7..4bafc3b4a8d69 100644
--- a/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-klotski/default.nix
@@ -5,13 +5,13 @@
 
 let
   pname = "gnome-klotski";
-  version = "3.38.1";
+  version = "3.38.2";
 in stdenv.mkDerivation rec {
   name = "${pname}-${version}";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "00rwi6z0068pbq01sq2d389ffcqsh3ylq3i8zkrqvblqid1hvnlv";
+    sha256 = "1qm01hdd5yp8chig62bj10912vclbdvywwczs84sfg4zci2phqwi";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/gnome-mines/default.nix b/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
index 600b0d9846813..f074fb08daa90 100644
--- a/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-mines/default.nix
@@ -3,11 +3,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-mines";
-  version = "3.36.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0m2680r94nk61imym4x73j03jwfjd8cxm592m5ybiqdfdw6i723i";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0sf6kdvhr4pr3hddnj6ql9larz2wy108sri31id6x9g459nbly8z";
   };
 
   # gobject-introspection for finding vapi files
diff --git a/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix b/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
index 501b894a1df17..c3d9fb19725a1 100644
--- a/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-nibbles/default.nix
@@ -1,7 +1,26 @@
-{ lib, stdenv, fetchurl, pkg-config, gnome3, gtk3, wrapGAppsHook
-, librsvg, gsound, clutter-gtk, gettext, itstool, vala, python3
-, libxml2, libgee, libgnome-games-support, meson, ninja
-, desktop-file-utils, hicolor-icon-theme}:
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, gnome3
+, gtk3
+, wrapGAppsHook
+, librsvg
+, gsound
+, clutter-gtk
+, gettext
+, itstool
+, vala
+, python3
+, libxml2
+, libgee
+, libgnome-games-support
+, meson
+, ninja
+, desktop-file-utils
+, hicolor-icon-theme
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-nibbles";
@@ -12,14 +31,40 @@ stdenv.mkDerivation rec {
     sha256 = "1naknfbciydbym79a0jq039xf0033z8gyln48c0qsbcfr2qn8yj5";
   };
 
+  patches = [
+    # Fix build with recent Vala.
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-nibbles/-/commit/62964e9256fcac616109af874dbb2bd8342a9853.patch";
+      sha256 = "4VijELRxycS8rwi1HU9U3h9K/VtdQjJntfdtMN9Uz34=";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-nibbles/-/commit/1b48446068608aff9b5edf1fdbd4b8c0d9f0be94.patch";
+      sha256 = "X0+Go5ae4F06WTPDYc2HIIax8X4RDgUGO6A6Qp8UifQ=";
+    })
+  ];
+
   nativeBuildInputs = [
-    meson ninja vala python3
-    pkg-config wrapGAppsHook gettext itstool libxml2
-    desktop-file-utils hicolor-icon-theme
+    meson
+    ninja
+    vala
+    python3
+    pkg-config
+    wrapGAppsHook
+    gettext
+    itstool
+    libxml2
+    desktop-file-utils
+    hicolor-icon-theme
   ];
+
   buildInputs = [
-    gtk3 librsvg gsound clutter-gtk gnome3.adwaita-icon-theme
-    libgee libgnome-games-support
+    gtk3
+    librsvg
+    gsound
+    clutter-gtk
+    gnome3.adwaita-icon-theme
+    libgee
+    libgnome-games-support
   ];
 
   passthru = {
diff --git a/pkgs/desktops/gnome-3/games/gnome-robots/default.nix b/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
index e9a079216b733..1a49ee387609d 100644
--- a/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-robots/default.nix
@@ -1,26 +1,54 @@
-{ lib, stdenv, fetchurl, pkg-config, gnome3, gtk3, wrapGAppsHook
-, librsvg, gsound, gettext, itstool, libxml2, libgnome-games-support
-, libgee, meson, ninja, python3, desktop-file-utils, adwaita-icon-theme }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, gnome3
+, gtk3
+, wrapGAppsHook
+, librsvg
+, gsound
+, gettext
+, itstool
+, libxml2
+, libgnome-games-support
+, libgee
+, meson
+, ninja
+, vala
+, python3
+, desktop-file-utils
+, adwaita-icon-theme
+}:
 
 stdenv.mkDerivation rec {
   pname = "gnome-robots";
-  version = "3.38.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-robots/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1qpzpsyj9i5dsfy7anfb2dcm602bjkcgqj86fxvnxy6llx56ks0z";
-  };
-
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = "gnome-robots"; attrPath = "gnome3.gnome-robots"; };
+    url = "mirror://gnome/sources/gnome-robots/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "04fbykj576dq1h6cycgfhh8wd6yxmlsqykvj188sbwahay42zgvg";
   };
 
   nativeBuildInputs = [
-    pkg-config meson ninja python3
-    libxml2 wrapGAppsHook gettext itstool desktop-file-utils
+    pkg-config
+    meson
+    ninja
+    vala
+    python3
+    libxml2
+    wrapGAppsHook
+    gettext
+    itstool
+    desktop-file-utils
   ];
+
   buildInputs = [
-    gtk3 librsvg gsound libgnome-games-support libgee adwaita-icon-theme
+    gtk3
+    librsvg
+    gsound
+    libgnome-games-support
+    libgee
+    adwaita-icon-theme
   ];
 
   postPatch = ''
@@ -28,11 +56,18 @@ stdenv.mkDerivation rec {
     patchShebangs build-aux/meson_post_install.py
   '';
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "gnome-robots";
+      attrPath = "gnome3.gnome-robots";
+    };
+  };
+
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Apps/Robots";
     description = "Avoid the robots and make them crash into each other";
     maintainers = teams.gnome.members;
-    license = licenses.gpl2;
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix b/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
index 7c5fd8f1ac9a7..101f3c4f2bd01 100644
--- a/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-sudoku/default.nix
@@ -3,11 +3,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-sudoku";
-  version = "3.38.0";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/gnome-sudoku/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0cpxx63liczmax6ry06r5k0f221xpg2rqh49vkdj2snmqq61swrq";
+    url = "mirror://gnome/sources/gnome-sudoku/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1nr1g4q1gxqbzmaz15y3zgssnj7w01cq9l422ja4rglyg0fwjhbm";
   };
 
   nativeBuildInputs = [ meson ninja vala pkg-config gobject-introspection gettext itstool libxml2 python3 desktop-file-utils wrapGAppsHook ];
diff --git a/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix b/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
index 9b8c78d6e4a24..91bd963734461 100644
--- a/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
+++ b/pkgs/desktops/gnome-3/games/gnome-taquin/default.nix
@@ -1,6 +1,21 @@
-{ lib, stdenv, fetchurl, pkg-config, gnome3, gtk3, wrapGAppsHook
-, librsvg, gsound, gettext, itstool, libxml2
-, meson, ninja, vala, python3, desktop-file-utils
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, gnome3
+, gtk3
+, wrapGAppsHook
+, librsvg
+, gsound
+, gettext
+, itstool
+, libxml2
+, meson
+, ninja
+, vala
+, python3
+, desktop-file-utils
 }:
 
 stdenv.mkDerivation rec {
@@ -12,24 +27,49 @@ stdenv.mkDerivation rec {
     sha256 = "0kw131q0ad0rbsp6qifjc8fjlhvjxyihil8a76kj8ya9mn7kvnwn";
   };
 
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = "gnome-taquin"; attrPath = "gnome3.gnome-taquin"; };
-  };
+  patches = [
+    # Fix build with recent Vala.
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-taquin/-/commit/99dea5e7863e112f33f16e59898c56a4f1a547b3.patch";
+      sha256 = "U7djuMhb1XJaKAPyogQjaunOkbBK24r25YD7BgH05P4=";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-taquin/-/commit/66be44dc20d114e449fc33156e3939fd05dfbb16.patch";
+      sha256 = "RN41RCLHlJyXTARSH9qjsmpYi1UFeMRssoYxRsbngDQ=";
+    })
+  ];
 
   nativeBuildInputs = [
-    pkg-config wrapGAppsHook meson ninja python3
-    gettext itstool libxml2 vala desktop-file-utils
+    pkg-config
+    wrapGAppsHook
+    meson
+    ninja
+    python3
+    gettext
+    itstool
+    libxml2
+    vala
+    desktop-file-utils
   ];
   buildInputs = [
-    gtk3 librsvg gsound
+    gtk3
+    librsvg
+    gsound
     gnome3.adwaita-icon-theme
   ];
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "gnome-taquin";
+      attrPath = "gnome3.gnome-taquin";
+    };
+  };
+
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Apps/Taquin";
     description = "Move tiles so that they reach their places";
     maintainers = teams.gnome.members;
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/games/iagno/default.nix b/pkgs/desktops/gnome-3/games/iagno/default.nix
index db3b0d211512c..443a417da5054 100644
--- a/pkgs/desktops/gnome-3/games/iagno/default.nix
+++ b/pkgs/desktops/gnome-3/games/iagno/default.nix
@@ -26,6 +26,20 @@ stdenv.mkDerivation rec {
     sha256 = "097dw1l92l73xah9l56ka5mi3dvx48ffpiv33ni5i5rqw0ng7fc4";
   };
 
+  patches = [
+    # Fix build with recent Vala.
+    # https://gitlab.gnome.org/GNOME/dconf-editor/-/merge_requests/15
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/iagno/-/commit/e8a0aeec350ea80349582142c0e8e3cd3f1bce38.patch";
+      sha256 = "OO1x0Yx56UFzHTBsPAMYAjnJHlnTjdO1Vk7q6XU8wKQ=";
+    })
+    # https://gitlab.gnome.org/GNOME/dconf-editor/-/merge_requests/13
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/iagno/-/commit/508c0f94e5f182e50ff61be6e04f72574dee97cb.patch";
+      sha256 = "U7djuMhb1XJaKAPyogQjaunOkbBK24r25YD7BgH05P4=";
+    })
+  ];
+
   nativeBuildInputs = [
     meson
     ninja
diff --git a/pkgs/desktops/gnome-3/games/lightsoff/default.nix b/pkgs/desktops/gnome-3/games/lightsoff/default.nix
index 6783147840c71..7e43583d52982 100644
--- a/pkgs/desktops/gnome-3/games/lightsoff/default.nix
+++ b/pkgs/desktops/gnome-3/games/lightsoff/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   pname = "lightsoff";
-  version = "3.38.0";
+  version = "40.0.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/lightsoff/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0dpnnw8v1yk1p0y08f9c9xkgswqlm8x83dfn96798nif2zbypdnh";
+    url = "mirror://gnome/sources/lightsoff/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1aziy64g15bm83zfn3ifs20z9yvscdvsxbx132xnq77i0r3qvlxc";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome-3/games/swell-foop/default.nix b/pkgs/desktops/gnome-3/games/swell-foop/default.nix
index 33dd9de1b4231..d29ac55ce280d 100644
--- a/pkgs/desktops/gnome-3/games/swell-foop/default.nix
+++ b/pkgs/desktops/gnome-3/games/swell-foop/default.nix
@@ -1,32 +1,67 @@
-{ lib, stdenv, fetchurl, meson, ninja, pkg-config, vala, glib, gtk3, gnome3, desktop-file-utils
-, clutter, clutter-gtk, gettext, itstool, libxml2, wrapGAppsHook, python3 }:
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, vala
+, glib
+, gtk3
+, libgnome-games-support
+, gnome3
+, desktop-file-utils
+, clutter
+, clutter-gtk
+, gettext
+, itstool
+, libxml2
+, wrapGAppsHook
+, python3
+}:
 
-let
+stdenv.mkDerivation rec {
   pname = "swell-foop";
-  version = "3.34.1";
-in stdenv.mkDerivation rec {
-  name = "${pname}-${version}";
+  version = "40.1";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "1032psxm59nissi268bh3j964m4a0n0ah4dy1pf0ph27j3zvdik1";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "17r4b0g8s7z872wdd7ngk248z7fqx43vm2sym1bdqhzsi250s1y1";
   };
 
-  passthru = {
-    updateScript = gnome3.updateScript {
-      packageName = pname;
-      attrPath = "gnome3.${pname}";
-    };
-  };
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    wrapGAppsHook
+    python3
+    itstool
+    gettext
+    libxml2
+    desktop-file-utils
+  ];
 
-  nativeBuildInputs = [ meson ninja vala pkg-config wrapGAppsHook python3 itstool gettext libxml2 desktop-file-utils ];
-  buildInputs = [ glib gtk3 gnome3.adwaita-icon-theme clutter clutter-gtk ];
+  buildInputs = [
+    glib
+    gtk3
+    libgnome-games-support
+    gnome3.adwaita-icon-theme
+    clutter
+    clutter-gtk
+  ];
 
   postPatch = ''
     chmod +x meson_post_install.py # patchShebangs requires executable file
     patchShebangs meson_post_install.py
   '';
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "gnome3.${pname}";
+    };
+  };
+
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Apps/Swell%20Foop";
     description = "Puzzle game, previously known as Same GNOME";
diff --git a/pkgs/desktops/gnome-3/games/tali/default.nix b/pkgs/desktops/gnome-3/games/tali/default.nix
index b9409605f2478..e5aad262aa9b5 100644
--- a/pkgs/desktops/gnome-3/games/tali/default.nix
+++ b/pkgs/desktops/gnome-3/games/tali/default.nix
@@ -5,11 +5,11 @@
 
 stdenv.mkDerivation rec {
   pname = "tali";
-  version = "3.38.3";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/tali/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "AhVCi1DEoIJ/sN4uTmum5WZ4+bp22NJbfuyoUhXyWjk=";
+    url = "mirror://gnome/sources/tali/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "19gic6yjg3bg6jf87zvhm7ihsz1y58dz86p4x3a16xdhjyrk40q2";
   };
 
   passthru = {
diff --git a/pkgs/desktops/gnome-3/misc/geary/Bump-client-test-timeout-to-300s.patch b/pkgs/desktops/gnome-3/misc/geary/Bump-client-test-timeout-to-300s.patch
deleted file mode 100644
index abd8772cf31e0..0000000000000
--- a/pkgs/desktops/gnome-3/misc/geary/Bump-client-test-timeout-to-300s.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-diff --git a/test/meson.build b/test/meson.build
-index 6ea5e27a..450c03e3 100644
---- a/test/meson.build
-+++ b/test/meson.build
-@@ -167,4 +167,4 @@ test_integration_bin = executable('test-integration',
- )
- 
- test('engine-tests', test_engine_bin)
--test('client-tests', test_client_bin)
-+test('client-tests', test_client_bin, timeout: 300)
diff --git a/pkgs/desktops/gnome-3/misc/geary/default.nix b/pkgs/desktops/gnome-3/misc/geary/default.nix
index ff97d34f7ce45..3abddaedaec69 100644
--- a/pkgs/desktops/gnome-3/misc/geary/default.nix
+++ b/pkgs/desktops/gnome-3/misc/geary/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
 , pkg-config
 , gtk3
@@ -15,6 +16,7 @@
 , libsecret
 , gmime3
 , isocodes
+, icu
 , libxml2
 , gettext
 , sqlite
@@ -37,6 +39,7 @@
 , gobject-introspection
 , gspell
 , appstream-glib
+, libstemmer
 , libytnef
 , libhandy
 , gsound
@@ -44,18 +47,13 @@
 
 stdenv.mkDerivation rec {
   pname = "geary";
-  version = "3.38.1";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "04p8fjkz4xp5afp0ld1m09pnv0zkcx51l7hf23amfrjkk0kj2bp7";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1c2nd35500ng28223y5pszc7fh8g16njj34f6p5xc9594lvj0mik";
   };
 
-  patches = [
-    # Longer timeout for client test.
-    ./Bump-client-test-timeout-to-300s.patch
-  ];
-
   nativeBuildInputs = [
     appstream-glib
     desktop-file-utils
@@ -84,12 +82,14 @@ stdenv.mkDerivation rec {
     gspell
     gtk3
     isocodes
+    icu
     json-glib
     libgee
     libhandy
     libpeas
     libsecret
     libunwind
+    libstemmer
     libytnef
     sqlite
     webkitgtk
@@ -104,7 +104,8 @@ stdenv.mkDerivation rec {
   ];
 
   mesonFlags = [
-    "-Dcontractor=true" # install the contractor file (Pantheon specific)
+    "-Dprofile=release"
+    "-Dcontractor=enabled" # install the contractor file (Pantheon specific)
   ];
 
   # NOTE: Remove `build-auxyaml_to_json.py` when no longer needed, see:
@@ -118,21 +119,23 @@ stdenv.mkDerivation rec {
     patchShebangs build-aux/yaml_to_json.py
 
     chmod +x desktop/geary-attach
-
-    # Drop test that breaks after webkitgtk 2.32.0 update
-    # https://gitlab.gnome.org/GNOME/geary/-/issues/1180
-    sed -i '/add_test("edit_context_font", edit_context_font);/d' test/js/composer-page-state-test.vala
   '';
 
-  doCheck = true;
+  # Some tests time out.
+  doCheck = false;
 
   checkPhase = ''
+    runHook preCheck
+
     NO_AT_BRIDGE=1 \
     GIO_EXTRA_MODULES=$GIO_EXTRA_MODULES:${glib-networking}/lib/gio/modules \
+    HOME=$TMPDIR \
     XDG_DATA_DIRS=$XDG_DATA_DIRS:${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${shared-mime-info}/share:${folks}/share/gsettings-schemas/${folks.name} \
     xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
       --config-file=${dbus.daemon}/share/dbus-1/session.conf \
       meson test -v --no-stdsplit
+
+    runHook postCheck
   '';
 
   preFixup = ''
diff --git a/pkgs/desktops/gnome-3/misc/gitg/default.nix b/pkgs/desktops/gnome-3/misc/gitg/default.nix
index 0f4f8e67737ae..4920575159122 100644
--- a/pkgs/desktops/gnome-3/misc/gitg/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gitg/default.nix
@@ -1,6 +1,6 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
-, fetchpatch
 , vala
 , gettext
 , pkg-config
@@ -36,16 +36,16 @@ stdenv.mkDerivation rec {
     sha256 = "0npg4kqpwl992fgjd2cn3fh84aiwpdp9kd8z7rw2xaj2iazsm914";
   };
 
-  postPatch = ''
-    chmod +x meson_post_install.py
-    patchShebangs meson_post_install.py
-
-    substituteInPlace tests/libgitg/test-commit.vala --replace "/bin/bash" "${bash}/bin/bash"
-  '';
-
-  doCheck = true;
-
-  enableParallelBuilding = true;
+  nativeBuildInputs = [
+    gobject-introspection
+    gettext
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
 
   buildInputs = [
     adwaita-icon-theme
@@ -63,16 +63,14 @@ stdenv.mkDerivation rec {
     libsoup
   ];
 
-  nativeBuildInputs = [
-    gobject-introspection
-    gettext
-    meson
-    ninja
-    pkg-config
-    python3
-    vala
-    wrapGAppsHook
-  ];
+  doCheck = false; # FAIL: tests-gitg gtk_style_context_add_provider_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+
+    substituteInPlace tests/libgitg/test-commit.vala --replace "/bin/bash" "${bash}/bin/bash"
+  '';
 
   preFixup = ''
     gappsWrapperArgs+=(
@@ -91,7 +89,7 @@ stdenv.mkDerivation rec {
     homepage = "https://wiki.gnome.org/Apps/Gitg";
     description = "GNOME GUI client to view git repositories";
     maintainers = with maintainers; [ domenkozar ];
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix b/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
index 1947179028bf2..21dedba16ad00 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-applets/default.nix
@@ -16,17 +16,18 @@
 , adwaita-icon-theme
 , libgweather
 , gucharmap
+, tracker
 , polkit
 , gnome3
 }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-applets";
-  version = "3.38.0";
+  version = "3.40.0";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "04qrzycwm7pz556agl08xw3d0r1mmr4ja9n9jfijjxs9inrhp5yc";
+    sha256 = "1k6mdkg16ia29fyg8ikf4dfs51gnrmg0f8xwpvd3192lhfsbsh19";
   };
 
   nativeBuildInputs = [
@@ -48,7 +49,7 @@ stdenv.mkDerivation rec {
     adwaita-icon-theme
     libgweather
     gucharmap
-    # tracker # Tracker 3 not supported.
+    tracker
     polkit
     wirelesstools
     linuxPackages.cpupower
@@ -65,6 +66,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "gnome3.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix b/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
index 2d66dabb5a086..8d5f07579c6df 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-autoar/default.nix
@@ -11,13 +11,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-autoar";
-  version = "0.3.1";
+  version = "0.3.2";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/gnome-autoar/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1y6hh5dldhdq7mpbmd571zl0yadfackvifhnxvykkqqddwz72y0f";
+    sha256 = "0wkwix44yg126xn1v4f2j60bv9yiyadfpzf8ifx0bvd9x5f4v354";
   };
 
   passthru = {
diff --git a/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix b/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
index 935778aa6490b..501000f204fd7 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
@@ -30,7 +30,7 @@
 }:
 let
   pname = "gnome-flashback";
-  version = "3.38.0";
+  version = "3.40.0";
 
   # From data/sessions/Makefile.am
   requiredComponentsCommon = [
@@ -61,7 +61,7 @@ let
 
     src = fetchurl {
       url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-      sha256 = "1r51yqdqichp4jv54kiaqrh0xhykngr4ymlvrkjhzdhivwadsg4m";
+      sha256 = "0fxv13m2q9z1q3i9jbggl35cb7jlckbdrfsr5sf030hr1w836gz0";
     };
 
     # make .desktop Execs absolute
@@ -123,6 +123,7 @@ let
       updateScript = gnome3.updateScript {
         packageName = pname;
         attrPath = "gnome3.${pname}";
+        versionPolicy = "odd-unstable";
       };
 
       mkSessionForWm = { wmName, wmLabel, wmCommand }:
diff --git a/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix b/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
index b820f7750dc06..113849b935a75 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
@@ -23,13 +23,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-panel";
-  version = "3.38.0";
+  version = "3.40.0";
 
   outputs = [ "out" "dev" "man" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    hash = "sha256-GosVrvCgKmyqm5IJyNP7Q+e5h6OAB2aRwj8DFOwwLxU=";
+    hash = "sha256-nxNQde3GZs8rnKkd41xnA+KxdxwQp3B0FPtlbCilmzs=";
   };
 
   # make .desktop Exec absolute
@@ -85,6 +85,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "gnome3.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix b/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
index b6a12fca13349..5d57d7616f090 100644
--- a/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gnome-tweaks/default.nix
@@ -10,7 +10,7 @@
 , gsettings-desktop-schemas
 , gtk3
 , itstool
-, libhandy_0
+, libhandy
 , libnotify
 , libsoup
 , libxml2
@@ -20,13 +20,13 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "gnome-tweaks";
-  version = "3.34.1";
+  version = "40.0";
   format = "other";
   strictDeps = false; # https://github.com/NixOS/nixpkgs/issues/56943
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "19y62dj4n5i6v4zpjllxl51dch6ndy8xs45v5aqmmq9xyfrqk5yq";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "+V8/4DGwsBwC95oWWfiJFS03cq4+RN+EA9FGC6Xuw2o=";
   };
 
   nativeBuildInputs = [
@@ -51,7 +51,7 @@ python3Packages.buildPythonApplication rec {
     gnome3.mutter
     gsettings-desktop-schemas
     gtk3
-    libhandy_0
+    libhandy
     libnotify
     libsoup
   ];
@@ -72,10 +72,10 @@ python3Packages.buildPythonApplication rec {
   };
 
   meta = with lib; {
-    homepage = "https://wiki.gnome.org/action/show/Apps/GnomeTweakTool";
+    homepage = "https://wiki.gnome.org/Apps/Tweaks";
     description = "A tool to customize advanced GNOME 3 options";
     maintainers = teams.gnome.members;
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/desktops/gnome-3/misc/gpaste/default.nix b/pkgs/desktops/gnome-3/misc/gpaste/default.nix
index 7dbf6daffa7f2..15fcfbfe390a3 100644
--- a/pkgs/desktops/gnome-3/misc/gpaste/default.nix
+++ b/pkgs/desktops/gnome-3/misc/gpaste/default.nix
@@ -17,14 +17,14 @@
 }:
 
 stdenv.mkDerivation rec {
-  version = "3.38.6";
+  version = "3.40.2";
   pname = "gpaste";
 
   src = fetchFromGitHub {
     owner = "Keruspe";
     repo = "GPaste";
     rev = "v${version}";
-    sha256 = "sha256-6CIzOBq/Y9XKiv/lQAtDYK6bxhT1WxjbXhu4+noO5nI=";
+    sha256 = "sha256-DUikcnkDBRkCwPLrl8lkNr+SeNpc3bPwPTWRn91nOo4=";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch b/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
index c8a3fad2272b0..46e30ce2e2cb1 100644
--- a/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
+++ b/pkgs/desktops/gnome-3/misc/gpaste/fix-paths.patch
@@ -17,7 +17,7 @@
  
 +imports.gi.GIRepository.Repository.prepend_search_path('@typelibPath@');
 +
- const { GPaste } = imports.gi;
+ //const { GPaste } = imports.gi;
  
  const ExtensionUtils = imports.misc.extensionUtils;
 --- a/src/libgpaste/settings/gpaste-settings.c
diff --git a/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix b/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
index 01899d20b5774..f594c1b0a4dc8 100644
--- a/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
+++ b/pkgs/desktops/gnome-3/misc/libgnome-games-support/default.nix
@@ -14,11 +14,11 @@
 
 stdenv.mkDerivation rec {
   pname = "libgnome-games-support";
-  version = "1.8.0";
+  version = "1.8.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1pdk9hc30xdlv0ba24f7pvcr2d5370zykrmpws7hgmjgl4wfbpdb";
+    sha256 = "0gs1k88wwafn5cdyb5yq1cxpi9azachb0ysxgwh15sx77g6plyy3";
   };
 
   nativeBuildInputs = [
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "gnome3.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/misc/metacity/default.nix b/pkgs/desktops/gnome-3/misc/metacity/default.nix
index c74d57d9f4ddd..36c6b66d5ca34 100644
--- a/pkgs/desktops/gnome-3/misc/metacity/default.nix
+++ b/pkgs/desktops/gnome-3/misc/metacity/default.nix
@@ -18,11 +18,11 @@
 
 stdenv.mkDerivation rec {
   pname = "metacity";
-  version = "3.38.0";
+  version = "3.40.0";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1b0i9sq6qa540f2006cv1p8i6lxg1h6w00apxwzwjpfqn0hk26c1";
+    sha256 = "1d8mj2nshijshfiaica8dirfws1p6i9631frq7q23b3y91jiyk12";
   };
 
   patches = [
@@ -58,6 +58,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "gnome3.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix b/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
index 4db81228a0734..0008f66e9adff 100644
--- a/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
+++ b/pkgs/desktops/gnome-3/misc/nautilus-python/default.nix
@@ -49,6 +49,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "gnome3.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/desktops/gnome-3/update.nix b/pkgs/desktops/gnome-3/update.nix
index 1bceddf77eb5b..928eac45160ab 100644
--- a/pkgs/desktops/gnome-3/update.nix
+++ b/pkgs/desktops/gnome-3/update.nix
@@ -1,8 +1,8 @@
 { stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }:
-{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable", freeze ? false }:
+{ packageName, attrPath ? packageName, versionPolicy ? "tagged", freeze ? false }:
 
 let
-  python = python3.withPackages (p: [ p.requests ]);
+  python = python3.withPackages (p: [ p.requests p.libversion ]);
   upperBoundFlag =
     let
       package = lib.attrByPath (lib.splitString "." attrPath) (throw "Cannot find attribute ‘${attrPath}’.") pkgs;
diff --git a/pkgs/desktops/pantheon/apps/appcenter/default.nix b/pkgs/desktops/pantheon/apps/appcenter/default.nix
index 1c86de616077a..a3e75d231f196 100644
--- a/pkgs/desktops/pantheon/apps/appcenter/default.nix
+++ b/pkgs/desktops/pantheon/apps/appcenter/default.nix
@@ -37,9 +37,18 @@ stdenv.mkDerivation rec {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "sha256-8r0DlmG8xlCQ1uFHZQjXG2ls4VBrsRzrVY8Ey3/OYAU=";
+    sha256 = "MsaXdmL+M+NYAJrrwluleeNxqQg0soFbO/G/FqibBFI=";
   };
 
+  patches = [
+    # Allow build with appstream 0.14.x
+    # https://github.com/elementary/appcenter/pull/1493
+    (fetchpatch {
+      url = "https://github.com/elementary/appcenter/commit/5807dd13fe3c715f26225aed8d7a0abdea0c2a64.patch";
+      sha256 = "BvEahG9lU9ZdgooFDFhm5evRvnKVcmcHLdmZPb85gbo=";
+    })
+  ];
+
   passthru = {
     updateScript = nix-update-script {
       attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix b/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
index f9ab49a72b953..cf0d0d812fe14 100644
--- a/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix
@@ -18,6 +18,7 @@
 , python3
 , libnotify
 , libical
+, libgdata
 , evolution-data-server
 , appstream-glib
 , elementary-icon-theme
@@ -67,6 +68,7 @@ stdenv.mkDerivation rec {
     libgee
     libical
     libnotify
+    libgdata # required by some dependency transitively
   ];
 
   postPatch = ''
diff --git a/pkgs/desktops/pantheon/apps/elementary-code/default.nix b/pkgs/desktops/pantheon/apps/elementary-code/default.nix
index 7339038b08090..e8b10227eaa42 100644
--- a/pkgs/desktops/pantheon/apps/elementary-code/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-code/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , fetchFromGitHub
+, fetchpatch
 , nix-update-script
 , pantheon
 , pkg-config
@@ -39,6 +40,14 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-4AEayj+K/lOW6jEYmvmdan1kTqqqLL1YzwcU7/3PH5U=";
   };
 
+  patches = [
+    # Fix build with latest Vala.
+    (fetchpatch {
+      url = "https://github.com/elementary/code/commit/c50580d3336296823da9a2c50b824f21fde50286.patch";
+      sha256 = "F+ZYlnZWYCU68G4oayLfbTnvSnTb4YA0zHVGD/Uf3KA=";
+    })
+  ];
+
   passthru = {
     updateScript = nix-update-script {
       attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/apps/elementary-music/default.nix b/pkgs/desktops/pantheon/apps/elementary-music/default.nix
index 24eafcabdea08..5a5c314b3e9b6 100644
--- a/pkgs/desktops/pantheon/apps/elementary-music/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-music/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , fetchFromGitHub
+, fetchpatch
 , nix-update-script
 , pantheon
 , pkg-config
@@ -41,6 +42,14 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-3GZoBCu9rF+BnNk9APBzKWO1JYg1XYWwrEvwcjWvYDE=";
   };
 
+  patches = [
+    # Fix build with latest Vala.
+    (fetchpatch {
+      url = "https://github.com/elementary/music/commit/9ed3bbb3a0d68e289a772b4603f58e52a4973316.patch";
+      sha256 = "fFO97SQzTc2fYFJFGfFPSUCdkCgZxfX1fjDQ7GH4BUs=";
+    })
+  ];
+
   passthru = {
     updateScript = nix-update-script {
       attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/apps/elementary-photos/default.nix b/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
index ca0b3951351f5..7280051361a9b 100644
--- a/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
+++ b/pkgs/desktops/pantheon/apps/elementary-photos/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , fetchFromGitHub
+, fetchpatch
 , nix-update-script
 , pantheon
 , meson
@@ -45,6 +46,14 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-bTk4shryAWWMrKX3mza6xQ05qpBPf80Ey7fmYgKLUiY=";
   };
 
+  patches = [
+    # Fix build with latest Vala.
+    (fetchpatch {
+      url = "https://github.com/elementary/photos/commit/27e529fc96da828982563e2e19a6f0cef883a29e.patch";
+      sha256 = "w39wh45VHggCs62TN6wpUEyz/hJ1y7qL1Ox+sp0Pt2s=";
+    })
+  ];
+
   passthru = {
     updateScript = nix-update-script {
       attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
index 06d8041339db5..7387ea34e4de6 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/printers/default.nix
@@ -25,6 +25,14 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-tnAJyyPN/Xy1pmlgBpgO2Eb5CeHrRltjQTHmuTPBt8s=";
   };
 
+  patches = [
+    # Fix build with latest Vala.
+    (fetchpatch {
+      url = "https://github.com/elementary/switchboard-plug-printers/commit/5eced5ddda6f229d7265ea0a713f6c1cd181a526.patch";
+      sha256 = "lPTNqka6jjvv1JnAqVzVIQBIdDXlCOQ5ASvgZNuEUC8=";
+    })
+  ];
+
   passthru = {
     updateScript = nix-update-script {
       attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
index 6a18f6b6e2327..26e26de33b121 100644
--- a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
+++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , fetchFromGitHub
+, fetchpatch
 , nix-update-script
 , pantheon
 , meson
@@ -28,6 +29,14 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-Sws6FqUL7QAROInDrcqYAp6j1TCC4aGV0/hi5Kmm5wQ=";
   };
 
+  patches = [
+    # Fix build with latest Vala.
+    (fetchpatch {
+      url = "https://github.com/elementary/switchboard-plug-security-privacy/commit/c8e422e630bbee0badcf4df26364c9e83e06bad0.patch";
+      sha256 = "5Gm+muZiCraJC5JaGVVo0HDJ7KxjOpclHRW1RKsk3bc=";
+    })
+  ];
+
   passthru = {
     updateScript = nix-update-script {
       attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
index c4e070aeacb99..03954fac64489 100644
--- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
@@ -15,6 +15,7 @@
 , libgee
 , libxml2
 , libsoup
+, libgdata
 , elementary-calendar
 }:
 
@@ -52,6 +53,7 @@ stdenv.mkDerivation rec {
     libical
     libsoup
     wingpanel
+    libgdata # required by some dependency transitively
   ];
 
   postPatch = ''
diff --git a/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix b/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
index a37e43cd35516..a9a310ade8282 100644
--- a/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
+++ b/pkgs/desktops/pantheon/services/elementary-settings-daemon/default.nix
@@ -2,6 +2,7 @@
 , substituteAll
 , fetchurl
 , fetchgit
+, fetchpatch
 , meson
 , ninja
 , pkg-config
@@ -73,6 +74,20 @@ stdenv.mkDerivation rec {
     #"${patchPath}/ubuntu_ibus_configs.patch"
     # https://github.com/elementary/os-patches/blob/6975d1c254cb6ab913b8e2396877203aea8eaa65/debian/patches/elementary-dpms.patch
     ./elementary-dpms.patch
+
+    # Query GWeather DB on the fly instead of caching.
+    # Needed for the next patch to apply.
+    # https://gitlab.gnome.org/GNOME/gnome-settings-daemon/merge_requests/175
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-settings-daemon/commit/df6c69f028d27b53ac86829e11df103b25ed5a74.patch";
+      sha256 = "bKZkPzN64DXMgitjn0vUzUvKl7ldhN/mNVtPKVmHd0Q=";
+    })
+    # Adjust to libgweather changes.
+    # https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/217
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-settings-daemon/commit/82d88014dfca2df7e081712870e1fb017c16b808.patch";
+      sha256 = "H5k/v+M2bRaswt5nrDJFNn4gS4BdB0UfzdjUCT4yLKg=";
+    })
   ];
 
   nativeBuildInputs = [
diff --git a/pkgs/development/compilers/compcert/default.nix b/pkgs/development/compilers/compcert/default.nix
index 611efb11f4450..4679e01e9002c 100644
--- a/pkgs/development/compilers/compcert/default.nix
+++ b/pkgs/development/compilers/compcert/default.nix
@@ -27,6 +27,33 @@ let param = {
   };
   "3.8" = {
     sha256 = "1gzlyxvw64ca12qql3wnq3bidcx9ygsklv9grjma3ib4hvg7vnr7";
+    patches = [
+     # Support for Coq 8.12.2
+     (fetchpatch {
+        url = "https://github.com/AbsInt/CompCert/commit/06956421b4307054af221c118c5f59593c0e67b9.patch";
+        sha256 = "1f90q6j3xfvnf3z830bkd4d8526issvmdlrjlc95bfsqs78i1yrl";
+      })
+     # Support for Coq 8.13.0
+     (fetchpatch {
+        url = "https://github.com/AbsInt/CompCert/commit/0895388e7ebf9c9f3176d225107e21968919fb97.patch";
+        sha256 = "0qhkzgb2xl5kxys81pldp3mr39gd30lvr2l2wmplij319vp3xavd";
+      })
+     # Support for Coq 8.13.1
+     (fetchpatch {
+        url = "https://github.com/AbsInt/CompCert/commit/6bf310dd678285dc193798e89fc2c441d8430892.patch";
+        sha256 = "026ahhvpj5pksy90f8pnxgmhgwfqk4kwyvcf8x3dsanvz98d4pj5";
+      })
+     # Drop support for Coq < 8.9
+     (fetchpatch {
+        url = "https://github.com/AbsInt/CompCert/commit/7563a5df926a4c6fb1489a7a4c847641c8a35095.patch";
+        sha256 = "05vkslzy399r3dm6dmjs722rrajnyfa30xsyy3djl52isvn4gyfb";
+      })
+     # Support for Coq 8.13.2
+     (fetchpatch {
+        url = "https://github.com/AbsInt/CompCert/commit/48bc183167c4ce01a5c9ea86e49d60530adf7290.patch";
+        sha256 = "0j62lppfk26d1brdp3qwll2wi4gvpx1k70qivpvby5f7dpkrkax1";
+      })
+    ];
     useExternalFlocq = true;
   };
 }."${version}"; in
diff --git a/pkgs/development/compilers/ghc/8.10.2-binary.nix b/pkgs/development/compilers/ghc/8.10.2-binary.nix
index 02373d00b10fd..42103e486055f 100644
--- a/pkgs/development/compilers/ghc/8.10.2-binary.nix
+++ b/pkgs/development/compilers/ghc/8.10.2-binary.nix
@@ -31,6 +31,8 @@ let
     else
       "${lib.getLib glibc}/lib/ld-linux*";
 
+  downloadsUrl = "https://downloads.haskell.org/ghc";
+
 in
 
 stdenv.mkDerivation rec {
@@ -41,23 +43,23 @@ stdenv.mkDerivation rec {
   # https://downloads.haskell.org/~ghc/8.10.2/
   src = fetchurl ({
     i686-linux = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-i386-deb9-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-i386-deb9-linux.tar.xz";
       sha256 = "0bvwisl4w0z5z8z0da10m9sv0mhm9na2qm43qxr8zl23mn32mblx";
     };
     x86_64-linux = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-x86_64-deb10-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-deb10-linux.tar.xz";
       sha256 = "0chnzy9j23b2wa8clx5arwz8wnjfxyjmz9qkj548z14cqf13slcl";
     };
     armv7l-linux = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-armv7-deb10-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-armv7-deb10-linux.tar.xz";
       sha256 = "1j41cq5d3rmlgz7hzw8f908fs79gc5mn3q5wz277lk8zdf19g75v";
     };
     aarch64-linux = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-aarch64-deb10-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-deb10-linux.tar.xz";
       sha256 = "14smwl3741ixnbgi0l51a7kh7xjkiannfqx15b72svky0y4l3wjw";
     };
     x86_64-darwin = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz";
       sha256 = "1hngyq14l4f950hzhh2d204ca2gfc98pc9xdasxihzqd1jq75dzd";
     };
   }.${stdenv.hostPlatform.system}
diff --git a/pkgs/development/compilers/ghc/8.6.5-binary.nix b/pkgs/development/compilers/ghc/8.6.5-binary.nix
index ca984c36957df..7330e3bac2ad4 100644
--- a/pkgs/development/compilers/ghc/8.6.5-binary.nix
+++ b/pkgs/development/compilers/ghc/8.6.5-binary.nix
@@ -28,6 +28,8 @@ let
     else
       "${lib.getLib glibc}/lib/ld-linux*";
 
+  downloadsUrl = "https://downloads.haskell.org/ghc";
+
 in
 
 stdenv.mkDerivation rec {
@@ -39,22 +41,22 @@ stdenv.mkDerivation rec {
   src = fetchurl ({
     i686-linux = {
       # Don't use the Fedora27 build (as below) because there isn't one!
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-i386-deb9-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-i386-deb9-linux.tar.xz";
       sha256 = "1p2h29qghql19ajk755xa0yxkn85slbds8m9n5196ris743vkp8w";
     };
     x86_64-linux = {
       # This is the Fedora build because it links against ncurses6 where the
       # deb9 one links against ncurses5, see here
       # https://github.com/NixOS/nixpkgs/issues/85924 for a discussion
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-x86_64-fedora27-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-fedora27-linux.tar.xz";
       sha256 = "18dlqm5d028fqh6ghzn7pgjspr5smw030jjzl3kq6q1kmwzbay6g";
     };
     aarch64-linux = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-aarch64-ubuntu18.04-linux.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-aarch64-ubuntu18.04-linux.tar.xz";
       sha256 = "11n7l2a36i5vxzzp85la2555q4m34l747g0pnmd81cp46y85hlhq";
     };
     x86_64-darwin = {
-      url = "http://haskell.org/ghc/dist/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz";
+      url = "${downloadsUrl}/${version}/ghc-${version}-x86_64-apple-darwin.tar.xz";
       sha256 = "0s9188vhhgf23q3rjarwhbr524z6h2qga5xaaa2pma03sfqvvhfz";
     };
   }.${stdenv.hostPlatform.system}
diff --git a/pkgs/development/compilers/gleam/default.nix b/pkgs/development/compilers/gleam/default.nix
index 474a960d35f26..8ceac64a62281 100644
--- a/pkgs/development/compilers/gleam/default.nix
+++ b/pkgs/development/compilers/gleam/default.nix
@@ -2,13 +2,13 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "gleam";
-  version = "0.14.4";
+  version = "0.15.0";
 
   src = fetchFromGitHub {
     owner = "gleam-lang";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-iW4mH9zLJzD+E+H/b0NAbPWzfSbDmRpirDwrLlyZppI=";
+    sha256 = "sha256-sB+QTokH/ngcED40+vw+okFLFt+JSJQ/CbOgzlt/YmE=";
   };
 
   nativeBuildInputs = [ pkg-config ];
@@ -16,7 +16,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = [ openssl ] ++
     lib.optionals stdenv.isDarwin [ Security libiconv ];
 
-  cargoSha256 = "sha256-ErLwrve2Fpyg9JaH3y7VIYuFcOPVP++XAIrRvv5dGm0=";
+  cargoSha256 = "sha256-C/OAzg24kulIvIZwV9L5hwvf/BkF05spJPskr2maqrM=";
 
   meta = with lib; {
     description = "A statically typed language for the Erlang VM";
diff --git a/pkgs/development/compilers/vala/default.nix b/pkgs/development/compilers/vala/default.nix
index b56f509b31aa8..55936fd3db23d 100644
--- a/pkgs/development/compilers/vala/default.nix
+++ b/pkgs/development/compilers/vala/default.nix
@@ -40,6 +40,8 @@ let
 
         "0.50" = ./disable-graphviz-0.46.1.patch;
 
+        "0.52" = ./disable-graphviz-0.46.1.patch;
+
       }.${lib.versions.majorMinor version} or (throw "no graphviz patch for this version of vala");
 
     disableGraphviz = lib.versionAtLeast version "0.38" && !withGraphviz;
@@ -125,8 +127,8 @@ in rec {
   };
 
   vala_0_48 = generic {
-    version = "0.48.14";
-    sha256 = "0iz3zzimmk5wxvy5bi75v8ckv153gjrz3r5iqvl8xqackzi7v9fw";
+    version = "0.48.17";
+    sha256 = "1wlb4vd7k6hg10s09npglbhfcgjzxkywd4v0l96qhn19m9b8cszj";
   };
 
   vala_0_50 = generic {
@@ -134,5 +136,10 @@ in rec {
     sha256 = "1353j852h04d1x6b4n6lbg3ay40ph0adb9yi25dh74pligx33z2q";
   };
 
-  vala = vala_0_48;
+  vala_0_52 = generic {
+    version = "0.52.2";
+    sha256 = "sha256-OjxGCAO6Zh5RO+PQmEtYPgVHP2AsdfqY6RdVUDcUqXs=";
+  };
+
+  vala = vala_0_52;
 }
diff --git a/pkgs/development/coq-modules/VST/default.nix b/pkgs/development/coq-modules/VST/default.nix
index af560ec49a0b5..ad5caec949211 100644
--- a/pkgs/development/coq-modules/VST/default.nix
+++ b/pkgs/development/coq-modules/VST/default.nix
@@ -7,7 +7,11 @@ with lib; mkCoqDerivation {
   owner = "PrincetonUniversity";
   repo = "VST";
   inherit version;
-  defaultVersion = if coq.coq-version == "8.11" then "2.6" else null;
+  defaultVersion = with versions; switch coq.coq-version [
+    { case = range "8.12" "8.13"; out = "2.7.1"; }
+    { case = "8.11"; out = "2.6"; }
+  ] null;
+  release."2.7.1".sha256 = "1674j7bkvihiv19vizm99dp6gj3lryb00zx6a87jz214f3ydcvnj";
   release."2.6".sha256 = "00bf9hl4pvmsqa08lzjs1mrxyfgfxq4k6778pnldmc8ichm90jgk";
   releaseRev = v: "v${v}";
   propagatedBuildInputs = [ compcert ];
diff --git a/pkgs/development/libraries/amtk/default.nix b/pkgs/development/libraries/amtk/default.nix
index f144f847bcf03..7d51dbd48e722 100644
--- a/pkgs/development/libraries/amtk/default.nix
+++ b/pkgs/development/libraries/amtk/default.nix
@@ -1,6 +1,8 @@
 { lib, stdenv
 , fetchurl
 , gtk3
+, meson
+, ninja
 , pkg-config
 , gobject-introspection
 , gnome3
@@ -10,14 +12,16 @@
 
 stdenv.mkDerivation rec {
   pname = "amtk";
-  version = "5.2.0";
+  version = "5.3.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0y3hmmflw4i0y0yb9a8rlihbv3cbwnvdcf1n5jycwzpq9jxla1c2";
+    sha256 = "12v3nj1bb7507ndprjggq0hpz8k719b4bwvl8sm43p3ibmn27anm";
   };
 
   nativeBuildInputs = [
+    meson
+    ninja
     pkg-config
     dbus
     gobject-introspection
@@ -32,10 +36,13 @@ stdenv.mkDerivation rec {
     export NO_AT_BRIDGE=1
     ${xvfb_run}/bin/xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
       --config-file=${dbus.daemon}/share/dbus-1/session.conf \
-      make check
+      meson test --print-errorlogs
   '';
 
-  passthru.updateScript = gnome3.updateScript { packageName = pname; };
+  passthru.updateScript = gnome3.updateScript {
+    packageName = pname;
+    versionPolicy = "none";
+  };
 
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Projects/Amtk";
diff --git a/pkgs/development/libraries/appstream/default.nix b/pkgs/development/libraries/appstream/default.nix
index 6fa4a6e0a4ab6..96c6b36239837 100644
--- a/pkgs/development/libraries/appstream/default.nix
+++ b/pkgs/development/libraries/appstream/default.nix
@@ -1,20 +1,40 @@
-{ lib, stdenv, substituteAll, fetchFromGitHub, meson, ninja, pkg-config, gettext
-, xmlto, docbook_xsl, docbook_xml_dtd_45, libxslt
-, libstemmer, glib, xapian, libxml2, libyaml, gobject-introspection
-, pcre, itstool, gperf, vala, lmdb, libsoup
+{ lib
+, stdenv
+, substituteAll
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, gettext
+, xmlto
+, docbook-xsl-nons
+, docbook_xml_dtd_45
+, libxslt
+, libstemmer
+, glib
+, xapian
+, libxml2
+, libyaml
+, gobject-introspection
+, pcre
+, itstool
+, gperf
+, vala
+, lmdb
+, curl
 }:
 
 stdenv.mkDerivation rec {
   pname = "appstream";
-  version = "0.14.0";
+  version = "0.14.3";
 
   outputs = [ "out" "dev" ];
 
   src = fetchFromGitHub {
-    owner  = "ximion";
-    repo   = "appstream";
-    rev    = "v${version}";
-    sha256 = "sha256-iYqmQ1/58t3ZdJTxYLDc5jkTG1lMBtQWMFFsYsszH9Q=";
+    owner = "ximion";
+    repo = "appstream";
+    rev = "v${version}";
+    sha256 = "sha256-wCQR+4/F5lVqWHHcH/WS4irBGRivz3c1imasyLDIZIs=";
   };
 
   patches = [
@@ -26,12 +46,30 @@ stdenv.mkDerivation rec {
   ];
 
   nativeBuildInputs = [
-    meson ninja pkg-config gettext
-    libxslt xmlto docbook_xsl docbook_xml_dtd_45
-    gobject-introspection itstool vala
+    meson
+    ninja
+    pkg-config
+    gettext
+    libxslt
+    xmlto
+    docbook-xsl-nons
+    docbook_xml_dtd_45
+    gobject-introspection
+    itstool
+    vala
   ];
 
-  buildInputs = [ libstemmer pcre glib xapian libxml2 libyaml gperf lmdb libsoup ];
+  buildInputs = [
+    libstemmer
+    pcre
+    glib
+    xapian
+    libxml2
+    libyaml
+    gperf
+    lmdb
+    curl
+  ];
 
   mesonFlags = [
     "-Dapidocs=false"
@@ -41,14 +79,14 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Software metadata handling library";
-    homepage    = "https://www.freedesktop.org/wiki/Distributions/AppStream/";
+    homepage = "https://www.freedesktop.org/wiki/Distributions/AppStream/";
     longDescription = ''
       AppStream is a cross-distro effort for building Software-Center applications
       and enhancing metadata provided by software components.  It provides
       specifications for meta-information which is shipped by upstream projects and
       can be consumed by other software.
     '';
-    license     = licenses.lgpl21Plus;
-    platforms   = platforms.unix;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
  };
 }
diff --git a/pkgs/development/libraries/at-spi2-atk/default.nix b/pkgs/development/libraries/at-spi2-atk/default.nix
index 1e5a1d3fd64c8..881c411db392c 100644
--- a/pkgs/development/libraries/at-spi2-atk/default.nix
+++ b/pkgs/development/libraries/at-spi2-atk/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/at-spi2-core/default.nix b/pkgs/development/libraries/at-spi2-core/default.nix
index 7e1181cf3bdf1..38131b0f357fb 100644
--- a/pkgs/development/libraries/at-spi2-core/default.nix
+++ b/pkgs/development/libraries/at-spi2-core/default.nix
@@ -14,23 +14,25 @@
 , libX11
 , libXtst # at-spi2-core can be build without X support, but due it is a client-side library, GUI-less usage is a very rare case
 , libXi
+, libXext
 
 , gnome3 # To pass updateScript
 }:
 
 stdenv.mkDerivation rec {
   pname = "at-spi2-core";
-  version = "2.38.0";
+  version = "2.40.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "hONsP+ZoYhM/X+Ipdyt2qiUm4Q3lAUo3ePL6Rs5VDaU=";
+    sha256 = "0miqn8531czy9ffpxnsxsnk12w3d6sqjda3qyix8kns2xsjf6rlz";
   };
 
   outputs = [ "out" "dev" ];
 
   nativeBuildInputs = [ meson ninja pkg-config gobject-introspection makeWrapper ];
-  buildInputs = [ libX11 libXtst libXi ];
+  # libXext is a transitive dependency of libXi
+  buildInputs = [ libX11 libXtst libXi libXext ];
   # In atspi-2.pc dbus-1 glib-2.0
   propagatedBuildInputs = [ dbus glib ];
 
@@ -45,6 +47,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/atk/default.nix b/pkgs/development/libraries/atk/default.nix
index 53eb4459770dc..e0cdb3a9b4c3c 100644
--- a/pkgs/development/libraries/atk/default.nix
+++ b/pkgs/development/libraries/atk/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/atkmm/default.nix b/pkgs/development/libraries/atkmm/default.nix
index e9c63eb650f73..123e7c984fcf1 100644
--- a/pkgs/development/libraries/atkmm/default.nix
+++ b/pkgs/development/libraries/atkmm/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/cairomm/1.16.nix b/pkgs/development/libraries/cairomm/1.16.nix
new file mode 100644
index 0000000000000..2beeb71e5e354
--- /dev/null
+++ b/pkgs/development/libraries/cairomm/1.16.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, lib
+, fetchurl
+, boost
+, meson
+, ninja
+, pkg-config
+, cairo
+, fontconfig
+, libsigcxx30
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cairomm";
+  version = "1.16.0";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "https://www.cairographics.org/releases/${pname}-${version}.tar.xz";
+    sha256 = "1ya4y7qa000cjawqwswbqv26y5icfkmhs5iiiil4dxgrqn91923y";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    boost # for tests
+    fontconfig
+  ];
+
+  propagatedBuildInputs = [
+    cairo
+    libsigcxx30
+  ];
+
+  mesonFlags = [
+    "-Dbuild-tests=true"
+    "-Dboost-shared=true"
+  ];
+
+  # Meson is no longer able to pick up Boost automatically.
+  # https://github.com/NixOS/nixpkgs/issues/86131
+  BOOST_INCLUDEDIR = "${lib.getDev boost}/include";
+  BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A 2D graphics library with support for multiple output devices";
+    longDescription = ''
+      Cairo is a 2D graphics library with support for multiple output
+      devices.  Currently supported output targets include the X
+      Window System, Quartz, Win32, image buffers, PostScript, PDF,
+      and SVG file output.  Experimental backends include OpenGL
+      (through glitz), XCB, BeOS, OS/2, and DirectFB.
+
+      Cairo is designed to produce consistent output on all output
+      media while taking advantage of display hardware acceleration
+      when available (e.g., through the X Render Extension).
+    '';
+    homepage = "https://www.cairographics.org/";
+    license = with licenses; [ lgpl2Plus mpl10 ];
+    maintainers = teams.gnome.members;
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/development/libraries/clutter-gst/default.nix b/pkgs/development/libraries/clutter-gst/default.nix
index 166d4e12c2525..f2caa0bd3d552 100644
--- a/pkgs/development/libraries/clutter-gst/default.nix
+++ b/pkgs/development/libraries/clutter-gst/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/clutter-gtk/default.nix b/pkgs/development/libraries/clutter-gtk/default.nix
index 0dfb8c7b9df0b..8dfe6781740b1 100644
--- a/pkgs/development/libraries/clutter-gtk/default.nix
+++ b/pkgs/development/libraries/clutter-gtk/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/clutter/default.nix b/pkgs/development/libraries/clutter/default.nix
index 002db004dc190..2d0f57f279a69 100644
--- a/pkgs/development/libraries/clutter/default.nix
+++ b/pkgs/development/libraries/clutter/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/cogl/default.nix b/pkgs/development/libraries/cogl/default.nix
index 8fd1520728794..9962ebf09e88b 100644
--- a/pkgs/development/libraries/cogl/default.nix
+++ b/pkgs/development/libraries/cogl/default.nix
@@ -61,6 +61,7 @@ in stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/dconf/default.nix b/pkgs/development/libraries/dconf/default.nix
index 6834a605f1a55..26862ee99f019 100644
--- a/pkgs/development/libraries/dconf/default.nix
+++ b/pkgs/development/libraries/dconf/default.nix
@@ -19,14 +19,14 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "dconf";
-  version = "0.38.0";
+  version = "0.40.0";
 
   outputs = [ "out" "lib" "dev" ]
     ++ lib.optional (!isCross) "devdoc";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0n2gqkp6d61h7gnnp2xnxp6w5wcl7w9ay58krrf729qd6d0hzxj5";
+    sha256 = "0cs5nayg080y8pb9b7qccm1ni8wkicdmqp1jsgc22110r6j24zyg";
   };
 
   nativeBuildInputs = [
@@ -63,6 +63,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/folks/default.nix b/pkgs/development/libraries/folks/default.nix
index c930adbe9b2dd..c21c14962540f 100644
--- a/pkgs/development/libraries/folks/default.nix
+++ b/pkgs/development/libraries/folks/default.nix
@@ -1,7 +1,6 @@
 { fetchurl
 , lib, stdenv
 , pkg-config
-, fetchpatch
 , meson
 , ninja
 , glib
@@ -18,6 +17,7 @@
 , dbus
 , libgee
 , evolution-data-server
+, libgdata
 , libsecret
 , db
 , python3
@@ -34,29 +34,15 @@
 
 stdenv.mkDerivation rec {
   pname = "folks";
-  version = "0.14.0";
+  version = "0.15.2";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1f9b52vmwnq7s51vj26w2618dn2ph5g12ibbkbyk6fvxcgd7iryn";
+    sha256 = "08nirjax4m4g4ljr8ksq16wzmrvzq6myqh5rm0dw6pnijqk7nxzg";
   };
 
-  patches = [
-    # Fix tests with e-d-s linked with libphonenumber support
-    # https://gitlab.gnome.org/GNOME/folks/merge_requests/40
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/folks/commit/6d443480a137f6a6ff345b21bf3cb31066eefbcd.patch";
-      sha256 = "D/Y2g12TT0qrcH+iJ2umu4Hmp0EJ3Hoedh0H3aWI+HY=";
-    })
-  ];
-
-  mesonFlags = [
-    "-Ddocs=true"
-    "-Dtelepathy_backend=${lib.boolToString telepathySupport}"
-  ];
-
   nativeBuildInputs = [
     gettext
     gobject-introspection
@@ -75,6 +61,7 @@ stdenv.mkDerivation rec {
     db
     dbus-glib
     evolution-data-server
+    libgdata # required for some backends transitively
     libsecret
     libsoup
     libxml2
@@ -100,7 +87,17 @@ stdenv.mkDerivation rec {
     ]))
   ];
 
-  doCheck = true;
+  mesonFlags = [
+    "-Ddocs=true"
+    "-Dtelepathy_backend=${lib.boolToString telepathySupport}"
+    # For some reason, the tests are getting stuck on 31/32,
+    # even though the one missing test finishes just fine on next run,
+    # when tests are permuted differently. And another test that
+    # previously passed will be stuck instead.
+    "-Dtests=false"
+  ];
+
+  doCheck = false;
 
   # Prevents e-d-s add-contacts-stress-test from timing out
   checkPhase = ''
diff --git a/pkgs/development/libraries/gcr/default.nix b/pkgs/development/libraries/gcr/default.nix
index 92c0ec293cb25..57323bbc70dd6 100644
--- a/pkgs/development/libraries/gcr/default.nix
+++ b/pkgs/development/libraries/gcr/default.nix
@@ -22,11 +22,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gcr";
-  version = "3.38.1";
+  version = "3.40.0";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "F/yvnEqTpl+xxyuCZDuxAsEzRAhGh9WIbqZjE4aNnsk=";
+    sha256 = "udNkWl/ZU6VChcxk1PwEZzZGPb1NzCXK9ce1m+0wJ/U=";
   };
 
   postPatch = ''
@@ -84,6 +84,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gdk-pixbuf/default.nix b/pkgs/development/libraries/gdk-pixbuf/default.nix
index 2d8e60d06a735..d7a2604876fd8 100644
--- a/pkgs/development/libraries/gdk-pixbuf/default.nix
+++ b/pkgs/development/libraries/gdk-pixbuf/default.nix
@@ -7,11 +7,10 @@
 , pkg-config
 , gettext
 , python3
-, libxml2
 , libxslt
 , docbook-xsl-nons
 , docbook_xml_dtd_43
-, gtk-doc
+, gi-docgen
 , glib
 , libtiff
 , libjpeg
@@ -25,13 +24,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gdk-pixbuf";
-  version = "2.42.2";
+  version = "2.42.6";
 
   outputs = [ "out" "dev" "man" "devdoc" "installedTests" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "05ggmzwvrxq9w4zcvmrnnd6qplsmb4n95lj4q607c7arzlf6mil3";
+    sha256 = "0zz7pmw2z46g7mr1yjxbsdldd5pd03xbjc58inj8rxfqgrdvg9n4";
   };
 
   patches = [
@@ -45,14 +44,15 @@ stdenv.mkDerivation rec {
     pkg-config
     gettext
     python3
-    libxml2
-    libxslt
-    docbook-xsl-nons
-    docbook_xml_dtd_43
-    gtk-doc
     gobject-introspection
     makeWrapper
     glib
+    gi-docgen
+
+    # for man pages
+    libxslt
+    docbook-xsl-nons
+    docbook_xml_dtd_43
   ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
 
   propagatedBuildInputs = [
@@ -75,19 +75,26 @@ stdenv.mkDerivation rec {
     substituteInPlace tests/meson.build --subst-var-by installedtestsprefix "$installedTests"
   '';
 
+  preInstall = ''
+    PATH=$PATH:$out/bin # for install script
+  '';
+
   postInstall =
-    # meson erroneously installs loaders with .dylib extension on Darwin.
-    # Their @rpath has to be replaced before gdk-pixbuf-query-loaders looks at them.
-    lib.optionalString stdenv.isDarwin ''
+    ''
+      # All except one utility seem to be only useful during building.
+      moveToOutput "bin" "$dev"
+      moveToOutput "bin/gdk-pixbuf-thumbnailer" "$out"
+
+      # So that devhelp can find this.
+      mkdir -p "$devdoc/share/devhelp"
+      mv "$out/share/doc" "$devdoc/share/devhelp/books"
+    '' + lib.optionalString stdenv.isDarwin ''
+      # meson erroneously installs loaders with .dylib extension on Darwin.
+      # Their @rpath has to be replaced before gdk-pixbuf-query-loaders looks at them.
       for f in $out/${passthru.moduleDir}/*.dylib; do
           install_name_tool -change @rpath/libgdk_pixbuf-2.0.0.dylib $out/lib/libgdk_pixbuf-2.0.0.dylib $f
           mv $f ''${f%.dylib}.so
       done
-    ''
-    # All except one utility seem to be only useful during building.
-    + ''
-      moveToOutput "bin" "$dev"
-      moveToOutput "bin/gdk-pixbuf-thumbnailer" "$out"
     '' + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
       # We need to install 'loaders.cache' in lib/gdk-pixbuf-2.0/2.10.0/
       $dev/bin/gdk-pixbuf-query-loaders --update-cache
@@ -100,10 +107,6 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  preInstall = ''
-    PATH=$PATH:$out/bin # for install script
-  '';
-
   # The tests take an excessive amount of time (> 1.5 hours) and memory (> 6 GB).
   inherit doCheck;
 
@@ -114,6 +117,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
 
     tests = {
diff --git a/pkgs/development/libraries/gegl/4.0.nix b/pkgs/development/libraries/gegl/4.0.nix
index 2093328f5793a..11f4f070c08f5 100644
--- a/pkgs/development/libraries/gegl/4.0.nix
+++ b/pkgs/development/libraries/gegl/4.0.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
 , pkg-config
 , vala
@@ -35,14 +36,14 @@
 
 stdenv.mkDerivation rec {
   pname = "gegl";
-  version = "0.4.28";
+  version = "0.4.30";
 
   outputs = [ "out" "dev" "devdoc" ];
   outputBin = "dev";
 
   src = fetchurl {
     url = "https://download.gimp.org/pub/gegl/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-HRENhXfVTMo7NCOTFb03xXzLJ91DVWVQdKLSs/2JeQA=";
+    sha256 = "sha256-wRJ4LPQJaWniMhfM36vkIoTjXVQ1/wxD1A5McPrsqN0=";
   };
 
   nativeBuildInputs = [
@@ -103,8 +104,8 @@ stdenv.mkDerivation rec {
   NIX_CFLAGS_COMPILE = "-lm";
 
   postPatch = ''
-    chmod +x tests/opencl/opencl_test.sh tests/buffer/buffer-tests-run.sh
-    patchShebangs tests/ff-load-save/tests_ff_load_save.sh tests/opencl/opencl_test.sh tests/buffer/buffer-tests-run.sh tools/xml_insert.sh
+    chmod +x tests/opencl/opencl_test.sh
+    patchShebangs tests/ff-load-save/tests_ff_load_save.sh tests/opencl/opencl_test.sh tools/xml_insert.sh
   '';
 
   # tests fail to connect to the com.apple.fonts daemon in sandboxed mode
diff --git a/pkgs/development/libraries/gexiv2/default.nix b/pkgs/development/libraries/gexiv2/default.nix
index 071e749b40028..958e524aa09c9 100644
--- a/pkgs/development/libraries/gexiv2/default.nix
+++ b/pkgs/development/libraries/gexiv2/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gfbgraph/default.nix b/pkgs/development/libraries/gfbgraph/default.nix
index e3550b82a965e..4cbc6f341dc40 100644
--- a/pkgs/development/libraries/gfbgraph/default.nix
+++ b/pkgs/development/libraries/gfbgraph/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gjs/default.nix b/pkgs/development/libraries/gjs/default.nix
index 52b53a15b4105..ff61c95a98554 100644
--- a/pkgs/development/libraries/gjs/default.nix
+++ b/pkgs/development/libraries/gjs/default.nix
@@ -1,6 +1,6 @@
 { fetchurl
-, fetchpatch
-, lib, stdenv
+, lib
+, stdenv
 , meson
 , ninja
 , pkg-config
@@ -16,6 +16,7 @@
 , libxml2
 , dbus
 , gdk-pixbuf
+, harfbuzz
 , makeWrapper
 , which
 , xvfb_run
@@ -25,18 +26,26 @@
 let
   testDeps = [
     gobject-introspection # for Gio and cairo typelibs
-    gtk3 atk pango.out gdk-pixbuf
+    gtk3 atk pango.out gdk-pixbuf harfbuzz
   ];
 in stdenv.mkDerivation rec {
   pname = "gjs";
-  version = "1.66.2";
+  version = "1.68.1";
+
+  outputs = [ "out" "dev" "installedTests" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/gjs/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "vX9fixcSd8wLue4XVLAkC2Lwana4sYyWjPRxs0qzTlk=";
+    sha256 = "0w2cbfpmc6alz7z8ycchhlkn586av5y8zk2xmgwzq10i0k13xyig";
   };
 
-  outputs = [ "out" "dev" "installedTests" ];
+  patches = [
+    # Hard-code various paths
+    ./fix-paths.patch
+
+    # Allow installing installed tests to a separate output.
+    ./installed-tests-path.patch
+  ];
 
   nativeBuildInputs = [
     meson
@@ -68,14 +77,6 @@ in stdenv.mkDerivation rec {
     "-Dinstalled_test_prefix=${placeholder "installedTests"}"
   ];
 
-  patches = [
-    # Hard-code various paths
-    ./fix-paths.patch
-
-    # Allow installing installed tests to a separate output.
-    ./installed-tests-path.patch
-  ];
-
   doCheck = true;
 
   postPatch = ''
@@ -91,6 +92,7 @@ in stdenv.mkDerivation rec {
     mkdir -p $out/lib $installedTests/libexec/installed-tests/gjs
     ln -s $PWD/libgjs.so.0 $out/lib/libgjs.so.0
     ln -s $PWD/installed-tests/js/libgimarshallingtests.so $installedTests/libexec/installed-tests/gjs/libgimarshallingtests.so
+    ln -s $PWD/installed-tests/js/libgjstesttools/libgjstesttools.so $installedTests/libexec/installed-tests/gjs/libgjstesttools.so
     ln -s $PWD/installed-tests/js/libregress.so $installedTests/libexec/installed-tests/gjs/libregress.so
     ln -s $PWD/installed-tests/js/libwarnlib.so $installedTests/libexec/installed-tests/gjs/libwarnlib.so
   '';
diff --git a/pkgs/development/libraries/glib-networking/default.nix b/pkgs/development/libraries/glib-networking/default.nix
index 5858973416625..21321ce9f0c8c 100644
--- a/pkgs/development/libraries/glib-networking/default.nix
+++ b/pkgs/development/libraries/glib-networking/default.nix
@@ -18,13 +18,13 @@
 
 stdenv.mkDerivation rec {
   pname = "glib-networking";
-  version = "2.66.0";
+  version = "2.68.1";
 
   outputs = [ "out" "installedTests" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "16807qwflbghp0c66jdx2gnaffvdp4bla35ppzp9dlgx6wjbxmy5";
+    sha256 = "0c1vylxly8k7g454g02spi44ybjidlwg461vp713zxd94k8qnpfh";
   };
 
   patches = [
@@ -76,6 +76,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
 
     tests = {
diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/development/libraries/glib/default.nix
index fccd6ddb04176..2bfb4edeb52cc 100644
--- a/pkgs/development/libraries/glib/default.nix
+++ b/pkgs/development/libraries/glib/default.nix
@@ -45,11 +45,11 @@ in
 
 stdenv.mkDerivation rec {
   pname = "glib";
-  version = "2.66.8";
+  version = "2.68.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/glib/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-l7yH3ZE2VYmvXLv+oldIM66nobcYQP02Xs0oUsdrnIs=";
+    sha256 = "sha256-JBZUuWvTa4iqoSgU78SEO1eOVdR0QBA3J5Waw0aUQzM=";
   };
 
   patches = optionals stdenv.isDarwin [
diff --git a/pkgs/development/libraries/glibmm/2.68.nix b/pkgs/development/libraries/glibmm/2.68.nix
new file mode 100644
index 0000000000000..18a862e7d76bf
--- /dev/null
+++ b/pkgs/development/libraries/glibmm/2.68.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, gnum4
+, glib
+, libsigcxx30
+, gnome3
+, Cocoa
+, meson
+, ninja
+}:
+
+stdenv.mkDerivation rec {
+  pname = "glibmm";
+  version = "2.68.0";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-wfOFcxkdzu2FoFYAiIz0z0aVlB8zlxW9Z9UcJBb083U=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    pkg-config
+    ninja
+    gnum4
+    glib # for glib-compile-schemas
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Cocoa
+  ];
+
+  propagatedBuildInputs = [
+    glib
+    libsigcxx30
+  ];
+
+  doCheck = false; # fails. one test needs the net, another /etc/fstab
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "glibmm_2_68";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    description = "C++ interface to the GLib library";
+    homepage = "https://gtkmm.org/";
+    license = licenses.lgpl2Plus;
+    maintainers = teams.gnome.members ++ (with maintainers; [ raskin ]);
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/development/libraries/glibmm/default.nix b/pkgs/development/libraries/glibmm/default.nix
index a9abfbd17764c..e952ab04cc062 100644
--- a/pkgs/development/libraries/glibmm/default.nix
+++ b/pkgs/development/libraries/glibmm/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gnome-online-accounts/default.nix b/pkgs/development/libraries/gnome-online-accounts/default.nix
index ab71b2ccf9a9f..ecb4390df269a 100644
--- a/pkgs/development/libraries/gnome-online-accounts/default.nix
+++ b/pkgs/development/libraries/gnome-online-accounts/default.nix
@@ -30,7 +30,7 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-online-accounts";
-  version = "3.38.1";
+  version = "3.40.0";
 
   # https://gitlab.gnome.org/GNOME/gnome-online-accounts/issues/87
   src = fetchFromGitLab {
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     owner = "GNOME";
     repo = "gnome-online-accounts";
     rev = version;
-    sha256 = "sha256-th7P++MC3GXX+349PJFEwHGGeMhxsGgoEDGnSYpY7E4=";
+    sha256 = "sha256-GuUWypfmfbovpDKnj6wSBuNeKJIfIyipY+01u/p4znU=";
   };
 
   outputs = [ "out" "man" "dev" "devdoc" ];
@@ -46,7 +46,6 @@ stdenv.mkDerivation rec {
   mesonFlags = [
     "-Dfedora=false" # not useful in NixOS or for NixOS users.
     "-Dgtk_doc=true"
-    "-Dlastfm=true"
     "-Dman=true"
     "-Dmedia_server=true"
   ];
diff --git a/pkgs/development/libraries/gobject-introspection/absolute_gir_path.patch b/pkgs/development/libraries/gobject-introspection/absolute_gir_path.patch
index d4160b51d68c3..f74a7af1cff43 100644
--- a/pkgs/development/libraries/gobject-introspection/absolute_gir_path.patch
+++ b/pkgs/development/libraries/gobject-introspection/absolute_gir_path.patch
@@ -1,8 +1,10 @@
+diff --git a/gir/cairo-1.0.gir.in b/gir/cairo-1.0.gir.in
+index e4c9fb3d..3351b184 100644
 --- a/gir/cairo-1.0.gir.in
 +++ b/gir/cairo-1.0.gir.in
-@@ -5,7 +5,7 @@
-             xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+@@ -6,7 +6,7 @@
    <package name="@CAIRO_GIR_PACKAGE@"/>
+   <c:include name="cairo-gobject.h"/>
    <namespace name="cairo" version="1.0"
 -	     shared-library="@CAIRO_SHARED_LIBRARY@"
 +	     shared-library="@cairoLib@/@CAIRO_SHARED_LIBRARY@"
diff --git a/pkgs/development/libraries/gobject-introspection/absolute_shlib_path.patch b/pkgs/development/libraries/gobject-introspection/absolute_shlib_path.patch
index 775c298553013..c02330adf6d1a 100644
--- a/pkgs/development/libraries/gobject-introspection/absolute_shlib_path.patch
+++ b/pkgs/development/libraries/gobject-introspection/absolute_shlib_path.patch
@@ -40,7 +40,7 @@
  def _get_option_parser():
      parser = optparse.OptionParser('%prog [options] sources',
                                     version='%prog ' + giscanner.__version__)
-@@ -205,6 +238,10 @@ match the namespace prefix.""")
+@@ -214,6 +247,10 @@ match the namespace prefix.""")
      parser.add_option("", "--filelist",
                        action="store", dest="filelist", default=[],
                        help="file containing headers and sources to be scanned")
@@ -66,7 +66,7 @@
  # This is a what we do for non-la files. We assume that we are on an
  # ELF-like system where ldd exists and the soname extracted with ldd is
  # a filename that can be opened with dlopen().
-@@ -106,7 +112,8 @@ def _resolve_non_libtool(options, binary, libraries):
+@@ -108,7 +114,8 @@ def _resolve_non_libtool(options, binary, libraries):
              output = output.decode("utf-8", "replace")
  
          shlibs = resolve_from_ldd_output(libraries, output)
@@ -76,7 +76,7 @@
  
  
  def sanitize_shlib_path(lib):
-@@ -115,19 +122,18 @@ def sanitize_shlib_path(lib):
+@@ -117,19 +124,18 @@ def sanitize_shlib_path(lib):
      # In case we get relative paths on macOS (like @rpath) then we fall
      # back to the basename as well:
      # https://gitlab.gnome.org/GNOME/gobject-introspection/issues/222
@@ -101,7 +101,7 @@
      if len(patterns) == 0:
          return []
  
-@@ -139,8 +145,11 @@ def resolve_from_ldd_output(libraries, output):
+@@ -141,8 +147,11 @@ def resolve_from_ldd_output(libraries, output):
          if line.endswith(':'):
              continue
          for word in line.split():
@@ -117,7 +117,7 @@
                      shlibs.append(m.group())
 --- a/giscanner/utils.py
 +++ b/giscanner/utils.py
-@@ -111,17 +111,11 @@ def extract_libtool_shlib(la_file):
+@@ -113,16 +113,11 @@ def extract_libtool_shlib(la_file):
      if dlname is None:
          return None
  
@@ -129,8 +129,7 @@
 -        if libdir is None:
 -            return dlbasename
 -        return libdir + '/' + dlbasename
--    # From the comments in extract_libtool(), older libtools had
--    # a path rather than the raw dlname
+-    # Older libtools had a path rather than the raw dlname
 -    return os.path.basename(dlname)
 +    dlbasename = os.path.basename(dlname)
 +    libdir = _extract_libdir_field(la_file)
@@ -139,7 +138,7 @@
 +    return libdir + '/' + dlbasename
  
  
- def extract_libtool(la_file):
+ # Returns arguments for invoking libtool, if applicable, otherwise None
 --- a/tests/scanner/test_shlibs.py
 +++ b/tests/scanner/test_shlibs.py
 @@ -7,6 +7,30 @@ from giscanner.shlibs import resolve_from_ldd_output, sanitize_shlib_path
diff --git a/pkgs/development/libraries/gobject-introspection/default.nix b/pkgs/development/libraries/gobject-introspection/default.nix
index ae65f5aed280c..afe4ac4278264 100644
--- a/pkgs/development/libraries/gobject-introspection/default.nix
+++ b/pkgs/development/libraries/gobject-introspection/default.nix
@@ -26,7 +26,7 @@
 
 stdenv.mkDerivation rec {
   pname = "gobject-introspection";
-  version = "1.66.1";
+  version = "1.68.0";
 
   # outputs TODO: share/gobject-introspection-1.0/tests is needed during build
   # by pygobject3 (and maybe others), but it's only searched in $out
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "078n0q7b6z682mf4irclrksm73cyixq295mqnqifl9plwmgaai6x";
+    sha256 = "09sawnv3xj9pzgy2qrrk87dl3jibfphnswb61i5bh0d2h4j28afj";
   };
 
   patches = [
@@ -114,6 +114,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/goffice/default.nix b/pkgs/development/libraries/goffice/default.nix
index 64b5be2e2d335..f3580e904b854 100644
--- a/pkgs/development/libraries/goffice/default.nix
+++ b/pkgs/development/libraries/goffice/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gom/default.nix b/pkgs/development/libraries/gom/default.nix
index 4b5effefa57cf..56036897ad8ef 100644
--- a/pkgs/development/libraries/gom/default.nix
+++ b/pkgs/development/libraries/gom/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/goocanvasmm/default.nix b/pkgs/development/libraries/goocanvasmm/default.nix
index 632e434631c9c..11ea1e40ab966 100644
--- a/pkgs/development/libraries/goocanvasmm/default.nix
+++ b/pkgs/development/libraries/goocanvasmm/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "goocanvasmm2";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/grilo-plugins/default.nix b/pkgs/development/libraries/grilo-plugins/default.nix
index b80e6256e4673..d1c00d5882231 100644
--- a/pkgs/development/libraries/grilo-plugins/default.nix
+++ b/pkgs/development/libraries/grilo-plugins/default.nix
@@ -31,11 +31,11 @@
 
 stdenv.mkDerivation rec {
   pname = "grilo-plugins";
-  version = "0.3.12";
+  version = "0.3.13";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0xr59gzb8gw2bgj14mjllgn8y7srh373j0fp0v16ak8nd84dzdn6";
+    sha256 = "HEMF1nNkqTBUODbMGYLzDpRpc7j/avPv4x2HcJq1IPg=";
   };
 
   patches = [
diff --git a/pkgs/development/libraries/gsettings-desktop-schemas/default.nix b/pkgs/development/libraries/gsettings-desktop-schemas/default.nix
index 318d07dfacc88..c918e0ededcc3 100644
--- a/pkgs/development/libraries/gsettings-desktop-schemas/default.nix
+++ b/pkgs/development/libraries/gsettings-desktop-schemas/default.nix
@@ -12,11 +12,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gsettings-desktop-schemas";
-  version = "3.38.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0rwcg9sd5rv7gjwapcd1jjk6l16w0p3j7wkicq1rdch4c0kch12p";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "11an29br55dp0b26kfqlrfxj19glfrmhcdpds2n1w9n04gq3pf7i";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/gsound/default.nix b/pkgs/development/libraries/gsound/default.nix
index 2a3e846d38d68..9f656a428f5b9 100644
--- a/pkgs/development/libraries/gsound/default.nix
+++ b/pkgs/development/libraries/gsound/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gstreamer/bad/default.nix b/pkgs/development/libraries/gstreamer/bad/default.nix
index 40b10d0983ad2..faf38a1a05fb6 100644
--- a/pkgs/development/libraries/gstreamer/bad/default.nix
+++ b/pkgs/development/libraries/gstreamer/bad/default.nix
@@ -1,6 +1,7 @@
 { lib
 , stdenv
 , fetchurl
+, fetchpatch
 , meson
 , ninja
 , gettext
@@ -103,6 +104,15 @@ stdenv.mkDerivation rec {
   patches = [
     # Use pkgconfig to inject the includedirs
     ./fix_pkgconfig_includedir.patch
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Fix “error: cannot initialize a parameter of type 'unsigned long *' with an rvalue of type 'typename std::remove_reference<decltype(*(&opencv_dilate_erode_type))>::type *' (aka 'volatile unsigned long *')” on Darwin.
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/commit/640a65bf966df065d41a511e2d76d1f26a2e770c.patch";
+      sha256 = "E5pig+qEfR58Jticr6ydFxZOhM3ZJ8zgrf5K4BdiB/Y=";
+      includes = [
+        "ext/opencv/gstcvdilateerode.cpp"
+      ];
+    })
   ];
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/gstreamer/gstreamermm/default.nix b/pkgs/development/libraries/gstreamer/gstreamermm/default.nix
index 2c683a84da4d3..ae361366ac1c7 100644
--- a/pkgs/development/libraries/gstreamer/gstreamermm/default.nix
+++ b/pkgs/development/libraries/gstreamer/gstreamermm/default.nix
@@ -18,8 +18,8 @@ stdenv.mkDerivation rec {
 
   passthru = {
     updateScript = gnome3.updateScript {
-      packageName = pname;
-      versionPolicy = "none"; # Unpredictable version stability
+      packageName = "gst_all_1.gstreamermm";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gtk/4.x.nix b/pkgs/development/libraries/gtk/4.x.nix
index 50b322c9dbaf9..455e54ded21c7 100644
--- a/pkgs/development/libraries/gtk/4.x.nix
+++ b/pkgs/development/libraries/gtk/4.x.nix
@@ -5,9 +5,7 @@
 , pkg-config
 , gettext
 , graphene
-, docbook-xsl-nons
-, docbook_xml_dtd_43
-, gtk-doc
+, gi-docgen
 , meson
 , ninja
 , python3
@@ -45,7 +43,6 @@
 , wayland-protocols
 , xineramaSupport ? stdenv.isLinux
 , cupsSupport ? stdenv.isLinux
-, withGtkDoc ? stdenv.isLinux
 , cups
 , AppKit
 , Cocoa
@@ -64,9 +61,9 @@ in
 
 stdenv.mkDerivation rec {
   pname = "gtk4";
-  version = "4.0.3";
+  version = "4.2.1";
 
-  outputs = [ "out" "dev" ] ++ lib.optional withGtkDoc "devdoc";
+  outputs = [ "out" "dev" ] ++ lib.optionals x11Support [ "devdoc" ];
   outputBin = "dev";
 
   setupHooks = [
@@ -76,7 +73,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://gnome/sources/gtk/${lib.versions.majorMinor version}/gtk-${version}.tar.xz";
-    sha256 = "18mJNyV5C1C9mjuyeIVtnVQ7RLa5uVHXtg573swTGJA=";
+    sha256 = "AjFpd13kPwof3gZvvBnXhUXqanViwZFavem4rkpzCeY=";
   };
 
   nativeBuildInputs = [
@@ -88,21 +85,17 @@ stdenv.mkDerivation rec {
     pkg-config
     python3
     sassc
-  ] ++ setupHooks ++ lib.optionals withGtkDoc [
-    pandoc
-    docbook_xml_dtd_43
-    docbook-xsl-nons
-    gtk-doc
-    # For xmllint
-    libxml2
-  ];
+    gi-docgen
+  ] ++ setupHooks;
 
   buildInputs = [
     libxkbcommon
     epoxy
     json-glib
     isocodes
+  ] ++ lib.optionals (!stdenv.isDarwin) [
     vulkan-headers
+  ] ++ [
     librest
     libsoup
     ffmpeg
@@ -141,18 +134,27 @@ stdenv.mkDerivation rec {
     glib
     graphene
     pango
-    vulkan-loader # TODO: Possibly not used on Darwin
-
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    vulkan-loader
+  ] ++ [
     # Required for GSettings schemas at runtime.
     # Will be picked up by wrapGAppsHook.
     gsettings-desktop-schemas
   ];
 
   mesonFlags = [
-    "-Dgtk_doc=${lib.boolToString withGtkDoc}"
-    "-Dtests=false"
-    "-Dtracker3=${lib.boolToString trackerSupport}"
-    "-Dbroadway_backend=${lib.boolToString broadwaySupport}"
+    # ../docs/tools/shooter.c:4:10: fatal error: 'cairo-xlib.h' file not found
+    "-Dgtk_doc=${lib.boolToString x11Support}"
+    "-Dbuild-tests=false"
+    "-Dtracker=${if trackerSupport then "enabled" else "disabled"}"
+    "-Dbroadway-backend=${lib.boolToString broadwaySupport}"
+  ] ++ lib.optionals (!cupsSupport) [
+    "-Dprint-cups=disabled"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-Dvulkan=disabled"
+    "-Dmedia-gstreamer=disabled" # requires gstreamer-gl
+  ] ++ lib.optionals (!x11Support) [
+    "-Dx11-backend=false"
   ];
 
   doCheck = false; # needs X11
@@ -171,20 +173,12 @@ stdenv.mkDerivation rec {
       gdk/gen-gdk-gresources-xml.py
       gtk/gen-gtk-gresources-xml.py
       gtk/gentypefuncs.py
-      docs/reference/gtk/gtk-markdown-to-docbook
     )
 
     chmod +x ''${files[@]}
     patchShebangs ''${files[@]}
   '';
 
-  postBuild =  lib.optionalString withGtkDoc ''
-    # Meson not building `custom_target`s passed to `custom_files` argument of `gnome.gtkdoc` function
-    # as part of the `install` target. We have to build the docs manually first.
-    # https://github.com/mesonbuild/meson/issues/2831
-    ninja g{t,d,s}k4-doc
-  '';
-
   preInstall = ''
     OLD_PATH="$PATH"
     PATH="$PATH:$dev/bin" # so the install script finds gtk4-update-icon-cache
@@ -202,6 +196,13 @@ stdenv.mkDerivation rec {
     for f in $dev/bin/gtk4-encode-symbolic-svg; do
       wrapProgram $f --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
     done
+
+  '' + lib.optionalString x11Support ''
+    # So that DevHelp can find this.
+    # TODO: Remove this with DevHelp 41.
+    mkdir -p "$devdoc/share/devhelp/books"
+    mv "$out/share/doc/"* "$devdoc/share/devhelp/books"
+    rmdir -p --ignore-fail-on-non-empty "$out/share/doc"
   '';
 
   # Wrap demos
diff --git a/pkgs/development/libraries/gtkmm/3.x.nix b/pkgs/development/libraries/gtkmm/3.x.nix
index 950e1a976a622..20456ffd6d1ba 100644
--- a/pkgs/development/libraries/gtkmm/3.x.nix
+++ b/pkgs/development/libraries/gtkmm/3.x.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gtkmm";
-  version = "3.24.3";
+  version = "3.24.4";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-YEl8T381TDvSVXSF8CVPi3tM9L68n+4L4mp3dE6s1DU=";
+    sha256 = "sha256-m+txw+kM/Pt5A5a1Hj9ecWmWZ1Hv1PPvlpcRS+O+Z0M=";
   };
 
   outputs = [ "out" "dev" ];
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "${pname}3";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gtkmm/4.x.nix b/pkgs/development/libraries/gtkmm/4.x.nix
new file mode 100644
index 0000000000000..f7fca93d87047
--- /dev/null
+++ b/pkgs/development/libraries/gtkmm/4.x.nix
@@ -0,0 +1,91 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, python3
+, gtk4
+, glibmm_2_68
+, cairomm_1_16
+, pangomm_2_48
+, epoxy
+, gnome3
+, makeFontsConf
+, xvfb_run
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtkmm";
+  version = "4.0.1";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-iXPZvHhI4CyyBR4F8+46S6/+L+tK9KVIfw4xMu7AOIQ=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    python3
+  ];
+
+  buildInputs = [
+    epoxy
+  ];
+
+  propagatedBuildInputs = [
+    glibmm_2_68
+    gtk4
+    cairomm_1_16
+    pangomm_2_48
+  ];
+
+  checkInputs = [
+    xvfb_run
+  ];
+
+  # Tests require fontconfig.
+  FONTCONFIG_FILE = makeFontsConf {
+    fontDirectories = [ ];
+  };
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    xvfb-run -s '-screen 0 800x600x24' \
+      meson test --print-errorlogs
+
+    runHook postCheck
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "${pname}4";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    description = "C++ interface to the GTK graphical user interface library";
+    longDescription = ''
+      gtkmm is the official C++ interface for the popular GUI library
+      GTK.  Highlights include typesafe callbacks, and a
+      comprehensive set of widgets that are easily extensible via
+      inheritance.  You can create user interfaces either in code or
+      with the Glade User Interface designer, using libglademm.
+      There's extensive documentation, including API reference and a
+      tutorial.
+    '';
+    homepage = "https://gtkmm.org/";
+    license = licenses.lgpl2Plus;
+    maintainers = teams.gnome.members ++ (with maintainers; [ raskin vcunat ]);
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/development/libraries/gtksourceview/4.x.nix b/pkgs/development/libraries/gtksourceview/4.x.nix
index 9ead894e0d25f..4f144219ce09e 100644
--- a/pkgs/development/libraries/gtksourceview/4.x.nix
+++ b/pkgs/development/libraries/gtksourceview/4.x.nix
@@ -1,32 +1,42 @@
-{ lib, stdenv, fetchurl, fetchpatch, pkg-config, atk, cairo, glib, gtk3, pango, fribidi, vala
-, libxml2, perl, gettext, gnome3, gobject-introspection, dbus, xvfb_run, shared-mime-info
-, meson, ninja }:
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, pkg-config
+, atk
+, cairo
+, glib
+, gtk3
+, pango
+, fribidi
+, vala
+, libxml2
+, perl
+, gettext
+, gnome3
+, gobject-introspection
+, dbus
+, xvfb_run
+, shared-mime-info
+}:
 
 stdenv.mkDerivation rec {
   pname = "gtksourceview";
   version = "4.8.1";
 
+  outputs = [ "out" "dev" ];
+
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "0WPXG1/K+8Wx7sbdhB7b283dOnURzV/c/9hri7/mmsE=";
   };
 
-  propagatedBuildInputs = [
-    # Required by gtksourceview-4.0.pc
-    gtk3
-    # Used by gtk_source_language_manager_guess_language
-    shared-mime-info
-  ];
-
-  outputs = [ "out" "dev" ];
-
-  nativeBuildInputs = [ meson ninja pkg-config gettext perl gobject-introspection vala ];
-
-  checkInputs = [ xvfb_run dbus ];
-
-  buildInputs = [ atk cairo glib pango fribidi libxml2 ];
-
   patches = [
+    # By default, the library loads syntaxes from XDG_DATA_DIRS and user directory
+    # but not from its own datadr (it assumes it will be in XDG_DATA_DIRS).
+    # Since this is not generally true with Nix, let’s add $out/share unconditionally.
     ./4.x-nix_share_path.patch
 
     # fixes intermittent "gtksourceview-gresources.h: no such file" errors
@@ -37,27 +47,63 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  enableParallelBuilding = true;
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    perl
+    gobject-introspection
+    vala
+  ];
+
+  buildInputs = [
+    atk
+    cairo
+    glib
+    pango
+    fribidi
+    libxml2
+  ];
+
+  propagatedBuildInputs = [
+    # Required by gtksourceview-4.0.pc
+    gtk3
+    # Used by gtk_source_language_manager_guess_language
+    shared-mime-info
+  ];
+
+  checkInputs = [
+    xvfb_run
+    dbus
+  ];
 
   doCheck = stdenv.isLinux;
+
   checkPhase = ''
+    runHook preCheck
+
     XDG_DATA_DIRS="$XDG_DATA_DIRS:${shared-mime-info}/share" \
     xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
       --config-file=${dbus.daemon}/share/dbus-1/session.conf \
       meson test --no-rebuild --print-errorlogs
+
+    runHook postCheck
   '';
 
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = "gtksourceview";
       attrPath = "gtksourceview4";
+      versionPolicy = "odd-unstable";
     };
   };
 
   meta = with lib; {
+    description = "Source code editing widget for GTK";
     homepage = "https://wiki.gnome.org/Projects/GtkSourceView";
-    platforms = with platforms; linux ++ darwin;
-    license = licenses.lgpl21;
+    platforms = platforms.unix;
+    license = licenses.lgpl21Plus;
     maintainers = teams.gnome.members;
   };
 }
diff --git a/pkgs/development/libraries/gtksourceview/5.x.nix b/pkgs/development/libraries/gtksourceview/5.x.nix
new file mode 100644
index 0000000000000..a1bc60ebc3085
--- /dev/null
+++ b/pkgs/development/libraries/gtksourceview/5.x.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, glib
+, pcre2
+, gtk4
+, pango
+, fribidi
+, vala
+, libxml2
+, perl
+, gettext
+, gnome3
+, gobject-introspection
+, dbus
+, xvfb_run
+, shared-mime-info
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtksourceview";
+  version = "5.0.0";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1hyrmh9r1zd5kjh5ch9d7bhk2kphbqhm7ijfxfkcdln8q0rnd0k4";
+  };
+
+  patches = [
+    # By default, the library loads syntaxes from XDG_DATA_DIRS and user directory
+    # but not from its own datadr (it assumes it will be in XDG_DATA_DIRS).
+    # Since this is not generally true with Nix, let’s add $out/share unconditionally.
+    ./4.x-nix_share_path.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    perl
+    gobject-introspection
+    vala
+  ];
+
+  buildInputs = [
+    glib
+    pcre2
+    pango
+    fribidi
+    libxml2
+  ];
+
+  propagatedBuildInputs = [
+    # Required by gtksourceview-5.0.pc
+    gtk4
+    # Used by gtk_source_language_manager_guess_language
+    shared-mime-info
+  ];
+
+  checkInputs = [
+    xvfb_run
+    dbus
+  ];
+
+  doCheck = stdenv.isLinux;
+
+  checkPhase = ''
+    runHook preCheck
+
+    XDG_DATA_DIRS="$XDG_DATA_DIRS:${shared-mime-info}/share" \
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      meson test --no-rebuild --print-errorlogs
+
+    runHook postCheck
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = "gtksourceview";
+      attrPath = "gtksourceview5";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    description = "Source code editing widget for GTK";
+    homepage = "https://wiki.gnome.org/Projects/GtkSourceView";
+    platforms = platforms.unix;
+    license = licenses.lgpl21Plus;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/pkgs/development/libraries/gupnp-av/default.nix b/pkgs/development/libraries/gupnp-av/default.nix
index 9bf39d94aed3b..74a5e6c6d45d2 100644
--- a/pkgs/development/libraries/gupnp-av/default.nix
+++ b/pkgs/development/libraries/gupnp-av/default.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gupnp-dlna/default.nix b/pkgs/development/libraries/gupnp-dlna/default.nix
index e11d86f82e193..be249e0fdcac0 100644
--- a/pkgs/development/libraries/gupnp-dlna/default.nix
+++ b/pkgs/development/libraries/gupnp-dlna/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gupnp-igd/default.nix b/pkgs/development/libraries/gupnp-igd/default.nix
index 233eb7e3c85f9..93240fc8b33ff 100644
--- a/pkgs/development/libraries/gupnp-igd/default.nix
+++ b/pkgs/development/libraries/gupnp-igd/default.nix
@@ -51,6 +51,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/gvfs/default.nix b/pkgs/development/libraries/gvfs/default.nix
index 2c9bac002fd35..b589775a4dffc 100644
--- a/pkgs/development/libraries/gvfs/default.nix
+++ b/pkgs/development/libraries/gvfs/default.nix
@@ -41,11 +41,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gvfs";
-  version = "1.46.2";
+  version = "1.48.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "2D+hYChmcMA+uJAkBgbYr6fqajqBjorRfu7Y2XZIe9c=";
+    sha256 = "1hlxl6368h6nyqp1888szxs9hnpcw98k3h23dgqi29xd38klzsmj";
   };
 
   postPatch = ''
@@ -119,6 +119,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/json-glib/default.nix b/pkgs/development/libraries/json-glib/default.nix
index b879af32bd09e..fdda5647bf96b 100644
--- a/pkgs/development/libraries/json-glib/default.nix
+++ b/pkgs/development/libraries/json-glib/default.nix
@@ -63,6 +63,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/jsonrpc-glib/default.nix b/pkgs/development/libraries/jsonrpc-glib/default.nix
index 1ec9c3da41e20..170ae424dcc64 100644
--- a/pkgs/development/libraries/jsonrpc-glib/default.nix
+++ b/pkgs/development/libraries/jsonrpc-glib/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/lasem/default.nix b/pkgs/development/libraries/lasem/default.nix
index 22f0436edca96..953cf20afdbc1 100644
--- a/pkgs/development/libraries/lasem/default.nix
+++ b/pkgs/development/libraries/lasem/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libblockdev/default.nix b/pkgs/development/libraries/libblockdev/default.nix
index 584ea93293ef4..9b1654420e749 100644
--- a/pkgs/development/libraries/libblockdev/default.nix
+++ b/pkgs/development/libraries/libblockdev/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, substituteAll, autoreconfHook, pkg-config, gtk-doc
+{ lib, stdenv, fetchFromGitHub, fetchpatch, substituteAll, autoreconfHook, pkg-config, gtk-doc
 , docbook_xml_dtd_43, python3, gobject-introspection, glib, udev, kmod, parted
 , cryptsetup, lvm2, dmraid, util-linux, libbytesize, libndctl, nss, volume_key
 , libxslt, docbook_xsl, gptfdisk, libyaml, autoconf-archive
@@ -22,6 +22,13 @@ stdenv.mkDerivation rec {
       src = ./fix-paths.patch;
       sgdisk = "${gptfdisk}/bin/sgdisk";
     })
+
+    # fix build with glib 2.68 (g_memdup is deprecated)
+    # https://github.com/storaged-project/libblockdev/pull/623
+    (fetchpatch {
+      url = "https://github.com/storaged-project/libblockdev/commit/5528baef6ccc835a06c45f9db34a2c9c3f2dd940.patch";
+      sha256 = "jxq4BLeyTMeNvBvY8k8QXIvYSJ2Gah0J75pq6FpG7PM=";
+    })
   ];
 
   postPatch = ''
diff --git a/pkgs/development/libraries/libchamplain/default.nix b/pkgs/development/libraries/libchamplain/default.nix
index 22a062acd6efd..3ad01ba871ea1 100644
--- a/pkgs/development/libraries/libchamplain/default.nix
+++ b/pkgs/development/libraries/libchamplain/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libcint/default.nix b/pkgs/development/libraries/libcint/default.nix
index b864c279d37a0..a6f2e05d73614 100644
--- a/pkgs/development/libraries/libcint/default.nix
+++ b/pkgs/development/libraries/libcint/default.nix
@@ -9,13 +9,13 @@
 
 stdenv.mkDerivation rec {
   pname = "libcint";
-  version = "4.3.0";
+  version = "4.4.0";
 
   src = fetchFromGitHub {
     owner = "sunqm";
     repo = "libcint";
     rev = "v${version}";
-    hash = "sha256-vJ4OyU9HYQvF1SWmniNGAuHQ7K/TfiK8C4celK5hjiA=";
+    hash = "sha256-nsIyosn8dBf217UmjXSKLTM2RhIQHCSvPlrvlqo5KLc=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/development/libraries/libcryptui/default.nix b/pkgs/development/libraries/libcryptui/default.nix
index 5fdd60abe1153..4b60e27a99f73 100644
--- a/pkgs/development/libraries/libcryptui/default.nix
+++ b/pkgs/development/libraries/libcryptui/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libdazzle/default.nix b/pkgs/development/libraries/libdazzle/default.nix
index d6ecb6e9747e0..d929af5d47f13 100644
--- a/pkgs/development/libraries/libdazzle/default.nix
+++ b/pkgs/development/libraries/libdazzle/default.nix
@@ -3,14 +3,14 @@
 
 stdenv.mkDerivation rec {
   pname = "libdazzle";
-  version = "3.38.0";
+  version = "3.40.0";
 
   outputs = [ "out" "dev" "devdoc" ];
   outputBin = "dev";
 
   src = fetchurl {
     url = "mirror://gnome/sources/libdazzle/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "13v7s46cgw135ycx0byn7am4inn33slrhljq0v0wwfwl2y1g52p1";
+    sha256 = "19abrrjsyjhhl1xflnb0likb9wwzz78fa1mk2b064rpscmz9mafv";
   };
 
   nativeBuildInputs = [ ninja meson pkg-config vala gobject-introspection libxml2 gtk-doc docbook_xsl docbook_xml_dtd_43 dbus xvfb_run glib ];
diff --git a/pkgs/development/libraries/libepc/default.nix b/pkgs/development/libraries/libepc/default.nix
index ee8dfb6e94f79..0656f3a2ee913 100644
--- a/pkgs/development/libraries/libepc/default.nix
+++ b/pkgs/development/libraries/libepc/default.nix
@@ -34,6 +34,7 @@ in stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgda/6.x.nix b/pkgs/development/libraries/libgda/6.x.nix
index fc24fe41c4d33..6474aceb41738 100644
--- a/pkgs/development/libraries/libgda/6.x.nix
+++ b/pkgs/development/libraries/libgda/6.x.nix
@@ -74,6 +74,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "libgda6";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgda/default.nix b/pkgs/development/libraries/libgda/default.nix
index 307cc14a6efef..1599a7868712d 100644
--- a/pkgs/development/libraries/libgda/default.nix
+++ b/pkgs/development/libraries/libgda/default.nix
@@ -86,6 +86,7 @@ assert postgresSupport -> postgresql != null;
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgdamm/default.nix b/pkgs/development/libraries/libgdamm/default.nix
index 44a0e8bc21213..15ff99f3a5563 100644
--- a/pkgs/development/libraries/libgdamm/default.nix
+++ b/pkgs/development/libraries/libgdamm/default.nix
@@ -26,6 +26,7 @@ in stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgee/default.nix b/pkgs/development/libraries/libgee/default.nix
index 407b99b5a57bb..aefb0be84afe0 100644
--- a/pkgs/development/libraries/libgee/default.nix
+++ b/pkgs/development/libraries/libgee/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "libgee";
-  version = "0.20.3";
+  version = "0.20.4";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1pm525wm11dhwz24m8bpcln9547lmrigl6cxf3qsbg4cr3pyvdfh";
+    sha256 = "03nyf8n7i7f67fsh220g52slmihdk1lv4iwspm7xmkgrj3rink2j";
   };
 
   doCheck = true;
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgnomekbd/default.nix b/pkgs/development/libraries/libgnomekbd/default.nix
index 62228b8837a8a..23261020cc11c 100644
--- a/pkgs/development/libraries/libgnomekbd/default.nix
+++ b/pkgs/development/libraries/libgnomekbd/default.nix
@@ -11,10 +11,6 @@ stdenv.mkDerivation rec {
     sha256 = "0y962ykn3rr9gylj0pwpww7bi20lmhvsw6qvxs5bisbn2mih5jpp";
   };
 
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = pname; };
-  };
-
   nativeBuildInputs = [
     file
     intltool
@@ -29,6 +25,13 @@ stdenv.mkDerivation rec {
     glib
   ];
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "odd-unstable";
+    };
+  };
+
   meta = with lib; {
     description = "Keyboard management library";
     maintainers = teams.gnome.members;
diff --git a/pkgs/development/libraries/libgsf/default.nix b/pkgs/development/libraries/libgsf/default.nix
index 77fa161b773a9..bfa0b861dd848 100644
--- a/pkgs/development/libraries/libgsf/default.nix
+++ b/pkgs/development/libraries/libgsf/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgtop/default.nix b/pkgs/development/libraries/libgtop/default.nix
index af4fe04a0b420..c919e667766a8 100644
--- a/pkgs/development/libraries/libgtop/default.nix
+++ b/pkgs/development/libraries/libgtop/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libgudev/default.nix b/pkgs/development/libraries/libgudev/default.nix
index feeae05bf5262..d3482456f2e4c 100644
--- a/pkgs/development/libraries/libgudev/default.nix
+++ b/pkgs/development/libraries/libgudev/default.nix
@@ -1,28 +1,43 @@
 { lib, stdenv
 , fetchurl
 , pkg-config
+, meson
+, ninja
 , udev
 , glib
 , gobject-introspection
 , gnome3
+, vala
 }:
 
 stdenv.mkDerivation rec {
   pname = "libgudev";
-  version = "234";
+  version = "236";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0drf39qhsdz35kwb18hnfj2ig4yfxhfks66m783zlhnvy2narbhv";
+    sha256 = "094mgjmwgsgqrr1i0vd20ynvlkihvs3vgbmpbrhswjsrdp86j0z5";
   };
 
-  nativeBuildInputs = [ pkg-config gobject-introspection ];
-  buildInputs = [ udev glib ];
+  nativeBuildInputs = [
+    pkg-config
+    gobject-introspection
+    meson
+    ninja
+    vala
+  ];
 
-  # There's a dependency cycle with umockdev and the tests fail to LD_PRELOAD anyway.
-  configureFlags = [ "--disable-umockdev" ];
+  buildInputs = [
+    udev
+    glib
+  ];
+
+  mesonFlags = [
+    # There's a dependency cycle with umockdev and the tests fail to LD_PRELOAD anyway
+    "-Dtests=disabled"
+  ];
 
   passthru = {
     updateScript = gnome3.updateScript {
diff --git a/pkgs/development/libraries/libgweather/default.nix b/pkgs/development/libraries/libgweather/default.nix
index 9351d3f707fae..fd742d5b58b93 100644
--- a/pkgs/development/libraries/libgweather/default.nix
+++ b/pkgs/development/libraries/libgweather/default.nix
@@ -1,24 +1,57 @@
-{ lib, stdenv, fetchurl, meson, ninja, pkg-config, libxml2, glib, gtk3, gettext, libsoup
-, gtk-doc, docbook_xsl, docbook_xml_dtd_43, gobject-introspection, python3, tzdata, geocode-glib, vala, gnome3 }:
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, libxml2
+, glib
+, gtk3
+, gettext
+, libsoup
+, gtk-doc
+, docbook-xsl-nons
+, docbook_xml_dtd_43
+, gobject-introspection
+, python3
+, tzdata
+, geocode-glib
+, vala
+, gnome3
+}:
 
 stdenv.mkDerivation rec {
   pname = "libgweather";
-  version = "3.36.1";
+  version = "40.0";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0l74hc02rvzm4p530y539a67jwb080fqdaazdl8j0fr3xvq0j9yy";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1rkf4yv43qcahyx7bismdv6z2vh5azdnm1fqfmnzrada9cm8ykna";
   };
 
-  nativeBuildInputs = [ meson ninja pkg-config gettext vala gtk-doc docbook_xsl docbook_xml_dtd_43 gobject-introspection python3 ];
-  buildInputs = [ glib gtk3 libsoup libxml2 geocode-glib ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    vala
+    gtk-doc
+    docbook-xsl-nons
+    docbook_xml_dtd_43
+    gobject-introspection
+    python3
+    python3.pkgs.pygobject3
+  ];
 
-  postPatch = ''
-    chmod +x meson/meson_post_install.py
-    patchShebangs meson/meson_post_install.py
-  '';
+  buildInputs = [
+    glib
+    gtk3
+    libsoup
+    libxml2
+    geocode-glib
+  ];
 
   mesonFlags = [
     "-Dzoneinfo_dir=${tzdata}/share/zoneinfo"
@@ -26,9 +59,16 @@ stdenv.mkDerivation rec {
     "-Dgtk_doc=true"
   ];
 
+  postPatch = ''
+    chmod +x meson/meson_post_install.py
+    patchShebangs meson/meson_post_install.py
+    patchShebangs data/gen_locations_variant.py
+  '';
+
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libhandy/default.nix b/pkgs/development/libraries/libhandy/default.nix
index 4532edfd884b6..56853b0c3b8ce 100644
--- a/pkgs/development/libraries/libhandy/default.nix
+++ b/pkgs/development/libraries/libhandy/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
 , meson
 , ninja
@@ -6,9 +7,10 @@
 , gobject-introspection
 , vala
 , gtk-doc
-, docbook_xsl
+, docbook-xsl-nons
 , docbook_xml_dtd_43
 , gtk3
+, enableGlade ? false
 , glade
 , dbus
 , xvfb_run
@@ -18,23 +20,32 @@
 , hicolor-icon-theme
 , at-spi2-atk
 , at-spi2-core
+, gnome3
+, libhandy
+, runCommand
 }:
 
 stdenv.mkDerivation rec {
   pname = "libhandy";
-  version = "1.2.0";
+  version = "1.2.2";
 
-  outputs = [ "out" "dev" "devdoc" "glade" ];
+  outputs = [
+    "out"
+    "dev"
+    "devdoc"
+  ] ++ lib.optionals enableGlade [
+    "glade"
+  ];
   outputBin = "dev";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-OfWQriCRDnb+HAYHsuvliXUPRWENau7Fww4u5gKiCyU=";
+    sha256 = "sha256-R//Shl0CvRyleVIt6t1+L5U2Lx8gJGL9XuriuBZosEg=";
   };
 
   nativeBuildInputs = [
     docbook_xml_dtd_43
-    docbook_xsl
+    docbook-xsl-nons
     gobject-introspection
     gtk-doc
     libxml2
@@ -46,9 +57,10 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     gdk-pixbuf
-    glade
     gtk3
     libxml2
+  ] ++ lib.optionals enableGlade [
+    glade
   ];
 
   checkInputs = [
@@ -62,6 +74,7 @@ stdenv.mkDerivation rec {
 
   mesonFlags = [
     "-Dgtk_doc=true"
+    "-Dglade_catalog=${if enableGlade then "enabled" else "disabled"}"
   ];
 
   # Uses define_variable in pkg-config, but we still need it to use the glade output
@@ -79,6 +92,23 @@ stdenv.mkDerivation rec {
       meson test --print-errorlogs
   '';
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  } // lib.optionalAttrs (!enableGlade) {
+    glade =
+      let
+        libhandyWithGlade = libhandy.override {
+          enableGlade = true;
+        };
+      in runCommand "${libhandy.name}-glade" {} ''
+        cp -r "${libhandyWithGlade.glade}" "$out"
+        chmod -R +w "$out"
+        sed -e "s#${libhandyWithGlade.out}#${libhandy.out}#g" -e "s#${libhandyWithGlade.glade}#$out#g" -i $(find "$out" -type f)
+      '';
+  };
+
   meta = with lib; {
     changelog = "https://gitlab.gnome.org/GNOME/libhandy/-/tags/${version}";
     description = "Building blocks for modern adaptive GNOME apps";
diff --git a/pkgs/development/libraries/libhttpseverywhere/default.nix b/pkgs/development/libraries/libhttpseverywhere/default.nix
index 648eb89a514ae..871aafeafd6ba 100644
--- a/pkgs/development/libraries/libhttpseverywhere/default.nix
+++ b/pkgs/development/libraries/libhttpseverywhere/default.nix
@@ -36,6 +36,7 @@ in stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libmanette/default.nix b/pkgs/development/libraries/libmanette/default.nix
index 76dd4eb20c1a0..4e5f44dd15351 100644
--- a/pkgs/development/libraries/libmanette/default.nix
+++ b/pkgs/development/libraries/libmanette/default.nix
@@ -51,6 +51,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libpeas/default.nix b/pkgs/development/libraries/libpeas/default.nix
index a8ef9e2f9bb2d..5d3bad6d6205b 100644
--- a/pkgs/development/libraries/libpeas/default.nix
+++ b/pkgs/development/libraries/libpeas/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   pname = "libpeas";
-  version = "1.28.0";
+  version = "1.30.0";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "05cb7drn6arc4gi02wgsvzibigi2riz5gnfnmlb0zmbfnj9ikna2";
+    sha256 = "18xrk1c1ixlhkmykcfiafrl2am470ws687xqvjlq40zwkcp5dx8b";
   };
 
   nativeBuildInputs = [ pkg-config meson ninja gettext gobject-introspection ];
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libpst/default.nix b/pkgs/development/libraries/libpst/default.nix
index f27b58a02bb65..f51db1d6c6ded 100644
--- a/pkgs/development/libraries/libpst/default.nix
+++ b/pkgs/development/libraries/libpst/default.nix
@@ -12,11 +12,12 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "libpst-0.6.75";
+  pname = "libpst";
+  version = "0.6.76";
 
   src = fetchurl {
-    url = "http://www.five-ten-sg.com/libpst/packages/${name}.tar.gz";
-    sha256 = "11wrf47i3brlxg25wsfz17373q7m5fpjxn2lr41dj252ignqzaac";
+    url = "http://www.five-ten-sg.com/libpst/packages/${pname}-${version}.tar.gz";
+    sha256 = "0hhbbb8ddsgjhv9y1xd8s9ixlhdnjmhw12v06jwx4j6vpgp1na9x";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/librest/default.nix b/pkgs/development/libraries/librest/default.nix
index 7b1ff8235aace..a8bcebb533d05 100644
--- a/pkgs/development/libraries/librest/default.nix
+++ b/pkgs/development/libraries/librest/default.nix
@@ -1,4 +1,12 @@
-{ lib, stdenv, fetchurl, pkg-config, glib, libsoup, gobject-introspection, gnome3 }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, glib
+, libsoup
+, gobject-introspection
+, gnome3
+}:
 
 stdenv.mkDerivation rec {
   pname = "rest";
@@ -9,23 +17,34 @@ stdenv.mkDerivation rec {
     sha256 = "0513aad38e5d3cedd4ae3c551634e3be1b9baaa79775e53b2dba9456f15b01c9";
   };
 
-  nativeBuildInputs = [ pkg-config gobject-introspection ];
-  buildInputs = [ glib libsoup ];
+  nativeBuildInputs = [
+    pkg-config
+    gobject-introspection
+  ];
 
-  configureFlags = [ "--with-ca-certificates=/etc/ssl/certs/ca-certificates.crt" ];
+  buildInputs = [
+    glib
+    libsoup
+  ];
+
+  configureFlags = [
+    # Remove when https://gitlab.gnome.org/GNOME/librest/merge_requests/2 is merged.
+    "--with-ca-certificates=/etc/ssl/certs/ca-certificates.crt"
+  ];
 
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "librest";
+      versionPolicy = "odd-unstable";
     };
   };
 
   meta = with lib; {
     description = "Helper library for RESTful services";
     homepage = "https://wiki.gnome.org/Projects/Librest";
-    license = licenses.lgpl21;
-    platforms = platforms.linux;
+    license = licenses.lgpl21Only;
+    platforms = platforms.unix;
     maintainers = teams.gnome.members;
   };
 }
diff --git a/pkgs/development/libraries/librsvg/default.nix b/pkgs/development/libraries/librsvg/default.nix
index efdbf5934630b..7047d15c0f05d 100644
--- a/pkgs/development/libraries/librsvg/default.nix
+++ b/pkgs/development/libraries/librsvg/default.nix
@@ -1,47 +1,79 @@
-{ lib, stdenv, fetchurl, pkg-config, glib, gdk-pixbuf, pango, cairo, libxml2
-, bzip2, libintl, darwin, rustc, cargo, gnome3
-, vala, gobject-introspection }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, glib
+, gdk-pixbuf
+, pango
+, cairo
+, libxml2
+, bzip2
+, libintl
+, ApplicationServices
+, Foundation
+, libobjc
+, rustc
+, cargo
+, gnome3
+, vala
+, gobject-introspection
+, nixosTests
+}:
 
-let
-  pname = "librsvg";
-  version = "2.50.1";
-in
 stdenv.mkDerivation rec {
-  name = "${pname}-${version}";
-
-  src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
-    sha256 = "02csvx2nzygh8kyal2qiy3y6xb7d52vszxxr37dzav704a9pkncv";
-  };
+  pname = "librsvg";
+  version = "2.50.5";
 
   outputs = [ "out" "dev" "installedTests" ];
 
-  buildInputs = [ libxml2 bzip2 pango libintl ]
-    ++ lib.optionals stdenv.isDarwin [ darwin.libobjc ];
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0wlj5g1jgp93sj3rr6qspj282whz13ahnv8ca99d7zilq9s1aw1j";
+  };
 
-  NIX_LDFLAGS = if stdenv.isDarwin then "-lobjc" else null;
+  nativeBuildInputs = [
+    pkg-config
+    rustc
+    cargo
+    vala
+    gobject-introspection
+  ] ++ lib.optionals stdenv.isDarwin [
+    ApplicationServices
+    Foundation
+  ];
 
-  propagatedBuildInputs = [ glib gdk-pixbuf cairo ];
+  buildInputs = [
+    libxml2
+    bzip2
+    pango
+    libintl
+  ] ++ lib.optionals stdenv.isDarwin [
+    libobjc
+  ];
 
-  nativeBuildInputs = [ pkg-config rustc cargo vala gobject-introspection ]
-    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
-      ApplicationServices
-    ]);
+  propagatedBuildInputs = [
+    glib
+    gdk-pixbuf
+    cairo
+  ];
 
   configureFlags = [
     "--enable-introspection"
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    # Vapi does not build on MacOS.
+    # https://github.com/NixOS/nixpkgs/pull/117081#issuecomment-827782004
     "--enable-vala"
+  ] ++ [
     "--enable-installed-tests"
     "--enable-always-build-tests"
   ] ++ lib.optional stdenv.isDarwin "--disable-Bsymbolic";
 
   makeFlags = [
-    "installed_test_metadir=$(installedTests)/share/installed-tests/RSVG"
-    "installed_testdir=$(installedTests)/libexec/installed-tests/RSVG"
+    "installed_test_metadir=${placeholder "installedTests"}/share/installed-tests/RSVG"
+    "installed_testdir=${placeholder "installedTests"}/libexec/installed-tests/RSVG"
   ];
 
-  NIX_CFLAGS_COMPILE
-    = lib.optionalString stdenv.isDarwin "-I${cairo.dev}/include/cairo";
+  doCheck = false; # all tests fail on libtool-generated rsvg-convert not being able to find coreutils
 
   # It wants to add loaders and update the loaders.cache in gdk-pixbuf
   # Patching the Makefiles to it creates rsvg specific loaders and the
@@ -63,8 +95,6 @@ stdenv.mkDerivation rec {
         -i gdk-pixbuf-loader/librsvg.thumbnailer.in
   '';
 
-  doCheck = false; # fails 20 of 145 tests, very likely to be buggy
-
   # Merge gdkpixbuf and librsvg loaders
   postInstall = ''
     mv $GDK_PIXBUF/loaders.cache $GDK_PIXBUF/loaders.cache.tmp
@@ -75,6 +105,11 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
+    };
+
+    tests = {
+      installedTests = nixosTests.installed-tests.librsvg;
     };
   };
 
diff --git a/pkgs/development/libraries/libsigcxx/3.0.nix b/pkgs/development/libraries/libsigcxx/3.0.nix
new file mode 100644
index 0000000000000..3c92d8e13060d
--- /dev/null
+++ b/pkgs/development/libraries/libsigcxx/3.0.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, gnome3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libsigc++";
+  version = "3.0.6";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "tw7c9GEWUcVKQm4QmxcZbh+hfaCQWSpQAOLRNMA6xc4=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+  ];
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "libsigcxx30";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://libsigcplusplus.github.io/libsigcplusplus/";
+    description = "A typesafe callback system for standard C++";
+    license = licenses.lgpl21Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/development/libraries/libsigcxx/default.nix b/pkgs/development/libraries/libsigcxx/default.nix
index c933d92f32550..cfd161cc9619d 100644
--- a/pkgs/development/libraries/libsigcxx/default.nix
+++ b/pkgs/development/libraries/libsigcxx/default.nix
@@ -1,15 +1,15 @@
-{ lib, stdenv, fetchurl, pkg-config, gnum4, gnome3 }:
+{ lib, stdenv, fetchurl, pkg-config, meson, ninja, gnome3 }:
 
 stdenv.mkDerivation rec {
   pname = "libsigc++";
-  version = "2.10.1";
+  version = "2.10.6";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "00v08km4wwzbh6vjxb21388wb9dm6g2xh14rgwabnv4c2wk5z8n9";
+    sha256 = "sha256-3aF23EaBvanVoqwbxVJzvdOBZit6bUnpGCZ9E+h3Ths=";
   };
 
-  nativeBuildInputs = [ pkg-config gnum4 ];
+  nativeBuildInputs = [ pkg-config meson ninja ];
 
   doCheck = true;
 
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "libsigcxx";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libsoup/default.nix b/pkgs/development/libraries/libsoup/default.nix
index 47fcdd41f8abd..64519dc355d47 100644
--- a/pkgs/development/libraries/libsoup/default.nix
+++ b/pkgs/development/libraries/libsoup/default.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
     propagatedUserEnvPackages = [ glib-networking.out ];
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libunity/default.nix b/pkgs/development/libraries/libunity/default.nix
index f6fb9a13e4cd0..81b7226e31376 100644
--- a/pkgs/development/libraries/libunity/default.nix
+++ b/pkgs/development/libraries/libunity/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchgit
 , pkg-config
 , glib
@@ -14,16 +15,24 @@
 
 stdenv.mkDerivation {
   pname = "libunity";
-  version = "unstable-2019-03-19";
+  version = "unstable-2021-02-01";
 
   outputs = [ "out" "dev" "py" ];
 
+  # Obtained from https://git.launchpad.net/ubuntu/+source/libunity/log/
   src = fetchgit {
     url = "https://git.launchpad.net/ubuntu/+source/libunity";
-    rev = "import/7.1.4+19.04.20190319-0ubuntu1";
-    sha256 = "15b49v88v74q20a5c0lq867qnlz7fx20xifl6j8ha359r0zkfwzj";
+    rev = "import/7.1.4+19.04.20190319-5";
+    sha256 = "LHUs6kl1srS6Xektx+jmm4SXLR47VuQ9IhYbBxf2Wc8=";
   };
 
+  patches = [
+    # Fix builf with latest Vala
+    # https://code.launchpad.net/~jtojnar/libunity/libunity
+    # Did not send upstream because Ubuntu is stuck on Vala 0.48.
+    ./fix-vala.patch
+  ];
+
   nativeBuildInputs = [
     autoreconfHook
     gobject-introspection
@@ -43,11 +52,6 @@ stdenv.mkDerivation {
     libdbusmenu
   ];
 
-  patches = [
-    # See: https://gitlab.gnome.org/GNOME/vala/issues/766
-    ./fix-vala.patch
-  ];
-
   preConfigure = ''
     intltoolize
   '';
diff --git a/pkgs/development/libraries/libunity/fix-vala.patch b/pkgs/development/libraries/libunity/fix-vala.patch
index ec34229b44431..555c2ad7bcb0d 100644
--- a/pkgs/development/libraries/libunity/fix-vala.patch
+++ b/pkgs/development/libraries/libunity/fix-vala.patch
@@ -1,36 +1,12 @@
-diff -ru old/libunity/src/unity-aggregator-scope.vala libunity/src/unity-aggregator-scope.vala
---- old/libunity/src/unity-aggregator-scope.vala	1969-12-31 19:00:01.000000000 -0500
-+++ libunity/src/unity-aggregator-scope.vala	2019-09-21 17:06:12.663864891 -0400
-@@ -51,7 +51,7 @@
-    */
-   public abstract int category_index_for_scope_id (string scope_id);
+--- a/protocol/protocol-icon.vala	2013-08-27 12:53:57 +0000
++++ b/protocol/protocol-icon.vala	2021-04-13 22:34:41 +0000
+@@ -185,7 +185,7 @@
+   }
  
--  public AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
-+  protected AggregatorScope (string dbus_path_, string id_, MergeMode merge_mode = AggregatorScope.MergeMode.OWNER_SCOPE, bool proxy_filter_hints = false)
-   {
-     Object (dbus_path: dbus_path_, id: id_, is_master: true,
-             merge_mode: merge_mode, proxy_filter_hints: proxy_filter_hints);
-diff -ru old/libunity/src/unity-deprecated-scope.vala libunity/src/unity-deprecated-scope.vala
---- old/libunity/src/unity-deprecated-scope.vala	1969-12-31 19:00:01.000000000 -0500
-+++ libunity/src/unity-deprecated-scope.vala	2019-09-21 17:06:39.721627805 -0400
-@@ -61,7 +61,7 @@
-   internal CategorySet _categories;
-   internal FilterSet _filters;
-    
--  public DeprecatedScopeBase (string dbus_path_, string id_)
-+  protected DeprecatedScopeBase (string dbus_path_, string id_)
+   /* Added to GIcon interface in 2.37 */
+-  private Variant serialize ()
++  private Variant? serialize ()
    {
-     Object (dbus_path: dbus_path_, id: id_);
-   }
-diff -ru old/libunity/tools/preview-renderer.vala libunity/tools/preview-renderer.vala
---- old/libunity/tools/preview-renderer.vala	1969-12-31 19:00:01.000000000 -0500
-+++ libunity/tools/preview-renderer.vala	2019-09-21 17:09:16.201522110 -0400
-@@ -63,7 +63,7 @@
-      */
-     public abstract class GridRenderer: PreviewRenderer
-     {
--        public GridRenderer()
-+        protected GridRenderer()
-         {
-             Object();
-         }
+     Variant? ret = null;
+     return ret;
+
diff --git a/pkgs/development/libraries/libvirt-glib/default.nix b/pkgs/development/libraries/libvirt-glib/default.nix
index a61094d17fe86..5e1c0c671d904 100644
--- a/pkgs/development/libraries/libvirt-glib/default.nix
+++ b/pkgs/development/libraries/libvirt-glib/default.nix
@@ -1,21 +1,47 @@
-{ lib, stdenv, fetchurl, pkg-config, gobject-introspection, intltool, vala
-, libcap_ng, libvirt, libxml2
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, gobject-introspection
+, gettext
+, gtk-doc
+, docbook-xsl-nons
+, vala
+, libcap_ng
+, libvirt
+, libxml2
 }:
 
 stdenv.mkDerivation rec {
-  name = "libvirt-glib-3.0.0";
+  name = "libvirt-glib-4.0.0";
 
-  outputs = [ "out" "dev" ];
+  outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
-    url = "https://libvirt.org/sources/glib/${name}.tar.gz";
-    sha256 = "1zpbv4ninc57c9rw4zmmkvvqn7154iv1qfr20kyxn8xplalqrzvz";
+    url = "https://libvirt.org/sources/glib/${name}.tar.xz";
+    sha256 = "hCP3Bp2qR2MHMh0cEeLswoU0DNMsqfwFIHdihD7erL0=";
   };
 
-  nativeBuildInputs = [ pkg-config intltool vala gobject-introspection ];
-  buildInputs = [ libcap_ng libvirt libxml2 gobject-introspection ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    gtk-doc
+    docbook-xsl-nons
+    vala
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    libcap_ng
+    libvirt
+    libxml2
+    gobject-introspection
+  ];
 
-  enableParallelBuilding = true;
   strictDeps = true;
 
   meta = with lib; {
diff --git a/pkgs/development/libraries/libwnck/3.x.nix b/pkgs/development/libraries/libwnck/3.x.nix
index 3792b826f5942..5fb405f880e8a 100644
--- a/pkgs/development/libraries/libwnck/3.x.nix
+++ b/pkgs/development/libraries/libwnck/3.x.nix
@@ -63,6 +63,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "${pname}${lib.versions.major version}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libxmlxx/default.nix b/pkgs/development/libraries/libxmlxx/default.nix
index 19282ddc822d6..6db7e1f421b7f 100644
--- a/pkgs/development/libraries/libxmlxx/default.nix
+++ b/pkgs/development/libraries/libxmlxx/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/libzapojit/default.nix b/pkgs/development/libraries/libzapojit/default.nix
index d16f34039f193..805aaba9773c2 100644
--- a/pkgs/development/libraries/libzapojit/default.nix
+++ b/pkgs/development/libraries/libzapojit/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/mpich/default.nix b/pkgs/development/libraries/mpich/default.nix
index 49af2593e51ef..d2cbee14c3a09 100644
--- a/pkgs/development/libraries/mpich/default.nix
+++ b/pkgs/development/libraries/mpich/default.nix
@@ -1,15 +1,13 @@
 { stdenv, lib, fetchurl, perl, gfortran
 , openssh, hwloc, autoconf, automake, libtool
-# device options are ch3 or ch4
-, device ? "ch4"
-# backend option are libfabric or ucx
-, ch4backend ? "libfabric"
-, ucx, libfabric
+# either libfabric or ucx work for ch4backend on linux. On darwin, neither of
+# these libraries currently build so this argument is ignored on Darwin.
+, ch4backend
 # Process manager to build
 , withPm ? "hydra:gforker"
 } :
 
-assert (ch4backend == "ucx" || ch4backend == "libfabric");
+assert (ch4backend.pname == "ucx" || ch4backend.pname == "libfabric");
 
 stdenv.mkDerivation  rec {
   pname = "mpich";
@@ -45,8 +43,7 @@ stdenv.mkDerivation  rec {
   enableParallelBuilding = true;
 
   buildInputs = [ perl gfortran openssh hwloc ]
-    ++ lib.optional (ch4backend == "ucx") ucx
-    ++ lib.optional (ch4backend == "libfabric") libfabric;
+    ++ lib.optional (!stdenv.isDarwin) ch4backend;
 
   doCheck = true;
 
diff --git a/pkgs/development/libraries/nss/default.nix b/pkgs/development/libraries/nss/default.nix
index e6e2190a1a60a..962204268d7f2 100644
--- a/pkgs/development/libraries/nss/default.nix
+++ b/pkgs/development/libraries/nss/default.nix
@@ -18,7 +18,7 @@ let
   #       It will rebuild itself using the version of this package (NSS) and if
   #       an update is required do the required changes to the expression.
   #       Example: nix-shell ./maintainers/scripts/update.nix --argstr package cacert
-  version = "3.63";
+  version = "3.64";
   underscoreVersion = builtins.replaceStrings ["."] ["_"] version;
 
 in stdenv.mkDerivation rec {
@@ -27,7 +27,7 @@ in stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://mozilla/security/nss/releases/NSS_${underscoreVersion}_RTM/src/${pname}-${version}.tar.gz";
-    sha256 = "0892xbjcaw6g4rd2rs4qa37nbda248cjrgxa4faaw0licbpjyb8q";
+    sha256 = "09hivz4qf3dw7m21lshw34l0yncinwn4ax5w3rpkm71f2wkm85yk";
   };
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
diff --git a/pkgs/development/libraries/pango/default.nix b/pkgs/development/libraries/pango/default.nix
index 0369cedebf4cc..e181ca45a79ed 100644
--- a/pkgs/development/libraries/pango/default.nix
+++ b/pkgs/development/libraries/pango/default.nix
@@ -1,7 +1,6 @@
 { lib
 , stdenv
 , fetchurl
-, fetchpatch
 , pkg-config
 , cairo
 , harfbuzz
@@ -22,23 +21,15 @@
 
 stdenv.mkDerivation rec {
   pname = "pango";
-  version = "1.48.3";
+  version = "1.48.4";
 
   outputs = [ "bin" "out" "dev" "devdoc" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "0ijbkcs6217ygzphlpi0vajxkccifdbsl0jdjpy8wz11h9f19sin";
+    sha256 = "0ym3cvajy2asapj8xbhfpy05rak79afrhi32hiss0w900vxi72a1";
   };
 
-  patches = [
-    # Install developer documentation.
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/pango/commit/a2f35860115e8cd44f07d5158e2df059e8163a08.patch";
-      sha256 = "hN7O4DBk4A+TmBl6DGx6RHni5qRBg6akdjv9o3iWKDQ=";
-    })
-  ];
-
   nativeBuildInputs = [
     meson ninja
     glib # for glib-mkenum
@@ -90,6 +81,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/pangomm/2.48.nix b/pkgs/development/libraries/pangomm/2.48.nix
new file mode 100644
index 0000000000000..a5d452ac16ffb
--- /dev/null
+++ b/pkgs/development/libraries/pangomm/2.48.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, python3
+, pango
+, glibmm_2_68
+, cairomm_1_16
+, gnome3
+, ApplicationServices
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pangomm";
+  version= "2.48.0";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-ng7UdMM/jCACyp4rYcoNHz2OQJ4J6Z9NjBnur8z1W3g=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    python3
+  ] ++ lib.optional stdenv.isDarwin [
+    ApplicationServices
+  ];
+
+  propagatedBuildInputs = [
+    pango
+    glibmm_2_68
+    cairomm_1_16
+  ];
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "${pname}_2_48";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    description = "C++ interface to the Pango text rendering library";
+    longDescription = ''
+      Pango is a library for laying out and rendering of text, with an
+      emphasis on internationalization.  Pango can be used anywhere
+      that text layout is needed, though most of the work on Pango so
+      far has been done in the context of the GTK widget toolkit.
+      Pango forms the core of text and font handling for GTK.
+    '';
+    homepage = "https://www.pango.org/";
+    license = licenses.lgpl21Plus;
+    maintainers = teams.gnome.members ++ (with maintainers; [ lovek323 raskin ]);
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/development/libraries/pangomm/default.nix b/pkgs/development/libraries/pangomm/default.nix
index 3eb5f39c3825a..d858288af84fc 100644
--- a/pkgs/development/libraries/pangomm/default.nix
+++ b/pkgs/development/libraries/pangomm/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/poppler/default.nix b/pkgs/development/libraries/poppler/default.nix
index fd2a8ab92cfab..5a41fb0c341d0 100644
--- a/pkgs/development/libraries/poppler/default.nix
+++ b/pkgs/development/libraries/poppler/default.nix
@@ -10,7 +10,7 @@
 let
   mkFlag = optset: flag: "-DENABLE_${flag}=${if optset then "on" else "off"}";
 in
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (rec {
   name = "poppler-${suffix}-${version}";
   version = "21.02.0"; # beware: updates often break cups-filters build, check texlive and scribusUnstable too!
 
@@ -63,4 +63,17 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
     maintainers = with maintainers; [ ttuegel ] ++ teams.freedesktop.members;
   };
-}
+} // lib.optionalAttrs stdenv.isDarwin {
+  patches = [
+    # Fix build due to improperly used volatile in poppler-glib.
+    # https://gitlab.freedesktop.org/poppler/poppler/merge_requests/836
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/poppler/poppler/commit/47de887d7658cfd68df44b3acf710971054f957b.patch";
+      sha256 = "uvYibBn2fOEqdotxK0Wpf8KhGYZXrpHdmS4jjlRNCj8=";
+    })
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/poppler/poppler/commit/bdd110b45a38e8a4f80f522892e4c4a9e432abd5.patch";
+      sha256 = "WDUYXX6v5zk7tusz7DGBP58yFzgEvoBlNSLbfk7+QTc=";
+    })
+  ];
+})
diff --git a/pkgs/development/libraries/presage/default.nix b/pkgs/development/libraries/presage/default.nix
new file mode 100644
index 0000000000000..df15e73f73cf9
--- /dev/null
+++ b/pkgs/development/libraries/presage/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, dbus
+, doxygen
+, fontconfig
+, gettext
+, graphviz
+, help2man
+, pkg-config
+, sqlite
+, tinyxml
+, cppunit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "presage";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/presage/presage/${version}/presage-${version}.tar.gz";
+    sha256 = "0rm3b3zaf6bd7hia0lr1wyvi1rrvxkn7hg05r5r1saj0a3ingmay";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/community/presage/gcc6.patch";
+      sha256 = "0243nx1ygggmsly7057vndb4pkjxg9rpay5gyqqrq9jjzjzh63dj";
+    })
+    ./fixed-cppunit-detection.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    doxygen
+    fontconfig
+    gettext
+    graphviz
+    help2man
+    pkg-config
+  ];
+
+  preBuild = ''
+    export FONTCONFIG_FILE=${fontconfig.out}/etc/fonts/fonts.conf
+  '';
+
+  buildInputs = [
+    dbus
+    sqlite
+    tinyxml
+  ];
+
+  checkInputs = [
+    cppunit
+  ];
+
+  doCheck = true;
+
+  checkTarget = "check";
+
+  meta = with lib; {
+    description = "An intelligent predictive text entry system";
+    homepage = "https://presage.sourceforge.io/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/development/libraries/presage/fixed-cppunit-detection.patch b/pkgs/development/libraries/presage/fixed-cppunit-detection.patch
new file mode 100644
index 0000000000000..27238d2956d18
--- /dev/null
+++ b/pkgs/development/libraries/presage/fixed-cppunit-detection.patch
@@ -0,0 +1,46 @@
+From 5624aa156c551ab2b81bb86279844397ed690653 Mon Sep 17 00:00:00 2001
+From: Matteo Vescovi <matteo.vescovi@yahoo.co.uk>
+Date: Sun, 21 Jan 2018 17:17:12 +0000
+Subject: [PATCH] Fixed cppunit detection.
+
+---
+ configure.ac | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index a02e9f1..1538a51 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -204,10 +204,16 @@ AM_CONDITIONAL([USE_SQLITE], [test "x$use_sqlite" = "xyes"])
+ dnl ==================
+ dnl Checks for CppUnit
+ dnl ==================
+-AM_PATH_CPPUNIT([1.9.6],
+-                [],
+-                [AC_MSG_WARN([CppUnit not found. Unit tests will not be built. CppUnit can be obtained from http://cppunit.sourceforge.net.])])
+-AM_CONDITIONAL([HAVE_CPPUNIT], [test "$CPPUNIT_LIBS"])
++PKG_CHECK_MODULES([CPPUNIT],
++                  [cppunit >= 1.9],
++                  [have_cppunit=yes],
++                  [AM_PATH_CPPUNIT([1.9],
++                                   [have_cppunit=yes],
++                                   [AC_MSG_WARN([CppUnit not found. Unit tests will not be built. CppUnit can be obtained from http://cppunit.sourceforge.net.])])
++                  ])
++AC_SUBST([CPPUNIT_CFLAGS])
++AC_SUBST([CPPUNIT_LIBS])
++AM_CONDITIONAL([HAVE_CPPUNIT], [test "x$have_cppunit" = "xyes"])
+ 
+ 
+ dnl ============================
+@@ -592,7 +598,7 @@ then
+ else
+     build_demo_application="no"
+ fi
+-if test "$CPPUNIT_LIBS"
++if test "x$have_cppunit" = "xyes"
+ then
+     build_unit_tests="yes"
+ else
+-- 
+2.31.1
+
diff --git a/pkgs/development/libraries/rarian/default.nix b/pkgs/development/libraries/rarian/default.nix
index 522456cfa40d3..aa575f7e72aa9 100644
--- a/pkgs/development/libraries/rarian/default.nix
+++ b/pkgs/development/libraries/rarian/default.nix
@@ -15,12 +15,6 @@ in stdenv.mkDerivation rec {
     ++ (with perlPackages; [ perl XMLParser ]);
   configureFlags = [ "--with-xml-catalog=${docbook_xml_dtd_42}/xml/dtd/docbook/docbook.cat" ];
 
-  passthru = {
-    updateScript = gnome3.updateScript {
-      packageName = pname;
-    };
-  };
-
   meta = with lib; {
     description = "Documentation metadata library based on the proposed Freedesktop.org spec";
     homepage = "https://rarian.freedesktop.org/";
diff --git a/pkgs/development/libraries/speechd/default.nix b/pkgs/development/libraries/speechd/default.nix
index b6ec4842e077c..0f16a519169f8 100644
--- a/pkgs/development/libraries/speechd/default.nix
+++ b/pkgs/development/libraries/speechd/default.nix
@@ -2,6 +2,7 @@
 , substituteAll
 , pkg-config
 , fetchurl
+, fetchpatch
 , python3Packages
 , gettext
 , itstool
@@ -51,6 +52,13 @@ in stdenv.mkDerivation rec {
       src = ./fix-paths.patch;
       utillinux = util-linux;
     })
+
+    # Fix build with Glib 2.68
+    # https://github.com/brailcom/speechd/pull/462
+    (fetchpatch {
+      url = "https://github.com/brailcom/speechd/commit/a2faab416e42cbdf3d73f98578a89eb7a235e25a.patch";
+      sha256 = "8Q7tUdKKBBtgXZZnj59OcJOkrCNeBR9gkBjhKlpW0hQ=";
+    })
   ];
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/template-glib/default.nix b/pkgs/development/libraries/template-glib/default.nix
index 2c89e3f433ab4..e2bf9bbd49a51 100644
--- a/pkgs/development/libraries/template-glib/default.nix
+++ b/pkgs/development/libraries/template-glib/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/tepl/default.nix b/pkgs/development/libraries/tepl/default.nix
index 84d50faf54e25..b6ce86ddff4d4 100644
--- a/pkgs/development/libraries/tepl/default.nix
+++ b/pkgs/development/libraries/tepl/default.nix
@@ -13,13 +13,13 @@
 
 stdenv.mkDerivation rec {
   pname = "tepl";
-  version = "5.0.1";
+  version = "6.00.0";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sSdJZ2CfUkSEs4d1+p7LKWxtZhaqvQUvKGM5oomRKAQ=";
+    sha256 = "0qvs7s86gqyyrzi0r5fbrj8zczlgv8xhdjswgbgc1afwjnl9fqx8";
   };
 
   nativeBuildInputs = [
@@ -46,7 +46,10 @@ stdenv.mkDerivation rec {
   # correctly installed or GVfs metadata are not supported on this platform. In
   # the latter case, you should configure Tepl with --disable-gvfs-metadata.
 
-  passthru.updateScript = gnome3.updateScript { packageName = pname; };
+  passthru.updateScript = gnome3.updateScript {
+    packageName = pname;
+    versionPolicy = "odd-unstable";
+  };
 
   meta = with lib; {
     homepage = "https://wiki.gnome.org/Projects/Tepl";
diff --git a/pkgs/development/libraries/totem-pl-parser/default.nix b/pkgs/development/libraries/totem-pl-parser/default.nix
index c93ec8dccf9be..b559d4f59cf09 100644
--- a/pkgs/development/libraries/totem-pl-parser/default.nix
+++ b/pkgs/development/libraries/totem-pl-parser/default.nix
@@ -12,6 +12,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/libraries/tracker-miners/default.nix b/pkgs/development/libraries/tracker-miners/default.nix
index 5b4c1d195ecea..fddf9becb2df8 100644
--- a/pkgs/development/libraries/tracker-miners/default.nix
+++ b/pkgs/development/libraries/tracker-miners/default.nix
@@ -48,11 +48,11 @@
 
 stdenv.mkDerivation rec {
   pname = "tracker-miners";
-  version = "3.0.4";
+  version = "3.1.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-E877xx1S93RvPTfQQdjFvBM2pA/13ZK1Nw6GUMJqiY4=";
+    sha256 = "sha256-5NNhNRsVbyhipSRBX76/BTnHgc2HxmKWYvAmW0gDuLg=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/development/libraries/tracker/default.nix b/pkgs/development/libraries/tracker/default.nix
index ab769312c36f4..0af1476e7e26a 100644
--- a/pkgs/development/libraries/tracker/default.nix
+++ b/pkgs/development/libraries/tracker/default.nix
@@ -1,5 +1,6 @@
 { lib, stdenv
 , fetchurl
+, fetchpatch
 , gettext
 , meson
 , ninja
@@ -27,15 +28,15 @@
 , substituteAll
 }:
 
-stdenv.mkDerivation (rec {
+stdenv.mkDerivation rec {
   pname = "tracker";
-  version = "3.0.3";
+  version = "3.1.1";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-b1yEqzvh7aUgUBsq7XIhYWoM8VKRDFN3V7U4vAXv/KM=";
+    sha256 = "sha256-Q3bi6YRUBm9E96JC5FuZs7/kwDtn+rGauw7Vhsp0iuc=";
   };
 
   patches = [
@@ -43,6 +44,17 @@ stdenv.mkDerivation (rec {
       src = ./fix-paths.patch;
       inherit asciidoc;
     })
+
+    # Add missing build target dependencies to fix parallel building of docs.
+    # TODO: Upstream this.
+    ./fix-docs.patch
+
+    # Fix 32bit datetime issue, use this upstream patch until 3.1.2 lands
+    # https://gitlab.gnome.org/GNOME/tracker/-/merge_requests/401
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/tracker/merge_requests/401.patch";
+      sha256 = "QEf+ciGkkCzanmtGO0aig6nAxd+NxjvuNi4RbNOwZEA=";
+    })
   ];
 
   nativeBuildInputs = [
@@ -74,22 +86,23 @@ stdenv.mkDerivation (rec {
     libstemmer
   ];
 
-  checkInputs = [
-    python3.pkgs.pygobject3
+  checkInputs = with python3.pkgs; [
+    pygobject3
+    tappy
   ];
 
   mesonFlags = [
     "-Ddocs=true"
   ];
 
-  # https://gitlab.gnome.org/GNOME/tracker/-/issues/292#note_1075369
-  doCheck = !stdenv.isi686;
+  doCheck = true;
 
   postPatch = ''
     patchShebangs utils/g-ir-merge/g-ir-merge
     patchShebangs utils/data-generators/cc/generate
     patchShebangs tests/functional-tests/test-runner.sh.in
     patchShebangs tests/functional-tests/*.py
+    patchShebangs examples/python/endpoint.py
   '';
 
   preCheck = ''
@@ -134,8 +147,3 @@ stdenv.mkDerivation (rec {
     platforms = platforms.linux;
   };
 }
-  // {
-    # TMP: fatal error: libtracker-sparql/tracker-sparql-enum-types.h: No such file or directory
-    enableParallelBuilding = false;
-  }
-)
diff --git a/pkgs/development/libraries/tracker/fix-docs.patch b/pkgs/development/libraries/tracker/fix-docs.patch
new file mode 100644
index 0000000000000..a6ff84cda3e58
--- /dev/null
+++ b/pkgs/development/libraries/tracker/fix-docs.patch
@@ -0,0 +1,28 @@
+diff --git a/docs/reference/libtracker-sparql/examples/meson.build b/docs/reference/libtracker-sparql/examples/meson.build
+index 1cb1d9f3f..313c72345 100644
+--- a/docs/reference/libtracker-sparql/examples/meson.build
++++ b/docs/reference/libtracker-sparql/examples/meson.build
+@@ -1,20 +1,20 @@
+ executable(
+   'readonly-example',
+   'readonly-example.c',
+-  dependencies: tracker_sparql_dep,
++  dependencies: [tracker_common_dep, tracker_sparql_dep],
+   build_by_default: true
+ )
+ 
+ executable(
+   'writeonly-example',
+   'writeonly-example.c',
+-  dependencies: tracker_sparql_dep,
++  dependencies: [tracker_common_dep, tracker_sparql_dep],
+   build_by_default: true
+ )
+ 
+ executable(
+   'writeonly-with-blank-nodes-example',
+   'writeonly-with-blank-nodes-example.c',
+-  dependencies: tracker_sparql_dep,
++  dependencies: [tracker_common_dep, tracker_sparql_dep],
+   build_by_default: true
+ )
diff --git a/pkgs/development/libraries/umockdev/default.nix b/pkgs/development/libraries/umockdev/default.nix
index d27adb2a061df..2dac161bb4a41 100644
--- a/pkgs/development/libraries/umockdev/default.nix
+++ b/pkgs/development/libraries/umockdev/default.nix
@@ -1,6 +1,8 @@
-{ lib, stdenv
-, docbook_xsl
+{ stdenv
+, lib
+, docbook-xsl-nons
 , fetchurl
+, fetchpatch
 , glib
 , gobject-introspection
 , gtk-doc
@@ -19,21 +21,23 @@ stdenv.mkDerivation rec {
   pname = "umockdev";
   version = "0.15.4";
 
-  outputs = [ "bin" "out" "dev" "doc" ];
+  outputs = [ "bin" "out" "dev" "devdoc" ];
 
   src = fetchurl {
     url = "https://github.com/martinpitt/umockdev/releases/download/${version}/${pname}-${version}.tar.xz";
     sha256 = "09k8jwvsphd97hcagf0zaf0hwzlzq2r8jfgbmvj55k7ylrg8hjxg";
   };
 
-  mesonFlags = [
-    "-Dgtk_doc=true"
+  patches = [
+    # Fix build with Vala 0.52
+    (fetchpatch {
+      url = "https://github.com/martinpitt/umockdev/commit/a236f0b55fbb6ff50a6429da9d404703d6637d94.patch";
+      sha256 = "sZs9Ove1r7te/a9vmWUmFetLVhyzhHmx7ijhkK/2S5o=";
+    })
   ];
 
-  buildInputs = [ glib systemd libgudev ];
-
   nativeBuildInputs = [
-    docbook_xsl
+    docbook-xsl-nons
     gobject-introspection
     gtk-doc
     meson
@@ -42,20 +46,27 @@ stdenv.mkDerivation rec {
     vala
   ];
 
-  checkInputs = [ python3 which usbutils ];
+  buildInputs = [
+    glib
+    systemd
+    libgudev
+  ];
+
+  checkInputs = [
+    python3
+    which
+    usbutils
+  ];
 
-  enableParallelBuilding = true;
+  mesonFlags = [
+    "-Dgtk_doc=true"
+  ];
 
   doCheck = true;
 
-  postInstall = ''
-    mkdir -p $doc/share/doc/umockdev/
-    mv docs/reference $doc/share/doc/umockdev/
-  '';
-
   meta = with lib; {
     description = "Mock hardware devices for creating unit tests";
-    license = licenses.lgpl2;
+    license = licenses.lgpl21Plus;
     maintainers = with maintainers; [ flokli ];
     platforms = with platforms; linux;
   };
diff --git a/pkgs/development/libraries/vte/default.nix b/pkgs/development/libraries/vte/default.nix
index a17b164445f32..13d4169cf14af 100644
--- a/pkgs/development/libraries/vte/default.nix
+++ b/pkgs/development/libraries/vte/default.nix
@@ -11,6 +11,7 @@
 , gtk3
 , gobject-introspection
 , vala
+, python3
 , libxml2
 , gnutls
 , gperf
@@ -24,18 +25,25 @@
 
 stdenv.mkDerivation rec {
   pname = "vte";
-  version = "0.62.2";
+  version = "0.64.1";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-sDALvPDALfWBKhCjy45P/3I7q5LAjJegqQwWfPVDr/A=";
+    sha256 = "sha256-EvtBqf+OA8XxcRtGVgkQpLmzECrsPp52Cc7vTfqYqio=";
   };
 
-  passthru = {
-    updateScript = gnome3.updateScript { packageName = pname; };
-  };
+  patches = [
+    # VTE needs a small patch to work with musl:
+    # https://gitlab.gnome.org/GNOME/vte/issues/72
+    # Taken from https://git.alpinelinux.org/aports/tree/community/vte3
+    (fetchpatch {
+      name = "0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch";
+      url = "https://git.alpinelinux.org/aports/plain/community/vte3/fix-W_EXITCODE.patch?id=4d35c076ce77bfac7655f60c4c3e4c86933ab7dd";
+      sha256 = "FkVyhsM0mRUzZmS2Gh172oqwcfXv6PyD6IEgjBhy2uU=";
+    })
+  ];
 
   nativeBuildInputs = [
     gettext
@@ -46,6 +54,7 @@ stdenv.mkDerivation rec {
     ninja
     pkg-config
     vala
+    python3
   ];
 
   buildInputs = [
@@ -64,22 +73,20 @@ stdenv.mkDerivation rec {
     pango
   ];
 
-  patches =
-    # VTE needs a small patch to work with musl:
-    # https://gitlab.gnome.org/GNOME/vte/issues/72
-    lib.optional
-      stdenv.hostPlatform.isMusl
-      (fetchpatch {
-            name = "0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch";
-            url = "https://gitlab.gnome.org/GNOME/vte/uploads/c334f767f5d605e0f30ecaa2a0e4d226/0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch";
-            sha256 = "1ii9db9i5l3fy2alxz7bjfsgjs3lappnlx339dvxbi2141zknf5r";
-      });
-
   postPatch = ''
     patchShebangs perf/*
     patchShebangs src/box_drawing_generate.sh
+    patchShebangs src/parser-seq.py
+    patchShebangs src/modes.py
   '';
 
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "odd-unstable";
+    };
+  };
+
   meta = with lib; {
     homepage = "https://www.gnome.org/";
     description = "A library implementing a terminal emulator widget for GTK";
@@ -91,7 +98,7 @@ stdenv.mkDerivation rec {
       character set conversion, as well as emulating any terminal known to
       the system's terminfo database.
     '';
-    license = licenses.lgpl2;
+    license = licenses.lgpl3Plus;
     maintainers = with maintainers; [ astsmtl antono lethalman ] ++ teams.gnome.members;
     platforms = platforms.unix;
   };
diff --git a/pkgs/development/libraries/webkitgtk/default.nix b/pkgs/development/libraries/webkitgtk/default.nix
index 84a9e2a1db779..f4b716ee6d4e8 100644
--- a/pkgs/development/libraries/webkitgtk/default.nix
+++ b/pkgs/development/libraries/webkitgtk/default.nix
@@ -57,8 +57,6 @@
 
 assert enableGeoLocation -> geoclue2 != null;
 
-with lib;
-
 stdenv.mkDerivation rec {
   pname = "webkitgtk";
   version = "2.32.0";
@@ -72,7 +70,7 @@ stdenv.mkDerivation rec {
     sha256 = "1w3b0w8izp0i070grhv19j631sdcd0mcqnjnax13k8mdx7dg8zcx";
   };
 
-  patches = optionals stdenv.isLinux [
+  patches = lib.optionals stdenv.isLinux [
     (substituteAll {
       src = ./fix-bubblewrap-paths.patch;
       inherit (builtins) storeDir;
@@ -85,7 +83,7 @@ stdenv.mkDerivation rec {
     # pick up the wrong gettext. TODO: Find a better solution for
     # this, maybe make cmake not look up executables in
     # CMAKE_PREFIX_PATH.
-    cmakeFlags+=" -DCMAKE_IGNORE_PATH=${getBin gettext}/bin"
+    cmakeFlags+=" -DCMAKE_IGNORE_PATH=${lib.getBin gettext}/bin"
   '';
 
   nativeBuildInputs = [
@@ -118,7 +116,9 @@ stdenv.mkDerivation rec {
     libgcrypt
     libidn
     libintl
+  ] ++ lib.optionals stdenv.isLinux [
     libmanette
+  ] ++ [
     libnotify
     libpthreadstubs
     libsecret
@@ -138,16 +138,16 @@ stdenv.mkDerivation rec {
     libXdmcp
     libXt
     libXtst
-  ]) ++ optionals stdenv.isDarwin [
+  ]) ++ lib.optionals stdenv.isDarwin [
     libedit
     readline
-  ] ++ optionals stdenv.isLinux [
+  ] ++ lib.optionals stdenv.isLinux [
     bubblewrap
     libseccomp
     systemd
     wayland
     xdg-dbus-proxy
-  ] ++ optional enableGeoLocation geoclue2;
+  ] ++ lib.optional enableGeoLocation geoclue2;
 
   propagatedBuildInputs = [
     gtk3
@@ -159,27 +159,34 @@ stdenv.mkDerivation rec {
     "-DPORT=GTK"
     "-DUSE_LIBHYPHEN=OFF"
     "-DUSE_WPE_RENDERER=OFF"
-  ] ++ optionals stdenv.isDarwin [
-    "-DENABLE_GRAPHICS_CONTEXT_3D=OFF"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DENABLE_GAMEPAD=OFF"
     "-DENABLE_GTKDOC=OFF"
     "-DENABLE_MINIBROWSER=OFF"
-    "-DENABLE_OPENGL=OFF"
     "-DENABLE_QUARTZ_TARGET=ON"
     "-DENABLE_VIDEO=ON"
     "-DENABLE_WEBGL=OFF"
     "-DENABLE_WEB_AUDIO=OFF"
     "-DENABLE_X11_TARGET=OFF"
-    "-DUSE_ACCELERATE=0"
+    "-DUSE_APPLE_ICU=OFF"
+    "-DUSE_OPENGL_OR_ES=OFF"
     "-DUSE_SYSTEM_MALLOC=ON"
-  ] ++ optional (stdenv.isLinux && enableGLES) "-DENABLE_GLES2=ON";
+  ] ++ lib.optionals (!stdenv.isLinux) [
+    "-DUSE_SYSTEMD=OFF"
+  ] ++ lib.optional (stdenv.isLinux && enableGLES) "-DENABLE_GLES2=ON";
 
   postPatch = ''
     patchShebangs .
+  '' + lib.optionalString stdenv.isDarwin ''
+    # It needs malloc_good_size.
+    sed 22i'#include <malloc/malloc.h>' -i Source/WTF/wtf/FastMalloc.h
+    # <CommonCrypto/CommonRandom.h> needs CCCryptorStatus.
+    sed 43i'#include <CommonCrypto/CommonCryptor.h>' -i Source/WTF/wtf/RandomDevice.cpp
   '';
 
   requiredSystemFeatures = [ "big-parallel" ];
 
-  meta = {
+  meta = with lib; {
     description = "Web content rendering engine, GTK port";
     homepage = "https://webkitgtk.org/";
     license = licenses.bsd2;
diff --git a/pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix b/pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix
index be96001c46fb2..f94d35fd131c7 100644
--- a/pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix
+++ b/pkgs/development/libraries/xdg-desktop-portal-gtk/default.nix
@@ -32,10 +32,10 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     glib
-    gsettings-desktop-schemas
+    gsettings-desktop-schemas # settings exposed by settings portal
     gtk3
     gnome3.gnome-desktop
-    gnome3.gnome-settings-daemon # schemas needed for settings api (fonts, etc)
+    gnome3.gnome-settings-daemon # schemas needed for settings api (mostly useless now that fonts were moved to g-d-s)
   ];
 
   meta = with lib; {
diff --git a/pkgs/development/libraries/zeitgeist/default.nix b/pkgs/development/libraries/zeitgeist/default.nix
index 039ecc610f414..339f21c138b11 100644
--- a/pkgs/development/libraries/zeitgeist/default.nix
+++ b/pkgs/development/libraries/zeitgeist/default.nix
@@ -20,7 +20,7 @@
 
 stdenv.mkDerivation rec {
   pname = "zeitgeist";
-  version = "1.0.2";
+  version = "1.0.3";
 
   outputs = [ "out" "lib" "dev" "man" ] ++ lib.optional pythonSupport "py";
 
@@ -29,14 +29,14 @@ stdenv.mkDerivation rec {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "0ig3d3j1n0ghaxsgfww6g2hhcdwx8cljwwfmp9jk1nrvkxd6rnmv";
+    sha256 = "0y6fyzxl5np4yskcxibd0p03h619w9ir907nhf40h02y0pk1kgkp";
   };
 
   patches = [
-    # Fix build with gettext 0.20
+    # Fix build with Vala 0.52
     (fetchpatch {
-      url = "https://gitlab.freedesktop.org/zeitgeist/zeitgeist/commit/b5c00e80189fd59a059a95c4e276728a2492cb89.patch";
-      sha256 = "1r7f7j3l2p6xlzxajihgx8bzbc2sxcb9spc9pi26rz9bwmngdyq7";
+      url = "https://gitlab.freedesktop.org/zeitgeist/zeitgeist/commit/64ac3a6f94cd299e5e14945dc31b48f009dec152.patch";
+      sha256 = "Dw1kNE3JoFdmgcQ0eFoFLYvmxlPjXNj56Jkn2meINz4=";
     })
   ];
 
diff --git a/pkgs/development/misc/msp430/mspds/binary.nix b/pkgs/development/misc/msp430/mspds/binary.nix
new file mode 100644
index 0000000000000..690ed3e45e717
--- /dev/null
+++ b/pkgs/development/misc/msp430/mspds/binary.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchurl, unzip, autoPatchelfHook }:
+
+with lib;
+
+let
+  archPostfix = optionalString (stdenv.is64bit && !stdenv.isDarwin) "_64";
+in stdenv.mkDerivation rec {
+  pname = "msp-debug-stack-bin";
+  version = "3.15.1.1";
+  src = fetchurl {
+    url = "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPDS/3_15_1_001/export/MSP430_DLL_Developer_Package_Rev_3_15_1_1.zip";
+    sha256 = "1m1ssrwbhqvqwbp3m4hnjyxnz3f9d4acz9vl1av3fbnhvxr0d2hb";
+  };
+  sourceRoot = ".";
+
+  libname =
+    if stdenv.hostPlatform.isWindows then "MSP430${archPostfix}.dll"
+    else "libmsp430${archPostfix}${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  nativeBuildInputs = [ unzip autoPatchelfHook ];
+  buildInputs = [ stdenv.cc.cc ];
+
+  installPhase = ''
+    install -Dm0755 $libname $out/lib/''${libname//_64/}
+    install -Dm0644 -t $out/include Inc/*.h
+  '';
+
+  meta = {
+    description = "Unfree binary release of the TI MSP430 FET debug driver";
+    homepage = https://www.ti.com/tool/MSPDS;
+    license = licenses.unfree;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ aerialx ];
+  };
+}
diff --git a/pkgs/development/misc/msp430/mspds/bsl430.patch b/pkgs/development/misc/msp430/mspds/bsl430.patch
new file mode 100644
index 0000000000000..6c57fb040e267
--- /dev/null
+++ b/pkgs/development/misc/msp430/mspds/bsl430.patch
@@ -0,0 +1,51 @@
+diff -ruN a/Makefile b/Makefile
+--- a/Makefile	2020-06-03 16:10:18.000000000 -0700
++++ b/Makefile	2020-07-21 18:03:12.464121056 -0700
+@@ -42,7 +42,7 @@
+ 
+ PLATFORM := $(shell uname -s)
+ ifeq ($(PLATFORM),Linux)
+-	CXX:= g++
++	CXX?= g++
+ 	
+ 	STATICOUTPUT := linux64
+ 
+@@ -68,7 +68,7 @@
+ 
+ 	HIDOBJ := $(LIBTHIRD)/hid-libusb.o
+ else
+-	CXX:= clang++
++	CXX?= clang++
+ 
+ 	OUTPUT := libmsp430.dylib
+ 	STATICOUTPUT := mac64
+@@ -134,7 +134,7 @@
+ 	$(CXX) -c -o $@ $< $(USE_PCH) $(CXXFLAGS) $(INCLUDES) $(DEFINES)
+ 
+ $(BSLLIB):
+-	$(MAKE) -C ./ThirdParty/BSL430_DLL
++	$(MAKE) -C ./ThirdParty/BSL430_DLL OUTPUT=../../$(BSLLIB)
+ 
+ install:
+ 	cp $(OUTPUT) /usr/local/lib/
+diff -ruN a/ThirdParty/BSL430_DLL/Makefile b/ThirdParty/BSL430_DLL/Makefile
+--- a/ThirdParty/BSL430_DLL/Makefile	2019-11-18 13:16:00.000000000 -0800
++++ b/ThirdParty/BSL430_DLL/Makefile	2020-07-21 18:02:55.987782494 -0700
+@@ -36,7 +36,7 @@
+ 
+ PLATFORM := $(shell uname -s)
+ ifeq ($(PLATFORM),Linux)
+-	CXX:= g++
++	CXX?= g++
+ 
+ 	ifdef BIT32
+ 	CXXFLAGS += -m32
+@@ -47,7 +47,7 @@
+ 	INCLUDES += -I$(BOOST_DIR)
+ 	endif
+ else
+-	CXX:= clang++
++	CXX?= clang++
+ 
+ 	ifdef BOOST_DIR
+ 	INCLUDES += -I$(BOOST_DIR)/include
diff --git a/pkgs/development/misc/msp430/mspds/default.nix b/pkgs/development/misc/msp430/mspds/default.nix
new file mode 100644
index 0000000000000..2481b50bfbef6
--- /dev/null
+++ b/pkgs/development/misc/msp430/mspds/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchurl, unzip
+, boost, pugixml
+, hidapi
+, libusb1 ? null
+}:
+
+with lib;
+assert stdenv.isLinux -> libusb1 != null;
+
+let
+  hidapiDriver = optionalString stdenv.isLinux "-libusb";
+
+in stdenv.mkDerivation {
+  pname = "msp-debug-stack";
+  version = "3.15.1.1";
+
+  src = fetchurl {
+    url = "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPDS/3_15_1_001/export/MSPDebugStack_OS_Package_3_15_1_1.zip";
+    sha256 = "1j5sljqwc20zrb50mrji4mnmw5i680qc7n0lb0pakrrxqjc9m9g3";
+  };
+  sourceRoot = ".";
+
+  enableParallelBuilding = true;
+  libName = "libmsp430${stdenv.hostPlatform.extensions.sharedLibrary}";
+  makeFlags = [ "OUTPUT=$(libName)" "HIDOBJ=" ];
+  NIX_LDFLAGS = [ "-lpugixml" "-lhidapi${hidapiDriver}" ];
+  NIX_CFLAGS_COMPILE = [ "-I${hidapi}/include/hidapi" ];
+
+  patches = [ ./bsl430.patch ];
+
+  preBuild = ''
+    rm ThirdParty/src/pugixml.cpp
+    rm ThirdParty/include/pugi{config,xml}.hpp
+  '' + optionalString stdenv.isDarwin ''
+    makeFlagsArray+=(OUTNAME="-install_name ")
+  '';
+
+  installPhase = ''
+    install -Dm0755 -t $out/lib $libName
+    install -Dm0644 -t $out/include DLL430_v3/include/*.h
+  '';
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ boost hidapi pugixml ]
+    ++ optional stdenv.isLinux libusb1;
+
+  meta = {
+    description = "TI MSP430 FET debug driver";
+    homepage = https://www.ti.com/tool/MSPDS;
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ aerialx ];
+  };
+}
diff --git a/pkgs/development/misc/yelp-tools/default.nix b/pkgs/development/misc/yelp-tools/default.nix
index bf348d68041a3..ca7050c06781b 100644
--- a/pkgs/development/misc/yelp-tools/default.nix
+++ b/pkgs/development/misc/yelp-tools/default.nix
@@ -6,28 +6,44 @@
 , itstool
 , gnome3
 , pkg-config
+, meson
+, ninja
+, python3
 }:
 
-stdenv.mkDerivation rec {
+python3.pkgs.buildPythonApplication rec {
   pname = "yelp-tools";
-  version = "3.38.0";
+  version = "40.0";
+
+  format = "other";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/yelp-tools/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1c045c794sm83rrjan67jmsk20qacrw1m814p4nw85w5xsry8z30";
+    url = "mirror://gnome/sources/yelp-tools/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1bkanqp3qwmirv06mi99qv2acr5ba5rlhy9zlh0fyrfxygraqjv6";
   };
 
   nativeBuildInputs = [
     pkg-config
+    meson
+    ninja
+  ];
+
+  propagatedBuildInputs = [
+    libxml2 # xmllint required by yelp-check.
+    libxslt # xsltproc required by yelp-build and yelp-check.
   ];
 
   buildInputs = [
-    libxml2
-    libxslt
-    itstool
+    itstool # build script checks for its presence but I am not sure if anything uses it
     gnome3.yelp-xsl
   ];
 
+  pythonPath = [
+    python3.pkgs.lxml
+  ];
+
+  strictDeps = false; # TODO: Meson cannot find xmllint oherwise. Maybe add it to machine file?
+
   doCheck = true;
 
   passthru = {
diff --git a/pkgs/development/python-modules/dask-glm/default.nix b/pkgs/development/python-modules/dask-glm/default.nix
index ca25e05bb1ed3..d091785db112b 100644
--- a/pkgs/development/python-modules/dask-glm/default.nix
+++ b/pkgs/development/python-modules/dask-glm/default.nix
@@ -8,7 +8,7 @@
 , setuptools-scm
 , scipy
 , scikitlearn
-, pytest
+, pytestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -21,13 +21,9 @@ buildPythonPackage rec {
   };
 
   nativeBuildInputs = [ setuptools-scm ];
-  checkInputs = [ pytest ];
+  checkInputs = [ pytestCheckHook ];
   propagatedBuildInputs = [ cloudpickle dask numpy toolz multipledispatch scipy scikitlearn ];
 
-  checkPhase = ''
-    py.test dask_glm
-  '';
-
   meta = with lib; {
     homepage = "https://github.com/dask/dask-glm/";
     description = "Generalized Linear Models with Dask";
diff --git a/pkgs/development/python-modules/dask-ml/default.nix b/pkgs/development/python-modules/dask-ml/default.nix
index 517056866bb43..b02c9a71a6bdd 100644
--- a/pkgs/development/python-modules/dask-ml/default.nix
+++ b/pkgs/development/python-modules/dask-ml/default.nix
@@ -26,6 +26,10 @@ buildPythonPackage rec {
     sha256 = "8fc4ac3ec1915e382fb8cae9ff1ec9b5ac1bee0b6f4c6975d6e6cb7191a4a815";
   };
 
+  nativeBuildInputs = [
+    setuptools-scm
+  ];
+
   propagatedBuildInputs = [
     dask
     dask-glm
@@ -39,7 +43,6 @@ buildPythonPackage rec {
     scipy
     six
     toolz
-    setuptools-scm
   ];
 
   # has non-standard build from source, and pypi doesn't include tests
diff --git a/pkgs/development/python-modules/dask/default.nix b/pkgs/development/python-modules/dask/default.nix
index 1c6d37681a683..55ba3ad6ba7fc 100644
--- a/pkgs/development/python-modules/dask/default.nix
+++ b/pkgs/development/python-modules/dask/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , bokeh
 , buildPythonPackage
 , fetchpatch
@@ -77,9 +78,7 @@ buildPythonPackage rec {
     "-m 'not network'"
   ];
 
-  disabledTests = [
-    "test_annotation_pack_unpack"
-    "test_annotations_blockwise_unpack"
+  disabledTests = lib.optionals stdenv.isDarwin [
     # this test requires features of python3Packages.psutil that are
     # blocked in sandboxed-builds
     "test_auto_blocksize_csv"
diff --git a/pkgs/development/python-modules/hdate/default.nix b/pkgs/development/python-modules/hdate/default.nix
new file mode 100644
index 0000000000000..a034eddd56517
--- /dev/null
+++ b/pkgs/development/python-modules/hdate/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, astral
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, poetry-core
+, pytestCheckHook
+, pythonOlder
+, pytz
+}:
+
+buildPythonPackage rec {
+  pname = "hdate";
+  version = "0.10.2";
+  disabled = pythonOlder "3.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "py-libhdate";
+    repo = "py-libhdate";
+    rev = "v${version}";
+    sha256 = "07b0c7q8w6flj4q72v58d3wymsxfp5qz8z97qhhc2977mjx5fsxd";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    astral
+    pytz
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  patches = [
+    # Version was not updated for the release
+    (fetchpatch {
+      name = "update-version.patch";
+      url = "https://github.com/py-libhdate/py-libhdate/commit/b8186a891b29fed99def5ce0985ee0ae1e0dd77e.patch";
+      sha256 = "1pmhgh57x9390ff5gyisng0l6b79sd6dxmf172hpk1gr03c3hv98";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml --replace "^2020.5" ">=2020.5"
+  '';
+
+  pytestFlagsArray = [
+    "tests"
+  ];
+
+  pythonImportsCheck = [ "hdate" ];
+
+  meta = with lib; {
+    description = "Python module for Jewish/Hebrew date and Zmanim";
+    homepage = "https://github.com/py-libhdate/py-libhdate";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/development/python-modules/pg8000/default.nix b/pkgs/development/python-modules/pg8000/default.nix
index a03452d786280..958d3b7655926 100644
--- a/pkgs/development/python-modules/pg8000/default.nix
+++ b/pkgs/development/python-modules/pg8000/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "pg8000";
-  version = "1.19.2";
+  version = "1.19.4";
   disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-RMu008kS8toWfKAr+YoAQPfpMmDk7xFMKNXWFSAS6gc=";
+    sha256 = "sha256-fJxtV1QbDyFT4jqNdZzrPXy5MIkY+6atnpL44OWpC8g=";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/pyatspi/default.nix b/pkgs/development/python-modules/pyatspi/default.nix
index 5ae00417b6c0b..bd4de52294326 100644
--- a/pkgs/development/python-modules/pyatspi/default.nix
+++ b/pkgs/development/python-modules/pyatspi/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "pyatspi";
-  version = "2.38.0";
+  version = "2.38.1";
   format = "other";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "/4CTEv0ML2HhkcGBoaY4owtXm5G2gs+1oFU1pVJltD0=";
+    sha256 = "0lc1p6p296c9q3lffi03v902jlsj34i7yyl3rcyaq94wwbljg7z4";
   };
 
   nativeBuildInputs = [ pkg-config ];
@@ -23,6 +23,7 @@ buildPythonPackage rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "python3.pkgs.${pname}";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/development/python-modules/pygobject/3.36.nix b/pkgs/development/python-modules/pygobject/3.36.nix
index ccad57eba1edf..27bf8762d591c 100644
--- a/pkgs/development/python-modules/pygobject/3.36.nix
+++ b/pkgs/development/python-modules/pygobject/3.36.nix
@@ -23,13 +23,6 @@ buildPythonPackage rec {
                  ++ lib.optionals stdenv.isDarwin [ which ncurses ];
   propagatedBuildInputs = [ pycairo cairo ];
 
-  passthru = {
-    updateScript = gnome3.updateScript {
-      packageName = pname;
-      attrPath = "python3.pkgs.${pname}3";
-    };
-  };
-
   meta = with lib; {
     homepage = "https://pygobject.readthedocs.io/";
     description = "Python bindings for Glib";
diff --git a/pkgs/development/python-modules/pygobject/3.nix b/pkgs/development/python-modules/pygobject/3.nix
index 8c26ec6174b26..641a30b16277f 100644
--- a/pkgs/development/python-modules/pygobject/3.nix
+++ b/pkgs/development/python-modules/pygobject/3.nix
@@ -1,37 +1,66 @@
-{ lib, stdenv, fetchurl, buildPythonPackage, pkg-config, glib, gobject-introspection,
-pycairo, cairo, which, ncurses, meson, ninja, isPy3k, gnome3 }:
+{ lib
+, stdenv
+, fetchurl
+, buildPythonPackage
+, pkg-config
+, glib
+, gobject-introspection
+, pycairo
+, cairo
+, which
+, ncurses
+, meson
+, ninja
+, isPy3k
+, gnome3
+}:
 
 buildPythonPackage rec {
   pname = "pygobject";
-  version = "3.38.0";
+  version = "3.40.1";
 
-  disabled = ! isPy3k;
+  outputs = [ "out" "dev" ];
+
+  disabled = !isPy3k;
 
   format = "other";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "A3LRu5Ei/Bn1AKJJsfOMK7Z0hQAPWIdJe0sgWz5whNU=";
+    sha256 = "0d80g5kgf2i9cginyhalvb7ibfk9g30yilqzmcsw6h6byj8xbih0";
   };
 
-  outputs = [ "out" "dev" ];
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    gobject-introspection
+  ] ++ lib.optionals stdenv.isDarwin [
+    ncurses
+  ];
 
-  nativeBuildInputs = [ pkg-config meson ninja gobject-introspection ];
-  buildInputs = [ glib gobject-introspection ]
-                 ++ lib.optionals stdenv.isDarwin [ which ncurses ];
-  propagatedBuildInputs = [ pycairo cairo ];
+  propagatedBuildInputs = [
+    pycairo
+    cairo
+  ];
 
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "python3.pkgs.${pname}3";
+      versionPolicy = "odd-unstable";
     };
   };
 
   meta = with lib; {
     homepage = "https://pygobject.readthedocs.io/";
     description = "Python bindings for Glib";
-    license = licenses.gpl2;
+    license = licenses.lgpl21Plus;
     maintainers = with maintainers; [ jtojnar ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/development/python-modules/tappy/default.nix b/pkgs/development/python-modules/tappy/default.nix
new file mode 100644
index 0000000000000..9e0b83bc925d6
--- /dev/null
+++ b/pkgs/development/python-modules/tappy/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchPypi
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "tap.py";
+  version = "3.0";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-9e7u6/1k5T0yZhdSu0wohYmjuru5bbPzkaTsKfE1nHA=";
+  };
+
+  checkInputs = [ pytestCheckHook ];
+
+  pythonImportsCheck = [ "tap" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/python-tap/tappy";
+    description = "A set of tools for working with the Test Anything Protocol (TAP) in Python";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ sfrijters ];
+  };
+}
diff --git a/pkgs/development/tools/profiling/sysprof/capture.nix b/pkgs/development/tools/profiling/sysprof/capture.nix
index a9443eeadf6e2..2d33dedbdd25a 100644
--- a/pkgs/development/tools/profiling/sysprof/capture.nix
+++ b/pkgs/development/tools/profiling/sysprof/capture.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = sysprof.meta // {
     description = "Static library for Sysprof capture data generation";
+    license = lib.licenses.bsd2Patent;
     platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/development/tools/profiling/sysprof/default.nix b/pkgs/development/tools/profiling/sysprof/default.nix
index 9e749adea2091..725d8d10e1182 100644
--- a/pkgs/development/tools/profiling/sysprof/default.nix
+++ b/pkgs/development/tools/profiling/sysprof/default.nix
@@ -5,6 +5,7 @@
 , gettext
 , glib
 , gtk3
+, json-glib
 , itstool
 , libdazzle
 , libxml2
@@ -20,13 +21,13 @@
 
 stdenv.mkDerivation rec {
   pname = "sysprof";
-  version = "3.38.1";
+  version = "3.40.1";
 
   outputs = [ "out" "lib" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1z2i9187f2jx456l7h07wy8m9a0p7pj3xiv1aji3snq7rjb1lkj0";
+    sha256 = "0dvlzjwi3a4g37cpyhqpf41f5hypf0gim1jw9wqlv30flbb00l62";
   };
 
   nativeBuildInputs = [
@@ -41,7 +42,16 @@ stdenv.mkDerivation rec {
     wrapGAppsHook
     gnome3.adwaita-icon-theme
   ];
-  buildInputs = [ glib gtk3 pango polkit systemd.dev (lib.getLib systemd) libdazzle ];
+
+  buildInputs = [
+    glib
+    gtk3
+    json-glib
+    pango
+    polkit
+    systemd
+    libdazzle
+  ];
 
   mesonFlags = [
     "-Dsystemdunitdir=lib/systemd/system"
@@ -50,6 +60,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
@@ -65,6 +76,6 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.gpl2Plus;
     maintainers = teams.gnome.members;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/vala-lint/default.nix b/pkgs/development/tools/vala-lint/default.nix
index a45ced8a49222..3c91880e16ed0 100644
--- a/pkgs/development/tools/vala-lint/default.nix
+++ b/pkgs/development/tools/vala-lint/default.nix
@@ -1,4 +1,5 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
 , glib
 , meson
@@ -12,13 +13,13 @@
 
 stdenv.mkDerivation rec {
   pname = "vala-lint-unstable";
-  version = "2020-08-18";
+  version = "2021-02-17";
 
   src = fetchFromGitHub {
     owner = "vala-lang";
     repo = "vala-lint";
-    rev = "fc5dd9e95bc61540b404d5bc070c0629903baad9";
-    sha256 = "n6pp6vYGaRF8B3phWp/e9KnpKGf0Op+xGVdT6HHe0rM=";
+    rev = "5b06cc2341ae7e9f7f8c35c542ef78c36e864c30";
+    sha256 = "KwJ5sCp9ZrrxIqc6qi2+ZdHBt1esNOO1+uDkS+d9mW8=";
   };
 
   nativeBuildInputs = [
@@ -34,8 +35,7 @@ stdenv.mkDerivation rec {
     glib
   ];
 
-  # See https://github.com/vala-lang/vala-lint/issues/133
-  doCheck = false;
+  doCheck = true;
 
   meta = with lib; {
     homepage = "https://github.com/vala-lang/vala-lint";
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix
index 28b7aed5f397d..cdd00d07d8688 100644
--- a/pkgs/servers/home-assistant/component-packages.nix
+++ b/pkgs/servers/home-assistant/component-packages.nix
@@ -413,7 +413,7 @@
     "itach" = ps: with ps; [ ]; # missing inputs: pyitachip2ir
     "itunes" = ps: with ps; [ ];
     "izone" = ps: with ps; [ ]; # missing inputs: python-izone
-    "jewish_calendar" = ps: with ps; [ ]; # missing inputs: hdate
+    "jewish_calendar" = ps: with ps; [ hdate ];
     "joaoapps_join" = ps: with ps; [ ]; # missing inputs: python-join-api
     "juicenet" = ps: with ps; [ ]; # missing inputs: python-juicenet
     "kaiterra" = ps: with ps; [ ]; # missing inputs: kaiterra-async-client
diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix
index 4df380e2b5a09..4ca42120e582d 100644
--- a/pkgs/servers/home-assistant/default.nix
+++ b/pkgs/servers/home-assistant/default.nix
@@ -272,6 +272,7 @@ in with py.pkgs; buildPythonApplication rec {
     "intent"
     "intent_script"
     "ipp"
+    "jewish_calendar"
     "kmtronic"
     "knx"
     "kodi"
diff --git a/pkgs/servers/keycloak/default.nix b/pkgs/servers/keycloak/default.nix
index 3726facd58351..3138a68a9bcff 100644
--- a/pkgs/servers/keycloak/default.nix
+++ b/pkgs/servers/keycloak/default.nix
@@ -18,11 +18,11 @@ let
 in
 stdenv.mkDerivation rec {
   pname   = "keycloak";
-  version = "12.0.4";
+  version = "13.0.0";
 
   src = fetchzip {
     url    = "https://github.com/keycloak/keycloak/releases/download/${version}/keycloak-${version}.zip";
-    sha256 = "sha256-7DKKpuKPoSKIpfvhCvLzuyepbmixgq0+o+83FKi6Dwc=";
+    sha256 = "sha256-jpjAPldmJkyXGsokw9MO1u0VysYBXeQ8MamEPWvBGvs=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix
index 6ab9f8ed8dd1f..1e6b9888ba2ff 100644
--- a/pkgs/servers/x11/xorg/overrides.nix
+++ b/pkgs/servers/x11/xorg/overrides.nix
@@ -833,6 +833,12 @@ self: super:
     '';
   });
 
+  xorgdocs = super.xorgdocs.overrideAttrs (attrs: {
+    # This makes the man pages discoverable by the default man,
+    # since it looks for packages in $PATH
+    postInstall = "mkdir $out/bin";
+  });
+
   xwd = super.xwd.overrideAttrs (attrs: {
     buildInputs = with self; attrs.buildInputs ++ [libXt];
   });
diff --git a/pkgs/tools/admin/gtk-vnc/default.nix b/pkgs/tools/admin/gtk-vnc/default.nix
index 3d662a456aadb..9f4d4effeeeb1 100644
--- a/pkgs/tools/admin/gtk-vnc/default.nix
+++ b/pkgs/tools/admin/gtk-vnc/default.nix
@@ -1,6 +1,6 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
-, fetchpatch
 , meson
 , ninja
 , gobject-introspection
@@ -22,23 +22,15 @@
 
 stdenv.mkDerivation rec {
   pname = "gtk-vnc";
-  version = "1.0.0";
+  version = "1.2.0";
 
   outputs = [ "out" "bin" "man" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1060ws037v556rx1qhfrcg02859rscksrzr8fq11himdg4d1y6m8";
+    sha256 = "0jmr6igyzcj2wmx5v5ywaazvdz3hx6a6rys26yb4l4s71l281bvs";
   };
 
-  patches = [
-    # Fix undeclared gio-unix-2.0 in example program.
-    (fetchpatch {
-      url = "https://gitlab.gnome.org/GNOME/gtk-vnc/commit/8588bc1c8321152ddc5086ca9b2c03a7f511e0d0.patch";
-      sha256 = "0i1iapsbngl1mhnz22dd73mnzk68qc4n51pqdhnm18zqc8pawvh4";
-    })
-  ];
-
   nativeBuildInputs = [
     meson
     ninja
diff --git a/pkgs/tools/misc/routino/default.nix b/pkgs/tools/misc/routino/default.nix
index 0205209d4910f..5f2a8852e3194 100644
--- a/pkgs/tools/misc/routino/default.nix
+++ b/pkgs/tools/misc/routino/default.nix
@@ -21,6 +21,11 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile.conf \
+      --subst-var-by PREFIX $out
+  '';
+
   nativeBuildInputs = [ perl ];
 
   buildInputs = [ zlib bzip2 ];
@@ -34,7 +39,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.routino.org/";
     description = "OpenStreetMap Routing Software";
-    license = licenses.agpl3;
+    license = licenses.agpl3Plus;
     maintainers = with maintainers; [ dotlambda ];
     platforms = with platforms; linux ++ darwin;
   };
diff --git a/pkgs/tools/networking/gupnp-tools/default.nix b/pkgs/tools/networking/gupnp-tools/default.nix
index 655cf1183022f..41828d322e850 100644
--- a/pkgs/tools/networking/gupnp-tools/default.nix
+++ b/pkgs/tools/networking/gupnp-tools/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/networking/networkmanager/applet/default.nix b/pkgs/tools/networking/networkmanager/applet/default.nix
index f6c45fc074d46..cffacddf8bd4f 100644
--- a/pkgs/tools/networking/networkmanager/applet/default.nix
+++ b/pkgs/tools/networking/networkmanager/applet/default.nix
@@ -75,6 +75,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "networkmanagerapplet";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix b/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
index 20388f242ea4b..25554b2796381 100644
--- a/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
+++ b/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
@@ -72,6 +72,7 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "networkmanager-fortisslvpn";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/networking/networkmanager/libnma/default.nix b/pkgs/tools/networking/networkmanager/libnma/default.nix
index 3d97493322551..35f79a773c3db 100644
--- a/pkgs/tools/networking/networkmanager/libnma/default.nix
+++ b/pkgs/tools/networking/networkmanager/libnma/default.nix
@@ -77,6 +77,7 @@ stdenv.mkDerivation rec {
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/networking/networkmanager/openconnect/default.nix b/pkgs/tools/networking/networkmanager/openconnect/default.nix
index 462eb3793d8f7..6dbb718a6b64d 100644
--- a/pkgs/tools/networking/networkmanager/openconnect/default.nix
+++ b/pkgs/tools/networking/networkmanager/openconnect/default.nix
@@ -69,6 +69,7 @@ in stdenv.mkDerivation {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "networkmanager-openconnect";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/networking/networkmanager/openvpn/default.nix b/pkgs/tools/networking/networkmanager/openvpn/default.nix
index 4a9e508fcdc7d..ab87bc8371d27 100644
--- a/pkgs/tools/networking/networkmanager/openvpn/default.nix
+++ b/pkgs/tools/networking/networkmanager/openvpn/default.nix
@@ -34,6 +34,7 @@ in stdenv.mkDerivation {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "networkmanager-openvpn";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/networking/networkmanager/vpnc/default.nix b/pkgs/tools/networking/networkmanager/vpnc/default.nix
index 6ac71efc26038..5181e3160e23b 100644
--- a/pkgs/tools/networking/networkmanager/vpnc/default.nix
+++ b/pkgs/tools/networking/networkmanager/vpnc/default.nix
@@ -38,6 +38,7 @@ in stdenv.mkDerivation {
     updateScript = gnome3.updateScript {
       packageName = pname;
       attrPath = "networkmanager-vpnc";
+      versionPolicy = "odd-unstable";
     };
   };
 
diff --git a/pkgs/tools/security/httpx/default.nix b/pkgs/tools/security/httpx/default.nix
index e8ddf6bb0bc51..def3a953a0452 100644
--- a/pkgs/tools/security/httpx/default.nix
+++ b/pkgs/tools/security/httpx/default.nix
@@ -5,16 +5,16 @@
 
 buildGoModule rec {
   pname = "httpx";
-  version = "1.0.5";
+  version = "1.0.6";
 
   src = fetchFromGitHub {
     owner = "projectdiscovery";
     repo = "httpx";
     rev = "v${version}";
-    sha256 = "sha256-E7HGE+ZVUF6AK+4qVsO2t+/B8hRMd14/bZW2WXA6p6E=";
+    sha256 = "sha256-zwQDPOpctnAj6J6mQ4N7O1KJiAIu6osB/IlnM0D/hZA=";
   };
 
-  vendorSha256 = "sha256-VBxGapvC2QE/0slsAiCBzmwOSMeGepZU0pYVDepSrwg=";
+  vendorSha256 = "sha256-Cb7RomQ/+O9xgUlCudoj7zLd2vrs58d00/vk/EboJ6Q=";
 
   meta = with lib; {
     description = "Fast and multi-purpose HTTP toolkit";
diff --git a/pkgs/tools/text/gtranslator/default.nix b/pkgs/tools/text/gtranslator/default.nix
index bf825a55059ef..8408d42da1b20 100644
--- a/pkgs/tools/text/gtranslator/default.nix
+++ b/pkgs/tools/text/gtranslator/default.nix
@@ -9,6 +9,7 @@
 , wrapGAppsHook
 , libxml2
 , libgda
+, libhandy
 , libsoup
 , json-glib
 , gspell
@@ -22,11 +23,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gtranslator";
-  version = "3.38.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "282puBoi2SM74Y6Z/VxEj2qwV1nR6UwQWAu4McotdjU=";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0d48nc11z0m91scy21ah56ysxns82zvswx8lglvlkig1vqvblgpc";
   };
 
   nativeBuildInputs = [
@@ -46,6 +47,7 @@ stdenv.mkDerivation rec {
     libdazzle
     gtksourceview4
     libgda
+    libhandy
     libsoup
     json-glib
     gettext
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 2bac03025e35a..691340bb163e0 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -637,6 +637,8 @@ in
 
   wrapGAppsHook = callPackage ../build-support/setup-hooks/wrap-gapps-hook { };
 
+  wrapGAppsHook4 = wrapGAppsHook.override { gtk3 = gtk4; };
+
   wrapGAppsNoGuiHook = wrapGAppsHook.override { isGraphical = false; };
 
   separateDebugInfo = makeSetupHook { } ../build-support/setup-hooks/separate-debug-info.sh;
@@ -5942,6 +5944,8 @@ in
 
   kpcli = callPackage ../tools/security/kpcli { };
 
+  kratos = callPackage ../applications/misc/kratos { };
+
   krename = libsForQt5.callPackage ../applications/misc/krename { };
 
   krunner-pass = libsForQt5.callPackage ../tools/security/krunner-pass { };
@@ -11677,6 +11681,7 @@ in
     vala_0_46
     vala_0_48
     vala_0_50
+    vala_0_52
     vala;
 
   vyper = with python3Packages; toPythonApplication vyper;
@@ -12311,6 +12316,9 @@ in
     newlib = newlibCross;
   };
 
+  mspds = callPackage ../development/misc/msp430/mspds { };
+  mspds-bin = callPackage ../development/misc/msp430/mspds/binary.nix { };
+
   mspdebug = callPackage ../development/misc/msp430/mspdebug.nix { };
 
   vc4-newlib = callPackage ../development/misc/vc4/newlib.nix {};
@@ -14866,6 +14874,10 @@ in
 
   glibmm = callPackage ../development/libraries/glibmm { };
 
+  glibmm_2_68 = callPackage ../development/libraries/glibmm/2.68.nix {
+    inherit (darwin.apple_sdk.frameworks) Cocoa;
+  };
+
   glib-networking = callPackage ../development/libraries/glib-networking {};
 
   glib-testing = callPackage ../development/libraries/glib-testing { };
@@ -14886,6 +14898,8 @@ in
 
   cairomm = callPackage ../development/libraries/cairomm { };
 
+  cairomm_1_16 = callPackage ../development/libraries/cairomm/1.16.nix { };
+
   pango = callPackage ../development/libraries/pango {
     harfbuzz = harfbuzz.override { withCoreText = stdenv.isDarwin; };
   };
@@ -14898,6 +14912,10 @@ in
     inherit (darwin.apple_sdk.frameworks) ApplicationServices;
   };
 
+  pangomm_2_48 = callPackage ../development/libraries/pangomm/2.48.nix {
+    inherit (darwin.apple_sdk.frameworks) ApplicationServices;
+  };
+
   gdata-sharp = callPackage ../development/libraries/gdata-sharp { };
 
   gdk-pixbuf = callPackage ../development/libraries/gdk-pixbuf { };
@@ -14938,6 +14956,7 @@ in
 
   gtkmm2 = callPackage ../development/libraries/gtkmm/2.x.nix { };
   gtkmm3 = callPackage ../development/libraries/gtkmm/3.x.nix { };
+  gtkmm4 = callPackage ../development/libraries/gtkmm/4.x.nix { };
 
   gtk_engines = callPackage ../development/libraries/gtk-engines { };
 
@@ -14977,6 +14996,8 @@ in
 
   gtksourceview4 = callPackage ../development/libraries/gtksourceview/4.x.nix { };
 
+  gtksourceview5 = callPackage ../development/libraries/gtksourceview/5.x.nix { };
+
   gtksourceviewmm = callPackage ../development/libraries/gtksourceviewmm { };
 
   gtksourceviewmm4 = callPackage ../development/libraries/gtksourceviewmm/4.x.nix { };
@@ -16251,7 +16272,10 @@ in
 
   libroxml = callPackage ../development/libraries/libroxml { };
 
-  librsvg = callPackage ../development/libraries/librsvg { };
+  librsvg = callPackage ../development/libraries/librsvg {
+    inherit (darwin) libobjc;
+    inherit (darwin.apple_sdk.frameworks) ApplicationServices Foundation;
+  };
 
   librsync = callPackage ../development/libraries/librsync { };
 
@@ -16269,6 +16293,8 @@ in
 
   libsigcxx12 = callPackage ../development/libraries/libsigcxx/1.2.nix { };
 
+  libsigcxx30 = callPackage ../development/libraries/libsigcxx/3.0.nix { };
+
   libsigsegv = callPackage ../development/libraries/libsigsegv { };
 
   libslirp = callPackage ../development/libraries/libslirp { };
@@ -16725,7 +16751,9 @@ in
 
   libmpc = callPackage ../development/libraries/libmpc { };
 
-  mpich = callPackage ../development/libraries/mpich { };
+  mpich = callPackage ../development/libraries/mpich {
+    ch4backend = libfabric;
+  };
 
   mstpd = callPackage ../os-specific/linux/mstpd { };
 
@@ -17118,6 +17146,8 @@ in
 
   portmidi = callPackage ../development/libraries/portmidi {};
 
+  presage = callPackage ../development/libraries/presage { };
+
   prime-server = callPackage ../development/libraries/prime-server { };
 
   primesieve = callPackage ../development/libraries/science/math/primesieve { };
@@ -24039,7 +24069,7 @@ in
   });
 
   imagemagickBig = lowPrio (callPackage ../applications/graphics/ImageMagick/7.0.nix {
-    inherit (darwin.apple_sdk.frameworks) ApplicationServices;
+    inherit (darwin.apple_sdk.frameworks) ApplicationServices Foundation;
   });
 
   inherit (nodePackages) imapnotify;
@@ -28657,6 +28687,7 @@ in
     freon = callPackage ../desktops/gnome-3/extensions/freon { };
     fuzzy-app-search = callPackage ../desktops/gnome-3/extensions/fuzzy-app-search { };
     gsconnect = callPackage ../desktops/gnome-3/extensions/gsconnect { };
+    hot-edge = callPackage ../desktops/gnome-3/extensions/hot-edge { };
     icon-hider = callPackage ../desktops/gnome-3/extensions/icon-hider { };
     impatience = callPackage ../desktops/gnome-3/extensions/impatience { };
     material-shell = callPackage ../desktops/gnome-3/extensions/material-shell { };
diff --git a/pkgs/top-level/coq-packages.nix b/pkgs/top-level/coq-packages.nix
index 2cd2965fc6128..6da0598c6ace8 100644
--- a/pkgs/top-level/coq-packages.nix
+++ b/pkgs/top-level/coq-packages.nix
@@ -70,9 +70,11 @@ let
       tlc = callPackage ../development/coq-modules/tlc {};
       Velisarios = callPackage ../development/coq-modules/Velisarios {};
       Verdi = callPackage ../development/coq-modules/Verdi {};
-      VST = callPackage ../development/coq-modules/VST {
-        compcert = compcert.override { version = "3.7"; };
-      };
+      VST = callPackage ../development/coq-modules/VST (with lib.versions;
+        lib.switch coq.coq-version [
+          { case = "8.11"; out = { compcert = compcert.override { coqPackages = self; version = "3.7"; }; }; }
+          { case = range "8.12" "8.13"; out = { compcert = compcert.override { coqPackages = self; }; }; }
+        ] {});
       filterPackages = doesFilter: if doesFilter then filterCoqPackages self else self;
     };
 
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index bab350e982a4f..b76400d4a7abb 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2987,6 +2987,8 @@ in {
 
   hachoir = callPackage ../development/python-modules/hachoir { };
 
+  hdate = callPackage ../development/python-modules/hdate { };
+
   ha-ffmpeg = callPackage ../development/python-modules/ha-ffmpeg { };
 
   halo = callPackage ../development/python-modules/halo { };
@@ -7902,6 +7904,8 @@ in {
 
   tailer = callPackage ../development/python-modules/tailer { };
 
+  tappy = callPackage ../development/python-modules/tappy { };
+
   tasklib = callPackage ../development/python-modules/tasklib { };
 
   taskw = callPackage ../development/python-modules/taskw { };