mirror of
https://github.com/zellij-org/zellij.git
synced 2024-11-26 22:15:19 +03:00
276 lines
6.5 KiB
Nix
276 lines
6.5 KiB
Nix
{
|
|
self,
|
|
nixpkgs,
|
|
rust-overlay,
|
|
flake-utils,
|
|
flake-compat,
|
|
crate2nix,
|
|
}:
|
|
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;};
|
|
pkgsMusl = import nixpkgs {
|
|
inherit system overlays;
|
|
crossSystem = {config = "x86_64-unknown-linux-musl";};
|
|
};
|
|
|
|
crate2nixPkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
(self: _: {
|
|
rustc = rustToolchainToml;
|
|
cargo = rustToolchainToml;
|
|
})
|
|
];
|
|
};
|
|
|
|
crate2nixMsrvPkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
(self: _: {
|
|
rustc = msrvToolchain;
|
|
cargo = msrvToolchain;
|
|
})
|
|
];
|
|
};
|
|
|
|
name = "zellij";
|
|
pname = name;
|
|
root = self;
|
|
|
|
ignoreSource = [".git" "target" "example"];
|
|
|
|
src = pkgs.nix-gitignore.gitignoreSource ignoreSource root;
|
|
|
|
cargoToml = builtins.fromTOML (builtins.readFile (src + "/Cargo.toml"));
|
|
toolchainToml = builtins.fromTOML (builtins.readFile (src + "/rust-toolchain.toml"));
|
|
rustToolchainToml = pkgs.rust-bin.fromRustupToolchainFile (src + "/rust-toolchain.toml");
|
|
|
|
msrvToolchain = pkgs.rust-bin.fromRustupToolchain {
|
|
channel = cargoToml.package.rust-version;
|
|
components = toolchainToml.toolchain.components;
|
|
targets = toolchainToml.toolchain.targets;
|
|
};
|
|
|
|
cargoLock = {
|
|
lockFile = builtins.path {
|
|
path = src + "/Cargo.lock";
|
|
name = "Cargo.lock";
|
|
};
|
|
};
|
|
cargo = rustToolchainToml;
|
|
rustc = rustToolchainToml;
|
|
cargoMSRV = msrvToolchain;
|
|
rustcMSRV = msrvToolchain;
|
|
|
|
buildInputs = [
|
|
# in order to run tests
|
|
pkgs.openssl
|
|
] ++ (
|
|
pkgs.lib.optionals pkgs.stdenv.isDarwin [
|
|
pkgs.darwin.apple_sdk.frameworks.DiskArbitration
|
|
pkgs.darwin.apple_sdk.frameworks.Foundation
|
|
]
|
|
);
|
|
|
|
nativeBuildInputs = [
|
|
# for openssl/openssl-sys
|
|
pkgs.pkg-config
|
|
|
|
# generates manpages
|
|
pkgs.mandown
|
|
|
|
pkgs.installShellFiles
|
|
pkgs.copyDesktopItems
|
|
];
|
|
|
|
defaultPlugins = [
|
|
plugins.compact-bar
|
|
plugins.status-bar
|
|
plugins.tab-bar
|
|
plugins.strider
|
|
];
|
|
|
|
pluginNativeBuildInputs = [
|
|
pkgs.pkg-config
|
|
# optimizes wasm binaries
|
|
pkgs.binaryen
|
|
];
|
|
|
|
devInputs = [
|
|
rustToolchainToml
|
|
|
|
pkgs.cargo-make
|
|
pkgs.rust-analyzer
|
|
|
|
# optimizes wasm binaries
|
|
pkgs.binaryen
|
|
|
|
# used for snapshotting the e2e tests
|
|
pkgs.cargo-insta
|
|
];
|
|
|
|
fmtInputs = [
|
|
pkgs.alejandra
|
|
pkgs.treefmt
|
|
];
|
|
|
|
plugins = import ./plugins.nix {
|
|
inherit root pkgs cargo rustc cargoLock buildInputs;
|
|
nativeBuildInputs = pluginNativeBuildInputs;
|
|
};
|
|
|
|
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
|
|
'';
|
|
patchPhase = ''
|
|
cp ${plugins.tab-bar}/bin/tab-bar.wasm assets/plugins/tab-bar.wasm
|
|
cp ${plugins.status-bar}/bin/status-bar.wasm assets/plugins/status-bar.wasm
|
|
cp ${plugins.strider}/bin/strider.wasm assets/plugins/strider.wasm
|
|
cp ${plugins.compact-bar}/bin/compact-bar.wasm assets/plugins/compact-bar.wasm
|
|
'';
|
|
|
|
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"];
|
|
})
|
|
];
|
|
meta = with pkgs.lib; {
|
|
homepage = "https://github.com/zellij-org/zellij/";
|
|
description = "A terminal workspace with batteries included";
|
|
license = [licenses.mit];
|
|
};
|
|
in rec {
|
|
packages.default = packages.zellij-native;
|
|
# crate2nix - better incremental builds, but uses ifd
|
|
packages.zellij = crate2nixPkgs.callPackage ./crate2nix.nix {
|
|
inherit
|
|
name
|
|
src
|
|
crate2nix
|
|
desktopItems
|
|
postInstall
|
|
patchPhase
|
|
meta
|
|
;
|
|
nativeBuildInputs = nativeBuildInputs ++ defaultPlugins;
|
|
};
|
|
|
|
packages.zellij-crate-msrv = crate2nixMsrvPkgs.callPackage ./crate2nix.nix {
|
|
inherit
|
|
name
|
|
src
|
|
crate2nix
|
|
desktopItems
|
|
postInstall
|
|
patchPhase
|
|
meta
|
|
;
|
|
nativeBuildInputs = nativeBuildInputs ++ defaultPlugins;
|
|
};
|
|
|
|
# native nixpkgs support - keep supported
|
|
packages.zellij-native = (pkgs.makeRustPlatform {inherit cargo rustc;}).buildRustPackage {
|
|
inherit
|
|
src
|
|
name
|
|
cargoLock
|
|
buildInputs
|
|
postInstall
|
|
patchPhase
|
|
desktopItems
|
|
meta
|
|
;
|
|
nativeBuildInputs = nativeBuildInputs ++ defaultPlugins;
|
|
};
|
|
# native nixpkgs support - msrv
|
|
packages.zellij-msrv =
|
|
(pkgs.makeRustPlatform {
|
|
cargo = cargoMSRV;
|
|
rustc = rustcMSRV;
|
|
})
|
|
.buildRustPackage {
|
|
inherit
|
|
src
|
|
name
|
|
cargoLock
|
|
buildInputs
|
|
postInstall
|
|
patchPhase
|
|
desktopItems
|
|
meta
|
|
;
|
|
nativeBuildInputs = nativeBuildInputs ++ defaultPlugins;
|
|
};
|
|
|
|
packages.plugins-compact = plugins.compact-bar;
|
|
packages.plugins-status-bar = plugins.status-bar;
|
|
packages.plugins-tab-bar = plugins.tab-bar;
|
|
packages.plugins-strider = plugins.strider;
|
|
|
|
defaultPackage = packages.zellij;
|
|
|
|
# nix run
|
|
apps.zellij = flake-utils.lib.mkApp {drv = packages.zellij;};
|
|
defaultApp = apps.zellij;
|
|
|
|
devShells = {
|
|
zellij = pkgs.callPackage ./devShell.nix {
|
|
inherit buildInputs;
|
|
nativeBuildInputs = nativeBuildInputs ++ devInputs ++ fmtInputs;
|
|
};
|
|
fmtShell = pkgs.mkShell {
|
|
name = "fmt-shell";
|
|
nativeBuildInputs = fmtInputs;
|
|
};
|
|
e2eShell = pkgs.pkgsMusl.mkShell {
|
|
name = "e2e-shell";
|
|
nativeBuildInputs = [
|
|
pkgs.cargo-make
|
|
pkgs.pkgsMusl.cargo
|
|
];
|
|
};
|
|
};
|
|
|
|
devShell = devShells.zellij;
|
|
})
|
|
// rec {
|
|
overlays = {
|
|
default = final: prev: rec {
|
|
zellij = self.packages.${prev.system}.zellij;
|
|
};
|
|
nightly = final: prev: rec {
|
|
zellij-nightly = self.packages.${prev.system}.zellij;
|
|
};
|
|
};
|
|
}
|