nixos-config/home-manager/modules/git/default.nix

120 lines
2.9 KiB
Nix

{ 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 = {
credential.helper = "${pkgs.git.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";
};
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";
};
};
};
programs.gh = {
enable = true;
settings = {
git_protocol = "ssh";
editor = "nvim";
prompt = "enabled";
pager = "bat";
http_unix_socket = "";
browser = "";
};
};
};
}