]> gitweb.ps.run Git - flake_thinkpad/blob - home-common.nix
update
[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       nnoremap <leader><Space> za
54       noremap <leader>y "+y<CR>
55       noremap <leader>p "+p<CR>
56       noremap <leader><S-y> "+<S-y><CR>
57       noremap <leader><S-p> "+<S-p><CR>
58
59       " Format on save
60       " augroup FormatAutogroup
61       "   autocmd!
62       "   autocmd BufWritePost * FormatWrite
63       " augroup END
64
65       " enter insert mode when opening terminal
66       autocmd TermOpen * startinsert
67
68       " Return to last opened position
69       autocmd BufReadPost *
70       \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
71       \ |   exe "normal! g`\""
72       \ | endif
73
74       " Use persistent history.
75       if !isdirectory("/tmp/.vim-undo-dir")
76           call mkdir("/tmp/.vim-undo-dir", "", 0700)
77       endif
78       set undodir=/tmp/.vim-undo-dir
79       set undofile
80     '';
81     extraLuaConfig = ''
82       vim.lsp.enable('zls')
83       vim.lsp.enable('clangd')
84       vim.lsp.config('zuban', {})
85       vim.lsp.enable('zuban')
86       vim.lsp.enable('jdtls')
87       require('guess-indent').setup {}
88       local actions = require("telescope.actions")
89       require('telescope').setup {
90         defaults = {
91           mappings = {
92             i = { ["<esc>"] = actions.close },
93           }
94         }
95       }
96       require('formatter').setup {
97         logging = true,
98         log_level = vim.log.levels.WARN,
99         filetype = {
100           c = { require("formatter.filetypes.c").clangformat },
101           cpp = { require("formatter.filetypes.cpp").clangformat },
102           zig = { require("formatter.filetypes.zig").zigfmt },
103           markdown = { require("formatter.filetypes.markdown").denofmt },
104         }
105       }
106       require('blink.cmp').setup {
107         keymap = {
108           preset = 'none',
109           
110           ['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
111           ['<C-e>'] = { 'hide', 'fallback' },
112           ['<CR>'] = { 'accept', 'fallback' },
113
114           ['<Tab>'] = { 'select_next', 'fallback_to_mappings' },
115           ['<S-Tab>'] = { 'select_prev', 'fallback_to_mappings' },
116
117           ['<C-p>'] = { 'scroll_documentation_up', 'fallback' },
118           ['<C-n'] = { 'scroll_documentation_down', 'fallback' },
119
120           ['<C-k>'] = { 'show_signature', 'hide_signature', 'fallback' },
121         },
122         completion = {
123           list = { selection = { preselect = false, } },
124           documentation = {
125             auto_show = true,
126             -- treesitter_highlighting = false,
127           },
128         },
129         signature = { enabled = true },
130       }
131     '';
132   };
133 }