diff --git a/config/nvim/plugins/cmp.lua b/config/nvim/plugins/cmp.lua new file mode 100644 index 0000000..cf2b7a7 --- /dev/null +++ b/config/nvim/plugins/cmp.lua @@ -0,0 +1,46 @@ +local cmp = require('cmp') +local luasnip = require('luasnip') + +require('luasnip.loaders.from_vscode').lazy_load() +luasnip.config.setup {} + +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }, + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, +} diff --git a/config/nvim/plugins/telescope.lua b/config/nvim/plugins/telescope.lua new file mode 100644 index 0000000..cf06b27 --- /dev/null +++ b/config/nvim/plugins/telescope.lua @@ -0,0 +1,13 @@ +require('telescope').setup({ + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + -- the default case_mode is "smart_case" + } + } +}) + +require('telescope').load_extension('fzf') diff --git a/hosts/familypc/home.nix b/hosts/familypc/home.nix index 2a64740..faf8bed 100644 --- a/hosts/familypc/home.nix +++ b/hosts/familypc/home.nix @@ -168,24 +168,44 @@ in programs = { gh.enable = true; - neovim = { + neovim = + let + toLua = str: "lua << EOF\n${str}\nEOF\n"; + toLuaFile = file: "lua << EOF\n${builtins.readFile file}\nEOF\n"; + in + { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; vimdiffAlias = true; + extraPackages = with pkgs; [ + lua-language-server + ]; plugins = with pkgs.vimPlugins; [ nvim-treesitter.withAllGrammars + { + plugin = comment-nvim; + config = "require(\"Comment\").setup()"; + } { plugin = dracula-nvim; config = "colorscheme dracula"; } plenary-nvim + neodev-nvim + { + plugin = nvim-cmp; + config = toLuaFile ../../config/nvim/plugins/cmp.lua; + } + { + plugin = telescope-nvim; + config = toLuaFile ../../config/nvim/plugins/telescope.lua; + } vim-tmux-navigator ]; extraLuaConfig = '' local opt = vim.opt - opt.guifont = "JetBrainsMono\\ NFM,Noto_Color_Emoji:h14" opt.number = true opt.relativenumber = true opt.tabstop = 2