{ osConfig, pkgs, ... }:
let
  myGitConf = osConfig.myOptions.home-manager.git;
in
{
  imports = [
    ./gh.nix
    ./ignores.nix
    ./aliases.nix
  ];

  programs.git = {
    enable = true;
    package = pkgs.gitAndTools.gitFull;

    userName = myGitConf.userName;
    userEmail = myGitConf.userEmail;

    signing = {
      signByDefault = myGitConf.signing.enable;
      key = myGitConf.signing.key;
    };

    delta.enable = true;

    extraConfig = {
      init.defaultBranch = "main";
      merge.conflictstyle = "diff3";
      delta.line-numbers = true;

      push = {
        default = "current";
        followTags = true;
      };

      url = {
        "https://github.com/".insteadOf = "github:";
        "ssh://git@github.com/".pushInsteadOf = "github:";
        "https://gitlab.com/".insteadOf = "gitlab:";
        "ssh://git@gitlab.com/".pushInsteadOf = "gitlab:";
        "https://aur.archlinux.org/".insteadOf = "aur:";
        "ssh://aur@aur.archlinux.org/".pushInsteadOf = "aur:";
        "https://git.sr.ht/".insteadOf = "srht:";
        "ssh://git@git.sr.ht/".pushInsteadOf = "srht:";
        "https://codeberg.org/".insteadOf = "codeberg:";
        "ssh://git@codeberg.org/".pushInsteadOf = "codeberg:";
      };
    };
  };

  home.packages = with pkgs; [
    gist # Manage github gists
    act # Run github actions locally
  ];
}