I self-host because even the ultimate plan limits the size of artifacts and the number on minutes of CI time per job.
Open source projects are able to apply to get an ultimate account for free. They make someone sign a form, but they don't ask for ID.
For repos that are mine, I just have them on my instance. No git{lab,hub}.com. I keep it simple, and I don't think many people are searching github for "signet" because if they know to search for that, they probably know to use duck duck go or bing or something to find hax0rbana.org/signet (which links to the repo).
For repos I have mirrored or forked, I have a copy on my server and a copy on gitlab.com or github to make merging easier for the upstream project. My motivation for keeping a local copy in this case is mainly just so I have a copy in case it ever gets pulled by the big platform.
If I mirror it, that means I use it, and thus I depend on it in some way. I don't want to be completely hosed because someone had it taken down. My mirror may be old, but I'll at least have something. And the more heavily I depend on it, the more likely ot is that I contribute, which will make it more likely that my mirror will be kept fairly up to date. So it works out reasonably well.