DashNix/modules/programs/git.nix

59 lines
1.4 KiB
Nix

{
lib,
config,
options,
...
}: {
options.mods.git = {
username = lib.mkOption {
default = "";
example = "globi";
type = lib.types.str;
description = "Git user name";
};
email = lib.mkOption {
default = "";
example = "globi@globus.glob";
type = lib.types.str;
description = "Git email";
};
additionalConfig = lib.mkOption {
default = {
merge = {
tool = "nvimdiff";
};
diff = {
tool = "nvimdiff";
};
pull.rebase = true;
};
example = {
pull.rebase = false;
};
type = with lib.types; attrsOf anything;
description = "Additional git config";
};
sshConfig = lib.mkOption {
default = "";
example = ''
Host github.com
${
if (config ? sops.secrets && config.sops.secrets ? hub.path)
then "IdentityFile ${config.sops.secrets.hub.path}"
else ""
}
'';
type = lib.types.lines;
description = "ssh configuration (keys for git)";
};
};
config = lib.optionalAttrs (options ? programs.git && options ? home.file) {
programs.git = {
enable = true;
userName = config.mods.git.username;
userEmail = config.mods.git.email;
extraConfig = config.mods.git.additionalConfig;
};
home.file.".ssh/config".text = config.mods.git.sshConfig;
};
}