stockholm/tv/2configs/vim.nix

184 lines
4.7 KiB
Nix
Raw Normal View History

2022-12-09 00:31:56 +00:00
with import ./lib;
{ config, pkgs, ... }: let {
2017-01-05 20:03:23 +00:00
body = {
2015-11-01 09:50:03 +00:00
environment.systemPackages = [
2017-04-04 06:38:20 +00:00
vim-wrapper
2015-11-01 09:50:03 +00:00
];
2015-11-01 12:59:53 +00:00
environment.etc.vimrc.source = vimrc;
2015-11-01 09:50:03 +00:00
environment.variables.EDITOR = mkForce "vim";
2015-11-01 12:59:53 +00:00
environment.variables.VIMINIT = ":so /etc/vimrc";
2015-11-01 09:50:03 +00:00
};
base-plugins = [
2019-05-21 19:53:17 +00:00
pkgs.tv.vimPlugins.file-line
2019-05-21 19:55:28 +00:00
pkgs.tv.vimPlugins.hack
pkgs.vimPlugins.undotree
(pkgs.tv.vim.makePlugin (pkgs.write "vim-tv-base" {
"/ftplugin/haskell.vim".text = ''
if exists("g:vim_tv_ftplugin_haskell_loaded")
finish
endif
let g:vim_tv_ftplugin_haskell_loaded = 1
setlocal iskeyword+='
'';
}))
];
extra-plugins = [
pkgs.tv.vimPlugins.elixir
pkgs.tv.vimPlugins.fzf
2019-05-21 19:52:20 +00:00
pkgs.tv.vimPlugins.jq
2019-05-21 19:59:18 +00:00
pkgs.tv.vimPlugins.nix
2019-05-21 19:57:24 +00:00
pkgs.tv.vimPlugins.showsyntax
2019-05-21 19:58:16 +00:00
pkgs.tv.vimPlugins.tv
2019-05-21 19:56:25 +00:00
pkgs.tv.vimPlugins.vim
2018-11-15 09:43:28 +00:00
pkgs.vimPlugins.fzfWrapper
2021-12-21 11:48:51 +00:00
pkgs.vimPlugins.vim-nftables
];
2015-11-01 09:50:03 +00:00
2015-12-27 18:33:12 +00:00
dirs = {
backupdir = "$HOME/.cache/vim/backup";
swapdir = "$HOME/.cache/vim/swap";
undodir = "$HOME/.cache/vim/undo";
};
files = {
viminfo = "$HOME/.cache/vim/info";
};
2018-01-16 18:24:42 +00:00
need-dirs = let
2015-12-27 18:33:12 +00:00
dirOf = s: let out = concatStringsSep "/" (init (splitString "/" s));
in assert out != ""; out;
alldirs = attrValues dirs ++ map dirOf (attrValues files);
in unique (sort lessThan alldirs);
2017-06-20 17:30:14 +00:00
vim-wrapper = pkgs.symlinkJoin {
name = "vim";
paths = [
(pkgs.writeDashBin "vim" ''
set -efu
2018-11-15 09:43:28 +00:00
export FZF_DEFAULT_COMMAND='${pkgs.ripgrep}/bin/rg --files'
export PATH=$PATH:${makeBinPath [
pkgs.fzf
pkgs.ripgrep
]}
2018-01-16 18:24:42 +00:00
(umask 0077; exec ${pkgs.coreutils}/bin/mkdir -p ${toString need-dirs})
2017-07-12 21:51:49 +00:00
exec ${pkgs.vim}/bin/vim "$@"
2017-06-20 17:30:14 +00:00
'')
2017-07-12 21:51:49 +00:00
pkgs.vim
2017-06-20 17:30:14 +00:00
];
};
2015-12-27 18:33:12 +00:00
2023-01-17 00:04:45 +00:00
vimrc = pkgs.writeText "vimrc" /* vim */ ''
vim9script
2015-11-01 09:50:03 +00:00
set nocompatible
set autoindent
set backspace=indent,eol,start
set backup
2015-12-27 18:33:12 +00:00
set backupdir=${dirs.backupdir}/
set directory=${dirs.swapdir}//
2015-11-01 09:50:03 +00:00
set hlsearch
set incsearch
set mouse=a
2015-11-01 12:21:35 +00:00
set noruler
2015-11-01 09:50:03 +00:00
set pastetoggle=<INS>
set runtimepath=${pkgs.tv.vim.makeRuntimePath base-plugins},$VIMRUNTIME
2015-11-01 09:50:03 +00:00
set shortmess+=I
set showcmd
set showmatch
2018-11-16 16:06:20 +00:00
set timeoutlen=0
2015-11-01 09:50:03 +00:00
set ttimeoutlen=0
2022-12-09 03:58:02 +00:00
set ttymouse=sgr
2015-12-27 18:33:12 +00:00
set undodir=${dirs.undodir}
2015-11-01 09:50:03 +00:00
set undofile
set undolevels=1000000
set undoreload=1000000
2015-12-27 18:33:12 +00:00
set viminfo='20,<1000,s100,h,n${files.viminfo}
2015-11-01 09:50:03 +00:00
set visualbell
set wildignore+=*.o,*.class,*.hi,*.dyn_hi,*.dyn_o
set wildmenu
set wildmode=longest,full
set runtimepath^=${pkgs.tv.vim.makeRuntimePath extra-plugins}
syntax on
2015-11-04 23:31:14 +00:00
set et ts=2 sts=2 sw=2
2015-11-01 09:50:03 +00:00
filetype plugin indent on
2015-11-01 12:17:11 +00:00
set t_Co=256
2016-06-09 02:22:46 +00:00
colorscheme hack
2015-11-01 09:50:03 +00:00
2016-06-10 11:54:50 +00:00
au Syntax * syn match Garbage containedin=ALL /\s\+$/
\ | syn match TabStop containedin=ALL /\t\+/
\ | syn keyword Todo containedin=ALL TODO
2015-11-01 09:50:03 +00:00
2016-06-30 01:20:23 +00:00
au BufRead,BufNewFile *.nix set ft=nix
2015-11-01 12:13:07 +00:00
2015-11-01 12:22:43 +00:00
au BufRead,BufNewFile /dev/shm/* set nobackup nowritebackup noswapfile
2015-11-01 09:50:03 +00:00
cnoremap <C-A> <Home>
noremap <C-c> :q<cr>
nnoremap <esc>[5^ :tabp<cr>
nnoremap <esc>[6^ :tabn<cr>
nnoremap <esc>[5@ :tabm -1<cr>
nnoremap <esc>[6@ :tabm +1<cr>
nnoremap <f1> :tabp<cr>
nnoremap <f2> :tabn<cr>
2023-01-16 10:04:51 +00:00
imap <f1> <esc><f1>
imap <f2> <esc><f2>
2015-11-01 09:50:03 +00:00
2023-01-16 10:05:41 +00:00
nnoremap <S-f1> :tabm -1<cr>
nnoremap <S-f2> :tabm +1<cr>
imap <S-f1> <esc><S-f1>
imap <S-f2> <esc><S-f2>
2019-02-16 18:30:37 +00:00
noremap <f3> :ShowSyntax<cr>
2023-01-17 00:04:45 +00:00
# <C-{Up,Down,Right,Left}>
2015-11-01 09:50:03 +00:00
noremap <esc>Oa <nop> | noremap! <esc>Oa <nop>
noremap <esc>Ob <nop> | noremap! <esc>Ob <nop>
noremap <esc>Oc <nop> | noremap! <esc>Oc <nop>
noremap <esc>Od <nop> | noremap! <esc>Od <nop>
2023-01-17 00:04:45 +00:00
# <[C]S-{Up,Down,Right,Left}>
2015-11-01 09:50:03 +00:00
noremap <esc>[a <nop> | noremap! <esc>[a <nop>
noremap <esc>[b <nop> | noremap! <esc>[b <nop>
noremap <esc>[c <nop> | noremap! <esc>[c <nop>
noremap <esc>[d <nop> | noremap! <esc>[d <nop>
vnoremap u <nop>
2018-11-15 09:43:28 +00:00
2023-01-17 00:04:45 +00:00
# fzf
2021-01-22 19:39:25 +00:00
nnoremap <esc>q :Buffers<cr>
nnoremap <esc>f :Files<cr>
2018-11-15 09:43:28 +00:00
nnoremap <esc>w :Rg<cr>
2018-11-15 09:45:22 +00:00
2023-01-17 00:04:45 +00:00
# edit alternate buffer
# For some reason neither putting <ctrl>6 nor <ctrl>^ works here...
2018-11-15 09:45:22 +00:00
nnoremap <esc>a 
2023-01-17 00:04:45 +00:00
if $TOUCHSCREEN == "1"
nnoremap <ScrollWheelUp> <C-y>
nnoremap <ScrollWheelDown> <C-e>
nnoremap <C-ScrollWheelUp> 3<C-y>
nnoremap <C-ScrollWheelDown> 3<C-e>
nnoremap <S-ScrollWheelUp> 3<C-y>
nnoremap <S-ScrollWheelDown> 3<C-e>
nnoremap <C-S-ScrollWheelUp> <PageUp>
nnoremap <C-S-ScrollWheelDown> <PageDown>
endif
2023-01-17 00:05:26 +00:00
# remember last position
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
2015-11-01 09:50:03 +00:00
'';
2017-01-05 20:03:23 +00:00
}