dotfiles

Cross platform dotfiles for linux, mac and windows

commit 70e536931d83f3a130d56c2bfdfd86da4b1f8221
parent 73ed6170d7d6eff6a81f146376ed086fab85410f
Author: Bharatvaj Hemanth <bharatvaj@yahoo.com>
Date: Mon, 21 Apr 2025 01:16:09 +0530

Add pfs.cmd for searching through passwords

Update voom.cmd to check for existing repos before cloning

Replace USERPROFILE with XDG_ROOT in setup.cmd

Add iabbrev file for openscad

Use vsplit when editing configuration files

Remove the annoying c-f and c-b buffer change binds

Fix the environment variable name of xdg cache path

Fix SaveAndBuild() in vim. It was trying 'make' instead of 'Make' even
if vim-dispatch was installled

Use FixedSys font for vim GUI in Windows
13 files changed, 214 insertions(+), 126 deletions(-)
M
.config/cmd/setup.cmd
|
2
+-
M
.config/profile.cmd
|
2
++
M
.config/vim/ftplugin/cpp.vim
|
4
++--
A
.config/vim/ftplugin/openscad.vim
|
10
++++++++++
M
.gitignore
|
2
++
A
.local/bin/cmd/pfs.cmd
|
36
++++++++++++++++++++++++++++++++++++
M
.local/bin/cmd/voom.cmd
|
10
+++++++++-
M
.local/share/vim/keybindings.vim
|
53
+++++++++++++++++++++++++++++++++++------------------
M
.local/share/vim/plugin.vim
|
6
+++++-
M
.local/share/vim/plugins
|
54
++++++++++++++++++++++++++++++++----------------------
M
.local/share/vim/vimrc
|
8
+++-----
M
.profile
|
1
+
M
.vimrc
|
152
++++++++++++++++++++++++++++++++++++++++----------------------------------------
diff --git a/.config/cmd/setup.cmd b/.config/cmd/setup.cmd
@@ -62,7 +62,7 @@ call :add_path %USERPROFILE%\.local\bin\cmd
 
 rem Apply config patches
 rem TODO Use mklink instead of xcopy, it will prevent overriding changed files in the destination dir.
-xcopy /Y %USERPROFILE%\.config\cmd\patch %USERPROFILE%\ /S /E
+xcopy /Y %XDG_ROOT%\.config\cmd\patch %XDG_ROOT%\ /S /E
 
 mkdir %SYSTEMDRIVE%\bin
 if EXIST "%SCOOP%\apps\busybox\current\busybox.exe" (
diff --git a/.config/profile.cmd b/.config/profile.cmd
@@ -11,5 +11,7 @@ doskey rm=del $*
 doskey clear=cls
 doskey cat=type $*
 doskey hb=sh %USERPROFILE%\.local\bin\sh\hb $*
+doskey d=curl -fLO $*
+doskey x=7z x $*
 
 if exist "%XDG_CONFIG_HOME%\cmd\userenv.cmd" @call %XDG_CONFIG_HOME%\cmd\userenv.cmd
diff --git a/.config/vim/ftplugin/cpp.vim b/.config/vim/ftplugin/cpp.vim
@@ -1,10 +1,10 @@
 augroup CppIAbbrevs
 	autocmd!
 	autocmd FileType c,cpp :iabbrev main@ int main(int argc, char* argv[]) {<cr><cr>}<up>
-	autocmd FileType c,cpp :iabbrev fun@ <esc>bvedivoid <C-o>P() {<cr><cr>}<up>
+	autocmd FileType c,cpp :iabbrev f@ <esc>bvedivoid <C-o>P() {<cr><cr>}<up>
 	autocmd FileType c,cpp :iabbrev p@ printf("\n");<esc>4hi
 	autocmd FileType c,cpp :iabbrev r@ return;<left>
 	autocmd FileType c,cpp :iabbrev i@ #include <><left>
-	autocmd FileType c,cpp :iabbrev for@ <esc>bvedifor(int <c-o>P=0; <c-o>P < n; <c-o>P++) {<cr><cr>}<up>
+	autocmd FileType c,cpp :iabbrev l@ <esc>Bvedifor(int <c-o>P=0; <c-o>P < n; <c-o>P++) {<cr><cr>}<up>
 augroup END
 
diff --git a/.config/vim/ftplugin/openscad.vim b/.config/vim/ftplugin/openscad.vim
@@ -0,0 +1,10 @@
+augroup OpenscadIAbbrevs
+	autocmd!
+	autocmd FileType scad :iabbrev function@ function {<cr><cr>}<up>
+	autocmd FileType scad :iabbrev fun@ <esc>bvedivoid <C-o>P() {<cr><cr>}<up>
+	autocmd FileType scad :iabbrev p@ printf("\n");<esc>4hi
+	autocmd FileType scad :iabbrev r@ return;<left>
+	autocmd FileType scad :iabbrev i@ #include <><left>
+	autocmd FileType scad :iabbrev for@ <esc>bvedifor(int <c-o>P=0; <c-o>P < n; <c-o>P++) {<cr><cr>}<up>
+augroup END
+
diff --git a/.gitignore b/.gitignore
@@ -25,3 +25,5 @@
 !.local/bin/sh/**
 
 !.local/share/
+
+*.exe
diff --git a/.local/bin/cmd/pfs.cmd b/.local/bin/cmd/pfs.cmd
@@ -0,0 +1,36 @@
+@echo off
+setlocal
+
+if "%FUZZER%" == "" (
+    echo Environment variable FUZZER not set
+    exit /b 1
+)
+
+if "%PASSWORD_STORE_DIR%" == "" (
+    set PASSWORD_STORE_DIR="%USERPROFILE%\.local\share\pass\"
+)
+
+if not exist "%PASSWORD_STORE_DIR%" (
+    echo %PASSWORD_STORE_DIR% not set
+    exit /b 1
+)
+
+for /f %%i in ('"gopass ls -f | %FUZZER%"') do (
+    set selected_pass=%%i
+)
+
+if "%selected_pass%" equ "" (
+    exit /b
+)
+
+if "%1" equ "" (
+    if "%selected_pass:~0,5%" equ "totp/" (
+        gopass otp -c %selected_pass%
+    ) else (
+        gopass show -c %selected_pass%
+    )
+) else (
+    gopass %1 %selected_pass%
+)
+
+endlocal
diff --git a/.local/bin/cmd/voom.cmd b/.local/bin/cmd/voom.cmd
@@ -1,4 +1,5 @@
 @echo off
+setlocal enabledelayedexpansion
 
 rem TODO Follow the official path preference of airblade/voom
 rem TODO Remove plugins from pack when change is made in the plugins file

@@ -8,5 +9,12 @@ if NOT EXIST %VIM_PLUGIN_PATH% (
 )
 cd %VIM_PLUGIN_PATH%
 for /f "tokens=*" %%i in ('type %USERPROFILE%\.local\share\vim\plugins ^| findstr /v "^#"') do (
-    git clone https://github.com/%%i
+    for /f "delims=/ tokens=2" %%a in ("%%i") do set gpath=%%a
+    if not exist !gpath!/.git (
+        git clone https://github.com/%%i
+    )
 )
+
+vim -c "helptags ALL" -c quit >nul 2>&1
+
+endlocal
diff --git a/.local/share/vim/keybindings.vim b/.local/share/vim/keybindings.vim
@@ -2,8 +2,8 @@
 nnoremap <leader>co :copen<cr>
 nnoremap <leader>cd :cdo<space>s/
 nnoremap <leader>cs :cdo<space>s/
-nnoremap <leader>ec :edit $HOME/.vimrc<cr>
-nnoremap <leader>ek :edit $XDG_DATA_HOME/vim/keybindings.vim<cr>
+nnoremap <leader>ec :vsplit $HOME/.vimrc<cr>
+nnoremap <leader>ek :vsplit $XDG_DATA_HOME/vim/keybindings.vim<cr>
 nnoremap <leader>et :set expandtab<cr>
 nnoremap <leader>fa :find *
 nnoremap <leader>ff :find *

@@ -21,6 +21,8 @@ nnoremap <leader>tt :tabnew<cr>
 nnoremap <leader>ta :tab *
 nnoremap <leader>vg :vimgrep<space>
 nnoremap <leader>/ :cdo %s/
+nnoremap <leader>cd :cd %:p:h<cr>
+nnoremap <leader>qd :cdo s/
 
 " Buffer Creation
 nnoremap <leader>sc :source $XDG_CONFIG_HOME/vim/vimrc<cr>

@@ -55,15 +57,14 @@ endfunction
 nnoremap <c-z> :call SaveAndSuspend()<cr>
 inoremap <c-z> :call SaveAndSuspend()<cr>
 
-nnoremap <c-f> :bnext<cr>
-nnoremap <c-b> :bprevious<cr>
-
 " Accessible completions
 inoremap <c-f> <c-x><c-f>
 inoremap <c-l> <c-x><c-l>
 " Emacs line navigation in insert mode
 inoremap <c-a> <c-o>0
 inoremap <c-e> <c-o>A
+inoremap <c-k> <c-o>D
+
 " Behave vim
 nnoremap Y y$
 nnoremap Q :noh<cr>

@@ -74,7 +75,7 @@ nnoremap <leader>oh :grepadd /:: %
 
 nnoremap <leader>fb :b *
 
-nnoremap <c-p> :call FZYFiles()<cr>
+nnoremap <c-/> :call FZYFiles()<cr>
 " TODO reflect on whether <leader><leader> is productive, I keep hitting it
 " accidentally
 "nnoremap <leader><leader> :Rg<cr>

@@ -125,7 +126,6 @@ nnoremap <CR> :noh<CR><CR>:<backspace>
 nnoremap <leader>cc :ChecklistToggleCheckbox<cr>
 nnoremap <leader>ct :ChecklistToggleCheckbox<cr>
 nnoremap <leader>ce :ChecklistEnableCheckbox<cr>
-"nnoremap <leader>cd :ChecklistDisableCheckbox<cr>
 
 let g:gutentags_file_list_command = 'rg --files'
 

@@ -145,32 +145,49 @@ fun! GotoWindow(id)
     call win_gotoid(a:id)
 endfun
 
+
+fun! StartDebugging()
+    doautocmd User DebuggingStarted
+    :call vimspector#Launch()<CR>
+endfun
+
+" Easy save
+nnoremap <esc>s :w<cr>
+
+" Fly through windows
+nnoremap <esc>h <c-w>h
+nnoremap <esc>j <c-w>j
+nnoremap <esc>k <c-w>k
+nnoremap <esc>l <c-w>l
+
 " Debugger remaps
-nnoremap <leader>dd :call vimspector#Launch()<CR>
+nnoremap <F5> :call StartDebugging()<cr>
 nnoremap <leader>dc :call GotoWindow(g:vimspector_session_windows.code)<CR>
 nnoremap <leader>dt :call GotoWindow(g:vimspector_session_windows.tagpage)<CR>
 nnoremap <leader>dv :call GotoWindow(g:vimspector_session_windows.variables)<CR>
 nnoremap <leader>dw :call GotoWindow(g:vimspector_session_windows.watches)<CR>
 nnoremap <leader>ds :call GotoWindow(g:vimspector_session_windows.stack_trace)<CR>
 nnoremap <leader>do :call GotoWindow(g:vimspector_session_windows.output)<CR>
-nnoremap <leader>de :call vimspector#Reset()<CR>
+nnoremap <S-F5> :call vimspector#Reset()<CR>
 
 nnoremap <leader>dtcb :call vimspector#CleanLineBreakpoint()<CR>
 
-nmap <leader>dl <Plug>VimspectorStepInto
-nmap <leader>dj <Plug>VimspectorStepOver
-nmap <leader>dk <Plug>VimspectorStepOut
-nmap <leader>d_ <Plug>VimspectorRestart
-nnoremap <leader>d<space> :call vimspector#Continue()<CR>
+fun! SetupDebuggingKeymaps()
+    nmap <c-n> <Plug>VimspectorStepOver
+    nmap <c-i> <Plug>VimspectorStepInto
+    nmap <m-i> <Plug>VimspectorStepOut
+    nmap <c-s-r> <Plug>VimspectorRestart
+    nmap <F5> :call vimspector#Continue()<CR>
+endfun
+
+augroup debugmode
+    autocmd User DebuggingStarted :call SetupDebuggingKeymaps()
+augroup END
 
 nmap <leader>drc <Plug>VimspectorRunToCursor
 nmap <leader>dbp <Plug>VimspectorToggleBreakpoint
 nmap <leader>dcbp <Plug>VimspectorToggleConditionalBreakpoint
 
-" nb
-" TODO open a fuzzy finder quickly. Even better use fuzzy finder without chdir
-nnoremap <leader>nb :chdir $NB_PATH<cr>
-
 nnoremap cn *``cgn
 nnoremap cN *``cgN
 let g:mc = "y/\\V\<C-r>=escape(@\", '/')\<CR>\<CR>"
diff --git a/.local/share/vim/plugin.vim b/.local/share/vim/plugin.vim
@@ -59,8 +59,12 @@ endfunction
 " Run Make
 
 function SaveAndBuild()
-		wall
+	wall
+	if exists(":Make")
 		Make
+	else
+		make
+	endif
 endfunction
 
 function QuickUnderline(n)
diff --git a/.local/share/vim/plugins b/.local/share/vim/plugins
@@ -4,43 +4,53 @@ tpope/vim-fugitive
 tpope/vim-surround
 tpope/vim-unimpaired
 tpope/vim-repeat
-Bestoa/SearchComplete
 tpope/vim-projectionist
 junegunn/goyo.vim
 AndrewRadev/tagalong.vim
+jpalardy/vim-slime
+Shougo/vimproc.vim
+yuratomo/dbg.vim
+PreciousChicken/vim-groff-viewer
+hattya/vcvars.vim
+mbbill/undotree
+chrisbra/csv.vim
+ldrumm/compiler-explorer.vim
+vim-scripts/todo-txt.vim
+yegappan/mru
+907th/vim-auto-save
 
+#yegappan/searchcomplete
+# https://git.sr.ht/~torresjrjr/birck.vim
+# mfussenegger/nvim-dap
+# neovim/nvim-lspconfig
+# preservim/tagbar
+# puremourning/vimspector
+# rcarriga/nvim-dap-ui
+# terrortylor/nvim-comment
+# xolox/vim-easytags
+# xolox/vim-misc
 #ap/vim-css-color
+#Bestoa/SearchComplete
+#bfrg/vim-fzy
 #cfdrake/vim-pbxproj
-#ervandew/supertab
-#vim-scripts/vimacs
-#vim-scripts/SearchComplete
 #christoomey/vim-tmux-navigator
+#ervandew/supertab
 #evansalter/vim-checklist
 #ferranpm/vim-maildir
+#gfontenot/vim-xcode
 #https://github.com/bfrg/vim-jqplay
+#jerrymarino/xcodebuild.vim
 #joereynolds/vim-minisnip/
+#kana/vim-submode
+#keith/swift.vim
 #nachumk/systemverilog.vim
 #notmuch-vim/notmuch-vim
 #ntpeters/vim-better-whitespace.git
+#omniSharp/omnisharp-vim
 #radenling/vim-dispatch-neovim
 #tommcdo/vim-ninja-feet.git
 #torrancew/vim-openscad
-#yegappan/mru
-
 #vim-scripts/gitignore
-#kana/vim-submode
-#omniSharp/omnisharp-vim
-#bfrg/vim-fzy
-#jerrymarino/xcodebuild.vim
-#gfontenot/vim-xcode
-#keith/swift.vim
-
-# https://git.sr.ht/~torresjrjr/birck.vim
-# rcarriga/nvim-dap-ui
-# mfussenegger/nvim-dap
-# terrortylor/nvim-comment
-# neovim/nvim-lspconfig
-# puremourning/vimspector
-# xolox/vim-misc
-# xolox/vim-easytags
-# preservim/tagbar
+#vim-scripts/SearchComplete
+#vim-scripts/vimacs
+#https://git.sr.ht/~ackyshake/VimCompletesMe.vim
diff --git a/.local/share/vim/vimrc b/.local/share/vim/vimrc
@@ -1,13 +1,11 @@
 set packpath^=$XDG_DATA_HOME/vim
 
 let g:minisnip_dir=$XDG_DATA_HOME . '/vim/minisnip'
+source $XDG_DATA_HOME/vim/keybindings.vim
+set packpath^=$XDG_DATA_HOME/vim
 
-set nocursorline
 set background=dark
 
 source $XDG_DATA_HOME/vim/hyper-red.vim
 
-set noexpandtab
-
-set path+=**
-set wildignore+=**/out/**
+let g:birck_default_chan="irc.libera.chat"
diff --git a/.profile b/.profile
@@ -88,5 +88,6 @@ HISTTIMEFORMAT="%F %T "
 HISTCONTROL=erasedups
 
 . "${XDG_CONFIG_HOME}/sh/functions"
+. "${XDG_CONFIG_HOME}/sh/aliases"
 [ -f "${XDG_CONFIG_HOME}/sh/unstaged" ] && . "${XDG_CONFIG_HOME}/sh/unstaged"
 
diff --git a/.vimrc b/.vimrc
@@ -1,48 +1,34 @@
-syntax on indent off
+syntax on
+
+" Handle XDG_ missing gracefully
+if empty("$XDG_CACHE_HOME")
+	let $XDG_CACHE_HOME=$HOME/.cache
+endif
 if has("&viminfofile")
-    set viminfofile=$XDG_CACHE_DIR/vim/viminfo
+    set viminfofile=$XDG_CACHE_HOME/vim/viminfo
 endif
 
-" reject netrw, embrace ls
-"let loaded_netrwPlugin = 1
-
-set complete-=i
-set foldmethod=marker
-set foldmarker={,}
-set foldlevel=20
-set foldopen-=search
-
-" Debug
-let g:termdebug_config = {'sign': '>>', 'winbar': 0, 'wide':163}
-
 " General
-set nocompatible
-set mouse=
-set cursorline
-if has('cursorlineopt')
-	set cursorlineopt=number
-endif
+set ai
 set exrc
-
-" Turn backup off
-set nobackup
-set nowb
-set noswapfile
-
-" Map leader to space
-nnoremap <space> <Nop>
-let mapleader = " "
-
-" Enable hidden buffers
 set hidden
-
-" Disable auto fixing end of line
-" Useful when opening binary files
+set mouse=
+set nocompatible
+set noexpandtab
 set nofixendofline
-
-" Disable vim intro message
 set shortmess=Iat
-set shortmess-=F
+
+" Turn backup off
+"set nobackup
+"set nowb
+"set noswapfile
+
+if v:version >= 901
+	set cursorline
+	set cursorlineopt=number
+	set display=lastline
+	set smoothscroll
+endif
 
 " Search
 set hlsearch

@@ -55,11 +41,6 @@ set tabstop=4
 set shiftwidth=4
 set expandtab
 
-" Netrw customization
-let g:netrw_banner = 0
-let g:netrw_liststyle = 3
-let g:netrw_fastbrowse= 2
-
 " Disable status
 set laststatus=1
 

@@ -67,31 +48,48 @@ set nolazyredraw
 set ttyfast
 set nospell
 
+" Netrw customization
+let g:netrw_banner = 0
+let g:netrw_liststyle = 3
+let g:netrw_fastbrowse= 2
+let g:netrw_preview = 1
+let g:netrw_winsize = 20
 
-" Common vimrc
 source $XDG_DATA_HOME/vim/vimrc
+au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
 
-source $XDG_DATA_HOME/vim/keybindings.vim
+let g:loaded_vimballPlugin = 1
+let g:loaded_vimball = 1
+let g:loaded_getscriptPlugin = 1
 
-set packpath^=$XDG_DATA_HOME/vim
+let maplocalleader=" "
+set complete-=i
+set foldmethod=marker
+set foldmarker={,}
+set foldlevel=20
+set foldopen-=search
+
+" Debug
+let g:termdebug_config = {'sign': '>>', 'winbar': 0, 'wide':163}
 
 function! FZYFiles() abort
-    let l:tempname = tempname()
-    " fzf | awk '{ print $1":1:0" }' > file
-    execute 'silent !git ls-files --recurse-submodules | fzf > ' . fnameescape(l:tempname)
+	let l:tempname = tempname()
+	" fzf | awk '{ print $1":1:0" }' > file
+	execute 'silent !git ls-files --recurse-submodules | fzf > ' . fnameescape(l:tempname)
 	let l:tcontents = join(readfile(l:tempname))
-    try
+	try
 		" TODO Add option to add multiple files to argslist
 		"execute 'argadd ' . l:tcontents
 		 let bufnr = bufadd(l:tcontents)
 		call bufload(bufnr)
 		"call setbufline(bufnr, 1, ['some', 'text'])
-        execute 'edit ' . l:tcontents
-        redraw!
-    finally
-        call delete(l:tempname)
-    endtry
+		execute 'edit ' . l:tcontents
+		redraw!
+	finally
+		call delete(l:tempname)
+	endtry
 endfunction
+
 let g:lsc_server_commands = {'cpp': 'clangd --log=error'}
 let g:lsc_auto_map = {
     \ 'GoToDefinition': '<C-]>',

@@ -111,21 +109,20 @@ let g:lsc_enable_diagnostics   = v:true
 let g:lsc_reference_highlights = v:false
 let g:lsc_trace_level          = 'off'
 
+set synmaxcol=128
+set runtimepath^='$XDG_CONFIG_HOME/vim'
+set runtimepath+='$XDG_DATA_HOME/vim'
+set runtimepath+='$XDG_CONFIG_HOME/vim/after'
+
+let g:netrw_home = $XDG_DATA_HOME . "/vim"
+call mkdir($XDG_DATA_HOME . "/vim/spell", 'p')
+set viewdir=$XDG_DATA_HOME/vim/view | call mkdir(&viewdir, 'p')
+
+set backupdir=$XDG_CACHE_HOME/vim/backup | call mkdir(&backupdir, 'p')
+set directory=$XDG_CACHE_HOME/vim/swap   | call mkdir(&directory, 'p')
+set undodir=$XDG_CACHE_HOME/vim/undo     | call mkdir(&undodir,   'p')
+
 function! s:load_plugins(t) abort
-	set synmaxcol=128
-	" Use XDG Paths for vim
-	" TODO compile hard constants somewhere based on OS
-	set runtimepath^='$XDG_CONFIG_HOME/vim'
-	set runtimepath+='$XDG_DATA_HOME/vim'
-	set runtimepath+='$XDG_CONFIG_HOME/vim/after'
-
-	let g:netrw_home = $XDG_DATA_HOME . "/vim"
-	call mkdir($XDG_DATA_HOME . "/vim/spell", 'p')
-	set viewdir=$XDG_DATA_HOME/vim/view | call mkdir(&viewdir, 'p')
-
-	set backupdir=$XDG_CACHE_HOME/vim/backup | call mkdir(&backupdir, 'p')
-	set directory=$XDG_CACHE_HOME/vim/swap   | call mkdir(&directory, 'p')
-	set undodir=$XDG_CACHE_HOME/vim/undo     | call mkdir(&undodir,   'p')
 	packadd vim-tmux-navigator
 	packadd vim-commentary
 	packadd vim-surround

@@ -151,21 +148,24 @@ augroup user_cmds
 	autocmd VimEnter * call timer_start(20, function('s:load_plugins'))
 augroup END
 
+source $XDG_CONFIG_HOME/vim/ftplugin/cpp.vim
+source $XDG_DATA_HOME/vim/plugin.vim
+
 if has("gui")
 	set guioptions=
+	set mouse=a
+	if has("win32")
+		set guifont=FixedSys:h11:cANSI:qDRAFT
+		colorscheme default
+		set background=light
+	endif
 endif
 
 if has("win32")
-set shell=cmd
+	set shell=cmd
 	set shellquote=\" 
 	" shellxquote must be a literal space character.
 	set shellxquote=  
 else
-    set shell=sh
+	set shell=sh
 endif
-
-" TODO load this automatically
-source $XDG_CONFIG_HOME/vim/ftplugin/cpp.vim
-source $XDG_DATA_HOME/vim/plugin.vim
-
-let g:birck_default_chan="irc.libera.chat"