I think the ship's long sailed. Too much software just throws random crap into $HOME, so it's best to give up. I've resigned myself to the state of affairs and my "real" $HOME is in $HOME/code $HOME/home.
As the saying goes, layers are only added, never removed. The world where people respect XDG is not one that can be achieved anymore.
I think it is better to think about it as XDG failing to respect a world that existed long before it did. $HOME/.* namespace belongs to the user, but contents are special. It's almost like complaining about Linux enforcing the naming of certain file extended attributes.
Which software in particular? Given my experience, it is well within reach, besides a few exceptions including Firefox/Thunderbird, etc, and one relating to Chromium-based browsers.
The trick is to use the XDG Base Dir Spec, only if the old ~/.name location doesn't exist. Old users are happy because it doesn't break compatibility and new users are happy because nobody's dropping 10 sacks of potatoes on their metaphorical doorstep
Just a random sample from my home directory right now on a random dev server: .ssh, .gnupg, .vscode-server, .zshrc, .ipython, snap, .antigen, .pki, .profile, .python_history, and there's much more.
I don't know what's the situation with desktop linux, may it's better, maybe it's worse, but even on a headless dev server it's already a lost cause. Trying to convince everybody to move to a new standard is a hopeless task, imo, best to move on.
Oh right I forgot about those - I set some environment variables so I don't see any of those except for .pki
And in my opinion .ssh and .gnupg are okay since in some contexts, the "XDG variables" haven't been initialized in certain circumstances when using those utilities.
But yeah, I'll have to look into those - maybe there is something I can do to fix that
As the saying goes, layers are only added, never removed. The world where people respect XDG is not one that can be achieved anymore.