diff options
author | Yilin Wei <yilin@kebab-ca.se> | 2022-10-11 15:24:58 +0100 |
---|---|---|
committer | Yilin Wei <yilin@kebab-ca.se> | 2022-10-12 19:11:33 +0100 |
commit | 2142ce3789d2ac230a225eb078d3bf2f85046532 (patch) | |
tree | 1f25cef296cf0c1b85d2cb0d09bc00125c051bd4 /overlays | |
parent | d04558957e2bef64780144486becbdc1c731fe7f (diff) | |
download | nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.tar nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.tar.gz nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.tar.bz2 nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.tar.lz nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.tar.xz nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.tar.zst nixlib-2142ce3789d2ac230a225eb078d3bf2f85046532.zip |
Add `feature/tree-sitter` derivation to emacs overlay
Adds the branch `feature/tree-sitter` to allow testing of tree-sitter integration and exposes it as `emacsGitTreeSitter` in the `emacs` overlay. Introduces `withTreeSitter` and `withTreeSitterPlugins`.
Diffstat (limited to 'overlays')
-rw-r--r-- | overlays/emacs.nix | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/overlays/emacs.nix b/overlays/emacs.nix index 1b93d4473ec0..4e2a6aaed6c1 100644 --- a/overlays/emacs.nix +++ b/overlays/emacs.nix @@ -14,9 +14,9 @@ let builtins.foldl' (drv: fn: fn drv) super.emacs - [ + ([ - (drv: drv.override ({ srcRepo = true; } // args)) + (drv: drv.override ({ srcRepo = true; } // builtins.removeAttrs args [ "withTreeSitterPlugins" "withTreeSitter" ])) ( drv: drv.overrideAttrs ( @@ -68,7 +68,26 @@ let in result ) - ]; + ] + ++ (super.lib.optional (args ? "withTreeSitter") ( + drv: drv.overrideAttrs (old: + let + libName = drv: super.lib.removeSuffix "-grammar" drv.pname; + lib = drv: ''lib${libName drv}.so''; + linkCmd = drv: "ln -s ${drv}/parser $out/lib/${lib drv}"; + linkerFlag = drv: "-l" + libName drv; + plugins = args.withTreeSitterPlugins super.pkgs.tree-sitter-grammars; + tree-sitter-grammars = super.runCommand "tree-sitter-grammars" { + } (super.lib.concatStringsSep "\n" (["mkdir -p $out/lib"] ++ (map linkCmd plugins))); + in { + buildInputs = old.buildInputs ++ [ super.pkgs.tree-sitter tree-sitter-grammars ]; + # before building the `.el` files, we need to allow the `tree-sitter` libraries + # bundled in emacs to be dynamically loaded. + TREE_SITTER_LIBS = super.lib.concatStringsSep " " ([ "-ltree-sitter" ] ++ (map linkerFlag plugins)); + } + ) + ))); + mkPgtkEmacs = namePrefix: jsonFile: { ... }@args: (mkGitEmacs namePrefix jsonFile args).overrideAttrs ( old: { @@ -86,13 +105,22 @@ let withWebP = true; nativeComp = true; }; - + emacsPgtk = mkPgtkEmacs "emacs-pgtk" ../repos/emacs/emacs-master.json { withSQLite3 = true; withGTK3 = true; }; emacsPgtkNativeComp = mkPgtkEmacs "emacs-pgtk-native-comp" ../repos/emacs/emacs-master.json { nativeComp = true; withSQLite3 = true; withGTK3 = true; }; emacsUnstable = (mkGitEmacs "emacs-unstable" ../repos/emacs/emacs-unstable.json { }); + emacsGitTreeSitter = mkGitEmacs "emacs-git-tree-sitter" ../repos/emacs/emacs-feature_tree-sitter.json { + withTreeSitter = true; + withTreeSitterPlugins = (plugins: with plugins; [ + tree-sitter-python + tree-sitter-javascript + tree-sitter-json + ]); + }; + in { inherit emacsGit emacsUnstable; @@ -133,6 +161,8 @@ in ) ); + inherit emacsGitTreeSitter; + emacsWithPackagesFromUsePackage = import ../elisp.nix { pkgs = self; }; emacsWithPackagesFromPackageRequires = import ../packreq.nix { pkgs = self; }; |