about summary refs log blame commit diff stats
path: root/modules/by-name/gi/git/module.nix
blob: 8e413e8a6db333a79c54f8017357e866475181a1 (plain) (tree)
















































































































                                                                               
{
  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;
        };
      };
    };
  };
}