From 8353554315564b89dfe27d5130080ed04a0a65ad Mon Sep 17 00:00:00 2001 From: Linnnus Date: Sat, 21 Dec 2024 15:47:33 +0100 Subject: Move to a profile-based configuration where common This patch makes it so common configuration is now located in shared/ and each host basically just becomes a bunch of import statements. The exception here is host-specific configuration like the `*.linus.onl` that live inside `hosts/ahmed/`. Specifically I have: - moved common configuration `shared/{nixos,home-manager,nix-darwin}`. - moved `hosts/common.nix` to `shared/nixos/common-{nix,shell}-settings.nix`. - split `hosts/muhammed/{dev-utils,neovim}` into per-language configuration. This patch was done in preparation for the arrival of a new host, which will need to share a lot of configuration with Muhammed. --- shared/home-manager/neovim/init.vim | 274 ++++++++++++++++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 shared/home-manager/neovim/init.vim (limited to 'shared/home-manager/neovim/init.vim') diff --git a/shared/home-manager/neovim/init.vim b/shared/home-manager/neovim/init.vim new file mode 100644 index 0000000..eeb6920 --- /dev/null +++ b/shared/home-manager/neovim/init.vim @@ -0,0 +1,274 @@ +" Settings +""""""""""""""""""""""""""" + +" Leave boomer mode +set nocompatible + +set history=1000 + +" Backspace in insert mode +set backspace=indent,eol,start + +" Hide buffer when abandoned (you can gd away, etc) +set hid + +" Searching +" NOTE: ignorecase and smartcase must be used together (see :h 'smartcase') +set incsearch gdefault ignorecase smartcase nohlsearch + +" Only auto-continue comments when i_ is pressed (not n_o) +" Must be set after :filetype-plugin-on +filetype plugin indent on +au FileType * setlocal fo-=o fo+=r + +" Enable syntax highlighting +syn on + +" Colorscheme +" au VimEnter * ++nested colorscheme ansi_linus + +" Persistent undo +set undofile + +" Give me some thinking time, jesus! +set timeout timeoutlen=2000 + +" Line numbers +set number relativenumber + +" Improve macro performance +set lazyredraw + +" Show matching brackets +set showmatch +set matchtime=2 + +set listchars=tab:>-,eol:$,space:.,trail:@,nbsp:% + +" Enable mouse input for all modes but visual. +" +" I disable mouse in visual mode so I can select text in the terminal using +" the mouse. This is useful when copying text from a remote instance of vim +" SSH session where "* doesn't work. +set mouse=nicr + +" sussy sus the sussy sus +set nowrap + +" Mappings +""""""""""""""""""""""""""" + +let g:mapleader = "\" +let g:maplocalleader = "\" + +" Some keys are hard to press with the Danish layout. Luckily, we have some +" spare keys! Note that ctrl and esc are swapped at the OS level. +nnoremap æ $ +nnoremap Æ 0 + +" Switching windows +" TODO: make this work with iTerm2 panes +" nnoremap +" nnoremap +" nnoremap +" nnoremap +" tnoremap +" tnoremap +" tnoremap +" tnoremap + +" Resize windows +nnoremap + + +nnoremap - - + +" Switching tabs +nnoremap tt :tabnext +nnoremap tn :tabnew +nnoremap to :tabonly +nnoremap tc :tabclose +nnoremap tm :tabmove +" Just use gt and gT +" nnoremap tl :tabn +" nnoremap th :tabN +nnoremap t :tabl +nnoremap t :tabr + +" Fast macros (qq to record) +nnoremap Q @q +vnoremap Q :norm! @q + +" Make Y act like C and D +nnoremap y$ +vnoremap $y + +" Indent using tab key +nnoremap >l +nnoremap >gv +vnoremap +noremap! +noremap! +noremap! + +" Toggle showing 'listchars' +nnoremap l :set list! + +" Escape in terminal mode +tnoremap + +" Seamlessly enter/leave terminal buffer. +tnoremap +au BufEnter term://* norm! i + +" Join to end of line below +" This is already used by the window switching mappings +nnoremap ddpkJ + +" Move window to the left and switch to the eastern window. +" I do this move pretty frequently. +nnoremap Lh + +" If the fzf executable is available, assume that the fzf plugin is going to +" be loaded. In that case we want an easy way to load a file. +if executable("fzf") + nnoremap FZF +else + nnoremap echo "FZF not found!" +endif + +" Define go-to-definition help pages, otherwise see the mappings in the hook +" for LSP configuration. +autocmd Filetype help nnoremap gd + +" Commands +""""""""""""""""""""""""""" + +" Create a temporary buffer +" NOTE: relied on by other commands +command Temp new | setlocal buftype=nofile bufhidden=wipe noswapfile nomodified nobuflisted +command TempTab tabnew | setlocal buftype=nofile bufhidden=wipe noswapfile nomodified nobuflisted + +" Reverse lines +command! -bar -range=% Reverse ,g/^/m-1|nohl + +" Redraw screen +" CTRL-L mapping is used in other thing +command Redraw norm! + +" Run buffer contents as vimscript +command! -bar -range=% Run execute 'silent!' . . ',' . . 'y|@"' + +" Output the result of a command to the buf +command! -nargs=+ -complete=command Output + \ redir => output | + \ silent execute | + \ redir END | + \ tabnew | + \ setlocal buftype=nofile bufhidden=wipe noswapfile nobuflisted nomodified | + \ silent put=output | + \ if =~ ':!' | + \ silent 1,2delete _ | + \ else | + \ silent 1,4delete _ | + \ endif + +" Copy buffer to system clipboard +command! Copy silent w !pbcopy + +" Copy the location of the current file +command! CopyDir !echo %:r | pbcopy + +" View in-memory changes before writing to disk +command! DiffOnDisk + \ let orig_filetype=&ft | + \ vert new | + \ read ++edit # | 0d_ | + \ setlocal bt=nofile bh=wipe nobl noswf ro | + \ let &l:filetype = orig_filetype | + \ diffthis | + \ wincmd p | + \ diffthis + +command WrapItUp setlocal wrap + \| nnoremap j gj + \| nnoremap k gk + \| nnoremap 0 g0 + \| nnoremap $ g$ + +" Miscellaneous +""""""""""""""""""""""""""" + +" Show the color column only if insert mode (and only if cc is set) +augroup ShowCCInInsertMode + au! + au InsertEnter * if &tw != 0 | let &cc = &tw + 1 | endif + au InsertLeave * let &cc = 0 +augroup END + +" Auto-refresh vim config +" au BufWritePost $XDG_CONFIG_HOME/*.{vim,lua} so % + +" Jump to last editing location when opening files +au BufReadPost * + \ if line("'\"") > 0 && line("'\"") <= line("$") | + \ exe "normal! g'\"" | + \ endif + +augroup Sus + au! + + " Add syntax groups if relevant. This conditional is compensating for + " the lack of negative matches in :au. + " + " See: https://vim.fandom.com/wiki/Highlight_unwanted_spaces + " See: https://stackoverflow.com/questions/6496778/vim-run-autocmd-on-all-filetypes-except + fun! s:AddSyntax() + if bufname() !~ 'term://\|man://' + " Any trailing whitespace at the end of lines. + syn match SusWhitespace /\s\+$/ containedin=ALL + + " Any non-breaking spaces. These are generated by + " CMD+SPACE and deeply annoying. + syn match SusWhitespace /\%u00A0/ containedin=ALL + + " Any characters beyond the maximum width of the text. + if &tw > 0 + let reg = '\%' . (&tw + 1) . 'v.\+' + exe 'syn match SusWhitespace /'.reg.'/ containedin=ALL' + endif + endif + endfun + + " Remove highligt group. + " + " Note that we have to do abit more work since the the syntax rules + " have changed under Vim's nose. Hopefully the perfomance + " characteristics don't come back to haunt us. + fun! s:RemoveSyntax() + syn clear SusWhitespace + syn sync fromstart + endfun + + " Add a persistent highligt group, which matches are going to use. + au VimEnter,ColorScheme * hi SusWhitespace ctermbg=red guibg=red + + " Create some persistent syntax highlighting groups. + au Syntax * call s:AddSyntax() + + " When 'textwidth' changes, we may need to recalculate. + au OptionSet textwidth call s:RemoveSyntax() + \ | call s:AddSyntax() + + " Temporarily remove the groups when in insert mode. + au InsertEnter * call s:RemoveSyntax() + au InsertLeave * call s:AddSyntax() +augroup END + +" Allow for quick prototyping outside of NixOS/Home-Manager by loading some +" extra configuration if relevant. +let extra_vimrc = expand("~/extra-temporary.vimrc") +if filereadable(extra_vimrc) + execute "source " . extra_vimrc +endif -- cgit v1.2.3