There’s a bit to explain here. So the root user is basically the equivalent of Administrator. One big difference (there are many) is that when you run something as root using sudo, you are actually running as the root user. When you ran the first command to create the folder, you created it in your home directory using the ~ shorthand variable which points to your /home/ user folder. The second command, also references your home folder. However since your running as root, it’s looking for the file in the root user’s home directory or /root, not your home folder.
The config file needs to be in the home directory of the user running the command unless you can put the full path to the config file in the command, then you can put it wherever you want.
I don’t know enough about the fediverse or Lemmy code to say how easy or hard this would be to implement but if we’re logging in with the username noogs@lemmy.noogs.me for example, it’s reasonable for the app to assume the server is located at lemmy.noogs.me and it can derive the likely URL of https://lemmy.noogs.me from that. The only case this wouldn’t work is if your instance is running on a port other than 443 because then we need some way to tell the app what the port should be.
Email (or at least Microsoft Exchange email) uses a protocol called autodiscover for this which uses DNS to tell an email client where to get connection information from, it then polls that URL for the information and configures the email client automatically. Using a similar DNS based approach may be useful as well.