nixeovim/modules/profiles/recommended.nix

132 lines
4.5 KiB
Nix

{ config, lib, ... }:
with lib.nix2lua;
let
inherit (lib.mod) Space cmd ctrl leader localLeader;
gs = config.plugin.gitsigns-nvim.varName;
hop = config.plugin.hop-nvim.varName;
in
{
imports = [
./base.nix
./recommended-plugins.nix
];
input = {
leader = lib.mkDefault ",";
localLeader = lib.mkDefault "'";
};
plugins.gitsigns.keymap.set = [
rec {
mode = "n";
lhs = "]h";
rhs = lambda0 (ifelse (var "vim.wo.diff")
(call1 "vim.cmd.normal" [ lhs (nf "bang" true) ])
(call1 "${gs}.nav_hunk" "next")
);
}
rec {
mode = "n";
lhs = "[h";
rhs = lambda0 (ifelse (var "vim.wo.diff")
(call1 "vim.cmd.normal" [ lhs (nf "bang" true) ])
(call1 "${gs}.nav_hunk" "prev")
);
}
{ mode = "n"; lhs = localLeader "gs"; rhs = raw "${gs}.stage_hunk"; }
{ mode = "n"; lhs = localLeader "gr"; rhs = raw "${gs}.reset_hunk"; }
{ mode = "n"; lhs = localLeader "gu"; rhs = raw "${gs}.undo_stage_hunk"; }
{ mode = "n"; lhs = localLeader "gp"; rhs = raw "${gs}.preview_hunk"; }
{ mode = "n"; lhs = localLeader "gb"; rhs = lambda0 (call "${gs}.blame_line" { full = true; }); }
{ mode = "n"; lhs = localLeader "gd"; rhs = raw "${gs}.diffthis"; }
{ mode = "n"; lhs = localLeader "gD"; rhs = lambda0 (call "${gs}.diffthis" "~"); }
{ mode = "n"; lhs = localLeader "gtb"; rhs = raw "${gs}.toggle_current_line_blame"; }
{ mode = "n"; lhs = localLeader "gtd"; rhs = raw "${gs}.toggle_deleted"; }
];
plugins.navigation.hop-nvim.keymap.set = { after, before }: [
{ lhs = leader "hc"; rhs = cmd "HopChar1"; }
{
lhs = leader "hf";
rhs = lambda0 (call "${hop}.hint_char1" {
direction = after;
current_line_only = true;
});
}
{
lhs = leader "hF";
rhs = lambda0 (call "${hop}.hint_char1" {
direction = before;
current_line_only = true;
});
}
{
lhs = leader "hbc";
rhs = lambda0 (call "${hop}.hint_char1" { direction = after; });
}
{
lhs = leader "htc";
rhs = lambda0 (call "${hop}.hint_char1" { direction = before; });
}
{ lhs = leader "hw"; rhs = cmd "HopWord"; }
{
lhs = leader "hbw";
rhs = lambda0 (call "${hop}.hint_words" { direction = after; });
}
{
lhs = leader "htw";
rhs = lambda0 (call "${hop}.hint_words" { direction = before; });
}
{ lhs = leader "hp"; rhs = cmd "HopPattern"; }
{
lhs = leader "hbp";
rhs = lambda0 (call "${hop}.hint_patterns" { direction = after; });
}
{
lhs = leader "htp";
rhs = lambda0 (call "${hop}.hint_patterns" { direction = before; });
}
{
lhs = leader "hbv";
rhs = lambda0 (call "${hop}.hint_vertical" { direction = after; });
}
{
lhs = leader "htv";
rhs = lambda0 (call "${hop}.hint_vertical" { direction = before; });
}
];
plugins.language-server.lspconfig.keymap.set = [
{ mode = "n"; lhs = "gD"; rhs = raw "vim.lsp.buf.declaration"; }
{ mode = "n"; lhs = "gd"; rhs = raw "vim.lsp.buf.definition"; }
{ mode = "n"; lhs = "K"; rhs = raw "vim.lsp.buf.hover"; }
{ mode = "n"; lhs = "gi"; rhs = raw "vim.lsp.buf.implementation"; }
{ mode = "n"; lhs = "gr"; rhs = raw "vim.lsp.buf.references"; }
{ mode = "n"; lhs = "gy"; rhs = raw "vim.lsp.buf.type_definition"; }
{ mode = "n"; lhs = localLeader "sh"; rhs = raw "vim.lsp.buf.signature_help"; }
{ mode = "n"; lhs = localLeader "n"; rhs = raw "vim.lsp.buf.rename"; }
{ mode = [ "n" "v" ]; lhs = localLeader "a"; rhs = raw "vim.lsp.buf.code_action"; }
];
vim.keymap.set = lib.optionals config.plugins.language-server.lspconfig.enable [
{ mode = "n"; lhs = "${Space}e"; rhs = raw "vim.diagnostic.open_float"; }
{ mode = "n"; lhs = "[d"; rhs = raw "vim.diagnostic.goto_prev"; }
{ mode = "n"; lhs = "]d"; rhs = raw "vim.diagnostic.goto_next"; }
{ mode = "n"; lhs = "${Space}q"; rhs = raw "vim.diagnostic.setloclist"; }
] ++ lib.optionals config.plugins.navigation.telescope.enable (
[
{ mode = "n"; lhs = leader "ff"; rhs = cmd "Telescope find_files"; }
{ mode = "n"; lhs = leader "fb"; rhs = cmd "Telescope buffers"; }
{ mode = "n"; lhs = leader "fh"; rhs = cmd "Telescope help_tags"; }
] ++ lib.optionals (config.plugins.navigation.telescope.extensions ? telescope-live-grep-args-nvim) [
{
mode = "n";
lhs = leader "fg";
rhs = lambda0 (call0 "telescope.extensions.live_grep_args.live_grep_args");
}
]
);
}