overlays-personal/pkgs/vim/default.nix

330 lines
9.2 KiB
Nix
Raw Normal View History

2018-02-20 12:27:46 +01:00
{ pkgs
2020-03-05 18:25:48 +01:00
, extraPlugins ? []
, extraOptions ? ""
2018-02-20 12:27:46 +01:00
, ...
}:
# At first, largely adapted from:
# https://www.mpscholten.de/nixos/2016/04/11/setting-up-vim-on-nixos.html
# Changed quite a bit since
with pkgs;
let
plugins = let inherit (vimUtils) buildVimPluginFrom2Nix; in {
"systemd-syntax" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
2021-09-14 16:18:59 +02:00
pname = "systemd-syntax";
2021-09-14 16:22:10 +02:00
version = "git";
2018-02-20 12:27:46 +01:00
src = fetchgit {
url = "git://github.com/Matt-Deacalion/vim-systemd-syntax";
2020-03-04 19:49:21 +01:00
rev = "394a516f524e74ac8808ede1496b25d8b9824827";
sha256 = "0fqk5fxrdf8nazic244ia4bi75midmpj896vdkdmxnv563lnhkcy";
2018-02-20 12:27:46 +01:00
};
dependencies = [];
};
"opencl-syntax" = buildVimPluginFrom2Nix { # created by nix#NixDerivation
2021-09-14 16:18:59 +02:00
pname = "opencl-syntax";
2021-09-14 16:22:10 +02:00
version = "git";
2018-02-20 12:27:46 +01:00
src = fetchgit {
url = "git://github.com/petRUShka/vim-opencl";
2020-03-04 19:49:21 +01:00
rev = "7668b018fe9461c6b51e0b736ed84aa84d6bafce";
sha256 = "0z8qasymkkaa272bjxmkp4sgd8qr4ypcqxlyzxgh5imp3gmrc6n1";
2018-02-20 12:27:46 +01:00
};
dependencies = [];
};
2019-10-08 17:15:39 +02:00
vim-timedot = buildVimPluginFrom2Nix {
2021-09-14 16:18:59 +02:00
pname = "vim-timedot";
2021-09-14 16:22:10 +02:00
version = "git";
2019-10-08 17:06:41 +02:00
src = fetchFromGitHub {
2019-10-08 17:15:39 +02:00
owner = "jpotier";
2019-10-08 17:06:41 +02:00
repo = "vim-timedot";
2019-10-08 17:15:39 +02:00
rev = "ab48ee1002e25ae705dd84bb3db8b88bb0c2dc93";
sha256 = "0vgga3fmppb71apd31bwji98d62vs1p77c1hssshmh2fc7yck6s8";
2019-10-08 17:06:41 +02:00
};
};
2020-07-22 14:38:51 +02:00
vim-selinux = buildVimPluginFrom2Nix {
2021-09-14 16:18:59 +02:00
pname = "vim-selinux";
2021-09-14 16:22:10 +02:00
version = "git";
2020-07-22 14:38:51 +02:00
src = fetchFromGitHub {
owner = "lzap";
repo = "vim-selinux";
2021-12-09 21:24:27 +01:00
rev = "ac5362b9b3ad32215136bda0b7d12bdfe02f3d2f";
sha256 = "kOKOpxLSMCEQ1mmoJrL72/1fAH9xPV21rReAXrr5f5g=";
2020-07-22 14:38:51 +02:00
};
};
2020-04-22 10:34:33 +02:00
vim-lilypond = buildVimPluginFrom2Nix { # created by nix#NixDerivation
2021-09-14 16:18:59 +02:00
pname = "vim-lilypond";
2021-09-14 16:22:10 +02:00
version = "git";
2020-04-22 10:34:33 +02:00
src = "${pkgs.lilypond.outPath}/share/lilypond/${pkgs.lilypond.version}/vim";
dependencies = [];
};
vim-css-color = buildVimPluginFrom2Nix {
2021-09-14 16:18:59 +02:00
pname = "vim-css-color";
2021-09-14 16:22:10 +02:00
version = "git";
src = fetchFromGitHub {
owner = "jpotier";
repo = "vim-css-color";
rev = "bd7cac457b4459e3e60fec39c094832d233c6a7f";
sha256 = "08k1jh9n0kz9xwmy0ig03w9lx0r2m2rhmfwb0idy81madllcidjc";
};
};
2021-12-09 21:24:27 +01:00
vim-lsp-mats = buildVimPluginFrom2Nix {
pname = "vim-lsp";
version = "git";
src = fetchFromGitHub {
owner = "masser";
repo = "vim-lsp";
rev = "1e71d5b923ec2574f9b07fbebaf6af90491db31c";
sha256 = "1ZlXZo430WzagZ58PT34y/qnx9Qwf/qZJlY1m8ml56Q=";
};
};
2018-02-20 12:27:46 +01:00
}; in vim_configurable.customize {
2021-09-14 16:21:19 +02:00
name = "vim";
2018-02-20 12:27:46 +01:00
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; with plugins; {
# loaded on launch
start = [
calendar-vim
dhall-vim
2020-03-31 10:23:08 +02:00
editorconfig-vim
2018-02-20 12:27:46 +01:00
fzf-vim
fzfWrapper
2021-05-22 09:28:18 +02:00
goyo-vim
gundo-vim
2018-02-20 12:27:46 +01:00
nerdtree
2020-03-04 19:49:21 +01:00
opencl-syntax
2018-02-20 12:27:46 +01:00
systemd-syntax
2019-04-29 12:53:20 +02:00
vim-abolish
2018-02-20 12:27:46 +01:00
vim-airline
vim-airline-themes
2019-02-24 13:54:00 +01:00
vim-better-whitespace
2018-02-20 12:27:46 +01:00
vim-gnupg
2020-06-05 10:00:11 +02:00
vim-hcl
2019-02-24 13:54:00 +01:00
vim-ledger
2020-04-22 10:34:33 +02:00
vim-lilypond
2021-12-09 21:24:27 +01:00
vim-lsp-mats
2018-02-20 12:27:46 +01:00
vim-nix
vim-orgmode
2021-05-22 09:28:18 +02:00
vim-repeat
2020-07-22 14:38:51 +02:00
vim-selinux
2020-03-04 19:49:21 +01:00
vim-speeddating
2021-05-22 09:28:18 +02:00
vim-surround
2018-03-20 14:00:44 +01:00
vim-terraform
2019-10-08 17:06:41 +02:00
vim-timedot
2018-02-20 12:27:46 +01:00
vimtex
2020-03-05 18:28:57 +01:00
] ++ extraPlugins;
2018-02-20 12:27:46 +01:00
# manually loadable by calling `:packadd $plugin-name`
opt = [
2020-12-27 10:15:53 +01:00
vim-css-color
2018-02-20 12:27:46 +01:00
];
# To automatically load a plugin when opening a filetype, add vimrc lines like:
# autocmd FileType php :packadd phpCompletion
};
vimrcConfig.customRC = ''
" Must have for vim
set nocompatible
" Display nbsp
set listchars=tab:\|\ ,nbsp:·
set list
" Remap ESC on ,,
map ,, <ESC>
imap ,, <ESC>
scriptencoding utf-8
" Must be *after* pathogen (not using pathogen anymore)
filetype plugin indent on
" Leader
let mapleader=","
nnoremap <leader>a :echo("\<leader\> works! It is set to <leader>")<CR>
" let maplocalleader = "-"
" Highlighting
syntax enable
if has('gui_running')
" When gui is running, it pretty much sets its own colors
2021-12-09 21:41:06 +01:00
set guifont=Iosevka\ Samae\ 14
2018-05-13 19:21:04 +02:00
set notitle
set guioptions=a
2018-02-20 12:27:46 +01:00
else
" If we're in a terminal, then we stay default, terminal will choose
" which colors it likes.
endif
" Set line numbering
set number
" Don't wrap lines, it's ugly
set nowrap
" Deal with tabs
set softtabstop=2
set tabstop=2 " 1 tab = 2 spaces
set shiftwidth=2 " Indent with 2 spaces
set expandtab " Insert spaces instead of tabs
" Set par as default wrapper
set formatprg=${par.outPath}/bin/par\ -w80
" Set mouse on
set mouse=a
" Don't set timeout - this breaks the leader use
set notimeout
set ttimeout
" Color lines in a different shade up to 80 columns
let &colorcolumn=join(range(81,999),",")
" automatically jump to the end of the text you just copied/pasted:
xnoremap <silent> y y`]
nnoremap <silent> yy yy`]
xnoremap <silent> p p`]
xnoremap <silent> P P`]
nnoremap <silent> p p`]
nnoremap <silent> P P`]
" vimtex options
let g:vimtex_fold_enabled=1
let g:vimtex_fold_manual=1
let g:vimtex_compiler_enabled=0
2020-08-07 11:07:40 +02:00
let g:tex_flavor = 'latex'
2018-02-20 12:27:46 +01:00
" conceal to unicode symbols
nnoremap <leader>l :silent let &conceallevel = (&conceallevel+1)%4<CR>
2019-07-23 17:59:01 +02:00
set conceallevel=0
2018-02-20 12:27:46 +01:00
set concealcursor=nvc
let g:tex_conceal="abdmgs"
" nice pluginless stuff
set path+=**
set wildmenu
" Tag generation
2020-03-28 11:47:31 +01:00
command! MakeTags !${universal-ctags}/bin/ctags -R .
2018-02-20 12:27:46 +01:00
" Less noise in netrw
let g:netrw_altv=1
let g:netrw_banner=0
let g:netrw_browse_split=4
let g:netrw_list_hide=netrw_gitignore#Hide()
let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
let g:netrw_liststyle=3
let g:netrw_winsize=25
" Normal backspace
set backspace=indent,eol,start
" Set filetype tex for tikz files
au BufNewFile,BufRead *.tikz set filetype=tex
" Thx Mats for the following
:cnoremap <C-A> <Home>
:cnoremap <C-B> <Left>
:cnoremap <C-F> <Right>
:cnoremap <C-E> <End>
" NERDTree when starting
"autocmd vimenter * NERDTree
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
2018-08-24 11:37:58 +02:00
2018-12-05 12:20:06 +01:00
" SmartCase (only search by case if capital letter is used)
2018-08-24 11:37:58 +02:00
set ignorecase
set smartcase
2018-12-05 12:20:06 +01:00
" Allow for more than 10 tabs to be opened at once
set tabpagemax=40
2019-07-13 10:10:25 +02:00
" Help ledger
2019-07-13 10:34:26 +02:00
let g:ledger_bin = '${hledger}/bin/hledger'
let g:ledger_extra_options = '--pedantic --explicit --check-payees'
2019-09-05 14:25:14 +02:00
" Virtual Edit maaan
set ve=block
2020-03-05 18:33:06 +01:00
2020-11-24 09:20:33 +01:00
" Read Vagrantfile as ruby source
2020-11-26 16:00:03 +01:00
augroup vagrant
au!
au BufRead,BufNewFile Vagrantfile set filetype=ruby
augroup END
2020-11-26 10:20:48 +01:00
2021-04-14 11:17:54 +02:00
" Haskell Language Server
if executable('dhall-lsp-server')
au User lsp_setup call lsp#register_server({
\ 'name': 'dhall-lsp',
\ 'cmd': {server_info->['dhall-lsp-server']},
\ 'allowlist': ['dhall'],
\ })
endif
if executable('haskell-language-server-wrapper')
au User lsp_setup call lsp#register_server({
\ 'name': 'haskell-lsp',
\ 'cmd': {server_info->['haskell-language-server-wrapper', '--lsp']},
\ 'allowlist': ['haskell'],
\ })
endif
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> [g <Plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <Plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
nmap <buffer> <leader>a <plug>(lsp-code-action)
nmap <buffer> <leader>dd <plug>(lsp-document-diagnostics)
" refer to doc to add more commands
endfunction
augroup lsp_install
au!
" call s:on_lsp_buffer_enabled only for languages that has the server registered.
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
2021-12-21 09:17:02 +01:00
" Use down window FZF
let g:fzf_layout = { 'down': '40%' }
2021-12-21 08:48:16 +01:00
2020-03-05 18:33:06 +01:00
" Extra options
${extraOptions}
'';
2018-02-20 12:27:46 +01:00
}
2020-10-31 18:25:45 +01:00
# " vimwiki stuff
# " let g:vimwiki_global_ext = 0
# " let g:vimwiki_conceallevel = 0
# " let g:vimwiki_auto_chdir = 1
# " let g:vimwiki_list = [
# " \{'path': '~/zk/'},
# " \{'path': '~/vimwiki/personal.wiki'}
# " \]
# " :autocmd FileType vimwiki map <leader>d :VimwikiMakeDiaryNote
# " :autocmd FileType vimwiki Goyo 80x20
# "
# " function! ToggleCalendar()
# " execute ":Calendar"
# " if exists("g:calendar_open")
# " if g:calendar_open == 1
# " execute "q"
# " unlet g:calendar_open
# " else
# " g:calendar_open = 1
# " end
# " else
# " let g:calendar_open = 1
# " end
# " endfunction
# " :autocmd FileType vimwiki map <leader>c :call ToggleCalendar()