about summary refs log tree commit diff
path: root/modules/vim
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
parent2024-06-19 (diff)
2024-06-24
Diffstat (limited to '')
-rw-r--r--modules/vim.nix208
-rw-r--r--modules/vim/default.nix71
-rw-r--r--modules/vim/rc.vim169
3 files changed, 208 insertions, 240 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;
+    };
+  };
+}
diff --git a/modules/vim/default.nix b/modules/vim/default.nix
deleted file mode 100644
index 94cc7af..0000000
--- a/modules/vim/default.nix
+++ /dev/null
@@ -1,71 +0,0 @@
-{
-  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
deleted file mode 100644
index 3bd9eb7..0000000
--- a/modules/vim/rc.vim
+++ /dev/null
@@ -1,169 +0,0 @@
-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