Sway is an incredible window manager, and certainly one of the most well established Wayland window managers. However, it is restricted to only include the functionality that existed in i3. This fork ditches the simple wlr_renderer, and replaces it with our fx_renderer (via scenefx), capable of rendering with fancy GLES2 effects.
SwayFX expands Sway’s feature set to include eye-candy that many users have been asking for:
</img>
ignore the insane RAM usage in this pic
Control the duration of window movement and resizing animations.
animation_duration_ms <value>: Duration in milliseconds (0-5000, default: 90).New windows use pop/expand animations by default when opening and closing, using the same animation timing.
Default config convenience:
Mod+m maximize: Maximize the focused window to the current workspace without entering fullscreen.Enable a niri-style horizontal strip layout for top-level tiled windows.
workspace_layout scrollable: Make new workspaces default to the scrollable layout.layout scrollable: Switch the current workspace to the scrollable layout. In config, this also acts as a default-layout alias.layout splith|splitv|stacking|tabbed|default: Switch back out of scrollable mode.scroll left|right [<px> px]: Pan the scrollable workspace camera. Defaults to 100px when no amount is given.scroll center: Center the focused column in the visible area.scroll home|end: Jump the camera to the beginning or end of the workspace strip.scroll follow: Return to focus-following camera behavior.Current interaction behavior:
Shift + mouse wheel moves focus left or right across columns using the focused window, not the pointer location.$mod + Shift + Left/Right moves the focused column left or right in the scrollable strip.Mod + right click resizes scrollable columns directly.Global blur settings and per-window toggles.
blur <enable|disable>: Global toggle.blur_xray <enable|disable>: Blur floating windows based on the desktop background instead of windows below.blur_passes <integer>: Number of blur passes (0-10).blur_radius <integer>: Blur radius (0-10).blur_noise <float>: Amount of noise to add to the blur (0-1).blur_brightness <float>: Adjust blur brightness (0-2).blur_contrast <float>: Adjust blur contrast (0-2).blur_saturation <float>: Adjust blur saturation (0-2).for_window [CRITERIA] blur <enable|disable>: Per-window toggle.corner_radius <pixels>: Set the radius for rounded corners.smart_corner_radius <enable|disable>: Automatically disable rounded corners when a window is fullscreen or the only one on a workspace (if gaps are 0).shadows <enable|disable>: Global toggle.shadows_on_csd <enable|disable>: Enable shadows on windows with Client-Side Decorations.shadow_blur_radius <pixels>: Blur radius for shadows (0-99).shadow_color <hex>: Shadow color (e.g., #0000007F).shadow_inactive_color <hex>: Shadow color for unfocused windows.shadow_offset <x> <y>: Offset for the shadow.default_dim_inactive <0.0 - 1.0>: Set the default dimming for inactive windows.for_window [CRITERIA] dim_inactive <0.0 - 1.0>: Per-window dimming.dim_inactive_colors.unfocused <hex>: Color used for dimming unfocused windows.dim_inactive_colors.urgent <hex>: Color used for dimming urgent windows.Apply effects to specific layer shell namespaces (e.g., “waybar”, “notifications”).
layer_effects <namespace> <effects>blur <enable|disable>blur_xray <enable|disable>blur_ignore_transparent <enable|disable>shadows <enable|disable>corner_radius <pixels> layer_effects "waybar" {
blur enable
blur_ignore_transparent enable
shadows enable
corner_radius 10
}
A refractive glass effect that distorts the background.
liquid_glass <enable|disable>liquid_glass_bezel_width <float>liquid_glass_brightness_boost <float>liquid_glass_chromatic_aberration <float>liquid_glass_noise_intensity <float>liquid_glass_refraction_index <float>liquid_glass_saturation_boost <float>liquid_glass_specular <on/off>liquid_glass_specular_opacity <float>liquid_glass_specular_angle <float>liquid_glass_surface <convex_circle|convex_squircle|concave|lip>liquid_glass_thickness <float>titlebar_separator <enable|disable>: Show or hide the separator between the titlebar and window content.scratchpad_minimize <enable|disable>: Treat hiding a window to the scratchpad as minimizing it.If you have Nix installed, you can build and run SwayFX easily:
nix build
./result/bin/sway
For development:
nix develop
Check INSTALL-deb.md
docker compose up --build
Install dependencies:
meson, wlroots, wayland, wayland-protocols, pcre2, json-c, pango, cairo, scenefx, gdk-pixbuf2 (optional), swaybg (optional), scdoc (optional).
meson build/
ninja -C build/
sudo ninja -C build/ install
When chasing compositor crashes or memory corruption, build a separate AddressSanitizer binary so the normal build/ tree stays untouched:
meson setup build-asan -Db_sanitize=address -Dbuildtype=debug -Doptimization=0
ninja -C build-asan sway/sway
Run the instrumented compositor and save its debug output:
ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:detect_leaks=0 \
./build-asan/sway/sway -d 2> /tmp/swayfx-asan.log
After reproducing the crash, inspect the log for the allocator report and stack trace:
rg -n "AddressSanitizer|ERROR:|SUMMARY:" /tmp/swayfx-asan.log
tail -n 200 /tmp/swayfx-asan.log
SwayFX is a community project built on the shoulders of giants. We thank: