diff --git a/modules/home-manager/cli/git.nix b/modules/home-manager/cli/git.nix index 12c8fafe..762bb8db 100644 --- a/modules/home-manager/cli/git.nix +++ b/modules/home-manager/cli/git.nix @@ -169,6 +169,7 @@ in home = { packages = with pkgs; [ + git-exclude git-extras git-graph git-trim diff --git a/packages/default.nix b/packages/default.nix index 4535746d..8564ac07 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -14,6 +14,7 @@ in dev-commit = callPackage ./dev-commit.nix { }; displayselect = callPackage ./displayselect { }; get-tags = callPackage ./get-tags.nix { }; + git-exclude = callPackage ./git-exclude.nix { }; git-graph = callPackage ./git-graph.nix { }; mounter = callPackage ./mounter.nix { }; move-firefox-screenshots = callPackage ./move-firefox-screenshots.nix { }; diff --git a/packages/git-exclude.nix b/packages/git-exclude.nix new file mode 100644 index 00000000..45e3cbdb --- /dev/null +++ b/packages/git-exclude.nix @@ -0,0 +1,24 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "git-exclude"; + + runtimeInputs = with pkgs; [ git ]; + + text = '' + # Based on https://github.com/jfly/snow/blob/fb727b39736666f54908f4dc7c83dd6284607c5a/machines/pattern/homies/bin/git-exclude. + + root=$(git rev-parse --show-toplevel) + rel=$(realpath --relative-to "$root" .) + + # For some reason, ignore rules like "./.envrc" don't seem to work, but + # "/.envrc" does. :shrug: + if [ "$rel" = "." ]; then + rel="" + fi + + for item in "$@"; do + echo "''${rel}/$item" >> "$root/.git/info/exclude" + done + ''; +}