mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-15 07:44:01 -04:00
251 lines
8.0 KiB
JSON
251 lines
8.0 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://danklinux.com/schemas/plugin.json",
|
|
"title": "DankMaterialShell Plugin Manifest",
|
|
"description": "Schema for DankMaterialShell plugin.json manifest files",
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"description",
|
|
"version",
|
|
"author",
|
|
"type",
|
|
"capabilities"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Unique plugin identifier (camelCase, no spaces)",
|
|
"pattern": "^[a-zA-Z][a-zA-Z0-9]*$"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Human-readable plugin name",
|
|
"minLength": 1
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Short description of plugin functionality",
|
|
"minLength": 1
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"description": "Semantic version string (e.g., '1.0.0')",
|
|
"pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?(\\+[a-zA-Z0-9.-]+)?$"
|
|
},
|
|
"author": {
|
|
"type": "string",
|
|
"description": "Plugin creator name or email",
|
|
"minLength": 1
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Plugin type. Use 'composite' (or any value) together with 'components' to provide multiple surfaces from one plugin.",
|
|
"enum": ["widget", "daemon", "launcher", "desktop", "dash", "dashCard", "composite"]
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"description": "Array of plugin capabilities",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"minItems": 1
|
|
},
|
|
"component": {
|
|
"type": "string",
|
|
"description": "Relative path to main QML component file. Required unless 'components' is provided.",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"components": {
|
|
"type": "object",
|
|
"description": "Map of surface name to relative QML component path, for multi-surface (composite) plugins. Provide any subset of surfaces; each is loaded independently.",
|
|
"properties": {
|
|
"widget": {
|
|
"type": "string",
|
|
"description": "Bar/Control Center widget component (PluginComponent)",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"desktop": {
|
|
"type": "string",
|
|
"description": "Desktop widget component",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"daemon": {
|
|
"type": "string",
|
|
"description": "Background daemon component (instantiated once)",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"launcher": {
|
|
"type": "string",
|
|
"description": "Launcher provider component (requires 'trigger')",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"dash": {
|
|
"type": "string",
|
|
"description": "Dashboard tab component (DashTabComponent)",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"dashCard": {
|
|
"type": "string",
|
|
"description": "Dashboard overview card component (DashCardComponent)",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
}
|
|
},
|
|
"additionalProperties": false,
|
|
"minProperties": 1
|
|
},
|
|
"dash": {
|
|
"type": "object",
|
|
"description": "Presentation for the dashboard surfaces. Falls back to 'icon' and 'name'.",
|
|
"properties": {
|
|
"icon": {
|
|
"type": "string",
|
|
"description": "Material icon for the dashboard tab"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Tab label"
|
|
},
|
|
"card": {
|
|
"type": "object",
|
|
"description": "Overview card presentation and default size in grid units. Widths are clamped to the user's column count (3 to 8).",
|
|
"properties": {
|
|
"icon": { "type": "string" },
|
|
"title": { "type": "string" },
|
|
"w": { "type": "integer", "minimum": 1, "maximum": 8 },
|
|
"h": { "type": "integer", "minimum": 1 },
|
|
"minW": { "type": "integer", "minimum": 1, "maximum": 8 },
|
|
"minH": { "type": "integer", "minimum": 1 },
|
|
"maxW": { "type": "integer", "minimum": 1, "maximum": 8 },
|
|
"maxH": { "type": "integer", "minimum": 1 }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"options": {
|
|
"type": "array",
|
|
"description": "User options shown in the dashboard options sheet and Settings > Dashboard; values reach the tab and card as `options.<key>`",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["key", "type"],
|
|
"properties": {
|
|
"key": { "type": "string", "not": { "const": "widgets" }, "description": "Option key, read as options.<key>. 'widgets' is reserved for DashWidgetGrid layouts" },
|
|
"text": { "type": "string", "description": "Row label, translated through the plugin catalog" },
|
|
"description": { "type": "string", "description": "Secondary text under a toggle row, translated through the plugin catalog" },
|
|
"type": { "type": "string", "enum": ["toggle", "choice", "number"] },
|
|
"def": { "description": "Default value: boolean for toggle, choice value for choice, number for number" },
|
|
"choices": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["value"],
|
|
"properties": {
|
|
"value": { "type": "string" },
|
|
"text": { "type": "string" }
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"min": { "type": "number" },
|
|
"max": { "type": "number" },
|
|
"step": { "type": "number", "exclusiveMinimum": 0 },
|
|
"unit": { "type": "string" },
|
|
"cardOnly": { "type": "boolean", "description": "Leave the option out of the tab's options sheet, for options that only the overview card reads" }
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"trigger": {
|
|
"type": "string",
|
|
"description": "Trigger string for launcher activation (required for launcher type)"
|
|
},
|
|
"icon": {
|
|
"type": "string",
|
|
"description": "Material Design icon name"
|
|
},
|
|
"settings": {
|
|
"type": "string",
|
|
"description": "Path to settings component QML file",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"startupCheck": {
|
|
"type": "string",
|
|
"description": "Path to a non-visual (QtObject) component exposing a check(done) function that gates activation. done(null) allows; done(error) blocks, where error is a string or { title, details }.",
|
|
"pattern": "^\\./.*\\.qml$"
|
|
},
|
|
"requires_dms": {
|
|
"type": "string",
|
|
"description": "Minimum DMS version requirement (e.g., '>=0.1.18', '>0.1.0')",
|
|
"pattern": "^(>=?|<=?|=|>|<)\\d+\\.\\d+\\.\\d+$"
|
|
},
|
|
"dependencies": {
|
|
"type": "array",
|
|
"description": "Array of required system tools/dependencies (registry metadata)",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"requires": {
|
|
"type": "array",
|
|
"description": "Deprecated alias for 'dependencies'.",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"permissions": {
|
|
"type": "array",
|
|
"description": "Required capabilities",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"settings_read",
|
|
"settings_write",
|
|
"process",
|
|
"network"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "launcher"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": ["trigger"]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"required": ["components"],
|
|
"properties": {
|
|
"components": {
|
|
"required": ["launcher"]
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"required": ["trigger"]
|
|
}
|
|
},
|
|
{
|
|
"anyOf": [
|
|
{
|
|
"required": ["component"]
|
|
},
|
|
{
|
|
"required": ["components"]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"additionalProperties": true
|
|
}
|