diff --git a/TODOs.md b/TODOs.md index 4960043..1e6509e 100644 --- a/TODOs.md +++ b/TODOs.md @@ -1,11 +1,12 @@ # TODO: -- [X] Fargli creare xdg dir -- [X] fargli creare Maildir dir -- [X] Deve inizializzare la cartella Maildir con le sottocartelle iCloudAccount, ProtonMailAccount -- [X] Avvio Polkit non avvia la dialog grafica per l'elevazione dei privilegi -- [X] Integrare tema Yaru su Flatpak -- [X] installare opencode -- [ ] installare podman + +- [x] Fargli creare xdg dir +- [x] fargli creare Maildir dir +- [x] Deve inizializzare la cartella Maildir con le sottocartelle iCloudAccount, ProtonMailAccount +- [x] Avvio Polkit non avvia la dialog grafica per l'elevazione dei privilegi +- [x] Integrare tema Yaru su Flatpak +- [x] installare opencode +- [x] installare podman - [ ] Scaricare la posta - [ ] Init mu per la ricerca - [ ] aggiungere chiavi gpg nel vault per ripristino dopo reinstallazione diff --git a/ansible/inventory/group_vars/all.yml b/ansible/inventory/group_vars/all.yml index 8eaafc0..cd6ab89 100644 --- a/ansible/inventory/group_vars/all.yml +++ b/ansible/inventory/group_vars/all.yml @@ -39,6 +39,10 @@ common_dotfiles: src: .tmux.conf dest: .tmux.conf mode: "0644" + - name: .vimrc + src: .vimrc + dest: .vimrc + mode: "0644" - name: tmux config directory src: .tmux/ dest: .tmux/ diff --git a/dotfiles/common/.vimrc b/dotfiles/common/.vimrc new file mode 100644 index 0000000..db0b060 --- /dev/null +++ b/dotfiles/common/.vimrc @@ -0,0 +1,484 @@ +" ========================================================== +" Vim configuration - Sysdev Portable +" Optimized for Linux kernel development +" ========================================================== + +set nocompatible +set encoding=utf-8 +scriptencoding utf-8 + +" --- leader MUST be set before any mapping +let mapleader=" " +let maplocalleader="\\" + +" ---------------------------------------------------------- +" UI +" ---------------------------------------------------------- + +set number +set relativenumber +set ruler +set showcmd +set nowrap +set splitbelow +set splitright +set signcolumn=yes +set laststatus=2 +set scrolloff=4 +set sidescrolloff=8 + +set wildmenu +set wildmode=longest:full,full + +set mouse= +set ttyfast +set lazyredraw + +" ---------------------------------------------------------- +" Editing +" ---------------------------------------------------------- + +set hidden +set backspace=indent,eol,start + +set tabstop=8 +set shiftwidth=8 +set softtabstop=8 +set noexpandtab + +set autoindent +" NOTE: cindent supersedes smartindent — smartindent removed (obsolete + redundant) +set cindent +set cinoptions=:0,l1,g0,t0,(0,Ws,m1 + +set textwidth=80 +set colorcolumn=81 + +" j: remove comment leader when joining lines (Vim >= 7.4) +set formatoptions+=croqnj +set formatoptions-=t + +" C syntax tweaks (kernel-friendly) +let c_comment_strings=1 +let c_no_curly_error=1 + +" ---------------------------------------------------------- +" Whitespace (OFF by default, toggle with l) +" ---------------------------------------------------------- + +set nolist +set listchars=tab:>-,trail:·,extends:»,precedes:«,nbsp:␣ + +nnoremap l :set list! + +" ---------------------------------------------------------- +" Search +" ---------------------------------------------------------- + +set incsearch +set hlsearch +set ignorecase +set smartcase +" NOTE: gdefault removed — it breaks muscle memory and is +" confusing when reading others' vimrc. Use /g explicitly. + +nnoremap h :set hlsearch! + +" ---------------------------------------------------------- +" Performance +" ---------------------------------------------------------- + +set updatetime=250 +set timeoutlen=400 +set ttimeoutlen=10 +set shortmess+=c + +" ---------------------------------------------------------- +" Undo (XDG-aware, robust) +" ---------------------------------------------------------- + +set undofile +set undolevels=1000 + +if has("unix") + if exists("$XDG_CACHE_HOME") && !empty($XDG_CACHE_HOME) + let s:cache=$XDG_CACHE_HOME + else + let s:cache=expand("~/.cache") + endif + + let s:undodir=s:cache . "/vim/undo//" + if !isdirectory(s:undodir) + silent! call mkdir(s:undodir, "p") + endif + execute "set undodir=" . fnameescape(s:undodir) +endif + +" ---------------------------------------------------------- +" Swap files (centralized — no .swp in source trees) +" ---------------------------------------------------------- + +if has("unix") + if exists("$XDG_CACHE_HOME") && !empty($XDG_CACHE_HOME) + let s:cache2=$XDG_CACHE_HOME + else + let s:cache2=expand("~/.cache") + endif + + let s:swpdir=s:cache2 . "/vim/swap//" + if !isdirectory(s:swpdir) + silent! call mkdir(s:swpdir, "p") + endif + execute "set directory=" . fnameescape(s:swpdir) + set nobackup + set nowritebackup +endif + +" ---------------------------------------------------------- +" Grep integration +" ---------------------------------------------------------- + +if executable("rg") + set grepprg=rg\ --vimgrep\ --no-heading\ --smart-case + set grepformat=%f:%l:%c:%m +elseif executable("grep") + set grepprg=grep\ -nH\ $* + set grepformat=%f:%l:%m +endif + +nnoremap g :silent grep! .:copen +nnoremap / :silent grep! + +" ---------------------------------------------------------- +" Quickfix / location list +" ---------------------------------------------------------- + +nnoremap ]q :cnext +nnoremap [q :cprev +nnoremap qo :copen +nnoremap qc :cclose + +nnoremap ]l :lnext +nnoremap [l :lprev +nnoremap lo :lopen +nnoremap lc :lclose + +" ---------------------------------------------------------- +" Window navigation +" ---------------------------------------------------------- + +nnoremap h +nnoremap j +nnoremap k +nnoremap l + +" ---------------------------------------------------------- +" Basic shortcuts +" ---------------------------------------------------------- + +nnoremap w :w +nnoremap q :q +nnoremap x :x + +" Fold toggle +nnoremap z za + +" Diff helpers +set diffopt=filler,internal,algorithm:histogram,indent-heuristic +nnoremap df :windo diffthis +nnoremap do :windo diffoff + +" ---------------------------------------------------------- +" Folding +" ---------------------------------------------------------- + +set foldmethod=syntax +set foldlevelstart=99 " start with all folds open +set foldnestmax=3 + +" ---------------------------------------------------------- +" Tags (ctags) +" ---------------------------------------------------------- + +set tags=./tags;,tags; + +nnoremap t :tag +nnoremap pt :ptag +nnoremap po :popen +nnoremap pc :pclose + +" ---------------------------------------------------------- +" cscope (essential for kernel navigation) +" ---------------------------------------------------------- + +if has("cscope") + set cscopetag " use cscope for :tag and + set cscoperelative " use cscope.out location as prefix + set cscopeverbose + + " Auto-load cscope.out walking up the directory tree + function! s:LoadCscope() abort + let l:db=findfile("cscope.out", ".;") + if !empty(l:db) + let l:path=strpart(l:db, 0, match(l:db, "/cscope.out$")) + if empty(l:path) | let l:path="." | endif + silent! execute "cs add " . l:db . " " . l:path + endif + endfunction + autocmd BufEnter /* call s:LoadCscope() + + " cscope query mappings + " s: symbol g: definition d: called-by c: callers + " t: text e: egrep f: file i: #includes + nnoremap cs :cs find s =expand("") + nnoremap cg :cs find g =expand("") + nnoremap cd :cs find d =expand("") + nnoremap cc :cs find c =expand("") + nnoremap ct :cs find t =expand("") + nnoremap ce :cs find e =expand("") + nnoremap cf :cs find f =expand("") + nnoremap ci :cs find i =expand("") +endif + +" ---------------------------------------------------------- +" Man page (K over word) +" ---------------------------------------------------------- + +function! s:Man() abort + let l:word=expand("") + if exists(":Man") + execute "Man " . l:word + else + execute "!man " . l:word + endif +endfunction + +nnoremap K :call Man() + +" ---------------------------------------------------------- +" ClangFormat +" ---------------------------------------------------------- + +function! s:ClangFormatRange(line1, line2) abort + if !executable("clang-format") + echohl WarningMsg | echo "clang-format not found in PATH" | echohl None + return + endif + let l:view=winsaveview() + silent execute a:line1 . "," . a:line2 . "!clang-format" + call winrestview(l:view) +endfunction + +command! -range=% ClangFormat call ClangFormatRange(, ) + +nnoremap cf :ClangFormat +xnoremap cf :ClangFormat + +" ---------------------------------------------------------- +" Project root detection +" ---------------------------------------------------------- + +function! s:GitRoot() abort + if executable("git") + let l:r=systemlist("git rev-parse --show-toplevel 2>/dev/null") + if v:shell_error==0 && len(l:r)>0 + return l:r[0] + endif + endif + return "" +endfunction + +function! s:FindProjectRoot() abort + let l:root=s:GitRoot() + return !empty(l:root) ? l:root : getcwd() +endfunction + +" ---------------------------------------------------------- +" Smart build (ninja > cmake > make) +" ---------------------------------------------------------- + +function! s:SmartMake() abort + let l:root=s:FindProjectRoot() + if filereadable(l:root . "/build.ninja") + let &makeprg="ninja -C " . fnameescape(l:root) + elseif filereadable(l:root . "/CMakeLists.txt") + let &makeprg="cmake --build build" + elseif filereadable(l:root . "/Makefile") + let &makeprg="make -C " . fnameescape(l:root) + else + let &makeprg="make" + endif + silent make! + copen +endfunction + +command! Make call SmartMake() + +nnoremap m :Make + +" ---------------------------------------------------------- +" Run single file (errors in quickfix, output in terminal) +" ---------------------------------------------------------- + +function! s:Run() abort + write + if &filetype=="c" + let l:src=expand("%") + let l:exe=expand("%:r") + let l:saved=&makeprg + execute "set makeprg=cc\\ -std=c11\\ -Wall\\ -Wextra\\ -g\\ " + \ . fnameescape(l:src) . "\\ -o\\ " . fnameescape(l:exe) + silent make! + let &makeprg=l:saved + " Run only if no errors + if empty(filter(getqflist(), 'v:val.valid')) + execute "!" . fnameescape(l:exe) + else + copen + endif + elseif &filetype=="python" + execute "!python3 " . fnameescape(expand("%")) + elseif &filetype=="sh" + execute "!sh " . fnameescape(expand("%")) + else + echohl WarningMsg | echo "Run not supported for filetype: " . &filetype | echohl None + endif +endfunction + +command! Run call Run() + +nnoremap r :Run + +" ---------------------------------------------------------- +" Filetypes + syntax +" ---------------------------------------------------------- + +filetype plugin indent on +syntax on + +" ---------------------------------------------------------- +" Autocommands +" ---------------------------------------------------------- + +augroup sysdev_ft + autocmd! + + " Trim trailing whitespace on save + autocmd BufWritePre * silent! %s/\s\+$//e + + " Restore last cursor position + autocmd BufReadPost * + \ if line("'\"")>0 && line("'\"")<=line("$") | + \ execute "normal! g`\"" | + \ endif + + " C/C++: kernel style, no list (tabs are intentional) + autocmd FileType c,cpp + \ setlocal tabstop=8 shiftwidth=8 softtabstop=8 noexpandtab + \ textwidth=80 colorcolumn=81 cindent + \ cinoptions=:0,l1,g0,t0,(0,Ws,m1 nolist + + " Makefiles: tabs are mandatory + autocmd FileType make setlocal noexpandtab tabstop=8 shiftwidth=8 + + " Assembly: kernel asm style + autocmd FileType asm,s + \ setlocal tabstop=8 shiftwidth=8 noexpandtab nolist + + " Kconfig / Kbuild + autocmd BufRead,BufNewFile Kconfig*,Kbuild* + \ setlocal filetype=kconfig noexpandtab tabstop=8 + + " Patch/diff: never touch whitespace + autocmd FileType diff,patch setlocal nolist + + " Python: PEP8 (scripts/tooling) + autocmd FileType python + \ setlocal tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=79 + + " Highlight TODO/FIXME/HACK/BUG/XXX/NOTE in all files + autocmd Syntax * + \ call matchadd('Todo', '\v\c<(TODO|FIXME|HACK|BUG|XXX|NOTE|WARN|WARNING)>') + +augroup END + +" ---------------------------------------------------------- +" Statusline (no plugins) +" ---------------------------------------------------------- + +set statusline= +set statusline+=%#PmenuSel# +set statusline+=\ %f\ +set statusline+=%#LineNr# +set statusline+=\ %m%r%h%w\ +set statusline+=%= +set statusline+=\ %{&filetype}\ +set statusline+=\ %{&fileencoding?&fileencoding:&encoding}\ +set statusline+=\ %{&fileformat}\ +set statusline+=\ %l:%c\ +set statusline+=\ %p%%\ + +" ========================================================== +" Embedded colorscheme: sysdev_black +" Self-contained — no external files needed +" ========================================================== + +if &t_Co>=256 + + highlight clear + if exists("syntax_on") + syntax reset + endif + + let g:colors_name="sysdev_black" + set background=dark + + " Base + hi Normal ctermfg=252 ctermbg=NONE + hi Comment ctermfg=244 + hi Constant ctermfg=173 + hi String ctermfg=150 + hi Identifier ctermfg=81 + hi Function ctermfg=110 + hi Statement ctermfg=161 + hi Type ctermfg=149 + hi PreProc ctermfg=179 + hi Special ctermfg=215 + hi Operator ctermfg=252 + + " Selection / search + hi Visual ctermbg=238 + hi Search ctermfg=16 ctermbg=220 + hi IncSearch ctermfg=16 ctermbg=214 + + " Diff + hi DiffAdd ctermfg=150 ctermbg=22 + hi DiffDelete ctermfg=203 ctermbg=52 + hi DiffChange ctermfg=110 ctermbg=17 + hi DiffText ctermfg=255 ctermbg=24 cterm=bold + + " UI chrome + hi LineNr ctermfg=240 + hi CursorLineNr ctermfg=220 + hi CursorLine ctermbg=236 cterm=NONE + hi ColorColumn ctermbg=235 + hi SignColumn ctermfg=240 ctermbg=NONE + hi VertSplit ctermfg=238 ctermbg=NONE + hi StatusLine ctermfg=252 ctermbg=238 cterm=NONE + hi StatusLineNC ctermfg=240 ctermbg=234 cterm=NONE + hi Folded ctermfg=244 ctermbg=234 + hi MatchParen ctermfg=220 ctermbg=NONE cterm=bold,underline + + " Completion menu + hi Pmenu ctermfg=252 ctermbg=236 + hi PmenuSel ctermfg=16 ctermbg=220 + hi PmenuSbar ctermbg=238 + hi PmenuThumb ctermbg=244 + + " Errors / warnings / todos + hi Error ctermfg=255 ctermbg=160 cterm=bold + hi ErrorMsg ctermfg=255 ctermbg=160 + hi WarningMsg ctermfg=214 + hi Todo ctermfg=16 ctermbg=220 cterm=bold + +endif \ No newline at end of file