Skip to content

bbergeron0/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

Fork of sxwm for PR

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 98.0%
  • Makefile 2.0%