{ fetchFromGitHub, rustPlatform, alejandra, basedpyright, bash-language-server, clang-tools, cmake-format, cmake-language-server, deadnix, deno, dprint, formats, gdb, kdePackages, lib, nil, ruff, shfmt, typescript-language-server, vscode-langservers-extracted, zls, ... }: let inherit (lib.meta) getExe getExe'; toml = formats.toml {}; # a newer nil version, for pipes support. new-nil = nil.overrideAttrs (_: { version = "unstable-18-07-2025"; src = fetchFromGitHub { owner = "oxalica"; repo = "nil"; rev = "524ae2d67dd84d99a10f409ed6cd8e4e7b3cae3f"; hash = "sha256-Uy2qzd+fMoBcp4NPSO7DavEC1pGMegmAqoEMvmXbIQU="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit (new-nil) src; hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8="; }; }); new-deadnix = deadnix.overrideAttrs (finalAttrs: previousAttrs: { version = "unstable-15-07-2025"; src = fetchFromGitHub { owner = "astro"; repo = "deadnix"; rev = "d75457b95d7cfa82fcd60970939f76fccfce19e5"; hash = "sha256-O/z2neAXL8JNkGosvxC+DyZnnJ8zYP9XHApxHVmlzfY="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit (new-deadnix) src; hash = "sha256-O8yhqyPflOvQXAA19k1XpbrHysgV5VNWLBX0l5Q5GkM="; }; }); helix-languages = { language = let mark = lang: { command = getExe deno; args = ["fmt" "-" "--ext" lang]; }; in [ { name = "bash"; auto-format = true; formatter = { command = getExe shfmt; args = ["-i" "2"]; }; } { name = "clojure"; injection-regex = "(clojure|clj|edn|boot|yuck)"; file-types = ["clj" "cljs" "cljc" "clje" "cljr" "cljx" "edn" "boot" "yuck"]; } { name = "cmake"; auto-format = true; language-servers = ["cmake-language-server"]; formatter = { command = getExe cmake-format; args = ["-"]; }; } { name = "javascript"; auto-format = true; language-servers = ["dprint" "typescript-language-server"]; } { name = "json"; formatter = mark "json"; } { name = "markdown"; auto-format = true; formatter = mark "md"; language-servers = ["taplo"]; } { name = "nix"; language-servers = ["nil"]; } { name = "qml"; language-servers = ["qmlls"]; } { name = "python"; auto-format = true; language-servers = [ "basedpyright" "ruff" ]; } { name = "typescript"; auto-format = true; language-servers = ["dprint" "typescript-language-server"]; } { name = "rust"; } { name = "c"; auto-format = true; language-servers = ["clangd"]; } { name = "zig"; auto-format = true; } { name = "c"; debugger = { name = "gdb"; command = getExe gdb; transport = "stdio"; templates = [ { name = "binary"; request = "launch"; completion = [ { name = "binary"; completion = "filename"; } ]; args = { program = "{0}"; runInTerminal = true; }; } ]; }; } ]; language-server = { bash-language-server = { command = getExe bash-language-server; args = ["start"]; }; rust-analyzer = { config.rust-analyzer = { checkOnSave.command = "clippy"; procMacro.enable = true; cargo = { loadOutDirsFromCheck = true; features = "all"; }; assist = { preferSelf = true; }; check = { command = "clippy"; extraArgs = ["--" "-W" "clippy::pedantic" "-W" "clippy::nursery" "-W" "clippy::perf"]; }; lens = { references = true; methodReferences = true; }; completion.autoimport.enable = true; experimental.procAttrMacros = true; interpret.tests = true; }; }; clangd = { command = "${clang-tools}/bin/clangd"; clangd.fallbackFlags = ["-std=c++2b"]; }; cmake-language-server = { command = getExe cmake-language-server; }; deno-lsp = { command = getExe deno; args = ["lsp"]; environment.NO_COLOR = "1"; config.deno = { enable = true; lint = true; unstable = true; suggest = { completeFunctionCalls = false; imports = {hosts."https://deno.land" = true;}; }; inlayHints = { enumMemberValues.enabled = true; functionLikeReturnTypes.enabled = true; parameterNames.enabled = "all"; parameterTypes.enabled = true; propertyDeclarationTypes.enabled = true; variableTypes.enabled = true; }; }; }; dprint = { command = getExe dprint; args = ["lsp"]; }; nil = { command = getExe new-nil; # alejandro config.nil = { formatting.command = ["${getExe alejandra}" "-q"]; diagnostics = { bindingEndHintMinLines = 3; }; nix.flake = { autoArchive = true; # autoEvalInputs = true; nixpkgsInputName = "nixpkgs"; }; }; }; deadnix = { command = getExe new-deadnix; }; typescript-language-server = { command = getExe typescript-language-server; args = ["--stdio"]; config = { typescript-language-server.source = { addMissingImports.ts = true; fixAll.ts = true; organizeImports.ts = true; removeUnusedImports.ts = true; sortImports.ts = true; }; }; }; ruff = { command = getExe ruff; args = ["server"]; }; qmlls = { command = getExe' kdePackages.qtdeclarative "qmlls"; args = ["-E"]; }; basedpyright.command = "${basedpyright}/bin/basedpyright-langserver"; vscode-css-language-server = { command = "${vscode-langservers-extracted}/bin/vscode-css-language-server"; args = ["--stdio"]; config = { provideFormatter = true; css.validate.enable = true; scss.validate.enable = true; }; }; zls = { command = getExe zls; config = { enable_build_on_save = true; build_on_save_args = ["check" "-fincremental" "--watch"]; enable_autofix = false; warn_style = true; highlight_global_var_declarations = true; }; }; }; }; in toml.generate "languages.toml" helix-languages