{{- $name := get . "gitName" -}} {{- $email := get . "gitEmail" -}} {{- $signing := get . "gitSigningKey" -}} {{- $wan := get . "giteaWanSsh" -}} {{- $lan := get . "giteaLanSsh" -}} ; ~/.config/git/config.local -- PRIVATE tier. ; ; The other half of the seam. ~/.gitconfig comes from the public repo, carries ; no [user], and ends with `[include] path = ~/.config/git/config.local`. Git ; treats a missing include as a no-op, so a public-only machine reads the ; public half and stops -- and `git commit` correctly refuses to guess who you ; are. ; ; Everything here is identity, not configuration: it is the answer to "whose ; machine is this", which is exactly the question the public tier must not be ; able to answer. ; ; Values come from the [data] prompts in .chezmoi.toml.tmpl, asked once at ; `chezmoi init`. Re-answer them with `cmp init` (see README). {{ if and $name $email -}} [user] name = {{ $name }} email = {{ $email }} {{- if $signing }} signingkey = {{ $signing }} [commit] gpgsign = true [tag] gpgsign = true {{- end }} {{- else -}} ; NO IDENTITY CONFIGURED. ; ; gitName and/or gitEmail are empty in the chezmoi config, which means either ; you pressed enter through the prompts or something overwrote ; ~/.config/chezmoi/chezmoi.toml after this tier was initialised. Re-run: ; ; chezmoi init -S ~/.local/share/dotfiles-private ; ; Until then git will refuse to commit, which is the correct complaint. {{- end }} ; Every remote in every repo you own is ssh. This rewrite is what lets a ; copy-pasted https:// GitHub URL clone over the key you actually have, which ; matters most on a machine built ten minutes ago. It lived in the old ; dot_gitconfig; phase 3 removed it from the public tier because it names an ; authentication method tied to your keys, not a neutral default. [url "git@github.com:"] insteadOf = https://github.com/ {{ if $wan -}} ; Gitea clone/push shortcuts: git clone gitea:ben/repo.git [url "{{ $wan }}"] insteadOf = gitea: {{ end -}} {{ if $lan -}} [url "{{ $lan }}"] insteadOf = gitea-lan: {{ end }} {{- if and $wan $lan }} [alias] ; Configure `origin` to push to BOTH gitea servers at once. Run once inside ; a repo whose origin points at either gitea host: ; ; git dual-gitea ; ; After this, `git push` writes to WAN + LAN simultaneously. Fetch/pull ; continues to use origin's existing fetch URL. dual-gitea = "!f() { url=$(git remote get-url origin) || { echo 'no origin remote' >&2; return 1; }; p=${url#gitea:}; p=${p#gitea-lan:}; p=${p#{{ $wan }}}; p=${p#{{ $lan }}}; if [ \"$p\" = \"$url\" ]; then echo \"origin is not a gitea remote: $url\" >&2; return 1; fi; git config --unset-all remote.origin.pushurl 2>/dev/null; git remote set-url --add --push origin \"gitea:$p\"; git remote set-url --add --push origin \"gitea-lan:$p\"; echo 'Dual-push configured on origin:'; git remote -v; }; f" {{- end }}