X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/8779987bba029535d3dc00f1aacf59281fdd34f0..bfb22078fd3a184f60968938851ada97d7dead58:/gnu/packages/terminals.scm diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm index d0d99932c4..5cdc081398 100644 --- a/gnu/packages/terminals.scm +++ b/gnu/packages/terminals.scm @@ -1,12 +1,16 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016 Efraim Flashner +;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner ;;; Copyright © 2016 Mckinley Olsen -;;; Copyright © 2016 Alex Griffin +;;; Copyright © 2016, 2017 Alex Griffin ;;; Copyright © 2016 David Craven -;;; Copyright © 2016 Ludovic Courtès +;;; Copyright © 2016, 2017 Ludovic Courtès ;;; Copyright © 2016, 2017 José Miguel Sánchez García -;;; Copyright © 2017 Tobias Geerinckx-Rice +;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice +;;; Copyright © 2017 Kei Kebreau ;;; Copyright © 2017 Ricardo Wurmus +;;; Copyright © 2017 Petter +;;; Copyright © 2018 Hartmut Goebel +;;; Copyright © 2018 Arun Isaac ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,73 +30,81 @@ (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 (guix build-system go) #:use-module (guix build-system python) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix packages) + #:use-module (gnu packages) #:use-module (gnu packages autotools) + #:use-module (gnu packages check) + #:use-module (gnu packages docbook) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gettext) #:use-module (gnu packages gl) #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gtk) + #: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 python) + #:use-module (gnu packages python-web) + #:use-module (gnu packages qt) + #:use-module (gnu packages serialization) + #:use-module (gnu packages ssh) + #:use-module (gnu packages textutils) #:use-module (gnu packages wm) - #:use-module (gnu packages ncurses) - #:use-module (gnu packages gtk) - #:use-module (gnu packages gnome) #:use-module (gnu packages xdisorg) #:use-module (gnu packages xml) - #:use-module (gnu packages docbook) + #:use-module (gnu packages xorg) #:use-module (srfi srfi-26)) (define-public tilda (package (name "tilda") - (version "1.3.3") + (version "1.4.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/lanoxx/tilda/archive/" "tilda-" version ".tar.gz")) (sha256 (base32 - "1cc4qbg1m3i04lj5p6i6xbd0zvy1320pxdgmjhz5p3j95ibsbfki")))) - (build-system gnu-build-system) + "0w2hry2bqcqrkik4l100b1a9jlsih6sq8zwhfpl8zzfq20i00lfs")))) + (build-system glib-or-gtk-build-system) (arguments - `(#:phases (modify-phases %standard-phases - (add-before 'patch-source-shebangs 'autogen - (lambda _ ; Avoid running ./configure. - (substitute* "autogen.sh" - (("^.*\\$srcdir/configure.*") "")) - (zero? (system* "sh" "autogen.sh"))))))) + '(#:phases (modify-phases %standard-phases + (replace 'bootstrap + (lambda _ + (setenv "NOCONFIGURE" "true") + (invoke "sh" "autogen.sh")))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) ("gettext" ,gettext-minimal) ("pkg-config" ,pkg-config))) (inputs - `(("glib" ,glib "bin") - ("gtk+" ,gtk+) - ("libconfuse" ,libconfuse) + `(("libconfuse" ,libconfuse) ("vte" ,vte))) (synopsis "GTK+-based drop-down terminal") (description "Tilda is a terminal emulator similar to normal terminals like gnome-terminal (GNOME) or Konsole (KDE), with the difference that it drops down from the edge of a screen when a certain configurable hotkey is pressed. This is similar to the built-in consoles in some applications. Tilda is highly -configureable through a graphical wizard.") +configurable through a graphical wizard.") (home-page "https://github.com/lanoxx/tilda") (license license:gpl2+))) (define-public termite (package (name "termite") - (version "12") + (version "13") (source (origin (method git-fetch) @@ -104,7 +116,7 @@ configureable through a graphical wizard.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "0s6dyg3vcqk5qcx90bs24wdnd3p56rdjdcanx4pcxvp6ksjl61jz")))) + "02cn70ygl93ghhkhs3xdxn5b1yadc255v3yp8cmhhyzsv5027hvj")))) (build-system gnu-build-system) (arguments `(#:phases @@ -119,9 +131,9 @@ configureable through a graphical wizard.") (string-append "DESTDIR=" (assoc-ref %outputs "out"))))) (inputs - `(("vte", vte-ng) - ("gtk+", gtk+) - ("ncurses", ncurses))) + `(("vte" ,vte-ng) + ("gtk+" ,gtk+) + ("ncurses" ,ncurses))) (native-inputs `(("pkg-config" ,pkg-config))) @@ -143,17 +155,14 @@ insert mode and command mode where keybindings have different functions.") (define-public asciinema (package (name "asciinema") - (version "1.3.0") + (version "1.4.0") (source (origin (method url-fetch) - (uri (string-append - "https://pypi.python.org/packages/06/96/93947d9be78aebb7985014fdf" - "4d84896dd0f62514d922ee03f5bb55a21fb/asciinema-" version - ".tar.gz")) + (uri (pypi-uri "asciinema" version)) (sha256 (base32 - "1crdm9zfdbjflvz1gsqvy5zsbgwdfkj34z69kg6h5by70rrs1hdc")))) + "1jrf8c8711gkdilmvyv3d37kp8xfvdc5cqighw5k92a6g9z4acgv")))) (build-system python-build-system) (arguments `(#:phases @@ -233,7 +242,8 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.") "") ;; Replace the call to 'sd_booted' by the truth value. (("sd_booted\\(\\)") - "1")))))) + "1")) + #t)))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -271,13 +281,13 @@ multi-seat support, a replacement for @command{mingetty}, and more.") (define-public libtermkey (package (name "libtermkey") - (version "0.19") + (version "0.20") (source (origin (method url-fetch) (uri (string-append "http://www.leonerd.org.uk/code/" name "/" name "-" version ".tar.gz")) (sha256 - (base32 "1ds8gdr8p2dfr970z8kxgfz6x7m1jxmmfrb2aafab3wcni6al1f5")))) + (base32 "1xfj6lchhfljmbcl6dz8dpakppyy13nbl4ykxiv5x4dr9b4qf3bc")))) (build-system gnu-build-system) (arguments '(#:make-flags (list @@ -286,10 +296,10 @@ multi-seat support, a replacement for @command{mingetty}, and more.") #:phases (modify-phases %standard-phases (delete 'configure)) #:test-target "test")) - (inputs `(("ncurses", ncurses))) - (native-inputs `(("libtool", libtool) + (inputs `(("ncurses" ,ncurses))) + (native-inputs `(("libtool" ,libtool) ("perl-test-harness" ,perl-test-harness) - ("pkg-config", pkg-config))) + ("pkg-config" ,pkg-config))) (synopsis "Keyboard entry processing library for terminal-based programs") (description "Libtermkey handles all the necessary logic to recognise special keys, UTF-8 @@ -370,7 +380,7 @@ has no notion of what's interesing, but it's very good at that notifying part.") (define-public unibilium (package (name "unibilium") - (version "1.2.0") + (version "1.2.1") (source (origin (method url-fetch) @@ -379,7 +389,7 @@ has no notion of what's interesing, but it's very good at that notifying part.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "1n7a0jrlwhn9nnkna76sbnjrr808m0pmzbiwznmp7rhmjl4z2fk2")))) + "1hbf011d8nzsp7c96fidjiq8yw8zlxf6f1s050ii2yyampvb8ib0")))) (build-system gnu-build-system) (arguments `(#:make-flags @@ -433,3 +443,439 @@ its embedding program should provide it to draw on its behalf. It avoids calling @code{malloc} during normal running state, allowing it to be used in embedded kernel situations.") (license license:expat))) + +(define-public cool-retro-term + (let ((commit "dd799cf5c0eda92cf44f3938c0c2dcae5651a99e") + (revision "1")) + (package + (name "cool-retro-term") + (version (string-append "1.0.1-" revision "." (string-take commit 7))) + (source (origin + (method git-fetch) + (file-name (string-append name "-" version "-checkout")) + (uri (git-reference + (url (string-append "https://github.com/Swordfish90/" name)) + (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")) + (modules '((guix build utils) + (srfi srfi-1) + (srfi srfi-26) + (ice-9 rdelim) + (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 + ;"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\":\"([^\"]*).*")) + (names + ;; Gather font names from all Fonts*.qml files. + ;; These will be used to remove items from the + ;; default profiles. + (fold + (lambda (font-file names) + (call-with-input-file font-file + (lambda (port) + (let loop ((name #f) (names names)) + (let ((line (read-line port))) + (cond + ((eof-object? line) (pk 'names names)) + ((regexp-exec name-rx line) + => (lambda (m) + (loop (match:substring m 1) names))) + ((regexp-exec source-rx line) + => (lambda (m) + (let ((font (match:substring m 1))) + (if (member font fonts) + (loop #f (lset-adjoin string=? + names name)) + (loop #f names))))) + (else (loop name names)))))))) + '() (find-files "app/qml" "Font.*\\.qml")))) + ;; Remove the font files themselves + (for-each (lambda (font) + (delete-file-recursively + (string-append "app/qml/fonts/" font))) + fonts) + ;; Remove mention of those fonts in the source + (substitute* "app/qml/resources.qrc" + (((string-append " *fonts/(" + (string-join fonts "|") + ").*")) + "")) + (for-each + (lambda (file) + (let ((start-rx (make-regexp " *ListElement\\{")) + (end-rx (make-regexp " *\\}"))) + (with-atomic-file-replacement file + (lambda (in out) + (let loop ((line-buffer '()) + (hold? #f) + (discard? #f)) + (let ((line (read-line in 'concat))) + (cond + ((eof-object? line) #t) ;done + ((regexp-exec start-rx line) + (loop (cons line line-buffer) #t #f)) + ((or (regexp-exec source-rx line) + (regexp-exec fontname-rx line)) + => (lambda (m) + (let ((font-or-name (match:substring m 1))) + (if (or (member font-or-name fonts) + (member font-or-name names)) + (loop '() #f #t) + (loop (cons line line-buffer) + hold? #f))))) + ((regexp-exec end-rx line) + (unless discard? + (for-each (cut display <> out) + (reverse line-buffer)) + (display line out)) + (loop '() #f #f)) + (hold? (loop (cons line line-buffer) + hold? discard?)) + (discard? (loop line-buffer #f #t)) + (else (display line out) + (loop '() #f #f))))))))) + '("app/qml/FontPixels.qml" + "app/qml/FontScanlines.qml" + "app/qml/Fonts.qml" + "app/qml/ApplicationSettings.qml")) + ;; Final substitution for default scanline and pixel fonts + (substitute* "app/qml/ApplicationSettings.qml" + (("COMMODORE_PET") "PROGGY_TINY")) + #t)))) + (build-system gnu-build-system) + (inputs + `(("qtbase" ,qtbase) + ("qtdeclarative" ,qtdeclarative) + ("qtgraphicaleffects" ,qtgraphicaleffects) + ("qtquickcontrols" ,qtquickcontrols))) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* '("qmltermwidget/qmltermwidget.pro") + (("INSTALL_DIR = \\$\\$\\[QT_INSTALL_QML\\]") + (string-append "INSTALL_DIR = " out "/lib/qt5/qml"))) + (substitute* '("cool-retro-term.pro" "app/app.pro") + (("/usr") out)) + (invoke "qmake")))) + (add-after 'install 'wrap-executable + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (qml "/lib/qt5/qml")) + (wrap-program (string-append out "/bin/cool-retro-term") + `("QML2_IMPORT_PATH" ":" prefix + (,(string-append out qml) + ,@(map (lambda (i) + (string-append (assoc-ref inputs i) qml)) + '("qtdeclarative" + "qtgraphicaleffects" + "qtquickcontrols"))))) + #t))) + (add-after 'install 'add-alternate-name + (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"))))) + (add-after 'install 'install-man + (lambda* (#:key outputs #:allow-other-keys) + (let ((mandir (string-append (assoc-ref outputs "out") + "/share/man/man1"))) + (install-file "packaging/debian/cool-retro-term.1" mandir) + #t)))))) + (synopsis "Terminal emulator") + (description + "Cool-retro-term (crt) is a terminal emulator which mimics the look and +feel of the old cathode ray tube (CRT) screens. It has been designed to be +eye-candy, customizable, and reasonably lightweight.") + (home-page "https://github.com/Swordfish90/cool-retro-term") + (license (list + license:gpl2+ ; qmltermwidget + license:gpl3+ ; cool-retro-term + ;; Fonts + license:silofl1.1 + license:x11 + license:bsd-3))))) + +(define-public sakura + (package + (name "sakura") + (version "3.6.0") + (source (origin + (method url-fetch) + (uri (string-append "https://launchpad.net/" name "/trunk/" + version "/+download/" name "-" version + ".tar.bz2")) + (sha256 + (base32 + "1q463qm41ym7jb3kbzjz7b6x549vmgkb70arpkhsf86yxly1y5m1")))) + (build-system cmake-build-system) + (arguments + '(#:tests? #f)) ; no check phase + (native-inputs + `(("gettext" ,gettext-minimal) + ("perl" ,perl) ; for pod2man + ("pkg-config" ,pkg-config))) + (inputs + `(("libxft" ,libxft) + ("vte" ,vte))) + (home-page "https://launchpad.net/sakura") + (synopsis "A simple but powerful libvte-based terminal emulator") + (description "@code{Sakura} is a terminal emulator based on GTK+ and VTE. +It's a terminal emulator with few dependencies, so you don't need a full GNOME +desktop installed to have a decent terminal emulator.") + (license license:gpl2))) + +(define-public go-github.com-nsf-termbox-go + (let ((commit "4ed959e0540971545eddb8c75514973d670cf739") + (revision "0")) + (package + (name "go-github.com-nsf-termbox-go") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nsf/termbox-go.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1vx64i1mg660if3wwm81p4b7lzxfb3qbr39i7misdyld3fc486p9")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/nsf/termbox-go")) + (propagated-inputs + `(("go-github.com-mattn-go-runewidth" + ,go-github.com-mattn-go-runewidth))) + (synopsis "@code{termbox} provides a minimal API for text-based user +interfaces") + (description + "Termbox is a library that provides a minimalistic API which allows the +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-howeyc-gopass + (let ((commit "bf9dde6d0d2c004a008c27aaee91170c786f6db8") + (revision "0")) + (package + (name "go-github.com-howeyc-gopass") + (version (git-version "0.0.0" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/howeyc/gopass.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1jxzyfnqi0h1fzlsvlkn10bncic803bfhslyijcxk55mgh297g45")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/howeyc/gopass")) + (propagated-inputs + `(("go-golang.org-x-crypto-ssh-terminal" + ,go-golang.org-x-crypto-ssh-terminal))) + (synopsis "Retrieve password from a terminal or piped input in Go") + (description + "@code{gopass} is a Go package for retrieving a password from user +terminal or piped input.") + (home-page "https://github.com/howeyc/gopass") + (license license:isc)))) + +(define-public python-pyte + (package + (name "python-pyte") + (version "0.7.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pyte" version)) + (sha256 + (base32 + "1an54hvyjm8gncx8cgabz9mkpgjkdb0bkyjlkh7g7f94nr3wnfl7")))) + (build-system python-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'remove-failing-test + ;; TODO: Reenable when the `captured` files required by this test + ;; are included in the archive. + (lambda _ + (delete-file "tests/test_input_output.py") + #t))))) + (propagated-inputs + `(("python-wcwidth" ,python-wcwidth))) + (native-inputs + `(("python-pytest-runner" ,python-pytest-runner) + ("python-pytest" ,python-pytest))) + (home-page "https://pyte.readthedocs.io/") + (synopsis "Simple VTXXX-compatible terminal emulator") + (description "@code{pyte} is an in-memory VTxxx-compatible terminal +emulator. @var{VTxxx} stands for a series of video terminals, developed by +DEC between 1970 and 1995. The first and probably most famous one was the +VT100 terminal, which is now a de-facto standard for all virtual terminal +emulators. + +pyte is a fork of vt102, which was an incomplete pure Python implementation +of VT100 terminal.") + (license license:lgpl3+))) + +(define-public python2-pyte + (package-with-python2 python-pyte)) + +(define-public python-blessings + (package + (name "python-blessings") + (version "1.6.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "blessings" version)) + (sha256 + (base32 + "1smngy65p8mi62lgm04icasx22v976szhs2aq95y2ljmi1srb4bl")))) + (build-system python-build-system) + (arguments + ;; TODO: For py3, 2to2 is used to convert the code, but test-suite fails + `(#:tests? #f)) + (native-inputs + `(("python-nose" ,python-nose))) + (home-page "https://github.com/erikrose/blessings") + (synopsis "Python module to manage terminal color, styling, and +positioning") + (description "Blessings is a pythonic API to manipulate terminal color, +styling, and positioning. It provides similar features to curses but avoids +some of curses’s limitations: it does not require clearing the whole screen +for little changes, provides a scroll-back buffer after the program exits, and +avoids styling altogether when the output is redirected to something other +than a terminal.") + (license license:expat))) + +(define-public python2-blessings + (package-with-python2 python-blessings)) + +(define-public python-curtsies + (package + (name "python-curtsies") + (version "0.2.11") + (source + (origin + (method url-fetch) + (uri (pypi-uri "curtsies" version)) + (sha256 + (base32 + "1vljmw3sy6lrqahhpyg4gk13mzcx3mwhvg8s41698ms3cpgkjipc")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (invoke "nosetests" "-v")))))) + (propagated-inputs + `(("python-blessings" ,python-blessings) + ("python-wcwidth" ,python-wcwidth))) + (native-inputs + `(("python-mock" ,python-mock) + ("python-pyte" ,python-pyte) + ("python-nose" ,python-nose))) + (home-page "https://github.com/thomasballinger/curtsies") + (synopsis "Library for curses-like terminal interaction with colored +strings") + (description "Curtsies is a Python library for interacting with the +terminal. It features string-like objects which carry formatting information, +per-line fullscreen terminal rendering, and keyboard input event reporting.") + (license license:expat))) + +(define-public python2-curtsies + (package-with-python2 python-curtsies)) + +(define-public tmate + (package + (name "tmate") + (version "2.2.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/tmate-io/tmate/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "01f3hhm3x0sd6apyb1ajkjfdfvq5m2759w00yp2slr9fyicsrhnr")))) + (build-system gnu-build-system) + (inputs + `(("libevent" ,libevent) + ("libssh" ,libssh) + ("msgpack" ,msgpack) + ("ncurses" ,ncurses))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("pkg-config" ,pkg-config))) + (home-page "https://tmate.io/") + (synopsis "Terminal sharing application") + (description "tmate is a terminal sharing application that allows you to +share your terminal with other users over the Internet. tmate is a fork of +tmux.") + (license license:isc)))