# neferwl config: one `key = value` per line, # starts a comment. # Every value below is the default; a missing file means defaults. # Changes apply live. An invalid line logs a warning and keeps the default. # Keyboard (xkb names, e.g. layout = fr, options = caps:escape). keyboard.layout = keyboard.variant = keyboard.options = keyboard.repeat-rate = 25 keyboard.repeat-delay = 600 # Which modifier `cmd` means in binds: super, alt or ctrl. keyboard.cmd = super # Command for spawn-terminal: terminal, then $TERMINAL, then foot. # Automatically open once on the initial numbered workspace (first), on every # visible empty workspace (all), or never (off). --no-terminal overrides this. # terminal = foot terminal.auto-open = first # Commands run once when the session starts, one line each. Like spawn, a # command runs without a shell: see "Running commands" in the README. # Programs get WAYLAND_DISPLAY and NEFERWL_STATE. # startup = waybar # startup = wl-paste --watch cliphist store background = #111111 # Separator lines between tiled windows (tmux style), in logical pixels. # The lines along the focused window use active; width 0 disables them, # empty inactive draws only the focused lines. Floats get a full border. border.width = 2 border.active = #808080 border.inactive = #111111 # Black veil over tiles and lower layers when a float is visible (0 to 1). floating.dim = 0.3 layout.gaps = 0 # Columns sharing the screen equally before new ones scroll off to the right. # A lone column fills the screen without separators. layout.max-columns = 2 # Past max-columns: scroll opens columns to the right; fixed keeps everything # on screen, each new window splitting the newest one (spiral). layout.overflow = scroll # cycle-column-width steps through these, then back to the equal share. layout.presets = 1/3, 1/2, 2/3, 1 # Touchpad. A three-finger swipe up or down slides between workspaces, left # or right scrolls the columns. natural-scroll = on moves the content with # the fingers, for scroll and swipes. tap = on clicks on a tap: one finger # left, two right, three middle. touchpad.natural-scroll = off touchpad.tap = on # Pointer speed from -1 to 1; adaptive speeds up quick moves, flat does not. touchpad.accel-speed = 0 touchpad.accel-profile = adaptive # Two-finger scroll distance multiplier. touchpad.scroll-factor = 1 # on: moving a column or window to another workspace shows that workspace. focus.follow-move = off # Focus indicator on the newly focused window: an animation (pulse or off) # of an effect (screen: a slight brightening), peaking at strength # (0.01 to 0.2; 0.04: black reaches about 10/255). focus.animation = pulse focus.effect = screen focus.strength = 0.04 # Named workspaces are outside the numbered list and require a bind. The bind # shows one; pressing it again returns to the previous workspace. # max-columns and overflow override the layout.* values. # workspace.web.max-columns = 3 # workspace.web.overflow = fixed # # Slots: column.N = , . neferwl starts each command in the # background and puts its first window in column N, without taking focus. # A closed slot stays empty until the workspace is shown again. Apps that # reuse a running instance need a new-instance flag. Widths need # overflow = scroll. # workspace.dev.monitor = DP-2 # workspace.dev.column.1 = 67%, code --new-window # workspace.dev.column.2 = 33%, foot # bind.cmd+d = workspace dev # Displays (drm backend): WxH, WxH@Hz, preferred or off. # The first listed display that is connected and not off is used. # output.DP-2 = 5120x2160@165.058 # output.HDMI-A-1 = off # Scale (HiDPI), 1 to 4, like 1.5 or 4/3. Default 1. scale-up and scale-down # step through the scales where the display divides into whole pixels and # save the result here. # output.DP-2.scale = 4/3 render.direct-scanout = on # Games asking for tearing flip without waiting for vblank, and variable # refresh runs; both only while a fullscreen window is scanned out directly. render.tearing = on render.vrr = on # Run output and input threads with SCHED_RR when permitted. performance.realtime = on # log.level: debug, info, warn or error. log.debug: components or all. log.level = info log.debug = # Binds: bind. = . Modifiers: cmd, shift, ctrl, alt, super. # code:N is a physical key (evdev code), the same key on every layout: # code:2 to code:10 are the digit row 1 to 9, code:12 and code:13 the two # keys right of 0 (- and = on US). # Keys are what your layout prints (cmd+é on AZERTY). Write = # and space # by name: cmd+equal, cmd+numbersign, cmd+space. `none` removes a default. # `spawn ` runs a program; arguments split on spaces, no shell # (pipes and variables go in a script: see "Running commands" in the README). bind.cmd+return = spawn-terminal bind.cmd+left = focus-column-left bind.cmd+right = focus-column-right bind.cmd+up = focus-window-up bind.cmd+down = focus-window-down bind.cmd+shift+left = move-column-left bind.cmd+shift+right = move-column-right # Vim keys: every arrow bind also works with h j k l. bind.cmd+h = focus-column-left bind.cmd+l = focus-column-right bind.cmd+k = focus-window-up bind.cmd+j = focus-window-down bind.cmd+shift+h = move-column-left bind.cmd+shift+l = move-column-right # A window alone in its column joins the neighbor column; a stacked one # leaves for a new column. A full fixed workspace stacks it into the # neighbor column instead, past the edge on the neighbor monitor. bind.cmd+bracketleft = consume-or-expel-window-left bind.cmd+bracketright = consume-or-expel-window-right # Reorder the focused window inside its column. bind.cmd+shift+up = move-window-up bind.cmd+shift+down = move-window-down bind.cmd+shift+k = move-window-up bind.cmd+shift+j = move-window-down # Resize by a step of the usable width or height: +N% or -N% (1-100). bind.cmd+alt+left = set-column-width -10% bind.cmd+alt+right = set-column-width +10% bind.cmd+alt+up = set-window-height -10% bind.cmd+alt+down = set-window-height +10% bind.cmd+alt+h = set-column-width -10% bind.cmd+alt+l = set-column-width +10% bind.cmd+alt+k = set-window-height -10% bind.cmd+alt+j = set-window-height +10% # A tile becomes a free floating window, or returns to its column. bind.cmd+shift+space = toggle-floating bind.cmd+r = cycle-column-width bind.cmd+f = maximize-column bind.cmd+shift+f = toggle-fullscreen bind.cmd+s = toggle-stash-visible bind.cmd+shift+s = toggle-window-stash bind.cmd+o = toggle-overview bind.cmd+q = close-window bind.ctrl+alt+backspace = quit bind.ctrl+cmd+space = spawn fuzzel # Workspaces stack vertically; numbers follow their order. An empty one always # waits below the last. cmd+up/down past the column edge also switch workspace. bind.cmd+pageup = focus-workspace-up bind.cmd+pagedown = focus-workspace-down # move-column-to-workspace moves the whole column; move-window-to-workspace # (N, -up, -down) moves only the focused window and has no default bind. bind.cmd+shift+pageup = move-column-to-workspace-up bind.cmd+shift+pagedown = move-column-to-workspace-down # Reorder workspaces: swap the current one with its neighbor. bind.cmd+ctrl+shift+up = move-workspace-up bind.cmd+ctrl+shift+down = move-workspace-down bind.cmd+ctrl+shift+k = move-workspace-up bind.cmd+ctrl+shift+j = move-workspace-down bind.cmd+code:2 = focus-workspace 1 bind.cmd+code:3 = focus-workspace 2 bind.cmd+code:4 = focus-workspace 3 bind.cmd+code:5 = focus-workspace 4 bind.cmd+code:6 = focus-workspace 5 bind.cmd+code:7 = focus-workspace 6 bind.cmd+code:8 = focus-workspace 7 bind.cmd+code:9 = focus-workspace 8 bind.cmd+code:10 = focus-workspace 9 bind.cmd+shift+code:2 = move-column-to-workspace 1 bind.cmd+shift+code:3 = move-column-to-workspace 2 bind.cmd+shift+code:4 = move-column-to-workspace 3 bind.cmd+shift+code:5 = move-column-to-workspace 4 bind.cmd+shift+code:6 = move-column-to-workspace 5 bind.cmd+shift+code:7 = move-column-to-workspace 6 bind.cmd+shift+code:8 = move-column-to-workspace 7 bind.cmd+shift+code:9 = move-column-to-workspace 8 bind.cmd+shift+code:10 = move-column-to-workspace 9 # Monitors, left to right: focus the neighbor, or move the workspace there. bind.cmd+ctrl+left = focus-monitor-left bind.cmd+ctrl+right = focus-monitor-right bind.cmd+ctrl+h = focus-monitor-left bind.cmd+ctrl+l = focus-monitor-right bind.cmd+ctrl+shift+left = move-workspace-to-monitor-left bind.cmd+ctrl+shift+right = move-workspace-to-monitor-right bind.cmd+ctrl+shift+h = move-workspace-to-monitor-left bind.cmd+ctrl+shift+l = move-workspace-to-monitor-right # Zoom: the whole display, live. bind.cmd+code:13 = scale-up bind.cmd+code:12 = scale-down # Media keys have no default. Bind them by their exact xkb keysym name # (case-sensitive; `wev` shows it) to your own tools: # bind.XF86AudioRaiseVolume = spawn wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ # bind.XF86AudioLowerVolume = spawn wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- # bind.XF86AudioMute = spawn wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle # bind.XF86AudioMicMute = spawn wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle # bind.XF86MonBrightnessUp = spawn brightnessctl set +5% # bind.XF86MonBrightnessDown = spawn brightnessctl set 5%- # bind.XF86AudioPlay = spawn playerctl play-pause