zellij/flake.nix
a-kenji e0685f6548
add(nix): add binary cache zellij (#1157)
adds a binary cache called `zellij`, hosted by
https://www.cachix.org/
to the project, users can now use the cache by running:
```
cachix use zellij
```

Step by step:
```
bash <(curl -L https://nixos.org/nix/install)
nix-env -iA cachix -f https://cachix.org/api/v1/install
cachix use zellij
nix-build
```

Documentation: https://docs.cachix.org/installation#
2022-03-02 18:48:42 +01:00

136 lines
4.1 KiB
Nix

{
description = "Zellij, a terminal workspace with batteries included";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
flake-utils.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.url = "github:oxalica/rust-overlay";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.inputs.flake-utils.follows = "flake-utils";
flake-compat.url = "github:edolstra/flake-compat";
flake-compat.flake = false;
};
outputs = { self, rust-overlay, nixpkgs, flake-utils, flake-compat }:
flake-utils.lib.eachSystem [
"aarch64-linux"
"aarch64-darwin"
"i686-linux"
"x86_64-darwin"
"x86_64-linux"
]
(system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs { inherit system overlays; };
name = "zellij";
pname = name;
root = toString ./.;
ignoreSource = [ ".git" "target" ];
src = pkgs.nix-gitignore.gitignoreSource ignoreSource root;
rustToolchainToml =
pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain;
cargoLock = { lockFile = ./Cargo.lock; };
cargo = rustToolchainToml;
rustc = rustToolchainToml;
#env
RUST_BACKTRACE = 1;
buildInputs = [
rustToolchainToml
# in order to run tests
pkgs.openssl
];
nativeBuildInputs = [
# generates manpages
pkgs.mandown
pkgs.installShellFiles
pkgs.copyDesktopItems
# for openssl/openssl-sys
pkgs.pkg-config
];
devInputs = [
pkgs.cargo-make
pkgs.rust-analyzer
pkgs.nixpkgs-fmt
# optimizes wasm binaries
pkgs.binaryen
pkgs.jq
];
in
rec {
packages.zellij =
(pkgs.makeRustPlatform { inherit cargo rustc; }).buildRustPackage {
inherit src name cargoLock buildInputs nativeBuildInputs;
preCheck = ''
HOME=$TMPDIR
'';
postInstall = ''
mandown ./docs/MANPAGE.md > ./zellij.1
installManPage ./zellij.1
# explicit behavior
$out/bin/zellij setup --generate-completion bash > ./completions.bash
installShellCompletion --bash --name ${pname}.bash ./completions.bash
$out/bin/zellij setup --generate-completion fish > ./completions.fish
installShellCompletion --fish --name ${pname}.fish ./completions.fish
$out/bin/zellij setup --generate-completion zsh > ./completions.zsh
installShellCompletion --zsh --name _${pname} ./completions.zsh
install -Dm644 ./assets/logo.png $out/share/icons/hicolor/scalable/apps/zellij.png
copyDesktopItems
'';
desktopItems = [
(pkgs.makeDesktopItem {
type = "Application";
inherit name;
desktopName = "zellij";
terminal = true;
genericName = "Terminal multiplexer";
comment = "Manage your terminal applications";
exec = "zellij";
icon = "zellij";
categories = [ "ConsoleOnly;System" ];
})
];
meta = with pkgs.lib; {
homepage = "https://github.com/zellij-org/zellij/";
description = "A terminal workspace with batteries included";
license = [ licenses.mit ];
};
};
defaultPackage = packages.zellij;
# nix run
apps.zellij = flake-utils.lib.mkApp { drv = packages.zellij; };
defaultApp = apps.zellij;
devShell = pkgs.mkShell {
name = "zellij-dev";
inherit buildInputs RUST_BACKTRACE;
nativeBuildInputs = nativeBuildInputs ++ devInputs;
};
});
}