summary refs log tree commit diff
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)))