148 lines
3.9 KiB
Nix
148 lines
3.9 KiB
Nix
{ lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
let
|
|
out = {
|
|
environment.systemPackages = [
|
|
vim
|
|
];
|
|
|
|
# Nano really is just a stupid name for Vim.
|
|
nixpkgs.config.packageOverrides = pkgs: {
|
|
nano = pkgs.vim;
|
|
};
|
|
|
|
environment.etc.vimrc.source = vimrc;
|
|
|
|
environment.variables.EDITOR = mkForce "vim";
|
|
environment.variables.VIMINIT = ":so /etc/vimrc";
|
|
};
|
|
|
|
extra-runtimepath = concatStringsSep "," [
|
|
"${pkgs.vimPlugins.undotree}/share/vim-plugins/undotree"
|
|
];
|
|
|
|
dirs = {
|
|
backupdir = "$HOME/.cache/vim/backup";
|
|
swapdir = "$HOME/.cache/vim/swap";
|
|
undodir = "$HOME/.cache/vim/undo";
|
|
};
|
|
files = {
|
|
viminfo = "$HOME/.cache/vim/info";
|
|
};
|
|
|
|
mkdirs = let
|
|
dirOf = s: let out = concatStringsSep "/" (init (splitString "/" s));
|
|
in assert out != ""; out;
|
|
alldirs = attrValues dirs ++ map dirOf (attrValues files);
|
|
in unique (sort lessThan alldirs);
|
|
|
|
vim = pkgs.writeScriptBin "vim" ''
|
|
#! ${pkgs.dash}/bin/dash
|
|
set -f
|
|
umask 0077
|
|
${concatStringsSep "\n" (map (x: "mkdir -p ${x}") mkdirs)}
|
|
umask 0022
|
|
exec ${pkgs.vim}/bin/vim "$@"
|
|
'';
|
|
|
|
vimrc = pkgs.writeText "vimrc" ''
|
|
set nocompatible
|
|
|
|
set autoindent
|
|
set backspace=indent,eol,start
|
|
set backup
|
|
set backupdir=${dirs.backupdir}/
|
|
set directory=${dirs.swapdir}//
|
|
set hlsearch
|
|
set incsearch
|
|
set mouse=a
|
|
set noruler
|
|
set pastetoggle=<INS>
|
|
set runtimepath=${extra-runtimepath},$VIMRUNTIME
|
|
set shortmess+=I
|
|
set showcmd
|
|
set showmatch
|
|
set ttimeoutlen=0
|
|
set undodir=${dirs.undodir}
|
|
set undofile
|
|
set undolevels=1000000
|
|
set undoreload=1000000
|
|
set viminfo='20,<1000,s100,h,n${files.viminfo}
|
|
set visualbell
|
|
set wildignore+=*.o,*.class,*.hi,*.dyn_hi,*.dyn_o
|
|
set wildmenu
|
|
set wildmode=longest,full
|
|
|
|
set et ts=2 sts=2 sw=2
|
|
|
|
filetype plugin indent on
|
|
|
|
set t_Co=256
|
|
colorscheme industry
|
|
syntax on
|
|
|
|
au Syntax * syn match Tabstop containedin=ALL /\t\+/
|
|
\ | hi Tabstop ctermbg=16
|
|
\ | syn match TrailingSpace containedin=ALL /\s\+$/
|
|
\ | hi TrailingSpace ctermbg=88
|
|
\ | hi Normal ctermfg=White
|
|
|
|
au BufRead,BufNewFile *.hs so ${pkgs.writeText "hs.vim" ''
|
|
syn region String start=+\[[^|]*|+ end=+|]+
|
|
''}
|
|
|
|
au BufRead,BufNewFile *.nix so ${pkgs.writeText "nix.vim" ''
|
|
setf nix
|
|
set isk=@,48-57,_,192-255,-,'
|
|
|
|
" Ref <nix/src/libexpr/lexer.l>
|
|
syn match INT /\<[0-9]\+\>/
|
|
syn match PATH /[a-zA-Z0-9\.\_\-\+]*\(\/[a-zA-Z0-9\.\_\-\+]\+\)\+/
|
|
syn match HPATH /\~\(\/[a-zA-Z0-9\.\_\-\+]\+\)\+/
|
|
syn match SPATH /<[a-zA-Z0-9\.\_\-\+]\+\(\/[a-zA-Z0-9\.\_\-\+]\+\)*>/
|
|
syn match URI /[a-zA-Z][a-zA-Z0-9\+\-\.]*:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']\+/
|
|
hi link INT Constant
|
|
hi link PATH Constant
|
|
hi link HPATH Constant
|
|
hi link SPATH Constant
|
|
hi link URI Constant
|
|
|
|
syn match String /"\([^\\"]\|\\.\)*"/
|
|
syn match Comment /\(^\|\s\)#.*/
|
|
''}
|
|
|
|
au BufRead,BufNewFile /dev/shm/* set nobackup nowritebackup noswapfile
|
|
|
|
nmap <esc>q :buffer
|
|
nmap <M-q> :buffer
|
|
|
|
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>
|
|
|
|
" <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>
|
|
'';
|
|
in
|
|
out
|