{ pkgs , config , lib , ... }: with lib; let cfg = config.eboskma.programs.git; in { options.eboskma.programs.git = { enable = mkEnableOption "enable git"; name = mkOption { description = "your name"; type = types.nonEmptyStr; }; email = mkOption { description = "your e-mail address"; type = types.nonEmptyStr; }; signingKey = mkOption { description = "your signing key"; type = types.nullOr types.str; default = null; }; signingKeyFormat = mkOption { description = "the type of signing key"; type = types.enum [ "openpgp" "x509" "ssh" ]; default = "openpgp"; }; }; config = mkIf cfg.enable { programs.git = { enable = true; package = pkgs.gitFull; userName = cfg.name; userEmail = cfg.email; signing = mkIf (cfg.signingKey != null) { key = cfg.signingKey; signByDefault = true; }; lfs.enable = true; delta = { enable = false; options = { side-by-side = false; }; }; aliases = { ls = "ls-files"; ignored = "ls-files -o -i --exclude-standard"; st = "status -s -b"; branches = "branch -a"; tags = "tag"; stashes = "stash list"; nevermind = "!git reset --hard HEAD && git clean -d -f"; graph = "log --graph -10 --branches --remotes --tags --format=format:'%Cgreen%h %Creset• %<(75,trunc)%s (%cN, %cr) %Cred%d' --date-order"; precommit = "diff --cached --diff-algorithm=minimal -w"; track = "branch -u"; stat = "status -s"; up = "pull --autostash --rebase"; cm = "commit -m"; changelog = "log --oneline --no-merges"; source = "remote get-url origin"; }; extraConfig = { credential.helper = "${config.programs.git.package.override {withLibsecret = true;}}/bin/git-credential-libsecret"; init = { defaultBranch = "main"; }; core = { editor = "${pkgs.neovim}/bin/nvim"; pager = "${pkgs.bat}/bin/bat"; }; merge = { ff = "only"; conflictstyle = "diff3"; tool = "${pkgs.meld}/bin/meld"; }; pull = { ff = "only"; }; push = { default = "current"; }; rebase = { autoStash = true; }; color = { ui = "auto"; status = { added = "yellow"; changed = "green"; untracked = "cyan"; }; branch = { current = "yellow reverse"; local = "yellow"; remote = "green"; }; diff = { meta = "yellow bold"; frag = "magenta bold"; old = "red bold"; new = "green bold"; }; }; grep = { lineNumber = true; column = true; patternType = "extended"; }; gpg = { format = cfg.signingKeyFormat; ssh.allowedSignersFile = "~/.config/git/allowed_signers"; }; url = { "ssh://git@repohost.bedum.horus.nu/" = { insteadOf = "rh:"; pushInsteadOf = "rh:"; }; }; }; }; programs.gh = { enable = true; settings = { git_protocol = "ssh"; editor = "nvim"; prompt = "enabled"; pager = "bat"; http_unix_socket = ""; browser = ""; }; }; }; }