]> gitweb.ps.run Git - flake_thinkpad/blob - home-common.nix
changes
[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       require('guess-indent').setup {}
87       local actions = require("telescope.actions")
88       require('telescope').setup {
89         defaults = {
90           mappings = {
91             i = { ["<esc>"] = actions.close },
92           }
93         }
94       }
95       require('formatter').setup {
96         logging = true,
97         log_level = vim.log.levels.WARN,
98         filetype = {
99           c = { require("formatter.filetypes.c").clangformat },
100           cpp = { require("formatter.filetypes.cpp").clangformat },
101           zig = { require("formatter.filetypes.zig").zigfmt },
102           markdown = { require("formatter.filetypes.markdown").denofmt },
103         }
104       }
105       require('blink.cmp').setup {
106         keymap = {
107           preset = 'none',
108           
109           ['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
110           ['<C-e>'] = { 'hide', 'fallback' },
111           ['<CR>'] = { 'accept', 'fallback' },
112
113           ['<Tab>'] = { 'select_next', 'fallback_to_mappings' },
114           ['<S-Tab>'] = { 'select_prev', 'fallback_to_mappings' },
115
116           ['<C-p>'] = { 'scroll_documentation_up', 'fallback' },
117           ['<C-n'] = { 'scroll_documentation_down', 'fallback' },
118
119           ['<C-k>'] = { 'show_signature', 'hide_signature', 'fallback' },
120         },
121         completion = {
122           list = { selection = { preselect = false, } },
123           documentation = {
124             auto_show = true,
125             -- treesitter_highlighting = false,
126           },
127         },
128         signature = { enabled = true },
129       }
130     '';
131   };
132 }