If you're the kind of person who likes the ability to tweak your environment and get things set up just right for you, I'd recommend getting a Kobo and putting KOReader[1] on it. It has the classic OSS problem of bad defaults, but it's very flexible and can be a uniquely nice experience once you get it configured in a way you like. It's mostly written in Lua and has responsive maintainers, so if you're a developer you can extend it even further.
It has great PDF support, including good reflow and note taking support (highlights and text notes). And export support to text/json/html/Readwise.io for those notes.
It also has the best UI I've seen to visualize the structure of a book you're reading.[2]
The biggest downside is that you have to do more file management of your ebooks, since it isn't hooked into a nice cloud like Kindle. I use Calibre for this, and set up an OPDS server for some basic cloud downloading.
[2] Book Map and Page Browser: https://github.com/koreader/koreader/releases/tag/v2022.01