{ user ? throw "user argument is required", home ? throw "home argument is required", }: { config, lib, pkgs, ... }: let userConfig = config.users.users.${user}; in { home-manager.users.${user} = { programs.git = { enable = true; lfs.enable = true; userName = userConfig.fullName; userEmail = userConfig.email; signing = { signByDefault = true; key = null; }; extraConfig = { credential.helper = "store"; push.autoSetupRemote = true; core.fsmonitor = true; feature.manyFiles = true; fetch.writeCommitGraph = true; http.cookiefile = "${home}/.config/git/cookies"; }; hooks = { commit-msg = lib.meta.getExe ( pkgs.writeShellApplication { name = "git-commit-msg-hook"; runtimeInputs = with pkgs; [ git ]; text = builtins.readFile ./commit-msg.sh; } ); }; }; sops.secrets = { "git/credentials".path = "${home}/.config/git/credentials"; "git/cookies".path = "${home}/.config/git/cookies"; }; }; }