diff --git a/devShells/neovim-shells/default.nix b/devShells/neovim-shells/default.nix
index 1791bcb2..53e4839c 100644
--- a/devShells/neovim-shells/default.nix
+++ b/devShells/neovim-shells/default.nix
@@ -19,11 +19,12 @@
       langs);
 in
   mkLangsShells [
+    "c-lang"
     "csharp"
     "json"
     "lua"
     "markdown"
+    "qml"
     "rust"
     "web"
-    "c-lang"
   ]
diff --git a/homeManagerModules/neovim/langs/default.nix b/homeManagerModules/neovim/langs/default.nix
index 6482a7c7..25a40dfe 100644
--- a/homeManagerModules/neovim/langs/default.nix
+++ b/homeManagerModules/neovim/langs/default.nix
@@ -20,6 +20,7 @@ in {
     ./json
     ./lua
     ./python
+    ./qml
     ./rust
 
     (import ./csharp self)
diff --git a/homeManagerModules/neovim/langs/golang/default.nix b/homeManagerModules/neovim/langs/golang/default.nix
index 0005ea1c..55d109c5 100644
--- a/homeManagerModules/neovim/langs/golang/default.nix
+++ b/homeManagerModules/neovim/langs/golang/default.nix
@@ -13,23 +13,17 @@ in {
       neovim = {
         extraPackages = with pkgs; [go gopls];
 
-        plugins = [
-          {
-            plugin = pkgs.vimPlugins.clangd_extensions-nvim;
-            type = "lua";
-            config =
-              # lua
-              ''
-                local lsp = require('lspconfig');
-                local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
+        extraLuaConfig =
+          # lua
+          ''
+            local lsp = require('lspconfig');
+            local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
 
-                lsp.gopls.setup({
-                    cmd = { '${pkgs.gopls}/bin/gopls' },
-                    capabilities = default_capabilities,
-                });
-              '';
-          }
-        ];
+            lsp.gopls.setup({
+                cmd = { '${pkgs.gopls}/bin/gopls' },
+                capabilities = default_capabilities,
+            });
+          '';
       };
     };
   };
diff --git a/homeManagerModules/neovim/langs/qml/default.nix b/homeManagerModules/neovim/langs/qml/default.nix
new file mode 100644
index 00000000..c59f3488
--- /dev/null
+++ b/homeManagerModules/neovim/langs/qml/default.nix
@@ -0,0 +1,48 @@
+{
+  config,
+  lib,
+  ...
+}: let
+  inherit (lib) mkIf;
+
+  cfg = config.programs.neovim;
+  flakeEnv = config.programs.bash.sessionVariables.FLAKE;
+in {
+  config = mkIf cfg.enable {
+    programs = {
+      neovim = {
+        extraLuaConfig =
+          # lua
+          ''
+            vim.api.nvim_create_autocmd('FileType', {
+                pattern = { 'qml' },
+
+                callback = function()
+                    vim.cmd[[setlocal ts=4 sw=4 sts=0 expandtab]];
+
+                    if (devShells['qml'] == nil) then
+                        devShells['qml'] = 1;
+
+                        require('nix-develop').nix_develop_extend({'${flakeEnv}#qml'}, function()
+                            vim.cmd[[LspStart]];
+                        end);
+                    end
+                end,
+            });
+
+            local lsp = require('lspconfig');
+            local default_capabilities = require('cmp_nvim_lsp').default_capabilities();
+
+            lsp.qmlls.setup({
+                cmd = { 'qmlls', '-E' },
+                capabilities = default_capabilities,
+                autostart = false,
+            });
+          '';
+      };
+    };
+  };
+
+  # For accurate stack trace
+  _file = ./default.nix;
+}
diff --git a/homeManagerModules/neovim/langs/qml/shell.nix b/homeManagerModules/neovim/langs/qml/shell.nix
new file mode 100644
index 00000000..45f1d489
--- /dev/null
+++ b/homeManagerModules/neovim/langs/qml/shell.nix
@@ -0,0 +1,10 @@
+{
+  mkShell,
+  kdePackages,
+  ...
+}:
+mkShell {
+  packages = [
+    kdePackages.qtdeclarative
+  ];
+}