gnu: ytfzf: Use patches inside source block, instead of inputs.
[jackhill/guix/guix.git] / gnu / packages / image-viewers.scm
CommitLineData
d1a5b200 1;;; GNU Guix --- Functional package management for GNU
51c87770 2;;; Copyright © 2013, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
d1a5b200
AK
3;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
4;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
08b12d0e 5;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
f7e9f1ca 6;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
3c986a7d 7;;; Copyright © 2017 Nikita <nikita@n0.is>
ed3a9ec5 8;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
4ee81d37 9;;; Copyright © 2017 nee <nee-git@hidamari.blue>
65ba20e5 10;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
027f97b1 11;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
87036462 12;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
a0570377 13;;; Copyright © 2019, 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
9943d238 14;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
cd819b45 15;;; Copyright © 2020 Peng Mei Yu <pengmeiyu@riseup.net>
e2bd0af3 16;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
e5afc63b 17;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
08f35b9b 18;;; Copyright © 2021 Rovanion Luckey <rovanion.luckey@gmail.com>
7bcbf35e 19;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
2fa624dd 20;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
aa6e6fb2
RG
21;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
22;;; Copyright © 2021 jgart <jgart@dismail.de>
eb55f018 23;;;
d1a5b200
AK
24;;; This file is part of GNU Guix.
25;;;
eb55f018
EF
26;;; GNU Guix is free software; you can redistribute it and/or modify it
27;;; under the terms of the GNU General Public License as published by
28;;; the Free Software Foundation; either version 3 of the License, or (at
29;;; your option) any later version.
30;;;
31;;; GNU Guix is distributed in the hope that it will be useful, but
32;;; WITHOUT ANY WARRANTY; without even the implied warranty of
33;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34;;; GNU General Public License for more details.
35;;;
36;;; You should have received a copy of the GNU General Public License
37;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
38
39(define-module (gnu packages image-viewers)
40 #:use-module ((guix licenses) #:prefix license:)
41 #:use-module (guix download)
92f08e14 42 #:use-module (guix git-download)
eb55f018 43 #:use-module (guix packages)
e5afc63b 44 #:use-module (guix utils)
eb55f018 45 #:use-module (guix build-system gnu)
9016dbc2 46 #:use-module (guix build-system cmake)
307cdd66 47 #:use-module (guix build-system meson)
4ee81d37 48 #:use-module (guix build-system python)
eb55f018 49 #:use-module (gnu packages autotools)
e79bfa18 50 #:use-module (gnu packages algebra)
aa6e6fb2
RG
51 #:use-module (gnu packages base)
52 #:use-module (gnu packages bash)
e79bfa18 53 #:use-module (gnu packages boost)
cd819b45 54 #:use-module (gnu packages check)
e79bfa18 55 #:use-module (gnu packages compression)
d1a5b200 56 #:use-module (gnu packages curl)
cd819b45 57 #:use-module (gnu packages documentation)
6c162d0e 58 #:use-module (gnu packages fontutils)
cd819b45 59 #:use-module (gnu packages freedesktop)
aa6e6fb2 60 #:use-module (gnu packages gawk)
307cdd66 61 #:use-module (gnu packages gettext)
d1a5b200 62 #:use-module (gnu packages ghostscript)
cd819b45 63 #:use-module (gnu packages gl)
eb55f018
EF
64 #:use-module (gnu packages glib)
65 #:use-module (gnu packages gnome)
66 #:use-module (gnu packages gtk)
e79bfa18 67 #:use-module (gnu packages graphics)
023f0fb0 68 #:use-module (gnu packages image)
08f35b9b 69 #:use-module (gnu packages image-processing)
9016dbc2 70 #:use-module (gnu packages imagemagick)
aa6e6fb2 71 #:use-module (gnu packages linux)
e79bfa18 72 #:use-module (gnu packages maths)
aa6e6fb2 73 #:use-module (gnu packages ncurses)
83a7a88f 74 #:use-module (gnu packages perl)
5ccde207 75 #:use-module (gnu packages perl-check)
d1a5b200
AK
76 #:use-module (gnu packages photo)
77 #:use-module (gnu packages pkg-config)
4ee81d37 78 #:use-module (gnu packages python)
44d10b1f 79 #:use-module (gnu packages python-xyz)
e79bfa18 80 #:use-module (gnu packages qt)
aa6e6fb2
RG
81 #:use-module (gnu packages suckless)
82 #:use-module (gnu packages terminals)
83 #:use-module (gnu packages video)
84 #:use-module (gnu packages web)
cd819b45 85 #:use-module (gnu packages xdisorg)
e79bfa18
LC
86 #:use-module (gnu packages xorg)
87 #:use-module (gnu packages))
d1a5b200 88
aa6e6fb2
RG
89(define-public ytfzf
90 (package
91 (name "ytfzf")
92 (version "1.2.0")
93 (home-page "https://github.com/pystardust/ytfzf")
94 (source
95 (origin
96 (method git-fetch)
97 (uri
98 (git-reference
99 (url home-page)
100 (commit (string-append "v" version))))
101 (file-name (git-file-name name version))
102 (sha256
ffc04f5c
RG
103 (base32 "00d416qb4109pm77ikhnmds8qng90ni2jan9kdnxz7b6sh5f61nz"))
104 (patches
105 (search-patches
106 ;; Pre-requisite for 'patch-script' phase.
107 "ytfzf-programs.patch"
108 ;; Disables self-update.
109 "ytfzf-updates.patch"))))
aa6e6fb2
RG
110 (build-system gnu-build-system)
111 (arguments
112 `(#:tests? #f ;no test suite
113 #:modules
114 ((guix build gnu-build-system)
115 (guix build utils)
116 (srfi srfi-26))
117 #:phases
118 (modify-phases %standard-phases
ffc04f5c 119 (add-after 'unpack 'patch-script
aa6e6fb2
RG
120 (lambda* (#:key inputs outputs #:allow-other-keys)
121 (let* ((out (assoc-ref outputs "out"))
122 (bash (assoc-ref inputs "bash"))
123 (catimg (assoc-ref inputs "catimg"))
124 (chafa (assoc-ref inputs "chafa"))
125 (coreutils (assoc-ref inputs "coreutils"))
126 (curl (assoc-ref inputs "curl"))
127 (dmenu (assoc-ref inputs "dmenu"))
128 (fzf (assoc-ref inputs "fzf"))
129 (gawk (assoc-ref inputs "gawk"))
130 (grep (assoc-ref inputs "grep"))
131 (jp2a (assoc-ref inputs "jp2a"))
132 (jq (assoc-ref inputs "jq"))
133 (libnotify (assoc-ref inputs "libnotify"))
134 (mpv (assoc-ref inputs "mpv"))
135 (ncurses (assoc-ref inputs "ncurses"))
136 (python-ueberzug (assoc-ref inputs "python-ueberzug"))
137 (sed (assoc-ref inputs "sed"))
138 (util-linux (assoc-ref inputs "util-linux"))
139 (youtube-dl (assoc-ref inputs "youtube-dl")))
140 ;; Use correct $PREFIX path.
141 (substitute* "Makefile"
142 (("/usr/bin")
143 (string-append out "/bin")))
144 ;; Use absolute path for referenced programs.
145 (substitute* "ytfzf"
146 (("@awk@")
147 (string-append gawk "/bin/awk"))
148 (("@cat@")
149 (string-append coreutils "/bin/cat"))
150 (("@catimg@")
151 (string-append catimg "/bin/catimg"))
152 (("@chafa@")
153 (string-append chafa "/bin/chafa"))
154 (("@chmod@")
155 (string-append coreutils "/bin/chmod"))
156 (("@column@")
157 (string-append util-linux "/bin/column"))
158 (("@cp@")
159 (string-append coreutils "/bin/cp"))
160 (("@cut@")
161 (string-append coreutils "/bin/cut"))
162 (("@curl@")
163 (string-append curl "/bin/curl"))
164 (("@date@")
165 (string-append coreutils "/bin/date"))
166 (("@dmenu@")
167 (string-append dmenu "/bin/dmenu"))
168 (("@fzf@")
169 (string-append fzf "/bin/fzf"))
170 (("@grep@")
171 (string-append grep "/bin/grep"))
172 (("@head@")
173 (string-append coreutils "/bin/head"))
174 (("@jp2a@")
175 (string-append jp2a "/bin/jp2a"))
176 (("@jq@")
177 (string-append jq "/bin/jq"))
178 (("@mkdir@")
179 (string-append coreutils "/bin/mkdir"))
180 (("@mkfifo@")
181 (string-append coreutils "/bin/mkfifo"))
182 (("@mpv@")
183 (string-append mpv "/bin/mpv"))
184 (("@nohup@")
185 (string-append coreutils "/bin/nohup"))
186 (("@notify-send@")
187 (string-append libnotify "/bin/notify-send"))
188 (("@rm@")
189 (string-append coreutils "/bin/rm"))
190 (("@sed@")
191 (string-append sed "/bin/sed"))
192 (("@seq@")
193 (string-append coreutils "/bin/seq"))
194 (("@setsid@")
195 (string-append util-linux "/bin/setsid"))
196 (("@sh@")
197 (string-append bash "/bin/sh"))
198 (("@sleep@")
199 (string-append coreutils "/bin/sleep"))
200 (("@sort@")
201 (string-append coreutils "/bin/sort"))
202 (("@tput@")
203 (string-append ncurses "/bin/tput"))
204 (("@tr@")
205 (string-append coreutils "/bin/tr"))
206 (("@ueberzug@")
207 (string-append python-ueberzug "/bin/ueberzug"))
208 (("@uname@")
209 (string-append coreutils "/bin/uname"))
210 (("@uniq@")
211 (string-append coreutils "/bin/uniq"))
212 (("@wc@")
213 (string-append coreutils "/bin/wc"))
214 (("@youtube-dl@")
215 (string-append youtube-dl "/bin/youtube-dl"))))
216 (substitute* "ytfzf"
217 ;; Generate temporary files in the user-specific path,
218 ;; to avoid issues in multi-user systems.
219 (("/tmp/ytfzf")
220 "$HOME/.cache/ytfzf")
221 ;; Report errors to Guix.
222 (("report at: https://github.com/pystardust/ytfzf")
223 "report at: https://issues.guix.gnu.org"))))
224 (delete 'configure)))) ;no configure script
aa6e6fb2
RG
225 (inputs
226 `(("bash" ,bash)
227 ("catimg" ,catimg)
228 ("chafa" ,chafa)
229 ("coreutils" ,coreutils)
230 ("curl" ,curl)
231 ("dmenu" ,dmenu)
232 ("fzf" ,fzf)
233 ("gawk" ,gawk)
234 ("grep" ,grep)
235 ("jp2a" ,jp2a)
236 ("jq" ,jq)
237 ("libnotify" ,libnotify)
238 ("mpv" ,mpv)
239 ("ncurses" ,ncurses)
240 ("python-ueberzug" ,python-ueberzug)
241 ("sed" ,sed)
242 ("util-linux" ,util-linux)
243 ("youtube-dl" ,youtube-dl)))
244 (synopsis "Watch PeerTube or YouTube videos from the terminal")
245 (description "@code{ytfzf} is a POSIX script that helps you find PeerTube or
246YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
247 (license license:gpl3+)))
248
d1a5b200
AK
249(define-public feh
250 (package
251 (name "feh")
7bcbf35e 252 (version "3.6.3")
d1a5b200
AK
253 (home-page "https://feh.finalrewind.org/")
254 (source (origin
255 (method url-fetch)
256 (uri (string-append home-page
257 name "-" version ".tar.bz2"))
258 (sha256
259 (base32
7bcbf35e 260 "1d13x8hmvpdc5f5rj4l29ha7iz7wvqxjlvh6il04wq8igzrj0x23"))))
d1a5b200
AK
261 (build-system gnu-build-system)
262 (arguments
9c44af6b 263 `(#:phases (modify-phases %standard-phases (delete 'configure))
83a7a88f 264 #:test-target "test"
dc1d3cde 265 #:make-flags
9c44af6b
MD
266 (list ,(string-append "CC=" (cc-for-target))
267 (string-append "PREFIX=" (assoc-ref %outputs "out"))
123612d3
TGR
268 "exif=1"
269 "inotify=1")))
83a7a88f
MB
270 (native-inputs
271 `(("perl" ,perl)
272 ("perl-test-command" ,perl-test-command)))
d1a5b200
AK
273 (inputs `(("imlib2" ,imlib2)
274 ("curl" ,curl)
0de33cb3 275 ("libexif" ,libexif)
d1a5b200
AK
276 ("libpng" ,libpng)
277 ("libxt" ,libxt)
278 ("libx11" ,libx11)
279 ("libxinerama" ,libxinerama)))
3c41b992
MB
280 (native-search-paths
281 ;; Feh allows overriding the libcurl builtin CA path (unset in Guix)
282 ;; with the same variable as the `curl` command line HTTP tool.
dc138d6d 283 (package-native-search-paths curl))
d1a5b200
AK
284 (synopsis "Fast and light imlib2-based image viewer")
285 (description
286 "feh is an X11 image viewer aimed mostly at console users.
287Unlike most other viewers, it does not have a fancy GUI, but simply
288displays images. It can also be used to set the desktop wallpaper.
289It is controlled via commandline arguments and configurable key/mouse
290actions.")
291
292 ;; The license is really the Expat license, with additional wording in the
293 ;; 2nd paragraph: "acknowledgment shall be given in the documentation and
294 ;; software packages that this Software was used."
295 (license (license:x11-style
296 "file://COPYING"
297 "See 'COPYING' in the distribution."))))
298
299(define-public geeqie
e3e757ed
LC
300 (package
301 (name "geeqie")
302 (version "1.5")
303 (source (origin
304 (method git-fetch)
305 (uri (git-reference
306 (url "https://github.com/BestImageViewer/geeqie")
307 (commit (string-append "v" version))))
308 (sha256
309 (base32
310 "0nf45sh3pwsv98sppcrqj81b6mdi31n1sbc7gn88m8mhpfp1qq6k"))
311 (file-name (git-file-name name version))))
312 (build-system gnu-build-system)
313 (arguments
314 `( ;; Enable support for a "map" pane using GPS data.
315 #:configure-flags '("--enable-map"
316 "--enable-gtk3")))
317 (inputs
318 `(("clutter" ,clutter)
319 ("libchamplain" ,libchamplain)
320 ("lcms" ,lcms)
321 ("exiv2" ,exiv2)
322 ("libpng" ,libpng)
323 ("gtk+" ,gtk+)))
324 (native-inputs
325 `(("autoconf" ,autoconf)
326 ("automake" ,automake)
327 ("glib" ,glib "bin") ; glib-gettextize
328 ("intltool" ,intltool)
329 ("pkg-config" ,pkg-config)))
330 (home-page "http://www.geeqie.org/")
331 (synopsis "Lightweight GTK+ based image viewer")
332 (description
333 "Geeqie is a lightweight GTK+ based image viewer for Unix like operating
d1a5b200
AK
334systems. It features: EXIF, IPTC and XMP metadata browsing and editing
335interoperability; easy integration with other software; geeqie works on files
336and directories, there is no need to import images; fast preview for many raw
337image formats; tools for image comparison, sorting and managing photo
338collection. Geeqie was initially based on GQview.")
e3e757ed 339 (license license:gpl2+)))
d1a5b200 340
ed3a9ec5
MO
341(define-public gpicview
342 (package
343 (name "gpicview")
344 (version "0.2.5")
345 (source (origin
346 (method url-fetch)
347 (uri (string-append "mirror://sourceforge/lxde/"
348 "GPicView%20%28image%20Viewer%29/0.2.x/"
349 name "-" version ".tar.xz"))
350 (sha256
351 (base32
352 "0hi9v0rdx47nys0wvm9xasdrafa34r5kq6crb074a0ipwmc60iiq"))))
353 (build-system gnu-build-system)
354 (inputs `(("gtk+" ,gtk+-2)
4bd428a7 355 ("libjpeg" ,libjpeg-turbo)))
ed3a9ec5
MO
356 (native-inputs `(("intltool" ,intltool)
357 ("pkg-config" ,pkg-config)))
358 (synopsis "Simple and fast image viewer for X")
359 (description "gpicview is a lightweight GTK+ 2.x based image viewer.
360It is the default image viewer on LXDE desktop environment.")
361 (home-page "http://lxde.sourceforge.net/gpicview/")
362 (license license:gpl2+)))
363
d1a5b200
AK
364(define-public sxiv
365 (package
366 (name "sxiv")
6420cab3 367 (version "26")
d1a5b200 368 (source (origin
92f08e14
RW
369 (method git-fetch)
370 (uri (git-reference
b0e7b699 371 (url "https://github.com/muennich/sxiv")
92f08e14
RW
372 (commit (string-append "v" version))))
373 (file-name (git-file-name name version))
d1a5b200
AK
374 (sha256
375 (base32
6420cab3 376 "0xaawlfdy7b277m38mgg4423kd7p1ffn0dq4hciqs6ivbb3q9c4f"))))
d1a5b200
AK
377 (build-system gnu-build-system)
378 (arguments
6c162d0e
TGR
379 `(#:tests? #f ; no check target
380 #:make-flags
381 (list (string-append "PREFIX=" %output)
f165f7c9 382 (string-append "CC=" ,(cc-for-target))
6420cab3
TGR
383 ;; Xft.h #includes <ft2build.h> without ‘freetype2/’. The Makefile
384 ;; works around this by hard-coding /usr/include & $PREFIX.
56d2007e 385 (string-append "CPPFLAGS=-I"
6c162d0e
TGR
386 (assoc-ref %build-inputs "freetype")
387 "/include/freetype2")
388 "V=1")
389 #:phases
390 (modify-phases %standard-phases
d67a3beb
EF
391 (delete 'configure) ; no configure script
392 (add-after 'install 'install-desktop-file
393 (lambda* (#:key outputs #:allow-other-keys)
394 (install-file "sxiv.desktop"
395 (string-append (assoc-ref outputs "out")
396 "/share/applications"))
858bb37a
EF
397 #t))
398 (add-after 'install 'install-icons
399 (lambda* (#:key make-flags #:allow-other-keys)
400 (apply invoke "make" "-C" "icon" "install" make-flags))))))
d1a5b200 401 (inputs
6c162d0e 402 `(("freetype" ,freetype)
d1a5b200 403 ("giflib" ,giflib)
6c162d0e
TGR
404 ("imlib2" ,imlib2)
405 ("libexif" ,libexif)
406 ("libx11" ,libx11)
407 ("libxft" ,libxft)))
d1a5b200
AK
408 (home-page "https://github.com/muennich/sxiv")
409 (synopsis "Simple X Image Viewer")
410 (description
411 "sxiv is an alternative to feh and qiv. Its primary goal is to
412provide the most basic features required for fast image viewing. It has
413vi key bindings and works nicely with tiling window managers. Its code
414base should be kept small and clean to make it easy for you to dig into
415it and customize it for your needs.")
416 (license license:gpl2+)))
eb55f018
EF
417
418(define-public viewnior
419 (package
420 (name "viewnior")
307cdd66 421 (version "1.7")
eb55f018
EF
422 (source
423 (origin
83541fb6
EF
424 (method git-fetch)
425 (uri (git-reference
b0e7b699 426 (url "https://github.com/hellosiyan/Viewnior")
83541fb6
EF
427 (commit (string-append name "-" version))))
428 (file-name (git-file-name name version))
eb55f018
EF
429 (sha256
430 (base32
83541fb6 431 "0y4hk3vq8psba5k615w18qj0kbdfp5w0lm98nv5apy6hmcpwfyig"))))
307cdd66 432 (build-system meson-build-system)
eb55f018
EF
433 (arguments
434 '(#:phases
435 (modify-phases %standard-phases
307cdd66 436 (add-after 'unpack 'patch-source
ea77385c
EF
437 (lambda _
438 ;; Don't create 'icon-theme.cache'
307cdd66
EF
439 (substitute* "meson.build"
440 (("meson.add_install_script*") ""))
441 #t)))
442 #:tests? #f)) ; no tests
eb55f018 443 (native-inputs
307cdd66 444 `(("gettext" ,gettext-minimal)
eb55f018 445 ("glib" ,glib "bin") ; glib-genmarshal
eb55f018 446 ("pkg-config" ,pkg-config)
307cdd66 447 ("shared-mime-info" ,shared-mime-info)))
eb55f018
EF
448 (inputs
449 `(("exiv2" ,exiv2)
450 ("gdk-pixbuf" ,gdk-pixbuf)
451 ("gtk+-2" ,gtk+-2)))
307cdd66 452 (home-page "http://siyanpanayotov.com/project/viewnior")
eb55f018
EF
453 (synopsis "Simple, fast and elegant image viewer")
454 (description "Viewnior is an image viewer program. Created to be simple,
455fast and elegant. Its minimalistic interface provides more screenspace for
456your images. Among its features are:
457@enumerate
458@item Fullscreen & Slideshow
459@item Rotate, flip, crop, save, delete images
460@item Animation support
461@item Browse only selected images
462@item Navigation window
463@item Set image as wallpaper (Gnome 2, Gnome 3, XFCE, LXDE, FluxBox, Nitrogen)
464@item Simple interface
465@item EXIF and IPTC metadata
466@item Configurable mouse actions
467@end enumerate\n")
468 (license license:gpl3+)))
9016dbc2 469
470(define-public catimg
471 (package
472 (name "catimg")
e330a31f 473 (version "2.7.0")
9016dbc2 474 (source
475 (origin
6f6f9267
RW
476 (method git-fetch)
477 (uri (git-reference
b0e7b699 478 (url "https://github.com/posva/catimg")
cdee738e 479 (commit version)))
6f6f9267 480 (file-name (git-file-name name version))
9016dbc2 481 (sha256
e330a31f 482 (base32 "0a2dswbv4xddb2l2d55hc43lzvjwrjs5z9am7v6i0p0mi2fmc89s"))))
9016dbc2 483 (build-system cmake-build-system)
484 (arguments
1e5c056c 485 `(#:tests? #f ; no tests
9016dbc2 486 #:phases
487 (modify-phases %standard-phases
e2f47efe 488 (add-after 'unpack 'patch-convert
9016dbc2 489 (lambda _
e2f47efe
RW
490 (substitute* "catimg"
491 ;; By replacing "convert", we also replace the "convert"
492 ;; in the message 'The version of convert is too old, don't
493 ;; expect good results :('. This should not happen, but in
494 ;; practice this error message should not affect us.
495 (("convert") (which "convert")))
496 #t))
497 (add-after 'install 'install-script
9016dbc2 498 (lambda* (#:key outputs #:allow-other-keys)
1e5c056c 499 ;; The bash script lacks an file extension. We have to rename
9016dbc2 500 ;; it so that the C program and the bash script can be happy
501 ;; side by side.
e2f47efe
RW
502 (copy-file "../source/catimg"
503 (string-append (assoc-ref outputs "out")
504 "/bin/catimg.sh"))
505 #t)))))
9016dbc2 506 (inputs
1e5c056c 507 `(("imagemagick" ,imagemagick))) ; for the bash script version
9016dbc2 508 (home-page "https://github.com/posva/catimg")
509 (synopsis "Render images in the terminal")
510 (description
511 "Catimg is a little program that prints images in the terminal.
512It supports JPEG, PNG and GIF formats.")
513 (license license:expat)))
e79bfa18
LC
514
515(define-public luminance-hdr
516 (package
517 (name "luminance-hdr")
beb7a281 518 (version "2.6.0")
e79bfa18
LC
519 (source (origin
520 (method url-fetch)
521 (uri (string-append
522 "mirror://sourceforge/qtpfsgui/luminance/"
523 version "/luminance-hdr-" version ".tar.bz2"))
524 (sha256
525 (base32
beb7a281 526 "188q0l63nfasqfvwbq4mwx2vh7wsfi2bq9n5nksddspl1qz01lnp"))))
e79bfa18
LC
527 (build-system cmake-build-system)
528 (native-inputs
529 `(("pkg-config" ,pkg-config)
530 ("qttools" ,qttools)))
531 (inputs
ea0a5107 532 `(("qtbase" ,qtbase-5)
e79bfa18 533 ("qtdeclarative" ,qtdeclarative)
beb7a281 534 ("qtsvg" ,qtsvg)
e79bfa18
LC
535 ("qtwebkit" ,qtwebkit)
536 ("boost" ,boost)
beb7a281 537 ("eigen" ,eigen)
e79bfa18
LC
538 ;; ("gtest" ,gtest)
539 ("libraw" ,libraw)
540 ("zlib" ,zlib)
541 ("exiv2" ,exiv2)
542 ("libpng" ,libpng)
4bd428a7 543 ("libjpeg" ,libjpeg-turbo)
e79bfa18
LC
544 ("lcms" ,lcms)
545 ("openexr" ,openexr)
546 ("fftw" ,fftwf)
547 ("gsl" ,gsl)
548 ("libtiff" ,libtiff)))
549 (arguments
beb7a281
MB
550 '(#:tests? #f ;XXX: some tests fail to compile
551 #:phases
e79bfa18
LC
552 (modify-phases %standard-phases
553 (add-after 'set-paths 'add-ilmbase-include-path
554 (lambda* (#:key inputs #:allow-other-keys)
555 ;; 'OpenEXR.pc' has a -I for IlmBase but 'FindOpenEXR.cmake' does
556 ;; not use 'OpenEXR.pc'. Thus, we need to add
557 ;; "$ilmbase/include/OpenEXR/" to the CPATH.
558 (setenv "CPATH"
559 (string-append (assoc-ref inputs "ilmbase")
560 "/include/OpenEXR"
561 ":" (or (getenv "CPATH") "")))
562 #t)))))
563 (home-page "http://qtpfsgui.sourceforge.net")
564 (synopsis "High dynamic range (HDR) imaging application")
565 (description
566 "Luminance HDR (formerly QtPFSGui) is a graphical user interface
567application that aims to provide a workflow for high dynamic range (HDR)
568imaging. It supports several HDR and LDR image formats, and it can:
569
570@itemize
571@item Create an HDR file from a set of images (formats: JPEG, TIFF 8bit and
57216bit, RAW) of the same scene taken at different exposure setting;
573@item Save load HDR images;
574@item Rotate, resize and crop HDR images;
575@item Tone-map HDR images;
576@item Copy EXIF data between sets of images.
577@end itemize\n")
578 (license license:gpl2+)))
4ee81d37 579
580;; CBR and RAR are currently unsupported, due to non-free dependencies.
4ee81d37 581(define-public mcomix
e5afc63b
PN
582 ;; Official mcomix hasn't been updated since 2016, it's broken with
583 ;; python-pillow 6+ and only supports Python 2. We use fork instead.
584 (let ((commit "fea55a7a9369569eefed72209eed830409c4af98"))
585 (package
586 (name "mcomix")
587 (version (git-version "1.2.1" "1" commit))
588 (source
589 (origin
590 (method git-fetch)
591 (uri (git-reference
592 (url "https://github.com/multiSnow/mcomix3")
593 (commit commit)))
594 (file-name (git-file-name name version))
595 (sha256
596 (base32
597 "05zl0dkjwbdcm2zlk4nz9w33amlqj8pbf32a8ymshc2356fqhhi5"))))
598 (build-system python-build-system)
599 (inputs
600 `(("p7zip" ,p7zip)
601 ("python-pillow" ,python-pillow)
602 ("python-pygobject" ,python-pygobject)
603 ("python-pycairo" ,python-pycairo)))
604 (arguments
605 `(#:tests? #f ; FIXME: How do we run tests?
606 #:phases
607 (modify-phases %standard-phases
608 (add-after 'unpack 'configure
609 (lambda* (#:key inputs #:allow-other-keys)
610 (let ((p7zip (assoc-ref inputs "p7zip")))
611 ;; insert absolute path to 7z executable
612 (substitute* "mcomix/mcomix/archive/sevenzip_external.py"
613 (("_7z_executable = -1")
614 (string-append "_7z_executable = u'" p7zip "/bin/7z'"))))
615 #t))
616 (replace 'build
617 (lambda* (#:key outputs #:allow-other-keys)
618 (let* ((out (assoc-ref outputs "out"))
619 (pyver ,(version-major+minor (package-version python)))
620 (lib (string-append out "/lib/python" pyver)))
621 (invoke (which "python") "installer.py" "--srcdir=mcomix"
622 (string-append "--target=" lib))
623 (rename-file (string-append lib "/mcomix")
624 (string-append lib "/site-packages"))
625 #t)))
626 (replace 'install
627 (lambda* (#:key outputs #:allow-other-keys)
628 (let* ((out (assoc-ref outputs "out"))
629 (share (string-append out "/share"))
630 (bin (string-append out "/bin"))
631 (pyver ,(version-major+minor (package-version python)))
632 (lib (string-append out "/lib/python" pyver "/site-packages")))
633 (mkdir-p bin)
634 (rename-file (string-append lib "/mcomixstarter.py")
635 (string-append bin "/mcomix"))
636 (rename-file (string-append lib "/comicthumb.py")
637 (string-append bin "/comicthumb"))
638 (install-file "mime/mcomix.desktop"
639 (string-append share "/applications"))
640 (install-file "mime/mcomix.appdata.xml"
641 (string-append share "/metainfo"))
642 (install-file "mime/mcomix.xml"
643 (string-append share "/mime/packages"))
644 (install-file "mime/comicthumb.thumbnailer"
645 (string-append share "/thumbnailers"))
646 (install-file "man/mcomix.1" (string-append share "/man/man1"))
647 (install-file "man/comicthumb.1" (string-append share "/man/man1"))
648 (for-each
649 (lambda (size)
650 (install-file
651 (format #f "mcomix/mcomix/images/~sx~s/mcomix.png" size size)
652 (format #f "~a/icons/hicolor/~sx~s/apps/" share size size))
653 (for-each
654 (lambda (ext)
655 (install-file
656 (format #f "mime/icons/~sx~s/application-x-~a.png" size size ext)
657 (format #f "~a/icons/hicolor/~sx~s/mimetypes/"
658 share size size)))
659 '("cb7" "cbr" "cbt" "cbz")))
660 '(16 22 24 32 48))
661 #t))))))
662 (home-page "https://sourceforge.net/p/mcomix/wiki/Home/")
663 (synopsis "Image viewer for comics")
664 (description "MComix is a customizable image viewer that specializes as
4ee81d37 665a comic and manga reader. It supports a variety of container formats
e5afc63b
PN
666including CBZ, CB7, CBT, LHA.
667
668For PDF support, install the @emph{mupdf} package.")
669 (license license:gpl2+))))
87036462
NG
670
671(define-public qview
672 (package
673 (name "qview")
21df7028 674 (version "4.0")
4f620bbf
NG
675 (source
676 (origin
677 (method git-fetch)
678 (uri (git-reference
b0e7b699 679 (url "https://github.com/jurplel/qView")
4f620bbf
NG
680 (commit version)))
681 (file-name (git-file-name name version))
682 (sha256
21df7028 683 (base32 "15n9cq7w3ckinnx38hvncxrbkv4qm4k51sal41q4y0pkvhmafhnr"))))
87036462
NG
684 (build-system gnu-build-system)
685 (arguments
686 `(#:phases
687 (modify-phases %standard-phases
688 (replace 'configure
87036462
NG
689 (lambda* (#:key outputs #:allow-other-keys)
690 (let ((out (assoc-ref outputs "out")))
21df7028
NG
691 (invoke "qmake" (string-append "PREFIX=" out)))))
692 ;; Don't phone home or show "Checking for updates..." in the About
693 ;; menu.
87036462
NG
694 (add-before 'build 'disable-auto-update
695 (lambda _
696 (substitute* "src/qvaboutdialog.cpp"
7a9e68cc
NG
697 (("qvApp->checkUpdates\\(\\);") "")
698 (("updateText\\(\\);") ""))
87036462
NG
699 #t)))))
700 (inputs
ea0a5107 701 `(("qtbase" ,qtbase-5)
87036462
NG
702 ("qtsvg" ,qtsvg)
703 ("qtimageformats" ,qtimageformats)))
704 (home-page "https://interversehq.com/qview/")
705 (synopsis "Convenient and minimal image viewer")
706 (description "qView is a Qt image viewer designed with visually
707minimalism and usability in mind. Its features include animated GIF
708controls, file history, rotation/mirroring, and multithreaded
709preloading.")
710 (license license:gpl3+)))
52bb05c7 711
712(define-public chafa
713 (package
714 (name "chafa")
a0570377 715 (version "1.4.1")
52bb05c7 716 (source (origin
717 (method url-fetch)
718 (uri (string-append "https://hpjansson.org/chafa/releases/chafa-"
719 version ".tar.xz"))
720 (sha256
721 (base32
a0570377 722 "18rb82bfqj1sj2g4irazx4lwq9q4b4k7my1r0q714vf9yhs41ls6"))))
52bb05c7 723 (build-system gnu-build-system)
724 (native-inputs
725 `(("pkg-config" ,pkg-config)))
726 (inputs
a0570377 727 `(("freetype" ,freetype)
728 ("libjpeg" ,libjpeg-turbo)
729 ("glib" ,glib)
52bb05c7 730 ("imagemagick" ,imagemagick)))
731 (synopsis "Convert images to ANSI/Unicode characters")
732 (description
733 "Chafa is a command-line utility that converts all kinds of images,
734including animated GIFs, into ANSI/Unicode character output that can be
735displayed in a terminal.")
736 (home-page "https://hpjansson.org/chafa/")
737 (license license:lgpl3+)))
cd819b45
PMY
738
739(define-public imv
740 (package
741 (name "imv")
742 (version "4.1.0")
743 (source (origin
744 (method git-fetch)
745 (uri (git-reference
746 (url "https://github.com/eXeC64/imv")
747 (commit (string-append "v" version))))
748 (sha256
749 (base32
750 "0gk8g178i961nn3bls75a8qpv6wvfvav6hd9lxca1skaikd33zdx"))
751 (file-name (git-file-name name version))))
752 (build-system gnu-build-system)
753 (arguments
9c44af6b 754 `(#:phases
cd819b45 755 (modify-phases %standard-phases
51c87770
LC
756 (delete 'configure)
757 (add-after 'install 'record-absolute-file-names
758 (lambda* (#:key outputs #:allow-other-keys)
759 ;; 'imv' is a script that execs 'imv-x11' or 'imv-wayland'.
760 ;; Record their absolute file name.
761 (let* ((out (assoc-ref outputs "out"))
762 (bin (string-append out "/bin")))
763 (substitute* (string-append bin "/imv")
764 (("imv-")
765 (string-append bin "/imv-")))
766 #t))))
cd819b45 767 #:make-flags
9c44af6b 768 (list ,(string-append "CC=" (cc-for-target))
cd819b45
PMY
769 (string-append "PREFIX=" (assoc-ref %outputs "out"))
770 (string-append "CONFIGPREFIX="
771 (assoc-ref %outputs "out") "/etc"))))
772 (inputs
773 `(("asciidoc" ,asciidoc)
774 ("freeimage" ,freeimage)
775 ("glu" ,glu)
776 ("librsvg" ,librsvg)
777 ("libxkbcommon" ,libxkbcommon)
778 ("pango" ,pango)
779 ("wayland" ,wayland)))
780 (native-inputs
781 `(("cmocka" ,cmocka)
782 ("pkg-config" ,pkg-config)))
783 (synopsis "Image viewer for tiling window managers")
784 (description "@code{imv} is a command line image viewer intended for use
785with tiling window managers. Features include:
786
787@itemize
788@item Native Wayland and X11 support.
789@item Support for dozens of image formats including:
790@itemize
791@item PNG
792@item JPEG
793@item Animated GIFs
794@item SVG
795@item TIFF
796@item Various RAW formats
797@item Photoshop PSD files
798@end itemize
799@item Configurable key bindings and behavior.
800@item Highly scriptable with IPC via imv-msg.
801@end itemize\n")
802 (home-page "https://github.com/eXeC64/imv")
803 (license license:expat)))
e2bd0af3
VK
804
805(define-public qiv
806 (package
807 (name "qiv")
808 (version "2.3.1")
809 (source
810 (origin
811 (method url-fetch)
812 (uri (string-append "http://spiegl.de/qiv/download/qiv-"
813 version ".tgz"))
814 (sha256
815 (base32 "1rlf5h67vhj7n1y7jqkm9k115nfnzpwngj3kzqsi2lg676srclv7"))))
816 (build-system gnu-build-system)
817 (native-inputs
818 `(("pkg-config" ,pkg-config)
819 ;; That is required for testing.
820 ("xorg-server" ,xorg-server-for-tests)))
821 (inputs
822 `(("imlib2" ,imlib2)
823 ("glib" ,glib)
824 ("gtk+" ,gtk+-2)
825 ("lcms" ,lcms)
27783023 826 ("libjpeg" ,libjpeg-turbo)
e2bd0af3
VK
827 ("libtiff" ,libtiff)
828 ("libexif" ,libexif)
829 ("libx11" ,libx11)
830 ("libxext" ,libxext)))
831 (arguments
832 `(#:phases
833 (modify-phases %standard-phases
834 (delete 'configure) ; no configure script
835 (add-before 'install 'patch-file-start-xserver
836 (lambda* (#:key inputs #:allow-other-keys)
837 ;; patch the file so that qiv runs and exits by itself
838 (substitute* "Makefile"
839 (("./qiv -f ./intro.jpg") "./qiv -f -C -s ./intro.jpg")
840 ;; Fail the build when test fails.
841 (("echo \"-- Test Failed --\"")
842 "(echo \"-- Test Failed --\" ; false)"))
843 ;; There must be a running X server and make install doesn't start one.
844 ;; Therefore we must do it.
845 (system "Xvfb :1 &")
846 (setenv "DISPLAY" ":1")
847 #t)))
848 #:tests? #f ; there is no check target
849 #:make-flags
850 (list
851 (string-append "PREFIX=" (assoc-ref %outputs "out")))))
852 (home-page "http://spiegl.de/qiv/")
853 (synopsis "Graphical image viewer for X")
854 (description
855 "Quick Image Viewer is a small and fast GDK/Imlib2 image viewer.
856Features include zoom, maxpect, scale down, fullscreen, slideshow, delete,
857brightness/contrast/gamma correction, pan with keyboard and mouse, flip,
858rotate left/right, jump/forward/backward images, filename filter and use it
859to set X desktop background.")
860 (license license:gpl2)))
08f35b9b
RL
861
862(define-public nomacs
863 (package
864 (name "nomacs")
865 (version "3.16.224")
866 (source
867 (origin
868 (method git-fetch)
869 (uri (git-reference
870 (url "https://github.com/nomacs/nomacs")
871 (commit version)))
08b12d0e 872 (file-name (git-file-name name version))
08f35b9b
RL
873 (sha256
874 (base32
875 "05d4hqg0gl3g9s2xf1hr7mc7g4cqarcap4nzxxa51fsphw2b8x16"))))
876 (build-system cmake-build-system)
877 (arguments
878 `(#:build-type "Release" ; fails to build with debug info
879 #:configure-flags (list "-DENABLE_TRANSLATIONS=true"
880 "-DUSE_SYSTEM_QUAZIP=true"
881 "-DENABLE_OPENCV=true")
882 #:tests? #f ; no rule for target 'test'
883 #:phases
884 (modify-phases %standard-phases
885 (add-after 'unpack 'copy-plugins
886 (lambda* (#:key inputs #:allow-other-keys)
887 (copy-recursively (assoc-ref inputs "plugins")
888 "ImageLounge/plugins")))
889 (add-after 'copy-plugins 'cd-to-source-dir
890 (lambda _ (chdir "ImageLounge") #t)))))
891 (inputs
892 `(("plugins"
893 ,(origin
894 (method git-fetch)
895 (uri (git-reference
896 (url "https://github.com/nomacs/nomacs-plugins")
897 (commit "3.16")))
898 (sha256
899 (base32
900 "1cpdwhfvaxm970nwdc1hc13848a85pqqi176m9xpa3krla9qskml"))))
901 ("exiv2" ,exiv2)
902 ("libraw" ,libraw)
903 ("libtiff" ,libtiff)
904 ("opencv" ,opencv)
905 ("python" ,python-wrapper)
906 ("quazip" ,quazip)
ea0a5107 907 ("qtbase" ,qtbase-5)
08b12d0e 908 ("qtsvg" ,qtsvg)))
08f35b9b 909 (native-inputs
08b12d0e
EF
910 `(("pkg-config" ,pkg-config)
911 ("qtlinguist" ,qttools)))
08f35b9b
RL
912 (synopsis "Image viewer supporting all common formats")
913 (description "Nomacs is a simple to use image lounge featuring
914semi-transparent widgets that display additional information such as metadata,
915thumbnails and histograms. It is able to browse images compressed archives
916and add notes to images.
917
918Nomacs includes image manipulation methods for adjusting brightness, contrast,
919saturation, hue, gamma, and exposure. It has a pseudo color function which
920allows creating false color images. A unique feature of Nomacs is the
921synchronization of multiple instances.")
922 (home-page "https://nomacs.org/")
923 (license license:gpl3+)))
2fa624dd
SR
924
925(define-public xzgv
926 (package
927 (name "xzgv")
928 (version "0.9.2")
929 (source
930 (origin
931 (method url-fetch)
932 (uri (string-append "mirror://sourceforge/xzgv/"
933 version "/xzgv-" version ".tar.gz"))
934 (sha256
935 (base32 "17l1xr9v07ggwga3vn0z1i4lnwjrr20rr8z1kjbw71aaijxl18i5"))))
936 (build-system gnu-build-system)
937 (arguments
938 `(#:phases
939 (modify-phases %standard-phases
940 (add-after 'unpack 'override-target-directory
941 (lambda* (#:key outputs #:allow-other-keys)
942 (substitute* "config.mk"
943 (("/usr/local") (assoc-ref outputs "out")))))
944 (delete 'configure) ; no configure script
945 (replace 'install
946 (lambda* (#:key outputs #:allow-other-keys)
947 (let* ((out (assoc-ref outputs "out"))
948 (bin (string-append out "/bin")))
949 (install-file "src/xzgv" bin))))) ; just install the executable
950 #:tests? #f)) ; no rule for target 'test'
951 (native-inputs
952 `(("pkg-config" ,pkg-config)))
953 (inputs
954 `(("gtk+" ,gtk+-2)
955 ("libexif" ,libexif)))
956 (home-page "https://sourceforge.net/projects/xzgv/")
957 (synopsis "Picture viewer for X with a thumbnail-based selector")
958 (description
959 "xzgv is a fast image viewer that provides extensive keyboard support.")
960 (license license:gpl2+)))