From d4e5faf6c47b0e12eaef10a5ebbd3fd4639cef81 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Sat, 12 Jul 2025 17:39:44 +0100 Subject: [PATCH] Add `git-exclude` A Git commit that easily excludes files by adding them to `.git/info/exclude`. --- modules/home-manager/cli/git.nix | 1 + packages/default.nix | 1 + packages/git-exclude.nix | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 packages/git-exclude.nix 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 + ''; +}