From 9b14bd07ee93cc1f1bece1a52d7da5d21e5ce2e5 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Fri, 29 May 2026 23:42:53 +0200 Subject: [PATCH 1/8] glycin-loaders: allow configuring loaders to build via override --- pkgs/by-name/gl/glycin-loaders/package.nix | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pkgs/by-name/gl/glycin-loaders/package.nix b/pkgs/by-name/gl/glycin-loaders/package.nix index f9b97462d915..329c0d47ec01 100644 --- a/pkgs/by-name/gl/glycin-loaders/package.nix +++ b/pkgs/by-name/gl/glycin-loaders/package.nix @@ -20,8 +20,20 @@ shared-mime-info, rustc, rustPlatform, + + # List of loaders to build. + # https://gitlab.gnome.org/GNOME/glycin/-/blob/2.1.1/meson_options.txt?ref_type=tags#L26-43 + enabledLoaders ? [ + "heif" + "image-rs" + "jxl" + "svg" + ], }: +# Doesn't produce any output if no loaders are enabled +assert enabledLoaders != [ ]; + stdenv.mkDerivation (finalAttrs: { pname = "glycin-loaders"; @@ -65,6 +77,9 @@ stdenv.mkDerivation (finalAttrs: { "-Dlibglycin-gtk4=false" "-Dvapi=false" (lib.mesonBool "tests" finalAttrs.finalPackage.doCheck) + (lib.mesonOption "loaders" ( + lib.concatMapStringsSep "," (loader: "glycin-${loader}") enabledLoaders + )) ]; strictDeps = true; @@ -91,6 +106,8 @@ stdenv.mkDerivation (finalAttrs: { env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTargetSpec; passthru = { + inherit enabledLoaders; + tests = { withTests = finalAttrs.finalPackage.overrideAttrs { doCheck = true; From f527f6d8a87c64a49dfda35068a530c4996a5c6a Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Sun, 31 May 2026 23:58:10 +0200 Subject: [PATCH 2/8] glycin-loaders: consistently use `lib.mesonBool` --- pkgs/by-name/gl/glycin-loaders/package.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/gl/glycin-loaders/package.nix b/pkgs/by-name/gl/glycin-loaders/package.nix index 329c0d47ec01..8d1998e1c3b4 100644 --- a/pkgs/by-name/gl/glycin-loaders/package.nix +++ b/pkgs/by-name/gl/glycin-loaders/package.nix @@ -71,11 +71,11 @@ stdenv.mkDerivation (finalAttrs: { ]; mesonFlags = [ - "-Dglycin-loaders=true" - "-Dglycin-thumbnailer=false" - "-Dlibglycin=false" - "-Dlibglycin-gtk4=false" - "-Dvapi=false" + (lib.mesonBool "glycin-loaders" true) + (lib.mesonBool "glycin-thumbnailer" false) + (lib.mesonBool "libglycin" false) + (lib.mesonBool "libglycin-gtk4" false) + (lib.mesonBool "vapi" false) (lib.mesonBool "tests" finalAttrs.finalPackage.doCheck) (lib.mesonOption "loaders" ( lib.concatMapStringsSep "," (loader: "glycin-${loader}") enabledLoaders From d4ccc96bfe453bac2bfc6ff0e40a4cee2e8fb70b Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Wed, 25 Mar 2026 13:30:21 +0100 Subject: [PATCH 3/8] glycin-thumbnailer: init at 2.1.1 --- .../by-name/gl/glycin-thumbnailer/package.nix | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 pkgs/by-name/gl/glycin-thumbnailer/package.nix diff --git a/pkgs/by-name/gl/glycin-thumbnailer/package.nix b/pkgs/by-name/gl/glycin-thumbnailer/package.nix new file mode 100644 index 000000000000..8ae50e84b7d5 --- /dev/null +++ b/pkgs/by-name/gl/glycin-thumbnailer/package.nix @@ -0,0 +1,81 @@ +{ + lib, + stdenv, + cargo, + fontconfig, + glib, + glycin-loaders, + libglycin, + libseccomp, + meson, + ninja, + pkg-config, + rustc, + rustPlatform, + wrapGAppsNoGuiHook, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "glycin-thumbnailer"; + + inherit (libglycin) version src cargoDeps; + + nativeBuildInputs = [ + cargo + libglycin.patchVendorHook + meson + ninja + pkg-config + rustc + rustPlatform.cargoSetupHook + wrapGAppsNoGuiHook + ]; + + buildInputs = [ + fontconfig + glib + glycin-loaders + libglycin + libglycin.setupHook + libseccomp + ]; + + mesonFlags = [ + (lib.mesonBool "glycin-loaders" false) + (lib.mesonBool "glycin-thumbnailer" true) + (lib.mesonBool "libglycin" false) + (lib.mesonBool "libglycin-gtk4" false) + ]; + + strictDeps = true; + __structuredAttrs = true; + + # Thumbnailer files are in `glycin-loaders`, but we provide them in this package + postInstall = '' + mkdir -p $out/share/thumbnailers + ( + shopt -s failglob + + for loader in ${lib.concatStringsSep " " glycin-loaders.passthru.enabledLoaders}; do + substitute \ + "../glycin-loaders/glycin-$loader/glycin-$loader.thumbnailer.in" \ + "$out/share/thumbnailers/glycin-$loader.thumbnailer" \ + --subst-var-by "BINDIR" "$out/bin" + done + ) + ''; + + meta = { + description = "Glycin thumbnailers for several formats"; + homepage = "https://gitlab.gnome.org/GNOME/glycin"; + changelog = "https://gitlab.gnome.org/GNOME/glycin/-/tags/${finalAttrs.version}"; + license = with lib.licenses; [ + mpl20 # or + lgpl21Plus + ]; + maintainers = with lib.maintainers; [ thunze ]; + teams = [ lib.teams.gnome ]; + platforms = lib.platforms.linux; + mainProgram = "glycin-thumbnailer"; + }; +}) From 53716654ff45801d54f2a0dda702022e6e993ed5 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Wed, 25 Mar 2026 13:40:29 +0100 Subject: [PATCH 4/8] glycin-loaders: don't install thumbnailer files These are now provided by glycin-thumbnailer. --- pkgs/by-name/gl/glycin-loaders/package.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/by-name/gl/glycin-loaders/package.nix b/pkgs/by-name/gl/glycin-loaders/package.nix index 8d1998e1c3b4..5d3c419ee496 100644 --- a/pkgs/by-name/gl/glycin-loaders/package.nix +++ b/pkgs/by-name/gl/glycin-loaders/package.nix @@ -103,6 +103,11 @@ stdenv.mkDerivation (finalAttrs: { export XDG_CACHE_HOME=$(mktemp -d) ''; + # Thumbnailer files are provided by glycin-thumbnailer + postInstall = '' + rm -r $out/share/thumbnailers + ''; + env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTargetSpec; passthru = { From 3298717b08706d9b95577d846bde6c1f414405c1 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Wed, 25 Mar 2026 13:41:01 +0100 Subject: [PATCH 5/8] libglycin: add glycin-thumbnailer to `passthru.tests` --- pkgs/by-name/li/libglycin/package.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/by-name/li/libglycin/package.nix b/pkgs/by-name/li/libglycin/package.nix index b2eeab914a7f..4dc30b8f88a0 100644 --- a/pkgs/by-name/li/libglycin/package.nix +++ b/pkgs/by-name/li/libglycin/package.nix @@ -15,6 +15,7 @@ glib, gobject-introspection, glycin-loaders, + glycin-thumbnailer, libglycin-gtk4, fontconfig, libseccomp, @@ -146,6 +147,7 @@ stdenv.mkDerivation (finalAttrs: { tests = { inherit glycin-loaders + glycin-thumbnailer libglycin-gtk4 ; }; From aac10d3941fba7db4901830285dcd51ad165f964 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Wed, 25 Mar 2026 13:41:32 +0100 Subject: [PATCH 6/8] glycin-thumbnailer: add thumbnailer package test --- .../by-name/gl/glycin-thumbnailer/package.nix | 3 ++ pkgs/by-name/gl/glycin-thumbnailer/tests.nix | 44 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 pkgs/by-name/gl/glycin-thumbnailer/tests.nix diff --git a/pkgs/by-name/gl/glycin-thumbnailer/package.nix b/pkgs/by-name/gl/glycin-thumbnailer/package.nix index 8ae50e84b7d5..71587b42237e 100644 --- a/pkgs/by-name/gl/glycin-thumbnailer/package.nix +++ b/pkgs/by-name/gl/glycin-thumbnailer/package.nix @@ -1,6 +1,7 @@ { lib, stdenv, + callPackage, cargo, fontconfig, glib, @@ -65,6 +66,8 @@ stdenv.mkDerivation (finalAttrs: { ) ''; + passthru.tests.thumbnailer = callPackage ./tests.nix { }; + meta = { description = "Glycin thumbnailers for several formats"; homepage = "https://gitlab.gnome.org/GNOME/glycin"; diff --git a/pkgs/by-name/gl/glycin-thumbnailer/tests.nix b/pkgs/by-name/gl/glycin-thumbnailer/tests.nix new file mode 100644 index 000000000000..da7f2a845de1 --- /dev/null +++ b/pkgs/by-name/gl/glycin-thumbnailer/tests.nix @@ -0,0 +1,44 @@ +{ + lib, + stdenv, + fetchFromGitLab, + glycin-thumbnailer, + shared-mime-info, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "glycin-thumbnailer-test"; + inherit (glycin-thumbnailer) version; + + src = fetchFromGitLab { + domain = "gitlab.gnome.org"; + owner = "sophie-h"; + repo = "test-images"; + rev = "f7a06d9131a5686c1b58c56f42f9fda9ea5e620d"; + hash = "sha256-qoteYmliUha3lY21PRM0FaeYu9aD5MsygBTsTYog9SE="; + }; + + # Fix incorrectly detected MIME types + preBuild = '' + export XDG_DATA_DIRS=${shared-mime-info}/share:$XDG_DATA_DIRS + ''; + + buildPhase = '' + runHook preBuild + + cd images/ + mkdir -p $out + + for image in color/* icon/*; do + for size in 128 256 512 1024; do + input="file://$(realpath "$image")" + output="$out/$(basename "$image")-$size.png" + + ${lib.getExe glycin-thumbnailer} -i "$input" -o "$output" -s $size + file -E "$output" + done + done + + runHook postBuild + ''; +}) From c7cd5a89bbae17e0149e09b1a09ebddcaffee3eb Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Sat, 30 May 2026 00:02:13 +0200 Subject: [PATCH 7/8] glycin-thumbnailer: add package test for building with all loaders --- pkgs/by-name/gl/glycin-thumbnailer/package.nix | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/gl/glycin-thumbnailer/package.nix b/pkgs/by-name/gl/glycin-thumbnailer/package.nix index 71587b42237e..0782d55ddd1b 100644 --- a/pkgs/by-name/gl/glycin-thumbnailer/package.nix +++ b/pkgs/by-name/gl/glycin-thumbnailer/package.nix @@ -6,6 +6,7 @@ fontconfig, glib, glycin-loaders, + glycin-thumbnailer, libglycin, libseccomp, meson, @@ -66,7 +67,20 @@ stdenv.mkDerivation (finalAttrs: { ) ''; - passthru.tests.thumbnailer = callPackage ./tests.nix { }; + passthru.tests = { + all-loaders = glycin-thumbnailer.override { + glycin-loaders = glycin-loaders.override { + enabledLoaders = [ + "heif" + "image-rs" + "jxl" + "raw" + "svg" + ]; + }; + }; + thumbnailer = callPackage ./tests.nix { }; + }; meta = { description = "Glycin thumbnailers for several formats"; From 68241438a0197b948d14bbdfc6e8400e34841377 Mon Sep 17 00:00:00 2001 From: Tom Hunze Date: Mon, 1 Jun 2026 01:08:11 +0200 Subject: [PATCH 8/8] {libglycin{,-gtk4},glycin-{loaders,thumbnailer}}: use compound license --- pkgs/by-name/gl/glycin-loaders/package.nix | 10 ++++++---- pkgs/by-name/gl/glycin-thumbnailer/package.nix | 10 ++++++---- pkgs/by-name/li/libglycin-gtk4/package.nix | 10 ++++++---- pkgs/by-name/li/libglycin/package.nix | 10 ++++++---- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/pkgs/by-name/gl/glycin-loaders/package.nix b/pkgs/by-name/gl/glycin-loaders/package.nix index 5d3c419ee496..bb6e645bb5f1 100644 --- a/pkgs/by-name/gl/glycin-loaders/package.nix +++ b/pkgs/by-name/gl/glycin-loaders/package.nix @@ -124,10 +124,12 @@ stdenv.mkDerivation (finalAttrs: { description = "Glycin loaders for several formats"; homepage = "https://gitlab.gnome.org/GNOME/glycin"; teams = [ lib.teams.gnome ]; - license = with lib.licenses; [ - mpl20 # or - lgpl21Plus - ]; + license = + with lib.licenses; + OR [ + mpl20 + lgpl21Plus + ]; platforms = lib.platforms.linux; }; }) diff --git a/pkgs/by-name/gl/glycin-thumbnailer/package.nix b/pkgs/by-name/gl/glycin-thumbnailer/package.nix index 0782d55ddd1b..f90b4dd1e43e 100644 --- a/pkgs/by-name/gl/glycin-thumbnailer/package.nix +++ b/pkgs/by-name/gl/glycin-thumbnailer/package.nix @@ -86,10 +86,12 @@ stdenv.mkDerivation (finalAttrs: { description = "Glycin thumbnailers for several formats"; homepage = "https://gitlab.gnome.org/GNOME/glycin"; changelog = "https://gitlab.gnome.org/GNOME/glycin/-/tags/${finalAttrs.version}"; - license = with lib.licenses; [ - mpl20 # or - lgpl21Plus - ]; + license = + with lib.licenses; + OR [ + mpl20 + lgpl21Plus + ]; maintainers = with lib.maintainers; [ thunze ]; teams = [ lib.teams.gnome ]; platforms = lib.platforms.linux; diff --git a/pkgs/by-name/li/libglycin-gtk4/package.nix b/pkgs/by-name/li/libglycin-gtk4/package.nix index a7c2b7901ec1..3f9956a3f58a 100644 --- a/pkgs/by-name/li/libglycin-gtk4/package.nix +++ b/pkgs/by-name/li/libglycin-gtk4/package.nix @@ -89,10 +89,12 @@ stdenv.mkDerivation (finalAttrs: { meta = { description = "C-Bindings to convert glycin frames to GDK Textures"; homepage = "https://gitlab.gnome.org/GNOME/glycin"; - license = with lib.licenses; [ - mpl20 # or - lgpl21Plus - ]; + license = + with lib.licenses; + OR [ + mpl20 + lgpl21Plus + ]; teams = [ lib.teams.gnome ]; platforms = lib.platforms.linux; pkgConfigModules = [ diff --git a/pkgs/by-name/li/libglycin/package.nix b/pkgs/by-name/li/libglycin/package.nix index 4dc30b8f88a0..52bcf6c6716a 100644 --- a/pkgs/by-name/li/libglycin/package.nix +++ b/pkgs/by-name/li/libglycin/package.nix @@ -157,10 +157,12 @@ stdenv.mkDerivation (finalAttrs: { description = "Sandboxed and extendable image loading library"; homepage = "https://gitlab.gnome.org/GNOME/glycin"; changelog = "https://gitlab.gnome.org/GNOME/glycin/-/tags/${finalAttrs.version}"; - license = with lib.licenses; [ - mpl20 # or - lgpl21Plus - ]; + license = + with lib.licenses; + OR [ + mpl20 + lgpl21Plus + ]; maintainers = [ ]; teams = [ lib.teams.gnome ]; platforms = lib.platforms.linux;