If you just want one point of truth, the minimal version is to create a bare repo somewhere that you have ssh access to or your local machine. Then you can clone/pull/push from it.
A bare repo is a special kind of repo meant for exactly this, but can be a bit confusing at first. A normal repo contains all of your current working files and a special .git directory that holds all the files/blobs/history that git needs to work. A bare repo is just the .git as a top directory with bare=true in its config. So you can use it as a remote, but it never has a working set. They are usually named something like my_repo.git.
Edit:
Here’s a basic example for setting it all up in a fully local way:
mkdir ~/bares
git init --bare ~/bares/my_repo.git
mkdir ~/code
git clone ~/bares/my_repo.git ~/code/my_repo
And then you have remotes as your main source of truth in ~/bares and your working copies in ~/code. If you want to access from another machine that has ssh access to the first, you can do:
mkdir ~/code
git clone user@host:~/bares/my_repo.git ~/code/my_repo
And then use git pull/push to keep it all in sync. Don’t use Syncthing on a git repo, it eventually goes badly.