dotfiles/nixos/dotfiles/kakoune-lsp.hm.nix

88 lines
2.4 KiB
Nix

#
# Kakoune LSP and tree-sitter configuration.
#
{ ... }:
{
# General LSP configuration.
xdg.configFile."kak-lsp/kak-lsp.toml".source = ../../kak/kak-lsp.toml;
xdg.configFile."kak-tree-sitter/config.toml".source = ../../kak/kak-tree-sitter.toml;
xdg.configFile."kak/colors".source = ../../kak/colors;
programs.kakoune.config = {
# LSP keybinds
keyMappings = [
{
mode = "user";
key = "l";
effect = ":enter-user-mode lsp<ret>";
docstring = "LSP commands";
}
{
mode = "user";
key = "A";
effect = ":lsp-code-actions<ret>";
docstring = "bring up the code actions menu";
}
{
mode = "user";
key = "F";
effect = ":lsp-code-actions<ret><ret>";
docstring = "automatically execute first code action";
}
{
mode = "object";
key = "<a-a>";
effect = "<a-semicolon>-lsp-object<ret>";
docstring = "LSP commands";
}
{
mode = "object";
key = "f";
effect = "<a-semicolon>lsp-object";
docstring = "LSP any symbol";
}
{
mode = "object";
key = "t";
effect = "<a-semicolon>lsp-object";
docstring = "LSP any symbol";
}
{
mode = "object";
key = "d";
effect = "<a-semicolon>lsp-diagnostic-object --include-warnings<ret>";
docstring = "LSP commands";
}
{
mode = "object";
key = "D";
effect = "<a-semicolon>lsp-diagnostic-object<ret>";
docstring = "LSP commands";
}
];
hooks = [
# Allow tab to move through completions.
{
name = "InsertCompletionShow";
option = ".*";
commands = ''
try %{
# this command temporarily removes cursors preceded by whitespace;
# if there are no cursors left, it raises an error, does not
# continue to execute the mapping commands, and the error is eaten
# by the `try` command so no warning appears.
execute-keys -draft 'h<a-K>\h<ret>'
map window insert <tab> <c-n>
map window insert <s-tab> <c-p>
hook -once -always window InsertCompletionHide .* %{
unmap window insert <tab> <c-n>
unmap window insert <s-tab> <c-p>
}
}
'';
}
];
};
}