Skip to content

ekollof/sxwm

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

I WON'T BE UPDATING THIS PROJECT FOR A MONTH OR SO DUE TO EXAMS

ISSUES PR's ETC WELCOME, JUST DON'T EXPECT A SOLUTION FROM ME QUICKLY πŸ₯€πŸ₯€

Minimal. Fast. Configurable. Tiling Window Manager for X11
Abhinav Prasai (2025)


Features

  • 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 and Xinerama 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.

Screenshots



Patch Notes

Click to expand

v1.5 - Ready for Release

  • 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

v1.4

  • CHANGE: Added motion throttle && master width general options

v1.3

  • CHANGE: ulong, u_char uint are gone

v1.2

  • NEW: Parser support
  • FIXED: Quit syntax && Freeing cursor on exit

v1.1

  • NEW: Xinerama support, swap windows with Mod + Shift + Drag
  • FIXED: New windows in global_floating mode spawn centered

Configuration (~/.config/sxwmrc)

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.

General Options

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

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 by mod_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.
  • :: 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).

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

Default Keybindings

Window Management

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

Programs

Combo Action Program
MOD + Return Terminal st
MOD + b Browser firefox
MOD + p Launcher dmenu_run

Dependencies

  • libX11 (Xorg client library)
  • Xinerama
  • GCC or Clang & Make

Build & Install

Arch Linux (AUR)

yay -S sxwm

Build from Source

git clone --depth=1 https://github.com/uint23/sxwm.git
cd sxwm/
make
sudo make clean install

Run

Add to your ~/.xinitrc:

exec sxwm

Makefile Targets

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 or DESTDIR:

make install PREFIX=$HOME/.local

Thanks & Inspiration

  • dwm β€” Tiling & source code
  • i3 β€” Easy configuration
  • sowm β€” README inspiration
  • tinywm β€” Minimal X11 WM

Contributions welcome! Open issues or submit PRs.

About

tiling window managers dont have to be difficult

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 98.4%
  • Makefile 1.6%