diff --git a/modules/programs/git.nix b/modules/programs/git.nix
index 001d02b2a..1abf56281 100644
--- a/modules/programs/git.nix
+++ b/modules/programs/git.nix
@@ -133,6 +133,20 @@ in
         '';
         description = "List of configuration files to include.";
       };
+
+      lfs = {
+        enable = mkEnableOption "Git Large File Storage";
+
+        skipSmudge = mkOption {
+          type = types.bool;
+          default = false;
+          description = ''
+            Skip automatic downloading of objects on clone or pull.
+            This requires a manual <command>git lfs pull</command>
+            every time a new commit is checked out on your repository.
+          '';
+        };
+      };
     };
   };
 
@@ -204,6 +218,25 @@ in
             '')
             cfg.includes);
       })
+
+      (mkIf cfg.lfs.enable {
+        home.packages = [ pkgs.git-lfs ];
+
+        programs.git.iniContent."filter \"lfs\"" =
+          let
+            skipArg = optional cfg.lfs.skipSmudge "--skip";
+          in
+            {
+              clean = "git-lfs clean -- %f";
+              process = concatStringsSep " " (
+                [ "git-lfs" "filter-process" ] ++ skipArg
+              );
+              required = true;
+              smudge = concatStringsSep " " (
+                [ "git-lfs" "smudge" ] ++ skipArg ++ [ "--" "%f" ]
+              );
+            };
+      })
     ]
   );
 }
diff --git a/tests/modules/programs/git-expected.conf b/tests/modules/programs/git-expected.conf
index 2b0f3caf4..020fa8f0b 100644
--- a/tests/modules/programs/git-expected.conf
+++ b/tests/modules/programs/git-expected.conf
@@ -10,6 +10,12 @@ boolean=true
 integer=38
 name=value
 
+[filter "lfs"]
+clean=git-lfs clean -- %f
+process=git-lfs filter-process
+required=true
+smudge=git-lfs smudge -- %f
+
 [gpg]
 program=path-to-gpg
 
diff --git a/tests/modules/programs/git.nix b/tests/modules/programs/git.nix
index f642bede2..be393d471 100644
--- a/tests/modules/programs/git.nix
+++ b/tests/modules/programs/git.nix
@@ -31,6 +31,7 @@ with lib;
         };
         userEmail = "user@example.org";
         userName = "John Doe";
+        lfs.enable = true;
       }
 
       {