v1.2.1
A cleanup release over everything 1.2.0 shipped: fixes across settings, playback, and the library tools, plus a performance pass.
Settings
Settings now write atomically, so a crash mid-save can't take your layouts, workspaces, palettes, and last.fm session with it. The update check and the UI no longer overwrite each other's fields, and quitting from the menu saves pending layout changes the same way the Quit shortcut does.
Playback
Scrubbing near the end of a track lands where you point instead of jumping into the next one, and removing the upcoming track from the queue no longer skips a song at the gapless handoff. The visualizer feed keeps its channels aligned under load.
Library tools
Duplicate cleanup only trashes copies visible through the active filter, and "ABBA" now groups with "Abba". The scanner survives symlink loops, an aborted scan no longer counts as finished, and a folder moved into a watched library gets picked up. Saving tags, covers, or repairs no longer wakes the library watcher, so your own edits don't trigger a rescan.
Performance
Select-all drags, queue sync, sorting, and the appearance sliders stopped redoing work per row or per tick, and idle panels render less.
Also
- Ctrl+Shift extends selections as stacked ranges across the track panels.
- The Nix flake exports a proper package.
- M3U import keeps the first track when the file starts with a BOM.
- MPRIS reports position after a seek, and media keys survive closing the window that owned them.
- Last.fm connect can't hang forever.
- Panel persistence fixes: playlists columns save with the layout, the grid restores its scroll position without drifting, and gear and lock reach every panel.
Full Changelog: v1.2.0...v1.2.1