{ username ? throw "username argument is required", }: { config, lib, pkgs, ... }: let userConfig = config.users.users.${username}; hmConfig = config.home-manager.users.${username}; in { home-manager.users.${username} = { 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; }; 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".path = "${hmConfig.xdg.configHome}/git/credentials"; }; }