diff options
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; }; |