Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 18:34
· 837 commits to main since this release
v0.2.0
13c6a90

NeferWL v0.2.0

The first big update since v0.1.0, with 118 commits. Highlights:

  • Workspace overview that zooms out over every workspace, including named workspaces and windows under a fullscreen one.
  • Window management: free floating windows, moving and resizing with the pointer, window height inside a column, column width and workspace order actions, Cmd+F maximize, and a per-workspace stash strip (Cmd+S).
  • Screen locking: ext-session-lock with DRM output protection.
  • Screen capture: grim/slurp support, authorized recording sessions, a compositor-drawn capture indicator and an allowlist.
  • HDR: HDR10 output on capable displays and HDR content from clients.
  • Gaming: native Wine/Proton protocols, a faster game frame path, VRR kept on while a fullscreen window is composed, and direct scanout of fullscreen subsurfaces.
  • Input: touchpad swipes, tap to click and natural scroll, plus text-input v3 and input-method v2.
  • Ecosystem protocols: wlr-output-management, output power, idle notifier, ext-workspace and foreign toplevel management.
  • Packaging: GitHub releases, neferwl-bin/neferwl-git on the AUR, a systemd graphical-session.target unit and make install.

Install on Arch Linux

paru -S neferwl-bin   # this release, pre-built (x86_64, aarch64)
paru -S neferwl-git   # latest main, built from source

Install the pre-built archive

Linux amd64 and arm64. Replace amd64 with arm64 on ARM.

gh release download v0.2.0 -R bnema/neferwl -p 'neferwl_0.2.0_linux_amd64.tar.gz' -p checksums.txt
sha256sum -c --ignore-missing checksums.txt
gh attestation verify neferwl_0.2.0_linux_amd64.tar.gz -R bnema/neferwl

The archive holds the neferwl binary, the session files from packaging/ and examples/config. See the README for runtime dependencies and the session setup.

Changelog

Added

  • a646b50: feat(capture): add authorized recording sessions and offscreen workspace capture (#70) (@bnema)
  • 36cc89e: feat(capture): bounded asynchronous SDR capture with GPU HDR mapping (#67) (@bnema)
  • 78083b5: feat(capture): generic capture with compositor-imposed indicator and allowlist (#74) (@bnema)
  • 471cea3: feat(capture): support grim and slurp through screencopy and image copy capture (#5) (@bnema)
  • f7d8fc2: feat(config): per-output layout rules (#7) (@bnema)
  • 0843224: feat(config): simplify terminal and named workspaces (#14) (@bnema)
  • fa4ed84: feat(config): swap stash binds (#64) (@bnema)
  • 56de283: feat(core): add a workspace overview (#56) (@bnema)
  • 6a1f994: feat(core): add free floating windows (#82) (@bnema)
  • 186314e: feat(core): add window, column width and workspace order actions (#80) (@bnema)
  • f5f82f7: feat(core): move and resize windows with the pointer (#83) (@bnema)
  • 01dbe2a: feat(core): overview row restore, stash pile fix and move binds (#84) (@bnema)
  • b2a4809: feat(core): resize window heights within a column (#81) (@bnema)
  • 9a9b02b: feat(core): snap touchpad gestures one step per gesture (#86) (@bnema)
  • 5117e75: feat(core): stack fixed-mode overview columns and order covering floats (#66) (@bnema)
  • 2df03cd: feat(core): stash windows in a per-workspace strip on Cmd+S (#49) (@bnema)
  • 5576f26: feat(drm): keep VRR on while a fullscreen window is composed (#34) (@bnema)
  • 373cb80: feat(drm): scan out a fullscreen window's single opaque GPU subsurface (@bnema)
  • 5731344: feat(hdr): HDR content from Wayland clients (#11) (@bnema)
  • 368d496: feat(hdr): output HDR10 on capable displays (#6) (@bnema)
  • e2957a8: feat(input): add three-finger touchpad swipes and natural scroll config (#35) (@bnema)
  • ffbd0df: feat(input): smooth touchpad swipes, tap to click and touchpad speed (#54) (@bnema)
  • 8e13c90: feat(layout): expand columns and focus by screen position in fixed overflow (#42) (@bnema)
  • 541e2c7: feat(layout): maximize focused column with Cmd+F (#29) (@bnema)
  • c746896: feat(output): support wlr-output-management-unstable-v1 (#12) (@bnema)
  • a61214e: feat(overview): show named workspaces below their invocation workspace (#69) (@bnema)
  • 6648be1: feat(packaging): grant CAP_SYS_NICE at install and add make install (#61) (@bnema)
  • b931c88: feat(scale): save scale-bind changes to the config with a notification (@bnema)
  • 509f0eb: feat(session): start graphical-session.target through a systemd user unit (#21) (@bnema)
  • 39f7a28: feat(session-lock): add ext-session-lock with DRM output protection (#73) (@bnema)
  • 34856b1: feat(stash): capture windows opened while the stash is shown (@bnema)
  • ded8960: feat(wayland): Wine and Proton protocols (#60) (@bnema)
  • 8544ffa: feat(wayland): add text-input v3 and input-method v2 (#41) (@bnema)
  • 3aaf9f2: feat(wayland): add wlr foreign toplevel management (#32) (@bnema)
  • e2a318d: feat(wayland): ext_idle_notifier_v1 and wlr output power management (@bnema)
  • e16ebd1: feat(wayland): support ext-workspace-v1 (@bnema)
  • 2b00988: feat(workspace): add centered logical size overrides (#68) (@bnema)
  • ff30418: feat: floating toggles, dim veil and throttling of invisible windows (#43) (@bnema)
  • 13c6a90: feat: subtle focus indicator pulse on newly focused windows (#87) (@bnema)

Fixed

  • 77b3aae: fix(config): keep saved scale in its config group (#28) (@bnema)
  • 4e1cc2a: fix(config): reload a symlinked config when its target changes (#23) (@bnema)
  • 46f6e33: fix(config): restart the reload debounce on every write (@bnema)
  • b3c68fb: fix(core): align borders and insets with visible output tiles (#51) (@bnema)
  • 9f23317: fix(core): apply taskbar fullscreen requests during the map grace (@bnema)
  • c2347ef: fix(core): drop the fullscreen latch once its window has the focus (@bnema)
  • 34fd4a7: fix(core): focus the lock surface of the focused output once it maps (@bnema)
  • 99fdfdf: fix(core): hide floats with cmd+shift+v only when a float has focus (@bnema)
  • f94690a: fix(core): ignore fullscreen requests in a window's first second (@bnema)
  • 10fab51: fix(core): keep binds, moves and popup grabs off windows hidden by fullscreen (@bnema)
  • 865e07c: fix(core): keep fullscreen windows from floating or hiding (@bnema)
  • adeb040: fix(core): move the selected window, not the fullscreen one, from the overview (@bnema)
  • 0b4c780: fix(core): pin lock focus on any click or key press (@bnema)
  • 2a2f286: fix(core): refuse client fullscreen after the user left it (@bnema)
  • 09abb12: fix(core): show and open the overview over fullscreen windows (#65) (@bnema)
  • 1e27399: fix(core): show named workspaces from any screen (#75) (@bnema)
  • 06140d8: fix(core): show windows hidden by a fullscreen window in the overview (@bnema)
  • 3adce45: fix(core): tile windows opened over a fixed fullscreen on the home workspace (#62) (@bnema)
  • 2b40f0a: fix(drm): carry cursor moves on game frames under VRR (@bnema)
  • 02f9e79: fix(drm): clear a held cursor move reversed before the next frame (@bnema)
  • 7bfbe4f: fix(drm): keep a display off across modesets, make failed power objects inert and floor idle timeouts (@bnema)
  • 1d16b83: fix(drm): keep a gap after each VRR game flip (#63) (@bnema)
  • f8fc70e: fix(drm): refuse scanout of cropped or below-root buffers (@bnema)
  • 41f250a: fix(layout): return a client fullscreen window to its column with Cmd+F (#33) (@bnema)
  • 35f6f59: fix(scale): create a missing config as owner-only and stop notifications on shutdown (@bnema)
  • 4ef9a1d: fix(vulkan): draw background instead of colored placeholder before first buffer (#50) (@bnema)
  • 9682d35: fix(vulkan): free buffers of undrawn windows on idle outputs (#55) (@bnema)
  • ab9dbee: fix(wayland): correct workspace IDs and event batches (@bnema)
  • adaacbc: fix(wayland): deactivate constraints outside committed input (@bnema)
  • d1df38d: fix(wayland): honor ext-workspace handle lifecycle and commits (@bnema)
  • 5278439: fix(wayland): honour wl_surface.set_input_region in hit-testing (@bnema)
  • 3e6f9e9: fix(wayland): implement viewport source crop and synchronized subsurfaces (#13) (@bnema)
  • 45fc191: fix(wayland): resend input regions after remapping (@bnema)
  • 089984d: fix(wayland): send maximized state to tiled toplevels (#25) (@bnema)
  • 3d61f9d: fix: resolve wrap-up review findings since v0.1.0 (#48) (@bnema)

Performance

Changed

  • 74d746f: refactor(app): own output apply in the backend owner loop (#40) (@bnema)
  • d79bf75: refactor(core): keep fixed-overflow fullscreen windows in place (#77) (@bnema)
  • 8abeded: refactor(core): make fullscreen exclusive so nothing but a locker draws above it (@bnema)
  • 0db93ca: refactor(ports): add Clock port for timers owned by goroutines (@bnema)
  • 6f718b0: refactor(wayland): import protocol bindings from go-wayland-bindings (#85) (@bnema)
  • 348689c: refactor: consolidate core capture, output reports, HDR state and ports layout (#78) (@bnema)
  • e0b15ca: refactor: deepen core, wayland and drm modules (#57) (@bnema)
  • dd089ad: refactor: deepen surface, output, frame and workspace modules (#37) (@bnema)

Documentation

  • 2cae17f: docs(config): describe the overview over a fullscreen window (@bnema)
  • 3fbf9c7: docs(config): document binding media keys by xkb keysym name (#53) (@bnema)
  • 355ab73: docs(performance): note that make tty serves pprof (@bnema)
  • 21a6d9a: docs(readme): list features by category and rewrite the motivation (#24) (@bnema)
  • f40b3c9: docs(readme): tighten the feature list to seven scannable points (#26) (@bnema)
  • 7738432: docs(readme): tighten wording and reorder sections (@bnema)
  • 318f46a: docs: Wine runs natively on Wayland, only X11 clients need xwayland-satellite (#27) (@bnema)

Maintenance

  • 1d16737: chore(deps): bump purego to v0.12.0-bnema.1 (#9) (@bnema)
  • 19da7f2: chore(deps): bump purego-libwayland to v0.4.1 and purego-vulkan to v0.4.2 (#10) (@bnema)
  • 2b17ac2: chore(deps): bump purego-libwayland to v0.7.0 (#71) (@bnema)
  • bfed184: ci(release): publish GitHub releases and AUR packages with GoReleaser (#58) (@bnema)
  • 214ff0f: ci: check SPIR-V with Arch's shaderc (@bnema)
  • 68ce22d: ci: fix hexcheck install, add runtime libraries and staticcheck, run once per change (@bnema)
  • a4a3f87: ci: give the container an init process and a runtime dir (@bnema)
  • fac9303: ci: run every check in an Arch container (@bnema)

Other changes

  • daacdb2: Merge branch 'fix/ignore-startup-fullscreen': ignore fullscreen requests in a window's first second (@bnema)
  • d1d5df8: Merge branch 'fix/vrr-cursor-commit': carry cursor moves on game frames under VRR (@bnema)
  • 7ff5dde: Merge pull request #1 from bnema/readme-pass (@bnema)
  • 3c68abd: Merge pull request #18: feat(scale): save scale-bind changes to the config with a notification (@bnema)
  • be59327: Merge pull request #2 from bnema/ci-fix (@bnema)
  • 75e0f9c: Merge pull request #20: fix(wayland): honour wl_surface.set_input_region (@bnema)
  • 0049441: Merge pull request #22: feat(wayland): support ext-workspace-v1 (@bnema)
  • e55c0e7: Merge pull request #3 from bnema/idle-power (@bnema)
  • 49463ee: Merge pull request #4 from bnema/config-watch-modify (@bnema)
  • c7c1418: Merge pull request 'feat(stash): capture windows opened while the stash is shown' (#2) from feat/stash-capture into main (@bnema)
  • b87e882: Merge pull request 'fix(core): focus the lock surface of the focused output' (#1) from fix/lock-focus-output into main (@bnema)
  • f4eb83f: Merge pull request 'fix(core): reach windows hidden by a fullscreen window from the overview' (#3) from fix/overview-fullscreen-reach into main (@bnema)

Full changelog: v0.1.0...v0.2.0