blob: ccd34349521f1d599094d5ec57eb6bfbbbf66a62 [file] [log] [blame]
Skyler Greyc96cd8a2022-06-15 12:28:27 +01001{ pkgs, ... }: {
Skyler Greyab851422022-08-12 23:21:10 +01002 home.file.".config/nvim/autoload/airline/themes/onehalf.vim".text = ''
3 let g:airline#themes#onehalf#palette = {}
4 function! airline#themes#onehalf#refresh()
5
6 " guifg guibg ctermfg ctermbg
7 let s:black = { "gui": "#282c34", "cterm": "236" }
8 let s:red = { "gui": "#e06c75", "cterm": "168" }
9 let s:green = { "gui": "#98c379", "cterm": "114" }
10 let s:yellow = { "gui": "#e5c07b", "cterm": "180" }
11 let s:blue = { "gui": "#61afef", "cterm": "75" }
12 let s:purple = { "gui": "#c678dd", "cterm": "176" }
13 let s:cyan = { "gui": "#56b6c2", "cterm": "73" }
14 let s:white = { "gui": "#dcdfe4", "cterm": "188" }
15 let s:statusline = { "gui": "#313640", "cterm": "237" }
16 let s:lightgrey = { "gui": "#474e5d", "cterm": "237" }
17
18 function! s:generateAirlinePalette(primary)
19 return {
20 \ 'airline_a' : [s:black.gui, a:primary.gui, s:black.cterm, a:primary.cterm],
21 \ 'airline_b' : [s:white.gui, s:lightgrey.gui, s:white.cterm, s:lightgrey.cterm],
22 \ 'airline_c' : [a:primary.gui, s:statusline.gui, a:primary.cterm, s:statusline.cterm],
23 \ 'airline_x' : [a:primary.gui, s:statusline.gui, a:primary.cterm, s:statusline.cterm],
24 \ 'airline_y' : [s:white.gui, s:lightgrey.gui, s:white.cterm, s:lightgrey.cterm],
25 \ 'airline_z' : [s:black.gui, a:primary.gui, s:black.cterm, a:primary.cterm],
26 \ 'airline_warning': [s:black.gui, s:yellow.gui, s:black.cterm, s:yellow.cterm],
27 \ 'airline_error' : [s:black.gui, s:red.gui, s:black.cterm, s:red.cterm]}
28 endfunction
29
30 let g:airline#themes#onehalf#palette.normal = s:generateAirlinePalette(s:green)
31 let g:airline#themes#onehalf#palette.visual = s:generateAirlinePalette(s:purple)
32 let g:airline#themes#onehalf#palette.select = s:generateAirlinePalette(s:purple)
33 let g:airline#themes#onehalf#palette.multi = s:generateAirlinePalette(s:purple)
34 let g:airline#themes#onehalf#palette.insert = s:generateAirlinePalette(s:blue)
35 let g:airline#themes#onehalf#palette.commandline = s:generateAirlinePalette(s:red)
36 let g:airline#themes#onehalf#palette.terminal = s:generateAirlinePalette(s:cyan)
37 let g:airline#themes#onehalf#palette.replace = s:generateAirlinePalette(s:yellow)
38 let g:airline#themes#onehalf#palette.ctrlp = s:generateAirlinePalette(s:white)
39 let g:airline#themes#onehalf#palette.inactive = s:generateAirlinePalette(s:lightgrey)
40 let g:airline#themes#onehalf#palette.normal_modified = s:generateAirlinePalette(s:green)
41 let g:airline#themes#onehalf#palette.visual_modified = s:generateAirlinePalette(s:purple)
42 let g:airline#themes#onehalf#palette.select_modified = s:generateAirlinePalette(s:purple)
43 let g:airline#themes#onehalf#palette.multi_modified = s:generateAirlinePalette(s:purple)
44 let g:airline#themes#onehalf#palette.insert_modified = s:generateAirlinePalette(s:blue)
45 let g:airline#themes#onehalf#palette.commandline_modified = s:generateAirlinePalette(s:red)
46 let g:airline#themes#onehalf#palette.terminal_modified = s:generateAirlinePalette(s:cyan)
47 let g:airline#themes#onehalf#palette.replace_modified = s:generateAirlinePalette(s:yellow)
48 let g:airline#themes#onehalf#palette.ctrlp_modified = s:generateAirlinePalette(s:white)
49 endfunction
50
51 call airline#themes#onehalf#refresh()
52 '';
Skyler Grey49c030f2022-08-12 11:48:56 +010053 programs.neovim = {
54 enable = true;
55 coc = {
56 enable = true;
57 settings = {
58 "suggest.noselect" = false;
Skyler Grey536f9092022-08-12 21:20:14 +010059 "cSpell.checkOnlyEnabledFileTypes" = false;
Skyler Grey49c030f2022-08-12 11:48:56 +010060 };
61 };
62 viAlias = true;
63 vimAlias = true;
64 vimdiffAlias = true;
65 extraConfig = ''
66 let mapleader = ","
67 let g:VM_leader = "\\"
68 set whichwrap=b,s,<,>,[,]
69 set linebreak
70 set wrap
71 set number
72 set cursorline
73 set expandtab
74 set mouse=a
75 set splitright
76 set splitbelow
77 set clipboard=unnamedplus
78 set ignorecase
79 set smartcase
Skyler Greyd948b222022-08-12 14:28:21 +010080 set nocompatible
81 set hidden
82 set encoding=utf-8
Skyler Grey49c030f2022-08-12 11:48:56 +010083 set scrolloff=5
Skyler Greyab851422022-08-12 23:21:10 +010084 set signcolumn=yes
Skyler Grey49c030f2022-08-12 11:48:56 +010085 colorscheme onehalfdark
Skyler Greya949ffd2022-06-23 23:32:48 +010086
Skyler Grey49c030f2022-08-12 11:48:56 +010087 command W w
88 command Wq wq
Skyler Grey6ad0c6d2022-08-10 09:54:25 +010089
Skyler Grey49c030f2022-08-12 11:48:56 +010090 fun! SetupCommandAlias(from, to)
Skyler Grey6ad0c6d2022-08-10 09:54:25 +010091 exec 'cnoreabbrev <expr> '.a:from
Skyler Grey49c030f2022-08-12 11:48:56 +010092 \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
93 \ .'? ("'.a:to.'") : ("'.a:from.'"))'
94 endfun
Skyler Grey6ad0c6d2022-08-10 09:54:25 +010095
Skyler Grey49c030f2022-08-12 11:48:56 +010096 call SetupCommandAlias("git","Git")
Skyler Grey6ad0c6d2022-08-10 09:54:25 +010097
Skyler Grey49c030f2022-08-12 11:48:56 +010098 let g:camelcasemotion_key = '<leader>'
Skyler Grey60fcac92022-08-10 08:21:42 +010099
Skyler Grey49c030f2022-08-12 11:48:56 +0100100 if exists('+termguicolors')
Skyler Greya949ffd2022-06-23 23:32:48 +0100101 let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
102 let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
103 set termguicolors
Skyler Grey8d2f1052022-07-09 21:02:17 +0100104 endif
Skyler Grey8d2f1052022-07-09 21:02:17 +0100105
Skyler Grey49c030f2022-08-12 11:48:56 +0100106 let g:better_whitespace_enabled=1
107 let g:strip_whitespace_on_save=1
108 let g:strip_only_modified_lines=1
109 let g:strip_whitelines_at_eof=1
110 let g:show_spaces_that_precede_tabs=1
111 nnoremap ]w :NextTrailingWhitespace<CR>
112 nnoremap [w :PrevTrailingWhitespace<CR>
113
Skyler Grey849ee152022-08-12 13:30:07 +0100114 let g:airline#extensions#tabline#enabled = 1
Skyler Greyd948b222022-08-12 14:28:21 +0100115 let g:airline#extensions#tabline#formatter = 'unique_tail_improved'
116 let g:airline_powerline_fonts = 1
Skyler Grey8bad2582022-08-12 15:17:20 +0100117 let g:airline#extensions#hunks#coc_git = 1
118 let g:airline#extensions#whitespace#enabled = 1
119
Skyler Greyab851422022-08-12 23:21:10 +0100120
121 let g:airline#parts#ffenc#skip_expected_string='utf-8[unix]'
122
123 let g:VM_mouse_mappings = 1
Skyler Greyfceb6692022-08-12 16:56:59 +0100124 nnoremap <silent> <leader>gg :LazyGit<CR>
125
Skyler Grey8bad2582022-08-12 15:17:20 +0100126 let g:airline#extensions#tabline#buffer_idx_mode = 1
127 nmap <leader>1 <Plug>AirlineSelectTab1
128 nmap <leader>2 <Plug>AirlineSelectTab2
129 nmap <leader>3 <Plug>AirlineSelectTab3
130 nmap <leader>4 <Plug>AirlineSelectTab4
131 nmap <leader>5 <Plug>AirlineSelectTab5
132 nmap <leader>6 <Plug>AirlineSelectTab6
133 nmap <leader>7 <Plug>AirlineSelectTab7
134 nmap <leader>8 <Plug>AirlineSelectTab8
135 nmap <leader>9 <Plug>AirlineSelectTab9
136 nmap <leader>0 <Plug>AirlineSelectTab0
137 nmap <leader>- <Plug>AirlineSelectPrevTab
138 nmap <leader>+ <Plug>AirlineSelectNextTab
Skyler Grey8bad2582022-08-12 15:17:20 +0100139 let g:airline_skip_empty_sections = 1
Skyler Greyd948b222022-08-12 14:28:21 +0100140
141 let g:ctrlp_map = '<c-p>'
142 let g:ctrlp_cmd = 'CtrlP'
Skyler Grey849ee152022-08-12 13:30:07 +0100143
Skyler Grey49c030f2022-08-12 11:48:56 +0100144 nmap <silent> ]c :call CocAction('diagnosticNext')<cr>
145 nmap <silent> [c :call CocAction('diagnosticPrevious')<cr>
146 nmap <silent> <Leader>fs <Plug>(coc-codeaction-selected)
147 nmap <silent> <Leader>fg <Plug>(coc-codeaction-cursor)
148 nmap <silent> <Leader>ff <Plug>(coc-codeaction)
149 nmap <Leader>fe <Cmd>CocCommand explorer<CR>
150
151 vnoremap // y/\V<C-R>=escape(@",'/\')<CR><CR>
152
153 set statusline=%t "tail of the filename
154 set statusline+=[%{strlen(&fenc)?&fenc:'none'}, "file encoding
155 set statusline+=%{&ff}] "file format
156 set statusline+=%h "help file flag
157 set statusline+=%m "modified flag
158 set statusline+=%r "read only flag
159 set statusline+=%y "filetype
160 set statusline+=%= "left/right separator
161 set statusline+=%c, "cursor column
162 set statusline+=%l/%L "cursor line/total lines
163 set statusline+=\ %P "percent through file
164
165 let g:VM_theme_set_by_colorscheme = 1
166 highlight VM_Extend ctermfg=NONE guifg=NONE ctermbg=239 guibg=#474e5d
167 highlight VM_Cursor ctermfg=188 guifg=#dcdfe4 ctermbg=168 guibg=#e06c75
168 highlight VM_Insert ctermfg=236 guifg=#282c34 ctermbg=176 guibg=#c678dd
169 highlight VM_Mono ctermfg=236 guifg=#282c34 ctermbg=75 guibg=#61afef
170
171 highlight Pmenu ctermfg=188 guifg=#dcdfe4 ctermbg=239 guibg=#474e5d
172 highlight PmenuSel ctermfg=236 guifg=#282c34 ctermbg=75 guibg=#61afef
173 highlight PmenuSbar ctermfg=237 guifg=#313640 ctermbg=237 guibg=#313640
174 highlight PmenuThumb ctermfg=188 guifg=#dcdfe4 ctermbg=188 guibg=#dcdfe4
175
176 highlight CocErrorSign ctermfg=168 guifg=#e06c75 ctermbg=NONE guibg=NONE
177 highlight CocInfoSign ctermfg=75 guifg=#61afef ctermbg=NONE guibg=NONE
178 highlight CocWarningSign ctermfg=180 guifg=#e5c07b ctermbg=NONE guibg=NONE
179
180 nnoremap <silent> K :call <SID>show_documentation()<CR>
181
182 autocmd BufWritePre * Neoformat
183
184 let g:neoformat_try_node_exe = 1
185
186 function! s:show_documentation()
187 if (index(['vim','help'], &filetype) >= 0)
188 execute 'h '.expand('<cword>')
189 else
190 call CocAction('doHover')
191 endif
192 endfunction
193
194 lua << EOF
Skyler Grey686ca7f2022-06-24 14:30:05 +0100195 require('neorg').setup {
Skyler Grey49c030f2022-08-12 11:48:56 +0100196 load = {
197 ["core.defaults"] = {}
198 }
Skyler Grey686ca7f2022-06-24 14:30:05 +0100199 }
Skyler Grey55109532022-07-04 18:31:29 +0100200
Skyler Greyb3283572022-06-24 21:25:29 +0100201 require('orgmode').setup_ts_grammar()
Skyler Grey810c00e2022-06-24 21:16:22 +0100202
203 require('nvim-treesitter.configs').setup {
Skyler Grey49c030f2022-08-12 11:48:56 +0100204 highlight = {
205 enable = true,
206 additional_vim_regex_highlighting = {'org'},
Skyler Grey4597d652022-08-03 00:23:19 +0100207 },
Skyler Grey49c030f2022-08-12 11:48:56 +0100208 rainbow = {
209 enable = true,
210 extended_mode = true,
211 max_file_lines = nil,
212 },
213 incremental_selection = {
214 enable = true,
215 keymaps = {
216 init_selection = "gnn",
217 node_incremental = "grn",
218 scope_incremental = "grc",
219 node_decremental = "grm",
220 },
221 },
222 indent = {
223 enable = true,
224 },
Skyler Grey810c00e2022-06-24 21:16:22 +0100225 }
Skyler Greyc0a52452022-07-09 21:06:53 +0100226
227 require('git-conflict').setup()
Skyler Grey49c030f2022-08-12 11:48:56 +0100228 EOF
Skyler Grey4597d652022-08-03 00:23:19 +0100229
Skyler Grey49c030f2022-08-12 11:48:56 +0100230 set foldmethod=expr
231 set foldexpr=nvim_treesitter#foldexpr()
Skyler Grey36eef4e2022-08-03 00:37:44 +0100232
Skyler Grey49c030f2022-08-12 11:48:56 +0100233 set viewoptions-=options
234 autocmd BufWinLeave ?* mkview!
235 autocmd BufWinEnter ?* normal zR
Skyler Greydfd501b2022-08-11 09:48:47 +0100236
Skyler Grey49c030f2022-08-12 11:48:56 +0100237 function! s:loadViewOrUnfold()
Skyler Greydfd501b2022-08-11 09:48:47 +0100238 try
Skyler Grey49c030f2022-08-12 11:48:56 +0100239 loadview
Skyler Greydfd501b2022-08-11 09:48:47 +0100240 catch
Skyler Grey49c030f2022-08-12 11:48:56 +0100241 folddoclosed foldopen
Skyler Greydfd501b2022-08-11 09:48:47 +0100242 endtry
Skyler Grey49c030f2022-08-12 11:48:56 +0100243 endfunction
Skyler Greydfd501b2022-08-11 09:48:47 +0100244
Skyler Grey49c030f2022-08-12 11:48:56 +0100245 autocmd BufWinEnter ?* call s:loadViewOrUnfold()
Skyler Greyd948b222022-08-12 14:28:21 +0100246
247
Skyler Greyab851422022-08-12 23:21:10 +0100248 let g:airline_highlighting_cache = 1
249 let g:airline_theme = "onehalf"
Skyler Grey8bad2582022-08-12 15:17:20 +0100250 autocmd VimEnter * call vista#RunForNearestMethodOrFunction()
Skyler Grey49c030f2022-08-12 11:48:56 +0100251 '';
Skyler Grey686ca7f2022-06-24 14:30:05 +0100252
Skyler Grey1dc04f22022-08-12 21:04:38 +0100253 plugins = with pkgs.vimPlugins; [
254 git-conflict-nvim
255 vim-nix
256 copilot-vim
257 coc-tsserver
258 coc-eslint
259 coc-rust-analyzer
260 coc-spell-checker
261 coc-json
262 coc-jest
263 coc-css
264 coc-explorer
265 coc-git
266 neoformat
267 zoomwintab-vim
268 onehalf
269 neorg
270 orgmode
271 vim-sleuth
272 vim-visual-multi
273 vim-better-whitespace
274 nvim-ts-rainbow
275 editorconfig-nvim
276 camelcasemotion
277 fugitive
278 vim-flog
279 airline
280 vista-vim
281 vim-gitgutter
282 ctrlp-vim
283 vim-airline-clock
Skyler Grey1dc04f22022-08-12 21:04:38 +0100284 lazygit-nvim
285 (nvim-treesitter.withPlugins (plugins: pkgs.tree-sitter.allGrammars))
Skyler Grey49c030f2022-08-12 11:48:56 +0100286 ];
287 };
Skyler Greyc96cd8a2022-06-15 12:28:27 +0100288
Skyler Grey1dc04f22022-08-12 21:04:38 +0100289 home.packages = with pkgs; [
290 universal-ctags
291 nodePackages.cspell
Skyler Greyd948b222022-08-12 14:28:21 +0100292 ];
293
Skyler Grey49c030f2022-08-12 11:48:56 +0100294 home.sessionVariables.EDITOR = "${pkgs.neovim}/bin/nvim";
Skyler Grey73c55fc2022-06-12 09:18:59 +0100295}