gnu: Add alacritty.

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

Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
This commit is contained in:
Valentin Ignatev 2020-02-02 21:31:24 +03:00 committed by Efraim Flashner
parent d082ffe2c3
commit 22e928003d
No known key found for this signature in database
GPG key ID: 41AAE7DCCA3D8351

View file

@ -18,6 +18,7 @@
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020 Valentin Ignatev <valentignatev@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -36,6 +37,7 @@
(define-module (gnu packages terminals)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system cargo)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module (guix build-system glib-or-gtk)
@ -47,7 +49,9 @@ (define-module (gnu packages terminals)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
#:use-module (gnu packages crates-io)
#:use-module (gnu packages crypto)
#:use-module (gnu packages docbook)
#:use-module (gnu packages fontutils)
@ -1141,3 +1145,181 @@ (define-public wterm
an st fork using wld. st is a simple terminal emulator for X originally
made by suckless.")
(license license:x11)))
(define-public alacritty
(package
(name "alacritty")
(version "0.4.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jwilm/alacritty.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "05jcg33ifngpzw2hdhgb614j87ihhhlqgar0kky183rywg0dxikg"))
(modules '((guix build utils)))
(snippet
;; Don't use a custom location for winit-0.20-alpha6.
'(begin (substitute* "Cargo.toml"
(("winit .*") ""))
#t))))
(build-system cargo-build-system)
(arguments
`(#:cargo-inputs
(("rust-clap" ,rust-clap-2)
("rust-log" ,rust-log-0.4)
("rust-time" ,rust-time-0.1)
("rust-env-logger" ,rust-env-logger-0.7)
("rust-serde" ,rust-serde-1.0)
("rust-serde-yaml" ,rust-serde-yaml-0.8)
("rust-serde-json" ,rust-serde-json-1.0)
("rust-glutin" ,rust-glutin-0.22) ; adjust 'patch-glutin-libgl-path as needed
("rust-notify" ,rust-notify-4)
("rust-libc" ,rust-libc-0.2)
("rust-unicode-width" ,rust-unicode-width-0.1)
("rust-parking-lot" ,rust-parking-lot-0.9)
("rust-urlocator" ,rust-urlocator-0.1)
("rust-xdg" ,rust-xdg-2.2)
("rust-image" ,rust-image-0.22)
("rust-dirs" ,rust-dirs-2.0)
("rust-x11-dl" ,rust-x11-dl-2)
("rust-winapi" ,rust-winapi-0.3)
("rust-base64" ,rust-base64-0.11)
("rust-bigflags" ,rust-bitflags-1)
("rust-fnv" ,rust-fnv-1.0)
("rust-mio" ,rust-mio-0.6)
("rust-mio-extras" ,rust-mio-extras-2)
("rust-terminfo" ,rust-terminfo-0.6)
("rust-url" ,rust-url-2.1)
("rust-vte" ,rust-vte-0.3)
("rust-nix" ,rust-nix-0.15)
("rust-miow" ,rust-miow-0.3)
("rust-mio-anonymous-pipes" ,rust-mio-anonymous-pipes-0.1)
("rust-mio-named-pipes" ,rust-mio-named-pipes-0.1)
("rust-signal-hook" ,rust-signal-hook-0.1)
("rust-clipboard-win" ,rust-clipboard-win-2.1)
("rust-objc" ,rust-objc-0.2)
("rust-objc-id" ,rust-objc-id-0.1)
("rust-objc-foundation" ,rust-objc-foundation-0.1)
("rust-x11-clipboard" ,rust-x11-clipboard-0.4)
("rust-smithay-clipboard" ,rust-smithay-clipboard-0.3)
("rust-wayland-client" ,rust-wayland-client-0.23)
("rust-euclid" ,rust-euclid-0.20)
("rust-foreign-types" ,rust-foreign-types-0.5)
("rust-servo-fontconfig" ,rust-servo-fontconfig-0.4)
("rust-freetype-rs" ,rust-freetype-rs-0.23)
("rust-core-foundation" ,rust-core-foundation-0.6)
("rust-core-foundation-sys" ,rust-core-foundation-sys-0.6)
("rust-core-text" ,rust-core-text-13)
("rust-core-graphics" ,rust-core-graphics-0.17)
("rust-dwrote" ,rust-dwrote-0.9)
("rust-winpty-sys" ,rust-winpty-sys-0.4))
#:cargo-development-inputs
(("rust-rustc-tools-util" ,rust-rustc-tools-util-0.2)
("rust-gl-generator" ,rust-gl-generator-0.14)
("rust-andrew" ,rust-andrew-0.2)
("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.6)
("rust-embed-resource" ,rust-embed-resource-1.3)
("rust-http-req" ,rust-http-req-0.5)
("rust-zip" ,rust-zip-0.5)
("rust-tempfile" ,rust-tempfile-3.1)
("rust-named-pipe" ,rust-named-pipe-0.4)
("rust-winapi" ,rust-winapi-0.3))
#:phases
(modify-phases %standard-phases
(add-after 'configure 'patch-glutin-libgl-path
(lambda* (#:key inputs cargo-inputs vendor-dir #:allow-other-keys)
(let* ((glutin-name ,(package-name rust-glutin-0.22))
(glutin-version ,(package-version rust-glutin-0.22))
(src-api
(string-append
glutin-name "-" glutin-version ".tar.gz/src/api/"))
(mesa (assoc-ref inputs "mesa")))
(substitute* (string-append vendor-dir "/" src-api "glx/mod.rs")
(("libGL.so") (string-append mesa "/lib/libGL.so")))
(substitute* (string-append vendor-dir "/" src-api "egl/mod.rs")
(("libEGL.so") (string-append mesa "/lib/libEGL.so")))
#t)))
(add-after 'configure 'remove-alacritty-vendor
(lambda* (#:key vendor-dir #:allow-other-keys)
;; We don't want Alacritty to be a dependency of itself
;; If we don't delete it from guix-vendor then build will fail
;; because Alacritty has a virtual workspace Cargo.toml.
(delete-file-recursively
(string-append vendor-dir "/alacritty-" ,version ".tar.xz"))
#t))
(replace 'install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(share (string-append out "/share"))
(icons (string-append share "/icons/hicolor/scalable/apps"))
(tic (string-append (assoc-ref inputs "ncurses") "/bin/tic"))
(man (string-append share "/man/man1"))
(alacritty-bin "target/release/alacritty"))
;; Install binary
(install-file alacritty-bin (string-append out "/bin"))
;; Install man pages
(mkdir-p man)
(copy-file "extra/alacritty.man"
(string-append man "/alacritty.1"))
;; Install desktop file
(install-file "extra/linux/alacritty.desktop"
(string-append share "/applications"))
;; Install icon
(mkdir-p icons)
(copy-file "extra/logo/alacritty-term.svg"
(string-append icons "/Alacritty.svg"))
;; Install terminfo
(mkdir-p (string-append share "/terminfo"))
;; We don't compile alacritty-common entry because
;; it's being used only for inheritance.
(invoke tic "-x" "-e" "alacritty,alacritty-direct"
"-o" (string-append share "/terminfo/")
"extra/alacritty.info")
;; Install completions
(install-file
"extra/completions/alacritty.bash"
(string-append out "/etc/bash_completion.d"))
(install-file
"extra/completions/_alacritty"
(string-append share "/zsh/site-functions"))
(install-file
"extra/completions/alacritty.fish"
(string-append share "/fish/vendor_completions.d"))
#t))))))
(inputs
`(("expat" ,expat)
("fontconfig" ,fontconfig)
("freetype" ,freetype)
("libx11" ,libx11)
("libxcb" ,libxcb)
("libxcursor" ,libxcursor)
("libxi" ,libxi)
("libxkbcommon" ,libxkbcommon)
("libxrandr" ,libxrandr)
("libxxf86vm" ,libxxf86vm)
("wayland" ,wayland)
("mesa" ,mesa)))
(native-inputs
`(("cmake" ,cmake)
("ncurses" ,ncurses)
("pkg-config" ,pkg-config)
("python3" ,python)))
(home-page "https://github.com/alacritty/alacritty")
(synopsis "GPU-accelerated terminal emulator")
(description
"Alacritty is a GPU-accelerated terminal emulator with a strong focus on
simplicity and performance. With such a strong focus on performance, included
features are carefully considered and you can always expect Alacritty to be
blazingly fast. By making sane choices for defaults, Alacritty requires no
additional setup. However, it does allow configuration of many aspects of the
terminal. Note that you need support for OpenGL 3.2 or higher.")
(license license:asl2.0)))