nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 bundlerApp,
4 bundlerUpdateScript,
5 makeWrapper,
6 withPngcrush ? true,
7 pngcrush,
8 withPngout ? false,
9 pngout, # disabled by default because it's unfree
10 withAdvpng ? true,
11 advancecomp,
12 withOptipng ? true,
13 optipng,
14 withPngquant ? true,
15 pngquant,
16 withOxipng ? true,
17 oxipng,
18 withJhead ? true,
19 jhead,
20 withJpegoptim ? true,
21 jpegoptim,
22 withJpegrecompress ? true,
23 jpeg-archive,
24 withJpegtran ? true,
25 libjpeg,
26 withGifsicle ? true,
27 gifsicle,
28 withSvgo ? true,
29 svgo,
30}:
31
32let
33 optionalDepsPath =
34 lib.optional withPngcrush pngcrush
35 ++ lib.optional withPngout pngout
36 ++ lib.optional withAdvpng advancecomp
37 ++ lib.optional withOptipng optipng
38 ++ lib.optional withPngquant pngquant
39 ++ lib.optional withOxipng oxipng
40 ++ lib.optional withJhead jhead
41 ++ lib.optional withJpegoptim jpegoptim
42 ++ lib.optional withJpegrecompress jpeg-archive
43 ++ lib.optional withJpegtran libjpeg
44 ++ lib.optional withGifsicle gifsicle
45 ++ lib.optional withSvgo svgo;
46
47 disabledWorkersFlags =
48 lib.optional (!withPngcrush) "--no-pngcrush"
49 ++ lib.optional (!withPngout) "--no-pngout"
50 ++ lib.optional (!withAdvpng) "--no-advpng"
51 ++ lib.optional (!withOptipng) "--no-optipng"
52 ++ lib.optional (!withPngquant) "--no-pngquant"
53 ++ lib.optional (!withOxipng) "--no-oxipng"
54 ++ lib.optional (!withJhead) "--no-jhead"
55 ++ lib.optional (!withJpegoptim) "--no-jpegoptim"
56 ++ lib.optional (!withJpegrecompress) "--no-jpegrecompress"
57 ++ lib.optional (!withJpegtran) "--no-jpegtran"
58 ++ lib.optional (!withGifsicle) "--no-gifsicle"
59 ++ lib.optional (!withSvgo) "--no-svgo";
60in
61
62bundlerApp {
63 pname = "image_optim";
64 gemdir = ./.;
65
66 exes = [ "image_optim" ];
67
68 nativeBuildInputs = [ makeWrapper ];
69
70 postBuild = ''
71 wrapProgram $out/bin/image_optim \
72 --prefix PATH : ${lib.escapeShellArg (lib.makeBinPath optionalDepsPath)} \
73 --add-flags "${lib.concatStringsSep " " disabledWorkersFlags}"
74 '';
75
76 passthru.updateScript = bundlerUpdateScript "image_optim";
77
78 meta = with lib; {
79 description = "Optimize images using multiple utilities";
80 longDescription = ''
81 Command line tool and ruby interface to optimize (lossless compress,
82 optionally lossy) jpeg, png, gif and svg images using external utilities
83 (advpng, gifsicle, jhead, jpeg-recompress, jpegoptim, jpegrescan,
84 jpegtran, optipng, oxipng, pngcrush, pngout, pngquant, svgo)
85 '';
86 homepage = "https://github.com/toy/image_optim";
87 license = licenses.mit;
88 maintainers = with maintainers; [
89 srghma
90 nicknovitski
91 ];
92 platforms = platforms.all;
93 mainProgram = "image_optim";
94 };
95}