Repository navigation
v0.2.0
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-lockwith 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-giton the AUR, a systemdgraphical-session.targetunit andmake install.
Install on Arch Linux
paru -S neferwl-bin # this release, pre-built (x86_64, aarch64)
paru -S neferwl-git # latest main, built from sourceInstall 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/neferwlThe 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
- 92ab9ad: perf: faster game frame path (#59) (@bnema)
- 560aaa9: perf: remove FFI reflection and per-frame allocations from the hot path (#31) (@bnema)
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