@@ -71,6 +71,35 @@ let
7171 in
7272 lib.mapAttrs change grammars;
7373
74+ # Usage:
75+ # pkgs.tree-sitter.withPlugins (p: [ p.tree-sitter-c p.tree-sitter-java ... ])
76+ #
77+ # or for all grammars:
78+ # pkgs.tree-sitter.withPlugins (_: allGrammars)
79+ # which is equivalent to
80+ # pkgs.tree-sitter.withPlugins (p: builtins.attrValues p)
81+ withPlugins = grammarFn:
82+ let
83+ grammars = grammarFn builtGrammars;
84+ in
85+ linkFarm "grammars"
86+ (map
87+ (drv:
88+ let
89+ name = lib.strings.getName drv;
90+ in
91+ {
92+ name =
93+ (lib.strings.removePrefix "tree-sitter-"
94+ (lib.strings.removeSuffix "-grammar" name))
95+ + stdenv.hostPlatform.extensions.sharedLibrary;
96+ path = "${drv}/parser";
97+ }
98+ )
99+ grammars);
100+
101+ allGrammars = builtins.attrValues builtGrammars;
102+
74103in
75104rustPlatform.buildRustPackage {
76105 pname = "tree-sitter";
@@ -111,7 +140,7 @@ rustPlatform.buildRustPackage {
111140 updater = {
112141 inherit update-all-grammars;
113142 };
114− inherit grammars builtGrammars;
143+ inherit grammars builtGrammars withPlugins allGrammars;
115144
116145 tests = {
117146 # make sure all grammars build