From 1d38af20b74a4c92cbbe811217a40bc73706569d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Fri, 22 Mar 2019 13:42:12 +0100 Subject: [PATCH] vim: improve tooling --- configs/editors.nix | 86 +++++++++++++-- configs/packages.nix | 13 ++- configs/shells.nix | 2 +- dot/typora.nix | 5 - dot/vim.nix | 252 ------------------------------------------- dot/vimrc | 183 +++++++++++++++++++++++++++++++ main.nix | 1 - 7 files changed, 271 insertions(+), 271 deletions(-) delete mode 100644 dot/typora.nix delete mode 100644 dot/vim.nix create mode 100644 dot/vimrc diff --git a/configs/editors.nix b/configs/editors.nix index 64e1d0d..b35974e 100644 --- a/configs/editors.nix +++ b/configs/editors.nix @@ -1,10 +1,6 @@ { pkgs, config, ... }: let vimConfig = import ../dot/vim.nix { inherit config pkgs; }; in { - environment.variables.EDITOR = pkgs.lib.mkForce "nvim"; - environment.shellAliases.vi = "nvim"; - environment.shellAliases.view = "nvim -R"; - programs.nano.nanorc = '' set autoindent set boldtext @@ -14,17 +10,89 @@ in { set tabstospaces ''; + environment.variables.EDITOR = pkgs.lib.mkForce "nvim"; + environment.shellAliases.vi = "nvim"; + environment.shellAliases.vim = "nvim"; + environment.shellAliases.view = "nvim -R"; + environment.systemPackages = [pkgs.nvim]; + nixpkgs.config.packageOverrides = pkgs: { nvim = pkgs.neovim.override { configure = { - customRC = vimConfig.vimrc; + customRC = builtins.readFile ../dot/vimrc; packages.nvim = with pkgs.vimPlugins; { - start = vimConfig.startPackages; - opt = vimConfig.optPackages; + start = with pkgs.vimPlugins; [ + ale + deoplete-nvim + fzf-vim + fzfWrapper + supertab + tabular + vim-abolish + vim-airline vim-airline-themes + vim-commentary + vim-eunuch + vim-fugitive + vim-gitgutter + vim-pandoc vim-pandoc-after vim-pandoc-syntax + vim-repeat + vim-sensible + vim-startify + vim-surround + ]; + opt = [ + csv + deoplete-jedi + deoplete-rust + dhall-vim + elm-vim + haskell-vim + idris-vim + rust-vim + typescript-vim + vim-javascript + vim-nix + vimtex + (pkgs.vimUtils.buildVimPluginFrom2Nix { + name = "vim-ledger"; + src = pkgs.fetchFromGitHub { + owner = "ledger"; + repo = "vim-ledger"; + rev = "6eb3bb21aa979cc295d0480b2179938c12b33d0d"; + sha256 = "0rbwyaanvl2bqk8xm4kq8fkv8y92lpf9xx5n8gw54iij7xxhnj01"; + }; + }) + (pkgs.vimUtils.buildVimPluginFrom2Nix { + name = "vim-fsharp"; + src = pkgs.fetchFromGitHub { + owner = "fsharp"; + repo = "vim-fsharp"; + rev = "627db7d701747e8fd7924b6505c61e16a369fb72"; + sha256 = "00hhgn2p54faysx1ddccyhl9jnvddgxsczhv0np3mgzza6ls4838"; + }; + }) + (pkgs.vimUtils.buildVimPluginFrom2Nix { + name = "emmet-vim"; + src = pkgs.fetchFromGitHub { + owner = "mattn"; + repo = "emmet-vim"; + rev = "d698f1658770ca5fa58c87e80421c8d65bbe9065"; + sha256 = "0vl4267hh8g1vkvc3awlqyypgz4m1r43d47sldl80yamiafiviaj"; + }; + }) + (pkgs.vimUtils.buildVimPluginFrom2Nix { + name = "ghcid"; + src = "${(pkgs.fetchFromGitHub { + owner = "ndmitchell"; + repo = "ghcid"; + rev = "5288801e7f046c42972527cd94171ce893ba91cf"; + sha256 = "0dgxsl1dci6w3x662c7z1zw8yvfnch4ymhsvx29n7jkgqmcy1lki"; + }).out}/plugins/nvim"; + }) + + ]; }; }; }; }; - - environment.systemPackages = [pkgs.nvim]; } diff --git a/configs/packages.nix b/configs/packages.nix index f85707d..5b5b232 100644 --- a/configs/packages.nix +++ b/configs/packages.nix @@ -129,6 +129,7 @@ in with pkgs; (executables haskellPackages.pandoc-citeproc) (executables haskellPackages.patat) asciidoctor + proselint ] ++ [ # programming vscode tokei @@ -142,8 +143,10 @@ in with pkgs; (executables haskellPackages.cabal-install) (executables haskellPackages.ghcid) (executables haskellPackages.hakyll) + (executables haskellPackages.brittany) + (executables haskellPackages.hfmt) (executables haskellPackages.hasktags) - (executables haskellPackages.hindent) + # (executables haskellPackages.hindent) (executables haskellPackages.pointfree) (executables haskellPackages.pointful) (executables haskellPackages.hlint) @@ -159,10 +162,13 @@ in with pkgs; nodePackages.prettier ocaml python3 - python36Packages.black - python36Packages.flake8 + python3Packages.black + # python3Packages.yapf + python3Packages.flake8 + python3Packages.jedi ruby rustup + # rustracer scala shellcheck ] ++ [ # media @@ -194,6 +200,7 @@ in with pkgs; jo memo par + fzf pass qrencode sncli diff --git a/configs/shells.nix b/configs/shells.nix index 6e8e764..0935417 100644 --- a/configs/shells.nix +++ b/configs/shells.nix @@ -50,7 +50,7 @@ in { setopt INTERACTIVE_COMMENTS CORRECT setopt MULTIOS setopt AUTO_NAME_DIRS - setopt CDABLE_VARS + setopt AUTOCD CDABLE_VARS setopt HIST_IGNORE_ALL_DUPS setopt VI unsetopt NOMATCH diff --git a/dot/typora.nix b/dot/typora.nix deleted file mode 100644 index 5ed3092..0000000 --- a/dot/typora.nix +++ /dev/null @@ -1,5 +0,0 @@ -'' -body { - font-family: 'Linux Libertine O'; -} -'' diff --git a/dot/vim.nix b/dot/vim.nix deleted file mode 100644 index 0f8d2a8..0000000 --- a/dot/vim.nix +++ /dev/null @@ -1,252 +0,0 @@ -{ config, pkgs, ... }: -with import ../helpers.nix; -{ - startPackages = with pkgs.vimPlugins; [ - ale - ctrlp - deoplete-nvim - supertab - tabular - tagbar - vim-airline vim-airline-themes - vim-grepper - vim-commentary - vim-eunuch - vim-fugitive - vim-gitgutter - vim-pandoc vim-pandoc-after vim-pandoc-syntax - vim-repeat - vim-sensible - vim-startify - vim-surround - vim-abolish - ]; - optPackages = with pkgs.vimPlugins; [ - csv - elm-vim - dhall-vim - deoplete-rust - idris-vim - vimtex - # ghcmod-vim - rust-vim - typescript-vim - haskell-vim - vim-javascript - vim-nix - (pkgs.vimUtils.buildVimPluginFrom2Nix { - name = "vim-ledger"; - src = pkgs.fetchFromGitHub { - owner = "ledger"; - repo = "vim-ledger"; - rev = "6eb3bb21aa979cc295d0480b2179938c12b33d0d"; - sha256 = "0rbwyaanvl2bqk8xm4kq8fkv8y92lpf9xx5n8gw54iij7xxhnj01"; - }; - }) - (pkgs.vimUtils.buildVimPluginFrom2Nix { - name = "vim-fsharp"; - src = pkgs.fetchFromGitHub { - owner = "fsharp"; - repo = "vim-fsharp"; - rev = "627db7d701747e8fd7924b6505c61e16a369fb72"; - sha256 = "00hhgn2p54faysx1ddccyhl9jnvddgxsczhv0np3mgzza6ls4838"; - }; - }) - (pkgs.vimUtils.buildVimPluginFrom2Nix { - name = "vim-hindent"; - src = pkgs.fetchFromGitHub { - owner = "alx741"; - repo = "vim-hindent"; - rev = "f8e84c199fd00a3ccaf5bbbc97786bde9a4faa13"; - sha256 = "1y4nnz38zal1ffs5n751dn9p9apk8q7pq3cw79r5z6fsdp942ai6"; - }; - }) - (pkgs.vimUtils.buildVimPluginFrom2Nix { - name = "emmet-vim"; - src = pkgs.fetchFromGitHub { - owner = "mattn"; - repo = "emmet-vim"; - rev = "d698f1658770ca5fa58c87e80421c8d65bbe9065"; - sha256 = "0vl4267hh8g1vkvc3awlqyypgz4m1r43d47sldl80yamiafiviaj"; - }; - }) - (pkgs.vimUtils.buildVimPluginFrom2Nix { - name = "ghcid"; - src = "${(pkgs.fetchFromGitHub { - owner = "ndmitchell"; - repo = "ghcid"; - rev = "5288801e7f046c42972527cd94171ce893ba91cf"; - sha256 = "0dgxsl1dci6w3x662c7z1zw8yvfnch4ymhsvx29n7jkgqmcy1lki"; - }).out}/plugins/nvim"; - }) - ]; - vimrc = '' - " if tabular - vmap a= :Tabularize /= - vmap a; :Tabularize /:: - vmap a- :Tabularize /-> - - colorscheme delek - - filetype plugin indent on - set title - set nocompatible - set smartcase - set shiftwidth=2 tabstop=2 expandtab - set number - set path=$PWD/** - set completeopt=menu,longest - set wildmode=list:full wildignore+=${commaSep config.constants.ignore} - set shortmess+=aI - set nowritebackup noswapfile - set mouse=a - set showmatch - set encoding=utf8 ffs=unix,dos,mac - set smartindent - set nowrap - set nohlsearch - set clipboard=unnamedplus - set nopaste - set list listchars=tab:⇥\ ,extends:❯,precedes:❮,nbsp:␣,trail:· showbreak=↪ - set foldlevelstart=30 - - if exists("g:loaded_netrwPlugin") - let g:netrw_banner=0 - let g:netrw_browse_split=4 - let g:netrw_altv=1 " open splits to the right - let g:netrw_liststyle=3 " tree view - let g:netrw_list_hide=netrw_gitignore#Hide() - let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' - endif - - call matchadd('colorcolumn', '\%101v', 100) - highlight colorcolumn ctermbg=red - - " undofile - This allows you to use undos after exiting and restarting - " This, like swap and backups, uses .vim-undo first, then ~/.vim/undo - " :help undo-persistence - if exists("+undofile") - if isdirectory($HOME . '/.vim/undo') == 0 - :silent !mkdir -p ~/.vim/undo > /dev/null 2>&1 - endif - set undodir=./.vim-undo// - set undodir+=~/.vim/undo// - set undofile - endif - - nmap ddp | vmap xp`[V`] - nmap ddkP | vmap xkP`[V`] - - nnoremap @=(foldlevel('.')?'za':"\") - vnoremap zf - - command! RandomLine execute 'normal! '.(system('/bin/sh -c "echo -n $RANDOM"') % line('$')).'G' - - function! StripTrailingWhitespaces() - let _s=@/ - let l=line(".") - let c=col(".") - - %s/\s\+$//e - - let @/=_s - call cursor(l,c) - endfunction - - function! s:DiffWithSaved() - let filetype=&ft - diffthis - vnew | r # | normal! 1Gdd - diffthis - execute "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype - endfunction - command! DiffSaved call s:DiffWithSaved() - - if has("autocmd") - autocmd bufnewfile,bufread *.4th set filetype=forth - autocmd bufnewfile,bufread *.asm set filetype=nasm - autocmd bufnewfile,bufread *.c set keywordprg=man\ 3 - autocmd bufnewfile,bufread *.conf set filetype=conf - autocmd bufnewfile,bufread *.fs :packadd vim-fsharp | set filetype=fsharp - autocmd bufnewfile,bufread *.h set keywordprg=man\ 3 - autocmd bufnewfile,bufread *.md set filetype=markdown.pandoc | set nospell - autocmd bufnewfile,bufread *.nix :packadd vim-nix | set filetype=nix - autocmd bufnewfile,bufread *.rust :packadd rust-vim deoplete-rust - autocmd bufnewfile,bufread *.csv :packadd csv-vim - autocmd bufnewfile,bufread *.tex :packadd vimtex | set filetype=tex - autocmd bufnewfile,bufread *.ts :packadd vim-typescript - autocmd bufnewfile,bufread *.journal :packadd vim-ledger | set filetype=ledger shiftwidth=4 - autocmd bufnewfile,bufread config set filetype=conf - autocmd bufnewfile,bufread *.elm :packadd elm-vim | set filetype=elm shiftwidth=4 - autocmd bufnewfile,bufread *.dhall :packadd dhall-vim | set filetype=dhall - autocmd filetype haskell :packadd haskell-vim | :packadd vim-hindent | set formatprg=hindent | :packadd ghcid - autocmd filetype python set formatprg=black - autocmd filetype javascript *.js :packadd vim-javascript - autocmd filetype make setlocal noexpandtab - autocmd filetype html :packadd emmet-vim - autocmd filetype markdown,text set formatoptions+=t - autocmd filetype markdown,text set formatprg=par\ -w80 - autocmd filetype markdown,text set textwidth=80 - autocmd bufreadpost * - \ if line("'\"") > 0 && line("'\"") <= line("$") | - \ exe "normal! g`\"" | - \ endif - autocmd bufreadpre * setlocal foldmethod=indent - autocmd bufwritepre * :call StripTrailingWhitespaces() - autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif - endif - - if exists("g:loaded_startify") - let g:startify_custom_header = \'\' - endif - - if exists("g:loaded_deoplete") - let g:deoplete#enable_at_startup = 1 - endif - - if exists("g:loaded_supertab") - let g:SuperTabDefaultCompletionType = '' - endif - - let g:haskell_enable_quantification = 1 - let g:haskell_enable_recursivedo = 1 - let g:haskell_enable_arrowsyntax = 1 - let g:haskell_enable_pattern_synonyms = 1 - - if exists("g:loaded_ale") - let g:ale_linters.haskell = ['hlint'] - endif - - let g:hindent_on_save = 1 - let g:hindent_line_length = 100 - - if exists("g:loaded_grepper") - nnoremap ga :Grepper - nnoremap gb :Grepper -buffer - endif - - "if exists("g:loaded_airline") - set noshowmode laststatus=0 noruler - let g:airline#extensions#tabline#close_symbol = 'X' - let g:airline#extensions#tabline#enabled = 0 - "let g:airline#extensions#tabline#left_alt_sep = '' - "let g:airline#extensions#tabline#left_sep = '' - "let g:airline#extensions#tabline#right_alt_sep = '' - "let g:airline#extensions#tabline#right_sep = '' - let g:airline#extensions#tabline#show_close_button = 1 - let g:airline#extensions#tabline#show_tab_type = 0 - let g:airline#extensions#tabline#tab_min_count = 2 - let g:airline#extensions#tabline#tab_nr_type = 0 - let g:airline#extensions#tmuxline#enabled = 0 - "let g:airline#extensions#wordcount#enabled = 1 - "let g:airline_left_alt_sep = '' - "let g:airline_left_sep = '' - "let g:airline_right_alt_sep = '' - "let g:airline_right_sep = '' - let g:airline_section_z = '%{line(".")}/%{line("$")} %{col(".")}' - "endif - "if exists("g:loaded_airline_themes") - let g:airline_theme='base16' - "endif - ''; -} diff --git a/dot/vimrc b/dot/vimrc new file mode 100644 index 0000000..78ce56c --- /dev/null +++ b/dot/vimrc @@ -0,0 +1,183 @@ +" if tabular +vmap a= :Tabularize /= +vmap a; :Tabularize /:: +vmap a- :Tabularize /-> + +nnoremap :FZF +let g:fzf_layout = { 'down': '~15%' } + +colorscheme delek + +let mapleader = "," + +filetype plugin indent on +set title +set nocompatible +set smartcase +set shiftwidth=2 tabstop=2 expandtab +set number +set path=$PWD/** +set wildmenu +set shortmess+=aI +set nowritebackup noswapfile +set mouse=a +set showmatch +set encoding=utf8 ffs=unix,dos,mac +set smartindent +set nowrap +set nohlsearch +set clipboard=unnamedplus +set nopaste +set list listchars=tab:⇥\ ,extends:❯,precedes:❮,nbsp:␣,trail:· showbreak=↪ +set foldlevelstart=30 + +if exists("g:loaded_netrwPlugin") + let g:netrw_banner=0 + let g:netrw_browse_split=4 + let g:netrw_altv=1 " open splits to the right + let g:netrw_liststyle=3 " tree view + let g:netrw_list_hide=netrw_gitignore#Hide() + let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' +endif + +call matchadd('colorcolumn', '\%101v', 100) +highlight colorcolumn ctermbg=red + +" undofile - This allows you to use undos after exiting and restarting +" This, like swap and backups, uses .vim-undo first, then ~/.vim/undo +" :help undo-persistence +if exists("+undofile") + if isdirectory($HOME . '/.vim/undo') == 0 + :silent !mkdir -p ~/.vim/undo > /dev/null 2>&1 + endif + set undodir=./.vim-undo// + set undodir+=~/.vim/undo// + set undofile +endif + +nmap ddp | vmap xp`[V`] +nmap ddkP | vmap xkP`[V`] + +nnoremap @=(foldlevel('.')?'za':"\") +vnoremap zf + +command! RandomLine execute 'normal! '.(system('/bin/sh -c "echo -n $RANDOM"') % line('$')).'G' + +" function! StripTrailingWhitespaces() +" let _s=@/ +" let l=line(".") +" let c=col(".") + +" %s/\s\+$//e + +" let @/=_s +" call cursor(l,c) +" endfunction + +function! s:DiffWithSaved() + let filetype=&ft + diffthis + vnew | r # | normal! 1Gdd + diffthis + execute "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype +endfunction +command! DiffSaved call s:DiffWithSaved() + +if has("autocmd") + autocmd bufnewfile,bufread *.4th set filetype=forth + autocmd bufnewfile,bufread *.asm set filetype=nasm + autocmd bufnewfile,bufread *.c set keywordprg=man\ 3 + autocmd bufnewfile,bufread *.conf set filetype=conf + autocmd bufnewfile,bufread *.fs packadd vim-fsharp | set filetype=fsharp + autocmd bufnewfile,bufread *.h set keywordprg=man\ 3 + autocmd bufnewfile,bufread *.nix packadd vim-nix | set filetype=nix + autocmd bufnewfile,bufread *.rust packadd rust-vim | packadd deoplete-rust + autocmd bufnewfile,bufread *.csv packadd csv-vim + autocmd bufnewfile,bufread *.tex packadd vimtex | set filetype=tex + autocmd bufnewfile,bufread *.ts packadd vim-typescript + autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4 + autocmd bufnewfile,bufread config set filetype=conf + autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4 + autocmd bufnewfile,bufread *.dhall packadd dhall-vim | set filetype=dhall + autocmd filetype haskell packadd haskell-vim + autocmd filetype javascript packadd vim-javascript + autocmd filetype python packadd deoplete-jedi + autocmd filetype make setlocal noexpandtab + autocmd filetype html packadd emmet-vim + autocmd bufreadpost * + \ if line("'\"") > 0 && line("'\"") <= line("$") | + \ exe "normal! g`\"" | + \ endif + autocmd bufreadpre * setlocal foldmethod=indent + " autocmd bufwritepre * :call StripTrailingWhitespaces() + autocmd bufwinenter * if &fdm == 'indent' | setlocal foldmethod=manual | endif +endif + +"if exists("g:loaded_startify") +let g:startify_custom_header = '' +"endif + +" if exists("g:loaded_deoplete") +let g:deoplete#enable_at_startup = 1 +" endif +" +let g:deoplete#sources#rust#racer_binary = $HOME . '/.cargo/bin/racer' +let g:deoplete#sources#rust#rust_source_path = substitute(system('rustc --print sysroot'), '\n$', '', '') . '/lib/rustlib/src/rust/src' + +" if exists("g:loaded_supertab") +let g:SuperTabDefaultCompletionType = 'context' +" endif + +let g:haskell_enable_quantification = 1 +let g:haskell_enable_recursivedo = 1 +let g:haskell_enable_arrowsyntax = 1 +let g:haskell_enable_pattern_synonyms = 1 + +" if exists("g:loaded_ale") +let g:ale_linters = { + \ 'rust': ['cargo'], + \ 'haskell': ['ghc', 'cabal-ghc', 'hlint'], + \ 'html': ['tidy', 'proselint'], + \ 'latex': ['lacheck', 'chktex', 'proselint'], + \ 'pandoc': ['proselint'], + \} +let g:ale_fixers = { + \ '*': ['remove_trailing_lines', 'trim_whitespace'], + \ 'haskell': ['hfmt'], + \ 'javascript': ['prettier'], + \ 'typescript': ['prettier'], + \ 'css': ['prettier'], + \ 'html': ['prettier'], + \ 'markdown': ['prettier'], + \ 'pandoc': ['prettier'], + \ 'json': ['jq'], + \ 'python': ['black'], + \ 'rust': ['rustfmt'] + \} +let g:ale_fix_on_save = 1 +let g:ale_completion_enabled = 1 +" endif + +"if exists("g:loaded_airline") +set noshowmode laststatus=0 noruler +let g:airline#extensions#tabline#close_symbol = 'X' +let g:airline#extensions#tabline#enabled = 0 +"let g:airline#extensions#tabline#left_alt_sep = '' +"let g:airline#extensions#tabline#left_sep = '' +"let g:airline#extensions#tabline#right_alt_sep = '' +"let g:airline#extensions#tabline#right_sep = '' +let g:airline#extensions#tabline#show_close_button = 1 +let g:airline#extensions#tabline#show_tab_type = 0 +let g:airline#extensions#tabline#tab_min_count = 2 +let g:airline#extensions#tabline#tab_nr_type = 0 +let g:airline#extensions#tmuxline#enabled = 0 +"let g:airline#extensions#wordcount#enabled = 1 +"let g:airline_left_alt_sep = '' +"let g:airline_left_sep = '' +"let g:airline_right_alt_sep = '' +"let g:airline_right_sep = '' +let g:airline_section_z = '%{line(".")}/%{line("$")} %{col(".")}' +"endif +"if exists("g:loaded_airline_themes") +let g:airline_theme='base16' +"endif diff --git a/main.nix b/main.nix index 9a6b02f..c12a514 100644 --- a/main.nix +++ b/main.nix @@ -102,7 +102,6 @@ in { xdg.configFile = { "mpv/input.conf".text = import dot/mpv.nix; - "Typora/themes/base.user.css".text = import dot/typora.nix; "htop/htoprc".text = builtins.readFile dot/htoprc; "zathura/zathurarc".text = "set selection-clipboard clipboard"; };