nixos-config/modules/home/programs/terminal/neovim/default.nix

120 lines
2.8 KiB
Nix

{ config, pkgs, ... }:
{
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
plugins = with pkgs.vimPlugins; [
# Vim theme
vim-airline
vim-airline-themes
# Internal clipboard
cmp-vsnip
vim-vsnip
# Autocomplete manager
lspkind-nvim
# Autocomplete plugins
cmp-buffer
cmp-cmdline
cmp-nvim-lsp
cmp-path
nvim-cmp
# Hex color visualizer and color theme
nvim-colorizer-lua
vim-monokai-pro
# Discord RPC
vimsence
# Misc languages
kdl-vim
vim-markdown
vim-nix
];
extraConfig = ''
lua <<EOF
-- Set up nvim-cmp
local cmp = require'cmp'
cmp.setup({
snippet = {
-- Specify a snippet engine
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources(
{
{ name = 'nvim_lsp' },
{ name = 'vsnip' }
},
{
{ name = 'buffer' }
}
)
})
-- Use buffer source for '/' and '?'
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' }
}
})
-- Use cmdline & path source for ':'
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources(
{
{ name = 'path' }
},
{
{ name = 'cmdline' }
}
)
})
EOF
colorscheme monokai_pro
let g:airline_theme='onedark'
let g:airline#extensions#tabline#enabled = 1
hi Normal guibg=none
hi Visual guibg=#${config.look.colors.mid}
hi Pmenu guibg=#${config.look.colors.mid}
hi EndOfBuffer guibg=none
hi LineNr guibg=none
lua require'colorizer'.setup()
set nu rnu
set termguicolors
set mouse=a
set undofile
set undodir=$HOME/.local/share/nvim/undo
set undolevels=100
set undoreload=10000
nmap <C-x> :bnext<CR>
nmap <C-z> :bprev<CR>
nmap <C-w> :bd<CR>
'';
};
home = {
sessionVariables.MANPAGER = "nvim +Man!";
persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/nvim/undo" ];
};
}