From 2142ce3789d2ac230a225eb078d3bf2f85046532 Mon Sep 17 00:00:00 2001 From: Yilin Wei Date: Tue, 11 Oct 2022 15:24:58 +0100 Subject: 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`. --- overlays/emacs.nix | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'overlays') 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; }; -- cgit 1.4.1