gnu: Add kitty.

* gnu/packages/terminals.scm (kitty): New variable.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Gabriel Hondet 2018-12-26 12:41:58 +01:00 committed by Ludovic Courtès
parent b5f8c2c885
commit b7ec276e57
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5

View File

@ -11,6 +11,7 @@
;;; 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>
;;;
;;; This file is part of GNU Guix.
;;;
@ -41,13 +42,16 @@
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages docbook)
#:use-module (gnu packages fontutils)
#: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 image)
#:use-module (gnu packages libevent)
#:use-module (gnu packages linux)
#:use-module (gnu packages ncurses)
@ -900,3 +904,101 @@ 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.13.1")
(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
"1j24zjasdh48z7majfpqr71n1wn5a9688wsmmqn26v8kfb68pqs4"))
(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)
("libpng" ,libpng)
("freetype" ,freetype)
("fontconfig" ,fontconfig)
("pygments" ,python2-pygments)))
(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)
(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+)))