dotfiles/modules/programs/git.nix

77 lines
1.7 KiB
Nix

{ config
, lib
, ...
}:
with lib;
let
cfg = config.my.programs.git;
in
{
options.my.programs.git = {
enable = mkEnableOption "git";
signing = mkOption {
default = false;
type = types.bool;
example = true;
};
identity = {
name = mkOption {
default = "Moritz Böhme";
type = types.str;
};
email = mkOption {
default = "mail@moritzboeh.me";
type = types.str;
};
};
};
config = mkIf cfg.enable {
my.shell.abbreviations = {
g = "git";
gC = "git clone";
gF = "git pull";
gS = "git switch";
ga = "git add";
gap = "git add --patch";
gb = "git branch";
gc = "git commit";
gco = "git checkout";
gd = "git diff";
gds = "git diff --staged";
gf = "git fetch";
gp = "git push";
gr = "git restore";
grm = "git rm --cached";
grp = "git restore --patch";
grps = "git restore --patch --staged";
grs = "git restore --staged";
gs = "git status";
};
home-manager.users.moritz = {
programs.git = {
enable = true;
userName = cfg.identity.name;
userEmail = cfg.identity.email;
extraConfig = {
commit.verbose = true;
diff.algorithm = "histogram";
fetch.fsckobjects = true;
init.defaultBranch = "main";
merge.conflictstyle = "zdiff3";
push.autoSetupRemote = true;
receive.fsckObjects = true;
transfer.fsckobjects = true;
};
signing = mkIf cfg.signing {
key = "0x970C6E89EB0547A9";
signByDefault = true;
};
lfs.enable = true;
delta.enable = true;
};
};
programs.git.enable = true;
};
}