Set the offset for the active window border
+
+Usage: active-window-border-offset <OFFSET>
+
+Arguments:
+ <OFFSET>
+ Desired offset of the active window border
+
+Options:
+ -h, --help
+ Print help
+
+
Set the width for the active window border
+
+Usage: active-window-border-width <WIDTH>
+
+Arguments:
+ <WIDTH>
+ Desired width of the active window border
+
+Options:
+ -h, --help
+ Print help
+
+
Generate common app-specific configurations and fixes to use in komorebi.ahk
+
+Usage: ahk-app-specific-configuration <PATH> [OVERRIDE_PATH]
+
+Arguments:
+ <PATH>
+ YAML file from which the application-specific configurations should be loaded
+
+ [OVERRIDE_PATH]
+ Optional YAML file of overrides to apply over the first file
+
+Options:
+ -h, --help
+ Print help
+
+
Set the container padding for the specified workspace
+
+Usage: container-padding <MONITOR> <WORKSPACE> <SIZE>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE>
+ Workspace index on the specified monitor (zero-indexed)
+
+ <SIZE>
+ Pixels to pad with as an integer
+
+Options:
+ -h, --help
+ Print help
+
+
Set the behaviour when moving windows across monitor boundaries
+
+Usage: cross-monitor-move-behaviour <MOVE_BEHAVIOUR>
+
+Arguments:
+ <MOVE_BEHAVIOUR>
+ Possible values:
+ - swap: Swap the window container with the window container at the edge of the adjacent monitor
+ - insert: Insert the window container into the focused workspace on the adjacent monitor
+
+Options:
+ -h, --help
+ Print help (see a summary with '-h')
+
+
Move the focused window to the monitor in the given cycle direction
+
+Usage: cycle-move-to-monitor <CYCLE_DIRECTION>
+
+Arguments:
+ <CYCLE_DIRECTION>
+ [possible values: previous, next]
+
+Options:
+ -h, --help
+ Print help
+
+
Move the focused window to the workspace in the given cycle direction
+
+Usage: cycle-move-to-workspace <CYCLE_DIRECTION>
+
+Arguments:
+ <CYCLE_DIRECTION>
+ [possible values: previous, next]
+
+Options:
+ -h, --help
+ Print help
+
+
Send the focused window to the monitor in the given cycle direction
+
+Usage: cycle-send-to-monitor <CYCLE_DIRECTION>
+
+Arguments:
+ <CYCLE_DIRECTION>
+ [possible values: previous, next]
+
+Options:
+ -h, --help
+ Print help
+
+
Send the focused window to the workspace in the given cycle direction
+
+Usage: cycle-send-to-workspace <CYCLE_DIRECTION>
+
+Arguments:
+ <CYCLE_DIRECTION>
+ [possible values: previous, next]
+
+Options:
+ -h, --help
+ Print help
+
+
Set the display index preference for a monitor identified using its display name
+
+Usage: display-index-preference <INDEX_PREFERENCE> <DISPLAY>
+
+Arguments:
+ <INDEX_PREFERENCE>
+ Preferred monitor index (zero-indexed)
+
+ <DISPLAY>
+ Display name as identified in komorebic state
+
+Options:
+ -h, --help
+ Print help
+
+
Create these many named workspaces for the specified monitor
+
+Usage: ensure-named-workspaces <MONITOR> [NAMES]...
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ [NAMES]...
+ Names of desired workspaces
+
+Options:
+ -h, --help
+ Print help
+
+
Create at least this many workspaces for the specified monitor
+
+Usage: ensure-workspaces <MONITOR> <WORKSPACE_COUNT>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE_COUNT>
+ Number of desired workspaces
+
+Options:
+ -h, --help
+ Print help
+
+
Fetch the latest version of applications.yaml from komorebi-application-specific-configuration
+
+Usage: fetch-app-specific-configuration
+
+Options:
+ -h, --help
+ Print help
+
+
Set container padding on the focused workspace
+
+Usage: focused-workspace-container-padding <SIZE>
+
+Arguments:
+ <SIZE>
+ Pixels size to set as an integer
+
+Options:
+ -h, --help
+ Print help
+
+
Set workspace padding on the focused workspace
+
+Usage: focused-workspace-padding <SIZE>
+
+Arguments:
+ <SIZE>
+ Pixels size to set as an integer
+
+Options:
+ -h, --help
+ Print help
+
+
Format a YAML file for use with the 'ahk-app-specific-configuration' command
+
+Usage: format-app-specific-configuration <PATH>
+
+Arguments:
+ <PATH>
+ YAML file from which the application-specific configurations should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Generates a static configuration JSON file based on the current window manager state
+
+Usage: generate-static-config
+
+Options:
+ -h, --help
+ Print help
+
+
Set offsets to exclude parts of the work area from tiling
+
+Usage: global-work-area-offset <LEFT> <TOP> <RIGHT> <BOTTOM>
+
+Arguments:
+ <LEFT>
+ Size of the left work area offset (set right to left * 2 to maintain right padding)
+
+ <TOP>
+ Size of the top work area offset (set bottom to the same value to maintain bottom padding)
+
+ <RIGHT>
+ Size of the right work area offset
+
+ <BOTTOM>
+ Size of the bottom work area offset
+
+Options:
+ -h, --help
+ Print help
+
+
Identify an application that has WS_EX_LAYERED, but should still be managed
+
+Usage: identify-layered-application <IDENTIFIER> <ID>
+
+Arguments:
+ <IDENTIFIER>
+ [possible values: exe, class, title]
+
+ <ID>
+ Identifier as a string
+
+Options:
+ -h, --help
+ Print help
+
+
Add a rule to associate an application with a named workspace on first show
+
+Usage: initial-named-workspace-rule <IDENTIFIER> <ID> <WORKSPACE>
+
+Arguments:
+ <IDENTIFIER>
+ [possible values: exe, class, title]
+
+ <ID>
+ Identifier as a string
+
+ <WORKSPACE>
+ Name of a workspace
+
+Options:
+ -h, --help
+ Print help
+
+
Add a rule to associate an application with a workspace on first show
+
+Usage: initial-workspace-rule <IDENTIFIER> <ID> <MONITOR> <WORKSPACE>
+
+Arguments:
+ <IDENTIFIER>
+ [possible values: exe, class, title]
+
+ <ID>
+ Identifier as a string
+
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE>
+ Workspace index on the specified monitor (zero-indexed)
+
+Options:
+ -h, --help
+ Print help
+
+
Set the invisible border dimensions around each window
+
+Usage: invisible-borders <LEFT> <TOP> <RIGHT> <BOTTOM>
+
+Arguments:
+ <LEFT>
+ Size of the left invisible border
+
+ <TOP>
+ Size of the top invisible border (usually 0)
+
+ <RIGHT>
+ Size of the right invisible border (usually left * 2)
+
+ <BOTTOM>
+ Size of the bottom invisible border (usually the same as left)
+
+Options:
+ -h, --help
+ Print help
+
+
Load a custom layout from file for the focused workspace
+
+Usage: load-custom-layout <PATH>
+
+Arguments:
+ <PATH>
+ JSON or YAML file from which the custom layout definition should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Load the resize layout dimensions from a file
+
+Usage: load-resize <PATH>
+
+Arguments:
+ <PATH>
+ File from which the resize layout dimensions should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Set the monitor index preference for a monitor identified using its size
+
+Usage: monitor-index-preference <INDEX_PREFERENCE> <LEFT> <TOP> <RIGHT> <BOTTOM>
+
+Arguments:
+ <INDEX_PREFERENCE>
+ Preferred monitor index (zero-indexed)
+
+ <LEFT>
+ Left value of the monitor's size Rect
+
+ <TOP>
+ Top value of the monitor's size Rect
+
+ <RIGHT>
+ Right value of the monitor's size Rect
+
+ <BOTTOM>
+ Bottom value of the monitor's size Rect
+
+Options:
+ -h, --help
+ Print help
+
+
Set offsets for a monitor to exclude parts of the work area from tiling
+
+Usage: monitor-work-area-offset <MONITOR> <LEFT> <TOP> <RIGHT> <BOTTOM>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <LEFT>
+ Size of the left work area offset (set right to left * 2 to maintain right padding)
+
+ <TOP>
+ Size of the top work area offset (set bottom to the same value to maintain bottom padding)
+
+ <RIGHT>
+ Size of the right work area offset
+
+ <BOTTOM>
+ Size of the bottom work area offset
+
+Options:
+ -h, --help
+ Print help
+
+
Set the container padding for the specified workspace
+
+Usage: named-workspace-container-padding <WORKSPACE> <SIZE>
+
+Arguments:
+ <WORKSPACE>
+ Target workspace name
+
+ <SIZE>
+ Pixels to pad with as an integer
+
+Options:
+ -h, --help
+ Print help
+
+
Add a dynamic custom layout for the specified workspace
+
+Usage: named-workspace-custom-layout-rule <WORKSPACE> <AT_CONTAINER_COUNT> <PATH>
+
+Arguments:
+ <WORKSPACE>
+ Target workspace name
+
+ <AT_CONTAINER_COUNT>
+ The number of window containers on-screen required to trigger this layout rule
+
+ <PATH>
+ JSON or YAML file from which the custom layout definition should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Set a custom layout for the specified workspace
+
+Usage: named-workspace-custom-layout <WORKSPACE> <PATH>
+
+Arguments:
+ <WORKSPACE>
+ Target workspace name
+
+ <PATH>
+ JSON or YAML file from which the custom layout definition should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Set the workspace padding for the specified workspace
+
+Usage: named-workspace-padding <WORKSPACE> <SIZE>
+
+Arguments:
+ <WORKSPACE>
+ Target workspace name
+
+ <SIZE>
+ Pixels to pad with as an integer
+
+Options:
+ -h, --help
+ Print help
+
+
Add a rule to associate an application with a named workspace
+
+Usage: named-workspace-rule <IDENTIFIER> <ID> <WORKSPACE>
+
+Arguments:
+ <IDENTIFIER>
+ [possible values: exe, class, title]
+
+ <ID>
+ Identifier as a string
+
+ <WORKSPACE>
+ Name of a workspace
+
+Options:
+ -h, --help
+ Print help
+
+
Generate common app-specific configurations and fixes in a PowerShell script
+
+Usage: pwsh-app-specific-configuration <PATH> [OVERRIDE_PATH]
+
+Arguments:
+ <PATH>
+ YAML file from which the application-specific configurations should be loaded
+
+ [OVERRIDE_PATH]
+ Optional YAML file of overrides to apply over the first file
+
+Options:
+ -h, --help
+ Print help
+
+
Set the resize delta (used by resize-edge and resize-axis)
+
+Usage: resize-delta <PIXELS>
+
+Arguments:
+ <PIXELS>
+ The delta of pixels by which to increase or decrease window dimensions when resizing
+
+Options:
+ -h, --help
+ Print help
+
+
Save the current resize layout dimensions to a file
+
+Usage: save-resize <PATH>
+
+Arguments:
+ <PATH>
+ File to which the resize layout dimensions should be saved
+
+Options:
+ -h, --help
+ Print help
+
+
Start komorebi.exe as a background process
+
+Usage: start [OPTIONS]
+
+Options:
+ -f, --ffm
+ Allow the use of komorebi's custom focus-follows-mouse implementation
+
+ -c, --config <CONFIG>
+ Path to a static configuration JSON file
+
+ -a, --await-configuration
+ Wait for 'komorebic complete-configuration' to be sent before processing events
+
+ -t, --tcp-port <TCP_PORT>
+ Start a TCP server on the given port to allow the direct sending of SocketMessages
+
+ --whkd
+ Start whkd in a background process
+
+ --ahk
+ Start autohotkey configuration file
+
+ -h, --help
+ Print help
+
+
Stop the komorebi.exe process and restore all hidden windows
+
+Usage: stop [OPTIONS]
+
+Options:
+ --whkd
+ Stop whkd if it is running as a background process
+
+ -h, --help
+ Print help
+
+
Subscribe to komorebi events
+
+Usage: subscribe <NAMED_PIPE>
+
+Arguments:
+ <NAMED_PIPE>
+ Name of the pipe to send event notifications to (without "\\.\pipe\" prepended)
+
+Options:
+ -h, --help
+ Print help
+
+
Toggle the behaviour when moving windows across monitor boundaries
+
+Usage: toggle-cross-monitor-move-behaviour
+
+Options:
+ -h, --help
+ Print help
+
+
Toggle focus follows mouse for the operating system
+
+Usage: toggle-focus-follows-mouse [OPTIONS]
+
+Options:
+ -i, --implementation <IMPLEMENTATION>
+ [default: windows]
+
+ Possible values:
+ - komorebi: A custom FFM implementation (slightly more CPU-intensive)
+ - windows: The native (legacy) Windows FFM implementation
+
+ -h, --help
+ Print help (see a summary with '-h')
+
+
Toggle the behaviour for new windows (stacking or dynamic tiling)
+
+Usage: toggle-window-container-behaviour
+
+Options:
+ -h, --help
+ Print help
+
+
Set the operation behaviour when the focused window is not managed
+
+Usage: unmanaged-window-operation-behaviour <OPERATION_BEHAVIOUR>
+
+Arguments:
+ <OPERATION_BEHAVIOUR>
+ Possible values:
+ - op: Process komorebic commands on temporarily unmanaged/floated windows
+ - no-op: Ignore komorebic commands on temporarily unmanaged/floated windows
+
+Options:
+ -h, --help
+ Print help (see a summary with '-h')
+
+
Set the window behaviour when switching workspaces / cycling stacks
+
+Usage: window-hiding-behaviour <HIDING_BEHAVIOUR>
+
+Arguments:
+ <HIDING_BEHAVIOUR>
+ Possible values:
+ - hide: Use the SW_HIDE flag to hide windows when switching workspaces (has issues with Electron apps)
+ - minimize: Use the SW_MINIMIZE flag to hide windows when switching workspaces (has issues with frequent workspace switching)
+ - cloak: Use the undocumented SetCloak Win32 function to hide windows when switching workspaces (has foregrounding issues)
+
+Options:
+ -h, --help
+ Print help (see a summary with '-h')
+
+
Add a dynamic custom layout for the specified workspace
+
+Usage: workspace-custom-layout-rule <MONITOR> <WORKSPACE> <AT_CONTAINER_COUNT> <PATH>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE>
+ Workspace index on the specified monitor (zero-indexed)
+
+ <AT_CONTAINER_COUNT>
+ The number of window containers on-screen required to trigger this layout rule
+
+ <PATH>
+ JSON or YAML file from which the custom layout definition should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Set a custom layout for the specified workspace
+
+Usage: workspace-custom-layout <MONITOR> <WORKSPACE> <PATH>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE>
+ Workspace index on the specified monitor (zero-indexed)
+
+ <PATH>
+ JSON or YAML file from which the custom layout definition should be loaded
+
+Options:
+ -h, --help
+ Print help
+
+
Set the workspace name for the specified workspace
+
+Usage: workspace-name <MONITOR> <WORKSPACE> <VALUE>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE>
+ Workspace index on the specified monitor (zero-indexed)
+
+ <VALUE>
+ Name of the workspace as a String
+
+Options:
+ -h, --help
+ Print help
+
+
Set the workspace padding for the specified workspace
+
+Usage: workspace-padding <MONITOR> <WORKSPACE> <SIZE>
+
+Arguments:
+ <MONITOR>
+ Monitor index (zero-indexed)
+
+ <WORKSPACE>
+ Workspace index on the specified monitor (zero-indexed)
+
+ <SIZE>
+ Pixels to pad with as an integer
+
+Options:
+ -h, --help
+ Print help
+
+
It highly recommended that you enable support for long paths in Windows by
diff --git a/search/search_index.json b/search/search_index.json
new file mode 100644
index 00000000..05e97d00
--- /dev/null
+++ b/search/search_index.json
@@ -0,0 +1 @@
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Index","text":"
komorebi is a tiling window manager that works as an extension to Microsoft's Desktop Window Manager in Windows 10 and above.
komorebi allows you to control application windows, virtual workspaces and display monitors with a CLI which can be used with third-party software such as AutoHotKey to set user-defined keyboard shortcuts.
komorebi aims to make as few modifications as possible to the operating system and desktop environment by default. Users are free to make such modifications in their own configuration files for komorebi, but these will always remain opt-in and off-by-default.
There is a Discord server available for komorebi-related discussion, help, troubleshooting etc. If you have any specific feature requests or bugs to report, please create an issue on GitHub.
There is also a YouTube channel where I share komorebi live programming videos and tutorial videos.
komorebi only responds to WinEvents and the messages it receives on a dedicated socket.
komorebic is a CLI that writes messages on komorebi's socket.
komorebi doesn't handle any keyboard or mouse inputs; a third party program (e.g. whkd) is needed in order to translate keyboard and mouse events to komorebic commands.
This architecture, popularised by bspwm on Linux and yabai on macOS, is outlined as follows:
PROCESS SOCKET\nwhkd/ahk --------> komorebic <------> komorebi\n
komorebi, and tiling window managers in general, are very complex pieces of software.
In an attempt to reduce some of the initial configuration burden for users who are looking to try out the software for the first time, example configurations are provided and updated whenever appropriate.
"},{"location":"example-configurations.html#downloading-example-configurations","title":"Downloading example configurations","text":"
Run the following command to download example configuration files for komorebi and whkd. Pay attention to the output of the command to see where the example files have been downloaded. For most new users this will be in the $Env:USERPROFILE directory.
The example window manager configuration sets some sane defaults and provides five preconfigured workspaces on the primary monitor each with a different layout.
There is a community-maintained repository of \"apps behaving badly\" that do not conform to Windows application development guidelines and behave erratically when used with komorebi without additional configuration.
You can always download the latest version of these configurations by running komorebic fetch-asc. The output of this command will also provide a line that you can paste into komorebi.json to ensure that the window manager looks for the file in the correction location.
When installing and running komorebi for the first time, the komorebic quickstart command will usually download this file to the $Env:USERPROFILE directory.
While you can set the workspace padding (the space between the outer edges of the windows and the bezel of your monitor) and the container padding (the space between each of the tiled windows) for each workspace independently, you can also set a default for both of these values that will apply to all workspaces using default_workspace_padding and default_container_padding.
You may have seen videos and screenshots of people using komorebi with a thick, colourful active window border. You can also enable this by setting active_window_border to true. However, please be warned that this feature is a crude hack trying to compensate for the insistence of Microsoft Windows design teams to make custom borders with widths that are actually visible to the user a thing of the past and removing this capability from the Win32 API.
I know it's buggy, and I know that most of the it sucks, but this is something you should be bring up with the billion dollar company and not with me, the solo developer.
If you choose to use the active window border, you can set different colours to give you visual queues when you are focused on a single window, a stack of windows, or a window that is in monocole mode.
The example colours given are blue single, green for stack and pink for monocle.
whkd is a fairly basic piece of software with a simple configuration format: key bindings go to the left of the, and shell commands go to the right of the colon.
Please remember that whkd does not support overriding Microsoft's limitations on hotkey bindings that include the Windows key. If this is important to you, I recommend using AutoHotKey to set up your key bindings for komorebic commands instead.
.shell powershell\n\n# Reload whkd configuration\n# alt + o : taskkill /f /im whkd.exe && start /b whkd # if shell is cmd\nalt + o : taskkill /f /im whkd.exe && Start-Process whkd -WindowStyle hidden # if shell is pwsh / powershell\nalt + shift + o : komorebic reload-configuration\n\n# App shortcuts - these require shell to be pwsh / powershell\n# The apps will be focused if open, or launched if not open\n# alt + f : if ($wshell.AppActivate('Firefox') -eq $False) { start firefox }\n# alt + b : if ($wshell.AppActivate('Chrome') -eq $False) { start chrome }\n\n# Focus windows\nalt + h : komorebic focus left\nalt + j : komorebic focus down\nalt + k : komorebic focus up\nalt + l : komorebic focus right\nalt + shift + oem_4 : komorebic cycle-focus previous # oem_4 is [\nalt + shift + oem_6 : komorebic cycle-focus next # oem_6 is ]\n\n# Move windows\nalt + shift + h : komorebic move left\nalt + shift + j : komorebic move down\nalt + shift + k : komorebic move up\nalt + shift + l : komorebic move right\nalt + shift + return : komorebic promote\n\n# Stack windows\nalt + left : komorebic stack left\nalt + down : komorebic stack down\nalt + up : komorebic stack up\nalt + right : komorebic stack right\nalt + oem_1 : komorebic unstack # oem_1 is ;\nalt + oem_4 : komorebic cycle-stack previous # oem_4 is [\nalt + oem_6 : komorebic cycle-stack next # oem_6 is ]\n\n# Resize\nalt + oem_plus : komorebic resize-axis horizontal increase\nalt + oem_minus : komorebic resize-axis horizontal decrease\nalt + shift + oem_plus : komorebic resize-axis vertical increase\nalt + shift + oem_minus : komorebic resize-axis vertical decrease\n\n# Manipulate windows\nalt + t : komorebic toggle-float\nalt + shift + f : komorebic toggle-monocle\n\n# Window manager options\nalt + shift + r : komorebic retile\nalt + p : komorebic toggle-pause\n\n# Layouts\nalt + x : komorebic flip-layout horizontal\nalt + y : komorebic flip-layout vertical\n\n# Workspaces\nalt + 1 : komorebic focus-workspace 0\nalt + 2 : komorebic focus-workspace 1\nalt + 3 : komorebic focus-workspace 2\n\n# Move windows across workspaces\nalt + shift + 1 : komorebic move-to-workspace 0\nalt + shift + 2 : komorebic move-to-workspace 1\nalt + shift + 3 : komorebic move-to-workspace 2\n
There is one special directive at the top of the file, .shell which can be set to either powershell, pwsh or cmd. Which one you use will depend on which shell you use in your terminal.
powershell - set this if you are using the version of PowerShell that comes installed with Windows 10+ (the executable file for this is powershell.exe)
pwsh - set this if you are using PowerShell 7+, which you have installed yourself either through the Windows Store or WinGet (the executable file for this is pwsh.exe)
cmd - set this if you don't want to use PowerShell at all and instead you want to call commands through the shell used by the old-school Command Prompt (the executable file for this is cmd.exe)
Key codes for alphanumeric and arrow keys are just what you would expect. For punctuation and other keys, please refer to the Virtual Key Codes reference.
If you want to use one of those key codes, put them into lower case and remove the VK_ prefix. For example, the keycode VK_OEM_PLUS becomes oem_plus in the sample configuration above.
komorebi is a tiling window manager for Windows that is comprised comprised of two main binaries, komorebi.exe, which contains the window manager itself, and komorebic.exe, which is the main way to send commands to the tiling window manager.
It is important to note that neither komorebi.exe or komorebic.exe handle key bindings, because komorebi is a tiling window manager and not a hotkey daemon.
This getting started guide suggests the installation of whkd to allow you to bind komorebic.exe commands to hotkeys to allow you to communicate with the tiling window manager using keyboard shortcuts.
However, whkd is a very simple hotkey daemon, and notably, does not include workarounds for Microsoft's restrictions on hotkey combinations that can use the Windows key.
If using hotkey combinations with the Windows key is important to you, I suggest that once you are familiar with the main komorebic.exe commands used to manipulate the window manager, you use AutoHotKey to handle your key bindings.
It highly recommended that you enable support for long paths in Windows by running the following command in an Administrator Terminal before installing komorebi.
Make sure you have installed scoop and verified that installed binaries are available in your $PATH before proceeding.
Issues with komorebi and related commands not being recognized in the terminal ultimately come down to the $PATH environment variable not being correctly configured by your package manager and should not be raised as bugs or issues either on the komorebi GitHub repository or Discord server.
"},{"location":"installation.html#install-komorebi-and-whkd","title":"Install komorebi and whkd","text":"
First add the extras bucket
scoop bucket add extras\n
Then install the komorebi and whkd packages using scoop install
scoop install komorebi whkd\n
Once komorebi is installed, proceed to get the example configurations.
Make sure you have installed the latest version of winget and verified that installed binaries are available in your $PATH before proceeding.
Issues with komorebi and related commands not being recognized in the terminal ultimately come down to the $PATH environment variable not being correctly configured by your package manager and should not be raised as bugs or issues either on the komorebi GitHub repository or Discord server.
"},{"location":"installation.html#install-komorebi-and-whkd_1","title":"Install komorebi and whkd","text":"
Install the komorebi and whkd packages using winget install
Set the offset for the active window border\n\nUsage: active-window-border-offset <OFFSET>\n\nArguments:\n <OFFSET>\n Desired offset of the active window border\n\nOptions:\n -h, --help\n Print help\n\n
Set the width for the active window border\n\nUsage: active-window-border-width <WIDTH>\n\nArguments:\n <WIDTH>\n Desired width of the active window border\n\nOptions:\n -h, --help\n Print help\n\n
Adjust container padding on the focused workspace\n\nUsage: adjust-container-padding <SIZING> <ADJUSTMENT>\n\nArguments:\n <SIZING>\n [possible values: increase, decrease]\n\n <ADJUSTMENT>\n Pixels to adjust by as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Adjust workspace padding on the focused workspace\n\nUsage: adjust-workspace-padding <SIZING> <ADJUSTMENT>\n\nArguments:\n <SIZING>\n [possible values: increase, decrease]\n\n <ADJUSTMENT>\n Pixels to adjust by as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Generate common app-specific configurations and fixes to use in komorebi.ahk\n\nUsage: ahk-app-specific-configuration <PATH> [OVERRIDE_PATH]\n\nArguments:\n <PATH>\n YAML file from which the application-specific configurations should be loaded\n\n [OVERRIDE_PATH]\n Optional YAML file of overrides to apply over the first file\n\nOptions:\n -h, --help\n Print help\n\n
Clear all dynamic layout rules for the specified workspace\n\nUsage: clear-workspace-layout-rules <MONITOR> <WORKSPACE>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Set the container padding for the specified workspace\n\nUsage: container-padding <MONITOR> <WORKSPACE> <SIZE>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <SIZE>\n Pixels to pad with as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Set the behaviour when moving windows across monitor boundaries\n\nUsage: cross-monitor-move-behaviour <MOVE_BEHAVIOUR>\n\nArguments:\n <MOVE_BEHAVIOUR>\n Possible values:\n - swap: Swap the window container with the window container at the edge of the adjacent monitor\n - insert: Insert the window container into the focused workspace on the adjacent monitor\n\nOptions:\n -h, --help\n Print help (see a summary with '-h')\n\n
Focus the monitor in the given cycle direction\n\nUsage: cycle-monitor <CYCLE_DIRECTION>\n\nArguments:\n <CYCLE_DIRECTION>\n [possible values: previous, next]\n\nOptions:\n -h, --help\n Print help\n\n
Move the focused window to the monitor in the given cycle direction\n\nUsage: cycle-move-to-monitor <CYCLE_DIRECTION>\n\nArguments:\n <CYCLE_DIRECTION>\n [possible values: previous, next]\n\nOptions:\n -h, --help\n Print help\n\n
Move the focused window to the workspace in the given cycle direction\n\nUsage: cycle-move-to-workspace <CYCLE_DIRECTION>\n\nArguments:\n <CYCLE_DIRECTION>\n [possible values: previous, next]\n\nOptions:\n -h, --help\n Print help\n\n
Send the focused window to the monitor in the given cycle direction\n\nUsage: cycle-send-to-monitor <CYCLE_DIRECTION>\n\nArguments:\n <CYCLE_DIRECTION>\n [possible values: previous, next]\n\nOptions:\n -h, --help\n Print help\n\n
Send the focused window to the workspace in the given cycle direction\n\nUsage: cycle-send-to-workspace <CYCLE_DIRECTION>\n\nArguments:\n <CYCLE_DIRECTION>\n [possible values: previous, next]\n\nOptions:\n -h, --help\n Print help\n\n
Focus the workspace in the given cycle direction\n\nUsage: cycle-workspace <CYCLE_DIRECTION>\n\nArguments:\n <CYCLE_DIRECTION>\n [possible values: previous, next]\n\nOptions:\n -h, --help\n Print help\n\n
Set the display index preference for a monitor identified using its display name\n\nUsage: display-index-preference <INDEX_PREFERENCE> <DISPLAY>\n\nArguments:\n <INDEX_PREFERENCE>\n Preferred monitor index (zero-indexed)\n\n <DISPLAY>\n Display name as identified in komorebic state\n\nOptions:\n -h, --help\n Print help\n\n
Create these many named workspaces for the specified monitor\n\nUsage: ensure-named-workspaces <MONITOR> [NAMES]...\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n [NAMES]...\n Names of desired workspaces\n\nOptions:\n -h, --help\n Print help\n\n
Create at least this many workspaces for the specified monitor\n\nUsage: ensure-workspaces <MONITOR> <WORKSPACE_COUNT>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE_COUNT>\n Number of desired workspaces\n\nOptions:\n -h, --help\n Print help\n\n
Fetch the latest version of applications.yaml from komorebi-application-specific-configuration\n\nUsage: fetch-app-specific-configuration\n\nOptions:\n -h, --help\n Print help\n\n
Enable or disable focus follows mouse for the operating system\n\nUsage: focus-follows-mouse [OPTIONS] <BOOLEAN_STATE>\n\nArguments:\n <BOOLEAN_STATE>\n [possible values: enable, disable]\n\nOptions:\n -i, --implementation <IMPLEMENTATION>\n [default: windows]\n\n Possible values:\n - komorebi: A custom FFM implementation (slightly more CPU-intensive)\n - windows: The native (legacy) Windows FFM implementation\n\n -h, --help\n Print help (see a summary with '-h')\n\n
Focus the specified workspace on the target monitor\n\nUsage: focus-monitor-workspace <TARGET_MONITOR> <TARGET_WORKSPACE>\n\nArguments:\n <TARGET_MONITOR>\n Target monitor index (zero-indexed)\n\n <TARGET_WORKSPACE>\n Workspace index on the target monitor (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Focus the specified workspace on the focused monitor\n\nUsage: focus-workspace <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Focus the specified workspace on all monitors\n\nUsage: focus-workspaces <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Set container padding on the focused workspace\n\nUsage: focused-workspace-container-padding <SIZE>\n\nArguments:\n <SIZE>\n Pixels size to set as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Set workspace padding on the focused workspace\n\nUsage: focused-workspace-padding <SIZE>\n\nArguments:\n <SIZE>\n Pixels size to set as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Format a YAML file for use with the 'ahk-app-specific-configuration' command\n\nUsage: format-app-specific-configuration <PATH>\n\nArguments:\n <PATH>\n YAML file from which the application-specific configurations should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Generates a static configuration JSON file based on the current window manager state\n\nUsage: generate-static-config\n\nOptions:\n -h, --help\n Print help\n\n
Set offsets to exclude parts of the work area from tiling\n\nUsage: global-work-area-offset <LEFT> <TOP> <RIGHT> <BOTTOM>\n\nArguments:\n <LEFT>\n Size of the left work area offset (set right to left * 2 to maintain right padding)\n\n <TOP>\n Size of the top work area offset (set bottom to the same value to maintain bottom padding)\n\n <RIGHT>\n Size of the right work area offset\n\n <BOTTOM>\n Size of the bottom work area offset\n\nOptions:\n -h, --help\n Print help\n\n
Identify an application that has overflowing borders\n\nUsage: identify-border-overflow-application <IDENTIFIER> <ID>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\nOptions:\n -h, --help\n Print help\n\n
Identify an application that has WS_EX_LAYERED, but should still be managed\n\nUsage: identify-layered-application <IDENTIFIER> <ID>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\nOptions:\n -h, --help\n Print help\n\n
Identify an application that closes to the system tray\n\nUsage: identify-tray-application <IDENTIFIER> <ID>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\nOptions:\n -h, --help\n Print help\n\n
Add a rule to associate an application with a named workspace on first show\n\nUsage: initial-named-workspace-rule <IDENTIFIER> <ID> <WORKSPACE>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\n <WORKSPACE>\n Name of a workspace\n\nOptions:\n -h, --help\n Print help\n\n
Add a rule to associate an application with a workspace on first show\n\nUsage: initial-workspace-rule <IDENTIFIER> <ID> <MONITOR> <WORKSPACE>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Set the invisible border dimensions around each window\n\nUsage: invisible-borders <LEFT> <TOP> <RIGHT> <BOTTOM>\n\nArguments:\n <LEFT>\n Size of the left invisible border\n\n <TOP>\n Size of the top invisible border (usually 0)\n\n <RIGHT>\n Size of the right invisible border (usually left * 2)\n\n <BOTTOM>\n Size of the bottom invisible border (usually the same as left)\n\nOptions:\n -h, --help\n Print help\n\n
Load a custom layout from file for the focused workspace\n\nUsage: load-custom-layout <PATH>\n\nArguments:\n <PATH>\n JSON or YAML file from which the custom layout definition should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Load the resize layout dimensions from a file\n\nUsage: load-resize <PATH>\n\nArguments:\n <PATH>\n File from which the resize layout dimensions should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Set the monitor index preference for a monitor identified using its size\n\nUsage: monitor-index-preference <INDEX_PREFERENCE> <LEFT> <TOP> <RIGHT> <BOTTOM>\n\nArguments:\n <INDEX_PREFERENCE>\n Preferred monitor index (zero-indexed)\n\n <LEFT>\n Left value of the monitor's size Rect\n\n <TOP>\n Top value of the monitor's size Rect\n\n <RIGHT>\n Right value of the monitor's size Rect\n\n <BOTTOM>\n Bottom value of the monitor's size Rect\n\nOptions:\n -h, --help\n Print help\n\n
Set offsets for a monitor to exclude parts of the work area from tiling\n\nUsage: monitor-work-area-offset <MONITOR> <LEFT> <TOP> <RIGHT> <BOTTOM>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <LEFT>\n Size of the left work area offset (set right to left * 2 to maintain right padding)\n\n <TOP>\n Size of the top work area offset (set bottom to the same value to maintain bottom padding)\n\n <RIGHT>\n Size of the right work area offset\n\n <BOTTOM>\n Size of the bottom work area offset\n\nOptions:\n -h, --help\n Print help\n\n
Move the focused window to the specified monitor\n\nUsage: move-to-monitor <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Move the focused window to the specified workspace\n\nUsage: move-to-workspace <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Move the focused workspace to the specified monitor\n\nUsage: move-workspace-to-monitor <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Set the container padding for the specified workspace\n\nUsage: named-workspace-container-padding <WORKSPACE> <SIZE>\n\nArguments:\n <WORKSPACE>\n Target workspace name\n\n <SIZE>\n Pixels to pad with as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Add a dynamic custom layout for the specified workspace\n\nUsage: named-workspace-custom-layout-rule <WORKSPACE> <AT_CONTAINER_COUNT> <PATH>\n\nArguments:\n <WORKSPACE>\n Target workspace name\n\n <AT_CONTAINER_COUNT>\n The number of window containers on-screen required to trigger this layout rule\n\n <PATH>\n JSON or YAML file from which the custom layout definition should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Set a custom layout for the specified workspace\n\nUsage: named-workspace-custom-layout <WORKSPACE> <PATH>\n\nArguments:\n <WORKSPACE>\n Target workspace name\n\n <PATH>\n JSON or YAML file from which the custom layout definition should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Set the workspace padding for the specified workspace\n\nUsage: named-workspace-padding <WORKSPACE> <SIZE>\n\nArguments:\n <WORKSPACE>\n Target workspace name\n\n <SIZE>\n Pixels to pad with as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Add a rule to associate an application with a named workspace\n\nUsage: named-workspace-rule <IDENTIFIER> <ID> <WORKSPACE>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\n <WORKSPACE>\n Name of a workspace\n\nOptions:\n -h, --help\n Print help\n\n
Generate common app-specific configurations and fixes in a PowerShell script\n\nUsage: pwsh-app-specific-configuration <PATH> [OVERRIDE_PATH]\n\nArguments:\n <PATH>\n YAML file from which the application-specific configurations should be loaded\n\n [OVERRIDE_PATH]\n Optional YAML file of overrides to apply over the first file\n\nOptions:\n -h, --help\n Print help\n\n
Whitelist an application for title bar removal\n\nUsage: remove-title-bar <IDENTIFIER> <ID>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\nOptions:\n -h, --help\n Print help\n\n
Set the resize delta (used by resize-edge and resize-axis)\n\nUsage: resize-delta <PIXELS>\n\nArguments:\n <PIXELS>\n The delta of pixels by which to increase or decrease window dimensions when resizing\n\nOptions:\n -h, --help\n Print help\n\n
Save the current resize layout dimensions to a file\n\nUsage: save-resize <PATH>\n\nArguments:\n <PATH>\n File to which the resize layout dimensions should be saved\n\nOptions:\n -h, --help\n Print help\n\n
Send the focused window to the specified monitor workspace\n\nUsage: send-to-monitor-workspace <TARGET_MONITOR> <TARGET_WORKSPACE>\n\nArguments:\n <TARGET_MONITOR>\n Target monitor index (zero-indexed)\n\n <TARGET_WORKSPACE>\n Workspace index on the target monitor (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Send the focused window to the specified monitor\n\nUsage: send-to-monitor <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Send the focused window to the specified workspace\n\nUsage: send-to-workspace <TARGET>\n\nArguments:\n <TARGET>\n Target index (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Start komorebi.exe as a background process\n\nUsage: start [OPTIONS]\n\nOptions:\n -f, --ffm\n Allow the use of komorebi's custom focus-follows-mouse implementation\n\n -c, --config <CONFIG>\n Path to a static configuration JSON file\n\n -a, --await-configuration\n Wait for 'komorebic complete-configuration' to be sent before processing events\n\n -t, --tcp-port <TCP_PORT>\n Start a TCP server on the given port to allow the direct sending of SocketMessages\n\n --whkd\n Start whkd in a background process\n\n --ahk\n Start autohotkey configuration file\n\n -h, --help\n Print help\n\n
Stop the komorebi.exe process and restore all hidden windows\n\nUsage: stop [OPTIONS]\n\nOptions:\n --whkd\n Stop whkd if it is running as a background process\n\n -h, --help\n Print help\n\n
Subscribe to komorebi events\n\nUsage: subscribe <NAMED_PIPE>\n\nArguments:\n <NAMED_PIPE>\n Name of the pipe to send event notifications to (without \"\\\\.\\pipe\\\" prepended)\n\nOptions:\n -h, --help\n Print help\n\n
Toggle the behaviour when moving windows across monitor boundaries\n\nUsage: toggle-cross-monitor-move-behaviour\n\nOptions:\n -h, --help\n Print help\n\n
Toggle focus follows mouse for the operating system\n\nUsage: toggle-focus-follows-mouse [OPTIONS]\n\nOptions:\n -i, --implementation <IMPLEMENTATION>\n [default: windows]\n\n Possible values:\n - komorebi: A custom FFM implementation (slightly more CPU-intensive)\n - windows: The native (legacy) Windows FFM implementation\n\n -h, --help\n Print help (see a summary with '-h')\n\n
Toggle the behaviour for new windows (stacking or dynamic tiling)\n\nUsage: toggle-window-container-behaviour\n\nOptions:\n -h, --help\n Print help\n\n
Set the operation behaviour when the focused window is not managed\n\nUsage: unmanaged-window-operation-behaviour <OPERATION_BEHAVIOUR>\n\nArguments:\n <OPERATION_BEHAVIOUR>\n Possible values:\n - op: Process komorebic commands on temporarily unmanaged/floated windows\n - no-op: Ignore komorebic commands on temporarily unmanaged/floated windows\n\nOptions:\n -h, --help\n Print help (see a summary with '-h')\n\n
Unsubscribe from komorebi events\n\nUsage: unsubscribe <NAMED_PIPE>\n\nArguments:\n <NAMED_PIPE>\n Name of the pipe to stop sending event notifications to (without \"\\\\.\\pipe\\\" prepended)\n\nOptions:\n -h, --help\n Print help\n\n
Set the window behaviour when switching workspaces / cycling stacks\n\nUsage: window-hiding-behaviour <HIDING_BEHAVIOUR>\n\nArguments:\n <HIDING_BEHAVIOUR>\n Possible values:\n - hide: Use the SW_HIDE flag to hide windows when switching workspaces (has issues with Electron apps)\n - minimize: Use the SW_MINIMIZE flag to hide windows when switching workspaces (has issues with frequent workspace switching)\n - cloak: Use the undocumented SetCloak Win32 function to hide windows when switching workspaces (has foregrounding issues)\n\nOptions:\n -h, --help\n Print help (see a summary with '-h')\n\n
Add a dynamic custom layout for the specified workspace\n\nUsage: workspace-custom-layout-rule <MONITOR> <WORKSPACE> <AT_CONTAINER_COUNT> <PATH>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <AT_CONTAINER_COUNT>\n The number of window containers on-screen required to trigger this layout rule\n\n <PATH>\n JSON or YAML file from which the custom layout definition should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Set a custom layout for the specified workspace\n\nUsage: workspace-custom-layout <MONITOR> <WORKSPACE> <PATH>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <PATH>\n JSON or YAML file from which the custom layout definition should be loaded\n\nOptions:\n -h, --help\n Print help\n\n
Add a dynamic layout rule for the specified workspace\n\nUsage: workspace-layout-rule <MONITOR> <WORKSPACE> <AT_CONTAINER_COUNT> <LAYOUT>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <AT_CONTAINER_COUNT>\n The number of window containers on-screen required to trigger this layout rule\n\n <LAYOUT>\n [possible values: bsp, columns, rows, vertical-stack, horizontal-stack, ultrawide-vertical-stack]\n\nOptions:\n -h, --help\n Print help\n\n
Set the layout for the specified workspace\n\nUsage: workspace-layout <MONITOR> <WORKSPACE> <VALUE>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <VALUE>\n [possible values: bsp, columns, rows, vertical-stack, horizontal-stack, ultrawide-vertical-stack]\n\nOptions:\n -h, --help\n Print help\n\n
Set the workspace name for the specified workspace\n\nUsage: workspace-name <MONITOR> <WORKSPACE> <VALUE>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <VALUE>\n Name of the workspace as a String\n\nOptions:\n -h, --help\n Print help\n\n
Set the workspace padding for the specified workspace\n\nUsage: workspace-padding <MONITOR> <WORKSPACE> <SIZE>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <SIZE>\n Pixels to pad with as an integer\n\nOptions:\n -h, --help\n Print help\n\n
Add a rule to associate an application with a workspace\n\nUsage: workspace-rule <IDENTIFIER> <ID> <MONITOR> <WORKSPACE>\n\nArguments:\n <IDENTIFIER>\n [possible values: exe, class, title]\n\n <ID>\n Identifier as a string\n\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\nOptions:\n -h, --help\n Print help\n\n
Enable or disable window tiling for the specified workspace\n\nUsage: workspace-tiling <MONITOR> <WORKSPACE> <VALUE>\n\nArguments:\n <MONITOR>\n Monitor index (zero-indexed)\n\n <WORKSPACE>\n Workspace index on the specified monitor (zero-indexed)\n\n <VALUE>\n [possible values: enable, disable]\n\nOptions:\n -h, --help\n Print help\n\n