| 1 | # monolith's built-in config, used when ~/.config/monolith/config.toml is |
| 2 | # missing. Copy it there to change anything. |
| 3 | |
| 4 | # Programs started with the compositor, each an argv list. |
| 5 | startup = [] |
| 6 | |
| 7 | [general] |
| 8 | # What Mod means in binds. Use alt when nesting inside a compositor that |
| 9 | # keeps super for itself. |
| 10 | mod = "super" |
| 11 | gaps = { inner = 8, outer = 8 } |
| 12 | # A new window splits the one it opens beside along that window's longer side, |
| 13 | # so windows dwindle. When off it joins the container of that window instead. |
| 14 | autotile = true |
| 15 | # What a window move does when it meets a neighbour. swap trades places, |
| 16 | # merge joins its lane. invert-move does the other one for the next move. |
| 17 | move = "swap" |
| 18 | # Focus whatever window the pointer moves onto. |
| 19 | focus_follows_mouse = false |
| 20 | # Put the pointer in the middle of a window focused from the keyboard, a |
| 21 | # rule or a new map. Bare metal only, a nested pointer belongs to the host. |
| 22 | mouse_follows_focus = false |
| 23 | # A window landing on, or moved to, a tag or output where its tag is empty and |
| 24 | # not in view brings the tag into view there, alongside the tags already shown. |
| 25 | view_tag_on_first_window = true |
| 26 | |
| 27 | [decoration] |
| 28 | # Borders sit in the gap around each window, so keep them under half the inner gap. |
| 29 | border = 2 |
| 30 | # Corner radius, one number or [top left, top right, bottom right, bottom left]. |
| 31 | # Fullscreen windows stay square. |
| 32 | radius = 0 |
| 33 | focused = "#88bfd1" |
| 34 | unfocused = "#3b4252" |
| 35 | # A window asking for attention that is not focused. |
| 36 | urgent = "#ebcb8b" |
| 37 | |
| 38 | [output] |
| 39 | # Variable refresh rate on outputs that support it, off, on, or fullscreen. |
| 40 | vrr = "fullscreen" |
| 41 | |
| 42 | # Per connector. transform, position and scale follow a reload, mode needs a |
| 43 | # replug. transform is normal, 90, 180, 270, flipped, flipped-90, flipped-180 or |
| 44 | # flipped-270. Outputs without a position line up left to right. position is in |
| 45 | # logical pixels, the size of the output divided by its scale. scale is 0.5 to |
| 46 | # 4.0 and is rounded to the nearest 1/120. X11 clients are drawn at scale 1 and |
| 47 | # stretched. The nested backend's window is [output.nested], where only scale |
| 48 | # applies. |
| 49 | # [output.DP-1] |
| 50 | # transform = "90" |
| 51 | # position = [2560, 0] |
| 52 | # mode = "1920x1080@60" |
| 53 | # scale = 1.5 |
| 54 | |
| 55 | [animation] |
| 56 | enabled = true |
| 57 | # orthogonal moves each window along one axis per phase, direct allows both. |
| 58 | style = "orthogonal" |
| 59 | phase_ms = 160 |
| 60 | curve = [0.45, 0.0, 0.2, 1.0] |
| 61 | |
| 62 | [idle] |
| 63 | # Seconds without input before every output is switched off, any input |
| 64 | # switches them back on. 0 never blanks. Windows holding an idle inhibitor |
| 65 | # keep the screen on while they are shown. |
| 66 | blank_after = 0 |
| 67 | |
| 68 | [lid] |
| 69 | # What closing the lid does, suspend, poweroff or ignore. The internal panel |
| 70 | # (eDP, LVDS) switches off whenever the lid is closed and another output is |
| 71 | # connected, and then neither suspend nor poweroff happens. Without a |
| 72 | # handle-lid-switch inhibitor, logind still acts on the lid itself, so set |
| 73 | # HandleLidSwitch=ignore there for ignore to mean anything. |
| 74 | close = "suspend" |
| 75 | |
| 76 | [keyboard] |
| 77 | layout = "" |
| 78 | repeat_delay = 200 |
| 79 | repeat_rate = 25 |
| 80 | |
| 81 | [xwayland] |
| 82 | # Which X11 clients may read the Wayland clipboard or primary selection, and |
| 83 | # set it. focused allows only the window holding keyboard focus, any allows |
| 84 | # every X11 client, which clipboard managers and headless xclip need. |
| 85 | selection_access = "focused" |
| 86 | |
| 87 | # libinput settings, bare metal only. Anything left out keeps the device's |
| 88 | # own default, and options a device lacks are skipped. Touchpads are devices |
| 89 | # that can tap, every other pointing device takes [input.pointer]. |
| 90 | # |
| 91 | # accel_profile flat, adaptive or custom |
| 92 | # accel_speed -1 to 1 |
| 93 | # accel_points the custom profile's curve, pointer speed at 0, accel_step, |
| 94 | # accel_step 2 * accel_step and so on, in device units per millisecond |
| 95 | # natural_scroll, left_handed, tap, tap_drag, tap_drag_lock, dwt (disable |
| 96 | # while typing), middle_emulation true or false |
| 97 | # scroll_method none, two-finger, edge or on-button-down |
| 98 | # scroll_button the evdev code of the on-button-down button, 274 for middle |
| 99 | # click_method button-areas or clickfinger |
| 100 | # scroll_factor multiplies scroll distance, applied by monolith |
| 101 | [input.pointer] |
| 102 | |
| 103 | [input.touchpad] |
| 104 | # tap = true |
| 105 | # natural_scroll = true |
| 106 | |
| 107 | # Per device, by the name `libinput list-devices` shows, over its kind's settings. |
| 108 | # Later entries win. |
| 109 | # [[input.device]] |
| 110 | # name = "Logitech G502" |
| 111 | # accel_profile = "flat" |
| 112 | # accel_speed = -0.3 |
| 113 | |
| 114 | # Each value is a command in word form, or an argv-style list. |
| 115 | [binds] |
| 116 | "Mod+Return" = "spawn beer" |
| 117 | "Mod+q" = "close" |
| 118 | "Mod+Shift+e" = "quit" |
| 119 | "Mod+Shift+r" = "reload" |
| 120 | |
| 121 | "Mod+h" = "focus left" |
| 122 | "Mod+j" = "focus down" |
| 123 | "Mod+k" = "focus up" |
| 124 | "Mod+l" = "focus right" |
| 125 | "Mod+Shift+h" = "move left" |
| 126 | "Mod+Shift+j" = "move down" |
| 127 | "Mod+Shift+k" = "move up" |
| 128 | "Mod+Shift+l" = "move right" |
| 129 | "Mod+Ctrl+h" = "move-container left" |
| 130 | "Mod+Ctrl+j" = "move-container down" |
| 131 | "Mod+Ctrl+k" = "move-container up" |
| 132 | "Mod+Ctrl+l" = "move-container right" |
| 133 | "Mod+m" = "invert-move" |
| 134 | "Mod+Alt+h" = "resize horizontal -0.05" |
| 135 | "Mod+Alt+l" = "resize horizontal 0.05" |
| 136 | "Mod+Alt+k" = "resize vertical -0.05" |
| 137 | "Mod+Alt+j" = "resize vertical 0.05" |
| 138 | |
| 139 | "Mod+e" = "expand window" |
| 140 | "Mod+Shift+w" = "expand container" |
| 141 | "Mod+w" = "maximize" |
| 142 | "Mod+o" = "flip" |
| 143 | "Mod+f" = "fullscreen" |
| 144 | "Mod+Shift+space" = "float" |
| 145 | "Mod+s" = "sticky" |
| 146 | |
| 147 | "Mod+comma" = "focus-output left" |
| 148 | "Mod+period" = "focus-output right" |
| 149 | "Mod+Shift+comma" = "send-to-output left" |
| 150 | "Mod+Shift+period" = "send-to-output right" |
| 151 | |
| 152 | "Mod+grave" = "summon term" |
| 153 | "Mod+Shift+grave" = "scratchpad term" |
| 154 | "Mod+Escape" = "dismiss" |
| 155 | |
| 156 | "Mod+1" = "view 1" |
| 157 | "Mod+2" = "view 2" |
| 158 | "Mod+3" = "view 3" |
| 159 | "Mod+4" = "view 4" |
| 160 | "Mod+5" = "view 5" |
| 161 | "Mod+6" = "view 6" |
| 162 | "Mod+7" = "view 7" |
| 163 | "Mod+8" = "view 8" |
| 164 | "Mod+9" = "view 9" |
| 165 | "Mod+Ctrl+1" = "toggle-view 1" |
| 166 | "Mod+Ctrl+2" = "toggle-view 2" |
| 167 | "Mod+Ctrl+3" = "toggle-view 3" |
| 168 | "Mod+Ctrl+4" = "toggle-view 4" |
| 169 | "Mod+Ctrl+5" = "toggle-view 5" |
| 170 | "Mod+Ctrl+6" = "toggle-view 6" |
| 171 | "Mod+Ctrl+7" = "toggle-view 7" |
| 172 | "Mod+Ctrl+8" = "toggle-view 8" |
| 173 | "Mod+Ctrl+9" = "toggle-view 9" |
| 174 | "Mod+Shift+1" = "tag 1" |
| 175 | "Mod+Shift+2" = "tag 2" |
| 176 | "Mod+Shift+3" = "tag 3" |
| 177 | "Mod+Shift+4" = "tag 4" |
| 178 | "Mod+Shift+5" = "tag 5" |
| 179 | "Mod+Shift+6" = "tag 6" |
| 180 | "Mod+Shift+7" = "tag 7" |
| 181 | "Mod+Shift+8" = "tag 8" |
| 182 | "Mod+Shift+9" = "tag 9" |
| 183 | |
| 184 | # Every rule matcher given must hit, later rules overriding earlier ones. Rules |
| 185 | # are matched when a window maps and again when its title or app_id changes |
| 186 | # before it has drawn, since many apps only set the real ones after their first |
| 187 | # commit. A pattern that does not compile leaves the rule out. |
| 188 | # |
| 189 | # Matchers, all optional. Patterns are regexes searched anywhere in the text. |
| 190 | # app_id the Wayland app_id, or the X11 class |
| 191 | # title the current title |
| 192 | # initial_title the title the window had when it mapped, which never changes |
| 193 | # class the X11 WM_CLASS class, never hits a Wayland window |
| 194 | # instance the X11 WM_CLASS instance, never hits a Wayland window |
| 195 | # xwayland true for X11 windows, false for Wayland ones |
| 196 | # dialog true for a window with a parent or transient, or an X11 |
| 197 | # dialog, false for any other |
| 198 | # parent_app_id the app_id of the window it is a dialog of, never hits a |
| 199 | # window without a parent |
| 200 | # |
| 201 | # Placement, fixed when the window maps or when its rules change before it has |
| 202 | # drawn. |
| 203 | # tag tag name to open on |
| 204 | # output connector name to open on |
| 205 | # floating open floating or tiled, whatever the window would be |
| 206 | # sticky show on every tag |
| 207 | # scratchpad name of the scratchpad to join |
| 208 | # fullscreen open fullscreen or not, over what the client asks |
| 209 | # focus false keeps the focus where it is when the window maps |
| 210 | # size [width, height] of a floating window |
| 211 | # position [x, y] of a floating window from its output top left |
| 212 | # center true centres a floating window, over position |
| 213 | # min_size [width, height] lower bound for floating sizes, 0 for none |
| 214 | # max_size [width, height] upper bound for floating sizes, 0 for none |
| 215 | # size, position, center and the bounds only touch windows that float, so |
| 216 | # pair them with floating = true unless the window floats anyway. |
| 217 | # |
| 218 | # Effects, following the latest rules that hit for the window's lifetime. |
| 219 | # opacity 0.0 to 1.0, multiplies how opaque the window is drawn |
| 220 | # idle_inhibit visible keeps the screen on while the window is shown, |
| 221 | # fullscreen only while it is also fullscreen |
| 222 | # vrr true or false forces adaptive sync on or off for the output |
| 223 | # while this window is fullscreen on it |
| 224 | # tearing reserved, tearing presentation is not implemented yet |
| 225 | # |
| 226 | # [[rules]] |
| 227 | # app_id = "^pavucontrol$" |
| 228 | # floating = true |
| 229 | # size = [900, 600] |
| 230 | # center = true |
| 231 | # |
| 232 | # [[rules]] |
| 233 | # app_id = "^mpv$" |
| 234 | # idle_inhibit = "fullscreen" |
| 235 | # vrr = true |
| 236 | # |
| 237 | # [[rules]] |
| 238 | # app_id = "^firefox$" |
| 239 | # title = "^Picture-in-Picture$" |
| 240 | # floating = true |
| 241 | # opacity = 0.9 |
| 242 | # focus = false |