Test checklist for M5 to M7
Everything below landed while you were away and was only smoke-tested nested. Bare metal, multi-monitor and real apps are still unverified.
Build and run from the repo root in nushell.
nix develop -c cargo build --release -p monolith
nix develop -c sh -c 'RUST_LOG=monolith=debug target/release/monolith run --backend drm 2> monolith.log'M5
- VRR. The log line
output connectedshould sayvrr_capable=truefor DP-2. Fullscreen vkcube and look foradaptive sync vrr=true, and check the monitor’s OSD shows a varying refresh rate. Leaving fullscreen should logvrr=false. The default is[output] vrr = "fullscreen", and"on"and"off"also work. - VRR cursor cap. With a fullscreen game below 165 fps, moving the mouse should not push the refresh rate up. Cursor-only frames are capped at 60 Hz.
- Hotplug, a second monitor and the Intel pass, still open from before.
M6
- layer-shell.
waybarreserves its strip and tiles stay clear of it. A fullscreen window covers it. Its workspaces module should list the tags through ext-workspace. - Launchers.
fuzzeltakes the keyboard while open and gives it back on close. The launched app should land on the tag you were on when you launched it. - Session lock.
swaylockhides everything, takes input and unlocks with your password. VT switching still works while locked. Killing swaylock leaves the session locked, which is what the protocol wants. Unlock it by startingswaylockagain from a VT. - Idle.
swayidle -w timeout 10 'notify-send idle'fires after 10 s without input. A playingmpvshould hold it off while visible and stop holding it off once its tag is hidden. - Clipboard.
wl-copyandwl-pastework both ways with foot or beer. Middle-click paste uses the primary selection. - Screenshots.
grimandgrim -g (slurp). - Portals. Needs
xdg-desktop-portal-wlrinstalled and monolith’s package in your profile soshare/xdg-desktop-portal/monolith-portals.confis found. Screen sharing a whole output from a browser should work. Window sharing does not exist yet. - Xwayland. Run an X app, like
xeyes, Steam or a Proton game. The log showsstarting Xwaylandon its first connection. Check keyboard input, fullscreen and menu placement. Dialogs should float. After the last X client closes, Xwayland exits and should start again for the next one. - Activation. Launch something slow from fuzzel on tag 2, switch to tag 3 before it appears. It should land on tag 2 and mark it urgent.
M7
- Submit stall. It used to drop one frame every 6.2 s at 165 Hz. With vkcube running, the
frame ratedebug lines should read 165 of 165 indefinitely, with noframe missed its vblankin steady state. - vkcube black start. Is the half second of black at launch gone?
- Fullscreen switches. Toggle fullscreen on vkcube a few times and look for
slow framelines. First-time imports now run on a worker thread. - Direct scanout. Fullscreen vkcube should log
direct scanout scanout=true, and itsframe ratelines should showscanned_outclose topresented. If it logsscanout=falseor never switches, theelements,overlay_planesandcursor_planefields on that line show what was on screen with it. - CPU target.
cpu_p99_uson theframe ratelines should stay under 500, the target in decisions.md. - NixOS module. Add the flake as an input, import
monolith.nixosModules.defaultand setprograms.monolith.enable = true. Amonolithsession appears in the display manager. With the defaultrealtime-scheduling = true, the log should showcompositor thread runs SCHED_RRandqueue global priority priority=Some(REALTIME). Programs launched from monolith should not inherit CAP_SYS_NICE, whichgrep Cap /proc/(pgrep foot)/statusshows as an all-zeroCapAmb.
Known
- Nested monolith stops redrawing when the host compositor stops sending it frame callbacks, for example while its window is hidden. Clients inside then freeze until it is shown again.
- See
parked.mdfor what is left over.