gnu: Add ytfzf.
[jackhill/guix/guix.git] / gnu / packages / image-viewers.scm
index 16040e4..ccbbb3b 100644 (file)
@@ -2,12 +2,12 @@
 ;;; Copyright © 2013, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019, 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
 ;;; Copyright © 2020 Peng Mei Yu <pengmeiyu@riseup.net>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2021 Rovanion Luckey <rovanion.luckey@gmail.com>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +48,7 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages image-processing)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages suckless)
+  #:use-module (gnu packages terminals)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages))
 
+(define-public ytfzf
+  (package
+    (name "ytfzf")
+    (version "1.2.0")
+    (home-page "https://github.com/pystardust/ytfzf")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url home-page)
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "00d416qb4109pm77ikhnmds8qng90ni2jan9kdnxz7b6sh5f61nz"))
+       (patches
+        (search-patches
+         ;; Prerequisite for 'patch phase.
+         "ytfzf-programs.patch"
+         ;; Disables self-update.
+         "ytfzf-updates.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no test suite
+       #:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (srfi srfi-26))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Use correct $PREFIX path.
+             (substitute* "Makefile"
+               (("/usr/bin")
+                (format #f "~a/bin"
+                        (assoc-ref outputs "out"))))
+             ;; Use absolute path to referenced programs.
+             (substitute* "ytfzf"
+               (("guix-catimg")
+                (format #f "~a/bin/catimg"
+                        (assoc-ref inputs "catimg")))
+               (("guix-chafa")
+                (format #f "~a/bin/chafa"
+                        (assoc-ref inputs "chafa")))
+               (("guix-curl")
+                (format #f "~a/bin/curl"
+                        (assoc-ref inputs "curl")))
+               (("guix-dmenu")
+                (format #f "~a/bin/dmenu"
+                        (assoc-ref inputs "dmenu")))
+               (("guix-fzf")
+                (format #f "~a/bin/fzf"
+                        (assoc-ref inputs "fzf")))
+               (("guix-jp2a")
+                (format #f "~a/bin/jp2a"
+                        (assoc-ref inputs "jp2a")))
+               (("guix-jq")
+                (format #f "~a/bin/jq"
+                        (assoc-ref inputs "jq")))
+               (("guix-mpv")
+                (format #f "~a/bin/mpv"
+                        (assoc-ref inputs "mpv")))
+               (("guix-notify-send")
+                (format #f "~a/bin/notify-send"
+                        (assoc-ref inputs "libnotify")))
+               (("guix-tput")
+                (format #f "~a/bin/tput"
+                        (assoc-ref inputs "ncurses")))
+               (("guix-ueberzug")
+                (format #f "~a/bin/ueberzug"
+                        (assoc-ref inputs "python-ueberzug")))
+               (("guix-youtube-dl")
+                (format #f "~a/bin/youtube-dl"
+                        (assoc-ref inputs "youtube-dl"))))))
+         (delete 'configure))))         ;no configure script
+    (inputs
+     `(("catimg" ,catimg)
+       ("chafa" ,chafa)
+       ("curl" ,curl)
+       ("dmenu" ,dmenu)
+       ("fzf" ,fzf)
+       ("jp2a" ,jp2a)
+       ("jq" ,jq)
+       ("libnotify" ,libnotify)
+       ("mpv" ,mpv)
+       ("ncurses" ,ncurses)
+       ("python-ueberzug" ,python-ueberzug)
+       ("youtube-dl" ,youtube-dl)))
+    (synopsis "Find and watch PeerTube or YouTube videos from the terminal")
+    (description "@code{ytfzf} is a POSIX script that helps you find PeerTube or
+YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
+    (license license:gpl3+)))
+
 (define-public feh
   (package
     (name "feh")
-    (version "3.5")
+    (version "3.6.3")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "07jklibpi4ig9pbdrwhllsfffxn2h8xf4ma36qii00w4hb69v3rq"))))
+                "1d13x8hmvpdc5f5rj4l29ha7iz7wvqxjlvh6il04wq8igzrj0x23"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases (delete 'configure))
+     `(#:phases (modify-phases %standard-phases (delete 'configure))
        #:test-target "test"
        #:make-flags
-       (list "CC=gcc" (string-append "PREFIX=" (assoc-ref %outputs "out"))
+       (list ,(string-append "CC=" (cc-for-target))
+             (string-append "PREFIX=" (assoc-ref %outputs "out"))
              "exif=1"
              "inotify=1")))
     (native-inputs
@@ -203,7 +310,7 @@ It is the default image viewer on LXDE desktop environment.")
      `(#:tests? #f                      ; no check target
        #:make-flags
        (list (string-append "PREFIX=" %output)
-             "CC=gcc"
+             (string-append "CC=" ,(cc-for-target))
              ;; Xft.h #includes <ft2build.h> without ‘freetype2/’.  The Makefile
              ;; works around this by hard-coding /usr/include & $PREFIX.
              (string-append "CPPFLAGS=-I"
@@ -212,7 +319,16 @@ It is the default image viewer on LXDE desktop environment.")
              "V=1")
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure))))         ; no configure script
+         (delete 'configure)            ; no configure script
+         (add-after 'install 'install-desktop-file
+           (lambda* (#:key outputs #:allow-other-keys)
+             (install-file "sxiv.desktop"
+                           (string-append (assoc-ref outputs "out")
+                                          "/share/applications"))
+             #t))
+         (add-after 'install 'install-icons
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "-C" "icon" "install" make-flags))))))
     (inputs
      `(("freetype" ,freetype)
        ("giflib" ,giflib)
@@ -285,7 +401,7 @@ your images.  Among its features are:
 (define-public catimg
   (package
     (name "catimg")
-    (version "2.6.0")
+    (version "2.7.0")
     (source
      (origin
        (method git-fetch)
@@ -294,7 +410,7 @@ your images.  Among its features are:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0g9ywbgy162wiam9hc3yqpq5q4gyxa8fj4jskr3fdz8z8jjaabzz"))))
+        (base32 "0a2dswbv4xddb2l2d55hc43lzvjwrjs5z9am7v6i0p0mi2fmc89s"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -344,7 +460,7 @@ It supports JPEG, PNG and GIF formats.")
      `(("pkg-config" ,pkg-config)
        ("qttools" ,qttools)))
     (inputs
-     `(("qtbase" ,qtbase)
+     `(("qtbase" ,qtbase-5)
        ("qtdeclarative" ,qtdeclarative)
        ("qtsvg" ,qtsvg)
        ("qtwebkit" ,qtwebkit)
@@ -486,7 +602,7 @@ For PDF support, install the @emph{mupdf} package.")
 (define-public qview
   (package
     (name "qview")
-    (version "3.0")
+    (version "4.0")
     (source
      (origin
        (method git-fetch)
@@ -495,32 +611,25 @@ For PDF support, install the @emph{mupdf} package.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15a91bs3wcqhgf76wzigbn10hayg628j84pq4j2vaxar94ak0vk7"))))
+        (base32 "15n9cq7w3ckinnx38hvncxrbkv4qm4k51sal41q4y0pkvhmafhnr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda _
-             (invoke "qmake")))
-         ;; Installation process hard-codes "/usr/bin", possibly
-         ;; prefixed.
-         (add-after 'configure 'fix-install-directory
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (substitute* "Makefile"
-                 (("\\$\\(INSTALL_ROOT\\)/usr") out))
-               #t)))
-         ;; Don't phone home or show "Checking for updates..." in the
-         ;; About menu.
+               (invoke "qmake" (string-append "PREFIX=" out)))))
+         ;; Don't phone home or show "Checking for updates..." in the About
+         ;; menu.
          (add-before 'build 'disable-auto-update
            (lambda _
              (substitute* "src/qvaboutdialog.cpp"
-               (("ui->updateLabel->setText\\(updateText\\);") "")
-               (("requestUpdates\\(\\);") ""))
+               (("qvApp->checkUpdates\\(\\);") "")
+               (("updateText\\(\\);") ""))
              #t)))))
     (inputs
-     `(("qtbase" ,qtbase)
+     `(("qtbase" ,qtbase-5)
        ("qtsvg" ,qtsvg)
        ("qtimageformats" ,qtimageformats)))
     (home-page "https://interversehq.com/qview/")
@@ -573,7 +682,7 @@ displayed in a terminal.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases
+     `(#:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (add-after 'install 'record-absolute-file-names
@@ -587,7 +696,7 @@ displayed in a terminal.")
                   (string-append bin "/imv-")))
                #t))))
        #:make-flags
-       (list "CC=gcc"
+       (list ,(string-append "CC=" (cc-for-target))
              (string-append "PREFIX=" (assoc-ref %outputs "out"))
              (string-append "CONFIGPREFIX="
                             (assoc-ref %outputs "out") "/etc"))))
@@ -680,3 +789,103 @@ brightness/contrast/gamma correction, pan with keyboard and mouse, flip,
 rotate left/right, jump/forward/backward images, filename filter and use it
 to set X desktop background.")
     (license license:gpl2)))
+
+(define-public nomacs
+  (package
+    (name "nomacs")
+    (version "3.16.224")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/nomacs/nomacs")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "05d4hqg0gl3g9s2xf1hr7mc7g4cqarcap4nzxxa51fsphw2b8x16"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:build-type "Release" ; fails to build with debug info
+       #:configure-flags (list "-DENABLE_TRANSLATIONS=true"
+                               "-DUSE_SYSTEM_QUAZIP=true"
+                               "-DENABLE_OPENCV=true")
+       #:tests? #f ; no rule for target 'test'
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'copy-plugins
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "plugins")
+                               "ImageLounge/plugins")))
+         (add-after 'copy-plugins 'cd-to-source-dir
+           (lambda _ (chdir "ImageLounge") #t)))))
+    (inputs
+     `(("plugins"
+        ,(origin
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/nomacs/nomacs-plugins")
+                 (commit "3.16")))
+           (sha256
+            (base32
+             "1cpdwhfvaxm970nwdc1hc13848a85pqqi176m9xpa3krla9qskml"))))
+       ("exiv2" ,exiv2)
+       ("libraw" ,libraw)
+       ("libtiff" ,libtiff)
+       ("opencv" ,opencv)
+       ("python" ,python-wrapper)
+       ("quazip" ,quazip)
+       ("qtbase" ,qtbase-5)
+       ("qtsvg" ,qtsvg)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("qtlinguist" ,qttools)))
+    (synopsis "Image viewer supporting all common formats")
+    (description "Nomacs is a simple to use image lounge featuring
+semi-transparent widgets that display additional information such as metadata,
+thumbnails and histograms.  It is able to browse images compressed archives
+and add notes to images.
+
+Nomacs includes image manipulation methods for adjusting brightness, contrast,
+saturation, hue, gamma, and exposure.  It has a pseudo color function which
+allows creating false color images.  A unique feature of Nomacs is the
+synchronization of multiple instances.")
+    (home-page "https://nomacs.org/")
+    (license license:gpl3+)))
+
+(define-public xzgv
+  (package
+    (name "xzgv")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/xzgv/"
+                           version "/xzgv-" version ".tar.gz"))
+       (sha256
+        (base32 "17l1xr9v07ggwga3vn0z1i4lnwjrr20rr8z1kjbw71aaijxl18i5"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'override-target-directory
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "config.mk"
+               (("/usr/local") (assoc-ref outputs "out")))))
+         (delete 'configure)            ; no configure script
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "src/xzgv" bin))))) ; just install the executable
+       #:tests? #f))                             ; no rule for target 'test'
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtk+" ,gtk+-2)
+       ("libexif" ,libexif)))
+    (home-page "https://sourceforge.net/projects/xzgv/")
+    (synopsis "Picture viewer for X with a thumbnail-based selector")
+    (description
+     "xzgv is a fast image viewer that provides extensive keyboard support.")
+    (license license:gpl2+)))