1# neferwl config: one `key = value` per line, # starts a comment.
2# Every value below is the default; a missing file means defaults.
3# Changes apply live. An invalid line logs a warning and keeps the default.
4
5# Keyboard (xkb names, e.g. layout = fr, options = caps:escape).
6keyboard.layout =
7keyboard.variant =
8keyboard.options =
9keyboard.repeat-rate = 25
10keyboard.repeat-delay = 600
11# Which modifier `cmd` means in binds: super, alt or ctrl.
12keyboard.cmd = super
13
14# Command for spawn-terminal and the terminal opened at startup.
15terminal = foot
16
17# Commands run once when the session starts, one line each. Like spawn, a
18# command runs without a shell: see "Running commands" in the README.
19# Programs get WAYLAND_DISPLAY and NEFERWL_STATE.
20# startup = waybar
21# startup = wl-paste --watch cliphist store
22
23background = #111111
24
25# Separator lines between tiled windows (tmux style), in logical pixels.
26# The lines along the focused window use active; width 0 disables them,
27# empty inactive draws only the focused lines. Floats get a full border.
28border.width = 2
29border.active = #808080
30border.inactive = #111111
31
32layout.gaps = 0
33# Columns sharing the screen equally before new ones scroll off to the right.
34# A lone column fills the screen without separators.
35layout.max-columns = 2
36# Past max-columns: scroll opens columns to the right; fixed keeps everything
37# on screen, each new window splitting the newest one (spiral).
38layout.overflow = scroll
39# cycle-column-width steps through these, then back to the equal share.
40layout.presets = 1/3, 1/2, 2/3, 1
41
42# on: moving a column or window to another workspace shows that workspace.
43focus.follow-move = off
44
45# Named workspaces. Numbered at their place like any other and never removed
46# when empty. hidden = on keeps one out of the numbers and of up/down: only its
47# bind shows it, and pressing the bind again returns to the previous workspace.
48# max-columns and overflow override the layout.* values.
49# workspace.web.max-columns = 3
50# workspace.web.overflow = fixed
51#
52# Slots: column.N = <width>, <command>. neferwl starts each command in the
53# background and puts its first window in column N, without taking focus.
54# A closed slot stays empty until the workspace is shown again. Apps that
55# reuse a running instance need a new-instance flag. Widths need
56# overflow = scroll.
57# workspace.dev.hidden = on
58# workspace.dev.column.1 = 67%, code --new-window
59# workspace.dev.column.2 = 33%, foot
60# bind.cmd+d = workspace dev
61
62# Displays (drm backend): WxH, WxH@Hz, preferred or off.
63# The first listed display that is connected and not off is used.
64# output.DP-2 = 5120x2160@165.058
65# output.HDMI-A-1 = off
66# Scale (HiDPI), 1 to 4, like 1.5 or 4/3. Default 1. scale-up and scale-down
67# step through the scales where the display divides into whole pixels.
68# output.DP-2.scale = 4/3
69
70render.direct-scanout = on
71# Games asking for tearing flip without waiting for vblank, and variable
72# refresh runs; both only while a fullscreen window is scanned out directly.
73render.tearing = on
74render.vrr = on
75
76# log.level: debug, info, warn or error. log.debug: components or all.
77log.level = info
78log.debug =
79
80# Binds: bind.<keys> = <action>. Modifiers: cmd, shift, ctrl, alt, super.
81# code:N is a physical key (evdev code), the same key on every layout:
82# code:2 to code:10 are the digit row 1 to 9, code:12 and code:13 the two
83# keys right of 0 (- and = on US).
84# Keys are what your layout prints (cmd+é on AZERTY). Write = # and space
85# by name: cmd+equal, cmd+numbersign, cmd+space. `none` removes a default.
86# `spawn <command>` runs a program; arguments split on spaces, no shell
87# (pipes and variables go in a script: see "Running commands" in the README).
88bind.cmd+return = spawn-terminal
89bind.cmd+left = focus-column-left
90bind.cmd+right = focus-column-right
91bind.cmd+up = focus-window-up
92bind.cmd+down = focus-window-down
93bind.cmd+shift+left = move-column-left
94bind.cmd+shift+right = move-column-right
95# Vim keys: every arrow bind also works with h j k l.
96bind.cmd+h = focus-column-left
97bind.cmd+l = focus-column-right
98bind.cmd+k = focus-window-up
99bind.cmd+j = focus-window-down
100bind.cmd+shift+h = move-column-left
101bind.cmd+shift+l = move-column-right
102# A window alone in its column joins the neighbor column; a stacked one
103# leaves for a new column. A full fixed workspace stacks it into the
104# neighbor column instead, past the edge on the neighbor monitor.
105bind.cmd+bracketleft = consume-or-expel-window-left
106bind.cmd+bracketright = consume-or-expel-window-right
107bind.cmd+r = cycle-column-width
108bind.cmd+shift+f = toggle-fullscreen
109bind.cmd+q = close-window
110bind.ctrl+alt+backspace = quit
111bind.ctrl+cmd+space = spawn fuzzel
112
113# Workspaces stack vertically; numbers follow their order. An empty one always
114# waits below the last. cmd+up/down past the column edge also switch workspace.
115bind.cmd+pageup = focus-workspace-up
116bind.cmd+pagedown = focus-workspace-down
117# move-column-to-workspace moves the whole column; move-window-to-workspace
118# (N, -up, -down) moves only the focused window and has no default bind.
119bind.cmd+shift+pageup = move-column-to-workspace-up
120bind.cmd+shift+pagedown = move-column-to-workspace-down
121bind.cmd+code:2 = focus-workspace 1
122bind.cmd+code:3 = focus-workspace 2
123bind.cmd+code:4 = focus-workspace 3
124bind.cmd+code:5 = focus-workspace 4
125bind.cmd+code:6 = focus-workspace 5
126bind.cmd+code:7 = focus-workspace 6
127bind.cmd+code:8 = focus-workspace 7
128bind.cmd+code:9 = focus-workspace 8
129bind.cmd+code:10 = focus-workspace 9
130bind.cmd+shift+code:2 = move-column-to-workspace 1
131bind.cmd+shift+code:3 = move-column-to-workspace 2
132bind.cmd+shift+code:4 = move-column-to-workspace 3
133bind.cmd+shift+code:5 = move-column-to-workspace 4
134bind.cmd+shift+code:6 = move-column-to-workspace 5
135bind.cmd+shift+code:7 = move-column-to-workspace 6
136bind.cmd+shift+code:8 = move-column-to-workspace 7
137bind.cmd+shift+code:9 = move-column-to-workspace 8
138bind.cmd+shift+code:10 = move-column-to-workspace 9
139
140# Monitors, left to right: focus the neighbor, or move the workspace there.
141bind.cmd+ctrl+left = focus-monitor-left
142bind.cmd+ctrl+right = focus-monitor-right
143bind.cmd+ctrl+h = focus-monitor-left
144bind.cmd+ctrl+l = focus-monitor-right
145bind.cmd+ctrl+shift+left = move-workspace-to-monitor-left
146bind.cmd+ctrl+shift+right = move-workspace-to-monitor-right
147bind.cmd+ctrl+shift+h = move-workspace-to-monitor-left
148bind.cmd+ctrl+shift+l = move-workspace-to-monitor-right
149
150# Zoom: the whole display, live.
151bind.cmd+code:13 = scale-up
152bind.cmd+code:12 = scale-down