1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# unbox.toml — sample configuration
#
# Copy to $XDG_CONFIG_HOME/unbox/unbox.toml (i.e. ~/.config/unbox/unbox.toml)
# and edit. If no config file is found, unbox uses these exact defaults.
#
# Keybindings -------------------------------------------------------------------
# Each [[keybind]] maps a key combo to one action.
#
# keys "Mod+...+Key" — modifiers (Super, Alt, Ctrl, Shift; order/case
# insensitive) then an xkb key name (Tab, F1, Return, space,
# BackSpace, d, ...). A BARE modifier with no "+Key" (e.g. "Super")
# is a TAP binding: it fires only when that modifier is pressed and
# released with nothing pressed in between.
# action one of: spawn (needs `command`) · focus-next · focus-prev ·
# close-active · quit
# command (spawn only) shell line, run via `sh -c`, so args/quoting work.
[[keybind]]
keys = "Super" # tap the Windows key: toggle the launcher
action = "spawn"
# Toggle: if fuzzel is already open, close it; otherwise launch it. `pkill -x`
# matches the exact process name and returns 0 when it killed something (so the
# `|| fuzzel` is skipped); when nothing was running it returns non-zero and
# fuzzel launches. Runs via `sh -c`.
command = "pkill -x fuzzel || fuzzel"
[[keybind]]
keys = "Alt+Tab" # next window (all windows, wraps around)
action = "focus-next"
[[keybind]]
keys = "Alt+Shift+Tab" # previous window
action = "focus-prev"
[[keybind]]
keys = "Alt+F1" # legacy focus cycle (kept from the tinywl port)
action = "focus-next"
[[keybind]]
keys = "Ctrl+Alt+Backspace" # quit the unbox session
action = "quit"
# Window field (RML compositing) ------------------------------------------------
# Tunes how the window field (when --rml-compositing is on) sizes a client to the
# on-screen TILE that RCSS lays out for it. The tile animates over a short RCSS
# transition on every focus / map / unmap, so the question is WHEN to push the new
# size to the client — each push makes the client reallocate its buffer + redraw.
#
# resize_mode
# "off" Never resize the client: it keeps its own size, scaled to fill
# the tile. No reconfigure cost.
# "settle" (default) Wait for the tile to stop animating, then send ONE
# configure to the final size. ~1 client redraw per focus change.
# "continuous" Send a configure every frame the tile changes — exact tracking,
# but ~1 redraw per animation frame (heavy on low-end GPUs).
# "debounced" Coalesce: at most one configure per `resize_debounce_ms` during
# the animation, plus a final one on settle.
#
# resize_debounce_ms Used only by "debounced" (milliseconds, >= 0). Default 100.
#
# Omit this table to get the defaults below. Edits hot-reload live.
[window-field]
resize_mode = "settle"
resize_debounce_ms = 100
|