diff --git a/flake.nix b/flake.nix index f708bc3..e85ebf2 100644 --- a/flake.nix +++ b/flake.nix @@ -39,9 +39,7 @@ { packages = { default = nixeovimPackage { }; - base = nixeovimPackage profiles.base; - recommended-plugins = nixeovimPackage profiles.recommended-plugins; - }; + } // builtins.mapAttrs (k: nixeovimPackage) profiles; } ); } diff --git a/modules/plugins/navigation/hop-nvim.nix b/modules/plugins/navigation/hop-nvim.nix index 70fad4e..10a5df6 100644 --- a/modules/plugins/navigation/hop-nvim.nix +++ b/modules/plugins/navigation/hop-nvim.nix @@ -20,7 +20,7 @@ in defaultText = literalExpression "dir: []"; example = literalExpression '' { after, before }: [ - { lhs = "hc"; rhs = "HopChar1"; } + { lhs = "hc"; rhs = "HopChar1"; } { lhs = "hf"; rhs = lambda0 (call "hop.hint_char1" { diff --git a/modules/profiles/base.nix b/modules/profiles/base.nix index 156ea66..a504dfc 100644 --- a/modules/profiles/base.nix +++ b/modules/profiles/base.nix @@ -1,5 +1,8 @@ { config, lib, ... }: +let + inherit (lib.mod) leader cmd cr ctrl; +in { vim.opt = { # Better Unix support @@ -77,19 +80,24 @@ plugins.navigation.nvim-tree.enable = lib.mkDefault true; vim.keymap.set = with lib.nix2lua; [ - { mode = "n"; lhs = ""; rhs = lambda0 (set "vim.opt.hlsearch" false); desc = "Clear search highlighting"; } + { + mode = "n"; + lhs = ctrl "z"; + rhs = lambda0 (set "vim.opt.hlsearch" false); + desc = "Clear search highlighting"; + } ] ++ lib.optionals config.plugins.navigation.nvim-tree.enable [ { mode = "n"; - lhs = "nt"; - rhs = "NvimTreeToggle"; + lhs = "${leader}nt"; + rhs = "${cmd}NvimTreeToggle${cr}"; desc = "Open/Close file tree"; } { mode = "n"; - lhs = "nf"; - rhs = "NvimTreeFindFile"; + lhs = "${leader}nf"; + rhs = "${cmd}NvimTreeFindFile${cr}"; desc = "Open file tree and find current file"; } ]; diff --git a/modules/profiles/recommended.nix b/modules/profiles/recommended.nix new file mode 100644 index 0000000..fe03348 --- /dev/null +++ b/modules/profiles/recommended.nix @@ -0,0 +1,133 @@ +{ config, lib, ... }: + +with lib.nix2lua; +let + inherit (lib.mod) leader localLeader space cr cmd ctrl; + 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${cr}"; } + { + 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${cr}"; } + { + 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${cr}"; } + { + 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 = ctrl "k"; 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${cr}"; } + { mode = "n"; lhs = "${leader}fb"; rhs = "${cmd}Telescope buffers${cr}"; } + { mode = "n"; lhs = "${leader}fh"; rhs = "${cmd}Telescope help_tags${cr}"; } + ] ++ 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"); + } + ] + ); +}