2024-04-02 20:52:48 +02:00
|
|
|
|
{ config, pkgs, ... }:
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
# neovim
|
|
|
|
|
programs.neovim = {
|
|
|
|
|
enable = true;
|
|
|
|
|
defaultEditor = true;
|
|
|
|
|
viAlias = true;
|
|
|
|
|
vimAlias = true;
|
|
|
|
|
|
|
|
|
|
# neovim config
|
|
|
|
|
extraConfig = ''
|
|
|
|
|
|
|
|
|
|
" Use tab for trigger completion with characters ahead and navigate.
|
|
|
|
|
inoremap <silent><expr> <TAB>
|
|
|
|
|
\ pumvisible() ? "\<C-n>" :
|
|
|
|
|
\ <SID>check_back_space() ? "\<TAB>" :
|
|
|
|
|
\ coc#refresh()
|
|
|
|
|
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
|
|
|
|
|
function! s:check_back_space() abort
|
|
|
|
|
let col = col('.') - 1
|
|
|
|
|
return !col || getline('.')[col - 1] =~# '\s'
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
" Use <c-space> to trigger completion.
|
|
|
|
|
if has('nvim')
|
|
|
|
|
inoremap <silent><expr> <c-space> coc#refresh()
|
|
|
|
|
else
|
|
|
|
|
inoremap <silent><expr> <c-@> coc#refresh()
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
" clipboard
|
|
|
|
|
set clipboard+=unnamedplus
|
|
|
|
|
|
|
|
|
|
" cursor
|
|
|
|
|
set guicursor=a:hor20-Cursor
|
|
|
|
|
set guicursor=v:block-Cursor
|
|
|
|
|
|
|
|
|
|
" terminal title
|
|
|
|
|
set title
|
|
|
|
|
|
|
|
|
|
" auto-complete
|
|
|
|
|
set completeopt=menu,menuone,longest
|
|
|
|
|
|
|
|
|
|
" show number
|
|
|
|
|
set number
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
# lua config
|
|
|
|
|
extraLuaConfig = ''
|
|
|
|
|
|
|
|
|
|
-- set mapleader
|
|
|
|
|
vim.g.mapleader = ' '
|
|
|
|
|
vim.g.maplocalleader = ' '
|
|
|
|
|
|
|
|
|
|
-- set vim options
|
|
|
|
|
vim.opt.backspace = '2'
|
|
|
|
|
vim.opt.laststatus = 2
|
|
|
|
|
vim.opt.cursorline = true
|
|
|
|
|
|
|
|
|
|
-- set scrolloff
|
|
|
|
|
vim.opt.scrolloff = 10
|
|
|
|
|
|
|
|
|
|
-- indentation
|
|
|
|
|
vim.opt.tabstop = 2
|
|
|
|
|
vim.opt.shiftwidth = 2
|
|
|
|
|
vim.opt.expandtab = true
|
|
|
|
|
vim.opt.smartindent = true
|
2024-04-02 21:26:08 +02:00
|
|
|
|
|
|
|
|
|
-- load plugins
|
|
|
|
|
require("neo-tree").setup({
|
|
|
|
|
window = {
|
|
|
|
|
position = "left",
|
|
|
|
|
width = 36,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
require("neo-tree.sources.manager").show("filesystem")
|
|
|
|
|
|
|
|
|
|
-- function for new line
|
|
|
|
|
_G.add_new_line = function()
|
|
|
|
|
local n_lines = vim.api.nvim_buf_line_count(0)
|
|
|
|
|
local last_nonblank = vim.fn.prevnonblank(n_lines)
|
|
|
|
|
if last_nonblank <= n_lines then vim.api.nvim_buf_set_lines(0, last_nonblank, n_lines, true, { ''' }) end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
vim.cmd([[
|
|
|
|
|
augroup AddNewlineOnSave
|
|
|
|
|
autocmd!
|
|
|
|
|
autocmd BufWritePre * lua _G.add_new_line()
|
|
|
|
|
augroup END
|
|
|
|
|
]])
|
2024-04-02 20:52:48 +02:00
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
# auto-complete
|
|
|
|
|
coc = {
|
|
|
|
|
enable = true;
|
|
|
|
|
settings = {
|
|
|
|
|
"suggest.noselect" = true;
|
|
|
|
|
"suggest.enablePreview" = true;
|
|
|
|
|
"suggest.enablePreselect" = true;
|
|
|
|
|
"suggest.disableKind" = true;
|
|
|
|
|
|
|
|
|
|
"diagnostic.errorSign" = "✘";
|
|
|
|
|
"diagnostic.infoSign" = "ℹ";
|
|
|
|
|
"diagnostic.hintSign" = "➤";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
# plugins
|
|
|
|
|
plugins = with pkgs.vimPlugins; [
|
2024-04-02 21:26:08 +02:00
|
|
|
|
neo-tree-nvim
|
2024-04-02 20:52:48 +02:00
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
}
|
2024-04-02 21:26:08 +02:00
|
|
|
|
|