summaryrefslogtreecommitdiff
path: root/modules/vim.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-06-24 11:10:21 +0300
committerAzat Bahawi <azat@bahawi.net>2024-06-24 11:10:21 +0300
commit75918debfd7245d90478f882b0323a705ab3c7be (patch)
tree26b8f0ab5a3e4d7c61963fa96d57250e5ddc9a7d /modules/vim.nix
parent9eb603b80a3d823acfc20c42f777ea26436ca137 (diff)
2024-06-24
Diffstat (limited to 'modules/vim.nix')
-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;
+ };
+ };
+}