OXWM(1)

πŸ“¦ version 0.12.0, in nixos 26.05, nixpkgs unstable

πŸ’… OXWM(1) β€” the manual page, but make it slay

okay so bestie, you're reading the oxwm man page and honestly? iconic of you. let's get into it 🫢


✨ NAME ✨

oxwm β€” a dynamic tiling window manager for X11 written in Zig πŸ¦‹


✨ SYNOPSIS ✨

oxwm [OPTIONS]

πŸŽ€ DESCRIPTION πŸŽ€

So oxwm is a lightweight, dynamic tiling window manager for X11, and the whole vibe is "inspired by dwm but we ditched the suckless philosophy" β€” no cap. πŸ’…

Configuration happens through a runtime-loadable Lua config file, which means instant hot-reload and you literally never have to recompile. not me, not recompiling, ever 😭✨

The features are giving main character energy:

  • tag-based workspaces
  • multiple layouts (tiling, floating, monocle, grid, tabbed)
  • configurable gaps
  • a modular status bar
  • keychord support
  • window rules
  • autostart commands
  • multi-monitor support
  • persistent window state across restarts

πŸ’– OPTIONS πŸ’–

  • --init β€” creates the default config file at ~/.config/oxwm/config.lua
  • --config PATH β€” use a custom config file at the specified path
  • --version β€” print version information and exit
  • --help β€” print help message and exit

🌸 CONFIGURATION 🌸

oxwm reads its config from ~/.config/oxwm/config.lua. If there's no config on first launch, a default template gets created automatically β€” so thoughtful of it πŸ₯Ή

The config file uses Lua and hands you a comprehensive API for customization, like:

  • Keybindings (including multi-key keychords)
  • Colors and appearance (borders, gaps)
  • Status bar blocks (battery, RAM, datetime, shell commands, static text)
  • Window rules (per-application settings)
  • Autostart commands
  • Layout symbols
  • Tag names (supports Unicode/Nerd Font icons) 🧚

After editing the config, reload with Mod+Shift+R β€” no compilation, no X restart, nothing. obsessed.

LSP support is available via the ~/.config/oxwm/oxwm.lua type definitions file for autocomplete in editors ✨


πŸ‘‘ DEFAULT KEYBINDINGS πŸ‘‘

The default modifier key is Super (Mod4). Every single binding here is customizable in config.lua, iykyk.

πŸͺŸ Window Management

  • Super+Return β€” spawn terminal (default: alacritty)
  • Super+Q β€” kill focused window
  • Super+J, Super+K β€” cycle focus down/up through windows
  • Super+Shift+J, Super+Shift+K β€” move window down/up in stack (swap position)
  • Super+Shift+Space β€” toggle floating mode for focused window
  • Super+Shift+F β€” toggle fullscreen for focused window

🧩 Layouts

  • Super+F β€” switch to normie (floating) layout
  • Super+C β€” switch to tiling layout
  • Super+N β€” cycle through available layouts
  • Super+A β€” toggle gaps on/off

🎯 Master Area (Tiling Layout)

  • Super+H β€” decrease master area width
  • Super+L β€” increase master area width
  • Super+I β€” increment number of master windows
  • Super+P β€” decrement number of master windows

🏷️ Tags (Workspaces)

  • Super+1..9 β€” view tag 1-9
  • Super+Shift+1..9 β€” move focused window to tag 1-9
  • Super+Control+1..9 β€” toggle multi-tag viewing (view multiple tags simultaneously)
  • Super+Control+Shift+1..9 β€” toggle window on multiple tags (sticky window)

πŸ–₯️ Monitors

  • Super+Comma β€” focus previous monitor
  • Super+Period β€” focus next monitor
  • Super+Shift+Comma β€” send window to previous monitor
  • Super+Shift+Period β€” send window to next monitor

πŸš€ Launchers

  • Super+D β€” launch dmenu
  • Super+S β€” take screenshot with maim (selection to clipboard)

βš™οΈ Window Manager

  • Super+Shift+Q β€” quit oxwm
  • Super+Shift+R β€” hot reload oxwm (reload config without restarting X)
  • Super+Shift+/ β€” show keybindings overlay

πŸ–±οΈ MOUSE BINDINGS πŸ–±οΈ

  • Super+Button1 (drag) β€” move window in floating mode
  • Super+Button3 (drag) β€” resize window in floating mode

Also: clicking on a tag number in the status bar switches to that tag. tiny detail, big convenience πŸ’…


πŸ¦‹ LAYOUTS πŸ¦‹

oxwm provides these layouts, bestie:

  • Tiling β€” master/stack layout with adjustable master area size and number of master windows.
  • Normie β€” floating-by-default layout where windows can be freely positioned.
  • Monocle β€” fullscreen stacking layout showing one window at a time per tag.
  • Grid β€” equal-sized grid layout distributing windows evenly.
  • Tabbed β€” tabbed container layout with a tab bar for switching between windows.

🎹 KEYCHORDS 🎹

oxwm supports multi-key sequences called keychords. These let you bind commands to sequences like "Super+Space then T". yes, a combo. a little key combo meal πŸ“

Example keychord in config.lua:

oxwm.key.chord({
    { modifiers = { "Mod4" }, key = "space" },
    { modifiers = {}, key = "t" },
}, oxwm.spawn_terminal)

Press Escape to cancel any in-progress keychord sequence. lifesaver fr 😌


πŸͺŸ WINDOW RULES πŸͺŸ

Window rules let you do per-application settings based on window class, instance, or title:

oxwm.rule.add({
    class = "Firefox",
    floating = false,
    tag = 2,
})

Rule properties:

  • class β€” match window class (substring)
  • instance β€” match window instance (substring)
  • title β€” match window title (substring)
  • floating β€” force floating mode (true/false)
  • tag β€” auto-assign to specific tag (1-9)
  • monitor β€” auto-assign to specific monitor

πŸ“Š STATUS BAR πŸ“Š

The status bar displays tags, the layout indicator, the window title, and customizable blocks. it's giving customizable dashboard πŸ’œ

🧱 Block Types

  • DateTime β€” date/time with customizable format string
  • RAM β€” RAM usage display (used/total)
  • Battery β€” battery status with charging/discharging/full states
  • Shell β€” execute shell command and display output
  • Static β€” static text display

βš™οΈ Block Configuration

Each block supports:

  • color β€” text color (hex: #RRGGBB or 0xRRGGBB)
  • underline β€” underline color
  • interval β€” update interval in seconds

🌈 Color Schemes

Tag colors can be customized for three states:

  • Normal β€” unoccupied tags
  • Occupied β€” tags containing windows
  • Selected β€” currently viewed tag

πŸŒ™ LUA API πŸŒ™

The configuration uses the following Lua API modules:

⭐ Core Functions

  • oxwm.set_terminal(term) β€” set terminal emulator
  • oxwm.set_modkey(modkey) β€” set modifier key (Mod1-5, Shift, Control)
  • oxwm.set_tags(tags) β€” define workspace tag names
  • oxwm.autostart(cmd) β€” add autostart command
  • oxwm.spawn(cmd) β€” spawn command/program
  • oxwm.spawn_terminal() β€” spawn configured terminal
  • oxwm.quit() β€” quit window manager
  • oxwm.restart() β€” restart window manager
  • oxwm.show_keybinds() β€” show keybindings overlay

⌨️ Key Bindings (oxwm.key)

  • oxwm.key.bind(modifiers, key, action) β€” single key binding
  • oxwm.key.chord(keyseq, action) β€” multi-key sequence binding

πŸ–ΌοΈ Border (oxwm.border)

  • oxwm.border.set_width(pixels)
  • oxwm.border.set_focused_color(color)
  • oxwm.border.set_unfocused_color(color)

πŸ•³οΈ Gaps (oxwm.gaps)

  • oxwm.gaps.set_enabled(bool)
  • oxwm.gaps.set_inner(h, v)
  • oxwm.gaps.set_outer(h, v)
  • oxwm.gaps.set_smart(bool) β€” enable smart gaps (no gaps with single window)

πŸͺŸ Client (oxwm.client)

  • oxwm.client.kill()
  • oxwm.client.toggle_fullscreen()
  • oxwm.client.toggle_floating()
  • oxwm.client.focus_stack(direction)
  • oxwm.client.move_stack(direction)

🧩 Layout (oxwm.layout)

  • oxwm.layout.set(name) β€” set specific layout ("tiling", "normie", "monocle", "grid", "tabbed")
  • oxwm.layout.cycle()

🏷️ Tag (oxwm.tag)

  • oxwm.tag.view(index)
  • oxwm.tag.toggleview(index)
  • oxwm.tag.move_to(index)
  • oxwm.tag.toggletag(index)

πŸ–₯️ Monitor (oxwm.monitor)

  • oxwm.monitor.focus(direction) β€” focus monitor (-1 prev, 1 next)
  • oxwm.monitor.tag(direction) β€” move window to monitor

πŸ“Š Bar (oxwm.bar)

  • oxwm.bar.set_font(font) β€” set bar font (XFT format)
  • oxwm.bar.set_blocks(blocks) β€” set status bar blocks
  • oxwm.bar.set_scheme_normal(fg, bg, ul)
  • oxwm.bar.set_scheme_occupied(fg, bg, ul)
  • oxwm.bar.set_scheme_selected(fg, bg, ul)

πŸ“ FILES πŸ“

  • ~/.config/oxwm/config.lua β€” main configuration file
  • ~/.config/oxwm/oxwm.lua β€” LSP type definitions for editor autocomplete
  • /usr/share/xsessions/oxwm.desktop β€” X session desktop entry (if installed via package manager)

🌱 ENVIRONMENT 🌱

  • DISPLAY β€” X11 display to connect to (standard X11 variable)
  • XDG_CONFIG_HOME β€” custom config directory (default: ~/.config)
  • HOME β€” home directory for config location

⭐ EXAMPLES ⭐

Start oxwm normally:

oxwm

Initialize config file:

oxwm --init

Use custom config:

oxwm --config ~/my-oxwm-config.lua

Test in Xephyr (nested X server):

Xephyr -screen 1280x800 :1 &
DISPLAY=:1 oxwm

πŸ§ͺ TESTING πŸ§ͺ

Test oxwm without affecting your current session using Xephyr β€” genuinely the move, bestie πŸ™ˆ

# Start nested X server
Xephyr -screen 1280x800 :1 &

# Run oxwm in it
DISPLAY=:1 oxwm

πŸ’€ BUGS πŸ’€

Report bugs at: https://github.com/tonybanters/oxwm/issues

(be nice, they're doing their best 🫢)


πŸ”— SEE ALSO πŸ”—

X(7), dwm(1), dmenu(1), xrandr(1), lua(1)


🧚 AUTHORS 🧚

Written by Tony (tonybtw).

Inspired by dwm but designed to be user-friendly and eliminate arbitrary elitism. periodt. ✨


πŸ“œ LICENSE πŸ“œ

GPL v3 β€” see https://www.gnu.org/licenses/gpl-3.0.en.html


okay that's the whole thing, you're officially caught up πŸ’– this was oxwm version 0.8.0, dated 2025-12-08 β€” go forth and tile, queen πŸ‘‘

πŸ“¦ where this page comes from