Ferese

Ferese is an experimental Wayland scrolling compositor written in Rust with Smithay. Scrolling columns are the default, tree tiling remains available as an optional per-workspace mode, and geometry changes use timestamp-driven animation. See the window-manager specification for the current architecture and milestones.

Development

Install the native dependencies required by Smithay's winit and GLES backends, then run:

cargo run -p ferese

Pass a client and its arguments after -- to launch it inside Ferese:

cargo run -p ferese -- foot

Set RUST_LOG=ferese=debug for detailed compositor logging.

Ferese reads $XDG_CONFIG_HOME/ferese/config.toml, or ~/.config/ferese/config.toml when XDG_CONFIG_HOME is unset. New scrolling columns use half the viewport by default. To make every newly opened column use the full viewport width:

[scrolling]
default_column_width = "full"

default_column_width = 1.0 is equivalent. Super+M switches the active workspace between scrolling and tree modes.

Scrolling controls use Super+R to cycle configured width presets, Super+C to center the focused column, Super+[ to consume the focused window into an adjacent column, and Super+] to expel it. Super+Ctrl+H/J/K/L resizes in the corresponding direction.

Text-input-v3 is available to applications by default. Input-method-v2 is hidden unless the session explicitly opts in, because an input method can request privileged keyboard access. Enable it only when launching a trusted IME for the session:

FERESE_ENABLE_INPUT_METHOD=1 cargo run -p ferese

Ctrl+Alt+Escape always releases an active client shortcut inhibitor.

Keyboard-shortcut inhibition is hidden unless a trusted VM or remote-desktop session explicitly enables it:

FERESE_ENABLE_SHORTCUT_INHIBIT=1 cargo run -p ferese

The emergency Ctrl+Alt+Escape binding remains available while inhibition is active.

Screen capture is hidden by default. A session that has already made an explicit capture-policy decision can expose screencopy-v1 to its clients with:

FERESE_ENABLE_SCREENCOPY=1 cargo run -p ferese

The current M5 implementation supports one-shot output and region capture into ARGB8888 shared-memory buffers. Cursor overlays are included only when the capture client requests them.

Direct DRM session

Run the hardware backend from a spare TTY, outside another graphical session:

RUST_LOG=ferese=debug cargo run -p ferese -- --backend=drm -- foot

Do not run that command from a terminal inside the active desktop: the direct backend requests control of the seat and primary DRM device. Use Ctrl+Alt+F1–F12 to switch virtual terminals.

M4 validation requires the direct session to:

  • start foot and render the same animated tiling workload as the nested path;
  • retain keyboard and pointer input;
  • pause when switching away and redraw after switching back; and
  • log page-flip timing and any missed presentation deadlines on the reference integrated GPU.

The direct path creates an independent render pipeline per connected output and rescans connectors on hotplug. Physical unplug/replug acceptance testing on the reference hardware is still pending.

S
Description
No description provided
Readme MIT
146 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 91.7%
Python 7.2%
Shell 0.7%
GLSL 0.2%
CSS 0.1%