Compare commits

..

2 Commits

Author SHA1 Message Date
d80739e62d Update README 2023-12-29 23:28:32 +01:00
a0fb48c088 Refactor flake.nix slightly 2023-12-29 23:21:40 +01:00
3 changed files with 23 additions and 18 deletions

View File

@ -77,13 +77,13 @@ group.number = ["integer_literal", "float_literal", "negative_literal"]
If you are using nix, the `flake.nix` file provides an attribute `packages.kak-tree` resolving to a kakoune plugin one can use in home-manager's `programs.kakoune.plugins` or build yourself with `kakoune.override { plugins = ... }`.
If not, you will have to set up the build environment yourself. Since we use static linking, compile each tree sitter plugin to a statically linked library to `lib/libtree-sitter-LANG.a`, and then build:
If not, you will have to set up the build environment yourself. Since we use static linking, compile each tree sitter plugin to a statically linked library to `./sitters/libtree-sitter-LANG.a`, and then build:
```sh
$ [ compile tree sitter for i.e. javascript... ]
$ ls lib
$ ls sitters
libtree-sitter-javascript.a
$ cargo build --no-default-features --features javascript --release
$ SITTERS=./sitters cargo build --no-default-features --features javascript --release
[ ... ]
$ ./target/release/kak-tree --do-you-understand javascript
Known language. Trying to load

View File

@ -1,5 +1,5 @@
fn main() {
println!("cargo:rustc-link-search=native=lib");
println!("cargo:rustc-link-search=native={}", env!("SITTERS"));
for lang in &[
#[cfg(feature = "bash")]
"bash",

View File

@ -9,7 +9,9 @@
outputs = { self, nixpkgs, flake-utils, rust-overlay, tree-sitters }:
flake-utils.lib.eachDefaultSystem (sys:
let pkgs = import nixpkgs {
let enabledSitters = ["bash" "c" "python" "rust" "nix" "agda" "html" "javascript"];
pkgs = import nixpkgs {
system = sys;
overlays = [ (import rust-overlay) ];
};
@ -20,25 +22,25 @@
rustc = rust;
cargo = rust;
};
sitters = tree-sitters.packages.${sys};
sitterlist = [
sitters.bash sitters.c sitters.python sitters.rust sitters.nix sitters.agda sitters.html sitters.javascript
];
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 = ["bash" "c" "python" "rust" "nix" "agda" "html" "javascript"];
inherit sitterlist;
preBuild = ''
mkdir lib
for sitter in $sitterlist ; do
echo "Copying $sitter"
cp $sitter/lib/* lib
done
'';
buildFeatures = enabledSitters;
doCheck = false;
SITTERS = sitters;
};
in rec {
@ -58,6 +60,9 @@
};
devShells.default = pkgs.mkShell {
packages = [ rust ];
shellHook = ''
export SITTERS="${sitters}"
'';
};
}
);