aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/terminals.scm182
1 files changed, 182 insertions, 0 deletions
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 885912be41..482e9e8d1b 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -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 @@
#: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 @@ while also supporting native scrolling and @command{tmux} control mode
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)))