{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Config",
"type": "object",
"properties": {
"bindings": {
"$ref": "#/definitions/KeyBindingsConfig"
},
"d2": {
"$ref": "#/definitions/D2Config"
},
"defaults": {
"description": "The default configuration for the presentation.",
"allOf": [
{
"$ref": "#/definitions/DefaultsConfig"
}
]
},
"export": {
"$ref": "#/definitions/ExportConfig"
},
"mermaid": {
"$ref": "#/definitions/MermaidConfig"
},
"options": {
"$ref": "#/definitions/OptionsConfig"
},
"snippet": {
"$ref": "#/definitions/SnippetConfig"
},
"speaker_notes": {
"$ref": "#/definitions/SpeakerNotesConfig"
},
"transition": {
"anyOf": [
{
"$ref": "#/definitions/SlideTransitionConfig"
},
{
"type": "null"
}
]
},
"typst": {
"$ref": "#/definitions/TypstConfig"
}
},
"additionalProperties": false,
"definitions": {
"D2Config": {
"type": "object",
"properties": {
"scale": {
"description": "The scaling parameter to be used in the d2 CLI.",
"default": null,
"type": [
"number",
"null"
],
"format": "float"
}
},
"additionalProperties": false
},
"DefaultsConfig": {
"type": "object",
"properties": {
"image_protocol": {
"description": "The image protocol to use.",
"allOf": [
{
"$ref": "#/definitions/ImageProtocol"
}
]
},
"incremental_lists": {
"description": "The configuration for lists when incremental lists are enabled.",
"allOf": [
{
"$ref": "#/definitions/IncrementalListsConfig"
}
]
},
"max_columns": {
"description": "A max width in columns that the presentation must always be capped to.",
"default": 65535,
"type": "integer",
"format": "uint16",
"minimum": 0.0
},
"max_columns_alignment": {
"description": "The alignment the presentation should have if `max_columns` is set and the terminal is larger than that.",
"allOf": [
{
"$ref": "#/definitions/MaxColumnsAlignment"
}
]
},
"max_rows": {
"description": "A max height in rows that the presentation must always be capped to.",
"default": 65535,
"type": "integer",
"format": "uint16",
"minimum": 0.0
},
"max_rows_alignment": {
"description": "The alignment the presentation should have if `max_rows` is set and the terminal is larger than that.",
"allOf": [
{
"$ref": "#/definitions/MaxRowsAlignment"
}
]
},
"terminal_font_size": {
"description": "Override the terminal font size when in windows or when using sixel.",
"default": 16,
"type": "integer",
"format": "uint8",
"minimum": 1.0
},
"theme": {
"description": "The theme to use by default in every presentation unless overridden.",
"allOf": [
{
"$ref": "#/definitions/ThemeConfig"
}
]
},
"validate_overflows": {
"description": "Validate that the presentation does not overflow the terminal screen.",
"allOf": [
{
"$ref": "#/definitions/ValidateOverflows"
}
]
}
},
"additionalProperties": false
},
"ExportConfig": {
"description": "The export configuration.",
"type": "object",
"properties": {
"dimensions": {
"description": "The dimensions to use for presentation exports.",
"anyOf": [
{
"$ref": "#/definitions/ExportDimensionsConfig"
},
{
"type": "null"
}
]
},
"pauses": {
"description": "Whether pauses should create new slides.",
"allOf": [
{
"$ref": "#/definitions/PauseExportPolicy"
}
]
},
"pdf": {
"description": "The PDF specific export configs.",
"allOf": [
{
"$ref": "#/definitions/PdfExportConfig"
}
]
},
"snippets": {
"description": "The policy for executable snippets when exporting.",
"allOf": [
{
"$ref": "#/definitions/SnippetsExportPolicy"
}
]
}
},
"additionalProperties": false
},
"ExportDimensionsConfig": {
"description": "The dimensions to use for presentation exports.",
"type": "object",
"required": [
"columns",
"rows"
],
"properties": {
"columns": {
"description": "The number of columns.",
"type": "integer",
"format": "uint16",
"minimum": 0.0
},
"rows": {
"description": "The number of rows.",
"type": "integer",
"format": "uint16",
"minimum": 0.0
}
},
"additionalProperties": false
},
"ExportFontsConfig": {
"description": "The fonts used for exports.",
"type": "object",
"required": [
"normal"
],
"properties": {
"bold": {
"description": "The path to the font file to be used for the \"bold\" variable of this font.",
"type": [
"string",
"null"
]
},
"bold_italic": {
"description": "The path to the font file to be used for the \"bold+italic\" variable of this font.",
"type": [
"string",
"null"
]
},
"italic": {
"description": "The path to the font file to be used for the \"italic\" variable of this font.",
"type": [
"string",
"null"
]
},
"normal": {
"description": "The path to the font file to be used for the \"normal\" variable of this font.",
"type": "string"
}
},
"additionalProperties": false
},
"ImageProtocol": {
"oneOf": [
{
"description": "Automatically detect the best image protocol to use.",
"type": "string",
"enum": [
"auto"
]
},
{
"description": "Use the iTerm2 image protocol.",
"type": "string",
"enum": [
"iterm2"
]
},
{
"description": "Use the iTerm2 image protocol in multipart mode.",
"type": "string",
"enum": [
"iterm2-multipart"
]
},
{
"description": "Use the kitty protocol in \"local\" mode, meaning both presenterm and the terminal run in the same host and can share the filesystem to communicate.",
"type": "string",
"enum": [
"kitty-local"
]
},
{
"description": "Use the kitty protocol in \"remote\" mode, meaning presenterm and the terminal run in different hosts and therefore can only communicate via terminal escape codes.",
"type": "string",
"enum": [
"kitty-remote"
]
},
{
"description": "Use the sixel protocol.",
"type": "string",
"enum": [
"sixel"
]
},
{
"description": "The default image protocol to use when no other is specified.",
"type": "string",
"enum": [
"ascii-blocks"
]
}
]
},
"IncrementalListsConfig": {
"description": "The configuration for lists when incremental lists are enabled.",
"type": "object",
"properties": {
"pause_after": {
"description": "Whether to pause after a list ends.",
"default": null,
"type": [
"boolean",
"null"
]
},
"pause_before": {
"description": "Whether to pause before a list begins.",
"default": null,
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false
},
"KeyBinding": {
"type": "string"
},
"KeyBindingsConfig": {
"type": "object",
"properties": {
"close_modal": {
"description": "The key binding to close the currently open modal.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"execute_code": {
"description": "The key binding to execute a piece of shell code.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"exit": {
"description": "The key binding to close the application.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"first_slide": {
"description": "The key binding to jump to the first slide.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"go_to_slide": {
"description": "The key binding to jump to a specific slide.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"last_slide": {
"description": "The key binding to jump to the last slide.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"next": {
"description": "The keys that cause the presentation to move forwards.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"next_fast": {
"description": "The keys that cause the presentation to jump to the next slide \"fast\".\n\n\"fast\" means for slides that contain pauses, we will skip all pauses and jump straight to the next slide.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"previous": {
"description": "The keys that cause the presentation to move backwards.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"previous_fast": {
"description": "The keys that cause the presentation to move backwards \"fast\".\n\n\"fast\" means for slides that contain pauses, we will skip all pauses and jump straight to the previous slide.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"reload": {
"description": "The key binding to reload the presentation.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"skip_pauses": {
"description": "The key binding to show the entire slide, after skipping any pauses in it.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"suspend": {
"description": "The key binding to suspend the application.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"toggle_bindings": {
"description": "The key binding to toggle the key bindings modal.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"toggle_layout_grid": {
"description": "The key binding to toggle the layout grid.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"toggle_slide_index": {
"description": "The key binding to toggle the slide index modal.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
}
},
"additionalProperties": false
},
"LanguageSnippetExecutionConfig": {
"description": "The snippet execution configuration for a specific programming language.",
"type": "object",
"required": [
"commands",
"filename"
],
"properties": {
"alternative": {
"description": "Alternative executors for this language.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/SnippetExecutorConfig"
}
},
"commands": {
"description": "The commands to be ran when executing snippets for this programming language.",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
},
"environment": {
"description": "The environment variables to set before invoking every command.",
"default": {},
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"filename": {
"description": "The filename to use for the snippet input file.",
"type": "string"
},
"hidden_line_prefix": {
"description": "The prefix to use to hide lines visually but still execute them.",
"type": [
"string",
"null"
]
}
}
},
"MaxColumnsAlignment": {
"description": "The alignment to use when `defaults.max_columns` is set.",
"oneOf": [
{
"description": "Align the presentation to the left.",
"type": "string",
"enum": [
"left"
]
},
{
"description": "Align the presentation on the center.",
"type": "string",
"enum": [
"center"
]
},
{
"description": "Align the presentation to the right.",
"type": "string",
"enum": [
"right"
]
}
]
},
"MaxRowsAlignment": {
"description": "The alignment to use when `defaults.max_rows` is set.",
"oneOf": [
{
"description": "Align the presentation to the top.",
"type": "string",
"enum": [
"top"
]
},
{
"description": "Align the presentation on the center.",
"type": "string",
"enum": [
"center"
]
},
{
"description": "Align the presentation to the bottom.",
"type": "string",
"enum": [
"bottom"
]
}
]
},
"MermaidConfig": {
"type": "object",
"properties": {
"config_path": {
"description": "A path to a mermaid JSON configuration file to be used by the `mmdc` tool.",
"type": [
"string",
"null"
]
},
"puppeteer_config_path": {
"description": "A path to a puppeteer JSON configuration file to be used by the `mmdc` tool.",
"type": [
"string",
"null"
]
},
"scale": {
"description": "The scaling parameter to be used in the mermaid CLI.",
"default": 2,
"type": "integer",
"format": "uint32",
"minimum": 0.0
}
},
"additionalProperties": false
},
"OptionsConfig": {
"type": "object",
"properties": {
"auto_render_languages": {
"description": "Assume snippets for these languages contain `+render` and render them automatically.",
"type": "array",
"items": {
"$ref": "#/definitions/SnippetLanguage"
}
},
"command_prefix": {
"description": "The prefix to use for commands.",
"type": [
"string",
"null"
]
},
"end_slide_shorthand": {
"description": "Whether to treat a thematic break as a slide end.",
"type": [
"boolean",
"null"
]
},
"h1_slide_titles": {
"description": "Whether the first `h1` header on a slide should be considered a slide title.",
"type": [
"boolean",
"null"
]
},
"image_attributes_prefix": {
"description": "The prefix to use for image attributes.",
"type": [
"string",
"null"
]
},
"implicit_slide_ends": {
"description": "Whether slides are automatically terminated when a slide title is found.",
"type": [
"boolean",
"null"
]
},
"incremental_lists": {
"description": "Show all lists incrementally, by implicitly adding pauses in between elements.",
"type": [
"boolean",
"null"
]
},
"list_item_newlines": {
"description": "The number of newlines in between list items.",
"type": [
"integer",
"null"
],
"format": "uint8",
"minimum": 1.0
},
"strict_front_matter_parsing": {
"description": "Whether to be strict about parsing the presentation's front matter.",
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false
},
"PauseExportPolicy": {
"description": "The policy for pauses when exporting.",
"oneOf": [
{
"description": "Whether to ignore pauses.",
"type": "string",
"enum": [
"ignore"
]
},
{
"description": "Create a new slide when a pause is found.",
"type": "string",
"enum": [
"new_slide"
]
}
]
},
"PdfExportConfig": {
"description": "The PDF export specific configs.",
"type": "object",
"properties": {
"fonts": {
"description": "The path to the font file to be used.",
"anyOf": [
{
"$ref": "#/definitions/ExportFontsConfig"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"SlideTransitionConfig": {
"type": "object",
"required": [
"animation"
],
"properties": {
"animation": {
"description": "The slide transition style.",
"allOf": [
{
"$ref": "#/definitions/SlideTransitionStyleConfig"
}
]
},
"duration_millis": {
"description": "The amount of time to take to perform the transition.",
"default": 1000,
"type": "integer",
"format": "uint16",
"minimum": 0.0
},
"frames": {
"description": "The number of frames in a transition.",
"default": 30,
"type": "integer",
"format": "uint",
"minimum": 0.0
}
},
"additionalProperties": false
},
"SlideTransitionStyleConfig": {
"oneOf": [
{
"description": "Slide horizontally.",
"type": "object",
"required": [
"style"
],
"properties": {
"style": {
"type": "string",
"enum": [
"slide_horizontal"
]
}
},
"additionalProperties": false
},
{
"description": "Fade the new slide into the previous one.",
"type": "object",
"required": [
"style"
],
"properties": {
"style": {
"type": "string",
"enum": [
"fade"
]
}
},
"additionalProperties": false
},
{
"description": "Collapse the current slide into the center of the screen.",
"type": "object",
"required": [
"style"
],
"properties": {
"style": {
"type": "string",
"enum": [
"collapse_horizontal"
]
}
},
"additionalProperties": false
}
]
},
"SnippetConfig": {
"type": "object",
"properties": {
"exec": {
"description": "The properties for snippet execution.",
"allOf": [
{
"$ref": "#/definitions/SnippetExecConfig"
}
]
},
"exec_replace": {
"description": "The properties for snippet execution.",
"allOf": [
{
"$ref": "#/definitions/SnippetExecReplaceConfig"
}
]
},
"render": {
"description": "The properties for snippet auto rendering.",
"allOf": [
{
"$ref": "#/definitions/SnippetRenderConfig"
}
]
},
"validate": {
"description": "Whether to validate snippets.",
"default": false,
"type": "boolean"
}
},
"additionalProperties": false
},
"SnippetExecConfig": {
"type": "object",
"properties": {
"custom": {
"description": "Custom snippet executors.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/LanguageSnippetExecutionConfig"
}
},
"enable": {
"description": "Whether to enable snippet execution.",
"default": false,
"type": "boolean"
}
},
"additionalProperties": false
},
"SnippetExecReplaceConfig": {
"type": "object",
"required": [
"enable"
],
"properties": {
"enable": {
"description": "Whether to enable snippet replace-executions, which automatically run code snippets without the user's intervention.",
"type": "boolean"
}
},
"additionalProperties": false
},
"SnippetExecutorConfig": {
"description": "A snippet executor configuration.",
"type": "object",
"required": [
"commands",
"filename"
],
"properties": {
"commands": {
"description": "The commands to be ran when executing snippets for this programming language.",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
},
"environment": {
"description": "The environment variables to set before invoking every command.",
"default": {},
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"filename": {
"description": "The filename to use for the snippet input file.",
"type": "string"
}
}
},
"SnippetLanguage": {
"description": "The language of a code snippet.",
"oneOf": [
{
"type": "string",
"enum": [
"Ada",
"Asp",
"Awk",
"Bash",
"BatchFile",
"C",
"CMake",
"Crontab",
"CSharp",
"Clojure",
"Cpp",
"Css",
"Dart",
"D2",
"DLang",
"Diff",
"Docker",
"Dotenv",
"Elixir",
"Elm",
"Erlang",
"File",
"Fish",
"FSharp",
"GdScript",
"Go",
"GraphQL",
"Haskell",
"Html",
"Java",
"JavaScript",
"Json",
"Jsonnet",
"Julia",
"Kotlin",
"Latex",
"Lua",
"Makefile",
"Mermaid",
"Markdown",
"Nix",
"Nushell",
"OCaml",
"Perl",
"Php",
"PowerShell",
"Protobuf",
"Puppet",
"Python",
"R",
"Racket",
"Ruby",
"Rust",
"RustScript",
"Scala",
"Shell",
"Sql",
"Swift",
"Svelte",
"Tcl",
"Terraform",
"Toml",
"TypeScript",
"TypeScriptReact",
"Typst",
"Xml",
"Yaml",
"Verilog",
"Vue",
"Wsl",
"Zig",
"Zsh"
]
},
{
"type": "object",
"required": [
"Unknown"
],
"properties": {
"Unknown": {
"type": "string"
}
},
"additionalProperties": false
}
]
},
"SnippetRenderConfig": {
"type": "object",
"properties": {
"threads": {
"description": "The number of threads to use when rendering.",
"default": 2,
"type": "integer",
"format": "uint",
"minimum": 0.0
}
},
"additionalProperties": false
},
"SnippetsExportPolicy": {
"description": "The policy for executable snippets when exporting.",
"oneOf": [
{
"description": "Render all executable snippets in parallel.",
"type": "string",
"enum": [
"parallel"
]
},
{
"description": "Render all executable snippets sequentially.",
"type": "string",
"enum": [
"sequential"
]
}
]
},
"SpeakerNotesConfig": {
"type": "object",
"properties": {
"always_publish": {
"description": "Whether to always publish speaker notes.",
"default": false,
"type": "boolean"
},
"listen_address": {
"description": "The address in which to listen for speaker note events.",
"default": "127.255.255.255:59418",
"type": "string"
},
"publish_address": {
"description": "The address in which to publish speaker notes events.",
"default": "127.255.255.255:59418",
"type": "string"
}
},
"additionalProperties": false
},
"ThemeConfig": {
"anyOf": [
{
"type": "null"
},
{
"description": "Theme of the presentation.",
"type": "string"
},
{
"description": "Automatic dark/light theme switch based on the terminal background luminance.",
"type": "object",
"required": [
"dark",
"light"
],
"properties": {
"dark": {
"description": "Dark theme of the presentation.",
"type": "string"
},
"light": {
"description": "Light theme of the presentation.",
"type": "string"
},
"timeout": {
"description": "Light/Dark detection timeout in ms.",
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 1.0
}
},
"additionalProperties": false
}
]
},
"TypstConfig": {
"type": "object",
"properties": {
"ppi": {
"description": "The pixels per inch when rendering latex/typst formulas.",
"default": 300,
"type": "integer",
"format": "uint32",
"minimum": 0.0
}
},
"additionalProperties": false
},
"ValidateOverflows": {
"type": "string",
"enum": [
"never",
"always",
"when_presenting",
"when_developing"
]
}
}
}