# # Neovim # { pkgs, ... }: { programs = { neovim = { enable = true; viAlias = true; vimAlias = true; vimdiffAlias = true; #withNodeJS = true; plugins = with pkgs.vimPlugins; [ # Syntax #vim-nix #vim-markdown # Quality of life vim-lastplace # Opens document where you left it auto-pairs # Print double quotes/brackets/etc. vim-gitgutter # See uncommitted changes of file :GitGutterEnable # File Tree nerdtree # File Manager - set in extraConfig to F6 # Customization wombat256-vim # Color scheme for lightline srcery-vim # Color scheme for text lightline-vim # Info bar at bottom indent-blankline-nvim # Indentation lines # Syntax nvim-treesitter.withAllGrammars # finder telescope-nvim # completion nvim-cmp # status line lualine-nvim # indent indent-blankline-nvim ]; extraPackages = with pkgs; [ ripgrep fd ]; extraConfig = '' set expandtab set shiftwidth=4 set tabstop=4 ''; extraLuaConfig = '' vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- Set highlight on search vim.o.hlsearch = false -- Make line numbers default vim.wo.number = true -- Enable mouse mode vim.o.mouse = 'a' -- Sync clipboard between OS and Neovim. -- Remove this option if you want your OS clipboard to remain independent. -- See `:help 'clipboard'` vim.o.clipboard = 'unnamedplus' -- Enable break indent vim.o.breakindent = true -- Save undo history vim.o.undofile = true -- Case insensitive searching UNLESS /C or capital in search vim.o.ignorecase = true vim.o.smartcase = true -- Keep signcolumn on by default vim.wo.signcolumn = 'yes' -- Decrease update time vim.o.updatetime = 250 vim.o.timeout = true vim.o.timeoutlen = 300 -- Set completeopt to have a better completion experience vim.o.completeopt = 'menuone,noselect' -- NOTE: You should make sure your terminal supports this vim.o.termguicolors = true -- [[ Highlight on yank ]] -- See `:help vim.highlight.on_yank()` local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) vim.api.nvim_create_autocmd('TextYankPost', { callback = function() vim.highlight.on_yank() end, group = highlight_group, pattern = '*', }) -- [[ Configure Telescope ]] -- See `:help telescope` and `:help telescope.setup()` require('telescope').setup { defaults = { mappings = { i = { [''] = false, [''] = false, }, }, }, } -- Enable telescope fzf native, if installed pcall(require('telescope').load_extension, 'fzf') -- See `:help telescope.builtin` vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) vim.keymap.set('n', '/', function() -- You can pass additional configuration to telescope to change theme, layout, etc. require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { winblend = 10, previewer = false, }) end, { desc = '[/] Fuzzily search in current buffer' }) vim.keymap.set('n', 'gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) require("indent_blankline").setup { -- for example, context is off by default, use this to turn it on show_current_context = true, show_current_context_start = true, } ''; }; }; }