Files
dotconfs/.config/nvim/init.vim
T
thomas.koppandClaude Opus 5 d215dfefc5 feat: rebuild master from the live desktop, and add the KDE configuration
master still carried the 2021 tree. Task 6 does a checkout over $HOME, so nine
of those files would have overwritten the current configuration rather than
updated it - i3, sway, dunst, nvim, vim and tmux, all diverged by years. The
plan had no step for this; the design warned about it and then nothing
implemented the warning.

The nine are now taken from the live machine verbatim, and the 31 files with no
counterpart there are dropped. Everything remains on archive/2021-i3-sway.
README.md and .scripts/install.sh are kept despite having no live counterpart:
the first documents the repository and the second is what ls.shron.de/dotconf
serves, so deleting it would break that link.

Verified byte-identical to the live files afterwards, which is the point - a
checkout on this machine must change nothing.

KDE has been in daily use for a while with nothing backing it up. Eighteen rc
files and the nine autostart entries are added: window rules and shortcuts,
notification behaviour, the lock screen, and the panel layout in
plasma-org.kde.plasma.desktop-appletsrc. That last one is rewritten by
plasmashell whenever anything moves, so it will produce churn - kept anyway,
since a lost panel layout is the most tedious thing here to rebuild by hand.

.config/kdeconnect/ is excluded rather than added. It holds the device
certificate and its private key, and is pairing state rather than
configuration - the only place under .config that carries a secret.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 15:53:50 +02:00

298 lines
9.4 KiB
VimL

set mouse=
call plug#begin('~/.config/nvim/plugged')
" Plugins {
" neo-tree is a file finder.
"Plug 'nvim-neo-tree/neo-tree.nvim'
" Requirement for neo-tree
"Plug 'nvim-lua/plenary.nvim'
"Plug 'nvim-tree/nvim-web-devicons'
"Plug 'MunifTanjim/nui.nvim'
" airline is a better status line and a tab-bar for nvim.
Plug 'bling/vim-airline'
" gruvbox colorscheme. Seems to work the best for me.
Plug 'morhetz/gruvbox'
" neomake is a code linting tool that runs in the background.
Plug 'neomake/neomake'
"autocompletion Plugin for Code autocomplete
Plug 'zchee/deoplete-jedi'
" Left side File Tree
Plug 'scrooloose/nerdtree'
" Adds filetype-specific icons to NERDTree files and folders,
Plug 'ryanoasis/vim-devicons'
" Adds syntax highlighting to NERDTree based on filetype.
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
"
" fzf fuzzy finder for the current directory
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
" whichkey shows with space which keys you can press
Plug 'folke/which-key.nvim'
" firenvim ist ein socket um den browser editor durch nvim zu ersetzen
Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } }
" install with nvim +PlugInstall +qall
" update with nvim +PlugUpgrade +PlugUpdate +PlugClean +qall
" you can also update it in nvim with syntax autocompletion and stuff - simply
" call PlugUpdate as an example
" }
call plug#end()
" Map the leader key to ,
let mapleader="\<SPACE>"
" General {
set noautoindent " I indent my code myself.
set nocindent " I indent my code myself.
"set smartindent " Or I let the smartindent take care of it.
set breakindent " Indent line-breaks at the same level as code.
set ttimeoutlen=100
set fileencoding=utf-8
set fileencodings=utf-8,gbk,chinese,cp936,gb18030,utf-16le,utf-16,big5,euc-jp,euc-kr,latin-1
" }
" Search {
set ignorecase " Make searching case insensitive
set smartcase " ... unless the query has capital letters.
set gdefault " Use 'g' flag by default with :s/foo/bar/.
" Use <C-L> to clear the highlighting of :set hlsearch.
if maparg('<C-L>', 'n') ==# ''
nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
endif
" }
" Spellcorrection {
setlocal spell spelllang=en_us
"setlocal spell spelllang=de_20
map <F7> :setlocal spell spelllang=de_20 <return>
map <F8> :setlocal spell spelllang=en_us <return>
map <F9> :w!<CR>:!aspell check %<CR>:e! %<CR>
" Formatting {
set showmatch " Show matching brackets.
set number relativenumber " Show the line numbers on the left side.
set formatoptions+=o " Continue comment marker in new lines.
set expandtab " Insert spaces when TAB is pressed.
set tabstop=4 " Render TABs using this many spaces.
set shiftwidth=4 " Indentation amount for < and > commands.
set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J)
" More natural splits
set splitbelow " Horizontal split below current.
set splitright " Vertical split to right of current.
if !&scrolloff
set scrolloff=3 " Show next 3 lines while scrolling.
endif
if !&sidescrolloff
set sidescrolloff=5 " Show next 5 columns while side-scrolling.
endif
set nostartofline " Do not jump to first character with page commands.
" Tell Vim which characters to show for expanded TABs,
" trailing whitespace, and end-of-lines. VERY useful!
if &listchars ==# 'eol:$'
set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+
endif
set list " Show problematic characters.
" }
" Configuration {
set autochdir " Switch to current file's parent directory.
" Remove special characters for filename
set isfname-=:
set isfname-==
set isfname-=+
" Map ; to :
nnoremap ; :
" Path/file expansion in colon-mode.
set wildmode=list:longest
" Allow color schemes to do bright colors without forcing bold.
if &t_Co == 8 && $TERM !~# '^linux'
set t_Co=16
endif
" Remove trailing spaces.
function! TrimWhitespace()
let l:save = winsaveview()
%s/\s\+$//e
call winrestview(l:save)
endfunction
" FIXME: Do not call this on makefile and sv files.
autocmd BufWritePre * call TrimWhitespace()
nnoremap <leader>W :call TrimWhitespace()<CR>
" Diff options
set diffopt+=iwhite
"Enter to go to EOF and backspace to go to start
"nnoremap <CR> G
"nnoremap <BS> gg
" Stop cursor from jumping over wrapped lines
nnoremap j gj
nnoremap k gk
" Make HOME and END behave like shell
"inoremap <C-E> <End>
"inoremap <C-A> <Home>
" }
" UI Options {
" Colorscheme options.
set bg=dark
colorscheme gruvbox
" Also highlight all tabs and trailing whitespace characters.
highlight ExtraWhitespace ctermbg=darkgreen guibg=darkgreen
match ExtraWhitespace /\s\+$\|\t/
" Relative numbering
function! NumberToggle()
if(&relativenumber == 1)
set nornu
set number
else
set rnu
endif
endfunc
" Toggle between normal and relative numbering.
nnoremap <leader>r :call NumberToggle()<cr>
" Opaque Background (Comment out to use terminal's profile)
"set termguicolors
" Transparent Background (For i3 and compton)
"highlight Normal guibg=NONE ctermbg=NONE
"highlight LineNr guibg=NONE ctermbg=NONE
" }
" Keybindings {
" Save file
nnoremap <Leader>w :w<CR>
" Copy and paste from system clipboard (Might require xsel/xclip install)
vmap <Leader>y "+y
vmap <Leader>d "+d
nmap <Leader>p "+p
nmap <Leader>P "+P
vmap <Leader>p "+p
vmap <Leader>P "+P
" Move between buffers
nmap <Leader>h :bprevious<CR>
" Switch between Buffers
map <C-j> <C-w>j<C-w>_
map <C-k> <C-w>k<C-w>_
map <C-h> <C-w>h<C-w>_
map <C-l> <C-w>l<C-w>_
" Switch between tabs
map <A-h> :tabprevious<CR>
map <A-l> :tabnext<CR>
" Go to tab by number
noremap <A-1> 1gt
noremap <A-2> 2gt
noremap <A-3> 3gt
noremap <A-4> 4gt
noremap <A-5> 5gt
noremap <A-6> 6gt
noremap <A-7> 7gt
noremap <A-8> 8gt
noremap <A-9> 9gt
noremap <A-0> :tablast<cr>
" Open init.vim
map <silent> <leader>ee :e $HOME/.config/nvim/init.vim<cr>
" Open a File in new Tab
map <silent> <leader>t :tabnew
" }
" Experimental {
" Search and Replace
nmap <Leader>s :%s//g<Left><Left>
" write files as root (if you've forgotten to open it as root
" simply do :W instead of :w
command W :execute ':silent w !sudo tee % > /dev/null' | :edit!
" }
" Plugin Settings {
" Plug {
autocmd VimEnter *
\ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | q
\| endif
" }
" Airline {
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_idx_mode = 1
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline#extensions#tabline#left_sep = ''
let g:airline#extensions#tabline#left_alt_sep = ''
let g:airline#extensions#tabline#right_sep = ''
let g:airline#extensions#tabline#right_alt_sep = ''
let g:airline_left_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_sep = ''
let g:airline_right_alt_sep = ''
let g:airline_theme= 'gruvbox'
" }
" neomake {
autocmd! BufWritePost * Neomake
nnoremap <Leader>l :lopen<CR>
" }
" netrw {
let g:netrw_liststyle=3 " tree (change to 0 for thin)
let g:netrw_banner=0 " no banner
let g:netrw_altv=1 " open files on right
let g:netrw_winsize=25 " only use 20% screen for netrw
" FIXME: Preview opens to left and is very narrow
let g:netrw_preview=1 " open previews vertically
let g:netrw_browse_split =3 " open files in new Tab
nmap <Leader>n :Vexplore<CR>
" }
" }
" Filetype-Specific Configurations {
" HTML, XML, Jinja
autocmd FileType html setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType css setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType xml setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType htmldjango setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType htmldjango inoremap {{ {{ }}<left><left><left>
autocmd FileType htmldjango inoremap {% {% %}<left><left><left>
autocmd FileType htmldjango inoremap {# {# #}<left><left><left>
" }
" Markdown and Journal {
autocmd FileType markdown setlocal shiftwidth=2 tabstop=2 softtabstop=2
autocmd FileType journal setlocal shiftwidth=2 tabstop=2 softtabstop=2
" }
" Trim Whitespaces {
function! TrimWhitespace()
let l:save = winsaveview()
%s/\\\@<!\s\+$//e
call winrestview(l:save)
endfunction
" }
" vim:set ft=vim sw=4 ts=4:
" :set number relativenumber
:augroup numbertoggle
: autocmd!
: autocmd BufEnter,FocusGained,InsertLeave * set relativenumber
: autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber
:augroup END
noremap <F3> :set invnumber invrelativenumber<CR>
inoremap <F3> <C-O>:set invnumber invrelativenumber<CR>