{ lib, symlinkJoin, makeWrapper, gimpPlugins, gnome-themes-extra, plugins ? null, }: let inherit (gimpPlugins) gimp; allPlugins = lib.filter (pkg: lib.isDerivation pkg && !pkg.meta.broken or false) ( lib.attrValues gimpPlugins ); selectedPlugins = lib.filter (pkg: pkg != gimp) (if plugins == null then allPlugins else plugins); extraArgs = map (x: x.wrapArgs or "") selectedPlugins ++ lib.optionals (gimp.apiVersion == "2.0") [ ''--prefix GTK_PATH : "${gnome-themes-extra}/lib/gtk-2.0"'' ]; majorVersion = lib.versions.major gimp.version; in symlinkJoin { pname = "gimp-with-plugins"; inherit (gimp) version; outputs = [ "out" "man" ]; paths = [ gimp ] ++ selectedPlugins; nativeBuildInputs = [ makeWrapper ]; postBuild = '' for each in gimp-${gimp.appVersion} gimp-console-${gimp.appVersion}; do wrapProgram $out/bin/$each \ --set GIMP${majorVersion}_PLUGINDIR "$out/${gimp.targetLibDir}" \ --set GIMP${majorVersion}_DATADIR "$out/${gimp.targetDataDir}" \ ${toString extraArgs} done set +x for each in gimp gimp-console; do ln -sf "$each-${gimp.appVersion}" $out/bin/$each done ln -s ${gimp.man} $man ''; meta = gimp.meta // { description = "${gimp.meta.description} with plugins"; longDescription = '' Plugins: ${lib.concatMapStringsSep "\n" (p: "- ${p.pname}") selectedPlugins} ''; }; }