diff --git a/flake.nix b/flake.nix
index 322b1cc..301611e 100644
--- a/flake.nix
+++ b/flake.nix
@@ -15,87 +15,7 @@
       );
   in {
     packages = forAllSupportedSystems (pkgs: {
-      default = let
-        package = pkgs.helix;
-      in
-        pkgs.symlinkJoin {
-          name = package.pname;
-          paths = [package];
-          buildInputs = [pkgs.makeWrapper];
-          postBuild = ''
-            wrapProgram $out/bin/${package.meta.mainProgram} \
-              --suffix PATH : ${pkgs.lib.makeBinPath (builtins.attrValues {
-              # Language support
-              inherit
-                (pkgs)
-                # LSP
-                clang-tools
-                clojure-lsp
-                cmake-language-server
-                dart
-                docker-compose-language-service
-                dockerfile-language-server-nodejs
-                emmet-ls
-                gopls
-                jdt-language-server
-                kotlin-language-server
-                lua-language-server
-                marksman
-                nil
-                perlnavigator
-                pyright
-                rust-analyzer
-                taplo
-                terraform-ls
-                texlab
-                tinymist
-                vscode-langservers-extracted
-                yaml-language-server
-                zls
-                # DAP
-                omnisharp-roslyn
-                lldb
-                netcoredbg
-                delve
-                ;
-              inherit
-                (pkgs.nodePackages_latest)
-                # LSP
-                bash-language-server
-                graphql-language-service-cli
-                intelephense
-                svelte-language-server
-                typescript-language-server
-                ;
-              inherit
-                (pkgs.rubyPackages)
-                # LSP
-                solargraph
-                ;
-              inherit
-                (pkgs.python3Packages)
-                # LSP
-                python-lsp-server
-                ;
-              inherit
-                (pkgs.kdePackages)
-                # LSP
-                qtdeclarative
-                ;
-              inherit
-                (pkgs.ocamlPackages)
-                # LSP
-                ocaml-lsp
-                ;
-              # Clipboard support
-              inherit
-                (pkgs)
-                wl-clipboard
-                ;
-            })}
-          '';
-          inherit (package) meta;
-        };
+      default = pkgs.callPackage ./package.nix {};
     });
   };
 }
diff --git a/package.nix b/package.nix
new file mode 100644
index 0000000..89e9d01
--- /dev/null
+++ b/package.nix
@@ -0,0 +1,107 @@
+{
+  helix,
+  symlinkJoin,
+  pkgs,
+}: let
+  languageServers = [
+    # C & C++
+    pkgs.clang-tools
+    # Clojure
+    pkgs.clojure-lsp
+    # Dart
+    pkgs.dart
+    # Go
+    pkgs.gopls
+    # Java
+    pkgs.jdt-language-server
+    # Kotlin
+    pkgs.kotlin-language-server
+    # Lua
+    pkgs.lua-language-server
+    # Nix
+    pkgs.nil
+    # Perl
+    pkgs.perlnavigator
+    # Python
+    pkgs.python3Packages.python-lsp-server
+    pkgs.python3Packages.python-lsp-ruff
+    # Rust
+    pkgs.rust-analyzer
+    # Zig
+    pkgs.zls
+    # C#
+    pkgs.omnisharp-roslyn
+    # PHP
+    pkgs.nodePackages_latest.intelephense
+    # TypeScript
+    pkgs.nodePackages_latest.typescript-language-server
+    # Ruby
+    pkgs.rubyPackages.solargraph
+    # OCaml
+    pkgs.ocamlPackages.ocaml-lsp
+
+    # Bash
+    pkgs.nodePackages_latest.bash-language-server
+
+    # HTML & CSS tooling
+    pkgs.emmet-ls
+    # HTML & CSS & JSON & ESLint
+    pkgs.vscode-langservers-extracted
+
+    # Markdown
+    pkgs.marksman
+    # LaTeX
+    pkgs.texlab
+    # Typst
+    pkgs.tinymist
+
+    # CMake
+    pkgs.cmake-language-server
+    # Docker
+    pkgs.docker-compose-language-service
+    pkgs.dockerfile-language-server-nodejs
+    # Terraform
+    pkgs.terraform-ls
+
+    # YAML
+    pkgs.yaml-language-server
+    # TOML
+    pkgs.taplo
+
+    # QML
+    pkgs.kdePackages.qtdeclarative
+
+    # Svelte
+    pkgs.nodePackages_latest.svelte-language-server
+
+    # GraphQL
+    pkgs.nodePackages_latest.graphql-language-service-cli
+  ];
+
+  debugAdapters = [
+    # C & C++
+    pkgs.lldb
+    # C#
+    pkgs.netcoredbg
+    # Go
+    pkgs.delve
+  ];
+
+  clipboardProviders = [
+    pkgs.wl-clipboard
+  ];
+in
+  symlinkJoin {
+    name = helix.pname;
+
+    paths = [helix];
+
+    buildInputs = [pkgs.makeWrapper];
+
+    postBuild = ''
+      wrapProgram $out/bin/${helix.meta.mainProgram} \
+        --suffix PATH : ${pkgs.lib.makeBinPath (languageServers ++ debugAdapters ++ clipboardProviders)}
+    '';
+
+    inherit (helix) meta;
+  }