one flake containing all of my nixos configs
{
  pkgs,
  lib,
  ...
}: {
  programs.git = {
    delta.enable = lib.mkDefault true;
    extraConfig = {
      pull.rebase = true;
      init.defaultBranch = "main";
    };
    ignores = [".DS_Store"];
    # these are be defined in the nixos user definition
    # userName
    # userEmail

    aliases = with pkgs; {
      ch = let
        name = "git_alias_chbranch";
      in "!${writeShellApplication {
        inherit name;
        runtimeInputs = [git gnugrep findutils fzf];
        text = ''
          git branch --list \
            | grep --invert-match --regexp '^* ' \
            | fzf --query "''${*:-}" --exit-0 --select-1 \
            | xargs git switch
        '';
      }}/bin/${name}";

      del = let
        name = "git_alias_delete_branches";
      in "!${writeShellApplication {
        inherit name;
        runtimeInputs = [git findutils fzf];
        text = ''
          git branch --list \
            | grep --invert-match --regexp '^* ' \
            | fzf --query "''${*:-}" --multi \
            | xargs git branch -D
        '';
      }}/bin/${name}";

      ui = "!${gitui}/bin/gitui";
    };
  };
}