{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "lux.toml",
  "description": "The TOML manifest for a Lux project.\n\n`lux.toml` is a subset of the [Lua rockspec format](https://github.com/luarocks/luarocks/blob/main/docs/rockspec_format.md),\nwith some simplifications, represented in TOML.\nIt does not support advanced specifications like platform overrides.\nThose can be declared with an [`extra.rockspec`](https://lux.lumen-labs.org/guides/rockspec).",
  "type": "object",
  "properties": {
    "package": {
      "description": "The name of the rock. Lux converts it to lower case when publishing.",
      "$ref": "#/$defs/PackageName",
      "x-lux-toml-example": "package = \"my-lua-project\""
    },
    "version": {
      "description": "The package version. If unset, Lux derives it from the current SemVer\ngit tag (optional `v` prefix), falling back to \"dev\".\n\nVersions like `1.0` are corrected to `1.0.0`.\nNon-SemVer versions (e.g. `1.0-rc1` instead of `1.0.0-rc1`) are treated\nas Dev versions and cannot be compared with SemVer versions.",
      "type": "string",
      "default": null,
      "x-lux-toml-example": "version = \"1.0.0\""
    },
    "build": {
      "description": "How to build the project. See the build backend fields below.\n\nRocks with C sources require a C compiler. Lux does not bundle one.",
      "$ref": "#/$defs/BuildSpecInternal"
    },
    "rockspec_format": {
      "description": "The LuaRocks rockspec format version to write to the generated rockspec (\"1.0\", \"2.0\", or \"3.0\").\nDefault: \"3.0\".",
      "anyOf": [
        {
          "$ref": "#/$defs/RockspecFormat"
        },
        {
          "type": "null"
        }
      ],
      "x-lux-toml-example": "rockspec_format = \"3.0\""
    },
    "run": {
      "description": "How to run the project with `lx run`.",
      "anyOf": [
        {
          "$ref": "#/$defs/RunSpec"
        },
        {
          "type": "null"
        }
      ],
      "x-lux-toml-example": "\n[run]\nargs = [\"src/main.lua\"]\n"
    },
    "lua": {
      "description": "The Lua version requirement, e.g. \">= 5.1\". Required to build a rockspec.\nSet to \"luau\" to build and run the project with Luau.",
      "type": [
        "string",
        "null"
      ],
      "x-lux-toml-example": "lua = \">=5.1\""
    },
    "description": {
      "description": "Metadata published to LuaRocks.",
      "anyOf": [
        {
          "$ref": "#/$defs/RockDescription"
        },
        {
          "type": "null"
        }
      ],
      "x-lux-toml-example": "\n[description]\nsummary = \"A one-line description of the package\"\ndetailed = \"\"\"\nA longer description of the package\nthat often spans multiple lines.\n\"\"\"\nlicense = \"GPLv2\"\nhomepage = \"https://lumen-oss.github.io\"\nissues_url = \"https://github.com/lumen-oss/lux/issues\"\nmaintainer = \"neorocks org\"\nlabels = [\"neovim\", \"tls\", \"https\"]\n"
    },
    "supported_platforms": {
      "description": "Platforms this rock supports, mapping platform identifiers to `true` or\n`false` (e.g. `linux = true`).",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "type": "boolean"
      },
      "default": null,
      "x-lux-toml-example": "\n[supported_platforms]\nlinux = true\nwindows = false\n"
    },
    "dependencies": {
      "description": "Runtime Lua dependencies, mapping package names to a version requirement\n(e.g. `foo = \"1.0\"`) or to a detailed table with `version`, `opt`, `pin`,\n`git`, `rev`, and `path` keys.\n\nVersion requirements support the operators `==`, `~=`, `<`, `>`, `<=`,\n`>=`, and `~>`. `~> 2` means `>= 2, < 3`. An operator is optional;\nwithout one, the requirement is treated as `==`. Version requirements\nare mandatory.\n\nDependencies are declared under `lua`, `[dependencies]`,\n`[build_dependencies]`, `[test_dependencies]`, and\n`[external_dependencies]`.\n\nGit dependencies support the `github:` (default), `gitlab:`,\n`codeberg:`, and `sourcehut:` shorthands, as well as full HTTPS and SSH\nURLs. If `rev` is unset, `version` is used as the commit SHA or tag.\nLux searches the repository root for a `lux.toml` or `.rockspec` to\ndetermine the build specification, defaulting to `builtin` if none is\nfound. Rocks with git dependencies cannot be published to LuaRocks. Git\ndependencies that require a custom LuaRocks build backend are not\nsupported.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/$defs/DependencyEntry"
      },
      "x-lux-toml-example": "\n[dependencies]\nluafilesystem = \"1.0.0\"\n\n[dependencies.argparse]\nversion = \"0.7\"\nopt = true\n\n[dependencies.foo]\nversion = \"09511782201302ade916d4b250d01a6c61b56844\"\ngit = \"github:lunarmodules/foo\"\n\n[dependencies.bar]\npath = \"../bar\"\nversion = \"1.0.0\"\n"
    },
    "build_dependencies": {
      "description": "Dependencies needed at build time. Same syntax as `dependencies`.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/$defs/DependencyEntry"
      }
    },
    "external_dependencies": {
      "description": "System (C/FFI) dependencies, discovered via pkg-config. Each entry may\nset `header` and/or `library`.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/$defs/ExternalDependencySpec"
      },
      "x-lux-toml-example": "\n[external_dependencies.OPENSSL]\nheader = \"openssl/ssl.h\"\nlibrary = \"ssl\"\n"
    },
    "test_dependencies": {
      "description": "Dependencies needed when running `lx test`. Same syntax as `dependencies`.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": {
        "$ref": "#/$defs/DependencyEntry"
      },
      "x-lux-toml-example": "\n[test_dependencies]\nbusted = \">=2.0.0\"\nnlua = \"~>0.3\"\n"
    },
    "source": {
      "description": "Templates for generating the source URL of a release.\n\nVariable substitutions:\n- `$(PACKAGE)`: package name\n- `$(VERSION)`: package version (from the git tag if not declared)\n- `$(REF)`: git tag or revision (priority: SemVer tag, tag, commit SHA)\n- `$(<VAR_NAME>)`: any environment variable",
      "$ref": "#/$defs/RockSourceTemplate",
      "default": {
        "url": null,
        "dev": null,
        "file": null,
        "dir": null,
        "tag": null,
        "branch": null
      },
      "x-lux-toml-example": "\n[source]\nurl = \"https://host.com/owner/$(PACKAGE)/archive/refs/tags/$(REF).zip\"\ndev = \"git+https://host.com/owner/$(PACKAGE).git\"\n"
    },
    "test": {
      "description": "How to run the test suite with `lx test`.\n\nThe `busted` backend is used when a `.busted` file exists and no backend\nis specified. `busted-nlua` is used when a `.busted` file exists or\n`busted` and `nlua` are `test_dependencies`. The `busted-nlua` backend is\ncurrently broken on macOS and Windows. Luau projects default to `tiniest`.",
      "anyOf": [
        {
          "$ref": "#/$defs/TestSpecInternal"
        },
        {
          "type": "null"
        }
      ],
      "x-lux-toml-example": "\n[test]\ntype = \"busted\"\nflags = []\n"
    },
    "deploy": {
      "description": "Additional install and deployment options.",
      "anyOf": [
        {
          "$ref": "#/$defs/DeploySpec"
        },
        {
          "type": "null"
        }
      ],
      "x-lux-toml-example": "\n[deploy]\nwrap_bin_scripts = false\n"
    },
    "project": {
      "description": "Lux-specific project settings, ignored when generating a rockspec.",
      "$ref": "#/$defs/ProjectSpec",
      "x-lux-toml-example": "\n[project]\nroot_dir = \"..\"\n"
    }
  },
  "required": [
    "package"
  ],
  "$defs": {
    "PackageName": {
      "description": "A luarocks package name, which is always lowercase",
      "type": "string"
    },
    "BuildSpecInternal": {
      "type": "object",
      "properties": {
        "type": {
          "description": "The build backend to use: \"builtin\", \"make\", \"cmake\",\n\"command\", \"none\", \"rust-mlua\", \"rust-binary\", or \"treesitter-parser\".\nAny other value is treated as a custom LuaRocks build backend.\nDefault: \"builtin\".\n\n`make` requires Make, `cmake` requires CMake, and `rust-mlua`/`rust-binary`\nrequire a Rust toolchain. Set `type = \"none\"` to copy source files\nwithout building.\n\nFor Luau projects, `builtin` auto-detects `.luau` modules. Native\ndependencies are not supported. Luau modules are transpiled to Lua when\nthe project targets a Lua runtime.",
          "type": [
            "string",
            "null"
          ],
          "x-lux-toml-example": "\n[build]\ntype = \"builtin\"\n"
        },
        "modules": {
          "description": "Modules to build, mapping module names (as used by `require`) to a source\npath, a list of C sources, or a table with `sources`, `libraries`,\n`defines`, `incdirs`, and `libdirs`.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "$ref": "#/$defs/ModuleSpec"
          },
          "x-lux-toml-example": "\n[build.modules]\n\"foo.main\" = \"lua/foo.lua\"\n\"foo.bla\" = [\"src/bla.c\"]\n\n[build.modules.\"foo.core\"]\nsources = [\"src/core.c\", \"src/extra.c\"]\nlibraries = [\"ssl\"]\ndefines = [\"FOO=bar\", \"USE_BLA\"]\nincdirs = []\nlibdirs = []\n"
        },
        "makefile": {
          "description": "Makefile to use. Default: \"Makefile\" (\"Makefile.win\" on Windows).",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[build]\ntype = \"make\"\nmakefile = \"Makefile\"\nbuild_target = \"\"\nbuild_pass = true\ninstall_target = \"install\"\ninstall_pass = true\nbuild_variables = {}\ninstall_variables = {}\nvariables = {}\n"
        },
        "build_target": {
          "description": "Target passed to `make` during the build pass. Default: empty.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "build_pass": {
          "description": "Whether to perform a build pass. Default: `true`.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "install_target": {
          "description": "Target passed to `make` during the install pass. Default: \"install\".",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "install_pass": {
          "description": "Whether to perform an install pass. Default: `true`.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "build_variables": {
          "description": "Make variable assignments for the build pass.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          },
          "default": null
        },
        "install_variables": {
          "description": "Make variable assignments for the install pass.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          },
          "default": null
        },
        "variables": {
          "description": "Make or CMake variable assignments applied to both passes.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          },
          "default": null
        },
        "cmake": {
          "description": "Contents of the generated \"CMakeLists.txt\". If unset, the project's own\nfile is used.\n\nEnvironment variables: `CMAKE_MODULE_PATH`, `CMAKE_INCLUDE_PATH`,\n`CMAKE_LIBRARY_PATH`.",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[build]\ntype = \"cmake\"\ncmake = \"\"\"\n<content>\n\"\"\"\n"
        },
        "build_command": {
          "description": "Command to run to build the package.",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[build]\ntype = \"command\"\nbuild_command = \"make\"\ninstall_command = \"make install\"\n"
        },
        "install_command": {
          "description": "Command to run to install the package.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "install": {
          "description": "Files to install, by category (\"lua\", \"lib\", \"conf\", \"bin\").",
          "anyOf": [
            {
              "$ref": "#/$defs/InstallSpec"
            },
            {
              "type": "null"
            }
          ],
          "x-lux-toml-example": "\n[build.install.lua]\n\"foo.bar\" = \"src/bar.lua\"\n\n[build.install.lib]\n\"foo.bar\" = \"lib/bar.so\"\n\n[build.install.conf]\n\n[build.install.bin]\n"
        },
        "copy_directories": {
          "description": "Directories in the source tree to copy as-is into the rock's \"etc\" tree.\nDo not use \"lua\", \"lib\", \"rock_manifest\", or the rockspec file name.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "default": null,
          "x-lux-toml-example": "\n[build]\ncopy_directories = [\"plugin\", \"ftplugin\"]\n"
        },
        "patches": {
          "description": "Patches to apply before building, mapping file names to patch contents.\nLux accepts any format supported by the [`diffy`](https://docs.rs/diffy/latest/diffy/) crate.\nLuaRocks only supports unified diff.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          },
          "default": null,
          "x-lux-toml-example": "\n[build.patches]\n\"lua51-support.diff\" = \"\"\"\n--- old/mymodule.c....\n\"\"\"\n"
        },
        "target_path": {
          "description": "The cargo target directory, if it is not `<source>/target`.",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[build]\ntype = \"rust-mlua\"\ntarget_path = \"target\"\ndefault_features = false\nfeatures = []\ncargo_extra_args = []\n\n[build.modules]\n\"foo.main\" = \"alt_name\"\n\n[build.include]\n\"relative/path/to/file.lua\" = \"target-file.lua\"\n"
        },
        "default_features": {
          "description": "Whether to build a cargo package with default features. Default: `true`.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "features": {
          "description": "Cargo features to enable.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "default": null
        },
        "cargo_extra_args": {
          "description": "Additional arguments to pass to cargo.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        },
        "package": {
          "description": "The cargo package to build.\nRequired for \"rust-binary\" in multi-package workspaces.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "include": {
          "description": "Additional files to copy into the rock's \"lua\" directory, mapping source\npaths to destinations.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          }
        },
        "lang": {
          "description": "The parser language, e.g. \"haskell\". Required for \"treesitter-parser\".",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[build]\ntype = \"treesitter-parser\"\nlang = \"haskell\"\nparser = true\ngenerate = true\nlocation = \"libs/tree-sitter-haskell\"\n\n[build.queries.\"highlights.scm\"] = \"\"\"\n(signature\n  name: (variable) @function)\n\"\"\"\n"
        },
        "parser": {
          "description": "Whether to build the tree-sitter parser. Set to `false` for query-only packages.\nDefault: `false`.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "generate": {
          "description": "Whether to generate the tree-sitter parser sources before building.\nDefault: `false`.",
          "type": [
            "boolean",
            "null"
          ],
          "default": null
        },
        "location": {
          "description": "Location of the tree-sitter grammar, relative to the source root.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "queries": {
          "description": "Embedded queries to install into \"etc/queries\", mapping file names to\ncontents.",
          "type": [
            "object",
            "null"
          ],
          "additionalProperties": {
            "type": "string"
          },
          "default": null
        }
      }
    },
    "ModuleSpec": {
      "description": "A `build.modules` entry: a source path, a list of source paths, or a\ntable describing a compiled module.",
      "anyOf": [
        {
          "description": "A path to a Lua or C source file.",
          "type": "string"
        },
        {
          "description": "A list of C source files.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "description": "A table describing a compiled module.",
          "$ref": "#/$defs/ModulePathsSpec"
        }
      ]
    },
    "ModulePathsSpec": {
      "type": "object",
      "properties": {
        "sources": {
          "description": "Path names of C sources.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "libraries": {
          "description": "External libraries to link.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "defines": {
          "description": "C defines, e.g. \"FOO=bar\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "incdirs": {
          "description": "Directories for header lookup.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "libdirs": {
          "description": "Directories for library lookup.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "sources",
        "libraries",
        "defines",
        "incdirs",
        "libdirs"
      ]
    },
    "InstallSpec": {
      "description": "For packages which don't provide means to install modules\nand expect the user to copy the .lua or library files by hand to the proper locations.\nThis struct contains categories of files. Each category is itself a table,\nwhere the array part is a list of filenames to be copied.\nFor module directories only, in the hash part, other keys are identifiers in Lua module format,\nto indicate which subdirectory the file should be copied to.\nFor example, lua = {[\"foo.bar\"] = \"src/bar.lua\"} will copy src/bar.lua\nto the foo directory under the rock's Lua files directory.",
      "type": "object",
      "properties": {
        "lua": {
          "description": "Lua modules written in Lua.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "lib": {
          "description": "Dynamic libraries implemented compiled Lua modules.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        },
        "conf": {
          "description": "Configuration files.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        },
        "bin": {
          "description": "Lua command-line scripts.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "default": {}
        }
      }
    },
    "RockspecFormat": {
      "type": "string",
      "enum": [
        "1.0",
        "2.0",
        "3.0"
      ]
    },
    "RunSpec": {
      "type": "object",
      "properties": {
        "command": {
          "description": "The command to execute when running the project",
          "type": [
            "string",
            "null"
          ]
        },
        "args": {
          "description": "Arguments to pass to the command",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "RockDescription": {
      "description": "A rock's metadata, to be displayed on the remote package server",
      "type": "object",
      "properties": {
        "summary": {
          "description": "A one-line description of the package.",
          "type": [
            "string",
            "null"
          ]
        },
        "detailed": {
          "description": "A longer description of the package.",
          "type": [
            "string",
            "null"
          ]
        },
        "license": {
          "description": "The license used by the package.",
          "type": [
            "string",
            "null"
          ]
        },
        "homepage": {
          "description": "An URL for the project. This is not the URL for the tarball, but the address of a website.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "issues_url": {
          "description": "An URL for the project's issue tracker.",
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "maintainer": {
          "description": "Contact information for the rockspec maintainer.",
          "type": [
            "string",
            "null"
          ]
        },
        "labels": {
          "description": "A list of short strings that specify labels for categorization of this rock.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": []
        }
      }
    },
    "DependencyEntry": {
      "description": "A single `[dependencies]`-style entry: either a bare version requirement\nor a detailed table.",
      "anyOf": [
        {
          "description": "A bare version requirement, e.g. \">= 1.0\".",
          "type": "string"
        },
        {
          "description": "A detailed dependency table.",
          "$ref": "#/$defs/DependencyTableEntry"
        }
      ]
    },
    "DependencyTableEntry": {
      "type": "object",
      "properties": {
        "version": {
          "description": "The version requirement, e.g. \"1.0\".\nSupports the same operators as `dependencies`.",
          "type": "string"
        },
        "opt": {
          "description": "Whether the dependency is optional. Default: `false`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "pin": {
          "description": "Whether the dependency should be pinned. Default: `false`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "git": {
          "description": "A git source. Supported shorthands: \"github:owner/repo\" (default if the\nprefix is omitted), \"gitlab:owner/repo\", \"codeberg:owner/repo\", and\n\"sourcehut:owner/repo\". Full HTTPS and SSH URLs are also accepted.\nIf `rev` is unset, `version` is used as the commit SHA or tag.\nGit dependencies cannot be published to LuaRocks.",
          "type": [
            "string",
            "null"
          ]
        },
        "path": {
          "description": "A local path dependency.",
          "type": [
            "string",
            "null"
          ]
        },
        "rev": {
          "description": "A commit SHA or tag to check out, separate from `version`.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "version"
      ]
    },
    "ExternalDependencySpec": {
      "description": "Can be defined in a [platform-agnostic](https://github.com/luarocks/luarocks/wiki/platform-agnostic-external-dependencies) manner",
      "type": "object",
      "properties": {
        "header": {
          "description": "A header file, e.g. \"foo.h\"",
          "type": [
            "string",
            "null"
          ]
        },
        "library": {
          "description": "A library file, e.g. \"libfoo.so\"",
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "RockSourceTemplate": {
      "description": "Template for generating a remote rockspec source\n\nVariables that can be substituted in each of the fields:\n- `$(PACKAGE)`: Package name\n- `$(VERSION)`: Package version\n- `$(REF)`: Git tag or revision (prioritising tags if present)\n\nFields can also be substituted with environment variables.",
      "type": "object",
      "properties": {
        "url": {
          "description": "URL template for `SemVer` releases",
          "type": [
            "string",
            "null"
          ]
        },
        "dev": {
          "description": "URL template for `DevVer` releases",
          "type": [
            "string",
            "null"
          ]
        },
        "file": {
          "description": "File name of the source archive.\nCan be omitted if it can be inferred from the generated URL.",
          "type": [
            "string",
            "null"
          ]
        },
        "dir": {
          "description": "Name of the directory created when the source archive is unpacked.\nCan be omitted if it can be inferred from the `file` field.",
          "type": [
            "string",
            "null"
          ]
        },
        "tag": {
          "description": "The tag or revision to be checked out if the source URL is a git source.\nIf unset, Lux will try to auto-detect it.",
          "type": [
            "string",
            "null"
          ]
        },
        "branch": {
          "description": "The branch to be checked out if the source URL is a git source.",
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "TestSpecInternal": {
      "type": "object",
      "properties": {
        "type": {
          "description": "The test backend: \"busted\", \"busted-nlua\", \"tiniest\", or \"command\".\nIf unset, Lux auto-detects a backend (e.g. \"busted\" when a \".busted\"\nfile or the \"busted\" dependency is present).",
          "anyOf": [
            {
              "$ref": "#/$defs/TestType"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "flags": {
          "description": "Extra CLI flags to pass to the test backend.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "default": null
        },
        "command": {
          "description": "Shell command to run as the test suite. Mutually exclusive with `script`.",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[test]\ntype = \"command\"\ncommand = \"make\"\nflags = [\"test\"]\n"
        },
        "script": {
          "description": "Lua script to run as the test suite. Mutually exclusive with `command`.",
          "type": [
            "string",
            "null"
          ],
          "default": null,
          "x-lux-toml-example": "\n[test]\ntype = \"script\"\nscript = \"tests.lua\"\nflags = []\n"
        }
      }
    },
    "TestType": {
      "type": "string",
      "enum": [
        "busted",
        "busted-nlua",
        "tiniest",
        "command"
      ]
    },
    "DeploySpec": {
      "description": "An undocumented part of the rockspec format.\n\nSpecifies additional install options",
      "type": "object",
      "properties": {
        "wrap_bin_scripts": {
          "description": "Whether to wrap installed Lua bin scripts to be executed with\nthe detected or configured Lua installation.\nDefaults to `true`.",
          "type": "boolean",
          "default": true
        }
      }
    },
    "ProjectSpec": {
      "description": "Lux-specific project configuration.\n\nThis is not part of the rockspec format and is ignored when generating a rockspec.",
      "type": "object",
      "properties": {
        "root_dir": {
          "description": "The project root directory, relative to the directory containing the `lux.toml`.\nUseful for multi-project workspaces, where the build files\n(e.g. the cargo workspace `Cargo.toml`) do not live next to the `lux.toml`.",
          "type": [
            "string",
            "null"
          ]
        }
      }
    }
  }
}
