summary refs log tree commit diff
path: root/pkgs/desktops/gnome
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2022-10-25 17:02:06 +0200
committerGitHub <noreply@github.com>2022-10-25 17:02:06 +0200
commit361d98667cfe882cdf89547c7c96265f2ae8955d (patch)
treecef9a1d250003a3b112136626cac18fa2b56a047 /pkgs/desktops/gnome
parentc34254b40aebd41333263cdda615c2ccdab8d0da (diff)
parenta8e19491ddee91c4885e0c3282c0f6448ad023b6 (diff)
Merge pull request #197029 from jtojnar/webp-loader
webp-pixbuf-loader: Adopt by GNOME
Diffstat (limited to 'pkgs/desktops/gnome')
-rw-r--r--pkgs/desktops/gnome/core/eog/default.nix12
-rw-r--r--pkgs/desktops/gnome/core/gnome-control-center/default.nix12
-rw-r--r--pkgs/desktops/gnome/core/gnome-shell/default.nix12
-rw-r--r--pkgs/desktops/gnome/core/nautilus/default.nix2
-rw-r--r--pkgs/desktops/gnome/default.nix4
-rw-r--r--pkgs/desktops/gnome/gdk-pixbuf-cache-builder.nix37
6 files changed, 79 insertions, 0 deletions
diff --git a/pkgs/desktops/gnome/core/eog/default.nix b/pkgs/desktops/gnome/core/eog/default.nix
index ccb4d439240f9..e0a943a8e1ca3 100644
--- a/pkgs/desktops/gnome/core/eog/default.nix
+++ b/pkgs/desktops/gnome/core/eog/default.nix
@@ -22,6 +22,7 @@
 , shared-mime-info
 , wrapGAppsHook
 , librsvg
+, webp-pixbuf-loader
 , libexif
 , gobject-introspection
 , gi-docgen
@@ -78,6 +79,17 @@ stdenv.mkDerivation rec {
     "-Dgtk_doc=true"
   ];
 
+  postInstall = ''
+    # Pull in WebP support for gnome-backgrounds.
+    # In postInstall to run before gappsWrapperArgsHook.
+    export GDK_PIXBUF_MODULE_FILE="${gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
+      extraLoaders = [
+        librsvg
+        webp-pixbuf-loader
+      ];
+    }}"
+  '';
+
   preFixup = ''
     gappsWrapperArgs+=(
       # Thumbnailers
diff --git a/pkgs/desktops/gnome/core/gnome-control-center/default.nix b/pkgs/desktops/gnome/core/gnome-control-center/default.nix
index 2c6db7f854aca..bd2777610fa3d 100644
--- a/pkgs/desktops/gnome/core/gnome-control-center/default.nix
+++ b/pkgs/desktops/gnome/core/gnome-control-center/default.nix
@@ -33,6 +33,7 @@
 , libpulseaudio
 , libpwquality
 , librsvg
+, webp-pixbuf-loader
 , libsecret
 , libwacom
 , libxml2
@@ -139,6 +140,17 @@ stdenv.mkDerivation rec {
     addToSearchPath "XDG_DATA_DIRS" "${polkit.out}/share"
   '';
 
+  postInstall = ''
+    # Pull in WebP support for gnome-backgrounds.
+    # In postInstall to run before gappsWrapperArgsHook.
+    export GDK_PIXBUF_MODULE_FILE="${gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
+      extraLoaders = [
+        librsvg
+        webp-pixbuf-loader
+      ];
+    }}"
+  '';
+
   preFixup = ''
     gappsWrapperArgs+=(
       --prefix XDG_DATA_DIRS : "${sound-theme-freedesktop}/share"
diff --git a/pkgs/desktops/gnome/core/gnome-shell/default.nix b/pkgs/desktops/gnome/core/gnome-shell/default.nix
index ccc34ecca019e..050a88dd0b3e1 100644
--- a/pkgs/desktops/gnome/core/gnome-shell/default.nix
+++ b/pkgs/desktops/gnome/core/gnome-shell/default.nix
@@ -20,6 +20,7 @@
 , shared-mime-info
 , libgweather
 , librsvg
+, webp-pixbuf-loader
 , geoclue2
 , perl
 , docbook_xml_dtd_45
@@ -187,6 +188,17 @@ stdenv.mkDerivation rec {
     rm data/theme/gnome-shell.css
   '';
 
+  postInstall = ''
+    # Pull in WebP support for gnome-backgrounds.
+    # In postInstall to run before gappsWrapperArgsHook.
+    export GDK_PIXBUF_MODULE_FILE="${gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
+      extraLoaders = [
+        librsvg
+        webp-pixbuf-loader
+      ];
+    }}"
+  '';
+
   preFixup = ''
     gappsWrapperArgs+=(
       # Until glib’s xdgmime is patched
diff --git a/pkgs/desktops/gnome/core/nautilus/default.nix b/pkgs/desktops/gnome/core/nautilus/default.nix
index 163c562a1ab67..5eacfdac5baa7 100644
--- a/pkgs/desktops/gnome/core/nautilus/default.nix
+++ b/pkgs/desktops/gnome/core/nautilus/default.nix
@@ -21,6 +21,7 @@
 , libexif
 , libseccomp
 , librsvg
+, webp-pixbuf-loader
 , tracker
 , tracker-miners
 , gexiv2
@@ -106,6 +107,7 @@ stdenv.mkDerivation rec {
       # Thumbnailers
       --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
       --prefix XDG_DATA_DIRS : "${librsvg}/share"
+      --prefix XDG_DATA_DIRS : "${webp-pixbuf-loader}/share"
       --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
     )
   '';
diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix
index b8d48cf12fd5e..08dd450043ac9 100644
--- a/pkgs/desktops/gnome/default.nix
+++ b/pkgs/desktops/gnome/default.nix
@@ -3,6 +3,10 @@
 lib.makeScope pkgs.newScope (self: with self; {
   updateScript = callPackage ./update.nix { };
 
+  # Temporary helper until gdk-pixbuf supports multiple cache files.
+  # This will go away, do not use outside Nixpkgs.
+  _gdkPixbufCacheBuilder_DO_NOT_USE = callPackage ./gdk-pixbuf-cache-builder.nix { };
+
   libsoup = pkgs.libsoup.override { gnomeSupport = true; };
   libchamplain = pkgs.libchamplain.override { libsoup = libsoup; };
 
diff --git a/pkgs/desktops/gnome/gdk-pixbuf-cache-builder.nix b/pkgs/desktops/gnome/gdk-pixbuf-cache-builder.nix
new file mode 100644
index 0000000000000..22359e9a5827e
--- /dev/null
+++ b/pkgs/desktops/gnome/gdk-pixbuf-cache-builder.nix
@@ -0,0 +1,37 @@
+{
+  runCommand,
+  pkg-config,
+  gdk-pixbuf,
+  lib,
+  stdenv,
+  buildPackages,
+}:
+
+{
+  extraLoaders,
+}:
+
+let
+  # Get packages to generate the cache for. We always include gdk-pixbuf.
+  loaderPackages = [
+    gdk-pixbuf
+  ] ++ extraLoaders;
+in
+
+# Generate the cache file by running gdk-pixbuf-query-loaders for each
+# package and concatenating the results.
+runCommand "gdk-pixbuf-loaders.cache" {
+  preferLocalBuild = true;
+} ''
+  (
+    for package in ${lib.escapeShellArgs loaderPackages}; do
+      module_dir="$package/${gdk-pixbuf.moduleDir}"
+      if [[ ! -d "$module_dir" ]]; then
+        echo "Error: gdkPixbufCacheBuilder: Passed package “''${package}” does not contain GdkPixbuf loaders in “${gdk-pixbuf.moduleDir}”." 1>&2
+        exit 1
+      fi
+      GDK_PIXBUF_MODULEDIR="$module_dir" \
+        ${stdenv.hostPlatform.emulator buildPackages} ${gdk-pixbuf.dev}/bin/gdk-pixbuf-query-loaders
+    done
+  ) > "$out"
+''