{ pkgs, config, lib, ... }: let cfg = config.myHome.shell.git; in { options.myHome.shell.git = { enable = lib.mkEnableOption "git"; username = lib.mkOption { type = lib.types.str; }; email = lib.mkOption { type = lib.types.str; }; signingKey = lib.mkOption { type = lib.types.str; }; }; config = lib.mkMerge [ (lib.mkIf cfg.enable { programs = { gh.enable = true; gpg.enable = true; git = { enable = true; userName = cfg.username; userEmail = cfg.email; extraConfig = { core.autocrlf = "input"; init.defaultBranch = "main"; pull.rebase = true; rebase.autoStash = true; # public key for signing commits user.signingKey = cfg.signingKey; # ssh instead of gpg gpg.format = "ssh"; # 1password signing gui git signing gpg.ssh.program = "${pkgs._1password-gui}/bin/op-ssh-sign"; # Auto sign commits without -S commit.gpgsign = true; }; aliases = { co = "checkout"; }; ignores = [ # Mac OS X hidden files ".DS_Store" # Windows files "Thumbs.db" # asdf ".tool-versions" # Sops ".decrypted~*" "*.decrypted.*" # Python virtualenvs ".venv" ]; }; }; home.packages = [ pkgs.git-filter-repo pkgs.tig pkgs.unstable.lazygit ]; }) ]; }