{ 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 GPG signing key ID"; type = types.nullOr types.str; default = null; }; }; config = mkIf (cfg.enable) { programs.git = { enable = true; userName = cfg.name; userEmail = cfg.email; signing = mkIf (cfg.signingKey != null) { key = cfg.signingKey; signByDefault = true; }; delta = { enable = true; options = { side-by-side = true; }; }; 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 = { 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"; }; 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"; }; }; }; }; programs.gh = { enable = true; settings = { git_protocol = "ssh"; editor = "nvim"; prompt = "enabled"; pager = "bat"; http_unix_socket = ""; browser = ""; }; }; }; }