About six months ago I tried out Riot for an extended period time and while the interface has gotten a lot better, I stopped using Riot (and Matrix) after they got hacked in April. Riot doesn't encrypt your messages by default and when you enable end-to-end encryption you have to re-approve you conversations with each person when either you or they set up a new device before you can continue sending messages. I found this to be a real pain when setting up the service with my friends and after the breach I didn't feel comfortable using Riot without end-to-end encryption.
Since April I've been using both Signal (requires a smartphone to setup) and Wire. I'm not sure if you've used Wire as you mention it at the beginning of your post when defining IMs but no one has really mentioned it since? (Maybe it requires a smartphone to setup and I've completely forgotten the setup process?) If not however, I've really enjoyed using Wire over the last couple of months. It's fully end-to-end encrypted, opensource, and the developers mentioned that in the future they'd be open to making it federated (similar to Matrix.) It's also got (in my opinion) a very nice interface, though I'm a bit of a sucker for some good UI animations. Being able to send someone a guest web link to a group conversation without them having to signup for the service has been very nice for creating large group chats to plan out events.
So overall (TLDR) I'd say my recommendation goes to Wire as a good overall IM with end-to-end encryption and Linux desktop app support.