{ config, lib, pkgs, ... }: with lib; let cfg = config.myOptions.programs.git; username = config.myOptions.other.system.username; in { options.myOptions.programs.git = { enable = mkEnableOption "git"; userName = mkOption { type = types.str; description = "git username"; }; userEmail = mkOption { type = types.str; description = "git email"; }; signingKey = mkOption { type = types.str; description = "git commit signing key"; }; editor = mkOption { type = types.str; default = "$EDITOR"; description = "commit message editor"; }; defaultBranch = mkOption { type = types.str; default = "master"; description = "default git branch"; }; }; config = mkIf cfg.enable { home-manager.users.${username} = { programs.git = { inherit (cfg) enable userName userEmail; extraConfig = { contents = { core = { editor = cfg.editor; pager = "${pkgs.delta}/bin/delta"; }; init.defaultBranch = cfg.defaultBranch; push.autoSetupRemote = true; commit = { verbose = true; gpgSign = true; }; gpg.format = "ssh"; user.signingKey = "key::ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHXD1EM4mQz99vJhmZX1r7kwMd8yewogOuoTUuv1xWZB"; merge.conflictstyle = "zdiff3"; interactive.diffFilter = "${pkgs.delta}/bin/delta --color-only"; diff.algorithm = "histogram"; transfer.fsckobjects = true; fetch.fsckobjects = true; receive.fsckobjects = true; }; }; }; }; }; }