{ user ? throw "user argument is required" }: { config, pkgs, ... }: let hmConfig = config.home-manager.users."${user.name}"; in { home-manager.users."${user.name}" = { programs.git = { enable = true; lfs.enable = true; userName = user.fullName; userEmail = user.email; signing = { signByDefault = true; key = null; }; extraConfig.credential.helper = "store"; hooks = let commit-msg-hook = pkgs.writeShellScriptBin "git-commit-msg" '' ${pkgs.git}/bin/git interpret-trailers --if-exists doNothing --trailer \ "Signed-off-by: $(git config user.name) <$(git config user.email)>" \ --in-place "$1" ''; in { commit-msg = "${commit-msg-hook}/bin/git-commit-msg"; }; }; sops.secrets."git".path = "${hmConfig.xdg.configHome}/git/credentials"; }; }