mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-01-17 06:16:36 +01:00
This commit is an implementation of a static JSON configuration loader. An example komorebi.json configuration file has been added. The application-specific configurations can be loaded directly from a file, and workspace configuration can be defined declaratively in the JSON. Individual rules etc. can also be added directly in the static configuration as one-offs. A JSONSchema can be generated using komorebic's static-config-schema command. This should be added to something like SchemaStore later. Loading from static configuration is significantly faster on startup, as the lock does not have to be reacquired for every command that is sent over the socket. When loading configuration from a static JSON file, a hotwatch instance will automatically be created to listen to file changes and apply any updates to both the global and window manager configuration state. A new --whkd flag has been added to the komorebic start command to optionally start whkd in a background process. A new komorebic command 'generate-static-config' has been added to help existing users migrate to a static JSON config file. Currently, custom layout file path information can not be automatically populated in the output of this command and must be added manually by the user if required. A new komorebic command 'fetch-asc' has been added to help users update to the latest version of the application-specific configurations in-place. re #427
574 lines
14 KiB
JSON
574 lines
14 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "StaticConfig",
|
|
"type": "object",
|
|
"properties": {
|
|
"active_window_border": {
|
|
"description": "Display an active window border (default: false)",
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
]
|
|
},
|
|
"active_window_border_colours": {
|
|
"description": "Active window border colours for different container types",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/ActiveWindowBorderColours"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"alt_focus_hack": {
|
|
"description": "Always send the ALT key when using focus commands (default: false)",
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
]
|
|
},
|
|
"app_specific_configuration_path": {
|
|
"description": "Path to applications.yaml from komorebi-application-specific-configurations (default: None)",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"border_offset": {
|
|
"description": "Offset of the active window border (default: None)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/Rect"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"border_overflow_applications": {
|
|
"description": "Identify border overflow applications",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"border_width": {
|
|
"description": "Width of the active window border (default: 20)",
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"cross_monitor_move_behaviour": {
|
|
"description": "Determine what happens when a window is moved across a monitor boundary (default: Swap)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/MoveBehaviour"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"default_container_padding": {
|
|
"description": "Global default container padding (default: 10)",
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"default_workspace_padding": {
|
|
"description": "Global default workspace padding (default: 10)",
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"float_rules": {
|
|
"description": "Individual window floating rules",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"focus_follows_mouse": {
|
|
"description": "Determine focus follows mouse implementation (default: None)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/FocusFollowsMouseImplementation"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"global_work_area_offset": {
|
|
"description": "Global work area (space used for tiling) offset (default: None)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/Rect"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"invisible_borders": {
|
|
"description": "Dimensions of Windows' own invisible borders; don't set these yourself unless you are told to",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/Rect"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"layered_applications": {
|
|
"description": "Identify applications that have the WS_EX_LAYERED extended window style",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"manage_rules": {
|
|
"description": "Individual window force-manage rules",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"monitors": {
|
|
"description": "Monitor and workspace configurations",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/MonitorConfig"
|
|
}
|
|
},
|
|
"mouse_follows_focus": {
|
|
"description": "Enable or disable mouse follows focus (default: true)",
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
]
|
|
},
|
|
"object_name_change_applications": {
|
|
"description": "Identify applications that send EVENT_OBJECT_NAMECHANGE on launch (very rare)",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"resize_delta": {
|
|
"description": "Delta to resize windows by (default 50)",
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"tray_and_multi_window_applications": {
|
|
"description": "Identify tray and multi-window applications",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"unmanaged_window_operation_behaviour": {
|
|
"description": "Determine what happens when commands are sent while an unmanaged window is in the foreground (default: Op)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/OperationBehaviour"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"window_container_behaviour": {
|
|
"description": "Determine what happens when a new window is opened (default: Create)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/WindowContainerBehaviour"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"window_hiding_behaviour": {
|
|
"description": "Which Windows signal to use when hiding windows (default: minimize)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/HidingBehaviour"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"definitions": {
|
|
"ActiveWindowBorderColours": {
|
|
"type": "object",
|
|
"required": [
|
|
"monocle",
|
|
"single",
|
|
"stack"
|
|
],
|
|
"properties": {
|
|
"monocle": {
|
|
"description": "Border colour when the container is in monocle mode",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/Rgb"
|
|
}
|
|
]
|
|
},
|
|
"single": {
|
|
"description": "Border colour when the container contains a single window",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/Rgb"
|
|
}
|
|
]
|
|
},
|
|
"stack": {
|
|
"description": "Border colour when the container contains multiple windows",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/Rgb"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"ApplicationIdentifier": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Exe",
|
|
"Class",
|
|
"Title"
|
|
]
|
|
},
|
|
"DefaultLayout": {
|
|
"type": "string",
|
|
"enum": [
|
|
"BSP",
|
|
"Columns",
|
|
"Rows",
|
|
"VerticalStack",
|
|
"HorizontalStack",
|
|
"UltrawideVerticalStack"
|
|
]
|
|
},
|
|
"FocusFollowsMouseImplementation": {
|
|
"oneOf": [
|
|
{
|
|
"description": "A custom FFM implementation (slightly more CPU-intensive)",
|
|
"type": "string",
|
|
"enum": [
|
|
"Komorebi"
|
|
]
|
|
},
|
|
{
|
|
"description": "The native (legacy) Windows FFM implementation",
|
|
"type": "string",
|
|
"enum": [
|
|
"Windows"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"HidingBehaviour": {
|
|
"oneOf": [
|
|
{
|
|
"description": "Use the SW_HIDE flag to hide windows when switching workspaces (has issues with Electron apps)",
|
|
"type": "string",
|
|
"enum": [
|
|
"Hide"
|
|
]
|
|
},
|
|
{
|
|
"description": "Use the SW_MINIMIZE flag to hide windows when switching workspaces (has issues with frequent workspace switching)",
|
|
"type": "string",
|
|
"enum": [
|
|
"Minimize"
|
|
]
|
|
},
|
|
{
|
|
"description": "Use the undocumented SetCloak Win32 function to hide windows when switching workspaces (has foregrounding issues)",
|
|
"type": "string",
|
|
"enum": [
|
|
"Cloak"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"IdWithIdentifier": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"kind"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"kind": {
|
|
"$ref": "#/definitions/ApplicationIdentifier"
|
|
}
|
|
}
|
|
},
|
|
"MonitorConfig": {
|
|
"type": "object",
|
|
"required": [
|
|
"workspaces"
|
|
],
|
|
"properties": {
|
|
"work_area_offset": {
|
|
"description": "Monitor-specific work area offset (default: None)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/Rect"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"workspaces": {
|
|
"description": "Workspace configurations",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/WorkspaceConfig"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"MoveBehaviour": {
|
|
"oneOf": [
|
|
{
|
|
"description": "Swap the window container with the window container at the edge of the adjacent monitor",
|
|
"type": "string",
|
|
"enum": [
|
|
"Swap"
|
|
]
|
|
},
|
|
{
|
|
"description": "Insert the window container into the focused workspace on the adjacent monitor",
|
|
"type": "string",
|
|
"enum": [
|
|
"Insert"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"OperationBehaviour": {
|
|
"oneOf": [
|
|
{
|
|
"description": "Process komorebic commands on temporarily unmanaged/floated windows",
|
|
"type": "string",
|
|
"enum": [
|
|
"Op"
|
|
]
|
|
},
|
|
{
|
|
"description": "Ignore komorebic commands on temporarily unmanaged/floated windows",
|
|
"type": "string",
|
|
"enum": [
|
|
"NoOp"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"Rect": {
|
|
"type": "object",
|
|
"required": [
|
|
"bottom",
|
|
"left",
|
|
"right",
|
|
"top"
|
|
],
|
|
"properties": {
|
|
"bottom": {
|
|
"description": "The bottom point in a Win32 Rect",
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"left": {
|
|
"description": "The left point in a Win32 Rect",
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"right": {
|
|
"description": "The right point in a Win32 Rect",
|
|
"type": "integer",
|
|
"format": "int32"
|
|
},
|
|
"top": {
|
|
"description": "The top point in a Win32 Rect",
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"Rgb": {
|
|
"type": "object",
|
|
"required": [
|
|
"b",
|
|
"g",
|
|
"r"
|
|
],
|
|
"properties": {
|
|
"b": {
|
|
"description": "Blue",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"g": {
|
|
"description": "Green",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
},
|
|
"r": {
|
|
"description": "Red",
|
|
"type": "integer",
|
|
"format": "uint32",
|
|
"minimum": 0.0
|
|
}
|
|
}
|
|
},
|
|
"WindowContainerBehaviour": {
|
|
"oneOf": [
|
|
{
|
|
"description": "Create a new container for each new window",
|
|
"type": "string",
|
|
"enum": [
|
|
"Create"
|
|
]
|
|
},
|
|
{
|
|
"description": "Append new windows to the focused window container",
|
|
"type": "string",
|
|
"enum": [
|
|
"Append"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"WorkspaceConfig": {
|
|
"type": "object",
|
|
"required": [
|
|
"name"
|
|
],
|
|
"properties": {
|
|
"container_padding": {
|
|
"description": "Container padding (default: global)",
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"custom_layout": {
|
|
"description": "Custom Layout (default: None)",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"custom_layout_rules": {
|
|
"description": "Layout rules (default: None)",
|
|
"type": [
|
|
"object",
|
|
"null"
|
|
],
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"initial_workspace_rules": {
|
|
"description": "Initial workspace application rules",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
},
|
|
"layout": {
|
|
"description": "Layout (default: BSP)",
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/DefaultLayout"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"layout_rules": {
|
|
"description": "Layout rules (default: None)",
|
|
"type": [
|
|
"object",
|
|
"null"
|
|
],
|
|
"additionalProperties": {
|
|
"$ref": "#/definitions/DefaultLayout"
|
|
}
|
|
},
|
|
"name": {
|
|
"description": "Name",
|
|
"type": "string"
|
|
},
|
|
"workspace_padding": {
|
|
"description": "Container padding (default: global)",
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"workspace_rules": {
|
|
"description": "Permanent workspace application rules",
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
],
|
|
"items": {
|
|
"$ref": "#/definitions/IdWithIdentifier"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |