about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/gnome/apps
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/desktops/gnome/apps')
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/accerciser/default.nix74
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/cheese/default.nix114
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/file-roller/default.nix105
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gedit/correct-gir-lib-path.patch13
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gedit/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/ghex/default.nix72
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-books/default.nix86
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-boxes/default.nix147
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/default.nix84
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/gtk_image_reset_crash.patch17
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-characters/default.nix88
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-clocks/default.nix87
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-connections/default.nix73
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-documents/default.nix127
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-logs/default.nix86
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-maps/default.nix104
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-music/default.nix121
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-nettool/default.nix36
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-notes/default.nix87
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-power-manager/default.nix60
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-sound-recorder/default.nix72
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-text-editor/default.nix77
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-todo/default.nix96
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/gnome-weather/default.nix76
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/polari/default.nix52
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/polari/make-thumbnailer-wrappable.patch24
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/seahorse/default.nix95
-rw-r--r--nixpkgs/pkgs/desktops/gnome/apps/vinagre/default.nix34
28 files changed, 2195 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/accerciser/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/accerciser/default.nix
new file mode 100644
index 000000000000..9c099f65295b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/accerciser/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, fetchurl
+, pkg-config
+, gnome
+, gtk3
+, wrapGAppsHook
+, gobject-introspection
+, itstool
+, libxml2
+, python3
+, at-spi2-core
+, dbus
+, gettext
+, libwnck
+, adwaita-icon-theme
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "accerciser";
+  version = "3.38.0";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0fd9vv2abd2if2qj4nlfy7mpd7rc4sx18zhmxd5ijlnfhkpggbp5";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection # For setup hook
+    itstool
+    libxml2
+    pkg-config
+    dbus
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    adwaita-icon-theme
+    at-spi2-core
+    gtk3
+    libwnck
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ipython
+    pyatspi
+    pycairo
+    pygobject3
+    setuptools
+    xlib
+  ];
+
+  # Strict deps breaks accerciser
+  # and https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "accerciser";
+      attrPath = "gnome.accerciser";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Accerciser";
+    description = "Interactive Python accessibility explorer";
+    maintainers = teams.gnome.members;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/cheese/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/cheese/default.nix
new file mode 100644
index 000000000000..a6d70d162c08
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/cheese/default.nix
@@ -0,0 +1,114 @@
+{ lib
+, stdenv
+, gettext
+, fetchurl
+, wrapGAppsHook
+, gnome-video-effects
+, libcanberra-gtk3
+, pkg-config
+, gtk3
+, glib
+, clutter-gtk
+, clutter-gst
+, gst_all_1
+, itstool
+, vala
+, docbook_xml_dtd_43
+, docbook-xsl-nons
+, appstream-glib
+, libxslt
+, gtk-doc
+, adwaita-icon-theme
+, librsvg
+, totem
+, gdk-pixbuf
+, gnome
+, gnome-desktop
+, libxml2
+, meson
+, ninja
+, dbus
+, python3
+, pipewire
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cheese";
+  version = "41.1";
+
+  outputs = [ "out" "man" "devdoc" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/cheese/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "UilgyihzD/ZkOQcLBEGMngpLtVVg11v+CLIY2ixn5Uc=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    docbook_xml_dtd_43
+    docbook-xsl-nons
+    gettext
+    gtk-doc
+    itstool
+    libxml2
+    libxslt # for xsltproc
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+    glib # for glib-compile-schemas
+  ];
+
+  buildInputs = [
+    adwaita-icon-theme
+    clutter-gst
+    clutter-gtk
+    dbus
+    gdk-pixbuf
+    glib
+    gnome-desktop
+    gnome-video-effects
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gstreamer
+    gtk3
+    libcanberra-gtk3
+    librsvg
+    pipewire # PipeWire provides a gstreamer plugin for using PipeWire for video
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      # Effects
+      --prefix XDG_DATA_DIRS : "${gnome-video-effects}/share"
+      # vp8enc preset
+      --prefix GST_PRESET_PATH : "${gst_all_1.gst-plugins-good}/share/gstreamer-1.0/presets"
+      # Thumbnailers
+      --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+      --prefix XDG_DATA_DIRS : "${totem}/share"
+    )
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "cheese";
+      attrPath = "gnome.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.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/file-roller/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/file-roller/default.nix
new file mode 100644
index 000000000000..c4c489dae08e
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/file-roller/default.nix
@@ -0,0 +1,105 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, desktop-file-utils
+, gettext
+, glibcLocales
+, itstool
+, libxml2
+, meson
+, ninja
+, pkg-config
+, python3
+, wrapGAppsHook
+, cpio
+, file
+, glib
+, gnome
+, gtk3
+, json-glib
+, libarchive
+, libnotify
+, nautilus
+, pantheon
+, unzip
+, withPantheon ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "file-roller";
+  version = "3.40.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "039w1dcpa5ypmv6sm634alk9vbcdkyvy595vkh5gn032jsiqca2a";
+  };
+
+  patches = lib.optionals withPantheon [
+    # Make this respect dark mode settings from Pantheon
+    # https://github.com/elementary/fileroller/
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/elementary/fileroller/f183eac36c68c9c9441e72294d4e305cf5fe36ed/fr-application-prefers-color-scheme.patch";
+      sha256 = "sha256-d/sqf4Oen9UrzYqru7Ck15o/6g6WfxRDH/iAGFXgYAA=";
+    })
+  ];
+
+  LANG = "en_US.UTF-8"; # postinstall.py
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    glibcLocales
+    itstool
+    libxml2
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    cpio
+    file
+    glib
+    gnome.adwaita-icon-theme
+    gtk3
+    json-glib
+    libarchive
+    libnotify
+    nautilus
+  ] ++ lib.optionals withPantheon [
+    pantheon.granite
+  ];
+
+  PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
+
+  postPatch = ''
+    chmod +x postinstall.py # patchShebangs requires executable file
+    patchShebangs postinstall.py
+    patchShebangs data/set-mime-type-entry.py
+  '';
+
+  preFixup = ''
+    # Workaround because of https://gitlab.gnome.org/GNOME/file-roller/issues/40
+    gappsWrapperArgs+=(
+      --prefix PATH : ${lib.makeBinPath [ unzip ]}
+    )
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "file-roller";
+      attrPath = "gnome.file-roller";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/FileRoller";
+    description = "Archive manager for the GNOME desktop environment";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = teams.gnome.members ++ teams.pantheon.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gedit/correct-gir-lib-path.patch b/nixpkgs/pkgs/desktops/gnome/apps/gedit/correct-gir-lib-path.patch
new file mode 100644
index 000000000000..b3689e420669
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gedit/correct-gir-lib-path.patch
@@ -0,0 +1,13 @@
+diff --git a/gedit/meson.build b/gedit/meson.build
+index a8683e61a..fc48669f7 100644
+--- a/gedit/meson.build
++++ b/gedit/meson.build
+@@ -191,7 +191,7 @@ libgedit_shared_lib = shared_library(
+   c_args: libgedit_c_args,
+   link_args: libgedit_link_args,
+   install: true,
+-  install_dir: get_option('libdir') / 'gedit',
++  install_dir: get_option('prefix') / get_option('libdir') / 'gedit',
+ )
+ 
+ # GObject Introspection
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gedit/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gedit/default.nix
new file mode 100644
index 000000000000..b8783e4db462
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gedit/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, lib
+, meson
+, fetchurl
+, python3
+, pkg-config
+, gtk3
+, glib
+, adwaita-icon-theme
+, libpeas
+, libxml2
+, gtksourceview4
+, gsettings-desktop-schemas
+, wrapGAppsHook
+, ninja
+, libsoup
+, gnome
+, gspell
+, perl
+, itstool
+, desktop-file-utils
+, vala
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gedit";
+  version = "41.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gedit/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "epsYsViAjRiSmJFl83BsTxooKXkHmrdFinnTwkrU3rU=";
+  };
+
+  patches = [
+    # We patch gobject-introspection and meson to store absolute paths to libraries in typelibs
+    # but that requires the install_dir is an absolute path.
+    ./correct-gir-lib-path.patch
+  ];
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    itstool
+    libxml2
+    meson
+    ninja
+    perl
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    adwaita-icon-theme
+    glib
+    gsettings-desktop-schemas
+    gspell
+    gtk3
+    gtksourceview4
+    libpeas
+    libsoup
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/post_install.py
+    chmod +x plugins/externaltools/scripts/gedit-tool-merge.pl
+    patchShebangs build-aux/meson/post_install.py
+    patchShebangs plugins/externaltools/scripts/gedit-tool-merge.pl
+  '';
+
+  # Reliably fails to generate gedit-file-browser-enum-types.h in time
+  enableParallelBuilding = false;
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gedit";
+      attrPath = "gnome.gedit";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Gedit";
+    description = "Official text editor of the GNOME desktop environment";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/ghex/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/ghex/default.nix
new file mode 100644
index 000000000000..d12c8f61017c
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/ghex/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, python3
+, gnome
+, desktop-file-utils
+, appstream-glib
+, gettext
+, itstool
+, libxml2
+, gtk3
+, glib
+, atk
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ghex";
+  version = "3.41.1";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/ghex/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "i3nPAJ6uXEfK0KtT4hmcOm+y86thh381m+1SR3DuYfc=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    itstool
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    atk
+    glib
+  ];
+
+  checkInputs = [
+    appstream-glib
+    desktop-file-utils
+  ];
+
+  postPatch = ''
+     chmod +x meson_post_install.py
+     patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "ghex";
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Ghex";
+    description = "Hex editor for GNOME desktop environment";
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-books/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-books/default.nix
new file mode 100644
index 000000000000..0e8b322cf5ed
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-books/default.nix
@@ -0,0 +1,86 @@
+{ lib, stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, evince
+, gjs
+, pkg-config
+, gtk3
+, glib
+, tracker
+, tracker-miners
+, libxslt
+, webkitgtk
+, gnome-desktop
+, libgepub
+, gnome
+, gdk-pixbuf
+, gsettings-desktop-schemas
+, adwaita-icon-theme
+, docbook-xsl-nons
+, docbook_xml_dtd_42
+, desktop-file-utils
+, python3
+, gobject-introspection
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-books";
+  version = "40.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0c41l8m2di8h39bmk2fnhpwglwp6qhljmwqqbihzp4ay9976zrc5";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    libxslt
+    desktop-file-utils
+    docbook-xsl-nons
+    docbook_xml_dtd_42
+    wrapGAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gsettings-desktop-schemas
+    gdk-pixbuf
+    adwaita-icon-theme
+    evince
+    webkitgtk
+    gjs
+    gobject-introspection
+    tracker
+    tracker-miners
+    gnome-desktop
+    libgepub
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py # patchShebangs requires executable file
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gnome-books";
+      attrPath = "gnome.gnome-books";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Books";
+    description = "An e-book manager application for GNOME";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-boxes/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-boxes/default.nix
new file mode 100644
index 000000000000..29b08aa3c1ed
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-boxes/default.nix
@@ -0,0 +1,147 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, wrapGAppsHook
+, pkg-config
+, gettext
+, itstool
+, libvirt-glib
+, glib
+, gobject-introspection
+, libxml2
+, gtk3
+, gtksourceview4
+, gtk-vnc
+, freerdp
+, libvirt
+, spice-gtk
+, python3
+, appstream-glib
+, spice-protocol
+, libhandy
+, libsoup
+, libosinfo
+, systemd
+, tracker
+, tracker-miners
+, vala
+, libcap
+, yajl
+, gmp
+, gdbm
+, cyrus_sasl
+, gnome
+, librsvg
+, desktop-file-utils
+, mtools
+, cdrkit
+, libcdio
+, libusb1
+, libarchive
+, acl
+, libgudev
+, libsecret
+, libcap_ng
+, numactl
+, libapparmor
+, json-glib
+, webkitgtk
+, vte
+, glib-networking
+, qemu-utils
+, qemu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-boxes";
+  version = "41.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "m4QGgNHnOG/d/WoVrU3Q8s2ljv6BjPVHg3tGrovw4Yk=";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [
+    appstream-glib # for appstream-util
+    desktop-file-utils
+    gettext
+    gobject-introspection
+    itstool
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  # Required for USB redirection PolicyKit rules file
+  propagatedUserEnvPkgs = [
+    spice-gtk
+  ];
+
+  buildInputs = [
+    acl
+    cyrus_sasl
+    freerdp
+    gdbm
+    glib
+    glib-networking
+    gmp
+    gnome.adwaita-icon-theme
+    gtk-vnc
+    gtk3
+    gtksourceview4
+    json-glib
+    libapparmor
+    libarchive
+    libcap
+    libcap_ng
+    libgudev
+    libhandy
+    libosinfo
+    librsvg
+    libsecret
+    libsoup
+    libusb1
+    libvirt
+    libvirt-glib
+    libxml2
+    numactl
+    spice-gtk
+    spice-protocol
+    systemd
+    tracker
+    tracker-miners
+    vte
+    webkitgtk
+    yajl
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${lib.makeBinPath [ mtools cdrkit libcdio qemu-utils qemu ]}")
+  '';
+
+  postPatch = ''
+    chmod +x build-aux/post_install.py # patchShebangs requires executable file
+    patchShebangs build-aux/post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Simple GNOME 3 application to access remote or virtual systems";
+    homepage = "https://wiki.gnome.org/Apps/Boxes";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/default.nix
new file mode 100644
index 000000000000..db353165c28d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, libdazzle
+, libgweather
+, geoclue2
+, geocode-glib
+, python3
+, gettext
+, libxml2
+, gnome
+, gtk3
+, evolution-data-server
+, libsoup
+, glib
+, gnome-online-accounts
+, gsettings-desktop-schemas
+, libhandy
+, adwaita-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-calendar";
+  version = "41.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "lWsvGQMiZRxn/mZyI4lviqWs8ztwraWjsFpTYb2mYRo=";
+  };
+
+  patches = [
+    # https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/84
+    # A refactor has caused the PR patch to drift enough to need rebasing
+    ./gtk_image_reset_crash.patch
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    libxml2
+    wrapGAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    gtk3
+    evolution-data-server
+    libsoup
+    glib
+    gnome-online-accounts
+    libdazzle
+    libgweather
+    geoclue2
+    geocode-glib
+    gsettings-desktop-schemas
+    adwaita-icon-theme
+    libhandy
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/meson_post_install.py # patchShebangs requires executable file
+    patchShebangs build-aux/meson/meson_post_install.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Calendar";
+    description = "Simple and beautiful calendar application for GNOME";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/gtk_image_reset_crash.patch b/nixpkgs/pkgs/desktops/gnome/apps/gnome-calendar/gtk_image_reset_crash.patch
new file mode 100644
index 000000000000..5065295b57b7
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/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/nixpkgs/pkgs/desktops/gnome/apps/gnome-characters/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-characters/default.nix
new file mode 100644
index 000000000000..960a3320472d
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-characters/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, gettext
+, gnome
+, glib
+, gtk3
+, pango
+, wrapGAppsHook
+, python3
+, gobject-introspection
+, gjs
+, libunistring
+, libhandy
+, gsettings-desktop-schemas
+, adwaita-icon-theme
+, gnome-desktop
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-characters";
+  version = "41.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-characters/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0yw6mimfwn0fij8zncjb4rg8bnazd1z47rmzq85lk6807nlyqag1";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+
+  buildInputs = [
+    adwaita-icon-theme
+    gjs
+    glib
+    gnome-desktop # for typelib
+    gsettings-desktop-schemas
+    gtk3
+    libunistring
+    libhandy
+    pango
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py # patchShebangs requires executable file
+    patchShebangs meson_post_install.py
+  '';
+
+  dontWrapGApps = true;
+
+  # Fixes https://github.com/NixOS/nixpkgs/issues/31168
+  postFixup = ''
+    for file in $out/share/org.gnome.Characters/org.gnome.Characters \
+       $out/share/org.gnome.Characters/org.gnome.Characters.BackgroundService
+    do
+      sed -e $"2iimports.package._findEffectiveEntryPointName = () => \'$(basename $file)\' " \
+        -i $file
+
+      wrapGApp "$file"
+    done
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Characters";
+    description = "Simple utility application to find and insert unusual characters";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-clocks/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-clocks/default.nix
new file mode 100644
index 000000000000..2e8ec02bd845
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-clocks/default.nix
@@ -0,0 +1,87 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, gettext
+, pkg-config
+, wrapGAppsHook
+, itstool
+, desktop-file-utils
+, vala
+, gobject-introspection
+, libxml2
+, gtk3
+, glib
+, gsound
+, sound-theme-freedesktop
+, gsettings-desktop-schemas
+, adwaita-icon-theme
+, gnome-desktop
+, geocode-glib
+, gnome
+, gdk-pixbuf
+, geoclue2
+, libgweather
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-clocks";
+  version = "41.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-clocks/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "34yLBKuS+mGPXe5RGFce+fyeilt5XqAKNcbcZ3ywLaw=";
+  };
+
+  nativeBuildInputs = [
+    vala
+    meson
+    ninja
+    pkg-config
+    gettext
+    itstool
+    wrapGAppsHook
+    desktop-file-utils
+    libxml2
+    gobject-introspection # for finding vapi files
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gsettings-desktop-schemas
+    gdk-pixbuf
+    adwaita-icon-theme
+    gnome-desktop
+    geocode-glib
+    geoclue2
+    libgweather
+    gsound
+    libhandy
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      # Fallback sound theme
+      --prefix XDG_DATA_DIRS : "${sound-theme-freedesktop}/share"
+    )
+  '';
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gnome-clocks";
+      attrPath = "gnome.gnome-clocks";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Clocks";
+    description = "Clock application designed for GNOME 3";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-connections/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-connections/default.nix
new file mode 100644
index 000000000000..83e88059f806
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-connections/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, vala
+, gettext
+, itstool
+, python3
+, appstream-glib
+, desktop-file-utils
+, wrapGAppsHook
+, glib
+, gtk3
+, libhandy
+, libxml2
+, gtk-vnc
+, gtk-frdp
+, gnome
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-connections";
+  version = "41.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    hash = "sha256-WrmUKPPOn4qDdDK2e3XbxSi5U6QpOotWVE34g0b+VxM=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    vala
+    gettext
+    itstool
+    python3
+    appstream-glib
+    desktop-file-utils
+    glib # glib-compile-resources
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk-vnc
+    gtk3
+    libhandy
+    libxml2
+    gtk-frdp
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/connections";
+    description = "A remote desktop client for the GNOME desktop environment";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-documents/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-documents/default.nix
new file mode 100644
index 000000000000..3f7ac34696bf
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-documents/default.nix
@@ -0,0 +1,127 @@
+{ lib, stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, fetchpatch
+, evince
+, gjs
+, pkg-config
+, gtk3
+, glib
+, tracker
+, tracker-miners
+, itstool
+, libxslt
+, webkitgtk
+, libgdata
+, gnome-desktop
+, libzapojit
+, libgepub
+, gnome
+, gdk-pixbuf
+, libsoup
+, docbook_xsl
+, docbook_xml_dtd_42
+, gobject-introspection
+, inkscape
+, poppler_utils
+, desktop-file-utils
+, wrapGAppsHook
+, python3
+, appstream-glib
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-documents";
+  version = "3.34.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-documents/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1qph567mapg3s1a26k7b8y57g9bklhj2mh8xm758z9zkms20xafq";
+  };
+
+  patches = [
+    # Fix inkscape 1.0 usage
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-documents/commit/0f55a18c40a61e6ae4ec4652604775f139892350.diff";
+      sha256 = "1yrisq69dl1dn7639drlbza20a5ic6xg04ksr9iq4sxdx3xj3d8s";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    itstool
+    libxslt
+    desktop-file-utils
+    docbook_xsl
+    docbook_xml_dtd_42
+    wrapGAppsHook
+    python3
+    appstream-glib
+
+    # building getting started
+    inkscape
+    poppler_utils
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gsettings-desktop-schemas
+    gdk-pixbuf
+    gnome.adwaita-icon-theme
+    evince
+    libsoup
+    webkitgtk
+    gjs
+    gobject-introspection
+    tracker
+    tracker-miners
+    libgdata
+    gnome-desktop
+    libzapojit
+    libgepub
+  ];
+
+  doCheck = true;
+
+  mesonFlags = [
+    "-Dgetting_started=true"
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py # patchShebangs requires executable file
+    patchShebangs meson_post_install.py
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/gnome-documents --replace gapplication "${glib.bin}/bin/gapplication"
+  '';
+
+  preConfigure =
+    # To silence inkscape warnings regarding profile directory
+  ''
+    export INKSCAPE_PROFILE_DIR="$(mktemp -d)"
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    broken = true; # Tracker 3 not supported and it cannot start Tracker 2.
+    homepage = "https://wiki.gnome.org/Apps/Documents";
+    description = "Document manager application designed to work with GNOME 3";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-logs/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-logs/default.nix
new file mode 100644
index 000000000000..da06eb4404c1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-logs/default.nix
@@ -0,0 +1,86 @@
+{ lib, stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, pkg-config
+, gnome
+, glib
+, gtk3
+, wrapGAppsHook
+, gettext
+, itstool
+, libxml2
+, libxslt
+, docbook_xsl
+, docbook_xml_dtd_43
+, systemd
+, python3
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-logs";
+  version = "3.36.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-logs/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0w1nfdxbv3f0wnhmdy21ydvr4swfc108hypda561p7l9lrhnnxj4";
+  };
+
+  patches = [
+    # https://gitlab.gnome.org/GNOME/gnome-logs/-/issues/52
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-logs/-/commit/b42defceefc775220b525f665a3b662ab9593b81.patch";
+      sha256 = "1s0zscmhwy7r0xff17wh8ik8x9xw1vrkipw5vl5i770bxnljps8n";
+    })
+  ];
+
+  nativeBuildInputs = [
+    python3
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gettext
+    itstool
+    libxml2
+    libxslt
+    docbook_xsl
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    systemd
+    gsettings-desktop-schemas
+    gnome.adwaita-icon-theme
+  ];
+
+  mesonFlags = [
+    "-Dman=true"
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gnome-logs";
+      attrPath = "gnome.gnome-logs";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Logs";
+    description = "A log viewer for the systemd journal";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-maps/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-maps/default.nix
new file mode 100644
index 000000000000..5d90cefdff39
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-maps/default.nix
@@ -0,0 +1,104 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, gettext
+, python3
+, pkg-config
+, gnome
+, gtk3
+, gobject-introspection
+, gdk-pixbuf
+, librest
+, librsvg
+, libgweather
+, geoclue2
+, wrapGAppsHook
+, folks
+, libchamplain
+, libsoup
+, gsettings-desktop-schemas
+, webkitgtk
+, gjs
+, libgee
+, libhandy
+, geocode-glib
+, evolution-data-server
+, gnome-online-accounts
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-maps";
+  version = "41.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-40CxP0b+C31bD48BQTKR3c2HDHSlw4+iTKwfWF5wOT4=";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    evolution-data-server
+    folks
+    gdk-pixbuf
+    geoclue2
+    geocode-glib
+    gjs
+    gnome-online-accounts
+    gnome.adwaita-icon-theme
+    gobject-introspection
+    gsettings-desktop-schemas
+    gtk3
+    libchamplain
+    libgee
+    libgweather
+    libhandy
+    librest
+    librsvg
+    libsoup
+    webkitgtk
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py # patchShebangs requires executable file
+    patchShebangs meson_post_install.py
+
+    # The .service file isn't wrapped with the correct environment
+    # so misses GIR files when started. By re-pointing from the gjs
+    # entry point to the wrapped binary we get back to a wrapped
+    # binary.
+    substituteInPlace "data/org.gnome.Maps.service.in" \
+        --replace "Exec=@pkgdatadir@/org.gnome.Maps" \
+                  "Exec=$out/bin/gnome-maps"
+  '';
+
+  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 = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Maps";
+    description = "A map application for GNOME 3";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-music/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-music/default.nix
new file mode 100644
index 000000000000..96ec321fa4a9
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-music/default.nix
@@ -0,0 +1,121 @@
+{ lib
+, meson
+, ninja
+, gettext
+, fetchurl
+, gdk-pixbuf
+, tracker
+, libxml2
+, python3
+, libnotify
+, wrapGAppsHook
+, libmediaart
+, gobject-introspection
+, gnome-online-accounts
+, grilo
+, grilo-plugins
+, pkg-config
+, gtk3
+, pango
+, glib
+, desktop-file-utils
+, appstream-glib
+, itstool
+, gnome
+, gst_all_1
+, libdazzle
+, libsoup
+, libhandy
+, gsettings-desktop-schemas
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gnome-music";
+  version = "41.0";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1llz2aqa3n3ivwl7i09pgylsbgrfzb872vcj1k7pvivxm1kkbcb9";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    itstool
+    pkg-config
+    libxml2
+    wrapGAppsHook
+    desktop-file-utils
+    appstream-glib
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    pango
+    glib
+    libmediaart
+    gnome-online-accounts
+    gobject-introspection
+    gdk-pixbuf
+    gnome.adwaita-icon-theme
+    python3
+    grilo
+    grilo-plugins
+    libnotify
+    libdazzle
+    libsoup
+    libhandy
+    gsettings-desktop-schemas
+    tracker
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+    gst-plugins-ugly
+  ]);
+
+  pythonPath = with python3.pkgs; [
+    pycairo
+    dbus-python
+    pygobject3
+  ];
+
+  postPatch = ''
+    for f in meson_post_conf.py meson_post_install.py; do
+      chmod +x $f
+      patchShebangs $f
+    done
+  '';
+
+  # Prevent double wrapping, let the Python wrapper use the args in preFixup.
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  doCheck = false;
+
+  # handle setup hooks better
+  strictDeps = false;
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Music";
+    description = "Music player and management application for the GNOME desktop environment";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-nettool/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-nettool/default.nix
new file mode 100644
index 000000000000..ca75b7aae07f
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-nettool/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, pkg-config, gnome, gtk3, wrapGAppsHook
+, libgtop, intltool, itstool, libxml2, nmap, inetutils }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-nettool";
+  version = "3.8.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1c9cvzvyqgfwa5zzyvp7118pkclji62fkbb33g4y9sp5kw6m397h";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    gtk3 wrapGAppsHook libgtop intltool itstool libxml2
+    gnome.adwaita-icon-theme
+  ];
+
+  propagatedUserEnvPkgs = [ nmap inetutils ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-nettool";
+    description = "A collection of networking tools";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-notes/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-notes/default.nix
new file mode 100644
index 000000000000..6af206069e29
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-notes/default.nix
@@ -0,0 +1,87 @@
+{ lib, stdenv
+, meson
+, ninja
+, gettext
+, fetchurl
+, pkg-config
+, wrapGAppsHook
+, itstool
+, desktop-file-utils
+, python3
+, glib
+, gtk3
+, evolution-data-server
+, gnome-online-accounts
+, json-glib
+, libuuid
+, curl
+, libhandy
+, webkitgtk
+, gnome
+, libxml2
+, gsettings-desktop-schemas
+, tracker
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-notes";
+  version = "40.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/bijiben/${lib.versions.major version}/bijiben-${version}.tar.xz";
+    sha256 = "1gvvb2klkzbmyzwkjgmscdiqcl8lyz9b0rxb4igjz079csq6z805";
+  };
+
+  doCheck = true;
+
+  postPatch = ''
+    chmod +x build-aux/meson_post_install.py
+    patchShebangs build-aux/meson_post_install.py
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    itstool
+    libxml2
+    desktop-file-utils
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    json-glib
+    libuuid
+    curl
+    libhandy
+    webkitgtk
+    tracker
+    gnome-online-accounts
+    gsettings-desktop-schemas
+    evolution-data-server
+    gnome.adwaita-icon-theme
+  ];
+
+  mesonFlags = [
+    "-Dupdate_mimedb=false"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "bijiben";
+      attrPath = "gnome.gnome-notes";
+    };
+  };
+
+  meta = with lib; {
+    description = "Note editor designed to remain simple to use";
+    homepage = "https://wiki.gnome.org/Apps/Notes";
+    license = licenses.gpl3;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-power-manager/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-power-manager/default.nix
new file mode 100644
index 000000000000..a883067e7804
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-power-manager/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, gettext
+, fetchurl
+, pkg-config
+, gtk3
+, glib
+, meson
+, ninja
+, upower
+, python3
+, desktop-file-utils
+, wrapGAppsHook
+, gnome }:
+
+let
+  pname = "gnome-power-manager";
+  version = "3.32.0";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "0drfn3wcc8l4n07qwv6p0rw2dwcd00hwzda282q62l6sasks2b2g";
+  };
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gettext
+
+    # needed by meson_post_install.sh
+    python3
+    glib.dev
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    upower
+    gnome.adwaita-icon-theme
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-power-manager";
+    description = "View battery and power statistics provided by UPower";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-sound-recorder/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-sound-recorder/default.nix
new file mode 100644
index 000000000000..29f7aa6e9ee4
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-sound-recorder/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, gettext
+, gobject-introspection
+, wrapGAppsHook
+, gjs
+, glib
+, gtk3
+, gdk-pixbuf
+, gst_all_1
+, gnome
+, meson
+, ninja
+, python3
+, desktop-file-utils
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-sound-recorder";
+  version = "40.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "00b55vsfzx877b7mj744abzjws7zclz71wbvh0axsrbl9l84ranl";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    meson
+    ninja
+    gobject-introspection
+    wrapGAppsHook
+    python3
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    gjs
+    glib
+    gtk3
+    gdk-pixbuf
+    libhandy
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad # for gstreamer-player-1.0
+  ]);
+
+  postPatch = ''
+    chmod +x build-aux/meson_post_install.py
+    patchShebangs build-aux/meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    description = "A simple and modern sound recorder";
+    homepage = "https://wiki.gnome.org/Apps/SoundRecorder";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-text-editor/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-text-editor/default.nix
new file mode 100644
index 000000000000..22f9ac176aad
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-text-editor/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, meson
+, fetchurl
+, python3
+, pkg-config
+, gtk4
+, glib
+, gtksourceview5
+, gsettings-desktop-schemas
+, wrapGAppsHook4
+, ninja
+, gnome
+, enchant
+, icu
+, itstool
+, libadwaita
+, libxml2
+, pcre
+, appstream-glib
+, desktop-file-utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-text-editor";
+  version = "41.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-text-editor/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-YZ7FINbgkF1DEWcCTkPc4Nv2o0Xy1IaTUB1w3HYm+GE=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    itstool
+    libxml2 # for xmllint
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    enchant
+    icu
+    glib
+    gsettings-desktop-schemas
+    gtk4
+    gtksourceview5
+    libadwaita
+    pcre
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py
+    patchShebangs build-aux/meson/postinstall.py
+    substituteInPlace build-aux/meson/postinstall.py \
+      --replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
+  '';
+
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gnome-text-editor";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-text-editor";
+    description = "A Text Editor for GNOME";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-todo/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-todo/default.nix
new file mode 100644
index 000000000000..cdcf0d69a33b
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-todo/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+, meson
+, ninja
+, pkg-config
+, python3
+, wrapGAppsHook
+, gettext
+, gnome
+, glib
+, gtk4
+, wayland
+, libadwaita
+, libpeas
+, gnome-online-accounts
+, gsettings-desktop-schemas
+, libportal-gtk4
+, evolution-data-server
+, libical
+, librest
+, json-glib
+, itstool
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-todo";
+  version = "unstable-2022-03-11";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "gnome-todo";
+    rev = "07791399742366b4e3a6897430054d91df4594b4";
+    sha256 = "821KgxkkW4T6bdGuttAz9ao/WStM1QEfn4hY/b0d0jI=";
+  };
+
+  patches = [
+    # fix build race bug https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=257667
+    (fetchpatch {
+      url = "https://cgit.freebsd.org/ports/plain/deskutils/gnome-todo/files/patch-src_meson.build?id=a4faaf6cf7835014b5f69a337b544ea4ee7f9655";
+      sha256 = "sha256:0ihixyq72yhx6njij7bldsqb80x3y217yh6livknlf5r1wr3hakn";
+      extraPrefix = "";
+      name = "gnome-todo_meson-build.patch";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    python3
+    wrapGAppsHook
+    itstool
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    wayland # required by gtk header
+    libadwaita
+    libpeas
+    gnome-online-accounts
+    gsettings-desktop-schemas
+    gnome.adwaita-icon-theme
+
+    # Plug-ins
+    libportal-gtk4 # background
+    evolution-data-server # eds
+    libical
+    librest # todoist
+    json-glib # todoist
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/meson_post_install.py
+    patchShebangs build-aux/meson/meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      url = "https://gitlab.gnome.org/GNOME/gnome-todo.git";
+    };
+  };
+
+  meta = with lib; {
+    description = "Personal task manager for GNOME";
+    homepage = "https://wiki.gnome.org/Apps/Todo";
+    license = licenses.gpl3Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/gnome-weather/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/gnome-weather/default.nix
new file mode 100644
index 000000000000..aa192a6a3b65
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/gnome-weather/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, gnome
+, gtk3
+, libhandy
+, wrapGAppsHook
+, gjs
+, gobject-introspection
+, libgweather
+, meson
+, ninja
+, geoclue2
+, gnome-desktop
+, python3
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-weather";
+  version = "41.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-weather/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "1vidwq768xnrnr24jcfbpwjczz7vm5zmaiv41nb75q4p8avlwqg5";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    wrapGAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    gtk3
+    libhandy
+    gjs
+    gobject-introspection
+    gnome-desktop
+    libgweather
+    gnome.adwaita-icon-theme
+    geoclue2
+    gsettings-desktop-schemas
+  ];
+
+  postPatch = ''
+    # The .service file is not wrapped with the correct environment
+    # so misses GIR files when started. By re-pointing from the gjs
+    # entry point to the wrapped binary we get back to a wrapped
+    # binary.
+    substituteInPlace "data/org.gnome.Weather.service.in" \
+        --replace "Exec=@DATA_DIR@/@APP_ID@" \
+                  "Exec=$out/bin/gnome-weather"
+
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gnome-weather";
+      attrPath = "gnome.gnome-weather";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Weather";
+    description = "Access current weather conditions and forecasts";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/polari/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/polari/default.nix
new file mode 100644
index 000000000000..f207307588a1
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/polari/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, itstool, fetchurl, gdk-pixbuf, adwaita-icon-theme
+, telepathy-glib, gjs, meson, ninja, gettext, telepathy-idle, libxml2, desktop-file-utils
+, pkg-config, gtk4, gtk3, glib, libsecret, libsoup, webkitgtk, gobject-introspection, appstream-glib
+, gnome, wrapGAppsHook4, telepathy-logger, gspell, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+  pname = "polari";
+  version = "41.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "o7BfgWYDcMZ8lCtvRLKYx7eIFv6zjJJuwiEr3iLqQOs=";
+  };
+
+  patches = [
+    # Upstream runs the thumbnailer by passing it to gjs.
+    # If we wrap it in a shell script, gjs can no longer run it.
+    # Let’s change the code to run the script directly by making it executable and having gjs in shebang.
+    ./make-thumbnailer-wrappable.patch
+  ];
+
+  propagatedUserEnvPkgs = [ telepathy-idle telepathy-logger ];
+
+  nativeBuildInputs = [
+    meson ninja pkg-config itstool gettext wrapGAppsHook4 libxml2
+    desktop-file-utils gobject-introspection appstream-glib
+  ];
+
+  buildInputs = [
+    gtk4 gtk3 glib adwaita-icon-theme gsettings-desktop-schemas
+    telepathy-glib telepathy-logger gjs gspell gdk-pixbuf libsecret libsoup webkitgtk
+  ];
+
+  postFixup = ''
+    wrapGApp "$out/share/polari/thumbnailer.js"
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Polari";
+    description = "IRC chat client designed to integrate with the GNOME desktop";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/polari/make-thumbnailer-wrappable.patch b/nixpkgs/pkgs/desktops/gnome/apps/polari/make-thumbnailer-wrappable.patch
new file mode 100644
index 000000000000..269b455f9787
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/polari/make-thumbnailer-wrappable.patch
@@ -0,0 +1,24 @@
+diff --git a/src/thumbnailer.js b/src/thumbnailer.js
+old mode 100644
+new mode 100755
+index ed6350ea..83d832cb
+--- a/src/thumbnailer.js
++++ b/src/thumbnailer.js
+@@ -1,3 +1,4 @@
++#!/usr/bin/env gjs --module
+ import Cairo from 'cairo';
+ import Gdk from 'gi://Gdk?version=3.0';
+ import Gio from 'gi://Gio';
+diff --git a/src/urlPreview.js b/src/urlPreview.js
+index 5f7931e4..d2282900 100644
+--- a/src/urlPreview.js
++++ b/src/urlPreview.js
+@@ -69,7 +69,7 @@ class Thumbnailer {
+     async _generateThumbnail(data) {
+         let { filename, uri } = data;
+         this._subProc = Gio.Subprocess.new(
+-            ['gjs', '--module', `${pkg.pkgdatadir}/thumbnailer.js`, uri, filename],
++            [`${pkg.pkgdatadir}/thumbnailer.js`, uri, filename],
+             Gio.SubprocessFlags.NONE);
+         try {
+             await this._subProc.wait_async(null);
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/seahorse/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/seahorse/default.nix
new file mode 100644
index 000000000000..8265636344fc
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/seahorse/default.nix
@@ -0,0 +1,95 @@
+{ lib, stdenv
+, fetchurl
+, vala
+, meson
+, ninja
+, libpwquality
+, pkg-config
+, gtk3
+, glib
+, glib-networking
+, wrapGAppsHook
+, itstool
+, gnupg
+, libsoup
+, gnome
+, gpgme
+, python3
+, openldap
+, gcr
+, libsecret
+, avahi
+, p11-kit
+, openssh
+, gsettings-desktop-schemas
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "seahorse";
+  version = "41.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    hash = "sha256-5u7AnoEESClfVH8YwdV3K2XD7cHZ5aJZXxC13eaJKfU=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    vala
+    itstool
+    wrapGAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    glib-networking
+    gcr
+    gsettings-desktop-schemas
+    gnupg
+    gnome.adwaita-icon-theme
+    gpgme
+    libsecret
+    avahi
+    libsoup
+    p11-kit
+    openssh
+    openldap
+    libpwquality
+    libhandy
+  ];
+
+  doCheck = true;
+
+  postPatch = ''
+    patchShebangs build-aux/
+  '';
+
+  preCheck = ''
+    # Add “org.gnome.crypto.pgp” GSettings schema to path
+    # to make it available for “gpgme-backend” test.
+    # It is used by Seahorse’s internal “common” library.
+    addToSearchPath XDG_DATA_DIRS "${glib.getSchemaDataDirPath gcr}"
+    # The same test also requires home directory so that it can store settings.
+    export HOME=$TMPDIR
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "gnome.${pname}";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Seahorse";
+    description = "Application for managing encryption keys and passwords in the GnomeKeyring";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/desktops/gnome/apps/vinagre/default.nix b/nixpkgs/pkgs/desktops/gnome/apps/vinagre/default.nix
new file mode 100644
index 000000000000..31e198783e04
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/apps/vinagre/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk3, gnome, vte, libxml2, gtk-vnc, intltool
+, libsecret, itstool, wrapGAppsHook, librsvg }:
+
+stdenv.mkDerivation rec {
+  pname = "vinagre";
+  version = "3.22.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/vinagre/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "cd1cdbacca25c8d1debf847455155ee798c3e67a20903df8b228d4ece5505e82";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool itstool wrapGAppsHook ];
+  buildInputs = [
+    gtk3 vte libxml2 gtk-vnc libsecret gnome.adwaita-icon-theme librsvg
+  ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-format-nonliteral";
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "vinagre";
+      attrPath = "gnome.vinagre";
+    };
+  };
+
+  meta = with lib; {
+    description = "Remote desktop viewer for GNOME";
+    homepage = "https://wiki.gnome.org/Apps/Vinagre";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}