]> gitweb.ps.run Git - flake_thinkpad/blob - home-common.nix
update config
[flake_thinkpad] / home-common.nix
1 { config, pkgs, ... }:
2 {
3   programs.neovim = {
4     enable = true;
5     defaultEditor = true;
6     plugins = with pkgs.vimPlugins; [
7       # fzfWrapper
8       # fzf-vim
9       formatter-nvim
10       goyo-vim
11       vim-visual-multi
12       nvim-lspconfig
13       blink-cmp
14       telescope-nvim
15       undotree
16       which-key-nvim
17       guess-indent-nvim
18     ];
19     extraConfig = ''
20       set number
21       set relativenumber
22       set tabstop=4
23       set shiftwidth=4
24       set expandtab
25       set foldmethod=marker
26       set autoindent
27       set smartindent
28       filetype plugin indent on
29       set signcolumn=yes
30
31       colorscheme habamax
32
33       nnoremap <Down> gj
34       nnoremap <Up> gk
35       vnoremap <Down> gj
36       vnoremap <Up> gk
37       inoremap <Down> <C-o>gj
38       inoremap <Up> <C-o>gk
39       tnoremap <Esc> <C-\><C-n>
40       map <Space> <Leader>
41       nnoremap <Esc> :noh<CR>
42       nnoremap gr :Telescope lsp_references<CR>
43       nnoremap gd :Telescope lsp_definitions<CR>
44       nnoremap <leader>u :UndotreeToggle<CR> :UndotreeFocus<CR>
45       nnoremap <leader>f :Telescope find_files<CR>
46       nnoremap <leader>b :Telescope buffers<CR>
47       nnoremap <leader>e :Telescope diagnostics<CR>
48       nnoremap <leader>g :Telescope live_grep<CR>
49       nnoremap <leader>s :Telescope lsp_document_symbols<CR>
50       nnoremap <leader>r :lua vim.lsp.buf.rename()<CR>
51       nnoremap <leader>n :bnext<CR>
52       nnoremap <leader>m :bprevious<CR>
53       noremap <leader>y "+y<CR>
54       noremap <leader>p "+p<CR>
55       noremap <leader><S-y> "+<S-y><CR>
56       noremap <leader><S-p> "+<S-p><CR>
57
58       " Format on save
59       " augroup FormatAutogroup
60       "   autocmd!
61       "   autocmd BufWritePost * FormatWrite
62       " augroup END
63
64       " enter insert mode when opening terminal
65       autocmd TermOpen * startinsert
66
67       " Return to last opened position
68       autocmd BufReadPost *
69       \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
70       \ |   exe "normal! g`\""
71       \ | endif
72
73       " Use persistent history.
74       if !isdirectory("/tmp/.vim-undo-dir")
75           call mkdir("/tmp/.vim-undo-dir", "", 0700)
76       endif
77       set undodir=/tmp/.vim-undo-dir
78       set undofile
79     '';
80     extraLuaConfig = ''
81       vim.lsp.enable('zls')
82       vim.lsp.enable('clangd')
83       vim.lsp.config('zuban', {})
84       vim.lsp.enable('zuban')
85       require('guess-indent').setup {}
86       local actions = require("telescope.actions")
87       require('telescope').setup {
88         defaults = {
89           mappings = {
90             i = { ["<esc>"] = actions.close },
91           }
92         }
93       }
94       require('formatter').setup {
95         logging = true,
96         log_level = vim.log.levels.WARN,
97         filetype = {
98           c = { require("formatter.filetypes.c").clangformat },
99           cpp = { require("formatter.filetypes.cpp").clangformat },
100           zig = { require("formatter.filetypes.zig").zigfmt },
101           markdown = { require("formatter.filetypes.markdown").denofmt },
102         }
103       }
104       require('blink.cmp').setup {
105         keymap = {
106           preset = 'none',
107           
108           ['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
109           ['<C-e>'] = { 'hide', 'fallback' },
110           ['<CR>'] = { 'accept', 'fallback' },
111
112           ['<Tab>'] = { 'select_next', 'fallback_to_mappings' },
113           ['<S-Tab>'] = { 'select_prev', 'fallback_to_mappings' },
114
115           ['<C-p>'] = { 'scroll_documentation_up', 'fallback' },
116           ['<C-n'] = { 'scroll_documentation_down', 'fallback' },
117
118           ['<C-k>'] = { 'show_signature', 'hide_signature', 'fallback' },
119         },
120         completion = {
121           list = { selection = { preselect = false, } },
122           documentation = {
123             auto_show = true,
124             -- treesitter_highlighting = false,
125           },
126         },
127         signature = { enabled = true },
128       }
129     '';
130   };
131 }