- Tiling & Floating: Switch seamlessly between layouts.
- Workspaces: 9 workspaces, fully integrated with your bar.
- Live Config Reload: Change your config and reload instantly with a keybind.
- Easy Configuration: Human-friendly
sxwmrc
file, no C required. - Master-Stack Layout: Productive, DWM-inspired workflow.
- Mouse Support: Move, swap, resize, and focus windows with the mouse.
- Zero Dependencies: Only
libX11
andXinerama
required. - Lightweight: Single C file, minimal headers, compiles in seconds.
- Bar Friendly: Works great with sxbar.
- Xinerama Support: Multi-monitor ready.
- Fast: Designed for speed and low resource usage.
Click to expand
- NEW: Using XCursor instead of cursor font && new logo.
- FIXED: Proper bind resetting on refresh config. && Multi-arg binds now work due to new and improved spawn function
- CHANGE: No longer using INIT_WORKSPACE macro, proper workspace handling. New sxwmrc
- CHANGE: Added motion throttle && master width general options
- CHANGE: ulong, u_char uint are gone
- NEW: Parser support
- FIXED: Quit syntax && Freeing cursor on exit
- NEW: Xinerama support, swap windows with Mod + Shift + Drag
- FIXED: New windows in
global_floating
mode spawn centered
sxwm
is configured via a simple text file located at ~/.config/sxwmrc
. Changes can be applied instantly by reloading the configuration (default keybind: MOD + r
).
The file uses a key : value
format. Lines starting with #
are ignored.
Option | Type | Default | Description |
---|---|---|---|
mod_key |
String | super |
Sets the primary modifier key (alt , super , ctrl ). |
gaps |
Integer | 10 |
Pixels between windows and screen edges. |
border_width |
Integer | 1 |
Thickness of window borders in pixels. |
focused_border_colour |
Hex | #c0cbff |
Border color for the currently focused window. |
unfocused_border_colour |
Hex | #555555 |
Border color for unfocused windows. |
swap_border_colour |
Hex | #fff4c0 |
Border color highlight when selecting a window to swap with (MOD+Shift+Drag ). |
master_width |
Integer | 60 |
Percentage (%) of the screen width the master window should occupy. |
resize_master_amount |
Integer | 1 |
Percentage (%) to increase/decrease the master width when resizing. |
snap_distance |
Integer | 5 |
Pixels from screen edge before a floating window snaps to the edge. |
motion_throttle |
Integer | 60 |
Target updates per second for mouse drag operations (move/resize/swap). Set close to your monitor's refresh rate for smoother visuals. |
Keybindings associate key combinations with actions (either running external commands or internal sxwm
functions).
Syntax:
bind : [modifier + modifier + ... + key] : action
bind
: Keyword to define a keybinding.[...]
: Contains the key combination.- Modifiers:
mod
(uses the key set bymod_key
),shift
,ctrl
,alt
,super
. Use+
to combine multiple modifiers. key
: The final key name (e.g.,Return
,q
,1
,equal
,space
). Key names generally follow X11 keysym names but are case-insensitive in the config.
- Modifiers:
:
: Separator.action
:- Command: An external command enclosed in double quotes (
"
). Arguments are separated by spaces (e.g.,"st -e vim"
). - Function: The name of an internal
sxwm
function (see list below).
- Command: An external command enclosed in double quotes (
Available Functions:
Function Name | Action |
---|---|
close_window |
Closes the currently focused window. |
decrease_gaps |
Decreases the gap size between windows. |
focus_next |
Shifts focus to the next window in the stack/list. |
focus_previous |
Shifts focus to the previous window in the stack/list. |
increase_gaps |
Increases the gap size between windows. |
master_next |
Moves the focused window down the master/stack order. |
master_previous |
Moves the focused window up the master/stack order. |
quit |
Exits sxwm . |
reload_config |
Reloads the sxwmrc configuration file. |
master_increase |
Increases the width allocated to the master area. |
master_decrease |
Decreases the width allocated to the master area. |
toggle_floating |
Toggles the floating state of the focused window. |
global_floating |
Toggles the floating state for all windows on the current workspace. |
fullscreen |
Toggles fullscreen mode for the focused window. |
change_ws[1-9] |
Switches focus to the specified workspace (1-9). |
moveto_ws[1-9] |
Moves the focused window to the specified workspace (1-9). |
Example Bindings:
# Launch terminal with Mod + Enter
bind : [mod + Return] : "st"
# Close focused window with Mod + Shift + Q
bind : [mod + shift + q] : close_window
# Switch to workspace 3 with Mod + 3
bind : [mod + 3] : change_ws3
# Move focused window to workspace 5 with Mod + Shift + 5
bind : [mod + shift + 5] : moveto_ws5
Combo | Action |
---|---|
Mouse | Focus under cursor |
MOD + Left Mouse |
Move window by mouse |
MOD + Right Mouse |
Resize window by mouse |
MOD + j / k |
Focus next / previous |
MOD + Shift + j / k |
Move in master stack |
MOD + Space |
Toggle floating |
MOD + Shift + Space |
Toggle all floating |
MOD + = / - |
Increase/Decrease gaps |
MOD + f |
Fullscreen toggle |
MOD + q |
Close focused window |
MOD + 1-9 |
Switch workspace 1–9 |
MOD + Shift + 1-9 |
Move window to WS 1–9 |
Combo | Action | Program |
---|---|---|
MOD + Return |
Terminal | st |
MOD + b |
Browser | firefox |
MOD + p |
Launcher | dmenu_run |
libX11
(Xorg client library)Xinerama
- GCC or Clang & Make
git clone --depth=1 https://github.com/uint23/sxwm.git
cd sxwm/
make
sudo make clean install
Add to your ~/.xinitrc
:
Target | Description |
---|---|
make / make all |
Build the sxwm binary |
make clean |
Remove object files and build artifacts |
make install |
Install sxwm to $(PREFIX)/bin (default /usr/local/bin ) |
make uninstall |
Remove the installed binary |
make clean install |
Clean and then install |
Override install directory with
PREFIX
orDESTDIR
:make install PREFIX=$HOME/.local
- dwm — Tiling & source code
- i3 — Easy configuration
- sowm — README inspiration
- tinywm — Minimal X11 WM
Contributions welcome! Open issues or submit PRs.