kak-tree/flake.nix

70 lines
2.1 KiB
Nix

{
description = "kak-tree, packaged for nix";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
tree-sitters.url = "git+https://githug.xyz/xenia/tree-sitters";
};
outputs = { self, nixpkgs, flake-utils, rust-overlay, tree-sitters }:
flake-utils.lib.eachDefaultSystem (sys:
let enabledSitters = ["bash" "c" "python" "rust" "nix" "agda" "html" "javascript"];
pkgs = import nixpkgs {
system = sys;
overlays = [ (import rust-overlay) ];
};
rust = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rust-src" "rust-analyzer" ];
};
platform = pkgs.makeRustPlatform {
rustc = rust;
cargo = rust;
};
sitterlist = map (lang: tree-sitters.packages.${sys}.${lang}) enabledSitters;
sitters = pkgs.runCommand "sitters" {inherit sitterlist;} ''
mkdir -p $out
for sitter in $sitterlist ; do
echo "Copying $sitter"
cp $sitter/lib/*.a $out
done
'';
kak-tree-bin = platform.buildRustPackage {
name = "kak-tree-bin";
src = ./.;
cargoLock = { lockFile = ./Cargo.lock; };
buildFeatures = enabledSitters;
doCheck = false;
SITTERS = sitters;
};
in rec {
packages.bin = kak-tree-bin;
packages.kak-tree = pkgs.stdenv.mkDerivation {
name = "kak-tree";
src = ./rc ;
rtpPath = "share/kak/autoload/plugins";
patchPhase = ''
sed -i -e 's|tree_cmd "kak-tree"|tree_cmd "${kak-tree-bin}/bin/kak-tree"|' tree.kak
'';
buildPhase = ''
mkdir -p "$out/$rtpPath/kak-tree"
cp * "$out/$rtpPath/kak-tree"
'';
};
devShells.default = pkgs.mkShell {
packages = [ rust ];
shellHook = ''
export SITTERS="${sitters}"
'';
};
}
);
}