Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Key bindings

The 81 bindings the shipped configuration makes, as solium --check lists them, with where each is made and what it calls. None of them belongs to the compositor: each is a sol.bind call in a script, so any of them can be changed or removed from the bindings section of user.lua (how), and solium --check then lists what your configuration replaced or removed.

Two chords are the compositor’s own and are not listed: ctrl+alt+backspace ends the session whatever the configuration says, except while the screen is locked, and ctrl+alt+F1 to ctrl+alt+F12 switch virtual terminal.

Nor is a key a mode binds only while it is up, because solium --check lists what the configuration binds as it loads: escape leaves the overview, and is bound only while the overview is open, so that the rest of the time it reaches the application with the keyboard.

init.lua

Solium’s default configuration.

KeysWhat it doesWhere
super+returnopen_terminal — Both Enters.init.lua:145
super+kp_enteropen_terminal — Both Enters.init.lua:146
super+qClose the focused window.init.lua:150
super+shift+qsol.quit() — Ending the session.init.lua:161
XF86AudioRaiseVolumerun("wpctl", "set-volume", "-l", "1.0", SINK, "5%+"), "laptop keys"init.lua:181
XF86AudioLowerVolumerun("wpctl", "set-volume", SINK, "5%-"), "laptop keys"init.lua:182
shift+XF86AudioRaiseVolumerun("wpctl", "set-volume", "-l", "1.0", SINK, "1%+"), "laptop keys"init.lua:183
shift+XF86AudioLowerVolumerun("wpctl", "set-volume", SINK, "1%-"), "laptop keys"init.lua:184
XF86AudioMuterun("wpctl", "set-mute", SINK, "toggle"), "laptop keys"init.lua:185
XF86AudioMicMuterun("wpctl", "set-mute", SOURCE, "toggle"), "laptop keys"init.lua:186
XF86MonBrightnessUprun("brightnessctl", "set", "5%+"), "laptop keys"init.lua:187
XF86MonBrightnessDownrun("brightnessctl", "set", "5%-"), "laptop keys"init.lua:188
XF86AudioPlayrun("playerctl", "play-pause"), "laptop keys"init.lua:189
XF86AudioPauserun("playerctl", "play-pause"), "laptop keys"init.lua:190
XF86AudioNextrun("playerctl", "next"), "laptop keys"init.lua:191
XF86AudioPrevrun("playerctl", "previous"), "laptop keys"init.lua:192
Printrun("sh", "-c", SHOT .. 'grim "$file"' .. CLIP), "laptop keys"init.lua:198
shift+Printrun("sh", "-c", SHOT .. 'area="$(slurp)" && grim -g "$area" "$file"' .. CLIP), "laptop keys"init.lua:199
super+shift+drequire("tweaks").toggle() — Show or hide the Developer Tweaks panel.init.lua:204
super+shift+kCycle the keyboard layout, when the configuration lists more than one.init.lua:218
super+shift+rsol.reload() — Read this file again, without ending the session.init.lua:230
super+mDev: the genie.init.lua:244
super+gA tilted window, to see the compositor draw one as geometry rather than as a rectangle.init.lua:271

direction.lua

Focus and move by direction (#150).

KeysWhat it doesWhere
super+leftsol.focus_direction("left") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:293
super+rightsol.focus_direction("right") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:294
super+upsol.focus_direction("up") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:295
super+downsol.focus_direction("down") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:296
super+hsol.focus_direction("left") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:297
super+lsol.focus_direction("right") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:298
super+ksol.focus_direction("up") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:299
super+jsol.focus_direction("down") — The arrows and vim’s h, j, k and l, as sway and Hyprland ship them: super to focus, super+shift to move.direction.lua:300
super+shift+leftsol.move_direction("left")direction.lua:302
super+shift+rightsol.move_direction("right")direction.lua:303
super+shift+upsol.move_direction("up")direction.lua:304
super+shift+downsol.move_direction("down")direction.lua:305
super+shift+hsol.move_direction("left")direction.lua:306
super+shift+lsol.move_direction("right")direction.lua:307
super+alt+ksol.move_direction("up")direction.lua:308
super+shift+jsol.move_direction("down")direction.lua:309

modes.lua

Which layout is in charge.

KeysWhat it doesWhere
super+shift+spacemodes.lua:141
super+fsol.toggle_fullscreen()modes.lua:149
super+shift+msol.toggle_maximize()modes.lua:152

overview.lua

Overview: every window scaled onto a grid.

KeysWhat it doesWhere
super+spaceoverview.toggle — Into the overview and out again; while it is up, Escape leaves it too.overview.lua:137

scrolling.lua

Scrolling: columns and a moving view, as niri does it.

KeysWhat it doesWhere
super+sscrolling.togglescrolling.lua:521
super+bracketleftview:focus_sideways(-1, options(on)) — Move between columns, and within one.scrolling.lua:524
super+bracketrightview:focus_sideways(1, options(on)) — Move between columns, and within one.scrolling.lua:525
super+ctrl+bracketleftview:move_column(-1, options(on)) — Move between columns, and within one.scrolling.lua:526
super+ctrl+bracketrightview:move_column(1, options(on)) — Move between columns, and within one.scrolling.lua:527
super+shift+bracketleftview:focus_vertically(-1) — Move between columns, and within one.scrolling.lua:528
super+shift+bracketrightview:focus_vertically(1) — Move between columns, and within one.scrolling.lua:529
super+commaview:consume() — Stack a window into this column, or push it back out into its own.scrolling.lua:532
super+periodview:expel(options(on)) — Stack a window into this column, or push it back out into its own.scrolling.lua:533
super+rview:cycle_width(options(on)) — Cycle the column through the preset widths.scrolling.lua:536

tiling.lua

Tiling: dwindle, as Hyprland does it.

KeysWhat it doesWhere
super+ttiling.toggletiling.lua:900
super+minusnudge("width", -0.05)tiling.lua:931
super+equalnudge("width", 0.05)tiling.lua:932
super+ctrl+minusnudge("height", -0.05) — Height on the same two keys, because the other axis was reachable before this change …tiling.lua:956
super+ctrl+equalnudge("height", 0.05) — Height on the same two keys, because the other axis was reachable before this change …tiling.lua:957

workspaces.lua

Workspaces, as a presentation.

KeysWhat it doesWhere
super+1 … super+dworkspaces.go(index)workspaces.lua:668
super+shift+1 … super+shift+9workspaces.send(index)workspaces.lua:671
super+ctrl+leftworkspaces.step(-1, 0)workspaces.lua:676
super+ctrl+rightworkspaces.step(1, 0)workspaces.lua:677
super+ctrl+upworkspaces.step(0, -1)workspaces.lua:678
super+ctrl+downworkspaces.step(0, 1)workspaces.lua:679