gnu: perl-net-ssleay: Update to 1.85.
[jackhill/guix/guix.git] / gnu / packages / terminals.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
3 ;;; Copyright © 2016 Mckinley Olsen <mck.olsen@gmail.com>
4 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
5 ;;; Copyright © 2016 David Craven <david@craven.ch>
6 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
7 ;;; Copyright © 2016, 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
8 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
9 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
10 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
12 ;;; Copyright © 2018 Hartmut Goebel <h.goebel@crazy-compilers.com>
13 ;;;
14 ;;; This file is part of GNU Guix.
15 ;;;
16 ;;; GNU Guix is free software; you can redistribute it and/or modify it
17 ;;; under the terms of the GNU General Public License as published by
18 ;;; the Free Software Foundation; either version 3 of the License, or (at
19 ;;; your option) any later version.
20 ;;;
21 ;;; GNU Guix is distributed in the hope that it will be useful, but
22 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
23 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 ;;; GNU General Public License for more details.
25 ;;;
26 ;;; You should have received a copy of the GNU General Public License
27 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
28
29 (define-module (gnu packages terminals)
30 #:use-module ((guix licenses) #:prefix license:)
31 #:use-module (guix build utils)
32 #:use-module (guix build-system cmake)
33 #:use-module (guix build-system gnu)
34 #:use-module (guix build-system glib-or-gtk)
35 #:use-module (guix build-system go)
36 #:use-module (guix build-system python)
37 #:use-module (guix download)
38 #:use-module (guix git-download)
39 #:use-module (guix packages)
40 #:use-module (gnu packages)
41 #:use-module (gnu packages autotools)
42 #:use-module (gnu packages check)
43 #:use-module (gnu packages docbook)
44 #:use-module (gnu packages freedesktop)
45 #:use-module (gnu packages gettext)
46 #:use-module (gnu packages gl)
47 #:use-module (gnu packages glib)
48 #:use-module (gnu packages gnome)
49 #:use-module (gnu packages gtk)
50 #:use-module (gnu packages linux)
51 #:use-module (gnu packages ncurses)
52 #:use-module (gnu packages perl)
53 #:use-module (gnu packages perl-check)
54 #:use-module (gnu packages pkg-config)
55 #:use-module (gnu packages python)
56 #:use-module (gnu packages python-web)
57 #:use-module (gnu packages qt)
58 #:use-module (gnu packages textutils)
59 #:use-module (gnu packages wm)
60 #:use-module (gnu packages xdisorg)
61 #:use-module (gnu packages xml)
62 #:use-module (gnu packages xorg)
63 #:use-module (srfi srfi-26))
64
65 (define-public tilda
66 (package
67 (name "tilda")
68 (version "1.3.3")
69 (source (origin
70 (method url-fetch)
71 (uri (string-append "https://github.com/lanoxx/tilda/archive/"
72 "tilda-" version ".tar.gz"))
73 (sha256
74 (base32
75 "1cc4qbg1m3i04lj5p6i6xbd0zvy1320pxdgmjhz5p3j95ibsbfki"))))
76 (build-system glib-or-gtk-build-system)
77 (arguments
78 `(#:phases (modify-phases %standard-phases
79 (add-before 'patch-source-shebangs 'autogen
80 (lambda _ ; Avoid running ./configure.
81 (substitute* "autogen.sh"
82 (("^.*\\$srcdir/configure.*") ""))
83 (zero? (system* "sh" "autogen.sh")))))))
84 (native-inputs
85 `(("autoconf" ,autoconf)
86 ("automake" ,automake)
87 ("gettext" ,gettext-minimal)
88 ("pkg-config" ,pkg-config)))
89 (inputs
90 `(("libconfuse" ,libconfuse)
91 ("vte" ,vte)))
92 (synopsis "GTK+-based drop-down terminal")
93 (description "Tilda is a terminal emulator similar to normal terminals like
94 gnome-terminal (GNOME) or Konsole (KDE), with the difference that it drops down
95 from the edge of a screen when a certain configurable hotkey is pressed. This
96 is similar to the built-in consoles in some applications. Tilda is highly
97 configurable through a graphical wizard.")
98 (home-page "https://github.com/lanoxx/tilda")
99 (license license:gpl2+)))
100
101 (define-public termite
102 (package
103 (name "termite")
104 (version "13")
105 (source
106 (origin
107 (method git-fetch)
108 (uri (git-reference
109 (url (string-append "https://github.com/thestinger/"
110 name ".git"))
111 (commit (string-append "v" version))
112 (recursive? #t)))
113 (file-name (string-append name "-" version "-checkout"))
114 (sha256
115 (base32
116 "02cn70ygl93ghhkhs3xdxn5b1yadc255v3yp8cmhhyzsv5027hvj"))))
117 (build-system gnu-build-system)
118 (arguments
119 `(#:phases
120 (modify-phases %standard-phases
121 (delete 'configure))
122 #:tests? #f
123 ;; This sets the destination when installing the necessary terminal
124 ;; capability data, which are not provided by 'ncurses'. See
125 ;; <https://lists.gnu.org/archive/html/bug-ncurses/2009-10/msg00031.html>.
126 #:make-flags (list "PREFIX="
127 (string-append "VERSION=v" (version))
128 (string-append "DESTDIR="
129 (assoc-ref %outputs "out")))))
130 (inputs
131 `(("vte", vte-ng)
132 ("gtk+", gtk+)
133 ("ncurses", ncurses)))
134 (native-inputs
135 `(("pkg-config" ,pkg-config)))
136
137 ;; FIXME: This should only be located in 'ncurses'. Nonetheless it is
138 ;; provided for usability reasons. See <https://bugs.gnu.org/22138>.
139 (native-search-paths
140 (list (search-path-specification
141 (variable "TERMINFO_DIRS")
142 (files '("share/terminfo")))))
143 (home-page "https://github.com/thestinger/termite/")
144 (synopsis "Keyboard-centric, VTE-based terminal")
145 (description "Termite is a minimal terminal emulator designed for use with
146 tiling window managers. It is a modal application, similar to Vim, with an
147 insert mode and command mode where keybindings have different functions.")
148
149 ;; Files under util/ are under the Expat license; the rest is LGPLv2+.
150 (license license:lgpl2.0+)))
151
152 (define-public asciinema
153 (package
154 (name "asciinema")
155 (version "1.4.0")
156 (source
157 (origin
158 (method url-fetch)
159 (uri (pypi-uri "asciinema" version))
160 (sha256
161 (base32
162 "1jrf8c8711gkdilmvyv3d37kp8xfvdc5cqighw5k92a6g9z4acgv"))))
163 (build-system python-build-system)
164 (arguments
165 `(#:phases
166 (modify-phases %standard-phases
167 (add-before 'build 'patch-exec-paths
168 (lambda* (#:key inputs #:allow-other-keys)
169 (let ((ncurses (assoc-ref inputs "ncurses")))
170 (substitute* "asciinema/recorder.py"
171 (("'tput'")
172 (string-append "'" ncurses "/bin/tput'"))))
173 #t)))))
174 (inputs `(("ncurses" ,ncurses)))
175 (native-inputs
176 ;; For tests.
177 `(("python-requests" ,python-requests)))
178 (home-page "https://asciinema.org")
179 (synopsis "Terminal session recorder")
180 (description
181 "Use asciinema to record and share your terminal sessions, the right way.
182 Forget screen recording apps and blurry video. Enjoy a lightweight, purely
183 text-based approach to terminal recording.")
184 (license license:gpl3)))
185
186 (define-public libtsm
187 (package
188 (name "libtsm")
189 (version "3")
190 (source (origin
191 (method url-fetch)
192 (uri (string-append
193 "https://freedesktop.org/software/kmscon/releases/"
194 "libtsm-" version ".tar.xz"))
195 (sha256
196 (base32
197 "01ygwrsxfii0pngfikgqsb4fxp8n1bbs47l7hck81h9b9bc1ah8i"))))
198 (build-system gnu-build-system)
199 (native-inputs
200 `(("pkg-config" ,pkg-config)))
201 (inputs
202 `(("libxkbcommon" ,libxkbcommon)))
203 (synopsis "Xterm state machine library")
204 (description "TSM is a state machine for DEC VT100-VT520 compatible
205 terminal emulators. It tries to support all common standards while keeping
206 compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
207 (home-page "https://www.freedesktop.org/wiki/Software/libtsm")
208 ;; Hash table implementation is lgpl2.1+ licensed.
209 ;; The wcwidth implementation in external/wcwidth.{h,c} uses a license
210 ;; derived from ISC.
211 ;; UCS-4 to UTF-8 encoding is copied from "terminology" which is released
212 ;; under the bsd 2 license.
213 (license (list license:expat license:lgpl2.1+ license:isc license:bsd-2))))
214
215 (define-public kmscon
216 (package
217 (name "kmscon")
218 (version "8")
219 (source (origin
220 (method url-fetch)
221 (uri (string-append
222 "https://freedesktop.org/software/kmscon/releases/"
223 "kmscon-" version ".tar.xz"))
224 (sha256
225 (base32
226 "0axfwrp3c8f4gb67ap2sqnkn75idpiw09s35wwn6kgagvhf1rc0a"))
227 (modules '((guix build utils)))
228 (snippet
229 ;; Use elogind instead of systemd.
230 '(begin
231 (substitute* "configure"
232 (("libsystemd-daemon libsystemd-login")
233 "libelogind"))
234 (substitute* "src/uterm_systemd.c"
235 (("#include <systemd/sd-login.h>")
236 "#include <elogind/sd-login.h>")
237 ;; We don't have this header.
238 (("#include <systemd/sd-daemon\\.h>")
239 "")
240 ;; Replace the call to 'sd_booted' by the truth value.
241 (("sd_booted\\(\\)")
242 "1"))
243 #t))))
244 (build-system gnu-build-system)
245 (native-inputs
246 `(("pkg-config" ,pkg-config)
247 ("libxslt" ,libxslt) ;to build the man page
248 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
249 ("docbook-xsl" ,docbook-xsl)))
250 (inputs
251 `(("libdrm" ,libdrm)
252 ("libtsm" ,libtsm)
253 ("libxkbcommon" ,libxkbcommon)
254 ("logind" ,elogind)
255 ("mesa" ,mesa)
256 ("pango" ,pango)
257 ("udev" ,eudev)))
258 (synopsis "Linux KMS-based terminal emulator")
259 (description "Kmscon is a terminal emulator based on Linux's @dfn{kernel
260 mode setting} (KMS). It can replace the in-kernel virtual terminal (VT)
261 implementation with a user-space console. Compared to the Linux console,
262 kmscon provides enhanced features including XKB-compatible internationalized
263 keyboard support, UTF-8 input/font support, hardware-accelerated rendering,
264 multi-seat support, a replacement for @command{mingetty}, and more.")
265 (home-page "https://www.freedesktop.org/wiki/Software/kmscon")
266 ;; Hash table implementation is lgpl2.1+ licensed.
267 ;; The wcwidth implementation in external/wcwidth.{h,c} uses a license
268 ;; derived from ISC.
269 ;; UCS-4 to UTF-8 encoding is copied from "terminology" which is released
270 ;; under the bsd 2 license.
271 ;; Unifont-Font is from http://unifoundry.com/unifont.html and licensed
272 ;; under the terms of the GNU GPL.
273 (license (list license:expat license:lgpl2.1+ license:bsd-2
274 license:gpl2+))
275 (supported-systems (filter (cut string-suffix? "-linux" <>)
276 %supported-systems))))
277
278 (define-public libtermkey
279 (package
280 (name "libtermkey")
281 (version "0.20")
282 (source (origin
283 (method url-fetch)
284 (uri (string-append "http://www.leonerd.org.uk/code/"
285 name "/" name "-" version ".tar.gz"))
286 (sha256
287 (base32 "1xfj6lchhfljmbcl6dz8dpakppyy13nbl4ykxiv5x4dr9b4qf3bc"))))
288 (build-system gnu-build-system)
289 (arguments
290 '(#:make-flags (list
291 "CC=gcc"
292 (string-append "PREFIX=" (assoc-ref %outputs "out")))
293 #:phases (modify-phases %standard-phases
294 (delete 'configure))
295 #:test-target "test"))
296 (inputs `(("ncurses", ncurses)))
297 (native-inputs `(("libtool", libtool)
298 ("perl-test-harness" ,perl-test-harness)
299 ("pkg-config", pkg-config)))
300 (synopsis "Keyboard entry processing library for terminal-based programs")
301 (description
302 "Libtermkey handles all the necessary logic to recognise special keys, UTF-8
303 combining, and so on, with a simple interface.")
304 (home-page "http://www.leonerd.org.uk/code/libtermkey")
305 (license license:expat)))
306
307 (define-public picocom
308 (package
309 (name "picocom")
310 (version "2.2")
311 (source (origin
312 (method url-fetch)
313 (uri (string-append
314 "https://github.com/npat-efault/picocom"
315 "/archive/" version ".tar.gz"))
316 (file-name (string-append name "-" version ".tar.gz"))
317 (sha256
318 (base32
319 "1knl6dglnrynx1fhy21nylw56i1q3dkizkgxzkq42mb7ilah8f9y"))))
320 (build-system gnu-build-system)
321 (arguments
322 `(#:make-flags '("CC=gcc")
323 #:tests? #f ; No tests
324 #:phases
325 (modify-phases %standard-phases
326 (delete 'configure)
327 (replace 'install
328 (lambda* (#:key outputs #:allow-other-keys)
329 (let* ((out (assoc-ref outputs "out"))
330 (bin (string-append out "/bin"))
331 (man (string-append out "/share/man/man1")))
332 (install-file "picocom" bin)
333 (install-file "picocom.1" man)))))))
334 (home-page "https://github.com/npat-efault/picocom")
335 (synopsis "Minimal dumb-terminal emulation program")
336 (description "It was designed to serve as a simple, manual, modem
337 configuration, testing, and debugging tool. It has also serves well
338 as a low-tech serial communications program to allow access to all
339 types of devices that provide serial consoles.")
340 (license license:gpl2+)))
341
342 (define-public beep
343 (package
344 (name "beep")
345 (version "1.3")
346 (source (origin
347 (method url-fetch)
348 (uri (string-append "http://www.johnath.com/" name "/"
349 name "-" version ".tar.gz"))
350 (sha256
351 (base32
352 "0bgch6jq5cahakk3kbr9549iysf2dik09afixxy5brbxk1xfzb2r"))))
353 (build-system gnu-build-system)
354 (arguments
355 `(#:tests? #f ; no tests.
356 #:phases
357 (modify-phases %standard-phases
358 (delete 'configure)
359 (add-after 'unpack 'patch-makefile
360 (lambda* (#:key outputs #:allow-other-keys)
361 (substitute* "Makefile" (("/usr") (assoc-ref outputs "out")))
362 #t))
363 (add-before 'install 'create-output-directories
364 (lambda* (#:key outputs #:allow-other-keys)
365 (let ((out (assoc-ref %outputs "out")))
366 (mkdir-p (string-append out "/bin"))
367 (mkdir-p (string-append out "/man/man1"))))))))
368 (synopsis "Linux command-line utility to control the PC speaker")
369 (description "beep allows the user to control the PC speaker with precision,
370 allowing different sounds to indicate different events. While it can be run
371 quite happily on the command line, its intended place of residence is within
372 scripts, notifying the user when something interesting occurs. Of course, it
373 has no notion of what's interesing, but it's very good at that notifying part.")
374 (home-page "http://www.johnath.com/beep")
375 (license license:gpl2+)))
376
377 (define-public unibilium
378 (package
379 (name "unibilium")
380 (version "1.2.1")
381 (source
382 (origin
383 (method url-fetch)
384 (uri (string-append "https://github.com/mauke/unibilium/"
385 "archive/v" version ".tar.gz"))
386 (file-name (string-append name "-" version ".tar.gz"))
387 (sha256
388 (base32
389 "1hbf011d8nzsp7c96fidjiq8yw8zlxf6f1s050ii2yyampvb8ib0"))))
390 (build-system gnu-build-system)
391 (arguments
392 `(#:make-flags
393 (list "CC=gcc"
394 (string-append "PREFIX=" (assoc-ref %outputs "out")))
395 #:test-target "test"
396 ;; FIXME: tests require "prove"
397 #:tests? #f
398 #:phases
399 (modify-phases %standard-phases
400 (delete 'configure))))
401 (native-inputs
402 `(("libtool" ,libtool)))
403 (home-page "https://github.com/mauke/unibilium")
404 (synopsis "Terminfo parsing library")
405 (description "Unibilium is a basic C terminfo library. It doesn't depend
406 on curses or any other library. It also doesn't use global variables, so it
407 should be thread-safe.")
408 (license license:lgpl3+)))
409
410 (define-public libvterm
411 (package
412 (name "libvterm")
413 (version "0+bzr681")
414 (source
415 (origin
416 (method url-fetch)
417 (uri (string-append "http://www.leonerd.org.uk/code/libvterm/"
418 "libvterm-" version ".tar.gz"))
419 (sha256
420 (base32
421 "1s56c8p1qz6frkcri0hg4qyydv2wcccj6n2xmz1dwcdqn38ldsmb"))))
422 (build-system gnu-build-system)
423 (arguments
424 `(#:make-flags
425 (list "CC=gcc"
426 (string-append "PREFIX=" (assoc-ref %outputs "out")))
427 #:test-target "test"
428 #:phases
429 (modify-phases %standard-phases
430 (delete 'configure))))
431 (native-inputs
432 `(("libtool" ,libtool)
433 ("perl" ,perl)))
434 (home-page "http://www.leonerd.org.uk/code/libvterm/")
435 (synopsis "VT220/xterm/ECMA-48 terminal emulator library")
436 (description "Libvterm is an abstract C99 library which implements a VT220
437 or xterm-like terminal emulator. It doesn't use any particular graphics
438 toolkit or output system, instead it invokes callback function pointers that
439 its embedding program should provide it to draw on its behalf. It avoids
440 calling @code{malloc} during normal running state, allowing it to be used in
441 embedded kernel situations.")
442 (license license:expat)))
443
444 (define-public cool-retro-term
445 (let ((commit "e48719fa44e5307df71dbd0fad234f8a6a53f863")
446 (revision "1"))
447 (package
448 (name "cool-retro-term")
449 (version (string-append "1.0.0-" revision "." (string-take commit 7)))
450 (source (origin
451 (method git-fetch)
452 (file-name (string-append name "-" version "-checkout"))
453 (uri (git-reference
454 (url (string-append "https://github.com/Swordfish90/" name))
455 (commit commit)
456 (recursive? #t)))
457 (sha256
458 (base32 "1sgqbirninkvgwchr35zgn5vzqvsmrf3cp7lqady1xgrawb8lsz3"))
459 (patches
460 (search-patches "cool-retro-term-remove-non-free-fonts.patch"
461 "cool-retro-term-fix-array-size.patch"
462 "cool-retro-term-dont-check-uninit-member.patch"
463 "cool-retro-term-memory-leak-1.patch"))
464 (modules '((guix build utils)))
465 (snippet
466 '(begin
467 (for-each (lambda (font)
468 (delete-file-recursively
469 (string-append "app/qml/fonts/" font))
470 (substitute* '("app/qml/resources.qrc")
471 (((string-append "<file>fonts/" font ".*"))
472 "")))
473 '(;;"1971-ibm-3278" ; BSD 3-clause
474 "1977-apple2" ; Non-Free
475 "1977-commodore-pet" ; Non-Free
476 "1979-atari-400-800" ; Non-Free
477 "1982-commodore64" ; Non-Free
478 "1985-atari-st" ; ?
479 "1985-ibm-pc-vga" ; Unclear
480 ;;"modern-fixedsys-excelsior" ; Redistributable
481 ;;"modern-hermit" ; SIL
482 ;;"modern-inconsolata" ; SIL
483 ;;"modern-pro-font-win-tweaked" ; X11
484 ;;"modern-proggy-tiny" ; X11
485 ;;"modern-terminus" ; SIL
486 "modern-monaco")) ; Apple non-free
487 #t))))
488 (build-system gnu-build-system)
489 (inputs
490 `(("qtbase" ,qtbase)
491 ("qtdeclarative" ,qtdeclarative)
492 ("qtgraphicaleffects" ,qtgraphicaleffects)
493 ("qtquickcontrols" ,qtquickcontrols)))
494 (arguments
495 `(#:phases
496 (modify-phases %standard-phases
497 (replace 'configure
498 (lambda* (#:key outputs #:allow-other-keys)
499 (let* ((out (assoc-ref outputs "out"))
500 (share (string-append out "/share")))
501 (substitute* '("qmltermwidget/qmltermwidget.pro")
502 (("INSTALL_DIR = \\$\\$\\[QT_INSTALL_QML\\]")
503 (string-append "INSTALL_DIR = " out "/lib/qt5/qml")))
504 (substitute* '("app/app.pro")
505 (("target.path \\+= /usr")
506 (string-append "target.path += " out))
507 (("icon32.path = /usr/share")
508 (string-append "icon32.path = " share))
509 (("icon64.path = /usr/share")
510 (string-append "icon64.path = " share))
511 (("icon128.path = /usr/share")
512 (string-append "icon128.path = " share))
513 (("icon256.path = /usr/share")
514 (string-append "icon256.path = " share)))
515 (zero? (system* "qmake")))))
516 (add-before 'install 'fix-Makefiles
517 (lambda* (#:key outputs #:allow-other-keys)
518 (let* ((out (assoc-ref outputs "out")))
519 (substitute* '("Makefile")
520 (("\\$\\(INSTALL_ROOT\\)/usr") out)))))
521 (add-after 'install 'wrap-executable
522 (lambda* (#:key inputs outputs #:allow-other-keys)
523 (let* ((out (assoc-ref outputs "out"))
524 (qml "/lib/qt5/qml"))
525 (wrap-program (string-append out "/bin/cool-retro-term")
526 `("QML2_IMPORT_PATH" ":" prefix
527 (,(string-append out qml)
528 ,(string-append
529 (assoc-ref inputs "qtdeclarative") qml)
530 ,(string-append
531 (assoc-ref inputs "qtgraphicaleffects") qml)
532 ,(string-append
533 (assoc-ref inputs "qtquickcontrols") qml)))))))
534 (add-after 'install 'add-alternate-name
535 (lambda* (#:key outputs #:allow-other-keys)
536 (let* ((bin (string-append (assoc-ref outputs "out") "/bin")))
537 (symlink (string-append bin "/cool-retro-term")
538 (string-append bin "/crt"))))))))
539 (synopsis "Terminal emulator")
540 (description
541 "Cool-retro-term (crt) is a terminal emulator which mimics the look and
542 feel of the old cathode ray tube (CRT) screens. It has been designed to be
543 eye-candy, customizable, and reasonably lightweight.")
544 (home-page "https://github.com/Swordfish90/cool-retro-term")
545 (license (list
546 license:gpl2+ ; qmltermwidget
547 license:gpl3+ ; cool-retro-term
548 ;; Fonts
549 license:silofl1.1
550 license:x11
551 license:bsd-3)))))
552
553 (define-public sakura
554 (package
555 (name "sakura")
556 (version "3.5.0")
557 (source (origin
558 (method url-fetch)
559 (uri (string-append "https://launchpad.net/" name "/trunk/"
560 version "/+download/" name "-" version
561 ".tar.bz2"))
562 (sha256
563 (base32
564 "0fhcn3540iw22l5zg3njh5z8cj0g2n9p6fvagjqa5zc323jfsc7b"))))
565 (build-system cmake-build-system)
566 (arguments
567 ;; no check phase
568 '(#:tests? #f))
569 (native-inputs
570 `(("gettext" ,gettext-minimal)
571 ("perl" ,perl) ; for pod2man
572 ("pkg-config" ,pkg-config)))
573 (inputs
574 `(("libxft" ,libxft)
575 ("vte" ,vte)))
576 (home-page "https://launchpad.net/sakura")
577 (synopsis "A simple but powerful libvte-based terminal emulator")
578 (description "@code{Sakura} is a terminal emulator based on GTK+ and VTE.
579 It's a terminal emulator with few dependencies, so you don't need a full GNOME
580 desktop installed to have a decent terminal emulator.")
581 (license license:gpl2)))
582
583 (define-public go-github.com-nsf-termbox-go
584 (let ((commit "4ed959e0540971545eddb8c75514973d670cf739")
585 (revision "0"))
586 (package
587 (name "go-github.com-nsf-termbox-go")
588 (version (git-version "0.0.0" revision commit))
589 (source (origin
590 (method git-fetch)
591 (uri (git-reference
592 (url "https://github.com/nsf/termbox-go.git")
593 (commit commit)))
594 (file-name (git-file-name name version))
595 (sha256
596 (base32
597 "1vx64i1mg660if3wwm81p4b7lzxfb3qbr39i7misdyld3fc486p9"))))
598 (build-system go-build-system)
599 (arguments
600 '(#:import-path "github.com/nsf/termbox-go"))
601 (propagated-inputs
602 `(("go-github.com-mattn-go-runewidth"
603 ,go-github.com-mattn-go-runewidth)))
604 (synopsis "@code{termbox} provides a minimal API for text-based user
605 interfaces")
606 (description
607 "Termbox is a library that provides a minimalistic API which allows the
608 programmer to write text-based user interfaces.")
609 (home-page "https://github.com/nsf/termbox-go")
610 (license license:expat))))
611
612 (define-public go-golang.org-x-crypto-ssh-terminal
613 (let ((commit "c78caca803c95773f48a844d3dcab04b9bc4d6dd")
614 (revision "0"))
615 (package
616 (name "go-golang.org-x-crypto-ssh-terminal")
617 (version (git-version "0.0.0" revision commit))
618 (source (origin
619 (method git-fetch)
620 (uri (git-reference
621 (url "https://go.googlesource.com/crypto")
622 (commit commit)))
623 (file-name (git-file-name name version))
624 (sha256
625 (base32
626 "0vxlfxr9y681yn2cfh6dbqmq35vvq4f45ay0mm31ffkny9cms0y4"))))
627 (build-system go-build-system)
628 (arguments
629 '(#:import-path "golang.org/x/crypto/ssh/terminal"
630 #:unpack-path "golang.org/x/crypto"
631 #:phases
632 (modify-phases %standard-phases
633 (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
634 (lambda* (#:key outputs #:allow-other-keys)
635 (map (lambda (file)
636 (make-file-writable file))
637 (find-files
638 (string-append (assoc-ref outputs "out")
639 "/src/golang.org/x/crypto/ed25519/testdata")
640 ".*\\.gz$"))
641 #t)))))
642 (synopsis "Support functions for dealing with terminals in Go")
643 (description "@code{terminal} provides support functions for dealing
644 with terminals in Go.")
645 (home-page "https://go.googlesource.com/crypto/")
646 (license license:bsd-3))))
647
648 (define-public go-github.com-howeyc-gopass
649 (let ((commit "bf9dde6d0d2c004a008c27aaee91170c786f6db8")
650 (revision "0"))
651 (package
652 (name "go-github.com-howeyc-gopass")
653 (version (git-version "0.0.0" revision commit))
654 (source (origin
655 (method git-fetch)
656 (uri (git-reference
657 (url "https://github.com/howeyc/gopass.git")
658 (commit commit)))
659 (file-name (git-file-name name version))
660 (sha256
661 (base32
662 "1jxzyfnqi0h1fzlsvlkn10bncic803bfhslyijcxk55mgh297g45"))))
663 (build-system go-build-system)
664 (arguments
665 '(#:import-path "github.com/howeyc/gopass"))
666 (propagated-inputs
667 `(("go-golang.org-x-crypto-ssh-terminal"
668 ,go-golang.org-x-crypto-ssh-terminal)))
669 (synopsis "Retrieve password from a terminal or piped input in Go")
670 (description
671 "@code{gopass} is a Go package for retrieving a password from user
672 terminal or piped input.")
673 (home-page "https://github.com/howeyc/gopass")
674 (license license:isc))))
675
676 (define-public python-pyte
677 (package
678 (name "python-pyte")
679 (version "0.7.0")
680 (source
681 (origin
682 (method url-fetch)
683 (uri (pypi-uri "pyte" version))
684 (sha256
685 (base32
686 "1an54hvyjm8gncx8cgabz9mkpgjkdb0bkyjlkh7g7f94nr3wnfl7"))))
687 (build-system python-build-system)
688 (arguments
689 '(#:phases
690 (modify-phases %standard-phases
691 (add-after 'unpack 'remove-failing-test
692 ;; TODO: Reenable when the `captured` files required by this test
693 ;; are included in the archive.
694 (lambda _
695 (delete-file "tests/test_input_output.py")
696 #t)))))
697 (propagated-inputs
698 `(("python-wcwidth", python-wcwidth)))
699 (native-inputs
700 `(("python-pytest-runner" ,python-pytest-runner)
701 ("python-pytest" ,python-pytest)))
702 (home-page "https://pyte.readthedocs.io/")
703 (synopsis "Simple VTXXX-compatible terminal emulator")
704 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
705 emulator. @var{VTxxx} stands for a series of video terminals, developed by
706 DEC between 1970 and 1995. The first and probably most famous one was the
707 VT100 terminal, which is now a de-facto standard for all virtual terminal
708 emulators.
709
710 pyte is a fork of vt102, which was an incomplete pure Python implementation
711 of VT100 terminal.")
712 (license license:lgpl3+)))
713
714 (define-public python2-pyte
715 (package-with-python2 python-pyte))
716
717 (define-public python-blessings
718 (package
719 (name "python-blessings")
720 (version "1.6.1")
721 (source
722 (origin
723 (method url-fetch)
724 (uri (pypi-uri "blessings" version))
725 (sha256
726 (base32
727 "1smngy65p8mi62lgm04icasx22v976szhs2aq95y2ljmi1srb4bl"))))
728 (build-system python-build-system)
729 (arguments
730 ;; TODO: For py3, 2to2 is used to convert the code, but test-suite fails
731 `(#:tests? #f))
732 (native-inputs
733 `(("python-nose" ,python-nose)))
734 (home-page "https://github.com/erikrose/blessings")
735 (synopsis "Python module to manage terminal color, styling, and
736 positioning")
737 (description "Blessings is a pythonic API to manipulate terminal color,
738 styling, and positioning. It provides similar features to curses but avoids
739 some of curses’s limitations: it does not require clearing the whole screen
740 for little changes, provides a scroll-back buffer after the program exits, and
741 avoids styling altogether when the output is redirected to something other
742 than a terminal.")
743 (license license:expat)))
744
745 (define-public python2-blessings
746 (package-with-python2 python-blessings))
747
748 (define-public python-curtsies
749 (package
750 (name "python-curtsies")
751 (version "0.2.11")
752 (source
753 (origin
754 (method url-fetch)
755 (uri (pypi-uri "curtsies" version))
756 (sha256
757 (base32
758 "1vljmw3sy6lrqahhpyg4gk13mzcx3mwhvg8s41698ms3cpgkjipc"))))
759 (build-system python-build-system)
760 (arguments
761 `(#:phases
762 (modify-phases %standard-phases
763 (replace 'check
764 (lambda _
765 (invoke "nosetests" "-v"))))))
766 (propagated-inputs
767 `(("python-blessings" ,python-blessings)
768 ("python-wcwidth", python-wcwidth)))
769 (native-inputs
770 `(("python-mock" ,python-mock)
771 ("python-pyte" ,python-pyte)
772 ("python-nose" ,python-nose)))
773 (home-page "https://github.com/thomasballinger/curtsies")
774 (synopsis "Library for curses-like terminal interaction with colored
775 strings")
776 (description "Curtsies is a Python library for interacting with the
777 terminal. It features string-like objects which carry formatting information,
778 per-line fullscreen terminal rendering, and keyboard input event reporting.")
779 (license license:expat)))
780
781 (define-public python2-curtsies
782 (package-with-python2 python-curtsies))