Settings Reference
This guide explains all bspwm configuration options with practical examples and recommendations. Settings are applied using bspc config either in your bspwmrc or dynamically at any time.
How Settings Work
Setting a Value
bspc config setting_name value
Getting the Current Value
bspc config setting_name
Scope-Specific Settings
Some settings can be applied globally or to specific monitors, desktops, or nodes:
# Global (all desktops)
bspc config window_gap 10
# Per-monitor
bspc config -m HDMI-1 top_padding 30
# Per-desktop
bspc config -d '^3' window_gap 0
# Per-node
bspc config -n focused border_width 4
Appearance Settings
These settings control how bspwm looks. Getting these right makes a huge difference in daily use.
Border Colors
Borders help you identify window states at a glance.
| Setting | Description |
|---|---|
normal_border_color |
Border color for unfocused windows |
active_border_color |
Border color for focused window on an unfocused monitor |
focused_border_color |
Border color for the focused window on the focused monitor |
presel_feedback_color |
Color of the pre-selection preview area |
Colors use the #RRGGBB hexadecimal format.
Example configuration:
# Subtle unfocused, bright focused
bspc config normal_border_color '#444444'
bspc config active_border_color '#666666'
bspc config focused_border_color '#0088ff'
bspc config presel_feedback_color '#00ff88'
Recommendations:
- Use a dim color for
normal_border_colorso unfocused windows fade into the background - Choose a distinctive
focused_border_colorthat stands out immediately - If you only use one monitor,
active_border_colorwon't be visible - Match
presel_feedback_colorto your overall color scheme
Border Width
bspc config border_width 2
The width in pixels of window borders. Common values:
0- No borders (requires other visual cues for focus)1- Minimal, clean look2-3- Balanced visibility4+- Very prominent, useful for high-DPI displays
Per-node border width:
# Give the focused window a thicker border
bspc config -n focused border_width 4
Window Gap
bspc config window_gap 10
Pixels of space between tiled windows. This is a desktop-level setting.
Recommendations:
0- Maximum screen real estate5-10- Slight separation, clean look15-20- Prominent gaps, modern "rice" aesthetic- Larger gaps work better on large/high-DPI monitors
Different gaps per desktop:
# Full-screen desktop for videos with no gap
bspc config -d 'Video' window_gap 0
# Coding desktop with breathing room
bspc config -d 'Code' window_gap 15
Padding
Padding creates empty space at the edges of a monitor or desktop, typically used for panels/bars.
| Setting | Description |
|---|---|
top_padding |
Space at the top (for top panel) |
bottom_padding |
Space at the bottom (for bottom panel) |
left_padding |
Space on the left |
right_padding |
Space on the right |
# Reserve 30 pixels at top for polybar
bspc config top_padding 30
# Reserve space on both sides (for centered layout)
bspc config left_padding 200
bspc config right_padding 200
Per-monitor padding:
# Different bar heights on different monitors
bspc config -m 'eDP-1' top_padding 24
bspc config -m 'HDMI-1' top_padding 30
Behavior Settings
These settings control how bspwm behaves—how windows are inserted, focused, and managed.
Split Ratio
bspc config split_ratio 0.5
The default ratio when splitting a window. Value between 0 and 1.
0.5- Equal 50/50 splits (default)0.6- New windows get 40%, existing get 60%0.52- Slightly favor existing windows (golden ratio approximation: use0.618)
Initial Polarity
bspc config initial_polarity first_child
When a window is added to a single-window tree, determines if it becomes the first or second child.
first_child- New window goes left/topsecond_child- New window goes right/bottom (default)
This affects the initial direction of splits when you open your second window.
Automatic Scheme
bspc config automatic_scheme longest_side
How bspwm decides the split direction when automatically inserting windows:
| Scheme | Behavior |
|---|---|
longest_side |
Split perpendicular to the longest side. Creates square-ish windows. |
alternate |
Alternate between horizontal and vertical splits. |
spiral |
Classic bspwm behavior, creates a spiral pattern. |
Recommendations:
longest_side- Most intuitive for general usespiral- Good for many small terminalsalternate- Predictable grid-like layouts
Removal Adjustment
bspc config removal_adjustment true
When true, closing a window adjusts its sibling to fill the space. When false, the sibling maintains its previous size.
Focus and Click Behavior
These settings control how focus changes and how mouse clicks interact with windows.
Click to Focus
bspc config click_to_focus button1
Which mouse button focuses a window when clicked:
none- Clicking doesn't change focus (use keybindings only)button1- Left click focusesbutton2- Middle click focusesbutton3- Right click focusesany- Any mouse button focuses
Swallow First Click
bspc config swallow_first_click false
When click_to_focus is enabled:
true- The focusing click isn't passed to the applicationfalse- The click both focuses AND is passed to the application
Set to true if you don't want accidental clicks when focusing (e.g., clicking a link just to focus the browser).
Focus Follows Pointer
bspc config focus_follows_pointer true
When true, moving the mouse over a window focuses it. No click required.
Recommendations:
truefor keyboard-centric workflows—just point and typefalseif you find it distracting or often accidentally move focus
Pointer Follows Focus
bspc config pointer_follows_focus false
When true, changing focus (via keyboard) moves the mouse pointer to the center of the newly focused window.
- Useful with
focus_follows_pointerto prevent focus from immediately jumping back - Can feel jarring if you're using the mouse
Pointer Follows Monitor
bspc config pointer_follows_monitor true
When switching monitors, move the pointer to the center of the target monitor.
Helpful in multi-monitor setups to prevent "losing" the cursor.
Pointer Actions
Configure what happens when you hold a modifier key and click/drag on windows.
Pointer Modifier
bspc config pointer_modifier mod4
The key to hold for pointer actions. Common values:
mod4- Super/Windows key (recommended)mod1- Alt keycontrol- Control key
Pointer Actions
bspc config pointer_action1 move
bspc config pointer_action2 resize_side
bspc config pointer_action3 resize_corner
What each mouse button does when pointer_modifier is held:
| Action | Description |
|---|---|
move |
Drag to move the window |
resize_side |
Drag to resize by nearest edge |
resize_corner |
Drag to resize by nearest corner |
focus |
Just focus the window |
none |
No action |
Default setup:
mod4 + left-click- Move windowmod4 + middle-click- Resize by edgemod4 + right-click- Resize by corner
Pointer Motion Interval
bspc config pointer_motion_interval 10
Minimum milliseconds between motion events when dragging. Lower = smoother but more CPU. Default is usually fine.
Monocle Layout Settings
The monocle layout shows one window at a time, maximized. These settings fine-tune its behavior.
Borderless Monocle
bspc config borderless_monocle true
Remove window borders in monocle layout. Since only one window is visible, borders are unnecessary.
Gapless Monocle
bspc config gapless_monocle true
Remove gaps in monocle layout, maximizing the single visible window.
Paddingless Monocle
bspc config paddingless_monocle false
Remove padding (including bar space) in monocle layout.
Warning: If true, the monocle window will cover your panel/bar.
Single Monocle
bspc config single_monocle false
Automatically enter monocle layout when a desktop has only one tiled window.
EWMH and External Integration
Settings for compatibility with panels, pagers, and other tools.
Ignore EWMH Focus
bspc config ignore_ewmh_focus false
When true, ignore focus requests from applications via EWMH.
Set to true if applications keep stealing focus unexpectedly.
Ignore EWMH Struts
bspc config ignore_ewmh_struts false
When true, ignore struts (reserved screen space) set by panels.
Usually leave false so panels correctly reserve their space.
Center Pseudo Tiled
bspc config center_pseudo_tiled true
Center pseudo-tiled windows in their tiling rectangles. Default is true.
Honor Size Hints
bspc config honor_size_hints false
Respect ICCCM size hints from applications (minimum/maximum size, resize increments).
true- Some windows may not fill their allocated spacefalse- Force windows to fill their space (may look wrong for some apps like terminals)
Monitor Management
Settings for handling monitor changes.
Remove Disabled Monitors
bspc config remove_disabled_monitors true
Treat disabled monitors as disconnected. Useful for laptop docking.
Remove Unplugged Monitors
bspc config remove_unplugged_monitors true
Automatically remove monitors when unplugged. Windows move to remaining monitors.
Merge Overlapping Monitors
bspc config merge_overlapping_monitors true
When monitors overlap, keep only the larger one. Helps with misconfigured xrandr setups.
External Rules Command
bspc config external_rules_command '/path/to/script.sh'
Path to a script that provides dynamic window rules. The script receives window information and outputs rule consequences.
Example script:
#!/bin/bash
# external_rules.sh
wid=$1
class=$2
instance=$3
# Float all windows with "dialog" in the instance name
if [[ "$instance" == *dialog* ]]; then
echo "state=floating"
fi
# Send Spotify to desktop 10
if [[ "$class" == "Spotify" ]]; then
echo "desktop=^10"
fi
This is more powerful than static rules because you can use any logic.
Example bspwmrc Settings
Here's a complete example settings section:
#!/bin/bash
# bspwmrc - settings section
# Appearance
bspc config border_width 2
bspc config window_gap 10
bspc config top_padding 30
bspc config bottom_padding 0
bspc config left_padding 0
bspc config right_padding 0
# Colors
bspc config normal_border_color '#32344a'
bspc config active_border_color '#444b6a'
bspc config focused_border_color '#7aa2f7'
bspc config presel_feedback_color '#9ece6a'
# Behavior
bspc config split_ratio 0.52
bspc config automatic_scheme longest_side
bspc config removal_adjustment true
# Focus
bspc config focus_follows_pointer true
bspc config pointer_follows_focus false
bspc config click_to_focus button1
bspc config swallow_first_click false
# Pointer
bspc config pointer_modifier mod4
bspc config pointer_action1 move
bspc config pointer_action2 resize_side
bspc config pointer_action3 resize_corner
# Monocle
bspc config borderless_monocle true
bspc config gapless_monocle true
bspc config paddingless_monocle false
bspc config single_monocle false
# Monitors
bspc config remove_disabled_monitors true
bspc config remove_unplugged_monitors true
bspc config merge_overlapping_monitors true