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: 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 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 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. 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 = "" 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 = "" 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" ``` 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" } ``` 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`.