High Performance
Easy Config
Patch Notes
### v1.1.1
- **NEW**: *Xinerama Support*, *Can swap windows holding Mod + Shift + Dragging*.
- **FIXED**: New windows in `global_floating` mode will spawn in the middle.
Here we have a **minimal**, **tiling**, and **configurable** window manager.
- **Tiling & Floating**: Seamlessly switch between layouts.
- **Workspaces**: Workspaces work with your bar.
- **Bars work too**: BAR BAR BAR?! Why not try [sxbar](https://github.com/uint23/sxbar)
- **Lightweight**: Single C file plus a small header and config.
- **Easy Config**: All settings in `config`.
- **Master-Stack**: Use the DWM native and super productive layout.
- **Keyboard-driven**: Full coverage via `MOD` + keys.
- **Mouse Support**: Focus under cursor, move, swap & resize with mouse.
- **Zero Dependencies**: Only requires `libX11`.
- **Compiles on a Toaster**: As long as it has a decently modern compiler.
---
## Default Configuration
All options reside in `config` (which is just a header-file) with clear comments.
Keybindings are also easy to understand and quick to implement.
No more bindsym or C code
```c
CMD(terminal, "st");
CMD(browser, "firefox");
static const Binding binds[] =
{
/*————< MODIFIER(S) >< KEY >—————< FUNCTION >——*/
/*———————< Here are your functions calls >————— — */
CALL(MOD|SHIFT, e, quit),
CALL(MOD|SHIFT, q, close_focused),
CALL(MOD, j, focus_next),
CALL(MOD, k, focus_prev),
CALL(MOD|SHIFT, j, move_master_next),
CALL(MOD|SHIFT, k, move_master_prev),
CALL(MOD, equal, inc_gaps),
CALL(MOD, minus, dec_gaps),
CALL(MOD, space, toggle_floating),
CALL(MOD|SHIFT, space, toggle_floating_global),
.....
```
---
## 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` + `=` / `-` | Inc/Dec gaps |
| `MOD` + `f` | Fullscreen toggle |
| `MOD` + `c` | Center window |
| `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 | Programs (by default) |
| -------------------- | ---------- | --------- |
| `MOD` + `Return` | Terminal | `st` |
| `MOD` + `b` | Browser | `firefox` |
---
## Dependencies
- `libX11` (Xorg client library) `Xinerama` (if you want multi-monitor support)
- GCC / Clang & Make
---
## Makefile Targets
Below are the available `make` targets for streamlining common tasks:
| Target | Description |
| ---------------- | ------------------------------------------------------------------- |
| `make` or `make all` | Compile the source files into the `sxwm` binary. |
| `make clean` | Remove object files (`*.o`) and build artifacts. |
| `make install` | Install `sxwm` to `$(PREFIX)/bin` (default `/usr/local/bin`). |
| `make uninstall` | Remove the installed binary from `$(PREFIX)/bin`. |
| `make clean install` | Runs `make clean` then `make install`. |
> You can override the install directory by specifying `PREFIX` or `DESTDIR`, for example:
> ```sh
> make install PREFIX=$HOME/.local
> ```
---
## Installation
### Arch linux - AUR
```bash
yay -S sxwm
```
### Build from source
1. **Clone repository**
```bash
git clone --depth=1 https://github.com/uint23/sxwm.git
cd sxwm/
make
sudo make clean install
```
2. **Run**
Add `sxwm` to `~/.xinitrc`:
```bash
exec sxwm
```
---
## Thanks & Inspiration
- [dwm](https://dwm.suckless.org) - Tiling & source code
- [i3](https://i3wm.org) - Making configuring easy
- [sowm](https://github.com/dylanaraps/sowm) - README inspo :)
- [tinywm](http://incise.org/tinywm.html) - idk, just cool to see how a wm works
---
Contributions welcome! Open issues or submit PRs.