{ flake, home-manager, lib, config, hostName, userName, pkgs, ... }: let haveGKleen = flake.nixosModules.accounts ? "gkleen@${hostName}"; homeManagerRelease = lib.importJSON (home-manager + /release.json); in { imports = with flake.nixosModules.userProfiles.${userName}; [ direnv utils ]; users.users.${userName} = lib.mkIf haveGKleen { inherit (config.users.users."gkleen") hashedPassword shell; openssh.authorizedKeys.keyFiles = config.users.users."gkleen".openssh.authorizedKeys.keyFiles; }; home-manager.users.${userName} = { config, ... }: lib.foldr lib.recursiveUpdate {} ([ { programs = { git.enable = true; ssh.enable = true; gpg.enable = true; }; services = { gpg-agent = { enable = true; enableSshSupport = true; extraConfig = '' pinentry-program ${pkgs.pinentry-curses}/bin/pinentry grab ''; }; }; } ] ++ (lib.optional (lib.versionAtLeast homeManagerRelease.release "25.11") { programs = { git.settings = { user = { email = "gkleen@yggdrasil.li"; name = "Gregor Kleen"; }; core.excludesfile = toString ./gitignore; pull.rebase = true; submodule.recurse = true; init.defaultBranch = "main"; column.ui = "auto"; branch.sort = "-committerdate"; tag.sort = "version:refname"; diff = { algorithm = "histogram"; colorMoved = "plain"; mnemonicPrefix = true; renames = true; }; push = { default = "simple"; autoSetupRemote = true; followTags = true; }; fetch = { prune = true; pruneTags = true; all = true; }; rerere = { enabled = true; autoupdate = true; }; rebase = { autoSquash = true; autoStash = true; updateRefs = true; }; merge.conflictstyle = "zdiff3"; }; delta = { enable = true; enableGitIntegration = true; }; ssh = { enableDefaultConfig = false; matchBlocks."*" = { forwardAgent = false; addKeysToAgent = "no"; compression = false; userKnownHostsFile = "~/.ssh/known_hosts"; # controlMaster = "auto"; # controlPersist = "30m"; # controlPath = "~/.ssh/master-%r@%n:%p"; serverAliveInterval = 6; serverAliveCountMax = 10; hashKnownHosts = true; identitiesOnly = true; }; }; }; })); }