diff --git a/hosts/p14s/home.nix b/hosts/p14s/home.nix index 3fa8cc6..1ef7302 100644 --- a/hosts/p14s/home.nix +++ b/hosts/p14s/home.nix @@ -18,6 +18,7 @@ imports = [ #../../modules/home-manager/firefox.nix ../../modules/home-manager/xfce-home.nix + ../../modules/home-manager/neovim.nix ]; # The home.packages option allows you to install Nix packages into your @@ -202,7 +203,6 @@ # # symlink to the Nix store copy. # ".screenrc".source = dotfiles/screenrc; ".config/alacritty/alacritty.toml".source = ../../modules/dotfiles/alacritty.toml; - ".config/nvim/init.vim".source = ../../modules/dotfiles/init.vim; ".config/redshift/redshift.conf".source = ../../modules/dotfiles/redshift.conf; diff --git a/modules/dotfiles/init.vim b/modules/dotfiles/init.vim deleted file mode 100644 index 2f9081d..0000000 --- a/modules/dotfiles/init.vim +++ /dev/null @@ -1,397 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Maintainer: -" Amir Salihefendic — @amix3k -" -" Awesome_version: -" Get this config, nice color schemes and lots of plugins! -" -" Install the awesome version from: -" -" https://github.com/amix/vimrc -" -" Sections: -" -> General -" -> VIM user interface -" -> Colors and Fonts -" -> Files and backups -" -> Text, tab and indent related -" -> Visual mode related -" -> Moving around, tabs and buffers -" -> Status line -" -> Editing mappings -" -> vimgrep searching and cope displaying -" -> Spell checking -" -> Misc -" -> Helper functions -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => General -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Sets how many lines of history VIM has to remember -set history=500 - -" Enable filetype plugins -filetype plugin on -filetype indent on - -" Set to auto read when a file is changed from the outside -set autoread -au FocusGained,BufEnter * checktime - -" With a map leader it's possible to do extra key combinations -" like w saves the current file -let mapleader = "," - -" Fast saving -nmap w :w! - -" :W sudo saves the file -" (useful for handling the permission-denied error) -command! W execute 'w !sudo tee % > /dev/null' edit! - -" Display line numbers -" 1) absolute -" set number -" 2) relative -" set relativenumber -" 3) hybrid (absolute+relative) -set number relativenumber - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => VIM user interface -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Set 7 lines to the cursor - when moving vertically using j/k -set so=7 - -" Avoid garbled characters in Chinese language windows OS -let $LANG='en' -set langmenu=en -source $VIMRUNTIME/delmenu.vim -source $VIMRUNTIME/menu.vim - -" Turn on the Wild menu -set wildmenu - -" Ignore compiled files -set wildignore=*.o,*~,*.pyc -if has("win16") || has("win32") - set wildignore+=.git\*,.hg\*,.svn\* -else - set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store -endif - -"Always show current position -set ruler - -" Height of the command bar -set cmdheight=1 - -" A buffer becomes hidden when it is abandoned -set hid - -" Configure backspace so it acts as it should act -set backspace=eol,start,indent -set whichwrap+=<,>,h,l - -" Ignore case when searching -set ignorecase - -" When searching try to be smart about cases -set smartcase - -" Highlight search results -set hlsearch - -" Makes search act like search in modern browsers -set incsearch - -" Don't redraw while executing macros (good performance config) -set lazyredraw - -" For regular expressions turn magic on -set magic - -" Show matching brackets when text indicator is over them -set showmatch -" How many tenths of a second to blink when matching brackets -set mat=2 - -" No annoying sound on errors -set noerrorbells -set novisualbell -set t_vb= -set tm=500 - -" Properly disable sound on errors on MacVim -if has("gui_macvim") - autocmd GUIEnter * set vb t_vb= -endif - - -" Add a bit extra margin to the left -set foldcolumn=1 - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Colors and Fonts -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Enable syntax highlighting -syntax enable - -" Enable 256 colors palette in Gnome Terminal -if $COLORTERM == 'gnome-terminal' - set t_Co=256 -endif - -try - colorscheme desert -catch -endtry - -set background=dark - -" Set extra options when running in GUI mode -if has("gui_running") - set guioptions-=T - set guioptions-=e - set t_Co=256 - set guitablabel=%M\ %t -endif - -" Set utf8 as standard encoding and en_US as the standard language -set encoding=utf8 - -" Use Unix as the standard file type -set ffs=unix,dos,mac - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Files, backups and undo -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Turn backup off, since most stuff is in SVN, git etc. anyway... -set nobackup -set nowb -set noswapfile - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Text, tab and indent related -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Use spaces instead of tabs -set expandtab - -" Be smart when using tabs ;) -set smarttab - -" 1 tab == 4 spaces -set shiftwidth=4 -set tabstop=4 - -" Linebreak on 500 characters -set lbr -"set tw=500 -set tw=79 - -set ai "Auto indent -set si "Smart indent -set wrap "Wrap lines - - -"""""""""""""""""""""""""""""" -" => Visual mode related -"""""""""""""""""""""""""""""" -" Visual mode pressing * or # searches for the current selection -" Super useful! From an idea by Michael Naumann -vnoremap * :call VisualSelection('', '')/=@/ -vnoremap # :call VisualSelection('', '')?=@/ - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Moving around, tabs, windows and buffers -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Map to / (search) and Ctrl- to ? (backwards search) -map / -map ? - -" Disable highlight when is pressed -map :noh - -" Smart way to move between windows -map j -map k -map h -map l - -" Close the current buffer -map bd :Bclose:tabclosegT - -" Close all the buffers -map ba :bufdo bd - -map l :bnext -map h :bprevious - -" Useful mappings for managing tabs -map tn :tabnew -map to :tabonly -map tc :tabclose -map tm :tabmove -map t :tabnext - -" Let 'tl' toggle between this and the last accessed tab -let g:lasttab = 1 -nmap tl :exe "tabn ".g:lasttab -au TabLeave * let g:lasttab = tabpagenr() - - -" Opens a new tab with the current buffer's path -" Super useful when editing files in the same directory -map te :tabedit =expand("%:p:h")/ - -" Switch CWD to the directory of the open buffer -map cd :cd %:p:h:pwd - -" Specify the behavior when switching between buffers -try - set switchbuf=useopen,usetab,newtab - set stal=2 -catch -endtry - -" Return to last edit position when opening files (You want this!) -au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif - - -"""""""""""""""""""""""""""""" -" => Status line -"""""""""""""""""""""""""""""" -" Always show the status line -set laststatus=2 - -" Format the status line -set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Editing mappings -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Remap VIM 0 to first non-blank character -map 0 ^ - -" Move a line of text using ALT+[jk] or Command+[jk] on mac -nmap mz:m+`z -nmap mz:m-2`z -vmap :m'>+`mzgv`yo`z -vmap :m'<-2`>my` - nmap - vmap - vmap -endif - -" Delete trailing white space on save, useful for some filetypes ;) -fun! CleanExtraSpaces() - let save_cursor = getpos(".") - let old_query = getreg('/') - silent! %s/\s\+$//e - call setpos('.', save_cursor) - call setreg('/', old_query) -endfun - -if has("autocmd") - autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() -endif - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Spell checking -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Pressing ,ss will toggle and untoggle spell checking -map ss :setlocal spell! - -" Shortcuts using -map sn ]s -map sp [s -map sa zg -map s? z= - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Misc -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Remove the Windows ^M - when the encodings gets messed up -noremap m mmHmt:%s///ge'tzt'm - -" Quickly open a buffer for scribble -map q :e ~/buffer - -" Quickly open a markdown buffer for scribble -map x :e ~/buffer.md - -" Toggle paste mode on and off -map pp :setlocal paste! - -" Always switch to insert mode for terminal window and disable -" line numbers -autocmd TermOpen * setlocal nonumber norelativenumber -autocmd TermOpen * startinsert - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Helper functions -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Returns true if paste mode is enabled -function! HasPaste() - if &paste - return 'PASTE MODE ' - endif - return '' -endfunction - -" Don't close window, when deleting a buffer -command! Bclose call BufcloseCloseIt() -function! BufcloseCloseIt() - let l:currentBufNum = bufnr("%") - let l:alternateBufNum = bufnr("#") - - if buflisted(l:alternateBufNum) - buffer # - else - bnext - endif - - if bufnr("%") == l:currentBufNum - new - endif - - if buflisted(l:currentBufNum) - execute("bdelete! ".l:currentBufNum) - endif -endfunction - -function! CmdLine(str) - call feedkeys(":" . a:str) -endfunction - -function! VisualSelection(direction, extra_filter) range - let l:saved_reg = @" - execute "normal! vgvy" - - let l:pattern = escape(@", "\\/.*'$^~[]") - let l:pattern = substitute(l:pattern, "\n$", "", "") - - if a:direction == 'gv' - call CmdLine("Ack '" . l:pattern . "' " ) - elseif a:direction == 'replace' - call CmdLine("%s" . '/'. l:pattern . '/') - endif - - let @/ = l:pattern - let @" = l:saved_reg -endfunction - -set mouse= diff --git a/modules/home-manager/neovim.nix b/modules/home-manager/neovim.nix new file mode 100644 index 0000000..1593017 --- /dev/null +++ b/modules/home-manager/neovim.nix @@ -0,0 +1,432 @@ +# Source: https://gist.github.com/nat-418/1101881371c9a7b419ba5f944a7118b0 +{ config, pkgs, lib, ... }: +{ + programs.neovim = { + enable = true; + defaultEditor = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + # Use the Nix package search engine to find + # even more plugins : https://search.nixos.org/packages + plugins = with pkgs.vimPlugins; [ + #coc-nvim # dependency for nvim-ufo (acts as LSP client) + #nvim-ufo # folding/unfolding + #mini-nvim + ]; + # Note: Two single quotes ('') in the config have to be escaped + # with an additional single quote! + # See: https://discourse.nixos.org/t/need-help-understanding-how-to-escape-special-characters-in-the-list-of-str-type/11389/2 + extraConfig = '' + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Maintainer: + " Amir Salihefendic — @amix3k + " + " Awesome_version: + " Get this config, nice color schemes and lots of plugins! + " + " Install the awesome version from: + " + " https://github.com/amix/vimrc + " + " Sections: + " -> General + " -> VIM user interface + " -> Colors and Fonts + " -> Files and backups + " -> Text, tab and indent related + " -> Visual mode related + " -> Moving around, tabs and buffers + " -> Status line + " -> Editing mappings + " -> vimgrep searching and cope displaying + " -> Spell checking + " -> Misc + " -> Helper functions + " + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => General + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Sets how many lines of history VIM has to remember + set history=500 + + " Enable filetype plugins + filetype plugin on + filetype indent on + + " Set to auto read when a file is changed from the outside + set autoread + au FocusGained,BufEnter * checktime + + " With a map leader it's possible to do extra key combinations + " like w saves the current file + let mapleader = "," + + " Fast saving + nmap w :w! + + " :W sudo saves the file + " (useful for handling the permission-denied error) + command! W execute 'w !sudo tee % > /dev/null' edit! + + " Display line numbers + " 1) absolute + " set number + " 2) relative + " set relativenumber + " 3) hybrid (absolute+relative) + set number relativenumber + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => VIM user interface + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Set 7 lines to the cursor - when moving vertically using j/k + set so=7 + + " Avoid garbled characters in Chinese language windows OS + let $LANG='en' + set langmenu=en + source $VIMRUNTIME/delmenu.vim + source $VIMRUNTIME/menu.vim + + " Turn on the Wild menu + set wildmenu + + " Ignore compiled files + set wildignore=*.o,*~,*.pyc + if has("win16") || has("win32") + set wildignore+=.git\*,.hg\*,.svn\* + else + set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store + endif + + "Always show current position + set ruler + + " Height of the command bar + set cmdheight=1 + + " A buffer becomes hidden when it is abandoned + set hid + + " Configure backspace so it acts as it should act + set backspace=eol,start,indent + set whichwrap+=<,>,h,l + + " Ignore case when searching + set ignorecase + + " When searching try to be smart about cases + set smartcase + + " Highlight search results + set hlsearch + + " Makes search act like search in modern browsers + set incsearch + + " Don't redraw while executing macros (good performance config) + set lazyredraw + + " For regular expressions turn magic on + set magic + + " Show matching brackets when text indicator is over them + set showmatch + " How many tenths of a second to blink when matching brackets + set mat=2 + + " No annoying sound on errors + set noerrorbells + set novisualbell + set t_vb= + set tm=500 + + " Properly disable sound on errors on MacVim + if has("gui_macvim") + autocmd GUIEnter * set vb t_vb= + endif + + + " Add a bit extra margin to the left + set foldcolumn=1 + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Colors and Fonts + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Enable syntax highlighting + syntax enable + + " Enable 256 colors palette in Gnome Terminal + if $COLORTERM == 'gnome-terminal' + set t_Co=256 + endif + + try + colorscheme desert + catch + endtry + + set background=dark + + " Set extra options when running in GUI mode + if has("gui_running") + set guioptions-=T + set guioptions-=e + set t_Co=256 + set guitablabel=%M\ %t + endif + + " Set utf8 as standard encoding and en_US as the standard language + set encoding=utf8 + + " Use Unix as the standard file type + set ffs=unix,dos,mac + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Files, backups and undo + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Turn backup off, since most stuff is in SVN, git etc. anyway... + set nobackup + set nowb + set noswapfile + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Text, tab and indent related + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Use spaces instead of tabs + set expandtab + + " Be smart when using tabs ;) + set smarttab + + " 1 tab == 4 spaces + set shiftwidth=4 + set tabstop=4 + + " Linebreak on 500 characters + set lbr + "set tw=500 + set tw=79 + + set ai "Auto indent + set si "Smart indent + set wrap "Wrap lines + + + """""""""""""""""""""""""""""" + " => Visual mode related + """""""""""""""""""""""""""""" + " Visual mode pressing * or # searches for the current selection + " Super useful! From an idea by Michael Naumann + vnoremap * :call VisualSelection(''', ''')/=@/ + vnoremap # :call VisualSelection(''', ''')?=@/ + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Moving around, tabs, windows and buffers + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Map to / (search) and Ctrl- to ? (backwards search) + map / + map ? + + " Disable highlight when is pressed + map :noh + + " Smart way to move between windows + map j + map k + map h + map l + + " Close the current buffer + map bd :Bclose:tabclosegT + + " Close all the buffers + map ba :bufdo bd + + map l :bnext + map h :bprevious + + " Useful mappings for managing tabs + map tn :tabnew + map to :tabonly + map tc :tabclose + map tm :tabmove + map t :tabnext + + " Let 'tl' toggle between this and the last accessed tab + let g:lasttab = 1 + nmap tl :exe "tabn ".g:lasttab + au TabLeave * let g:lasttab = tabpagenr() + + + " Opens a new tab with the current buffer's path + " Super useful when editing files in the same directory + map te :tabedit =expand("%:p:h")/ + + " Switch CWD to the directory of the open buffer + map cd :cd %:p:h:pwd + + " Specify the behavior when switching between buffers + try + set switchbuf=useopen,usetab,newtab + set stal=2 + catch + endtry + + " Return to last edit position when opening files (You want this!) + au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + + + """""""""""""""""""""""""""""" + " => Status line + """""""""""""""""""""""""""""" + " Always show the status line + set laststatus=2 + + " Format the status line + set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Editing mappings + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Remap VIM 0 to first non-blank character + map 0 ^ + + " Move a line of text using ALT+[jk] or Command+[jk] on mac + nmap mz:m+`z + nmap mz:m-2`z + vmap :m'>+`mzgv`yo`z + vmap :m'<-2`>my` + nmap + vmap + vmap + endif + + " Delete trailing white space on save, useful for some filetypes ;) + fun! CleanExtraSpaces() + let save_cursor = getpos(".") + let old_query = getreg('/') + silent! %s/\s\+$//e + call setpos('.', save_cursor) + call setreg('/', old_query) + endfun + + if has("autocmd") + autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() + endif + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Spell checking + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Pressing ,ss will toggle and untoggle spell checking + map ss :setlocal spell! + + " Shortcuts using + map sn ]s + map sp [s + map sa zg + map s? z= + + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Misc + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Remove the Windows ^M - when the encodings gets messed up + noremap m mmHmt:%s///ge'tzt'm + + " Quickly open a buffer for scribble + map q :e ~/buffer + + " Quickly open a markdown buffer for scribble + map x :e ~/buffer.md + + " Toggle paste mode on and off + map pp :setlocal paste! + + " Always switch to insert mode for terminal window and disable + " line numbers + autocmd TermOpen * setlocal nonumber norelativenumber + autocmd TermOpen * startinsert + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Helper functions + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " Returns true if paste mode is enabled + function! HasPaste() + if &paste + return 'PASTE MODE ' + endif + return ''' + endfunction + + " Don't close window, when deleting a buffer + command! Bclose call BufcloseCloseIt() + function! BufcloseCloseIt() + let l:currentBufNum = bufnr("%") + let l:alternateBufNum = bufnr("#") + + if buflisted(l:alternateBufNum) + buffer # + else + bnext + endif + + if bufnr("%") == l:currentBufNum + new + endif + + if buflisted(l:currentBufNum) + execute("bdelete! ".l:currentBufNum) + endif + endfunction + + function! CmdLine(str) + call feedkeys(":" . a:str) + endfunction + + function! VisualSelection(direction, extra_filter) range + let l:saved_reg = @" + execute "normal! vgvy" + + let l:pattern = escape(@", "\\/.*'$^~[]") + let l:pattern = substitute(l:pattern, "\n$", "", "") + + if a:direction == 'gv' + call CmdLine("Ack '" . l:pattern . "' " ) + elseif a:direction == 'replace' + call CmdLine("%s" . '/'. l:pattern . '/') + endif + + let @/ = l:pattern + let @" = l:saved_reg + endfunction + + set mouse= + + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " => Folding with nvim-ufo + """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " vim.o.foldcolumn = '1' + " vim.o.foldlevel = 99 + " vim.o.foldlevelstart = 99 + " vim.o.foldenable = true + + " vim.keymap.set('n', 'zR', require('ufo').openAllFolds) + " vim.keymap.set('n', 'zM', require('ufo').closeAllFolds) + + ''; + }; +}