Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'grammars.nix')
| -rw-r--r-- | grammars.nix | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/grammars.nix b/grammars.nix index 1b4da224..5152b520 100644 --- a/grammars.nix +++ b/grammars.nix @@ -1,13 +1,22 @@ { stdenv, lib, + runCommandLocal, runCommand, + yj, includeGrammarIf ? _: true, grammarOverlays ? [], ... }: let + # HACK: nix < 2.6 has a bug in the toml parser, so we convert to JSON + # before parsing + languages-json = runCommandLocal "languages-toml-to-json" {} '' + ${yj}/bin/yj -t < ${./languages.toml} > $out + ''; languagesConfig = - builtins.fromTOML (builtins.readFile ./languages.toml); + if lib.versionAtLeast builtins.nixVersion "2.6.0" + then builtins.fromTOML (builtins.readFile ./languages.toml) + else builtins.fromJSON (builtins.readFile (builtins.toPath languages-json)); isGitGrammar = grammar: builtins.hasAttr "source" grammar && builtins.hasAttr "git" grammar.source @@ -23,10 +32,10 @@ # If `use-grammars.except` is set, use all other grammars. # Otherwise use all grammars. useGrammar = grammar: - if languagesConfig ? use-grammars.only - then builtins.elem grammar.name languagesConfig.use-grammars.only - else if languagesConfig ? use-grammars.except - then !(builtins.elem grammar.name languagesConfig.use-grammars.except) + if languagesConfig?use-grammars.only then + builtins.elem grammar.name languagesConfig.use-grammars.only + else if languagesConfig?use-grammars.except then + !(builtins.elem grammar.name languagesConfig.use-grammars.except) else true; grammarsToUse = builtins.filter useGrammar languagesConfig.grammar; gitGrammars = builtins.filter isGitGrammar grammarsToUse; @@ -57,10 +66,10 @@ version = grammar.source.rev; src = source; - sourceRoot = - if builtins.hasAttr "subpath" grammar.source - then "source/${grammar.source.subpath}" - else "source"; + sourceRoot = if builtins.hasAttr "subpath" grammar.source then + "source/${grammar.source.subpath}" + else + "source"; dontConfigure = true; @@ -87,6 +96,8 @@ $CC -c src/parser.c -o parser.o $FLAGS $CXX -shared -o $NAME.so *.o + ls -al + runHook postBuild ''; @@ -105,21 +116,17 @@ ''; }; grammarsToBuild = builtins.filter includeGrammarIf gitGrammars; - builtGrammars = - builtins.map (grammar: { - inherit (grammar) name; - value = buildGrammar grammar; - }) - grammarsToBuild; + builtGrammars = builtins.map (grammar: { + inherit (grammar) name; + value = buildGrammar grammar; + }) grammarsToBuild; extensibleGrammars = lib.makeExtensible (self: builtins.listToAttrs builtGrammars); - overlaidGrammars = - lib.pipe extensibleGrammars + overlayedGrammars = lib.pipe extensibleGrammars (builtins.map (overlay: grammar: grammar.extend overlay) grammarOverlays); - grammarLinks = - lib.mapAttrsToList + grammarLinks = lib.mapAttrsToList (name: artifact: "ln -s ${artifact}/${name}.so $out/${name}.so") - (lib.filterAttrs (n: v: lib.isDerivation v) overlaidGrammars); + (lib.filterAttrs (n: v: lib.isDerivation v) overlayedGrammars); in runCommand "consolidated-helix-grammars" {} '' mkdir -p $out |