about summary refs log tree commit diff
path: root/modules/vim.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/vim.nix208
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;
+    };
+  };
+}

Consider giving Nix/NixOS a try! <3