1
0
Fork 0
forked from wry/wry
wry/toml-spec/spec/spec.yaml
2025-04-25 17:18:49 +02:00

3002 lines
81 KiB
YAML

Keymap:
description: |
A keymap.
kind: variable
variants:
- kind: string
description: |
Defines a keymap by its XKB representation.
- Example:
```toml
keymap = """
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)" };
};
"""
```
- kind: table
description: |
Defines or references a keymap.
- Example:
```toml
keymap.name = "my-keymap"
[[keymaps]]
name = "my-keymap"
path = "./my-keymap.xkb"
```
fields:
name:
kind: string
required: false
description: |
Defines a keymap name or references a defined keymap.
If the value is set in the top-level `keymaps` array, it defines a named
keymap.
Otherwise it references a named keymap that should have been defined in the
`keymaps` array.
map:
kind: string
required: false
description: |
Defines a keymap by its XKB representation.
For each keymap defined in the top-level `keymaps` array, exactly one of `map`
and `path` has to be defined.
path:
kind: string
required: false
description: |
Loads a keymap's XKB representation from a file.
If the path is relative, it will be interpreted relative to the Jay config
directory.
For each keymap defined in the top-level `keymaps` array, exactly one of `map`
and `path` has to be defined.
Action:
description: |
An `Action` is an action performed by the compositor.
- Example:
```toml
[shortcuts]
alt-q = "quit"
```
kind: variable
variants:
- kind: string
ref: SimpleActionName
description: |
The value should be the name of a `simple` action. See the description of that
variant for more details.
- Example:
```toml
[shortcuts]
alt-q = "quit"
```
- kind: string
pattern: "^\\$.*$"
description: |
The value should be the name of a `named` action, prefixed with the `$` character.
This is the same as using the `named` action with the `$` removed.
- Example:
```toml
[actions]
q = "quit"
[shortcuts]
alt-q = "$q"
```
- kind: array
items:
ref: Action
description: |
A list of actions to execute in sequence.
- Example:
```toml
[shortcuts]
alt-q = [
{ type = "exec", exec = ["notify-send", "exiting"] },
"quit",
]
```
- kind: table
description: ''
types:
simple:
description: |
A simple action that takes no arguments. These are usually written as plain
strings instead.
- Example 1:
```toml
[shortcuts]
alt-q = { type = "simple", cmd = "quit" }
```
- Example 2:
```toml
[shortcuts]
alt-q = "quit"
```
fields:
cmd:
description: The simple action to execute.
required: true
ref: SimpleActionName
named:
description: |
A named action that was defined via the top-level `actions` table or a
`define-action` action. These are usually written as plain strings with a `$`
prefix.
- Example 1:
```toml
[actions]
my-action = "quit"
[shortcuts]
alt-q = { type = "named", name = "my-action" }
```
- Example 2:
```toml
[shortcuts]
alt-q = [
{ type = "define-action", name = "my-action", action = "quit" },
{ type = "named", name = "my-action" },
]
```
fields:
name:
kind: string
description: The named action to execute.
required: true
multi:
description: |
A list of actions to execute in sequence. These are usually written as plain
arrays instead.
- Example 1:
```toml
[shortcuts]
alt-q = { type = "multi", actions = ["quit", "quit"] }
```
- Example 2:
```toml
[shortcuts]
alt-q = ["quit", "quit"]
```
fields:
actions:
description: The actions to execute.
required: true
kind: array
items:
ref: Action
exec:
description: |
Executes a program.
- Example:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = "alacritty" }
ctrl-b = { type = "exec", exec = ["notify-send", "hello world"] }
```
fields:
exec:
description: The command to execute.
required: true
ref: Exec
switch-to-vt:
description: |
Switches to a virtual terminal.
- Example:
```toml
[shortcuts]
ctrl-alt-F1 = { type = "switch-to-vt", num = 1 }
```
fields:
num:
description: |
The VT number to switch to.
required: true
kind: number
integer_only: true
minimum: 1
show-workspace:
description: |
Switches to a workspace.
- Example:
```toml
[shortcuts]
alt-F1 = { type = "show-workspace", name = "1" }
```
fields:
name:
description: The name of the workspace.
required: true
kind: string
move-to-workspace:
description: |
Moves the currently focused window to a workspace.
- Example:
```toml
[shortcuts]
alt-F1 = { type = "move-to-workspace", name = "1" }
```
fields:
name:
description: The name of the workspace.
required: true
kind: string
move-to-output:
description: |
Moves a workspace to a different output.
- Example 1:
```toml
[shortcuts]
alt-F1 = { type = "move-to-output", workspace = "1", output.name = "right" }
```
- Example 2:
```toml
[shortcuts]
alt-F1 = { type = "move-to-output", output.name = "right" }
```
fields:
workspace:
description: |
The name of the workspace.
If this is omitted, the currently active workspace is moved.
required: false
kind: string
output:
description: |
The output to move to.
If multiple outputs match, the workspace is moved to the first matching
output.
required: true
ref: OutputMatch
configure-connector:
description: |
Applies a configuration to connectors.
- Example:
```toml
[shortcuts]
alt-j = { type = "configure-connector", connector = { match.name = "eDP-1", enabled = false } }
alt-k = { type = "configure-connector", connector = { match.name = "eDP-1", enabled = true } }
```
fields:
connector:
description: The connector configuration.
required: true
ref: Connector
configure-input:
description: |
Applies a configuration to input devices.
- Example:
```toml
[shortcuts]
alt-l = { type = "configure-input", input = { match.tag = "mouse", left-handed = true } }
alt-r = { type = "configure-input", input = { match.tag = "mouse", left-handed = false } }
[[inputs]]
tag = "mouse"
match.is-pointer = true
```
fields:
input:
description: The input configuration.
required: true
ref: Input
configure-idle:
description: |
Configures the idle timeout.
- Example:
```toml
[shortcuts]
alt-l = { type = "configure-idle", idle.minutes = 0 }
alt-r = { type = "configure-idle", idle.minutes = 10 }
```
fields:
idle:
description: The idle timeout.
required: true
ref: Idle
configure-output:
description: |
Applies a configuration to input devices.
- Example:
```toml
[shortcuts]
alt-l = { type = "configure-output", output = { match.name = "right", transform = "none" } }
alt-r = { type = "configure-output", output = { match.name = "right", transform = "rotate-90" } }
[[outputs]]
name = "right"
match.serial-number = "33K03894SL0"
```
fields:
output:
description: The output configuration.
required: true
ref: Output
set-env:
description: |
Sets environment variables for all programs started afterwards.
- Example:
```toml
[shortcuts]
alt-l = { type = "set-env", env.GTK_THEME = "Adwaita:dark" }
```
fields:
env:
description: The environment variables.
required: true
kind: map
values:
kind: string
unset-env:
description: |
Unsets environment variables for all programs started afterwards.
- Example:
```toml
[shortcuts]
alt-l = { type = "unset-env", env = ["Adwaita:dark"] }
```
fields:
env:
description: The environment variables.
required: true
kind: array
items:
kind: string
set-keymap:
description: |
Sets the keymap.
- Example:
```toml
[shortcuts]
alt-j = { type = "set-keymap", keymap.name = "laptop" }
alt-k = { type = "set-keymap", keymap.name = "external" }
[[keymaps]]
name = "laptop"
path = "./laptop-keymap.xkb"
[[keymaps]]
name = "external"
path = "./external-keymap.xkb"
```
fields:
keymap:
description: The keymap.
required: true
ref: Keymap
set-repeat-rate:
description: |
Sets the keyboard repeat rate.
- Example:
```toml
[shortcuts]
alt-x = { type = "set-repeat-rate", rate = { rate = 25, delay = 250 } }
```
fields:
rate:
description: The rate.
required: true
ref: RepeatRate
set-status:
description: |
Sets the status command.
- Example:
```toml
[shortcuts]
alt-j = { type = "set-status", status = { exec = "i3status" } }
```
fields:
status:
description: |
The status setting.
Omitting this causes the status to be reset to empty.
required: false
ref: Status
set-theme:
description: |
Sets the theme.
- Example:
```toml
[shortcuts]
alt-j = { type = "set-theme", theme.bg-color = "#ff0000" }
```
fields:
theme:
description: The theme.
required: true
ref: Theme
set-log-level:
description: |
Sets the log level of the compositor..
- Example:
```toml
[shortcuts]
alt-j = { type = "set-log-level", level = "debug" }
```
fields:
theme:
description: The log level.
required: true
ref: LogLevel
set-gfx-api:
description: |
Sets the graphics API used by new DRM devices.
Setting this after the compositor has started usually has no effect.
- Example:
```toml
[shortcuts]
alt-j = { type = "set-gfx-api", api = "Vulan" }
```
fields:
api:
description: The API.
required: true
ref: GfxApi
configure-direct-scanout:
description: |
Configure whether the compositor attempts direct scanout of client surfaces.
- Example:
```toml
[shortcuts]
alt-j = { type = "configure-direct-scanout", enabled = false }
```
fields:
enabled:
description: Whether direct scanout is enabled.
required: true
kind: boolean
configure-drm-device:
description: |
Applies a configuration to DRM devices.
- Example:
```toml
[shortcuts]
alt-j = { type = "configure-drm-device", dev = { match.name = "integrated", gfx-api = "Vulkan" } }
[[drm-devices]]
name = "integrated"
match.syspath = "/sys/devices/pci0000:00/0000:00:08.1/0000:14:00.0"
```
fields:
dev:
description: The DRM device configuration.
required: true
ref: DrmDevice
set-render-device:
description: |
Sets the render device used for compositing.
Changing this after the compositor has started might cause client windows to
become invisible until they are resized.
- Example:
```toml
[shortcuts]
alt-j = { type = "set-render-device", dev.name = "integrated" }
[[drm-devices]]
name = "integrated"
match.syspath = "/sys/devices/pci0000:00/0000:00:08.1/0000:14:00.0"
```
fields:
dev:
description: |
The rule to find the device.
The first matching device is used.
required: true
ref: DrmDeviceMatch
define-action:
description: |
Defines a name for an action. Usually you would define these by using the
top-level `actions` table. This action can be used to re-define actions.
- Example:
```toml
[actions]
a1 = "quit"
a2 = "$a1"
[shortcuts]
alt-q = [
{ type = "define-action", name = "a2", action = [] },
"$2", # does nothing
]
```
fields:
name:
kind: string
description: The name of the action.
required: true
action:
description: The action to execute.
required: true
ref: Action
undefine-action:
description: |
Removes a named action.
fields:
name:
kind: string
description: The name of the action.
required: true
Exec:
description: |
Describes how to execute a program.
- Example 1:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = "alacritty" }
```
- Example 2:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = ["notify-send", "hello world"] }
```
- Example 3:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = { prog = "notify-send", args = ["hello world"], env.WAYLAND_DISPLAY = "2" } }
```
kind: variable
variants:
- kind: string
description: |
The name of the executable to execute.
- Example:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = "alacritty" }
```
- kind: array
items:
kind: string
description: |
The name and arguments of the executable to execute.
- Example:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = ["notify-send", "hello world"] }
```
- kind: table
description: |
The name, arguments, and environment variables of the executable to execute.
- Example:
```toml
[shortcuts]
ctrl-a = { type = "exec", exec = { prog = "notify-send", args = ["hello world"], env.WAYLAND_DISPLAY = "2" } }
```
fields:
prog:
kind: string
required: true
description: The name of the executable.
args:
kind: array
required: false
items:
kind: string
description: The arguments to pass to the executable.
env:
kind: map
required: false
values:
kind: string
description: The environment variables to pass to the executable.
privileged:
kind: boolean
required: false
description: |
If `true`, the executable gets access to privileged wayland protocols.
The default is `false`.
SimpleActionName:
description: |
The name of a `simple` Action.
- Example:
```toml
[shortcuts]
alt-q = "quit"
```
kind: string
values:
- value: focus-left
description: Move the keyboard focus to the left of the currently focused window.
- value: focus-down
description: Move the keyboard focus down from the currently focused window.
- value: focus-up
description: Move the keyboard focus up from the currently focused window.
- value: focus-right
description: Move the keyboard focus to the right of the currently focused window.
- value: move-left
description: Move the currently focused window one to the left.
- value: move-down
description: Move the currently focused window one down.
- value: move-up
description: Move the currently focused window one up.
- value: move-right
description: Move the currently focused window one to the right.
- value: move-right
description: Move the currently focused window one to the right.
- value: split-horizontal
description: Split the currently focused window horizontally.
- value: split-vertical
description: Split the currently focused window vertically.
- value: toggle-split
description: |
Toggle the split of the currently focused container between vertical and
horizontal.
- value: toggle-mono
description: |
Toggle the currently focused container between showing a single and all children.
- value: toggle-fullscreen
description: Toggle the currently focused window between fullscreen and windowed.
- value: focus-parent
description: Focus the parent of the currently focused window.
- value: close
description: Close the currently focused window.
- value: disable-pointer-constraint
description: |
Disable the currently active pointer constraint, allowing you to move the pointer
outside the window.
The constraint will be re-enabled when the pointer re-enters the window.
- value: toggle-floating
description: Toggle the currently focused window between floating and tiled.
- value: quit
description: Terminate the compositor.
- value: reload-config-toml
description: Reload the `config.toml`.
- value: reload-config-to
description: Reload the `config.so`.
- value: consume
description: |
Consume the current key event. Don't forward it to the focused application.
This action only has an effect in shortcuts.
Key-press events events that trigger shortcuts are consumed by default.
Key-release events events that trigger shortcuts are forwarded by default.
Note that consuming key-release events can cause keys to get stuck in the focused
application.
See the `forward` action to achieve the opposite effect.
- value: forward
description: |
Forward the current key event to the focused application.
See the `consume` action for more details.
- value: none
description: |
Perform no action.
As a special case, if this is the action of a shortcut, the shortcut will be
unbound. This can be used in modes to unbind a key.
- value: enable-window-management
description: |
Enables window management mode.
In window management mode, floating windows can be moved by pressing the left
mouse button and all windows can be resize by pressing the right mouse button.
- value: disable-window-management
description: |
Disables window management mode.
- value: enable-float-above-fullscreen
description: |
Enables floating windows showing above fullscreen windows.
By default, floating windows are hidden below fullscreen windows.
- value: disable-float-above-fullscreen
description: |
Disables floating windows showing above fullscreen windows.
- value: toggle-float-above-fullscreen
description: |
Toggles floating windows showing above fullscreen windows.
- value: pin-float
description: |
Pins the currently focused floating window.
If a floating window is pinned, it will stay visible even when switching to a
different workspace.
- value: unpin-float
description: |
Unpins the currently focused floating window.
- value: toggle-float-pinned
description: |
Toggles whether the currently focused floating window is pinned.
Color:
kind: string
description: |
A color.
The format should be one of the following:
- `#rgb`
- `#rrggbb`
- `#rgba`
- `#rrggbba`
ConnectorMatch:
kind: variable
description: |
Rules to match one of the connectors used by the compositor.
variants:
- kind: array
items:
ref: ConnectorMatch
description: |
This rule matches if any of the rules in the array match.
- kind: table
description: |
Describes a rule that matches a subset of connectors.
This rule matches if all of the specified fields match.
- Example:
```toml
[[connectors]]
match.name = "DP-1"
```
fields:
name:
kind: string
required: false
description: |
The name of the connector.
These values are not necessarily stable. You can find out the value by running
`jay randr`.
Connector:
kind: table
description: |
Describes configuration to apply to a connector.
- Example: To disable the built-in display of a laptop:
```toml
[[connectors]]
match.name = "eDP-1"
enabled = false
```
fields:
match:
ref: ConnectorMatch
required: true
description: |
The rule by which the connectors to modify are selected.
enabled:
kind: boolean
required: false
description: |
If specified, enables or disables the connector.
DrmDeviceMatch:
kind: variable
description: |
Rules to match one of the DRM devices (graphics cards) used by the compositor.
variants:
- kind: array
items:
ref: DrmDeviceMatch
description: |
This rule matches if any of the rules in the array match.
- kind: table
description: |
Describes a rule that matches a subset of DRM devices.
This rule matches if all of the specified fields match.
- Example:
```toml
[[drm-devices]]
name = "dedicated"
match = { pci-vendor = 0x1002, pci-model = 0x73ff }
```
fields:
name:
kind: string
required: false
description: |
The name of another DrmDeviceMatch rule.
For this rule to match, the referenced rule must match. The name of the rule
should have been defined in the top-level `drm-devices` array.
This can be used to easily refer to DRM devices.
- Example:
```toml
[shortcuts]
alt-v = { type = "configure-drm-device", dev = { match.name = "dedicated", gfx-api = "Vulkan" } }
alt-o = { type = "configure-drm-device", dev = { match.name = "dedicated", gfx-api = "OpenGl" } }
[[drm-devices]]
name = "dedicated"
match = { pci-vendor = 0x1002, pci-model = 0x73ff }
```
syspath:
kind: string
required: false
description: |
The syspath of the device.
This is useful if you have multiple copies of the same device installed so that
the PCI numbers are not unique.
The values are usually stable unless you re-configure your hardware.
- Example:
```toml
[[drm-devices]]
name = "integrated"
match.syspath = "/sys/devices/pci0000:00/0000:00:08.1/0000:14:00.0"
```
devnode:
kind: string
required: false
description: |
The devnode of the device.
The values are usually not-stable across PC restarts.
- Example:
```toml
[[drm-devices]]
name = "integrated"
match.devnode = "/dev/dri/card0"
```
vendor:
kind: string
required: false
description: |
The name of the vendor.
- Example:
```toml
[[drm-devices]]
name = "integrated"
match.vendor = "Advanced Micro Devices, Inc. [AMD/ATI]"
```
model:
kind: string
required: false
description: |
The name of the model.
- Example:
```toml
[[drm-devices]]
name = "integrated"
match.vendor = "Raphael"
```
pci-vendor:
kind: number
integer_only: true
required: false
description: |
The PCI number of the vendor.
- Example:
```toml
[[drm-devices]]
name = "integrated"
match.pci-vendor = 0x1002
```
pci-model:
kind: number
integer_only: true
required: false
description: |
The PCI number of the model.
- Example:
```toml
[[drm-devices]]
name = "integrated"
match.pci-model = 0x164e
```
DrmDevice:
kind: table
description: |
Describes configuration to apply to a DRM device (graphics card).
- Example: To disable direct scanout on a device:
```toml
[[drm-devices]]
match = { pci-vendor = 0x1002, pci-model = 0x73ff }
direct-scanout = false
```
fields:
name:
kind: string
required: false
description: |
Assigns a name to the rule in the `match` field.
This only has an effect when used in the top-level `drm-devices` array.
match:
ref: DrmDeviceMatch
required: true
description: |
The rule by which the DRM devices to modify are selected.
direct-scanout:
kind: boolean
required: false
description: |
If specified, enables or disables direct scanout on this device.
gfx-api:
ref: GfxApi
required: false
description: |
If specified, sets the graphics API to use for this device.
flip-margin-ms:
kind: number
required: false
description: |
If specified, sets the flip margin of this device.
This is duration between the compositor initiating a page flip and the output's
vblank event. This determines the minimum input latency. The default is 1.5 ms.
Note that if the margin is too small, the compositor will dynamically increase it.
GfxApi:
kind: string
description: A graphics API used for rendering.
values:
- value: OpenGl
description: The OpenGL API.
- value: Vulkan
description: |
The Vulkan API.
Note that this API has the following restriction: If any of the DRM devices in
the system use Vulkan, then all devices must support DRM format modifiers. This
is usually the case but not for AMD devices older than RX 5xxx.
InputMatch:
kind: variable
description: |
Rules to match one of the input devices used by the compositor.
variants:
- kind: array
items:
ref: InputMatch
description: |
This rule matches if any of the rules in the array match.
- kind: table
description: |
Describes a rule that matches a subset of input devices.
This rule matches if all of the specified fields match.
- Example:
```toml
[[inputs]]
match.is-pointer = true
left-handed = true
```
fields:
tag:
kind: string
required: false
description: |
The tag of another InputMatch rule.
For this rule to match, the referenced rule must match. The name of the rule
should have been defined in the top-level `inputs` array.
This can be used to easily refer to input devices.
- Example:
```toml
[shortcuts]
alt-l = { type = "configure-input", input = { match.tag = "mouse", left-handed = true } }
alt-r = { type = "configure-input", input = { match.tag = "mouse", left-handed = false } }
[[inputs]]
tag = "mouse"
match.is-pointer = true
```
name:
kind: string
required: false
description: |
The libinput name of the device.
You can find out the name of the devices by running `jay input`.
- Example:
```toml
[[inputs]]
match.name = "Logitech G300s Optical Gaming Mouse"
left-handed = true
```
syspath:
kind: string
required: false
description: |
The syspath of the device.
This is useful if you have multiple copies of the same device installed so that
the name is not unique.
The values are usually stable unless you re-configure your hardware.
- Example:
```toml
[[inputs]]
match.syspath = "/sys/devices/pci0000:00/0000:00:08.1/0000:14:00.4/usb5/5-1/5-1.1/5-1.1.2/5-1.1.2:1.0"
left-handed = true
```
devnode:
kind: string
required: false
description: |
The devnode of the device.
The values are usually not-stable across PC restarts.
- Example:
```toml
[[inputs]]
match.devnode = "/dev/input/event4"
left-handed = true
```
is-keyboard:
kind: boolean
required: false
description: |
Whether the devices has been identified as a keyboard.
- Example:
```toml
[[inputs]]
match.is-keyboard = false
left-handed = true
```
is-pointer:
kind: boolean
required: false
description: |
Whether the devices has been identified as a pointer.
- Example:
```toml
[[inputs]]
match.is-pointer = false
left-handed = true
```
is-touch:
kind: boolean
required: false
description: |
Whether the devices has been identified as a touch device.
- Example:
```toml
[[inputs]]
match.is-touch = true
tap-enabled = true
```
is-tablet-tool:
kind: boolean
required: false
description: |
Whether the devices has been identified as a tablet tool.
- Example:
```toml
[[inputs]]
match.is-tablet-tool = true
tap-enabled = true
```
is-tablet-pad:
kind: boolean
required: false
description: |
Whether the devices has been identified as a tablet pad.
- Example:
```toml
[[inputs]]
match.is-tablet-tool = true
tap-enabled = true
```
is-gesture:
kind: boolean
required: false
description: |
Whether the devices has been identified as a switch.
- Example:
```toml
[[inputs]]
match.is-switch = true
```
Input:
kind: table
description: |
Describes configuration to apply to an input device.
- Example: To make mice left handed:
```toml
[[inputs]]
match.is-pointer = true
left-handed = true
```
fields:
tag:
kind: string
required: false
description: |
Assigns a name to the rule in the `match` field.
This only has an effect when used in the top-level `inputs` array.
match:
ref: InputMatch
required: true
description: |
The rule by which the input devices to modify are selected.
accel-profile:
ref: AccelProfile
required: false
description: |
The acceleration profile to use.
See the libinput documentation for more details.
accel-speed:
kind: number
required: false
description: |
The acceleration speed to use.
Values should be in the range -1 to 1.
See the libinput documentation for more details.
tap-enabled:
kind: boolean
required: false
description: |
Whether tap is enabled for this device.
See the libinput documentation for more details.
tap-drag-enabled:
kind: boolean
required: false
description: |
Whether tap drag is enabled for this device.
See the libinput documentation for more details.
tap-drag-lock-enabled:
kind: boolean
required: false
description: |
Whether tap drag lock is enabled for this device.
See the libinput documentation for more details.
left-handed:
kind: boolean
required: false
description: |
Whether the device is left handed.
See the libinput documentation for more details.
natural-scrolling:
kind: boolean
required: false
description: |
Whether the device uses natural scrolling.
See the libinput documentation for more details.
px-per-wheel-scroll:
kind: boolean
required: false
description: |
The number of pixels to scroll for each scroll wheel dedent.
transform-matrix:
kind: array
items:
kind: array
items:
kind: number
required: false
description: |
A transformation matrix to apply to each motion event of this device.
The matrix should be 2x2.
- Example: To slow down the mouse to 35% of normal speed:
```toml
[[inputs]]
match.is-pointer = true
transform-matrix = [[0.35, 0], [0, 0.35]]
```
keymap:
ref: Keymap
required: false
description: |
The keymap to use for this device.
This overrides the global keymap. The keymap becomes active when a key is pressed.
- Example:
```toml
[[inputs]]
match.name = "ZSA Technology Labs Inc ErgoDox EZ"
keymap.name = "external"
```
on-lid-closed:
ref: Action
required: false
description: |
An action to execute when the laptop lid is closed.
This should only be used in the top-level inputs array.
- Example:
```toml
[[inputs]]
match.name = "<switch name>"
on-lid-closed = { type = "configure-connector", connector = { match.name = "eDP-1", enabled = false } }
on-lid-opened = { type = "configure-connector", connector = { match.name = "eDP-1", enabled = true } }
```
on-lid-opened:
ref: Action
required: false
description: |
An action to execute when the laptop lid is opened.
This should only be used in the top-level inputs array.
- Example:
```toml
[[inputs]]
match.name = "<switch name>"
on-lid-closed = { type = "configure-connector", connector = { match.name = "eDP-1", enabled = false } }
on-lid-opened = { type = "configure-connector", connector = { match.name = "eDP-1", enabled = true } }
```
on-converted-to-laptop:
ref: Action
required: false
description: |
An action to execute when the convertible device is converted to a laptop.
This should only be used in the top-level inputs array.
on-converted-to-tablet:
ref: Action
required: false
description: |
An action to execute when the convertible device is converted to a tablet.
This should only be used in the top-level inputs array.
output:
ref: OutputMatch
required: false
description: |
Maps this input device to an output.
This is used to map touch screen and graphics tablets to outputs.
- Example:
```toml
[[inputs]]
match.name = "Wacom Bamboo Comic 2FG Pen"
output.connector = "DP-1"
```
remove-mapping:
kind: boolean
required: false
description: |
Removes the mapping of from this device to an output.
This should only be used within `configure-input` actions.
- Example:
```toml
[shortcuts]
alt-x = { type = "configure-input", input = { match.tag = "wacom", remove-mapping = true } }
[[inputs]]
tag = "wacom"
match.name = "Wacom Bamboo Comic 2FG Pen"
output.connector = "DP-1"
```
calibration-matrix:
kind: array
items:
kind: array
items:
kind: number
required: false
description: |
The calibration matrix of the device. This matrix should be 2x3.
See the libinput documentation for more details.
- Example: To flip the device 90 degrees:
```toml
[[inputs]]
calibration-matrix = [[0, 1, 0], [-1, 0, 1]]
```
AccelProfile:
kind: string
values:
- value: Flat
description: The flat profile.
- value: Adaptive
description: The adaptive profile.
description: |
The acceleration profile to apply to an input device.
See the libinput documentation for more details.
LogLevel:
kind: string
description: A log level.
values:
- value: trace
description: Trace log level.
- value: debug
description: Debug log level.
- value: info
description: Info log level.
- value: warn
description: Warn log level.
- value: error
description: Error log level.
Mode:
kind: table
description: |
The mode of a display.
- Example:
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
mode = { width = 1920, height = 1080, refresh-rate = 59.94 }
```
fields:
width:
kind: number
integer_only: true
required: true
description: The width of the mode.
height:
kind: number
integer_only: true
required: true
description: The height of the mode.
refresh-rate:
kind: number
required: false
description: The refresh rate of the mode in HZ.
OutputMatch:
kind: variable
description: |
Rules to match one of the outputs used by the compositor.
variants:
- kind: array
items:
ref: OutputMatch
description: |
This rule matches if any of the rules in the array match.
- kind: table
description: |
Describes a rule that matches a subset of outputs.
This rule matches if all of the specified fields match.
- Example:
```toml
[[outputs]]
name = "right"
match.serial-number = "33K03894SL0"
x = 1920
y = 0
```
fields:
name:
kind: string
required: false
description: |
The name of another OutputMatch rule.
For this rule to match, the referenced rule must match. The name of the rule
should have been defined in the top-level `outputs` array.
This can be used to easily refer to outputs.
- Example:
```toml
[shortcuts]
alt-l = { type = "configure-output", output = { match.name = "right", transform = "none" } }
alt-r = { type = "configure-output", output = { match.name = "right", transform = "rotate-90" } }
[[outputs]]
name = "right"
match.serial-number = "33K03894SL0"
```
connector:
kind: string
required: false
description: |
The name of the connector the output is connected to.
You can find out the name of the connector by running `jay randr`.
- Example:
```toml
[[outputs]]
match.connector = "DP-1"
scale = 1.25
```
serial-number:
kind: string
required: false
description: |
The serial number of the output.
You can find out the serial number by running `jay randr`.
- Example:
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
scale = 1.25
```
manufacturer:
kind: string
required: false
description: |
The manufacturer of the output.
You can find out the manufacturer by running `jay randr`.
- Example:
```toml
[[outputs]]
match.manufacturer = "BNQ"
scale = 1.25
```
model:
kind: string
required: false
description: |
The model of the output.
You can find out the model by running `jay randr`.
- Example:
```toml
[[outputs]]
match.model = "BenQ GW2480"
scale = 1.25
```
Output:
kind: table
description: |
Describes configuration to apply to an output.
- Example: To set the scale of an output.
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
scale = 1.25
```
fields:
name:
kind: string
required: false
description: |
Assigns a name to the rule in the `match` field.
This only has an effect when used in the top-level `outputs` array.
match:
ref: OutputMatch
required: true
description: |
The rule by which the outputs to modify are selected.
x:
kind: number
integer_only: true
minimum: 0
required: false
description: |
The x coordinate of the output in compositor space.
y:
kind: number
integer_only: true
minimum: 0
required: false
description: |
The y coordinate of the output in compositor space.
scale:
kind: number
minimum: 0
exclusive_minimum: true
required: false
description: |
The scale of the output.
transform:
ref: Transform
required: false
description: |
The transform of the output.
mode:
ref: Mode
required: false
description: |
The mode of the output.
If the refresh rate is not specified, the first mode with the specified width and
height is used.
vrr:
ref: Vrr
required: false
description: |
Configures the VRR settings of this output.
By default, the VRR mode is `never` and the cursor refresh rate is unbounded.
- Example:
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
vrr = { mode = "always", cursor-hz = 90 }
```
tearing:
ref: Tearing
required: false
description: |
Configures the tearing settings of this output.
By default, the tearing mode is `variant3`.
- Example:
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
tearing.mode = "never"
```
format:
ref: Format
required: false
description: |
Configures the framebuffer format of this output.
By default, the format is `xrgb8888`.
- Example:
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
format = "rgb565"
```
color-space:
ref: ColorSpace
required: false
description: |
The color space of the output.
transfer-function:
ref: TransferFunction
required: false
description: |
The transfer function of the output.
brightness:
ref: Brightness
required: false
description: |
The brightness of the output.
This setting has no effect unless the vulkan renderer is used.
Transform:
kind: string
description: An output transformation.
values:
- value: none
description: No transformation.
- value: rotate-90
description: The content of the output is rotated 90 degrees counter clockwise.
- value: rotate-180
description: The content of the output is rotated 180 degrees counter clockwise.
- value: rotate-270
description: The content of the output is rotated 270 degrees counter clockwise.
- value: flip
description: The content of the output is flipped around the vertical axis.
- value: flip-rotate-90
description: |
The content of the output is flipped around the vertical axis and then rotated
90 degrees counter clockwise.
- value: flip-rotate-180
description: |
The content of the output is flipped around the vertical axis and then rotated
180 degrees counter clockwise.
- value: flip-rotate-270
description: |
The content of the output is flipped around the vertical axis and then rotated
270 degrees counter clockwise.
MessageFormat:
kind: string
description: A message format used by status programs.
values:
- value: plain
description: The messages are in plain text.
- value: pango
description: The messages contain pango markup.
- value: i3bar
description: The messages are in i3bar format.
Status:
kind: table
description: |
The configuration of a status program whose output will be shown in the bar.
- Example:
```toml
[status]
format = "i3bar"
exec = "i3status"
```
fields:
format:
ref: MessageFormat
required: false
description: The format used by the program.
exec:
ref: Exec
required: true
description: The program that will emit the status messages.
i3bar-separator:
kind: string
required: false
description: |
The separator to be used between i3bar components.
The default is ` | `.
Theme:
kind: table
description: |
The theme of the compositor.
fields:
attention-requested-bg-color:
ref: Color
required: false
description: The background color of title that have requested attention.
bg-color:
ref: Color
required: false
description: The background color of the desktop.
bar-bg-color:
ref: Color
required: false
description: The background color of the bar.
bar-status-text-color:
ref: Color
required: false
description: The color of the status text in the bar.
border-color:
ref: Color
required: false
description: The color of the borders between windows.
captured-focused-title-bg-color:
ref: Color
required: false
description: The background color of focused titles that are being recorded.
captured-unfocused-title-bg-color:
ref: Color
required: false
description: The background color of unfocused titles that are being recorded.
focused-inactive-title-bg-color:
ref: Color
required: false
description: The background color of focused titles that are inactive.
focused-inactive-title-text-color:
ref: Color
required: false
description: The text color of focused titles that are inactive.
focused-title-bg-color:
ref: Color
required: false
description: The background color of focused titles.
focused-title-text-color:
ref: Color
required: false
description: The text color of focused titles.
separator-color:
ref: Color
required: false
description: The color of the separator between titles and window content.
unfocused-title-bg-color:
ref: Color
required: false
description: The background color of unfocused titles.
unfocused-title-text-color:
ref: Color
required: false
description: The text color of unfocused titles.
highlight-color:
ref: Color
required: false
description: Color used to highlight parts of the UI.
border-width:
kind: number
integer_only: true
minimum: 0
required: false
description: The width of borders between windows.
title-height:
kind: number
integer_only: true
minimum: 0
required: false
description: The height of tabs.
font:
kind: string
required: false
description: The name of the font to use.
Config:
kind: table
description: |
This is the top-level table.
- Example:
```toml
keymap = """
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)" };
};
"""
on-graphics-initialized = { type = "exec", exec = "mako" }
[shortcuts]
alt-h = "focus-left"
alt-j = "focus-down"
alt-k = "focus-up"
alt-l = "focus-right"
alt-shift-h = "move-left"
alt-shift-j = "move-down"
alt-shift-k = "move-up"
alt-shift-l = "move-right"
alt-d = "split-horizontal"
alt-v = "split-vertical"
alt-t = "toggle-split"
alt-m = "toggle-mono"
alt-u = "toggle-fullscreen"
alt-f = "focus-parent"
alt-shift-c = "close"
alt-shift-f = "toggle-floating"
Super_L = { type = "exec", exec = "alacritty" }
alt-p = { type = "exec", exec = "bemenu-run" }
alt-q = "quit"
alt-shift-r = "reload-config-toml"
ctrl-alt-F1 = { type = "switch-to-vt", num = 1 }
ctrl-alt-F2 = { type = "switch-to-vt", num = 2 }
# ...
alt-F1 = { type = "show-workspace", name = "1" }
alt-F2 = { type = "show-workspace", name = "2" }
# ...
alt-shift-F1 = { type = "move-to-workspace", name = "1" }
alt-shift-F2 = { type = "move-to-workspace", name = "2" }
# ...
```
fields:
keymap:
ref: Keymap
required: false
description: |
The keymap to use.
- Example:
```toml
keymap = """
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)" };
};
"""
```
repeat-rate:
ref: RepeatRate
required: false
description: |
The keyboard repeat rate.
- Example:
```toml
repeat-rate = { rate = 25, delay = 250 }
```
shortcuts:
kind: map
values:
ref: Action
required: false
description: |
The compositor shortcuts.
The keys should be in the following format:
```
(MOD-)*KEYSYM
```
`MOD` should be one of `shift`, `lock`, `ctrl`, `mod1`, `mod2`, `mod3`, `mod4`,
`mod5`, `caps`, `alt`, `num`, `logo`, or `release`.
Using the `release` modifier causes the shortcut to trigger when the key is
released.
`KEYSYM` should be the name of a keysym. The authorative location for these names
is [1] with the `XKB_KEY_` prefix removed.
The keysym should be the unmodified keysym. E.g. `shift-q` not `shift-Q`.
[1]: https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h
- Example:
```toml
[shortcuts]
alt-q = "quit"
```
complex-shortcuts:
kind: map
values:
ref: ComplexShortcut
required: false
description: |
Complex compositor shortcuts.
The keys should have the same format as in the `shortcuts` table.
- Example:
```toml
[complex-shortcuts.XF86AudioRaiseVolume]
mod-mask = "alt"
action = { type = "exec", exec = ["pactl", "set-sink-volume", "0", "+10%"] }
```
on-graphics-initialized:
ref: Action
required: false
description: |
An action to execute when the graphics have been initialized for the first time.
This is a good place to start graphical applications.
- Example:
```toml
on-graphics-initialized = { type = "exec", exec = "mako" }
```
status:
ref: Status
required: false
description: |
The status program that will be used for the status text.
- Example:
```toml
[status]
format = "i3bar"
exec = "i3status"
```
outputs:
kind: array
items:
ref: Output
required: false
description: |
An array of output configurations.
This can be used to configure outputs and create named outputs that can be
referred to in actions.
The configurations defined here will only be applied the first time matching
outputs are connected to the compositor after the compositor has started.
If you want change the configuration afterwards, use `jay randr` or a
`configure-output` action.
- Example:
```toml
[[outputs]]
name = "left"
match.serial-number = "33K03894SL0"
x = 0
y = 0
[[outputs]]
name = "right"
match.serial-number = "ETW1M02062SL0"
x = 1920
y = 0
```
connectors:
kind: array
items:
ref: Connector
required: false
description: |
An array of connector configurations.
This can be used to configure connectors.
The configurations defined here will only be applied when the connector is first
discovered by the compositor. This usually never happens after the compositor has
started unless you attach an external graphics card.
- Example:
```toml
[[connectors]]
name = "eDP-1"
enabled = false
```
workspace-capture:
kind: boolean
required: false
description: |
Configures whether newly created workspaces can be captured.
The default is `true`.
env:
kind: map
values:
kind: string
required: false
description: |
Defines environment variables that will be set for all applications.
- Example:
```toml
[env]
GTK_THEME = "Adwaita:dark"
```
on-startup:
ref: Action
required: false
description: |
An action to execute as early as possible when the compositor starts.
At this point, graphics have not yet been initialized. You should not use this
to start graphical applications. See `on-graphics-initialized`.
This setting has no effect during configuration reloads.
keymaps:
kind: array
items:
ref: Keymap
required: false
description: |
Defines named keymaps.
These keymaps can be used to easily switch between keymaps for different
keyboards.
- Example:
```toml
keymap.name = "laptop"
[shortcuts]
alt-j = { type = "set-keymap", keymap.name = "laptop" }
alt-k = { type = "set-keymap", keymap.name = "external" }
[[keymaps]]
name = "laptop"
path = "./laptop-keymap.xkb"
[[keymaps]]
name = "external"
path = "./external-keymap.xkb"
```
log-level:
ref: LogLevel
required: false
description: |
Sets the log level of the compositor.
This setting cannot be changed by re-loading the configuration. Use
`jay set-log-level` instead.
- Example:
```toml
log-level = "debug"
```
theme:
ref: Theme
required: false
description: |
Sets the theme of the compositor.
gfx-api:
ref: GfxApi
required: false
description: |
Sets the graphics API used for newly discovered DRM devices.
Changing this setting after the compositor has started usually has no effect
unless you attach an external graphics card. Use `jay randr` to change the API
used by individual devices at runtime.
- Example:
```toml
gfx-api = "Vulkan"
```
drm-devices:
kind: array
items:
ref: DrmDevice
required: false
description: |
Names and configures DRM devices.
These settings are only applied to devices discovered after the configuration
has been loaded. Therefore changing these settings usually has no effect at
runtime unless you attach an external graphics card. You can use `jay randr` or
a `configure-drm-device` Action to change these settings at runtime.
- Example:
```toml
render-device.name = "dedicated"
[[drm-devices]]
name = "dedicated"
match = { pci-vendor = 0x1002, pci-model = 0x73ff }
[[drm-devices]]
name = "integrated"
match = { pci-vendor = 0x1002, pci-model = 0x164e }
gfx-api = "OpenGl"
```
direct-scanout:
kind: boolean
required: false
description: |
Configured whether the compositor attempts direct scanout.
explicit-sync:
kind: boolean
required: false
description: |
Configures whether the compositor supports explicit sync.
This cannot be changed after the compositor has started.
The default is `true`.
render-device:
ref: DrmDeviceMatch
required: false
description: |
Selects the device to use for rendering in a system with multiple GPUs.
The first device that matches will be used.
- Example:
```toml
render-device.name = "dedicated"
[[drm-devices]]
name = "dedicated"
match = { pci-vendor = 0x1002, pci-model = 0x73ff }
```
inputs:
kind: array
items:
ref: Input
required: false
description: |
Names and configures input devices.
These settings are only applied to devices connected after the configuration
has been loaded. You can apply setting without re-connecting the device by using
`jay input` or a `configure-input` Action.
- Example:
```toml
render-device.name = "dedicated"
[[inputs]]
match.is-pointer = true
left-handed = true
transform-matrix = [[0.35, 0], [0, 0.35]]
tap-enabled = true
```
on-idle:
ref: Action
required: false
description: |
An action to execute when the compositor becomes idle.
- Example:
```toml
on-idle = { type = "exec", exec = "lock" }
```
idle:
ref: Idle
required: false
description: |
The configuration of the idle timeout.
Changing thise field after compositor startup has no effect. Use `jay idle`
or a `configure-idle` action to change the idle timeout at runtime.
- Example:
```toml
idle.minutes = 10
```
focus-follows-mouse:
kind: boolean
required: false
description: |
Configures whether moving the mouse over a window automatically moves the keyboard
focus to that window.
The default is `true`.
window-management-key:
kind: string
required: false
description: |
Configures a key that will enable window management mode while pressed.
In window management mode, floating windows can be moved by pressing the left
mouse button and all windows can be resize by pressing the right mouse button.
- Example:
```toml
window-management-key = "Alt_L"
```
vrr:
ref: Vrr
required: false
description: |
Configures the default VRR settings.
This can be overwritten for individual outputs.
By default, the VRR mode is `never` and the cursor refresh rate is unbounded.
- Example:
```toml
vrr = { mode = "always", cursor-hz = 90 }
```
tearing:
ref: Tearing
required: false
description: |
Configures the default tearing settings.
This can be overwritten for individual outputs.
By default, the tearing mode is `variant3`.
- Example:
```toml
tearing.mode = "never"
```
libei:
ref: Libei
required: false
description: |
Configures the libei settings.
- Example:
```toml
libei.enable-socket = true
```
ui-drag:
ref: UiDrag
required: false
description: |
Configures the ui-drag settings.
- Example:
```toml
ui-drag = { enabled = false, threshold = 20 }
```
xwayland:
ref: Xwayland
required: false
description: |
Configures the Xwayland settings.
- Example:
```toml
xwayland = { scaling-mode = "downscaled" }
```
color-management:
ref: ColorManagement
required: false
description: |
Configures the color-management settings.
- Example:
```toml
[color-management]
enabled = true
```
float:
ref: Float
required: false
description: |
Configures the settings of floating windows.
- Example:
```toml
[float]
show-pin-icon = true
```
actions:
kind: map
values:
ref: Action
required: false
description: |
Named actions.
Named actions can be used everywhere an action can be used. This can be used to
avoid repeating the same action multiple times.
- Example:
```toml
actions.switch-to-1 = [
{ type = "show-workspace", name = "1" },
{ type = "define-action", name = "switch-to-next", action = "$switch-to-2" },
]
actions.switch-to-2 = [
{ type = "show-workspace", name = "2" },
{ type = "define-action", name = "switch-to-next", action = "$switch-to-3" },
]
actions.switch-to-3 = [
{ type = "show-workspace", name = "3" },
{ type = "define-action", name = "switch-to-next", action = "$switch-to-1" },
]
actions.switch-to-next = "$switch-to-1"
[shortcuts]
alt-x = "$switch-to-next"
```
max-action-depth:
kind: number
integer_only: true
minimum: 0
required: false
description: |
The maximum call depth of named actions. This setting prevents infinite recursion
when using named actions. Setting this value to 0 or less disables named actions
completely. The default is `16`.
Idle:
kind: table
description: |
The definition of an idle timeout.
Omitted values are set to 0. If any value is explicitly set and all values are 0, the
idle timeout is disabled.
- Example:
```toml
idle.minutes = 10
```
fields:
minutes:
description: The number of minutes before going idle.
kind: number
integer_only: true
minimum: 0
required: false
seconds:
description: The number of seconds before going idle.
kind: number
integer_only: true
minimum: 0
required: false
grace-period:
description: |
The grace period after the timeout expires.
During the grace period, the screen goes black but the outputs are not yet
disabled and the `on-idle` action does not yet run. This is a visual indicator
that the system will soon get idle.
The default is 5 seconds.
ref: GracePeriod
required: false
GracePeriod:
kind: table
description: |
The definition of a grace period.
Omitted values are set to 0. If all values are 0, the grace period is disabled.
- Example:
```toml
idle.grace-period.seconds = 3
```
fields:
minutes:
description: The number of minutes the grace period lasts.
kind: number
integer_only: true
minimum: 0
required: false
seconds:
description: The number of seconds the grace period lasts.
kind: number
integer_only: true
minimum: 0
required: false
RepeatRate:
kind: table
description: |
Describes a keyboard repeat rate.
- Example:
```toml
repeat-rate = { rate = 25, delay = 250 }
```
fields:
rate:
kind: number
integer_only: true
required: true
description: The number of times to repeat per second.
delay:
kind: number
integer_only: true
required: true
description: |
The number of milliseconds after a key is pressed before repeating begins.
ComplexShortcut:
kind: table
description: |
Describes a complex shortcut.
- Example:
```toml
[complex-shortcuts.XF86AudioRaiseVolume]
mod-mask = "alt"
action = { type = "exec", exec = ["pactl", "set-sink-volume", "0", "+10%"] }
```
fields:
mod-mask:
kind: string
required: false
description: |
The mod mask to apply to this shortcut.
Should be a string containing modifiers concatenated by `-`. See the description
of `Config.shortcuts` for more details.
If this field is omitted, all modifiers are included in the mask.
- Example:
To raise the volume whenever the XF86AudioRaiseVolume key is pressed regardless
of any modifiers except `alt`:
```toml
[complex-shortcuts.XF86AudioRaiseVolume]
mod-mask = "alt"
action = { type = "exec", exec = ["pactl", "set-sink-volume", "0", "+10%"] }
```
Set `mod-mask = ""` to ignore all modifiers.
action:
ref: Action
required: false
description: |
The action to execute.
Omitting this is the same as setting it to `"none"`.
latch:
ref: Action
required: false
description: |
An action to execute when the key is released.
This registers an action to be executed when the key triggering the shortcut is
released. The active modifiers are ignored for this purpose.
- Example:
To mute audio while the key is pressed:
```toml
[complex-shortcuts.alt-x]
action = { type = "exec", exec = ["pactl", "set-sink-mute", "0", "1"] }
latch = { type = "exec", exec = ["pactl", "set-sink-mute", "0", "0"] }
```
Audio will be un-muted once `x` key is released, regardless of any other keys
that are pressed at the time.
Vrr:
kind: table
description: |
Describes VRR settings.
- Example:
```toml
vrr = { mode = "always", cursor-hz = 90 }
```
fields:
mode:
ref: VrrMode
required: false
description: The VRR mode.
cursor-hz:
ref: VrrHz
required: false
description: |
The VRR cursor refresh rate.
Limits the rate at which cursors are updated on screen when VRR is active.
VrrMode:
description: |
The VRR mode of an output.
- Example:
```toml
vrr = { mode = "always", cursor-hz = 90 }
```
kind: string
values:
- value: always
description: VRR is never enabled.
- value: never
description: VRR is always enabled.
- value: variant1
description: VRR is enabled when one or more applications are displayed fullscreen.
- value: variant2
description: VRR is enabled when a single application is displayed fullscreen.
- value: variant3
description: VRR is enabled when a single game or video is displayed fullscreen.
VrrHz:
description: |
A VRR refresh rate limiter.
- Example 1:
```toml
vrr = { cursor-hz = 90 }
```
- Example 2:
```toml
vrr = { cursor-hz = "none" }
```
kind: variable
variants:
- kind: string
description: The string `none` can be used to disable the limiter.
- kind: number
description: The refresh rate in HZ.
Tearing:
kind: table
description: |
Describes tearing settings.
- Example:
```toml
tearing.mode = "never"
```
fields:
mode:
ref: TearingMode
required: false
description: The tearing mode.
TearingMode:
description: |
The tearing mode of an output.
- Example:
```toml
tearing.mode = "never"
```
kind: string
values:
- value: always
description: Tearing is never enabled.
- value: never
description: Tearing is always enabled.
- value: variant1
description: Tearing is enabled when one or more applications are displayed fullscreen.
- value: variant2
description: Tearing is enabled when a single application is displayed fullscreen.
- value: variant3
description: |
Tearing is enabled when a single application is displayed and the application has
requested tearing.
Libei:
kind: table
description: |
Describes libei settings.
- Example:
```toml
libei.enable-socket = "true"
```
fields:
enable-socket:
kind: boolean
required: false
description: |
Enables or disables the unauthenticated libei socket.
Even if the socket is disabled, application can still request access via the portal.
The default is `false`.
Format:
description: |
A graphics format.
These formats are documented in https://github.com/torvalds/linux/blob/master/include/uapi/drm/drm_fourcc.h
- Example:
```toml
[[outputs]]
match.serial-number = "33K03894SL0"
format = "rgb565"
```
kind: string
values:
- value: argb8888
description: ""
- value: xrgb8888
description: ""
- value: abgr8888
description: ""
- value: xbgr8888
description: ""
- value: r8
description: ""
- value: gr88
description: ""
- value: rgb888
description: ""
- value: bgr888
description: ""
- value: rgba4444
description: ""
- value: rgbx4444
description: ""
- value: bgra4444
description: ""
- value: bgrx4444
description: ""
- value: rgb565
description: ""
- value: bgr565
description: ""
- value: rgba5551
description: ""
- value: rgbx5551
description: ""
- value: bgra5551
description: ""
- value: bgrx5551
description: ""
- value: argb1555
description: ""
- value: xrgb1555
description: ""
- value: argb2101010
description: ""
- value: xrgb2101010
description: ""
- value: abgr2101010
description: ""
- value: xbgr2101010
description: ""
- value: abgr16161616
description: ""
- value: xbgr16161616
description: ""
- value: abgr16161616f
description: ""
- value: xbgr16161616f
description: ""
UiDrag:
kind: table
description: |
Describes ui-drag settings.
- Example:
```toml
ui-drag = { enabled = false, threshold = 20 }
```
fields:
enabled:
kind: boolean
required: false
description: |
Enables or disables dragging of tiles and workspaces.
The default is `true`.
threshold:
kind: number
integer_only: true
required: false
description: |
Sets the distance at which ui dragging starts.
The default is `10`.
Xwayland:
kind: table
description: |
Describes Xwayland settings.
- Example:
```toml
xwayland = { scaling-mode = "downscaled" }
```
fields:
scaling-mode:
ref: XScalingMode
required: false
description: The scaling mode of X windows.
XScalingMode:
description: |
The scaling mode of X windows.
- Example:
```toml
xwayland = { scaling-mode = "downscaled" }
```
kind: string
values:
- value: default
description: |
The default mode.
Currently this means that windows are rendered at the lowest scale and then upscaled
if necessary.
- value: downscaled
description: |
Windows are rendered at the highest integer scale and then downscaled.
This has significant performance implications unless the window is running on the
output with the highest scale and that scale is an integer scale.
For example, on a 3840x2160 output with a 1.5 scale, a fullscreen window will be
rendered at 3840x2160 * 2 / 1.5 = 5120x2880 pixels and then downscaled to
3840x2160. This overhead gets worse the lower the scale of the output is.
Additionally, this mode requires the X window to scale its contents itself. In the
example above, you might achieve this by setting the environment variable
`GDK_SCALE=2`.
ColorManagement:
kind: table
description: |
Describes color-management settings.
- Example:
```toml
[color-management]
enabled = true
```
fields:
enabled:
description: |
Whether the color management protocol is enabled.
This has no effect on running applications.
The default is `false`.
kind: boolean
required: false
ColorSpace:
description: |
The color space of an output.
kind: string
values:
- value: default
description: The default color space (usually sRGB).
- value: bt2020
description: The BT.2020 color space.
TransferFunction:
description: |
The transfer function of an output.
kind: string
values:
- value: default
description: The default transfer function (usually sRGB).
- value: pq
description: The PQ transfer function.
Brightness:
kind: variable
description: |
The brightness setting of an output.
variants:
- kind: string
description: |
The default brightness setting.
values:
- value: default
description: |
The default brightness setting.
The behavior depends on the transfer function:
- `default`: The maximum brightness of the output.
- `PQ`: 203 cd/m^2
- kind: number
description: |
The brightness in cd/m^2.
Float:
kind: table
description: |
Describes settings of floating windows.
- Example:
```toml
[float]
show-pin-icon = true
```
fields:
show-pin-icon:
description: |
Sets whether floating windows always show a pin icon.
The default is `false`.
kind: boolean
required: false