{ "fileTypes": [ "nix" ], "name": "Nix", "patterns": [ { "include": "#expression" } ], "repository": { "attribute-bind": { "patterns": [ { "include": "#attribute-name" }, { "include": "#attribute-bind-from-equals" } ] }, "attribute-bind-from-equals": { "begin": "\\=", "beginCaptures": { "0": { "name": "keyword.operator.bind.nix" } }, "end": "\\;", "endCaptures": { "0": { "name": "punctuation.terminator.bind.nix" } }, "patterns": [ { "include": "#expression" } ] }, "attribute-inherit": { "begin": "\\binherit\\b", "beginCaptures": { "0": { "name": "keyword.other.inherit.nix" } }, "end": "\\;", "endCaptures": { "0": { "name": "punctuation.terminator.inherit.nix" } }, "patterns": [ { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.section.function.arguments.nix" } }, "end": "(?=\\;)", "patterns": [ { "begin": "\\)", "beginCaptures": { "0": { "name": "punctuation.section.function.arguments.nix" } }, "end": "(?=\\;)", "patterns": [ { "include": "#bad-reserved" }, { "include": "#attribute-name-single" }, { "include": "#others" } ] }, { "include": "#expression" } ] }, { "begin": "(?=[a-zA-Z\\_])", "end": "(?=\\;)", "patterns": [ { "include": "#bad-reserved" }, { "include": "#attribute-name-single" }, { "include": "#others" } ] }, { "include": "#others" } ] }, "attribute-name": { "patterns": [ { "match": "\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*", "name": "entity.other.attribute-name.multipart.nix" }, { "match": "\\." }, { "include": "#string-quoted" }, { "include": "#interpolation" } ] }, "attribute-name-single": { "match": "\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*", "name": "entity.other.attribute-name.single.nix" }, "attrset-contents": { "patterns": [ { "include": "#attribute-inherit" }, { "include": "#bad-reserved" }, { "include": "#attribute-bind" }, { "include": "#others" } ] }, "attrset-definition": { "begin": "(?=\\{)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "begin": "(\\{)", "beginCaptures": { "0": { "name": "punctuation.definition.attrset.nix" } }, "end": "(\\})", "endCaptures": { "0": { "name": "punctuation.definition.attrset.nix" } }, "patterns": [ { "include": "#attrset-contents" } ] }, { "begin": "(?<=\\})", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] } ] }, "attrset-definition-brace-opened": { "patterns": [ { "begin": "(?<=\\})", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "(?=.?)", "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.attrset.nix" } }, "patterns": [ { "include": "#attrset-contents" } ] } ] }, "attrset-for-sure": { "patterns": [ { "begin": "(?=\\brec\\b)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\brec\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=\\{)", "patterns": [ { "include": "#others" } ] }, { "include": "#attrset-definition" }, { "include": "#others" } ] }, { "begin": "(?=\\{\\s*(\\}|[^,?]*(=|;)))", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#attrset-definition" }, { "include": "#others" } ] } ] }, "attrset-or-function": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.attrset-or-function.nix" } }, "end": "(?=([\\])};]|\\b(else|then)\\b))", "patterns": [ { "begin": "(?=(\\s*\\}|\\\"|\\binherit\\b|\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*(\\s*\\.|\\s*=[^=])))", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#attrset-definition-brace-opened" } ] }, { "begin": "(?=(\\.\\.\\.|\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*\\s*[,?]))", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition-brace-opened" } ] }, { "include": "#bad-reserved" }, { "begin": "\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*", "beginCaptures": { "0": { "name": "variable.parameter.function.maybe.nix" } }, "end": "(?=([\\])};]|\\b(else|then)\\b))", "patterns": [ { "begin": "(?=\\.)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#attrset-definition-brace-opened" } ] }, { "begin": "\\s*(\\,)", "beginCaptures": { "1": { "name": "keyword.operator.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition-brace-opened" } ] }, { "begin": "(?=\\=)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#attribute-bind-from-equals" }, { "include": "#attrset-definition-brace-opened" } ] }, { "begin": "(?=\\?)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-parameter-default" }, { "begin": "\\,", "beginCaptures": { "0": { "name": "keyword.operator.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition-brace-opened" } ] } ] }, { "include": "#others" } ] }, { "include": "#others" } ] }, "bad-reserved": { "match": "(?\\=|\\>|&&|\\|\\||-\\>|//|\\?|\\+\\+|-|\\*|/(?=([^*]|$))|\\+)", "name": "keyword.operator.nix" }, { "include": "#constants" }, { "include": "#bad-reserved" }, { "include": "#parameter-name" }, { "include": "#others" } ] }, "function-body": { "begin": "(@\\s*([a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*)\\s*)?(\\:)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression" } ] }, "function-body-from-colon": { "begin": "(\\:)", "beginCaptures": { "0": { "name": "punctuation.definition.function.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression" } ] }, "function-contents": { "patterns": [ { "include": "#bad-reserved" }, { "include": "#function-parameter" }, { "include": "#others" } ] }, "function-definition": { "begin": "(?=.?)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-body-from-colon" }, { "begin": "(?=.?)", "end": "(?=\\:)", "patterns": [ { "begin": "(\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*)", "beginCaptures": { "0": { "name": "variable.parameter.function.4.nix" } }, "end": "(?=\\:)", "patterns": [ { "begin": "\\@", "end": "(?=\\:)", "patterns": [ { "include": "#function-header-until-colon-no-arg" }, { "include": "#others" } ] }, { "include": "#others" } ] }, { "begin": "(?=\\{)", "end": "(?=\\:)", "patterns": [ { "include": "#function-header-until-colon-with-arg" } ] } ] }, { "include": "#others" } ] }, "function-definition-brace-opened": { "begin": "(?=.?)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-body-from-colon" }, { "begin": "(?=.?)", "end": "(?=\\:)", "patterns": [ { "include": "#function-header-close-brace-with-arg" }, { "begin": "(?=.?)", "end": "(?=\\})", "patterns": [ { "include": "#function-contents" } ] } ] }, { "include": "#others" } ] }, "function-for-sure": { "patterns": [ { "begin": "(?=(\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*\\s*[:@]|\\{[^}]*\\}\\s*:|\\{[^#}\"'/=]*[,\\?]))", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#function-definition" } ] } ] }, "function-header-close-brace-no-arg": { "begin": "\\}", "beginCaptures": { "0": { "name": "punctuation.definition.entity.function.nix" } }, "end": "(?=\\:)", "patterns": [ { "include": "#others" } ] }, "function-header-close-brace-with-arg": { "begin": "\\}", "beginCaptures": { "0": { "name": "punctuation.definition.entity.function.nix" } }, "end": "(?=\\:)", "patterns": [ { "include": "#function-header-terminal-arg" }, { "include": "#others" } ] }, "function-header-open-brace": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.entity.function.2.nix" } }, "end": "(?=\\})", "patterns": [ { "include": "#function-contents" } ] }, "function-header-terminal-arg": { "begin": "(?=@)", "end": "(?=\\:)", "patterns": [ { "begin": "\\@", "end": "(?=\\:)", "patterns": [ { "begin": "(\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*)", "end": "(?=\\:)", "name": "variable.parameter.function.3.nix" }, { "include": "#others" } ] }, { "include": "#others" } ] }, "function-header-until-colon-no-arg": { "begin": "(?=\\{)", "end": "(?=\\:)", "patterns": [ { "include": "#function-header-open-brace" }, { "include": "#function-header-close-brace-no-arg" } ] }, "function-header-until-colon-with-arg": { "begin": "(?=\\{)", "end": "(?=\\:)", "patterns": [ { "include": "#function-header-open-brace" }, { "include": "#function-header-close-brace-with-arg" } ] }, "function-parameter": { "patterns": [ { "begin": "(\\.\\.\\.)", "end": "(,|(?=\\}))", "name": "keyword.operator.nix", "patterns": [ { "include": "#others" } ] }, { "begin": "\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*", "beginCaptures": { "0": { "name": "variable.parameter.function.1.nix" } }, "end": "(,|(?=\\}))", "endCaptures": { "0": { "name": "keyword.operator.nix" } }, "patterns": [ { "include": "#whitespace" }, { "include": "#comment" }, { "include": "#function-parameter-default" }, { "include": "#expression" } ] }, { "include": "#others" } ] }, "function-parameter-default": { "begin": "\\?", "beginCaptures": { "0": { "name": "keyword.operator.nix" } }, "end": "(?=[,}])", "patterns": [ { "include": "#expression" } ] }, "if": { "begin": "(?=\\bif\\b)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\bif\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "\\bth(?=en\\b)", "endCaptures": { "0": { "name": "keyword.other.nix" } }, "patterns": [ { "include": "#expression" } ] }, { "begin": "(?<=th)en\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "\\bel(?=se\\b)", "endCaptures": { "0": { "name": "keyword.other.nix" } }, "patterns": [ { "include": "#expression" } ] }, { "begin": "(?<=el)se\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "endCaptures": { "0": { "name": "keyword.other.nix" } }, "patterns": [ { "include": "#expression" } ] } ] }, "illegal": { "match": ".", "name": "invalid.illegal" }, "interpolation": { "begin": "\\$\\{", "beginCaptures": { "0": { "name": "punctuation.section.embedded.begin.nix" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.section.embedded.end.nix" } }, "name": "markup.italic", "patterns": [ { "include": "#expression" } ] }, "let": { "begin": "(?=\\blet\\b)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\blet\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=([\\])};,]|\\b(in|else|then)\\b))", "patterns": [ { "begin": "(?=\\{)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#attrset-contents" } ] }, { "begin": "(^|(?<=\\}))", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "include": "#others" } ] }, { "include": "#attrset-contents" }, { "include": "#others" } ] }, { "begin": "\\bin\\b", "beginCaptures": { "0": { "name": "keyword.other.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression" } ] } ] }, "list": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.list.nix" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.list.nix" } }, "patterns": [ { "include": "#expression" } ] }, "list-and-cont": { "begin": "(?=\\[)", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#list" }, { "include": "#expression-cont" } ] }, "operator-unary": { "match": "(!|-)", "name": "keyword.operator.unary.nix" }, "others": { "patterns": [ { "include": "#whitespace" }, { "include": "#comment" }, { "include": "#illegal" } ] }, "parameter-name": { "captures": { "0": { "name": "variable.parameter.name.nix" } }, "match": "\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*" }, "parameter-name-and-cont": { "begin": "\\b[a-zA-Z\\_][a-zA-Z0-9\\_\\'\\-]*", "beginCaptures": { "0": { "name": "variable.parameter.name.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, "parens": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.expression.nix" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.expression.nix" } }, "patterns": [ { "include": "#expression" } ] }, "parens-and-cont": { "begin": "(?=\\()", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#parens" }, { "include": "#expression-cont" } ] }, "string": { "patterns": [ { "begin": "(?=\\'\\')", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "begin": "\\'\\'", "beginCaptures": { "0": { "name": "punctuation.definition.string.other.start.nix" } }, "end": "\\'\\'(?!\\$|\\'|\\\\.)", "endCaptures": { "0": { "name": "punctuation.definition.string.other.end.nix" } }, "name": "string.quoted.other.nix", "patterns": [ { "match": "\\'\\'(\\$|\\'|\\\\.)", "name": "constant.character.escape.nix" }, { "include": "#interpolation" } ] }, { "include": "#expression-cont" } ] }, { "begin": "(?=\\\")", "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#string-quoted" }, { "include": "#expression-cont" } ] }, { "begin": "([a-zA-Z0-9\\.\\_\\-\\+]*(\\/[a-zA-Z0-9\\.\\_\\-\\+]+)+)", "beginCaptures": { "0": { "name": "string.unquoted.path.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "(\\<[a-zA-Z0-9\\.\\_\\-\\+]+(\\/[a-zA-Z0-9\\.\\_\\-\\+]+)*\\>)", "beginCaptures": { "0": { "name": "string.unquoted.spath.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] }, { "begin": "([a-zA-Z][a-zA-Z0-9\\+\\-\\.]*\\:[a-zA-Z0-9\\%\\/\\?\\:\\@\\&\\=\\+\\$\\,\\-\\_\\.\\!\\~\\*\\']+)", "beginCaptures": { "0": { "name": "string.unquoted.url.nix" } }, "end": "(?=([\\])};,]|\\b(else|then)\\b))", "patterns": [ { "include": "#expression-cont" } ] } ] }, "string-quoted": { "begin": "\\\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.double.start.nix" } }, "end": "\\\"", "endCaptures": { "0": { "name": "punctuation.definition.string.double.end.nix" } }, "name": "string.quoted.double.nix", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.nix" }, { "include": "#interpolation" } ] }, "whitespace": { "match": "\\s+" }, "with-assert": { "begin": "(?