diff options
author | Azat Bahawi <azat@bahawi.net> | 2024-06-24 11:10:21 +0300 |
---|---|---|
committer | Azat Bahawi <azat@bahawi.net> | 2024-06-24 11:10:21 +0300 |
commit | 75918debfd7245d90478f882b0323a705ab3c7be (patch) | |
tree | 26b8f0ab5a3e4d7c61963fa96d57250e5ddc9a7d /modules/vim.nix | |
parent | 2024-06-19 (diff) |
2024-06-24
Diffstat (limited to '')
-rw-r--r-- | modules/vim.nix | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/modules/vim.nix b/modules/vim.nix new file mode 100644 index 0000000..7209e8b --- /dev/null +++ b/modules/vim.nix @@ -0,0 +1,208 @@ +{ + config, + lib, + pkgs, + this, + ... +}: +with lib; +let + cfg = config.nixfiles.modules.vim; +in +{ + options.nixfiles.modules.vim.enable = mkEnableOption "Vim"; + + config = mkIf cfg.enable { + hm.stylix.targets.vim.enable = false; + + programs.vim = { + package = mkIf this.isHeadful ( + pkgs.vim-full.customize { + name = "vim"; + vimrcConfig = with cfg; { + customRC = '' + 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 diffopt+=iwhite + set hidden + set lazyredraw + set mouse= + set path+=** + + 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 + ''; + packages.myVimPackage.start = with pkgs.vimPlugins; [ + editorconfig-vim + vim-eunuch + vim-nix + vim-sensible + vim-sleuth + vim-surround + vim-unimpaired + ]; + }; + } + ); + + defaultEditor = true; + }; + }; +} |