In practice, 100% sync is too complicated. I aim for like 80% application-level syncing instead. That means I let the web browser handle its own syncing (login to a profile), my IDE (Jetbrains) does the same, my passwords and passkeys and 2FA are in 1Password, then I just git push and pull to my private branches or forks to work across different machines. Most of the rest of it is cloud-native anyway (email, Slack, project management, time tracking, designs, etc.).
It doesn't sync everything (open tabs, terminal history, browser cookies, etc.) but gets the most critical things.
The main benefit to me of this approach is that it's pretty much login and forget. I don't have to worry about remembering to start a manual sync or waiting for it to finish. It's most of what I need for minimal effort.