Revamp kak-lsp config to use language-server

This commit is contained in:
Natsu Kagami 2024-04-06 23:56:46 +02:00
parent 526ed059db
commit 91603a500d
Signed by: nki
GPG key ID: 55A032EB38B49ADB
2 changed files with 47 additions and 114 deletions

View file

@ -11,14 +11,17 @@ let
kak-lsp-frontend = { pkgs, lib, ... }: kak-lsp-frontend = { pkgs, lib, ... }:
let let
langserver = name: { langserver = name: {
name = "vscode-${name}-language-server";
value = {
args = [ "--stdio" ]; args = [ "--stdio" ];
command = "${pkgs.nodePackages.vscode-langservers-extracted}/bin/vscode-${name}-language-server"; command = "${pkgs.nodePackages.vscode-langservers-extracted}/bin/vscode-${name}-language-server";
filetypes = [ name ]; filetypes = [ name ];
roots = [ "package.json" ".git" ]; roots = [ "package.json" ".git" ];
}; };
};
in in
{ {
programs.kak-lsp.languages = lib.attrsets.genAttrs [ "html" "css" "json" ] langserver; programs.kak-lsp.languageServers = builtins.listToAttrs (map langserver [ "html" "css" "json" ]);
}; };
in in
@ -54,13 +57,13 @@ in
{ face = "ts_markup_italic"; token = "text"; modifiers = [ "emph" ]; } { face = "ts_markup_italic"; token = "text"; modifiers = [ "emph" ]; }
]; ];
programs.kak-lsp.languages.typescript = { programs.kak-lsp.languageServers.typescript-language-server = {
args = [ "--stdio" ]; args = [ "--stdio" ];
command = "typescript-language-server"; command = "typescript-language-server";
filetypes = [ "typescript" ]; filetypes = [ "typescript" ];
roots = [ "package.json" ]; roots = [ "package.json" ];
}; };
programs.kak-lsp.languages.fsharp = { programs.kak-lsp.languageServers.fsautocomplete = {
args = [ "--adaptive-lsp-server-enabled" "--project-graph-enabled" "--source-text-factory" "RoslynSourceText" ]; args = [ "--adaptive-lsp-server-enabled" "--project-graph-enabled" "--source-text-factory" "RoslynSourceText" ];
command = "fsautocomplete"; command = "fsautocomplete";
filetypes = [ "fsharp" ]; filetypes = [ "fsharp" ];
@ -70,7 +73,7 @@ in
AutomaticWorkspaceInit = true; AutomaticWorkspaceInit = true;
}; };
}; };
programs.kak-lsp.languages.scala = { programs.kak-lsp.languageServers.metals = {
command = "metals"; command = "metals";
filetypes = [ "scala" ]; filetypes = [ "scala" ];
roots = [ "build.sbt" "build.sc" ]; roots = [ "build.sbt" "build.sc" ];
@ -80,9 +83,14 @@ in
showInferredType = true; showInferredType = true;
decorationProvider = true; decorationProvider = true;
inlineDecorationProvider = true; inlineDecorationProvider = true;
# From kakoune-lsp's own options
icons = "unicode";
isHttpEnabled = true;
statusBarProvider = "log-message";
compilerOptions = { overrideDefFormat = "unicode"; };
}; };
}; };
programs.kak-lsp.languages.latex = { programs.kak-lsp.languageServers.texlab = {
command = "texlab"; command = "texlab";
filetypes = [ "latex" ]; filetypes = [ "latex" ];
roots = [ "main.tex" "all.tex" ".git" ]; roots = [ "main.tex" "all.tex" ".git" ];
@ -105,7 +113,7 @@ in
}); });
}; };
}; };
programs.kak-lsp.languages.typst = { programs.kak-lsp.languageServers.typst-lsp = {
command = "typst-lsp"; command = "typst-lsp";
filetypes = [ "typst" ]; filetypes = [ "typst" ];
roots = [ "main.typ" ".git" ]; roots = [ "main.typ" ".git" ];
@ -114,7 +122,7 @@ in
experimentalFormatterMode = "on"; experimentalFormatterMode = "on";
}; };
}; };
programs.kak-lsp.languages.markdown = { programs.kak-lsp.languageServers.marksman = {
command = "marksman"; command = "marksman";
filetypes = [ "markdown" ]; filetypes = [ "markdown" ];
roots = [ ".marksman.toml" ".git" ]; roots = [ ".marksman.toml" ".git" ];

View file

@ -4,52 +4,23 @@ with lib;
let let
lspConfig = lspConfig =
{ {
languages = { language_ids = {
bash = { c = "c_cpp";
args = [ "start" ]; cpp = "c_cpp";
command = "bash-language-server"; javascript = "javascriptreact";
filetypes = [ "sh" ]; typescript = "typescriptreact";
roots = [ ".git" ".hg" ]; protobuf = "proto";
sh = "shellscript";
}; };
c_cpp = {
language_servers = {
ccls = {
args = [ "-v=2" "-log-file=/tmp/ccls.log" ]; args = [ "-v=2" "-log-file=/tmp/ccls.log" ];
command = "ccls"; command = "ccls";
filetypes = [ "c" "cpp" ]; filetypes = [ "c" "cpp" ];
roots = [ "compile_commands.json" ".cquery" ".git" ]; roots = [ "compile_commands.json" ".cquery" ".git" ];
}; };
crystal = { gopls = {
command = "scry";
filetypes = [ "crystal" ];
roots = [ "shard.yml" ];
};
css = {
args = [ "--stdio" ];
command = "css-languageserver";
filetypes = [ "css" ];
roots = [ "package.json" ];
};
d = {
command = "dls";
filetypes = [ "d" "di" ];
roots = [ ".git" "dub.sdl" "dub.json" ];
};
dart = {
command = "dart_language_server";
filetypes = [ "dart" ];
roots = [ "pubspec.yaml" ".git" ];
};
elm = {
args = [ "--stdio" ];
command = "elm-language-server";
filetypes = [ "elm" ];
roots = [ "elm.json" ];
};
fsharp = {
command = "FSharpLanguageServer";
filetypes = [ "fsharp" ];
roots = [ ".git" "*.fsx" ];
};
go = {
command = "gopls"; command = "gopls";
filetypes = [ "go" ]; filetypes = [ "go" ];
offset_encoding = "utf-8"; offset_encoding = "utf-8";
@ -57,32 +28,14 @@ let
settings = { gopls = { hoverKind = "SynopsisDocumentation"; semanticTokens = true; }; }; settings = { gopls = { hoverKind = "SynopsisDocumentation"; semanticTokens = true; }; };
settings_section = "gopls"; settings_section = "gopls";
}; };
haskell = { haskell-language-server = {
args = [ "--lsp" ]; args = [ "--lsp" ];
command = "haskell-language-server-wrapper"; command = "haskell-language-server-wrapper";
filetypes = [ "haskell" ]; filetypes = [ "haskell" ];
roots = [ "Setup.hs" "stack.yaml" "*.cabal" "package.yaml" ]; roots = [ "Setup.hs" "stack.yaml" "*.cabal" "package.yaml" ];
settings_section = "haskell"; settings_section = "haskell";
}; };
html = { texlab = {
args = [ "--stdio" ];
command = "html-languageserver";
filetypes = [ "html" ];
roots = [ "package.json" ];
};
javascript = {
args = [ "lsp" ];
command = "flow";
filetypes = [ "javascript" ];
roots = [ ".flowconfig" ];
};
json = {
args = [ "--stdio" ];
command = "json-languageserver";
filetypes = [ "json" ];
roots = [ "package.json" ];
};
latex = {
command = "texlab"; command = "texlab";
filetypes = [ "latex" ]; filetypes = [ "latex" ];
roots = [ ".git" "main.tex" "all.tex" ]; roots = [ ".git" "main.tex" "all.tex" ];
@ -100,12 +53,7 @@ let
}; };
}; };
}; };
nim = { nil = {
command = "nimlsp";
filetypes = [ "nim" ];
roots = [ "*.nimble" ".git" ];
};
nix = {
command = "${pkgs.nil}/bin/nil"; command = "${pkgs.nil}/bin/nil";
filetypes = [ "nix" ]; filetypes = [ "nix" ];
roots = [ "flake.nix" "shell.nix" ".git" ]; roots = [ "flake.nix" "shell.nix" ".git" ];
@ -113,43 +61,13 @@ let
formatting.command = [ "${getExe pkgs.nixpkgs-fmt}" ]; formatting.command = [ "${getExe pkgs.nixpkgs-fmt}" ];
}; };
}; };
ocaml = { pyls = {
args = [ ];
command = "ocamllsp";
filetypes = [ "ocaml" ];
roots = [ "Makefile" "opam" "*.opam" "dune" ".merlin" ".ocamlformat" ];
};
php = {
args = [ "--stdio" ];
command = "intelephense";
filetypes = [ "php" ];
roots = [ ".htaccess" "composer.json" ];
};
python = {
command = "pyls"; command = "pyls";
filetypes = [ "python" ]; filetypes = [ "python" ];
offset_encoding = "utf-8"; offset_encoding = "utf-8";
roots = [ "requirements.txt" "setup.py" ".git" ".hg" ]; roots = [ "requirements.txt" "setup.py" ".git" ".hg" ];
}; };
racket = { rust-analyzer = {
args = [ "-l" "racket-langserver" ];
command = "racket";
filetypes = [ "racket" ];
roots = [ ".git" ];
};
reason = {
args = [ "--stdio" ];
command = "ocaml-language-server";
filetypes = [ "reason" ];
roots = [ "package.json" "Makefile" ".git" ".hg" ];
};
ruby = {
args = [ "stdio" ];
command = "solargraph";
filetypes = [ "ruby" ];
roots = [ "Gemfile" ];
};
rust = {
args = [ ]; args = [ ];
command = "rust-analyzer"; command = "rust-analyzer";
filetypes = [ "rust" ]; filetypes = [ "rust" ];
@ -191,7 +109,7 @@ let
verbosity = 255; verbosity = 255;
}; };
languageOption = types.submodule { languageServerOption = types.submodule {
options = { options = {
filetypes = mkOption { filetypes = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
@ -262,11 +180,17 @@ in
description = "Server timeout"; description = "Server timeout";
}; };
languages = mkOption { languageServers = mkOption {
type = types.attrsOf languageOption; type = types.attrsOf languageServerOption;
default = { }; default = { };
description = "The language options"; description = "The language options";
}; };
languageIds = mkOption {
type = types.attrsOf types.str;
default = { };
description = "Language IDs to be sent to the LSP";
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -286,7 +210,8 @@ in
server.timeout = cfg.serverTimeout; server.timeout = cfg.serverTimeout;
snippet_support = cfg.enableSnippets; snippet_support = cfg.enableSnippets;
verbosity = 255; verbosity = 255;
language = lspConfig.languages // cfg.languages; language_server = lspConfig.language_servers // cfg.languageServers;
language_ids = lspConfig.language_ids // cfg.languageIds;
}) })
} \ } \
> $out > $out