diff --git a/home/home.nix b/home/home.nix index 0d0d0b6..da34058 100644 --- a/home/home.nix +++ b/home/home.nix @@ -378,4 +378,70 @@ in }; lfs.enable = true; }; + + # shell config + programs.zsh = { + enable = true; + enableSyntaxHighlighting = true; + history.ignoreSpace = true; + initExtra = '' + # Uncomment following line if you want red dots to be displayed while waiting for completion + COMPLETION_WAITING_DOTS="true" + ### Fix slowness of pastes with zsh-syntax-highlighting.zsh + pasteinit() { + OLD_SELF_INSERT=$\{$\{(s.:.)widgets[self-insert]}[2,3]} + zle -N self-insert url-quote-magic # I wonder if you'd need `.url-quote-magic`? + } + + pastefinish() { + zle -N self-insert $OLD_SELF_INSERT + } + zstyle :bracketed-paste-magic paste-init pasteinit + zstyle :bracketed-paste-magic paste-finish pastefinish + + # automatic rehash of path completion + zstyle ':completion:*' rehash true + + eval "$(${pkgs.thefuck}/bin/thefuck --alias)" + + ## helper functions + nixify() { + if [ ! -e ./.envrc ]; then + echo "eval \"$(lorri direnv)\"" > .envrc + direnv allow + fi + if [ ! -e shell.nix ]; then + cat > shell.nix <<'EOF' + with import {}; + mkShell { + buildInputs = [ + bashInteractive + ]; + } + EOF + ${EDITOR:-vim} default.nix + fi + } + + binpath() { + realpath $(${pkgs.which}/bin/which $1) + } + ''; + + + oh-my-zsh = { + enable = true; + theme = "bira"; + plugins = [ "git" "python" "systemd" "gpg-agent"]; + }; + }; + home.shellAliases = { + ip = "ip --color"; + ipb = "ip --color --brief"; + ll = "ls -l"; + wavesynth = "nix-shell -p sox --run 'play -n synth brownnoise synth pinknoise mix synth 0 0 0 15 40 80 trapezium amod 0.2 20'"; + }; + home.sessionVariables = { + EDITOR = "vim"; + }; } diff --git a/home/overlays.nix b/home/overlays.nix index 9b4e923..74aa9ce 100644 --- a/home/overlays.nix +++ b/home/overlays.nix @@ -27,10 +27,119 @@ vim-jinja ]; }; - vimrcConfig.customRC = - ''if filereadable($HOME . "/.vimrc") - source ~/.vimrc - endif + vimrcConfig.customRC = '' + " disable vim modelines for security reasons + set modelines=0 + set nomodeline + + " Uncomment the following to have Vim jump to the last position when + " reopening a file + if has("autocmd") + au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + endif + + set nocompatible + set hidden + + " automatically close preview window after suggestion + autocmd CompleteDone * pclose + + " Pathogen + "execute pathogen#infect() + "call pathogen#infect() + "call pathogen#helptags() + + set statusline=%<\ %n:%f\ %m%r%y%=%-35.(line:\ %l\ of\ %L,\ col:\ %c%V\ (%P)%) + filetype plugin indent on + + syntax on + + set number + set mouse=a + set mousehide + + set backspace=indent,eol,start + + set hlsearch + set showmatch + set incsearch + set autoindent + set history=1000 + " set cursorline + if has("unnamedplus") + set clipboard=unnamedplus + elseif has("clipboard") + set clipboard=unnamed + endif + + " set expandtab + set shiftwidth=4 + set tabstop=4 + set softtabstop=4 + + " enable truecolor support + "let &t_8f = "\[38;2;%lu;%lu;%lum" + "let &t_8b = "\[48;2;%lu;%lu;%lum" + "set termguicolors + " + "let base16colorspace=256 + + "colorscheme base16-tomorrow-night + "colorscheme Tomorrow-Night + "colorscheme base16-default-dark + + set background=dark + + " Use the same symbols as TextMate for tabstops and EOLs + set listchars=tab:▸\ ,eol:¬ + + " default tab completion with supertab + let g:SuperTabDefaultCompletionType = "context" + + + " LanguageClient + " Required for operations modifying multiple buffers like rename. + set hidden + nnoremap :call LanguageClient_contextMenu() + let g:LanguageClient_serverCommands = { 'haskell': ['hie-wrapper', '--lsp'] } + + " enable LanguageClient functions only if a server mapping exists + function LC_maps() + if has_key(g:LanguageClient_serverCommands, &filetype) + nnoremap K :call LanguageClient#textDocument_hover() + nnoremap gd :call LanguageClient#textDocument_definition() + nnoremap :call LanguageClient#textDocument_rename() + set omnifunc=LanguageClient#complete + set completefunc=LanguageClient#complete + endif + endfunction + + autocmd FileType * call LC_maps() + + au FileType python setlocal tabstop=4 expandtab shiftwidth=4 softtabstop=4 + au FileType haskell setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 + " haskell-vim + let g:haskell_enable_quantification = 1 " to enable highlighting of `forall` + let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec` + let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc` + let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern` + let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles + let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static` + let g:haskell_backpack = 1 " to enable highlighting of backpack keywords + au FileType markdown setlocal tabstop=4 expandtab shiftwidth=4 softtabstop=4 + au FileType nix setlocal tabstop=2 expandtab shiftwidth=2 softtabstop=2 + set ofu=syntaxcomplete#Complete + " nmap "+gP + " imap a + vmap "+y + + " ALE linter settings + let g:ale_linters = { 'python': ['flake8'] } + + " vim-pandoc settings + let g:pandoc#modules#disabled = ["spell"] + set textwidth=0 + set wrapmargin=0 ''; }; # build with debug symbols and in debug mode (less optimized)