{ 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}" ''; }; } ); }