about summary refs log tree commit diff
path: root/modules/vim
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/vim
parent2024-04-18 (diff)
2024-04-21
Diffstat (limited to 'modules/vim')
-rw-r--r--modules/vim/default.nix71
-rw-r--r--modules/vim/rc.vim169
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

Consider giving Nix/NixOS a try! <3