[BUG]: `komorebic change-layout scrolling` does nothing in a multiple monitor setup
bug
### Summary
`change-layout scrolling` silently returns without changing to the scrolling layout.
- Other layouts change properly using this command.
- Setting scrolling layout for a workspace in the static config file works.
- `cycle-layout` cycles to all the layouts including the scrolling layout.
- `workspace-layout 0 0 scrolling` works fine.
The relevant output in komorebi itself emits this warning (I have two monitors connected):
```
2026-01-21T07:27:26.425493Z INFO process_command{ChangeLayout(Scrolling)}:change_workspace_layout_default{layout=Scrolling}: komorebi::window_manager: changing layout
2026-01-21T07:27:26.425706Z WARN process_command{ChangeLayout(Scrolling)}:change_workspace_layout_default{layout=Scrolling}: komorebi::window_manager: scrolling layout is only supported for a single monitor; not changing layout
2026-01-21T07:27:26.427264Z INFO process_command{ChangeLayout(Scrolling)}: komorebi::process_command: processed
```
### Version Information
OS Name: Microsoft Windows 11 Pro
OS Version: 10.0.26200 N/A Build 26200
komorebic 0.1.39
tag:v0.1.39
commit_hash:8f982e45
build_time:2025-12-11 01:24:19 +00:00
build_env:rustc 1.91.1 (ed61e7d7e 2025-11-07),stable-x86_64-pc-windows-msvc
### Komorebi Configuration
```json
{
"$schema": "https://raw.githubusercontent.com/LGUG2Z/komorebi/master/schema.json",
"app_specific_configuration_path": "$Env:USERPROFILE/.komorebi/applications.json",
"cross_monitor_move_behaviour": "Insert",
"floating_window_aspect_ratio": "Standard",
"border_offset": 0,
"border_width": 3,
"border_style": "Square",
"default_container_padding": 5,
"default_workspace_padding": 5,
"mouse_follows_focus": false,
"border_colours": {
"monocle": "#ff3399",
"single": "#42a5f5",
"stack": "#00a542"
},
"stackbar": {
"height": 28,
"label": "Title",
"mode": "OnStack",
"tabs": {
"background": "#141414",
"focused_text": "#42a5f5",
"unfocused_text": "#b3b3b3",
"width": 175
}
},
"animation": {
"enabled": true,
"duration": 120,
"fps": 60,
"style": "EaseOutSine"
},
"ignore_rules": [
{
"id": "CloudDrive.Notifications.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "darktable.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "darktable",
"kind": "Title",
"matching_strategy": "DoesNotEqual"
}
],
{
"id": "darktable (Not Responding)",
"kind": "Title",
"matching_strategy": "Equals"
},
{
"id": "DrivePool.Notifications.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "ProtonVPN.Client.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
],
{
"id": "Scanner.Notifications.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "yasb.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
],
"tray_and_multi_window_applications": [
{
"id": "ClickUp.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "deluge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "TunnlTo.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "upc.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Viber.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
],
"floating_applications": [
[
{
"id": "deluge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Deluge",
"kind": "Title",
"matching_strategy": "DoesNotEndWith"
}
],
[
{
"id": "Discord.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "(Discord P|Camera p)opout",
"kind": "Title",
"matching_strategy": "Regex"
},
{
"id": " - Discord",
"kind": "Title",
"matching_strategy": "Equals"
}
],
[
{
"id": "DrivePool.UI.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "StableBit DrivePool",
"kind": "Title",
"matching_strategy": "DoesNotEqual"
}
],
{
"id": "Fallout3.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Fire Toolbox.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "Flow.Launcher.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Settings",
"kind": "Title",
"matching_strategy": "DoesNotEqual"
}
],
[
{
"id": "Focusrite Control 2.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Preferences",
"kind": "Title",
"matching_strategy": "Equals"
}
],
{
"id": "Hades.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Hades2.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "NVCleanstall v",
"kind": "Title",
"matching_strategy": "StartsWith"
},
[
{
"id": "obs(32|64).exe",
"kind": "Exe",
"matching_strategy": "Regex"
},
{
"id": "(Fullscreen|Windowed) Projector.*",
"kind": "Title",
"matching_strategy": "Regex"
}
],
{
"id": "odriveapp.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "okular.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "^(New Text Note|(\\w+ )+Properties|Select( \\w)+) - Okular$",
"kind": "Title",
"matching_strategy": "Regex"
}
],
{
"id": "RocketLeague.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Spyder(Utility| MQA)?.exe",
"kind": "Exe",
"matching_strategy": "Regex"
},
{
"id": "SVPtube ",
"kind": "Title",
"matching_strategy": "StartsWith"
},
[
{
"id": "Telegram.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "TelegramDesktop|Media viewer",
"kind": "Title",
"matching_strategy": "Regex"
}
],
[
{
"id": "Zoom.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "(VideoPreview|zWaitingMeetingID)WndClass|ZPPTEnhanceLoginMainWindowClassEx",
"kind": "Class",
"matching_strategy": "Regex"
}
]
],
"display_index_preferences": {
"0": "ACR0D5E-5&3b7692c&0&UID24833",
"1": "RTD1560-5&3b7692c&0&UID24832"
// "3": 3 // for single-monitor laptop or Remote Desktop configurations
},
"monitors": [
{
"workspaces": [
{
"name": "Primary",
"layout": "UltrawideVerticalStack",
"initial_workspace_rules": [
{
"id": "^Primary — .* — Mozilla Firefox$",
"kind": "Title",
"matching_strategy": "Regex"
}
]
},
{
"name": "Work",
"layout": "UltrawideVerticalStack",
"initial_workspace_rules": [
{
"id": "^Work — .* — Mozilla Firefox$",
"kind": "Title",
"matching_strategy": "Regex"
},
{
"id": "ClickUp.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "slack.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
]
},
{
"name": "3",
"layout": "UltrawideVerticalStack"
},
{
"name": "4",
"layout": "UltrawideVerticalStack"
},
{
"name": "5",
"layout": "UltrawideVerticalStack"
},
{
"name": "6",
"layout": "UltrawideVerticalStack"
}
]
},
{
"workspaces": [
{
"name": "Productivity",
"layout": "VerticalStack",
"window_container_behaviour": "Append",
"initial_workspace_rules": [
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Google Calendar",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Google Keep",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Time.is",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
{
"id": "Todoist.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
]
},
{
"name": "Social",
"layout": "VerticalStack",
"window_container_behaviour": "Append",
"initial_workspace_rules": [
{
"id": "Discord.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Messenger.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Discord (Web) - ",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Instagram - ",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Messenger - ",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
{
"id": "PhoneExperienceHost.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Telegram.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Viber.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
]
},
{
"name": "Media",
"layout": "VerticalStack",
"window_container_behaviour": "Append",
"initial_workspace_rules": [
{
"id": "Deezer.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "YouTube Music",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
{
"id": "obs64.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Spotify.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
]
},
{
"layout": "VerticalStack",
"name": "D"
},
{
"layout": "VerticalStack",
"name": "E"
},
{
"layout": "VerticalStack",
"name": "F"
}
]
},
{
"workspaces": [
{
"name": "Primary",
"layout": "VerticalStack",
"initial_workspace_rules": [
{
"id": "^Primary — .* — Mozilla Firefox$",
"kind": "Title",
"matching_strategy": "Regex"
}
]
},
{
"name": "Work",
"layout": "VerticalStack",
"initial_workspace_rules": [
{
"id": "^Work — .* — Mozilla Firefox$",
"kind": "Title",
"matching_strategy": "Regex"
},
{
"id": "ClickUp.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "slack.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
]
},
{
"initial_workspace_rules": [
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Google Calendar",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Google Keep",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Time.is",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
{
"id": "Todoist.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
],
"layout": "VerticalStack",
"name": "Productivity"
},
{
"initial_workspace_rules": [
{
"id": "Discord.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Messenger.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Discord (Web) - ",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Instagram - ",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Messenger - ",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
{
"id": "PhoneExperienceHost.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Telegram.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Viber.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
],
"layout": "VerticalStack",
"name": "Social"
},
{
"initial_workspace_rules": [
{
"id": "Deezer.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
[
{
"id": "msedge.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "YouTube Music",
"kind": "Title",
"matching_strategy": "StartsWith"
}
],
{
"id": "obs64.exe",
"kind": "Exe",
"matching_strategy": "Equals"
},
{
"id": "Spotify.exe",
"kind": "Exe",
"matching_strategy": "Equals"
}
],
"layout": "VerticalStack",
"name": "Media"
},
{
"layout": "VerticalStack",
"name": "D"
},
{
"layout": "VerticalStack",
"name": "E"
},
{
"layout": "VerticalStack",
"name": "F"
}
]
}
]
}
```
### Hotkey Configuration
```shell
.shell powershell
# show hotkeys
alt + shift + ctrl + oem_2 : komorebic toggle-shortcuts
# Reload configs
alt + r : schtasks /run /tn Jake\whkd
alt + shift + r : schtasks /run /tn Jake\komorebi
alt + ctrl + shift + r : schtasks /run /tn Jake\yasb
# Window management
alt + shift + m : komorebic manage
alt + shift + ctrl + m : komorebic unmanage
alt + shift + t : komorebic retile
alt + shift + ctrl + t : komorebic toggle-tiling
alt + w : komorebic promote-focus; komorebic force-focus
alt + shift + w : komorebic promote-swap
alt + f : komorebic toggle-monocle
alt + shift + f : komorebic toggle-float
alt + shift + ctrl + f : komorebic toggle-lock
alt + c : komorebic minimize
alt + shift + c : komorebic close
alt + shift + ctrl + c : komorebic toggle-maximize
alt + shift + x : komorebic resize-axis horizontal decrease
alt + x : komorebic resize-axis horizontal increase
alt + shift + z : komorebic resize-axis vertical decrease
alt + z : komorebic resize-axis vertical increase
# Layouts
alt + shift + h : komorebic flip-layout horizontal
alt + shift + v : komorebic flip-layout vertical
alt + shift + l : komorebic cycle-layout next
alt + d : komorebic change-layout ultrawide-vertical-stack
alt + shift + d : komorebic change-layout scrolling
alt + shift + ctrl + d : komorebic change-layout grid
alt + s : komorebic scrolling-layout-columns 2
alt + shift + s : komorebic scrolling-layout-columns 3
# Navigation & arrangement
# Window
f13 : komorebic focus left
f14 : komorebic focus down
f15 : komorebic focus up
f16 : komorebic focus right
ctrl + f13 : komorebic move left
ctrl + f14 : komorebic move down
ctrl + f15 : komorebic move up
ctrl + f16 : komorebic move right
# Stacks
f18 : komorebic cycle-stack next
f19 : komorebic cycle-stack previous
f17 : komorebic unstack
shift + f17 : komorebic unstack-all
shift + f20 : komorebic unstack-all
f20 : komorebic stack-all
ctrl + f17 : komorebic stack left
ctrl + f18 : komorebic stack down
ctrl + f19 : komorebic stack up
ctrl + f20 : komorebic stack right
# Workspaces & monitors
f21 : komorebic cycle-workspace previous
f22 : komorebic cycle-monitor next; komorebic force-focus
f23 : komorebic cycle-monitor previous; komorebic force-focus
f24 : komorebic cycle-workspace next
ctrl + f21 : komorebic cycle-move-to-workspace previous
ctrl + f22 : komorebic cycle-send-to-monitor next
ctrl + f23 : komorebic cycle-send-to-monitor previous
ctrl + f24 : komorebic cycle-move-to-workspace next
alt + 1 : komorebic focus-workspace 0
alt + 2 : komorebic focus-workspace 1
alt + 3 : komorebic focus-workspace 2
alt + 4 : komorebic focus-workspace 3
alt + 5 : komorebic focus-workspace 4
alt + 6 : komorebic focus-workspace 5
alt + 7 : komorebic focus-workspace 6
alt + 8 : komorebic focus-workspace 7
alt + 9 : komorebic focus-workspace 8
alt + shift + 1 : komorebic send-to-workspace 0
alt + shift + 2 : komorebic send-to-workspace 1
alt + shift + 3 : komorebic send-to-workspace 2
alt + shift + 4 : komorebic send-to-workspace 3
alt + shift + 5 : komorebic send-to-workspace 4
alt + shift + 6 : komorebic send-to-workspace 5
alt + shift + 7 : komorebic send-to-workspace 6
alt + shift + 8 : komorebic send-to-workspace 7
alt + shift + 9 : komorebic send-to-workspace 8
alt + f13 : komorebic focus-monitor-workspace 0 0
alt + f14 : komorebic focus-monitor-workspace 0 1
alt + f15 : komorebic focus-monitor-workspace 0 2
alt + f16 : komorebic focus-monitor-workspace 0 3
alt + f17 : komorebic focus-monitor-workspace 1 0
alt + f18 : komorebic focus-monitor-workspace 1 1
alt + f19 : komorebic focus-monitor-workspace 1 2
alt + f20 : komorebic focus-monitor-workspace 1 3
alt + ctrl + f13 : komorebic send-to-monitor-workspace 0 0
alt + ctrl + f14 : komorebic send-to-monitor-workspace 0 1
alt + ctrl + f15 : komorebic send-to-monitor-workspace 0 2
alt + ctrl + f16 : komorebic send-to-monitor-workspace 0 3
alt + shift + ctrl + f13 : komorebic send-to-monitor-workspace 0 4
alt + shift + ctrl + f14 : komorebic send-to-monitor-workspace 0 5
alt + shift + ctrl + f15 : komorebic send-to-monitor-workspace 0 6
alt + shift + ctrl + f16 : komorebic send-to-monitor-workspace 0 7
alt + ctrl + f17 : komorebic send-to-monitor-workspace 1 0
alt + ctrl + f18 : komorebic send-to-monitor-workspace 1 1
alt + ctrl + f19 : komorebic send-to-monitor-workspace 1 2
alt + ctrl + f20 : komorebic send-to-monitor-workspace 1 3
alt + shift + ctrl + f17 : komorebic send-to-monitor-workspace 1 4
alt + shift + ctrl + f18 : komorebic send-to-monitor-workspace 1 5
alt + shift + ctrl + f19 : komorebic send-to-monitor-workspace 1 6
alt + shift + ctrl + f20 : komorebic send-to-monitor-workspace 1 7
```
### Output of komorebic check
```shell
KOMOREBI_CONFIG_HOME detected: C:\Users\Jake\.komorebi
Looking for configuration files in C:\Users\Jake\.komorebi
Found komorebi.json; this file can be passed to the start command with the --config flag
Found C:\Users\Jake\.config\whkdrc; key bindings will be loaded from here when whkd is started, and you can start it automatically using the --whkd flag
```
3 条评论