about summary refs log tree commit diff
path: root/modules/common/vim
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2023-07-03 11:27:19 +0300
committerAzat Bahawi <azat@bahawi.net>2023-07-03 11:27:19 +0300
commitc80598d4e4ffea73647b2ea8440a6080596968fe (patch)
treea6ca4bb82ec20df18022988fa359126fc877d5da /modules/common/vim
parent2023-06-21 (diff)
2023-07-03
Diffstat (limited to '')
-rw-r--r--modules/common/vim/default.nix62
-rw-r--r--modules/common/vim/rc.vim140
2 files changed, 56 insertions, 146 deletions
diff --git a/modules/common/vim/default.nix b/modules/common/vim/default.nix
index 2ee8a0b..3755201 100644
--- a/modules/common/vim/default.nix
+++ b/modules/common/vim/default.nix
@@ -7,43 +7,37 @@
 with lib; let
   cfg = config.nixfiles.modules.vim;
 in {
-  options.nixfiles.modules.vim.enable = mkEnableOption "Vim";
+  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 {
-    programs.vim.package = with pkgs;
-      (vim_configurable.override {
-        features = "normal";
-        cscopeSupport = false;
-        darwinSupport = pkgs.stdenv.isDarwin;
-        guiSupport = false;
-        luaSupport = false;
-        multibyteSupport = false;
-        netbeansSupport = false;
-        nlsSupport = false;
-        perlSupport = false;
-        pythonSupport = false;
-        rubySupport = false;
-        tclSupport = false;
-        ximSupport = false;
-      })
-      .customize {
-        name = "vim";
-        vimrcConfig = {
-          customRC = readFile ./rc.vim;
-          packages.myVimPackage.start = with vimPlugins; [
-            editorconfig-vim
-            vim-eunuch
-            vim-nix
-            vim-sleuth
-            vim-surround
-            vim-unimpaired
-          ];
-        };
+    environment = with config.programs.vim; {
+      systemPackages = [package];
+      variables = rec {
+        EDITOR = mkOverride 100 "${package}/bin/vim";
+        VISUAL = EDITOR;
       };
-
-    environment = {
-      systemPackages = [config.programs.vim.package];
-      variables.EDITOR = mkOverride 100 "vim";
     };
   };
 }
diff --git a/modules/common/vim/rc.vim b/modules/common/vim/rc.vim
index 945643a..3bd9eb7 100644
--- a/modules/common/vim/rc.vim
+++ b/modules/common/vim/rc.vim
@@ -1,38 +1,31 @@
-set nocompatible
-
 let $VIMFILES = expand('<sfile>:p:h')
 
 let g:skip_defaults_vim = 1
 
 let g:netrw_dirhistmax = 0
 
-set autoread
-set backspace=indent,eol,start
+if has('unnamedplus')
+    set clipboard^=unnamedplus
+else
+    set clipboard^=unnamed
+endif
 
-set clipboard=unnamedplus
+set backspace=indent,eol,start
 set diffopt+=iwhite
 set hidden
-set history=256
 set lazyredraw
 set mouse=
 set path+=**
-set tabpagemax=50
 set viminfo=
 
 set cmdheight=1
-set display+=lastline
 set fillchars=vert:\ "
-set laststatus=2
 set modeline
 set noshowmode
-set ruler
 set shortmess+=I
 set textwidth=0
 set title
 
-set sessionoptions-=options
-set viewoptions-=options
-
 set noerrorbells
 set novisualbell
 
@@ -49,7 +42,6 @@ set completeopt+=longest
 
 set gdefault
 set hlsearch
-set incsearch
 set iskeyword+=-
 set magic
 
@@ -75,7 +67,6 @@ if v:version >= 700
 endif
 
 set wildignorecase
-set wildmenu
 set wildignore=
 
 set nobackup
@@ -97,65 +88,10 @@ set smarttab
 set softtabstop=4
 set tabstop=4
 
-autocmd BufEnter *.* :set colorcolumn=
-
-if &t_Co == 8 && $TERM !~# '^Eterm'
-    set t_Co=16
-endif
-
-if &listchars ==# 'eol:$'
-    set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+
-endif
+set colorcolumn=
+let g:EditorConfig_max_line_indicator = "none"
 
-if v:version > 703 || v:version == 703 && has("patch541")
-    set formatoptions+=j
-endif
-
-if has('path_extra')
-    setglobal tags-=./tags tags-=./tags; tags^=./tags;
-endif
-
-if !has('nvim') && &ttimeoutlen == -1
-    set ttimeout
-    set ttimeoutlen=100
-endif
-
-try
-    set encoding=utf-8
-    scriptencoding utf-8
-catch
-endtry
-
-try
-    if &fileencodings !~? "utf-8"
-        let g:added_fenc_utf8 = 1
-        set fileencodings+=utf-8
-    endif
-catch
-endtry
-
-if has('autocmd')
-    filetype plugin indent on
-
-    if exists("+omnifunc")
-        autocmd Filetype *
-                    \ if &omnifunc == "" |
-                    \ setlocal omnifunc=syntaxcomplete#Complete |
-                    \ endif
-    endif
-
-    autocmd BufEnter * set noreadonly
-endif
-
-if has('syntax') && !exists('g:syntax_on')
-    syntax enable
-endif
-
-if !exists('g:loaded_matchit') && findfile('plugin/matchit.vim', &rtp) ==# ''
-    runtime! macros/matchit.vim
-endif
-
-nnoremap        <SPACE>     <nop>
+nnoremap        <Space>     <Nop>
 let mapleader=" "
 
 nnoremap        :W          :w
@@ -163,27 +99,27 @@ nnoremap        :W!         :w!
 nnoremap        :Q          :q
 nnoremap        :Q!         :q!
 
-nnoremap <Expr> j           v:count ? 'j' : 'gj'
-nnoremap <Expr> k           v:count ? 'k' : 'gk'
+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        <C-A>       ^h
+vnoremap        <C-A>       ^h
 nnoremap        H           ^h
 vnoremap        H           ^h
 
-nnoremap        <C-e>       $
-vnoremap        <C-e>       $
+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>
+inoremap        <C-U>       <C-g>u<C-u>
+inoremap        <C-W>       <C-g>u<C-w>
 
 vnoremap        <           <gv
 vnoremap        >           >gv
@@ -192,24 +128,22 @@ vnoremap        <S-Tab>     <gv
 nnoremap        <Tab>       >>_
 nnoremap        <S-Tab>     <<_
 
-nnoremap        ]b          :<C-u>bnext<CR>
-nnoremap        [b          :<C-u>bprevious<CR>
+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-l>       <C-w>l
+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>
 
-nnoremap        <C-L>       :<C-u>nohlsearch<C-r>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-l>
-
 cnoremap        ;/          <C-r>=expand('%:p:h').'/'<CR>
 cnoremap        ;;          <C-r>=expand('%:t')<CR>
 cnoremap        ;.          <C-r>=expand('%:p:r')<CR>
 
-nnoremap        <Leader>.   :<C-u>lcd %:p:h<CR>
+nnoremap        <Leader>.   :lcd %:p:h<CR>
 
 nnoremap        Q           @q
 
@@ -225,29 +159,11 @@ nnoremap        <Leader>P   "+P
 inoremap        <C-v>       <C-c>"+pi
 cnoremap        <C-v>       <C-r>+
 
-nmap            <Leader>w   :<C-u>w!<CR>
-nmap            <Leader>wq  :<C-u>wq!<CR>
+nmap            <Leader>w   :w!<CR>
+nmap            <Leader>wq  :wq!<CR>
 
-nnoremap        ZX          :<C-u>qa!<CR>
+nnoremap        ZX          :qa!<CR>
 
-nnoremap        <Leader>q   :<C-u>q<CR>
+nnoremap        <Leader>q   :q<CR>
 
 command         WS          w !sudo tee "%" >/dev/null
-
-function! SwitchCase()
-    normal! ~
-    if strlen(getline('.')) != virtcol('.')
-        normal! h
-    endif
-endfunction
-nnoremap        ~           :<C-u>call SwitchCase()<CR>
-
-function! s:GM()
-    execute 'normal! ^'
-    let first_col = virtcol('.')
-    execute 'normal! g_'
-    let last_col  = virtcol('.')
-    execute 'normal! ' . (first_col + last_col) / 2 . '|'
-endfunction
-nnoremap        gm          :<C-u>call <SID>GM()<CR>
-onoremap        gm          :<C-u>call <SID>GM()<CR>

Consider giving Nix/NixOS a try! <3