biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / graphics / imv / default.nix
blob178bdfcae3fb48436c7284569979c0abe94ff6b2
1 { stdenv
2 , lib
3 , fetchFromSourcehut
4 , asciidoc
5 , cmocka
6 , docbook_xsl
7 , libxslt
8 , meson
9 , ninja
10 , pkg-config
11 , icu
12 , pango
13 , inih
14 , withWindowSystem ? null
15 , xorg
16 , libxkbcommon
17 , libGLU
18 , wayland
19 # "libnsgif" is disabled until https://todo.sr.ht/~exec64/imv/55 is solved
20 , withBackends ? [ "libjxl" "libtiff" "libjpeg" "libpng" "librsvg" "libheif" ]
21 , freeimage
22 , libtiff
23 , libjpeg_turbo
24 , libjxl
25 , libpng
26 , librsvg
27 , netsurf
28 , libheif
31 let
32   # default value of withWindowSystem
33   withWindowSystem' =
34          if withWindowSystem != null then withWindowSystem
35     else if stdenv.hostPlatform.isLinux then "all"
36     else "x11";
38   windowSystems = {
39     all = windowSystems.x11 ++ windowSystems.wayland;
40     x11 = [ libGLU xorg.libxcb xorg.libX11 ];
41     wayland = [ wayland ];
42   };
44   backends = {
45     inherit freeimage libtiff libpng librsvg libheif libjxl;
46     libjpeg = libjpeg_turbo;
47     inherit (netsurf) libnsgif;
48   };
50   backendFlags = builtins.map
51     (b: if builtins.elem b withBackends
52         then "-D${b}=enabled"
53         else "-D${b}=disabled")
54     (builtins.attrNames backends);
57 # check that given window system is valid
58 assert lib.assertOneOf "withWindowSystem" withWindowSystem'
59   (builtins.attrNames windowSystems);
60 # check that every given backend is valid
61 assert builtins.all
62   (b: lib.assertOneOf "each backend" b (builtins.attrNames backends))
63   withBackends;
65 stdenv.mkDerivation rec {
66   pname = "imv";
67   version = "4.5.0";
68   outputs = [ "out" "man" ];
70   src = fetchFromSourcehut {
71     owner = "~exec64";
72     repo = "imv";
73     rev = "v${version}";
74     sha256 = "sha256-aJ2EXgsS0WUTxMqC1Q+uOWLG8BeuwAyXPmJB/9/NCCU=";
75   };
77   mesonFlags = [
78     "-Dwindows=${withWindowSystem'}"
79     "-Dtest=enabled"
80     "-Dman=enabled"
81   ] ++ backendFlags;
83   strictDeps = true;
85   nativeBuildInputs = [
86     asciidoc
87     docbook_xsl
88     libxslt
89     meson
90     ninja
91     pkg-config
92   ];
94   buildInputs = [
95     cmocka
96     icu
97     libxkbcommon
98     pango
99     inih
100   ] ++ windowSystems."${withWindowSystem'}"
101     ++ builtins.map (b: backends."${b}") withBackends;
103   postInstall = ''
104     # fix the executable path and install the desktop item
105     substituteInPlace ../files/imv.desktop --replace "imv %F" "$out/bin/imv %F"
106     install -Dm644 ../files/imv.desktop $out/share/applications/
107   '';
109   postFixup = lib.optionalString (withWindowSystem' == "all") ''
110     # The `bin/imv` script assumes imv-wayland or imv-x11 in PATH,
111     # so we have to fix those to the binaries we installed into the /nix/store
113     substituteInPlace "$out/bin/imv" \
114       --replace "imv-wayland" "$out/bin/imv-wayland" \
115       --replace "imv-x11" "$out/bin/imv-x11"
116   '';
118   doCheck = true;
120   meta = with lib; {
121     description = "Command line image viewer for tiling window managers";
122     homepage = "https://sr.ht/~exec64/imv/";
123     license = licenses.mit;
124     maintainers = with maintainers; [ rnhmjoj markus1189 ];
125     platforms = platforms.all;
126     badPlatforms = platforms.darwin;
127     mainProgram = "imv";
128   };