{ pkgs, config, ... }: { programs.git = { enable = true; userName = "Franck Cuny"; aliases = { amend = "commit --amend"; ll = "log --pretty=\"format:%h %G? %aN %s\""; }; extraConfig = { core.whitespace = "trailing-space,space-before-tab"; color.ui = "true"; # abort if the remote branch does not match the local one push.default = "simple"; # https://adamj.eu/tech/2024/01/18/git-improve-diff-histogram/ diff.algorithm = "histogram"; init.defaultBranch = "main"; pull.rebase = true; rebase = { # Automatically create a temporary stash entry before the # operation begins, and apply it after the operation ends. autoStash = true; # Print a warning if some commits are removed missingCommitsCheck = "warn"; }; branch.autosetuprebase = "remote"; branch.sort = "authordate"; commit.template = "${config.xdg.dataHome}/git/commit.template"; url = { "ssh://git@github.rbx.com/" = { insteadOf = "https://github.rbx.com/"; }; }; }; ignores = [ "*~" ".direnv" "__pycache__" ]; }; xdg.dataFile."git/commit.template".source = pkgs.writeText "commit.template" '' # (If applied, this commit will...) # Explain why this change is being made # --- COMMIT END --- # Remember to # Use the imperative mood, present tense: `change' not `changed' nor `changes' # Do not end the subject line with a period # Use the body to explain what and why vs. how # Can use multiple lines with "-" for bullet points in body ''; home.packages = with pkgs; [ gitAndTools.pre-commit git-credential-manager ]; }