{ config, pkgs, ... }: { programs.neovim = { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; vimdiffAlias = true; extraConfig = builtins.readFile ./init.vim; extraLuaConfig = '' vim.g.mapleader = " " vim.keymap.set("n", "n", vim.cmd.Ex) vim.keymap.set("v", "J", ":m '>+1gv=gv") vim.keymap.set("v", "K", ":m '<-2gv=gv") vim.keymap.set("n", "J", "mzJ`z") vim.keymap.set("n", "", "zz") vim.keymap.set("n", "", "zz") vim.keymap.set("n", "n", "nzzzv") vim.keymap.set("n", "N", "Nzzzv") -- greatest remap ever vim.keymap.set("x", "p", [["_dP]]) -- next greatest remap ever : asbjornHaland vim.keymap.set({"n", "v"}, "y", [["+y]]) vim.keymap.set("n", "Y", [["+Y]]) vim.keymap.set({"n", "v"}, "d", [["_d]]) vim.keymap.set("n", "f", vim.lsp.buf.format) vim.keymap.set("n", "", "cnextzz") vim.keymap.set("n", "", "cprevzz") vim.keymap.set("n", "k", "lnextzz") vim.keymap.set("n", "j", "lprevzz") vim.keymap.set("n", "s", [[:%s/\<\>//gI]]) vim.keymap.set("n", "x", "!chmod +x %", { silent = true }) vim.keymap.set("n", "", ":FZF") vim.keymap.set("n", "q", ":wq") vim.keymap.set("n", "w", ":w") vim.keymap.set("n", "", "h") vim.keymap.set("n", "", "j") vim.keymap.set("n", "", "k") vim.keymap.set("n", "", "l") vim.keymap.set("n", "S", ":%s//gI") -- bujo vim.keymap.set("n", "", "BujoAddnormal") vim.keymap.set("i", "", "BujoAddinsert") vim.keymap.set("n", "", "BujoChecknormal") vim.keymap.set("i", "", "BujoCheckinsert") ''; plugins = with pkgs.vimPlugins; [ # lsp nvim-lspconfig nvim-cmp (nvim-treesitter.withPlugins (_: pkgs.tree-sitter.allGrammars)) # autocompletion cmp-nvim-lsp cmp-buffer cmp-path cmp-cmdline # tpope vim-surround vim-fugitive # syntax vim-nix vimtex # others vim-gitgutter tabular vimwiki fzf-vim ]; }; }