1{
2 lib,
3 symlinkJoin,
4 makeWrapper,
5 gimpPlugins,
6 gnome-themes-extra,
7 plugins ? null,
8}:
9
10let
11 inherit (gimpPlugins) gimp;
12 allPlugins = lib.filter (pkg: lib.isDerivation pkg && !pkg.meta.broken or false) (
13 lib.attrValues gimpPlugins
14 );
15 selectedPlugins = lib.filter (pkg: pkg != gimp) (if plugins == null then allPlugins else plugins);
16 extraArgs =
17 map (x: x.wrapArgs or "") selectedPlugins
18 ++ lib.optionals (gimp.majorVersion == "2.0") [
19 ''--prefix GTK_PATH : "${gnome-themes-extra}/lib/gtk-2.0"''
20 ];
21 exeVersion =
22 if gimp.majorVersion == "2.0" then lib.versions.majorMinor gimp.version else gimp.majorVersion;
23 majorVersion = lib.versions.major gimp.version;
24
25in
26symlinkJoin {
27 name = "gimp-with-plugins-${gimp.version}";
28
29 paths = [ gimp ] ++ selectedPlugins;
30
31 nativeBuildInputs = [ makeWrapper ];
32
33 postBuild = ''
34 for each in gimp-${exeVersion} gimp-console-${exeVersion}; do
35 wrapProgram $out/bin/$each \
36 --set GIMP${majorVersion}_PLUGINDIR "$out/${gimp.targetLibDir}" \
37 --set GIMP${majorVersion}_DATADIR "$out/${gimp.targetDataDir}" \
38 ${toString extraArgs}
39 done
40 set +x
41 for each in gimp gimp-console; do
42 ln -sf "$each-${exeVersion}" $out/bin/$each
43 done
44 '';
45
46 inherit (gimp) meta;
47}