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

92 lines
2.4 KiB
Nix

{
config,
pgks,
lib,
...
}: {
options = {
user.git = {
enable = lib.mkEnableOption "enable git";
workProfile = {
enable = lib.mkEnableOption "git work profile";
email = lib.mkOption {
type = lib.types.str;
description = "email for work profile.";
};
};
profile = {
email = lib.mkOption {
type = lib.types.str;
description = "email for main profile";
};
name = lib.mkOption {
type = lib.types.str;
description = "name for main profile";
};
};
};
};
config = lib.mkIf config.user.git.enable {
programs.git = {
enable = true;
aliases = {
tree = "log-long-line --graph --topo-order --all --simplify-by-decoration";
hist = "log-long-line --graph --date-order --date=short ";
graph = "log-long-line --graph --topo-order --all";
log-long-line = "log --pretty=format:'%C(auto)%h %C(cyan)%an %C(blue)%ar %C(auto)%d %s'";
recent = "branch --sort=-committerdate --format='%(committerdate:relative)%09%(refname:short)'";
};
delta = {
enable = true;
options = {
side-by-side = true;
line-numbers = true;
};
};
userEmail = config.user.git.profile.email;
userName = config.user.git.profile.name;
extraConfig = {
init.defaultBranch = "main";
push = {
autoSetupRemote = true;
default = "simple";
followTags = true;
};
fetch = {
prune = true;
pruneTags = true;
all = true;
};
pull.ff = true;
merge.conflictstyle = "zdiff3";
diff = {
algorithm = "histogram";
colorMoved = "plain";
mnemonicPrefix = true;
renames = true;
};
rerere = {
enabled = true;
autoupdate = true;
};
rebase.autosquash = true;
help.autocorrect = "prompt";
branch.sort = "-committerdate";
tag.sort = "version:refname";
status.submodulesummary = true;
};
includes =
if config.user.git.workProfile.enable
then [
{
condition = "gitdir:~/work/**";
contents.user.email = config.user.git.workProfile.email;
}
]
else [];
};
programs.lazygit.enable = true;
};
}