diff --git a/nixos/modules/programs/git.nix b/nixos/modules/programs/git.nix index e4f6ce937f04..574cde7e2553 100644 --- a/nixos/modules/programs/git.nix +++ b/nixos/modules/programs/git.nix @@ -60,6 +60,8 @@ in enable = lib.mkEnableOption "git-lfs (Large File Storage)"; package = lib.mkPackageOption pkgs "git-lfs" { }; + + enablePureSSHTransfer = lib.mkEnableOption "Enable pure SSH transfer in server side by adding git-lfs-transfer to environment.systemPackages"; }; }; }; @@ -72,7 +74,10 @@ in }; }) (lib.mkIf (cfg.enable && cfg.lfs.enable) { - environment.systemPackages = [ cfg.lfs.package ]; + environment.systemPackages = lib.mkMerge [ + [ cfg.lfs.package ] + (lib.mkIf cfg.lfs.enablePureSSHTransfer [ pkgs.git-lfs-transfer ]) + ]; programs.git.config = { filter.lfs = { clean = "git-lfs clean -- %f"; diff --git a/pkgs/by-name/gi/git-lfs-transfer/package.nix b/pkgs/by-name/gi/git-lfs-transfer/package.nix new file mode 100644 index 000000000000..576a2b81f459 --- /dev/null +++ b/pkgs/by-name/gi/git-lfs-transfer/package.nix @@ -0,0 +1,26 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: +buildGoModule { + pname = "git-lfs-transfer"; + version = "0.1.0-unstable-2024-10-07"; + + src = fetchFromGitHub { + owner = "charmbracelet"; + repo = "git-lfs-transfer"; + rev = "422d24414fe4b803849b3f6fe7c4d8ab1b40803b"; + hash = "sha256-YsplPW3i4W1RfkWQI1eGXFXb3JofQwKe+9LbjxeL1cM="; + }; + + vendorHash = "sha256-1cGlhLdnU6yTqzcB3J1cq3gawncbtdgkb3LFh2ZmXbM="; + + meta = { + description = "Server-side implementation of the Git LFS pure-SSH protocol"; + mainProgram = "git-lfs-transfer"; + homepage = "https://github.com/charmbracelet/git-lfs-transfer"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ chn ]; + }; +}