mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-11-14 21:04:04 +01:00
komorebi.json is described as a JSON Schema, made from the Rust types that read it: komorebic prints the schema of komorebi.json, of an applications.json, of a notification and of a message, and the daemon answers the same four questions on its socket. schema.json and schema.asc.json are committed (just jsonschema). The module's config option is typed from the schema: schemars-nixgen makes nix/komorebi-options.nix from schema.json (just nixgen), so a layout komorebi does not have, or a value of the wrong kind, does not evaluate. The module writes config as a komorebi.json and gives it to the daemon with --config. configFile and the file the module writes are checked against the schema when the system is built. applicationSpecificConfiguration takes files from GitHub, and there are none by default, since no community file for Plasma is known. Two checks keep the generated files honest without the tools that make them. schema-fresh compares the schemas with what komorebic prints, and the hash on the first line of the options with the schema. nix-options-validation evaluates the options against the example configuration, written in Nix and in JSON. nixos-module-eval also evaluates the module with the sources turned off: with applicationSpecificConfiguration.enable = false the sources are left out of the config that is written, and with no config either there is nothing to write and the unit passes no --config. ARCHITECTURE has the guarantee row that names the two checks.
202 lines
4.9 KiB
JSON
202 lines
4.9 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"title": "ApplicationSpecificConfiguration",
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/AscApplicationRulesOrSchema"
|
|
},
|
|
"$defs": {
|
|
"ApplicationIdentifier": {
|
|
"description": "Application identifier",
|
|
"oneOf": [
|
|
{
|
|
"description": "Executable name",
|
|
"type": "string",
|
|
"const": "Exe"
|
|
},
|
|
{
|
|
"description": "Role or subrole",
|
|
"type": "string",
|
|
"const": "Class"
|
|
},
|
|
{
|
|
"description": "Window title",
|
|
"type": "string",
|
|
"const": "Title"
|
|
},
|
|
{
|
|
"description": "Executable path",
|
|
"type": "string",
|
|
"const": "Path"
|
|
}
|
|
]
|
|
},
|
|
"AscApplicationRules": {
|
|
"description": "Rules that determine how an application is handled",
|
|
"type": "object",
|
|
"properties": {
|
|
"floating": {
|
|
"description": "Rules to manage specific windows as floating windows",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/$defs/MatchingRule"
|
|
}
|
|
},
|
|
"ignore": {
|
|
"description": "Rules to ignore specific windows",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/$defs/MatchingRule"
|
|
}
|
|
},
|
|
"manage": {
|
|
"description": "Rules to forcibly manage specific windows",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/$defs/MatchingRule"
|
|
}
|
|
},
|
|
"tabbed": {
|
|
"description": "Rules to identify applications which are title-less - only accepts Simple Exe rules",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/$defs/MatchingRule"
|
|
}
|
|
},
|
|
"titleless": {
|
|
"description": "Rules to identify applications which are title-less - only accepts Simple Exe rules",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/$defs/MatchingRule"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"AscApplicationRulesOrSchema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/AscApplicationRules"
|
|
},
|
|
{
|
|
"type": "string"
|
|
}
|
|
]
|
|
},
|
|
"IdWithIdentifier": {
|
|
"description": "Rule for matching applications",
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"description": "Target identifier",
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"description": "Kind of identifier to target",
|
|
"$ref": "#/$defs/ApplicationIdentifier"
|
|
},
|
|
"matching_strategy": {
|
|
"description": "Matching strategy to use",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/MatchingStrategy"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"id"
|
|
]
|
|
},
|
|
"MatchingRule": {
|
|
"description": "Rule for matching applications",
|
|
"anyOf": [
|
|
{
|
|
"description": "Simple matching rule which must evaluate to true",
|
|
"$ref": "#/$defs/IdWithIdentifier"
|
|
},
|
|
{
|
|
"description": "Composite matching rule where all conditions must evaluate to true",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/IdWithIdentifier"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"MatchingStrategy": {
|
|
"description": "Strategy for matching identifiers",
|
|
"oneOf": [
|
|
{
|
|
"description": "Should not be used, only kept for backward compatibility",
|
|
"type": "string",
|
|
"const": "Legacy"
|
|
},
|
|
{
|
|
"description": "Equals",
|
|
"type": "string",
|
|
"const": "Equals"
|
|
},
|
|
{
|
|
"description": "Starts With",
|
|
"type": "string",
|
|
"const": "StartsWith"
|
|
},
|
|
{
|
|
"description": "Ends With",
|
|
"type": "string",
|
|
"const": "EndsWith"
|
|
},
|
|
{
|
|
"description": "Contains",
|
|
"type": "string",
|
|
"const": "Contains"
|
|
},
|
|
{
|
|
"description": "Regex",
|
|
"type": "string",
|
|
"const": "Regex"
|
|
},
|
|
{
|
|
"description": "Does not end with",
|
|
"type": "string",
|
|
"const": "DoesNotEndWith"
|
|
},
|
|
{
|
|
"description": "Does not start with",
|
|
"type": "string",
|
|
"const": "DoesNotStartWith"
|
|
},
|
|
{
|
|
"description": "Does not equal",
|
|
"type": "string",
|
|
"const": "DoesNotEqual"
|
|
},
|
|
{
|
|
"description": "Does not contain",
|
|
"type": "string",
|
|
"const": "DoesNotContain"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|