| { |
| "$schema": "http://json-schema.org/draft-07/schema#", |
| "type": "object", |
| "properties": { |
| "$schema": { |
| "type": "string", |
| "description": "JSON schema reference for configuration validation" |
| }, |
| "defs": { |
| "type": "object", |
| "description": "Color definitions that can be referenced in the theme", |
| "patternProperties": { |
| "^[a-zA-Z][a-zA-Z0-9_]*$": { |
| "oneOf": [ |
| { |
| "type": "string", |
| "pattern": "^#[0-9a-fA-F]{6}$", |
| "description": "Hex color value" |
| }, |
| { |
| "type": "integer", |
| "minimum": 0, |
| "maximum": 255, |
| "description": "ANSI color code (0-255)" |
| }, |
| { |
| "type": "string", |
| "enum": ["none"], |
| "description": "No color (uses terminal default)" |
| } |
| ] |
| } |
| }, |
| "additionalProperties": false |
| }, |
| "theme": { |
| "type": "object", |
| "description": "Theme color definitions", |
| "properties": { |
| "primary": { "$ref": "#/definitions/colorValue" }, |
| "secondary": { "$ref": "#/definitions/colorValue" }, |
| "accent": { "$ref": "#/definitions/colorValue" }, |
| "error": { "$ref": "#/definitions/colorValue" }, |
| "warning": { "$ref": "#/definitions/colorValue" }, |
| "success": { "$ref": "#/definitions/colorValue" }, |
| "info": { "$ref": "#/definitions/colorValue" }, |
| "text": { "$ref": "#/definitions/colorValue" }, |
| "textMuted": { "$ref": "#/definitions/colorValue" }, |
| "background": { "$ref": "#/definitions/colorValue" }, |
| "backgroundPanel": { "$ref": "#/definitions/colorValue" }, |
| "backgroundElement": { "$ref": "#/definitions/colorValue" }, |
| "border": { "$ref": "#/definitions/colorValue" }, |
| "borderActive": { "$ref": "#/definitions/colorValue" }, |
| "borderSubtle": { "$ref": "#/definitions/colorValue" }, |
| "diffAdded": { "$ref": "#/definitions/colorValue" }, |
| "diffRemoved": { "$ref": "#/definitions/colorValue" }, |
| "diffContext": { "$ref": "#/definitions/colorValue" }, |
| "diffHunkHeader": { "$ref": "#/definitions/colorValue" }, |
| "diffHighlightAdded": { "$ref": "#/definitions/colorValue" }, |
| "diffHighlightRemoved": { "$ref": "#/definitions/colorValue" }, |
| "diffAddedBg": { "$ref": "#/definitions/colorValue" }, |
| "diffRemovedBg": { "$ref": "#/definitions/colorValue" }, |
| "diffContextBg": { "$ref": "#/definitions/colorValue" }, |
| "diffLineNumber": { "$ref": "#/definitions/colorValue" }, |
| "diffAddedLineNumberBg": { "$ref": "#/definitions/colorValue" }, |
| "diffRemovedLineNumberBg": { "$ref": "#/definitions/colorValue" }, |
| "markdownText": { "$ref": "#/definitions/colorValue" }, |
| "markdownHeading": { "$ref": "#/definitions/colorValue" }, |
| "markdownLink": { "$ref": "#/definitions/colorValue" }, |
| "markdownLinkText": { "$ref": "#/definitions/colorValue" }, |
| "markdownCode": { "$ref": "#/definitions/colorValue" }, |
| "markdownBlockQuote": { "$ref": "#/definitions/colorValue" }, |
| "markdownEmph": { "$ref": "#/definitions/colorValue" }, |
| "markdownStrong": { "$ref": "#/definitions/colorValue" }, |
| "markdownHorizontalRule": { "$ref": "#/definitions/colorValue" }, |
| "markdownListItem": { "$ref": "#/definitions/colorValue" }, |
| "markdownListEnumeration": { "$ref": "#/definitions/colorValue" }, |
| "markdownImage": { "$ref": "#/definitions/colorValue" }, |
| "markdownImageText": { "$ref": "#/definitions/colorValue" }, |
| "markdownCodeBlock": { "$ref": "#/definitions/colorValue" }, |
| "syntaxComment": { "$ref": "#/definitions/colorValue" }, |
| "syntaxKeyword": { "$ref": "#/definitions/colorValue" }, |
| "syntaxFunction": { "$ref": "#/definitions/colorValue" }, |
| "syntaxVariable": { "$ref": "#/definitions/colorValue" }, |
| "syntaxString": { "$ref": "#/definitions/colorValue" }, |
| "syntaxNumber": { "$ref": "#/definitions/colorValue" }, |
| "syntaxType": { "$ref": "#/definitions/colorValue" }, |
| "syntaxOperator": { "$ref": "#/definitions/colorValue" }, |
| "syntaxPunctuation": { "$ref": "#/definitions/colorValue" } |
| }, |
| "required": ["primary", "secondary", "accent", "text", "textMuted", "background"], |
| "additionalProperties": false |
| } |
| }, |
| "required": ["theme"], |
| "additionalProperties": false, |
| "definitions": { |
| "colorValue": { |
| "oneOf": [ |
| { |
| "type": "string", |
| "pattern": "^#[0-9a-fA-F]{6}$", |
| "description": "Hex color value (same for dark and light)" |
| }, |
| { |
| "type": "integer", |
| "minimum": 0, |
| "maximum": 255, |
| "description": "ANSI color code (0-255, same for dark and light)" |
| }, |
| { |
| "type": "string", |
| "enum": ["none"], |
| "description": "No color (uses terminal default)" |
| }, |
| { |
| "type": "string", |
| "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", |
| "description": "Reference to another color in the theme or defs" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "dark": { |
| "oneOf": [ |
| { |
| "type": "string", |
| "pattern": "^#[0-9a-fA-F]{6}$", |
| "description": "Hex color value for dark mode" |
| }, |
| { |
| "type": "integer", |
| "minimum": 0, |
| "maximum": 255, |
| "description": "ANSI color code for dark mode" |
| }, |
| { |
| "type": "string", |
| "enum": ["none"], |
| "description": "No color (uses terminal default)" |
| }, |
| { |
| "type": "string", |
| "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", |
| "description": "Reference to another color for dark mode" |
| } |
| ] |
| }, |
| "light": { |
| "oneOf": [ |
| { |
| "type": "string", |
| "pattern": "^#[0-9a-fA-F]{6}$", |
| "description": "Hex color value for light mode" |
| }, |
| { |
| "type": "integer", |
| "minimum": 0, |
| "maximum": 255, |
| "description": "ANSI color code for light mode" |
| }, |
| { |
| "type": "string", |
| "enum": ["none"], |
| "description": "No color (uses terminal default)" |
| }, |
| { |
| "type": "string", |
| "pattern": "^[a-zA-Z][a-zA-Z0-9_]*$", |
| "description": "Reference to another color for light mode" |
| } |
| ] |
| } |
| }, |
| "required": ["dark", "light"], |
| "additionalProperties": false, |
| "description": "Separate colors for dark and light modes" |
| } |
| ] |
| } |
| } |
| } |
|
|