diff --git a/home/kakoune/kak.nix b/home/kakoune/kak.nix index 6ed05ed..83df080 100644 --- a/home/kakoune/kak.nix +++ b/home/kakoune/kak.nix @@ -7,10 +7,11 @@ let name = "vscode-${name}-language-server"; value = { args = [ "--stdio" ]; - command = "${pkgs.nodePackages.vscode-langservers-extracted}/bin/vscode-${name}-language-server"; + command = "vscode-${name}-language-server"; filetypes = [ name ]; roots = [ "package.json" ".git" ]; }; + package = pkgs.nodePackages.vscode-langservers-extracted; }; tailwind = { @@ -23,6 +24,7 @@ let validate = "warning"; userLanguages.templ = "html"; }; + package = pkgs.tailwindcss-language-server; }; templModule = { pkgs, lib, ... }: { @@ -33,9 +35,9 @@ let args = [ "lsp" ]; filetypes = [ "templ" ]; roots = [ "go.mod" ".git" ]; + package = pkgs.unstable.templ; }; - home.packages = [ pkgs.unstable.templ ]; }; in @@ -45,11 +47,6 @@ let programs.kak-lsp.languageServers = (builtins.listToAttrs (map langserver [ "html" "css" "json" ])) // { tailwindcss-language-server = tailwind; }; - - home.packages = with pkgs; [ - nodePackages.vscode-langservers-extracted - tailwindcss-language-server - ]; }; ltexLsp = { pkgs, lib, ... }: { @@ -58,9 +55,8 @@ let args = [ "--log-file=/tmp" ]; filetypes = [ "latex" "typst" ]; roots = [ "main.tex" "main.typ" ".git" ]; + package = pkgs.ltex-ls; }; - - home.packages = [ pkgs.ltex-ls ]; }; in @@ -72,8 +68,6 @@ in universal-ctags # tree-sitter for kak kak-tree-sitter - # LSPs - metals ]; # xdg.configFile."kak-tree-sitter/config.toml".source = ./kak-tree-sitter.toml; @@ -106,8 +100,9 @@ in programs.kak-lsp.languageServers.typescript-language-server = { args = [ "--stdio" ]; command = "typescript-language-server"; - filetypes = [ "typescript" ]; + filetypes = [ "typescript" "javascript" ]; roots = [ "package.json" ]; + package = pkgs.nodePackages.typescript-language-server; }; programs.kak-lsp.languageServers.fsautocomplete = { args = [ "--adaptive-lsp-server-enabled" "--project-graph-enabled" "--source-text-factory" "RoslynSourceText" ]; @@ -135,6 +130,7 @@ in statusBarProvider = "log-message"; compilerOptions = { overrideDefFormat = "unicode"; }; }; + package = pkgs.metals; }; programs.kak-lsp.languageServers.texlab = { command = "texlab"; diff --git a/home/kakoune/kakrc b/home/kakoune/kakrc index 44a147d..d59e3aa 100644 --- a/home/kakoune/kakrc +++ b/home/kakoune/kakrc @@ -61,12 +61,8 @@ map global normal D ": delete-current-brackets" # Tab sizes hook global InsertChar \t %{ exec -draft -itersel h@ } -set global tabstop 4 -set global indentwidth 4 -hook global WinSetOption filetype=(c|cpp|haskell|nix|yaml) %{ - set global tabstop 2 - set global indentwidth 2 -} +set global tabstop 2 +set global indentwidth 2 # Ctrl + a in insert mode = esc map global insert '' @@ -91,6 +87,7 @@ hook global InsertCompletionHide .* %{ # Enable LSP try %{ eval %sh{test -z "$WE_STARTED_KAK" && kak-lsp --kakoune -s $kak_session} + set-option global lsp_cmd "kak-lsp -s %val{session}" } hook global WinSetOption filetype=(racket|rust|python|go|javascript|typescript|c|cpp|tex|latex|fsharp|ocaml|haskell|nix|scala|typst|html|css|json|markdown|templ|elixir) %{ lsp-enable-window diff --git a/home/modules/programs/my-kakoune/kak-lsp.nix b/home/modules/programs/my-kakoune/kak-lsp.nix index 83bec33..8e04c14 100644 --- a/home/modules/programs/my-kakoune/kak-lsp.nix +++ b/home/modules/programs/my-kakoune/kak-lsp.nix @@ -143,10 +143,28 @@ let default = null; description = "Additional settings to be passed to the LSP server."; }; + package = mkOption { + type = types.nullOr types.package; + default = null; + description = "The default package of the language server. Will be appended as the ending segments of the PATH to kak-lsp"; + }; }; }; cfg = config.programs.kak-lsp; + + serverPackages = + filter (v: v != null) + (lib.mapAttrsToList (_: serv: serv.package) cfg.languageServers); + + wrappedPackage = pkgs.symlinkJoin { + name = "kak-lsp-wrapped"; + nativeBuildInputs = [ pkgs.makeWrapper ]; + paths = [ cfg.package ]; + postBuild = '' + wrapProgram $out/bin/kak-lsp --suffix PATH ":" ${lib.makeBinPath serverPackages} + ''; + }; in { options.programs.kak-lsp = { @@ -195,13 +213,13 @@ in config = mkIf cfg.enable { - home.packages = [ cfg.package ]; + home.packages = [ wrappedPackage ]; # Configurations xdg.configFile."kak-lsp/kak-lsp.toml" = let toml = pkgs.formats.toml { }; - stripNulls = lib.filterAttrsRecursive (n: v: v != null); + toLspConfig = lib.filterAttrsRecursive (n: v: n != "package" && v != null); in { source = toml.generate "config.toml" @@ -210,7 +228,7 @@ in server.timeout = cfg.serverTimeout; snippet_support = cfg.enableSnippets; verbosity = 255; - language_server = stripNulls (lspConfig.language_servers // cfg.languageServers); + language_server = toLspConfig (lspConfig.language_servers // cfg.languageServers); language_ids = lspConfig.language_ids // cfg.languageIds; }; };