gnu: Add ytfzf.
[jackhill/guix/guix.git] / gnu / packages / image-viewers.scm
index fda9e4c..ccbbb3b 100644 (file)
 ;;; 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.
 ;;;
@@ -44,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)
@@ -62,6 +67,7 @@
   #: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.6.2")
+    (version "3.6.3")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0d66qz9h37pk8h10bc918hbv3j364vyni934rlw2j951s5wznj8n"))))
+                "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
@@ -355,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)
@@ -524,7 +629,7 @@ For PDF support, install the @emph{mupdf} package.")
                (("updateText\\(\\);") ""))
              #t)))))
     (inputs
-     `(("qtbase" ,qtbase)
+     `(("qtbase" ,qtbase-5)
        ("qtsvg" ,qtsvg)
        ("qtimageformats" ,qtimageformats)))
     (home-page "https://interversehq.com/qview/")
@@ -577,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
@@ -591,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"))))
@@ -730,7 +835,7 @@ to set X desktop background.")
        ("opencv" ,opencv)
        ("python" ,python-wrapper)
        ("quazip" ,quazip)
-       ("qtbase" ,qtbase)
+       ("qtbase" ,qtbase-5)
        ("qtsvg" ,qtsvg)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -747,3 +852,40 @@ 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+)))