{ lib, config, ... }: let cfg = config.soispha.programs.git; gitIgnoreFile = ./git_ignore.git; gitTemplateFile = ./git_template.git; in { options.soispha.programs.git = { enable = lib.mkEnableOption "an opinionated git config"; defaultBranchName = lib.mkOption { type = lib.types.str; description = "The Name of the default branch."; default = "prime"; }; }; config = lib.mkIf cfg.enable { home-manager.users.soispha = { programs.git = { enable = true; #package = pkgs.gitAndTools.gitFull; # TODO: for git send-email support aliases = import ./aliases.nix { inherit lib; inherit (cfg) defaultBranchName; }; extraConfig = { core = { excludesFile = "${gitIgnoreFile}"; }; rebase = { autoStash = true; autoSquash = true; }; init = { defaultBranch = cfg.defaultBranchName; }; user = { name = "Benedikt Peetz"; email = "benedikt.peetz@b-peetz.de"; # signingKey = "[is down below]"; }; help = { autocorrect = 5; }; push = { gpgSign = "if-asked"; }; commit = { template = "${gitTemplateFile}"; }; diff = { colorMoved = "default"; # Usually leads to better results algorithm = "patience"; bin = { textconv = "hexdump -v -C"; }; }; # Makes it a bit more readable blame = { coloring = "repeatedLines"; markIgnoredLines = true; markUnblamables = true; }; merge = { conflictstyle = "zdiff3"; }; url = { "git@codeberg.org:" = { insteadOf = "@cb:"; }; "https://codeberg.org/" = { insteadOf = "cb://"; }; "git@github.com:" = { insteadOf = "@gh:"; }; "https://github.com/" = { insteadOf = "gh://"; }; "git@gitlab.com:" = { insteadOf = "@gl:"; }; "https://gitlab.com/" = { insteadOf = "gl://"; }; }; }; delta = { enable = true; options = { decorations = { commit-decoration-style = "bold yellow box ul"; file-decoration-style = "none"; file-style = "bold yellow ul"; }; keep-plus-minus-markers = true; features = "decorations"; whitespace-error-style = "22 reverse"; }; }; signing = { key = "8321ED3A8DB999A51F3BF80FF2682914EA42DE26"; signByDefault = true; }; }; }; }; }