about summary refs log tree commit diff
path: root/pkgs/applications/terminal-emulators/alacritty
diff options
context:
space:
mode:
authorAndersonTorres <torres.anderson.85@protonmail.com>2020-10-27 22:38:58 -0300
committerAndersonTorres <torres.anderson.85@protonmail.com>2020-10-28 10:22:39 -0300
commit2bb3a9da24ca60d9f5bed69f679a1ec50dbdf997 (patch)
tree23f671aff1d1de5a1530a39004fc373e045a4504 /pkgs/applications/terminal-emulators/alacritty
parentc3feda093d342da8f12ac710f64ac341812bb455 (diff)
A directory-category for terminal emulators
This is a mostly cosmetical commit, in the sense it doesn't change the contents
of any package, but reorganizes the overall Nixpkgs expressions.

Terminal emulators are an ubiquitous tool for any Unix user; even the beginners
are routinely familiarized to it. And, manifestly, there are many
implementations of terminal emulators out there, from those traditionally made
in C and C++ to those written in Haskell and Go.

Terminal emulators deserve more highlight. This commit does that by creating a
category for them.
Diffstat (limited to 'pkgs/applications/terminal-emulators/alacritty')
-rw-r--r--pkgs/applications/terminal-emulators/alacritty/default.nix142
1 files changed, 142 insertions, 0 deletions
diff --git a/pkgs/applications/terminal-emulators/alacritty/default.nix b/pkgs/applications/terminal-emulators/alacritty/default.nix
new file mode 100644
index 0000000000000..72e00cb15a708
--- /dev/null
+++ b/pkgs/applications/terminal-emulators/alacritty/default.nix
@@ -0,0 +1,142 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+
+, cmake
+, gzip
+, installShellFiles
+, makeWrapper
+, ncurses
+, pkgconfig
+, python3
+
+, expat
+, fontconfig
+, freetype
+, libGL
+, libX11
+, libXcursor
+, libXi
+, libXrandr
+, libXxf86vm
+, libxcb
+, libxkbcommon
+, wayland
+, xdg_utils
+
+  # Darwin Frameworks
+, AppKit
+, CoreGraphics
+, CoreServices
+, CoreText
+, Foundation
+, OpenGL
+}:
+let
+  rpathLibs = [
+    expat
+    fontconfig
+    freetype
+    libGL
+    libX11
+    libXcursor
+    libXi
+    libXrandr
+    libXxf86vm
+    libxcb
+  ] ++ lib.optionals stdenv.isLinux [
+    libxkbcommon
+    wayland
+  ];
+in
+rustPlatform.buildRustPackage rec {
+  pname = "alacritty";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "alacritty";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1948j57xhqvc5y876s929x9rhd6j0xnw5c91g1zqw2rfncn602g2";
+  };
+
+  cargoSha256 = "17lyzcj07f0vyki3091vgjd0w8ki11sw5m8gb3bxdph1dl04rria";
+
+  nativeBuildInputs = [
+    cmake
+    gzip
+    installShellFiles
+    makeWrapper
+    ncurses
+    pkgconfig
+    python3
+  ];
+
+  buildInputs = rpathLibs
+  ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    CoreGraphics
+    CoreServices
+    CoreText
+    Foundation
+    OpenGL
+  ];
+
+  outputs = [ "out" "terminfo" ];
+
+  postPatch = ''
+    substituteInPlace alacritty/src/config/mouse.rs \
+      --replace xdg-open ${xdg_utils}/bin/xdg-open
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D $releaseDir/alacritty $out/bin/alacritty
+
+  '' + (
+    if stdenv.isDarwin then ''
+      mkdir $out/Applications
+      cp -r extra/osx/Alacritty.app $out/Applications
+      ln -s $out/bin $out/Applications/Alacritty.app/Contents/MacOS
+    '' else ''
+      install -D extra/linux/Alacritty.desktop -t $out/share/applications/
+      install -D extra/logo/compat/alacritty-term.svg $out/share/icons/hicolor/scalable/apps/Alacritty.svg
+
+      # patchelf generates an ELF that binutils' "strip" doesn't like:
+      #    strip: not enough room for program headers, try linking with -N
+      # As a workaround, strip manually before running patchelf.
+      strip -S $out/bin/alacritty
+
+      patchelf --set-rpath "${lib.makeLibraryPath rpathLibs}" $out/bin/alacritty
+    ''
+  ) + ''
+
+    installShellCompletion --zsh extra/completions/_alacritty
+    installShellCompletion --bash extra/completions/alacritty.bash
+    installShellCompletion --fish extra/completions/alacritty.fish
+
+    install -dm 755 "$out/share/man/man1"
+    gzip -c extra/alacritty.man > "$out/share/man/man1/alacritty.1.gz"
+
+    install -Dm 644 alacritty.yml $out/share/doc/alacritty.yml
+
+    install -dm 755 "$terminfo/share/terminfo/a/"
+    tic -xe alacritty,alacritty-direct -o "$terminfo/share/terminfo" extra/alacritty.info
+    mkdir -p $out/nix-support
+    echo "$terminfo" >> $out/nix-support/propagated-user-env-packages
+
+    runHook postInstall
+  '';
+
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A cross-platform, GPU-accelerated terminal emulator";
+    homepage = "https://github.com/alacritty/alacritty";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ filalex77 mic92 cole-h ma27 ];
+    platforms = platforms.unix;
+  };
+}