gnu: linux-libre@4.9: Update to 4.9.208.
[jackhill/guix/guix.git] / gnu / packages / terminals.scm
index 18da27f..b5c3b69 100644 (file)
@@ -1,16 +1,22 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Mckinley Olsen <mck.olsen@gmail.com>
-;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2016, 2017, 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
-;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2018 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018 Gabriel Hondet <gabrielhondet@gmail.com>
+;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
+;;; Copyright © 2018, 2019 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,7 +35,6 @@
 
 (define-module (gnu packages terminals)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages popt)
+  #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-web)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages textutils)
-  #:use-module (gnu packages wm)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -106,7 +121,7 @@ configurable through a graphical wizard.")
 (define-public termite
   (package
     (name "termite")
-    (version "14")
+    (version "15")
     (source
       (origin
         (method git-fetch)
@@ -118,7 +133,7 @@ configurable through a graphical wizard.")
         (file-name (string-append name "-" version "-checkout"))
         (sha256
          (base32
-          "0dmz9rpc2fdvcwhcmjnhb48ixn403gxpq03g334d1hgjw2hsyx7x"))))
+          "0hp1x6lj098m3jgna274wv5dv60lnzg22297di68g4hw9djjyd2k"))))
     (build-system gnu-build-system)
     (arguments
       `(#:phases
@@ -157,14 +172,17 @@ insert mode and command mode where keybindings have different functions.")
 (define-public asciinema
   (package
     (name "asciinema")
-    (version "1.4.0")
+    (version "2.0.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "asciinema" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/asciinema/asciinema")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "1jrf8c8711gkdilmvyv3d37kp8xfvdc5cqighw5k92a6g9z4acgv"))))
+         "1a2pysxnp6icyd08mgf66xr6f6j0irnfxdpf3fmzcz31ix7l9kc4"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -172,14 +190,16 @@ insert mode and command mode where keybindings have different functions.")
          (add-before 'build 'patch-exec-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((ncurses (assoc-ref inputs "ncurses")))
-               (substitute* "asciinema/recorder.py"
+               (substitute* "asciinema/term.py"
                  (("'tput'")
                   (string-append "'" ncurses "/bin/tput'"))))
-             #t)))))
+             #t))
+         (replace 'check
+           (lambda _ (invoke "nosetests" "-v"))))))
     (inputs `(("ncurses" ,ncurses)))
     (native-inputs
      ;; For tests.
-     `(("python-requests" ,python-requests)))
+     `(("python-nose" ,python-nose)))
     (home-page "https://asciinema.org")
     (synopsis "Terminal session recorder")
     (description
@@ -200,6 +220,7 @@ text-based approach to terminal recording.")
                 (uri (git-reference
                       (url (string-append "https://github.com/Aetf/" name))
                       (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "0mwn91i5h5d518i1s05y7hzv6bc13vzcvxszpfh77473iwg4wprx"))))
@@ -238,13 +259,20 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
                 (sha256
                  (base32
                   "0q62kjsvy2iwy8adfiygx2bfwlh83rphgxbis95ycspqidg9py87"))
-                (modules '((guix build utils)))))
+                (patches
+                 (search-patches "kmscon-runtime-keymap-switch.patch"))
+                (modules '((guix build utils)))
+                (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (arguments
-       `(#:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'autogen.sh
+       `(;; The closure of MESA is huge so we'd rather avoid it.
+         #:disallowed-references (,mesa)
+
+         #:phases (modify-phases %standard-phases
+                    (replace 'bootstrap
                       (lambda _
-                        (zero? (system* "sh" "autogen.sh"))))
+                        (setenv "NOCONFIGURE" "indeed")
+                        (invoke "sh" "autogen.sh")))
                     ;; Use elogind instead of systemd.
                     (add-before 'configure 'remove-systemd
                       (lambda _
@@ -273,7 +301,10 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
          ("libtsm" ,libtsm)
          ("libxkbcommon" ,libxkbcommon)
          ("logind" ,elogind)
-         ("mesa" ,mesa)
+         ;; MESA can be used for accelerated video output via OpenGLESv2, but
+         ;; it's a bit dependency that we'd rather avoid in the installation
+         ;; image.
+         ;; ("mesa" ,mesa)
          ("pango" ,pango)
          ("udev" ,eudev)))
       (synopsis "Linux KMS-based terminal emulator")
@@ -299,20 +330,20 @@ multi-seat support, a replacement for @command{mingetty}, and more.")
 (define-public libtermkey
   (package
     (name "libtermkey")
-    (version "0.20")
+    (version "0.21.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.leonerd.org.uk/code/"
-                                  name "/" name "-" version ".tar.gz"))
+              (uri (string-append "http://www.leonerd.org.uk/code/libtermkey/"
+                                  "libtermkey-" version ".tar.gz"))
               (sha256
-               (base32 "1xfj6lchhfljmbcl6dz8dpakppyy13nbl4ykxiv5x4dr9b4qf3bc"))))
+               (base32 "0psd0kf10q5ixfima0mxz10syy7qq1ilz1npr0rz862xycvzgjyf"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list
                      "CC=gcc"
                      (string-append "PREFIX=" (assoc-ref %outputs "out")))
        #:phases (modify-phases %standard-phases
-                  (delete 'configure))
+                  (delete 'configure))  ; no configure script
        #:test-target "test"))
     (inputs `(("ncurses" ,ncurses)))
     (native-inputs `(("libtool" ,libtool)
@@ -328,7 +359,7 @@ combining, and so on, with a simple interface.")
 (define-public picocom
   (package
     (name "picocom")
-    (version "2.2")
+    (version "3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -337,15 +368,16 @@ combining, and so on, with a simple interface.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "06b2ic34dnxc73cprc5imi3iamlhsv623sbg9vj5h5rvs586dwjx"))))
+                "1vvjydqf0ax47nvdyyl67jafw5b3sfsav00xid6qpgia1gs2r72n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("CC=gcc")
-       #:tests? #f ; No tests
+       #:tests? #f                      ; no tests
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (delete 'configure)            ; no configure script
          (replace 'install
+           ;; The Makefile lacks an ‘install’ target.
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin"))
@@ -353,52 +385,55 @@ combining, and so on, with a simple interface.")
                (install-file "picocom" bin)
                (install-file "picocom.1" man)))))))
     (home-page "https://github.com/npat-efault/picocom")
-    (synopsis "Minimal dumb-terminal emulation program")
-    (description "It was designed to serve as a simple, manual, modem
-configuration, testing, and debugging tool.  It has also serves well
-as a low-tech serial communications program to allow access to all
-types of devices that provide serial consoles.")
+    (synopsis "Minimal dumb-terminal emulator")
+    (description
+     "Picocom is a minimal dumb-terminal emulation program.  It was designed to
+serve as a simple and manual modem configuration, testing, and debugging tool.
+It also serves well as a low-tech serial communications program to allow access
+to all types of devices that provide serial consoles.")
     (license license:gpl2+)))
 
 (define-public beep
   (package
     (name "beep")
-    (version "1.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.johnath.com/" name "/"
-                                  name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0bgch6jq5cahakk3kbr9549iysf2dik09afixxy5brbxk1xfzb2r"))))
+    (version "1.4.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             ;; The original beep 1.3 at <http://www.johnath.com/beep> has been
+             ;; unmaintained for some time, and vulnerable to at least two CVEs:
+             ;; https://github.com/johnath/beep/issues/11#issuecomment-454056858
+             ;; Use this maintained fork instead.
+             (url "https://github.com/spkr-beep/beep.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0dnbvzzxvajc7pl1165wb3l74pfcqcdg12rcjcw86qqy954dx8my"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; no tests.
+     `(#:tests? #f                      ; no tests
+       #:make-flags
+       (list (string-append "prefix=" (assoc-ref %outputs "out"))
+             (string-append "pkgdocdir=$(docdir)/" ,name "-" ,version))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'unpack 'patch-makefile
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile" (("/usr") (assoc-ref outputs "out")))
-             #t))
-         (add-before 'install 'create-output-directories
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref %outputs "out")))
-               (mkdir-p (string-append out "/bin"))
-               (mkdir-p (string-append out "/man/man1"))))))))
+         (delete 'configure))))         ; no configure script
+    (native-inputs
+     `(("gcc" ,gcc-8)))                 ; for ‘-fstack-clash-protection’
     (synopsis "Linux command-line utility to control the PC speaker")
     (description "beep allows the user to control the PC speaker with precision,
 allowing different sounds to indicate different events.  While it can be run
 quite happily on the command line, its intended place of residence is within
 scripts, notifying the user when something interesting occurs.  Of course, it
 has no notion of what's interesing, but it's very good at that notifying part.")
-    (home-page "http://www.johnath.com/beep")
+    (home-page "https://github.com/spkr-beep/beep")
     (license license:gpl2+)))
 
 (define-public unibilium
   (package
     (name "unibilium")
-    (version "1.2.1")
+    (version "2.0.0")
     (source
      (origin
        (method git-fetch)
@@ -408,7 +443,7 @@ has no notion of what's interesing, but it's very good at that notifying part.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "11mbfijdrvbmdlmxs8j4vij78ki0vna89yg3r9n9g1i6j45hiq2r"))))
+         "1wa9a32wzqnxqh1jh554afj13dzjr6mw2wzqzw8d08nza9pg2ra2"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -421,7 +456,8 @@ has no notion of what's interesing, but it's very good at that notifying part.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("libtool" ,libtool)))
+     `(("libtool" ,libtool)
+       ("perl" ,perl)))
     (home-page "https://github.com/mauke/unibilium")
     (synopsis "Terminfo parsing library")
     (description "Unibilium is a basic C terminfo library.  It doesn't depend
@@ -432,7 +468,7 @@ should be thread-safe.")
 (define-public libvterm
   (package
     (name "libvterm")
-    (version "0+bzr681")
+    (version "0.1.1")
     (source
      (origin
        (method url-fetch)
@@ -440,7 +476,7 @@ should be thread-safe.")
                            "libvterm-" version ".tar.gz"))
        (sha256
         (base32
-         "1s56c8p1qz6frkcri0hg4qyydv2wcccj6n2xmz1dwcdqn38ldsmb"))))
+         "1n5maylann2anfifjy576vzyar9q5m1kzpyiz2hca2pacxy8xf4v"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -464,11 +500,11 @@ embedded kernel situations.")
     (license license:expat)))
 
 (define-public cool-retro-term
-  (let ((commit "dd799cf5c0eda92cf44f3938c0c2dcae5651a99e")
-        (revision "1"))
+  (let ((commit "1.1.1")
+        (revision "0"))                 ;not used currently
     (package
       (name "cool-retro-term")
-      (version (string-append "1.0.1-" revision "." (string-take commit 7)))
+      (version "1.1.1")
       (source (origin
                 (method git-fetch)
                 (file-name (string-append name "-" version "-checkout"))
@@ -477,11 +513,7 @@ embedded kernel situations.")
                       (commit commit)
                       (recursive? #t)))
                 (sha256
-                 (base32 "08mrvj8zk9ck15q90ipjzza1acnnsjhprv2rxg8yyck0xl9p40jd"))
-                (patches
-                 (search-patches "cool-retro-term-fix-array-size.patch"
-                                 "cool-retro-term-dont-check-uninit-member.patch"
-                                 "cool-retro-term-memory-leak-1.patch"))
+                 (base32 "0wb6anchxa5jpn9c73kr4byrf2xlj8x8qzc5x7ny6saj7kbbvp75"))
                 (modules '((guix build utils)
                            (srfi srfi-1)
                            (srfi srfi-26)
@@ -489,20 +521,18 @@ embedded kernel situations.")
                            (ice-9 regex)))
                 (snippet
                  '(let* ((fonts '(;"1971-ibm-3278"     ; BSD 3-clause
-                                  ;"1975-knight-tv"    ; GPL
                                   "1977-apple2"        ; Non-Free
                                   "1977-commodore-pet" ; Non-Free
                                   "1979-atari-400-800" ; Non-Free
-                                  "1982-commodore64"   ; Non-Free
-                                  "1985-atari-st"      ; ?
-                                  "1985-ibm-pc-vga"    ; Unclear
+                                  ;"1981-ibm-pc        ; CC-SA 4.0
+                                  "1982-commodore64")) ; Non-Free
+                                  ;"1985-ibm-pc-vga"   ; CC-SA 4.0
                                   ;"modern-fixedsys-excelsior" ; Redistributable
                                   ;"modern-hermit"     ; SIL
                                   ;"modern-inconsolata"; SIL
                                   ;"modern-pro-font-win-tweaked" ; X11
                                   ;"modern-proggy-tiny"; X11
                                   ;"modern-terminus"   ; SIL
-                                  "modern-monaco"))    ; Apple Non-Free
                          (name-rx (make-regexp " *name: *\"([^\"]*)\""))
                          (source-rx (make-regexp " *source: \"fonts/([^/]*)[^\"]*\""))
                          (fontname-rx (make-regexp "\"fontName\":\"([^\"]*).*"))
@@ -618,7 +648,8 @@ embedded kernel situations.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
                  (symlink (string-append bin "/cool-retro-term")
-                          (string-append bin "/crt")))))
+                          (string-append bin "/crt"))
+                 #t)))
            (add-after 'install 'install-man
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((mandir (string-append (assoc-ref outputs "out")
@@ -642,15 +673,15 @@ eye-candy, customizable, and reasonably lightweight.")
 (define-public sakura
   (package
     (name "sakura")
-    (version "3.6.0")
+    (version "3.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://launchpad.net/" name "/trunk/"
                                   version "/+download/" name "-" version
-                                  ".tar.bz2"))
+                                  ".tar.gz"))
               (sha256
                (base32
-                "1q463qm41ym7jb3kbzjz7b6x549vmgkb70arpkhsf86yxly1y5m1"))))
+                "15gskj5yv5qs3cj4ps43735kfx2nzjlhq4dk9ghirl8lvhhxsm5m"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no check phase
@@ -669,8 +700,8 @@ desktop installed to have a decent terminal emulator.")
     (license license:gpl2)))
 
 (define-public go-github.com-nsf-termbox-go
-  (let ((commit "4ed959e0540971545eddb8c75514973d670cf739")
-        (revision "0"))
+  (let ((commit "288510b9734e30e7966ec2f22b87c5f8e67345e3")
+        (revision "1"))
     (package
       (name "go-github.com-nsf-termbox-go")
       (version (git-version "0.0.0" revision commit))
@@ -682,7 +713,7 @@ desktop installed to have a decent terminal emulator.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1vx64i1mg660if3wwm81p4b7lzxfb3qbr39i7misdyld3fc486p9"))))
+                  "0hdyisfaf8yb55h3p03p4sbq19546mp9fy28f2kn659mycmhxqk4"))))
       (build-system go-build-system)
       (arguments
        '(#:import-path "github.com/nsf/termbox-go"))
@@ -697,41 +728,34 @@ programmer to write text-based user interfaces.")
       (home-page "https://github.com/nsf/termbox-go")
       (license license:expat))))
 
-(define-public go-golang.org-x-crypto-ssh-terminal
-  (let ((commit "c78caca803c95773f48a844d3dcab04b9bc4d6dd")
-        (revision "0"))
-    (package
-      (name "go-golang.org-x-crypto-ssh-terminal")
-      (version (git-version "0.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://go.googlesource.com/crypto")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0vxlfxr9y681yn2cfh6dbqmq35vvq4f45ay0mm31ffkny9cms0y4"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:import-path "golang.org/x/crypto/ssh/terminal"
-         #:unpack-path "golang.org/x/crypto"
-         #:phases
-         (modify-phases %standard-phases
-           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
-             (lambda* (#:key outputs #:allow-other-keys)
-               (map (lambda (file)
-                      (make-file-writable file))
-                    (find-files
-                     (string-append (assoc-ref outputs "out")
-                                    "/src/golang.org/x/crypto/ed25519/testdata")
-                     ".*\\.gz$"))
-               #t)))))
-      (synopsis "Support functions for dealing with terminals in Go")
-      (description "@code{terminal} provides support functions for dealing
-with terminals in Go.")
-      (home-page "https://go.googlesource.com/crypto/")
-      (license license:bsd-3))))
+(define-public go-github-com-junegunn-fzf
+  (package
+    (name "go-github-com-junegunn-fzf")
+    (version "0.18.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/junegunn/fzf")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0pwpr4fpw56yzzkcabzzgbgwraaxmp7xzzmap7w1xsrkbj7dl2xl"))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "github.com/junegunn/fzf"))
+    (inputs
+     `(("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
+       ("go-github-com-mattn-go-shellwords" ,go-github-com-mattn-go-shellwords)
+       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
+       ("go-github-com-gdamore-tcell" ,go-github-com-gdamore-tcell)
+       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)))
+    (home-page "https://github.com/junegunn/fzf")
+    (synopsis "Command-line fuzzy-finder")
+    (description "This package provides an interactive command-line filter
+usable with any list--including files, command history, processes and more.")
+    (license license:expat)))
 
 (define-public go-github.com-howeyc-gopass
   (let ((commit "bf9dde6d0d2c004a008c27aaee91170c786f6db8")
@@ -752,8 +776,8 @@ with terminals in Go.")
       (arguments
        '(#:import-path "github.com/howeyc/gopass"))
       (propagated-inputs
-       `(("go-golang.org-x-crypto-ssh-terminal"
-          ,go-golang.org-x-crypto-ssh-terminal)))
+       `(("go-golang-org-x-crypto"
+          ,go-golang-org-x-crypto)))
       (synopsis "Retrieve password from a terminal or piped input in Go")
       (description
        "@code{gopass} is a Go package for retrieving a password from user
@@ -805,20 +829,21 @@ of VT100 terminal.")
 (define-public python-blessings
   (package
     (name "python-blessings")
-    (version "1.6.1")
+    (version "1.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "blessings" version))
        (sha256
         (base32
-         "1smngy65p8mi62lgm04icasx22v976szhs2aq95y2ljmi1srb4bl"))))
+         "0z8mgkbmisxs10rz88qg46l1c9a8n08k8cy2iassal2zh16qbrcq"))))
     (build-system python-build-system)
     (arguments
-     ;; TODO: For py3, 2to2 is used to convert the code, but test-suite fails
+     ;; FIXME: Test suite is unable to detect TTY conditions.
      `(#:tests? #f))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     `(("python-nose" ,python-nose)
+       ("python-six" ,python-six)))
     (home-page "https://github.com/erikrose/blessings")
     (synopsis "Python module to manage terminal color, styling, and
 positioning")
@@ -899,3 +924,213 @@ per-line fullscreen terminal rendering, and keyboard input event reporting.")
 share your terminal with other users over the Internet.  tmate is a fork of
 tmux.")
     (license license:isc)))
+
+(define-public kitty
+  (package
+    (name "kitty")
+    (version "0.14.6")
+    (home-page "https://sw.kovidgoyal.net/kitty/")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/kovidgoyal/kitty.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1rb5ys9xsdhd2qa3kz5gqzz111c6b14za98va6hlglk69wqlmb51"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; patch needed as sphinx-build is used as a python script
+           ;; whereas the guix package uses a bash script launching the
+           ;; python script
+           (substitute* "docs/conf.py"
+             (("(from kitty.constants import str_version)" kitty-imp)
+              (string-append "sys.path.append(\"..\")\n" kitty-imp)))
+           (substitute* "docs/Makefile"
+             (("^SPHINXBUILD[[:space:]]+= (python3.*)$")
+              "SPHINXBUILD = sphinx-build\n"))
+           #t))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("python" ,python)
+       ("harfbuzz" ,harfbuzz)
+       ("zlib" ,zlib)
+       ("libcanberra" ,libcanberra)
+       ("libpng" ,libpng)
+       ("freetype" ,freetype)
+       ("fontconfig" ,fontconfig)
+       ("pygments" ,python-pygments)
+       ("wayland" ,wayland)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("libxrandr" ,libxrandr)
+       ("libdbus" ,dbus)
+       ("libxcursor" ,libxcursor)
+       ("libxi" ,libxi)
+       ("libxinerama" ,libxinerama)
+       ("libgl1-mesa" ,mesa)
+       ("libxkbcommon" ,libxkbcommon)
+       ("sphinx" ,python-sphinx)
+       ("ncurses" ,ncurses) ;; for tic command
+       ("wayland-protocols" ,wayland-protocols)))
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  ;; Wayland backend requires EGL, which isn't found
+                  ;; out-of-the-box for some reason. Hard-code it instead.
+                  (add-after 'unpack 'hard-code-libegl
+                    (lambda _
+                      (let* ((mesa (assoc-ref %build-inputs "libgl1-mesa"))
+                             (libegl (string-append mesa "/lib/libEGL.so.1")))
+                        (substitute* "glfw/egl_context.c"
+                                     (("libEGL.so.1") libegl)))
+                      #t))
+                  (replace 'build
+                    (lambda _
+                      (invoke "python3" "setup.py" "linux-package")))
+                  (replace 'check
+                    (lambda _
+                      (invoke "python3" "setup.py" "test")))
+                  (add-before 'install 'rm-pycache
+                    ;; created python cache __pycache__ are non deterministic
+                    (lambda _
+                      (let ((pycaches (find-files "linux-package/"
+                                                  "__pycache__"
+                                                  #:directories? #t)))
+                        (for-each delete-file-recursively pycaches)
+                        #t)))
+                  (replace 'install
+                    (lambda _
+                      (let* ((out (assoc-ref %outputs "out"))
+                             (obin (string-append out "/bin"))
+                             (olib (string-append out "/lib"))
+                             (oshare (string-append out "/share")))
+                        (copy-recursively "linux-package/bin" obin)
+                        (copy-recursively "linux-package/share" oshare)
+                        (copy-recursively "linux-package/lib" olib)
+                        #t))))))
+    (synopsis "Fast, featureful, GPU based terminal emulator")
+    (description "Kitty is a fast and featureful GPU-based terminal emulator:
+@itemize
+@item Offloads rendering to the GPU for lower system load and buttery smooth
+scrolling.  Uses threaded rendering to minimize input latency.
+@item Supports all modern terminal features: graphics (images), unicode,
+true-color, OpenType ligatures, mouse protocol, focus tracking, bracketed
+paste and several new terminal protocol extensions.
+@item Supports tiling multiple terminal windows side by side in different
+layouts without needing to use an extra program like tmux.
+@item Can be controlled from scripts or the shell prompt, even over SSH.
+@item Has a framework for Kittens, small terminal programs that can be used to
+extend kitty's functionality.  For example, they are used for Unicode input,
+hints, and side-by-side diff.
+@item Supports startup sessions which allow you to specify the window/tab
+layout, working directories and programs to run on startup.
+@item Allows you to open the scrollback buffer in a separate window using
+arbitrary programs of your choice.  This is useful for browsing the history
+comfortably in a pager or editor.
+@end itemize")
+    (license license:gpl3+)))
+
+(define-public eternalterminal
+  (package
+    (name "eternalterminal")
+    (version "5.1.10")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/MisterTea/EternalTerminal.git")
+               (commit (string-append "et-v" version))))
+        (file-name (git-file-name name version))
+       (sha256
+        (base32 "0jh89229bd9s82h3aj6faaybwr5xvnk8w2kgz47gq263pz021zpl"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags '("-DBUILD_TEST=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'insert-googletests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((tests (assoc-ref inputs "googletest")))
+               (copy-recursively tests "external/googletest"))
+             #t))
+         (add-after 'install 'dont-provide-gtest-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (delete-file-recursively (string-append out "/include"))
+               (delete-file-recursively (string-append out "/lib")))
+             #t)))))
+    (inputs
+     `(("gflags" ,gflags)
+       ("libsodium" ,libsodium)
+       ("protobuf" ,protobuf)))
+    (native-inputs
+     `(("googletest" ,(package-source googletest))))
+    (home-page "https://mistertea.github.io/EternalTerminal/")
+    (synopsis "Remote shell that reconnects without interrupting the session")
+    (description "@dfn{Eternal Terminal} (ET) is a remote shell that
+automatically reconnects without interrupting the session.  ET uses SSH to
+initialize a secure connection.  Unlike SSH sessions, which must be killed and
+reconnected after a network outage an ET session will survive network outages
+and IP roaming.  ET provides the same core functionality as @command{mosh},
+while also supporting native scrolling and @command{tmux} control mode
+(@code{tmux -CC}).")
+    (license license:asl2.0)))
+
+(define-public wterm
+  (package
+    (name "wterm")
+    (version "0.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/majestrate/wterm.git")
+             (commit "0ae42717c08a85a6509214e881422c7fbe7ecc45")))
+       (sha256
+         (base32
+          "0g4lzmc1w6na81i6hny32xds4xfig4xzswzfijyi6p93a1226dv0"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("libdrm" ,libdrm)
+       ("libxkbcommon" ,libxkbcommon)
+       ("ncurses" ,ncurses)
+       ("pixman" ,pixman)
+       ("wayland" ,wayland)))
+    (arguments
+     '(#:tests? #f
+
+       ;; Without -j1 it fails to find file libwld.a.
+       #:parallel-build? #f
+
+       #:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" %output)
+                          (string-append "TERMINFO="
+                                         (assoc-ref %outputs "out")
+                                         "/share/terminfo"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'terminfo-fix
+           (lambda _
+             (substitute* "Makefile"
+               (("\ttic .*") "\tmkdir -p $(SHARE_PREFIX)/share/terminfo
+\ttic -o $(SHARE_PREFIX)/share/terminfo -s wterm.info\n"))
+             #t)))))
+    (native-search-paths
+      (list (search-path-specification
+              (variable "TERMINFO_DIRS")
+              (files '("share/terminfo")))))
+    (home-page "https://github.com/majestrate/wterm")
+    (synopsis "Terminal emulator for Wayland")
+    (description "wterm is a native Wayland terminal emulator based on
+an st fork using wld. st is a simple terminal emulator for X originally
+made by suckless.")
+    (license license:x11)))