I think Matrix still has my favorite decentralized service username schema.
@user:domain.tld makes a lot of intuitive sense to me and looks really clean. It's really clear which part is the username and which is the domain without looking repetitive. It starts with an @ so it tells clients to pull up the username lookup when you start typing, but it doesn't get kludgy like other username schemas do.
user@domain.tld makes sense for email I guess because you can't really @ people inline, but it doesn't work well for other services because it doesn't start with an @ so it doesn't indicate to the client to pull up the username lookup. I'm curious how XMPP handles this. 
@user@domain.tld that Fedi uses looks awful to me. I hate the double @'s, it just doesn't scan very well and looks silly. Maybe it's just me, but I feel like my username is being flanked by boobies.
(Technically Fedi uses WebFinger/the email schema under the hood from the last example and the double @'s are just user-facing in order to trigger the inline username lookup, but meh, I'm including it.)
@domain.tld that Bluesky uses seems clean on the surface, but then you realize your username is (usually) just a domain name which is... weird.
Then you're stuck making a subdomain for your username if you couldn't get a dedicated domain for it, so then it becomes @user.domain.tld or even @user.subdomain.domain.tld which is just, like, idk a lot of dots.
It makes sense for ATProto because of how the DIDs work, but it's still not my favorite.
I know I've made this ramble before but I'm like Fedi handles where I'm hopelessly repetitive
#Matrix #MatrixChat #Federation #Fedi #Mastodon #ActivityPub #Bluesky #ATProto