Skip to content

Commit

Permalink
Merge pull request #228 from mikavilpas/configuration-json-schema
Browse files Browse the repository at this point in the history
feat(config): add JSON schema for validation,completion,documentation
  • Loading branch information
mfontanini authored Mar 31, 2024
2 parents cea460b + da8cdbf commit aa9f35f
Show file tree
Hide file tree
Showing 7 changed files with 364 additions and 12 deletions.
42 changes: 42 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ merge-struct = "0.1.0"
itertools = "0.12"
once_cell = "1.19"
rand = "0.8.5"
schemars = "0.8.16"
semver = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.9"
Expand Down
7 changes: 4 additions & 3 deletions config.sample.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# yaml-language-server: $schema=./schema.json
defaults:
# override the terminal font size when in windows or when using sixel.
terminal_font_size: 16

# the theme to use by default in every presentation unless overridden.
theme: dark
theme: dark

# the image protocol to use.
image_protocol: kitty-local
Expand Down Expand Up @@ -53,10 +54,10 @@ bindings:
reload: ["<c-r>"]

# the key binding to toggle the slide index modal.
toggle_slide_index: ["<c-p>"]
toggle_slide_index: ["<c-p>"]

# the key binding to toggle the key bindings modal.
toggle_bindings: ["?"]
toggle_bindings: ["?"]

# the key binding to close the currently open modal.
close_modal: ["<esc>"]
Expand Down
263 changes: 263 additions & 0 deletions schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Config",
"type": "object",
"properties": {
"bindings": {
"$ref": "#/definitions/KeyBindingsConfig"
},
"defaults": {
"description": "The default configuration for the presentation.",
"allOf": [
{
"$ref": "#/definitions/DefaultsConfig"
}
]
},
"options": {
"$ref": "#/definitions/OptionsConfig"
},
"typst": {
"allOf": [
{
"$ref": "#/definitions/TypstConfig"
}
],
"minimum": 1.0
}
},
"additionalProperties": false,
"definitions": {
"DefaultsConfig": {
"type": "object",
"properties": {
"image_protocol": {
"description": "The image protocol to use.",
"allOf": [
{
"$ref": "#/definitions/ImageProtocol"
}
]
},
"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.",
"type": [
"string",
"null"
]
},
"validate_overflows": {
"description": "Validate that the presentation does not overflow the terminal screen.",
"allOf": [
{
"$ref": "#/definitions/ValidateOverflows"
}
]
}
},
"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 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. Note that this requires compiling presenterm using the --features sixel flag.",
"type": "string",
"enum": [
"sixel"
]
},
{
"description": "The default image protocol to use when no other is specified.",
"type": "string",
"enum": [
"ascii-blocks"
]
}
]
},
"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"
}
},
"previous": {
"description": "The keys that cause the presentation to move backwards.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
},
"reload": {
"description": "The key binding to reload the presentation.",
"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_slide_index": {
"description": "The key binding to toggle the slide index modal.",
"type": "array",
"items": {
"$ref": "#/definitions/KeyBinding"
}
}
},
"additionalProperties": false
},
"OptionsConfig": {
"type": "object",
"properties": {
"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"
]
},
"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"
]
},
"strict_front_matter_parsing": {
"description": "Whether to be strict about parsing the presentation's front matter.",
"type": [
"boolean",
"null"
]
}
},
"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"
]
}
}
}
Loading

0 comments on commit aa9f35f

Please sign in to comment.