@@ -10,16 +10,31 @@ let
1010 isGitGrammar = (grammar:
1111 builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source
1212 && builtins.hasAttr "rev" grammar.source);
13+ isGitHubGrammar = grammar: lib.hasPrefix "https://github.com" grammar.source.git;
14+ toGitHubFetcher = url: let
15+ match = builtins.match "https://github\.com/([^/]*)/([^/]*)/?" url;
16+ in {
17+ owner = builtins.elemAt match 0;
18+ repo = builtins.elemAt match 1;
19+ };
1320 gitGrammars = builtins.filter isGitGrammar languagesConfig.grammar;
1421 buildGrammar = grammar:
1522 let
16− source = builtins.fetchTree {
23+ gh = toGitHubFetcher grammar.source.git;
24+ sourceGit = builtins.fetchTree {
1725 type = "git";
1826 url = grammar.source.git;
1927 rev = grammar.source.rev;
2028 ref = grammar.source.ref or "HEAD";
2129 shallow = true;
2230 };
31+ sourceGitHub = builtins.fetchTree {
32+ type = "github";
33+ owner = gh.owner;
34+ repo = gh.repo;
35+ inherit (grammar.source) rev;
36+ };
37+ source = if isGitHubGrammar grammar then sourceGitHub else sourceGit;
2338 in stdenv.mkDerivation rec {
2439 # see https://github.com/NixOS/nixpkgs/blob/fbdd1a7c0bc29af5325e0d7dd70e804a972eb465/pkgs/development/tools/parsing/tree-sitter/grammar.nix
2540