2016-02-14 15:43:44 +00:00
|
|
|
|
{ config, lib, pkgs, ... }:
|
2015-11-01 09:50:03 +00:00
|
|
|
|
|
2016-10-20 18:54:38 +00:00
|
|
|
|
with import <stockholm/lib>;
|
2017-01-05 20:03:23 +00:00
|
|
|
|
let {
|
|
|
|
|
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
|
|
|
|
};
|
|
|
|
|
|
2022-12-05 14:10:15 +00:00
|
|
|
|
extra-runtimepath = pkgs.tv.vim.makeRuntimePath [
|
2019-05-21 19:51:13 +00:00
|
|
|
|
pkgs.tv.vimPlugins.elixir
|
2019-05-21 19:53:17 +00:00
|
|
|
|
pkgs.tv.vimPlugins.file-line
|
2019-05-21 19:48:36 +00:00
|
|
|
|
pkgs.tv.vimPlugins.fzf
|
2019-05-21 19:55:28 +00:00
|
|
|
|
pkgs.tv.vimPlugins.hack
|
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
|
2016-02-27 11:10:57 +00:00
|
|
|
|
pkgs.vimPlugins.undotree
|
2021-12-21 11:48:51 +00:00
|
|
|
|
pkgs.vimPlugins.vim-nftables
|
2016-02-27 11:10:57 +00:00
|
|
|
|
];
|
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
|
|
|
|
|
2015-11-01 09:50:03 +00:00
|
|
|
|
vimrc = pkgs.writeText "vimrc" ''
|
|
|
|
|
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>
|
2021-01-26 01:52:31 +00:00
|
|
|
|
set runtimepath=${extra-runtimepath},$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
|
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
|
|
|
|
|
|
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
|
|
|
|
syntax on
|
|
|
|
|
|
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>
|
|
|
|
|
inoremap <f1> <esc>:tabp<cr>
|
|
|
|
|
inoremap <f2> <esc>:tabn<cr>
|
|
|
|
|
|
2019-02-16 18:30:37 +00:00
|
|
|
|
noremap <f3> :ShowSyntax<cr>
|
|
|
|
|
|
2015-11-01 09:50:03 +00:00
|
|
|
|
" <C-{Up,Down,Right,Left>
|
|
|
|
|
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>
|
|
|
|
|
" <[C]S-{Up,Down,Right,Left>
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
" 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
|
|
|
|
|
|
|
|
|
" edit alternate buffer
|
|
|
|
|
" For some reason neither putting <ctrl>6 nor <ctrl>^ works here...
|
|
|
|
|
nnoremap <esc>a
|
2015-11-01 09:50:03 +00:00
|
|
|
|
'';
|
2017-01-05 20:03:23 +00:00
|
|
|
|
}
|