[[ RYUDO ]]

the minimalist floatiling window manager that flows

– Derek Stevens nilix@nilfm.cc 2019 –

micro centered floating porn firefox maximized pseudotiling


ryudo is a fork of Russ Cox’s rio, itself a fork of David Hogan’s 9wm. The primary additions I’ve made are:

  • Explicit list of eligible terminal programs in config.h
  • urxvt is the default terminal emulator (still tries 9term and then xterm if no dice)
  • Window spawning behavior has been made more natural – windows shouldn’t spawn partially offscreen like with rio
  • Customizable colors, borders, fonts, gaps, and keybinds in config.h
  • Multimonitor support via Xrandr
  • Default keybindings:
    • New Terminal: Super+Slash
    • Switch Windows: Alt-Tab
    • Switch to Window on the next monitor: Alt-Shift-Tab
    • Destroy: Super+D
    • Iconify: Super+I
    • Uniconify: Super+U
    • Maximize: Super+M
    • moVe: Super+V
    • Reshape: Super+R
    • wrAngle: Super+A
    • Stick: Super+S
    • Snap Left: Super+H
    • Snap Right: Super+L
    • Snap Top: Super+K
    • Snap Bottom: Super+J
    • Snap Top-Left: Super+Q
    • Snap Bottom-Left: Super+W
    • Snap Bottom-Right: Super+O
    • Snap Top-Right: Super+P
    • Snap Big Center: Super+C
    • Snap Floating Center: Super+Shift+C
    • Virtual Desk++: Super+Right
    • Virtual Desk—: Super+Left
  • Other new features customizable by config.h:
    • Show/hide ‘Stick’ Button3 menuitem
    • AUTOSTICK list of windows to spawn sticky by default and not focus (pseudo-panel/dock windows)
    • TRANSPARENTLIST of window classes to be rendered with partial transparency (and corresponding OPACITY setting)
    • Optionally notify with notify-send which desktop is switched to (I use it with dunst)
    • Gaps for pseudo-tiling
    • Option to swap the keyboard shortcuts between “Snap Big Center” and “Snap Floating Center” (and the preferred behavior for terminals launched by keyboard)
    • Focus model for new windows in multimonitor setup (follow mouse or follow active window)

The name “Ryudo” is a nod to “Rio” and a Japanese word for “flow.” Using ryudo should feel very natural – you can do things with keyboard or mouse depending on the situation. Terminal launching can be done with mouse using the popup menu, or using the keyboard, which will spawn a terminal window centered (its exact geometry is configurable via config.h).

Dependencies, Building, Installation

Running and building require the following:

  • a full plan9port installation
  • libX11 and development headers
  • libXT and development headers
  • libXrandr and development headers

If virtual desktop switching notification is enabled, it requires

  • libnotify and development headers

Build with build.sh (calls mk and does some other magic), and install with install.sh (will install to a local folder if run as a normal user, or to your $PLAN9/bin/ plus session wrapper in /usr/bin and .desktop file in /usr/share/xsessions/ if run as root).

If you have trouble building, you might need to edit the mkfile at line 2 to point to the proper location of your plan9port’s mkwsysrules.sh, or edit the compiler flags (CFLAGS) linker flags (LDFLAGS) to point to your libraries’ real location.

Bugs and Caveats

Of the bugs and caveats not already mentioned in rio’s README:

  • No per-pixel alpha support beyond XShape extension.
  • Switching back and forth between virtual desktops very quickly can cause some windows to glitch out, lose their parent (border), and become unfocusable.
  • Some applications that render fullscreen or dedicated OSD windows (Virtualbox, Zoom, etc) will need to be manually maximized to fix their alignment (in the former case) or otherwise misbehave.
  • Probably more!

License and Legacy

ryudo is distributed under the 9wm license.

The original README from rio, (which contains the original README from 9wm) is in this repository. See README.rio