diff options
-rw-r--r-- | gnu/packages/terminals.scm | 182 |
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))) |