Card/CalDAV based solutions (which almost all of above mentioned ones are based around) is only really necessary if you still need to sync with one or more mainstream (Android, iOS, etc.) devices.
If you don't have any of those, you are now free to do whatever you want. Personally I like Orgmode (in Emacs) and have slowly been writing a new contact manager based on that. But you could use whatever you want, including a plain text file, which is sort of the point of these simple text storage formats, they serve as a "lowest common denominator" which are available on essentially any device.
Then you just use something like Syncthing instead of "cloud" based solutions (the later being an euphemism for "someone else's computer."
As someone who has been trying seriously to get Card/CalDAV working (on and off, in my spare time) for literally years, I have become quite disillusioned with the entire ecosystem. On its surface it sounds great, an open, standardized protocol... Meanwhile in reality the usual suspects seem to be doing their usual "custom extensions", just enough so that everything works as long as you stay on their plantation, but heaven forbid you should ever expect all your devices to actually interoperate, what are you, crazy?!
Then there is the issue that Gnome contacts still does not really support CalDAV at all properly, however they support several proprietary alternatives just fine of course.
All of this nonsense is what drove me to start writing my own contact management solution, and is what is driving me to look into SXMO in fact, as we could then completely ignore all these uncooperative huge organizations (many with conflicting interests no doubt) and come up with our own simple solution, instead.