Turn kak-lsp configuration into module
This commit is contained in:
parent
a6bf01e8ee
commit
e1f37a8e30
|
@ -1,36 +1,282 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
rev = "3586feab17000f6ef526b2f9f6a11e008512b3e8";
|
||||
version = "r${builtins.substring 0 6 rev}";
|
||||
rev = "3586feab17000f6ef526b2f9f6a11e008512b3e8";
|
||||
version = "r${builtins.substring 0 6 rev}";
|
||||
|
||||
kak-lsp = pkgs.kak-lsp.overrideAttrs (drv: rec {
|
||||
inherit rev version;
|
||||
buildInputs = drv.buildInputs ++
|
||||
(with pkgs; lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.SystemConfiguration);
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "kak-lsp";
|
||||
repo = "kak-lsp";
|
||||
rev = rev;
|
||||
sha256 = "sha256-eSqqmlyD103AitHHbgdUAc1SzDpba7jRAokt1Kr1xhM=";
|
||||
};
|
||||
kak-lsp = pkgs.kak-lsp.overrideAttrs (drv: rec {
|
||||
inherit rev version;
|
||||
buildInputs = drv.buildInputs ++
|
||||
(with pkgs; lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.SystemConfiguration);
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "kak-lsp";
|
||||
repo = "kak-lsp";
|
||||
rev = rev;
|
||||
sha256 = "sha256-eSqqmlyD103AitHHbgdUAc1SzDpba7jRAokt1Kr1xhM=";
|
||||
};
|
||||
|
||||
cargoDeps = drv.cargoDeps.overrideAttrs (lib.const {
|
||||
inherit src;
|
||||
outputHash = (
|
||||
if pkgs.stdenv.isDarwin
|
||||
then "sha256-U5hiEak47Dd/R7II6d+0/n3ZmT1ryDk4S+/lV2cH6HM="
|
||||
else "0ywb9489jrb5lsycxlxzrj2khkcjhvzxbb0ckbpwwvg11r4ds240"
|
||||
);
|
||||
});
|
||||
cargoDeps = drv.cargoDeps.overrideAttrs (lib.const {
|
||||
inherit src;
|
||||
outputHash = (
|
||||
if pkgs.stdenv.isDarwin
|
||||
then "sha256-U5hiEak47Dd/R7II6d+0/n3ZmT1ryDk4S+/lV2cH6HM="
|
||||
else "0ywb9489jrb5lsycxlxzrj2khkcjhvzxbb0ckbpwwvg11r4ds240"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
lspConfig =
|
||||
{
|
||||
language = {
|
||||
bash = {
|
||||
args = [ "start" ];
|
||||
command = "bash-language-server";
|
||||
filetypes = [ "sh" ];
|
||||
roots = [ ".git" ".hg" ];
|
||||
};
|
||||
c_cpp = {
|
||||
args = [ "-v=2" "-log-file=/tmp/ccls.log" ];
|
||||
command = "ccls";
|
||||
filetypes = [ "c" "cpp" ];
|
||||
roots = [ "compile_commands.json" ".cquery" ".git" ];
|
||||
};
|
||||
crystal = {
|
||||
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";
|
||||
filetypes = [ "go" ];
|
||||
offset_encoding = "utf-8";
|
||||
roots = [ "Gopkg.toml" "go.mod" ".git" ".hg" ];
|
||||
settings = { gopls = { hoverKind = "SynopsisDocumentation"; semanticTokens = true; }; };
|
||||
settings_section = "gopls";
|
||||
};
|
||||
haskell = {
|
||||
args = [ "--lsp" ];
|
||||
command = "haskell-language-server-wrapper";
|
||||
filetypes = [ "haskell" ];
|
||||
roots = [ "Setup.hs" "stack.yaml" "*.cabal" ];
|
||||
};
|
||||
html = {
|
||||
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";
|
||||
filetypes = [ "latex" ];
|
||||
roots = [ ".git" ];
|
||||
settings_section = "texlab";
|
||||
settings.texlab.build = {
|
||||
args = [ "%f" "--synctex" "--keep-logs" "--keep-intermediates" "-Zsearch-path=${config.home.homeDirectory}/texmf" "-Zshell-escape" ];
|
||||
executable = "tectonic";
|
||||
};
|
||||
};
|
||||
nim = {
|
||||
command = "nimlsp";
|
||||
filetypes = [ "nim" ];
|
||||
roots = [ "*.nimble" ".git" ];
|
||||
};
|
||||
nix = {
|
||||
command = "rnix-lsp";
|
||||
filetypes = [ "nix" ];
|
||||
roots = [ "flake.nix" "shell.nix" ".git" ];
|
||||
};
|
||||
ocaml = {
|
||||
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";
|
||||
filetypes = [ "python" ];
|
||||
offset_encoding = "utf-8";
|
||||
roots = [ "requirements.txt" "setup.py" ".git" ".hg" ];
|
||||
};
|
||||
racket = {
|
||||
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 = [ ];
|
||||
command = "rust-analyzer";
|
||||
filetypes = [ "rust" ];
|
||||
roots = [ "Cargo.toml" ];
|
||||
};
|
||||
};
|
||||
semantic_scopes = {
|
||||
entity_name_function = "function";
|
||||
entity_name_namespace = "module";
|
||||
entity_name_type = "type";
|
||||
variable = "variable";
|
||||
variable_other_enummember = "variable";
|
||||
};
|
||||
server = { timeout = 1800; };
|
||||
snippet_support = false;
|
||||
verbosity = 255;
|
||||
};
|
||||
|
||||
languageOption = types.submodule {
|
||||
options = {
|
||||
filetypes = mkOption {
|
||||
type = types.listOf types.str;
|
||||
description = "The list of filetypes to assign the language to";
|
||||
};
|
||||
roots = mkOption {
|
||||
type = types.listOf types.str;
|
||||
description = "The list of root filenames that are used to determine the project root";
|
||||
};
|
||||
command = mkOption {
|
||||
type = types.str;
|
||||
description = "The LSP server command to be called.";
|
||||
};
|
||||
args = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
description = "The arguments passed onto the LSP server.";
|
||||
};
|
||||
offset_encoding = mkOption {
|
||||
type = types.nullOr (types.enum [ "utf-8" ]);
|
||||
default = null;
|
||||
description = "The offset encoding used by the LSP server.";
|
||||
};
|
||||
settings_section = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "The settings section to be sent to LSP server.";
|
||||
};
|
||||
settings = mkOption {
|
||||
type = types.nullOr (types.attrsOf types.anything);
|
||||
default = null;
|
||||
description = "Additional settings to be passed to the LSP server.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
cfg = config.programs.kak-lsp;
|
||||
in
|
||||
{
|
||||
options.programs.kak-lsp = {
|
||||
enable = mkEnableOption "Enable kak-lsp support";
|
||||
|
||||
package = mkOption {
|
||||
type = types.derivation;
|
||||
default = kak-lsp;
|
||||
};
|
||||
|
||||
enableSnippets = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enable snippet support";
|
||||
};
|
||||
|
||||
semanticScopes = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = lspConfig.semantic_scopes;
|
||||
description = "The semantic scopes mapping given to kak";
|
||||
};
|
||||
|
||||
serverTimeout = mkOption {
|
||||
type = types.int;
|
||||
default = 1000;
|
||||
description = "Server timeout";
|
||||
};
|
||||
|
||||
languages = mkOption {
|
||||
type = types.attrsOf languageOption;
|
||||
default = lspConfig.language;
|
||||
description = "The language options";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [ kak-lsp ];
|
||||
|
||||
# Configurations
|
||||
home.file."kakoune/kak-lsp.toml" = {
|
||||
source = ./. + "/kak-lsp.toml";
|
||||
target = ".config/kak-lsp/kak-lsp.toml";
|
||||
xdg.configFile."kak-lsp/kak-lsp.toml" = {
|
||||
source = pkgs.runCommand "config.toml"
|
||||
{
|
||||
buildInputs = [ pkgs.yj ];
|
||||
preferLocalBuild = true;
|
||||
} ''
|
||||
yj -jt -i \
|
||||
< ${
|
||||
pkgs.writeText "config.json" (builtins.toJSON {
|
||||
semantic_scopes = cfg.semanticScopes;
|
||||
server.timeout = cfg.serverTimeout;
|
||||
snippet_support = cfg.enableSnippets;
|
||||
verbosity = 255;
|
||||
language = cfg.languages;
|
||||
})
|
||||
} \
|
||||
> $out
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,165 +0,0 @@
|
|||
snippet_support = false
|
||||
verbosity = 255
|
||||
|
||||
[semantic_scopes]
|
||||
# Map textmate scopes to kakoune faces for semantic highlighting
|
||||
# the underscores are translated to dots, and indicate nesting.
|
||||
# That is, if variable_other_field is omitted, it will try the face for
|
||||
# variable_other and then variable
|
||||
#
|
||||
# To see a list of available scopes in the debug buffer, run lsp-semantic-available-scopes
|
||||
variable="variable"
|
||||
entity_name_function="function"
|
||||
entity_name_type="type"
|
||||
variable_other_enummember="variable"
|
||||
entity_name_namespace="module"
|
||||
|
||||
[server]
|
||||
# exit session if no requests were received during given period in seconds
|
||||
# works only in unix sockets mode (-s/--session)
|
||||
# set to 0 to disable
|
||||
timeout = 1800 # seconds = 30 minutes
|
||||
|
||||
[language.rust]
|
||||
filetypes = ["rust"]
|
||||
roots = ["Cargo.toml"]
|
||||
command = "rust-analyzer"
|
||||
args = []
|
||||
|
||||
[language.crystal]
|
||||
filetypes = ["crystal"]
|
||||
roots = ["shard.yml"]
|
||||
command = "scry"
|
||||
|
||||
[language.javascript]
|
||||
filetypes = ["javascript"]
|
||||
roots = [".flowconfig"]
|
||||
command = "flow"
|
||||
args = ["lsp"]
|
||||
|
||||
[language.json]
|
||||
filetypes = ["json"]
|
||||
roots = ["package.json"]
|
||||
command = "json-languageserver"
|
||||
args = ["--stdio"]
|
||||
|
||||
[language.css]
|
||||
filetypes = ["css"]
|
||||
roots = ["package.json"]
|
||||
command = "css-languageserver"
|
||||
args = ["--stdio"]
|
||||
|
||||
[language.html]
|
||||
filetypes = ["html"]
|
||||
roots = ["package.json"]
|
||||
command = "html-languageserver"
|
||||
args = ["--stdio"]
|
||||
|
||||
[language.ocaml]
|
||||
filetypes = ["ocaml"]
|
||||
roots = ["Makefile", "opam", "*.opam", "dune", ".merlin", ".ocamlformat"]
|
||||
command = "ocamllsp"
|
||||
args = []
|
||||
|
||||
[language.reason]
|
||||
filetypes = ["reason"]
|
||||
roots = ["package.json", "Makefile", ".git", ".hg"]
|
||||
command = "ocaml-language-server"
|
||||
args = ["--stdio"]
|
||||
|
||||
[language.ruby]
|
||||
filetypes = ["ruby"]
|
||||
roots = ["Gemfile"]
|
||||
command = "solargraph"
|
||||
args = ["stdio"]
|
||||
|
||||
[language.python]
|
||||
filetypes = ["python"]
|
||||
roots = ["requirements.txt", "setup.py", ".git", ".hg"]
|
||||
command = "pyls"
|
||||
offset_encoding = "utf-8"
|
||||
|
||||
[language.c_cpp]
|
||||
filetypes = ["c", "cpp"]
|
||||
roots = ["compile_commands.json", ".cquery", ".git"]
|
||||
command = "ccls"
|
||||
args = ["-v=2", "-log-file=/tmp/ccls.log"]
|
||||
|
||||
[language.haskell]
|
||||
filetypes = ["haskell"]
|
||||
roots = ["Setup.hs", "stack.yaml", "*.cabal"]
|
||||
command = "haskell-language-server-wrapper"
|
||||
args = ["--lsp"]
|
||||
|
||||
[language.go]
|
||||
filetypes = ["go"]
|
||||
roots = ["Gopkg.toml", "go.mod", ".git", ".hg"]
|
||||
command = "gopls"
|
||||
offset_encoding = "utf-8"
|
||||
settings_section = "gopls"
|
||||
|
||||
[language.go.settings.gopls]
|
||||
semanticTokens = true
|
||||
hoverKind = "SynopsisDocumentation"
|
||||
|
||||
[language.bash]
|
||||
filetypes = ["sh"]
|
||||
roots = [".git", ".hg"]
|
||||
command = "bash-language-server"
|
||||
args = ["start"]
|
||||
|
||||
[language.dart]
|
||||
filetypes = ["dart"]
|
||||
roots = ["pubspec.yaml", ".git"]
|
||||
command = "dart_language_server"
|
||||
|
||||
[language.d]
|
||||
filetypes = ["d", "di"]
|
||||
roots = [".git", "dub.sdl", "dub.json"]
|
||||
command = "dls"
|
||||
|
||||
[language.php]
|
||||
filetypes = ["php"]
|
||||
roots = [".htaccess", "composer.json"]
|
||||
command = "intelephense"
|
||||
args = ["--stdio"]
|
||||
|
||||
[language.nim]
|
||||
filetypes = ["nim"]
|
||||
roots = ["*.nimble", ".git"]
|
||||
command = "nimlsp"
|
||||
|
||||
[language.elm]
|
||||
filetypes = ["elm"]
|
||||
roots = ["elm.json"]
|
||||
command = "elm-language-server"
|
||||
args = ["--stdio"]
|
||||
|
||||
# [language.elm.initialization_options]
|
||||
# runtime = "node"
|
||||
# elmPath = "elm"
|
||||
# elmFormatPath = "elm-format"
|
||||
# elmTestPath = "elm-test"
|
||||
|
||||
[language.latex]
|
||||
filetypes = ["latex"]
|
||||
roots = [".git"]
|
||||
command = "texlab"
|
||||
|
||||
[language.racket]
|
||||
filetypes = ["racket"]
|
||||
roots = [".git"]
|
||||
command = "racket"
|
||||
args = ["-l", "racket-langserver"]
|
||||
|
||||
[language.fsharp]
|
||||
filetypes = ["fsharp"]
|
||||
roots = [".git", "*.fsx"]
|
||||
command = "FSharpLanguageServer"
|
||||
# command = "dotnet"
|
||||
# args = ["/home/natsukagami/Projects/FsAutoComplete/bin/release_netcore/fsautocomplete.dll", "--background-service-enabled"]
|
||||
|
||||
[language.nix]
|
||||
filetypes = ["nix"]
|
||||
roots = ["flake.nix", "shell.nix", ".git"]
|
||||
command = "rnix-lsp"
|
|
@ -40,6 +40,9 @@ in
|
|||
# Enable the kakoune package.
|
||||
home.packages = [ kakounePkg ];
|
||||
|
||||
# Enable kak-lsp
|
||||
programs.kak-lsp.enable = true;
|
||||
|
||||
# Source the kakrc we have here.
|
||||
home.file = builtins.listToAttrs (map kakouneFile [
|
||||
"kakrc"
|
||||
|
|
Loading…
Reference in a new issue