diff --git a/lib/languages.nix b/lib/languages.nix
index a202ff14..19171cc8 100644
--- a/lib/languages.nix
+++ b/lib/languages.nix
@@ -1,9 +1,10 @@
-# From home-manager: https://github.com/nix-community/home-manager/blob/master/modules/lib/booleans.nix
 {lib}: let
   inherit (builtins) isString getAttr;
   inherit (lib.options) mkOption;
-  inherit (lib.types) bool;
+  inherit (lib.types) listOf bool str submodule attrsOf anything;
+  inherit (lib.generators) mkLuaInline;
   inherit (lib.nvim.attrsets) mapListToAttrs;
+  inherit (lib.nvim.types) luaInline;
 in {
   diagnosticsToLua = {
     lang,
@@ -32,4 +33,31 @@ in {
       type = bool;
       description = "Turn on ${desc} for enabled languages by default";
     };
+
+  lspOptions = submodule {
+    freeformType = attrsOf anything;
+    options = {
+      capabilities = mkOption {
+        type = luaInline;
+        default = mkLuaInline "capabilities";
+        description = "LSP capabilitiess to pass to lspconfig";
+      };
+
+      on_attach = mkOption {
+        type = luaInline;
+        default = mkLuaInline "default_on_attach";
+        description = "Function to execute when an LSP server attaches to a buffer";
+      };
+
+      filetypes = mkOption {
+        type = listOf str;
+        description = "Filetypes to auto-attach LSP in";
+      };
+
+      cmd = mkOption {
+        type = listOf str;
+        description = "Command used to start the LSP server";
+      };
+    };
+  };
 }