nix/lib/nixvim.nix

271 lines
6 KiB
Nix

{pkgs, ...}: {
globals = {
mapleader = " ";
};
opts = {
number = true;
relativenumber = true;
tabstop = 4;
shiftwidth = 2;
expandtab = true;
smartindent = true;
scrolloff = 4;
undofile = true;
undodir.__raw = ''vim.fn.expand("$HOME/.local/share/nvim/undo")'';
list = true;
listchars = builtins.concatStringsSep "," [
"tab: >"
"leadmultispace: |"
"trail:."
"extends:>"
"precedes:<"
];
};
extraPlugins = [(pkgs.vimPlugins.actions-preview-nvim)];
extraConfigLua = ''
require("actions-preview").setup {
highlight_command = {
require("actions-preview.highlight").delta("${pkgs.delta}/bin/delta --no-gitconfig --side-by-side"),
},
telescope = {
sorting_strategy = "ascending",
layout_strategy = "vertical",
layout_config = {
width = 0.8,
height = 0.9,
prompt_position = "top",
preview_cutoff = 20,
preview_height = function(_, _, max_lines)
return max_lines - 10
end,
},
},
}
vim.keymap.set({ "v", "n" }, "<C-.>", require("actions-preview").code_actions)
vim.keymap.set({ "n" }, "<leader>ca", require("actions-preview").code_actions)
'';
keymaps = [
{
key = "<C-c>";
action = ''"+y'';
options.desc = "copy to clipboard";
}
{
key = "<leader>ca";
action = ''
require("actions-preview").code_actions
'';
}
{
key = "<C-Tab>";
action = "<CMD>tabnext<CR>";
}
{
key = "<C-S-Tab>";
action = "<CMD>tabprev<CR>";
}
{
key = "gl";
action = "g$";
}
{
key = "gh";
action = "g0";
}
{
mode = "v";
key = ">";
action = ">gv";
options.desc = "indent";
options.silent = true;
}
{
mode = "v";
key = "<";
action = "<gv";
options.desc = "deindent";
options.silent = true;
}
{
key = "<leader>q";
action = "<CMD>bd<CR>";
options.desc = "close buffer";
}
{
key = "<leader>g";
action = "";
options.desc = "Gitsigns";
}
{
key = "<leader>gs";
action = "<CMD>Gitsigns stage_hunk<CR>";
options.desc = "git stage hunk";
}
{
key = "<leader>gn";
action = "<CMD>Gitsigns next_hunk<CR>zz";
options.desc = "next git hunk";
}
{
key = "<leader>gd";
action = "<CMD>Gitsigns preview_hunk_inline<CR>";
options.desc = "git diff hunk";
}
{
key = "<leader>gD";
action = "<CMD>Gitsigns diffthis<CR>";
options.desc = "git diff buffer";
}
{
key = "<leader>gr";
action = "<CMD>Gitsigns reset_hunk<CR>";
options.desc = "git restore hunk";
}
{
key = "<leader>gb";
action = "<CMD>Gitsigns blame<CR>";
options.desc = "show git blame";
}
{
key = "<leader>gg";
action = "<CMD>LazyGit<CR>";
options.desc = "open lazygit";
}
{
key = "<leader>-";
action = "<CMD>Oil<CR>";
options.desc = "open dir in Oil";
}
{
key = "<leader>f";
action = "";
options.desc = "Telescope";
}
{
key = "<leader>c";
action = "";
options.desc = "LSP";
}
{
key = "<leader>h";
action = "";
options.desc = "Harpoon";
}
];
plugins = {
bufferline.enable = true;
web-devicons.enable = true;
vim-surround.enable = true;
comment.enable = true;
markdown-preview.enable = true;
telescope = {
enable = true;
settings = {
defaults = {
file_ignore_patterns = [".*lock.*"];
};
};
keymaps = {
"<leader>fg" = "live_grep";
"<leader>/" = "live_grep";
"<leader>ff" = "find_files";
"<leader>fb" = "buffers";
"<leader>fh" = "help_tags";
"<leader>:" = "commands";
"<leader>ft" = "treesitter";
"<leader>fr" = "lsp_references";
"<leader>cr" = "lsp_definition";
};
};
lsp = {
enable = true;
servers = {
ts-ls.enable = true;
nil-ls.enable = true;
};
keymaps = {
lspBuf = {
"<leader>ck" = "hover";
"K" = "hover";
"<leader>cr" = "rename";
"<F2>" = "rename";
};
};
};
cmp = {
enable = true;
settings = {
mapping = {
"<C-Space>" = "cmp.mapping.complete()";
"<C-u>" = "cmp.mapping.scroll_docs(4)";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-e>" = "cmp.mapping.close()";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<C-p>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<C-n>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
};
sources = [
{ name = "nvim_lsp"; }
{ name = "path"; }
{ name = "buffer"; }
];
};
};
cmp-nvim-lsp.enable = true;
cmp-nvim-lsp-signature-help.enable = true;
cmp-path.enable = true;
cmp-buffer.enable = true;
trouble.enable = true;
gitsigns.enable = true;
git-worktree = {
enable = true;
enableTelescope = true;
};
lazygit.enable = true;
which-key.enable = true;
harpoon = {
enable = true;
keymaps = {
addFile = "<leader>ha";
toggleQuickMenu = "<leader>hf";
navNext = "<leader>n";
};
};
vim-css-color.enable = true;
treesitter = {
enable = true;
folding = true;
};
treesitter-textobjects = {
enable = true;
select = {
enable = true;
lookahead = true;
keymaps = {
"af" = { query = "@function.outer"; desc = "Function Outer"; };
"ac" = { query = "@comment.outer"; desc = "Comment Outer"; };
"if" = { query = "@function.inner"; desc = "Function Inner"; };
};
};
};
oil.enable = true;
autoclose.enable = true;
ts-autotag.enable = true;
guess-indent.enable = true;
};
}