{ config, lib, pkgs, userfullname, useremail, ... }: { # `programs.git` will generate the config file: ~/.config/git/config # to make git use this config file, `~/.gitconfig` should not exist! # # https://git-scm.com/docs/git-config#Documentation/git-config.txt---global home.activation.removeExistingGitconfig = lib.hm.dag.entryBefore ["checkLinkTargets"] '' rm -f ~/.gitconfig ''; programs.git = { enable = true; lfs.enable = true; userName = userfullname; userEmail = useremail; includes = [ { # use diffrent email & name for work path = "~/work/.gitconfig"; condition = "gitdir:~/work/"; } ]; extraConfig = { init.defaultBranch = "main"; push.autoSetupRemote = true; pull.rebase = true; # replace https with ssh url = { "ssh://git@github.com/" = { insteadOf = "https://github.com/"; }; "ssh://git@gitlab.com/" = { insteadOf = "https://gitlab.com/"; }; "ssh://git@bitbucket.com/" = { insteadOf = "https://bitbucket.com/"; }; }; }; # signing = { # key = "xxx"; # signByDefault = true; # }; delta = { enable = true; options = { features = "side-by-side"; }; }; aliases = { # common aliases br = "branch"; co = "checkout"; st = "status"; ls = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate"; ll = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --numstat"; cm = "commit -m"; ca = "commit -am"; dc = "diff --cached"; amend = "commit --amend -m"; # aliases for submodule update = "submodule update --init --recursive"; foreach = "submodule foreach"; }; }; }