diff options
Diffstat (limited to 'modules/vim')
-rw-r--r-- | modules/vim/default.nix | 71 | ||||
-rw-r--r-- | modules/vim/rc.vim | 169 |
2 files changed, 240 insertions, 0 deletions
diff --git a/modules/vim/default.nix b/modules/vim/default.nix new file mode 100644 index 0000000..94cc7af --- /dev/null +++ b/modules/vim/default.nix @@ -0,0 +1,71 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +let + cfg = config.nixfiles.modules.vim; +in +{ + options.nixfiles.modules.vim = { + enable = mkEnableOption "Vim"; + + rc = mkOption { + type = types.str; + default = readFile ./rc.vim; + description = "Configuration file."; + }; + + plugins = mkOption { + type = with types; listOf package; + default = with pkgs.vimPlugins; [ + editorconfig-vim + vim-eunuch + vim-nix + vim-sensible + vim-sleuth + vim-surround + vim-unimpaired + ]; + description = "Plugins."; + }; + }; + + config = mkIf cfg.enable { + hm.stylix.targets.vim.enable = false; + + programs.vim.package = + (pkgs.vim-full.override { + cscopeSupport = false; + darwinSupport = false; + features = "normal"; + guiSupport = "gtk3"; + luaSupport = false; + multibyteSupport = false; + netbeansSupport = false; + nlsSupport = false; + perlSupport = false; + pythonSupport = false; + rubySupport = false; + tclSupport = false; + ximSupport = false; + }).customize + { + name = "vim"; + vimrcConfig = with cfg; { + customRC = rc; + packages.myVimPackage.start = plugins; + }; + }; + + environment = { + systemPackages = [ config.programs.vim.package ]; + variables = rec { + EDITOR = "vim"; + VISUAL = EDITOR; + }; + }; + }; +} diff --git a/modules/vim/rc.vim b/modules/vim/rc.vim new file mode 100644 index 0000000..3bd9eb7 --- /dev/null +++ b/modules/vim/rc.vim @@ -0,0 +1,169 @@ +let $VIMFILES = expand('<sfile>:p:h') + +let g:skip_defaults_vim = 1 + +let g:netrw_dirhistmax = 0 + +if has('unnamedplus') + set clipboard^=unnamedplus +else + set clipboard^=unnamed +endif + +set backspace=indent,eol,start +set diffopt+=iwhite +set hidden +set lazyredraw +set mouse= +set path+=** +set viminfo= + +set cmdheight=1 +set fillchars=vert:\ " +set modeline +set noshowmode +set shortmess+=I +set textwidth=0 +set title + +set noerrorbells +set novisualbell + +set splitbelow +set splitright + +set complete= +set complete+=. +set complete+=b +set complete+=t +set completeopt= +set completeopt+=menu +set completeopt+=longest + +set gdefault +set hlsearch +set iskeyword+=- +set magic + +set foldmethod=marker +set nofoldenable + +set shortmess= +set shortmess+=I +set shortmess+=T +set shortmess+=a +set shortmess+=c +set shortmess+=t + +set nolist +set nowrap + +set scrolloff=10 +set sidescrolloff=10 + +set number +if v:version >= 700 + set numberwidth=3 +endif + +set wildignorecase +set wildignore= + +set nobackup +set noswapfile +set noundofile +set nowritebackup + +set smartcase +set ignorecase + +set autoindent +set breakindent +set smartindent + +set expandtab +set shiftround +set shiftwidth=4 +set smarttab +set softtabstop=4 +set tabstop=4 + +set colorcolumn= +let g:EditorConfig_max_line_indicator = "none" + +nnoremap <Space> <Nop> +let mapleader=" " + +nnoremap :W :w +nnoremap :W! :w! +nnoremap :Q :q +nnoremap :Q! :q! + +nnoremap <expr> j v:count ? 'j' : 'gj' +nnoremap <expr> k v:count ? 'k' : 'gk' + +nnoremap J gt +nnoremap K gT + +nnoremap <C-A> ^h +vnoremap <C-A> ^h +nnoremap H ^h +vnoremap H ^h + +nnoremap <C-E> $ +vnoremap <C-E> $ +nnoremap L $ +vnoremap L $ + +nnoremap N Nzzzv +nnoremap n nzzzv + +inoremap <C-U> <C-g>u<C-u> +inoremap <C-W> <C-g>u<C-w> + +vnoremap < <gv +vnoremap > >gv +vnoremap <Tab> >gv +vnoremap <S-Tab> <gv +nnoremap <Tab> >>_ +nnoremap <S-Tab> <<_ + +nnoremap ]b :bnext<CR> +nnoremap [b :bprevious<CR> + +nnoremap <C-H> <C-w>h +nnoremap <C-J> <C-w>j +nnoremap <C-K> <C-w>k +nnoremap <C-R> <C-w>l + +nnoremap * /\<<C-r>=expand('<cword>')<CR>\><CR> +nnoremap # ?\<<C-r>=expand('<cword>')<CR>\><CR> + +cnoremap ;/ <C-r>=expand('%:p:h').'/'<CR> +cnoremap ;; <C-r>=expand('%:t')<CR> +cnoremap ;. <C-r>=expand('%:p:r')<CR> + +nnoremap <Leader>. :lcd %:p:h<CR> + +nnoremap Q @q + +nnoremap <Leader>c ^v$h +nnoremap <Leader>v ggVG + +nnoremap <Leader>y "+y +nnoremap <Leader>Y "+Y + +nnoremap <Leader>p "+p +nnoremap <Leader>P "+P + +inoremap <C-v> <C-c>"+pi +cnoremap <C-v> <C-r>+ + +nmap <Leader>w :w!<CR> +nmap <Leader>wq :wq!<CR> + +nnoremap ZX :qa!<CR> + +nnoremap <Leader>q :q<CR> + +command WS w !sudo tee "%" >/dev/null |