diff options
Diffstat (limited to '')
| -rw-r--r-- | .code-vimrc | 2 | ||||
| -rw-r--r-- | .config/Code/User/keybindings.json | 22 | ||||
| -rw-r--r-- | .config/Code/User/settings.json | 26 | ||||
| -rw-r--r-- | .config/nvim/colors/kijish.vim | 330 | ||||
| -rw-r--r-- | .config/nvim/init.lua | 496 |
5 files changed, 661 insertions, 215 deletions
diff --git a/.code-vimrc b/.code-vimrc index e88a240..eb089c1 100644 --- a/.code-vimrc +++ b/.code-vimrc @@ -2,8 +2,6 @@ nnoremap <C-d> <C-d>zz nnoremap <C-u> <C-u>zz nnoremap n nzzzv nnoremap N Nzzzv -nnoremap <Leader>o :jumps<CR> vnoremap <C-c> "+y vmap <C-x> "+x map <C-p> "+p -map <Leader>p "+P diff --git a/.config/Code/User/keybindings.json b/.config/Code/User/keybindings.json index 2bad03e..acee1bd 100644 --- a/.config/Code/User/keybindings.json +++ b/.config/Code/User/keybindings.json @@ -268,10 +268,28 @@ }, { "key": "alt+j", - "command": "workbench.action.nextEditor" + "command": "workbench.action.nextEditorInGroup", + "when": "vim.active && vim.mode == 'Normal'" }, { "key": "alt+k", - "command": "workbench.action.previousEditor" + "command": "workbench.action.previousEditorInGroup", + "when": "vim.active && vim.mode == 'Normal'" + }, + // ai inline completion (mirrors my neovim minuet keymaps) + { + "key": "alt+a", + "command": "editor.action.inlineSuggest.commit", + "when": "editorTextFocus && vim.active && vim.mode == 'Insert'" + }, + { + "key": "alt+enter", + "command": "editor.action.inlineSuggest.commit", + "when": "editorTextFocus && vim.active && vim.mode == 'Insert'" + }, + { + "key": "alt+shift+enter", + "command": "editor.action.inlineSuggest.commit", + "when": "editorTextFocus && vim.active && vim.mode == 'Insert'" } ] diff --git a/.config/Code/User/settings.json b/.config/Code/User/settings.json index b4e7c20..af03907 100644 --- a/.config/Code/User/settings.json +++ b/.config/Code/User/settings.json @@ -251,11 +251,31 @@ "<C-s>": true, "<C-p>": true, "<C-j>": false, - "<C-i>": false, "<C-n>": false, "<C-k>": false, "<C-w>": false }, + "vim.normalModeKeyBindingsNonRecursive": [ + { "before": ["K"], "commands": ["editor.action.showHover"] }, + { "before": ["\\", "f", "f"], "commands": ["workbench.action.quickOpen"] }, + { "before": ["\\", "f", "g"], "commands": ["workbench.view.search.focus"] }, + { "before": ["\\", "f", "b"], "commands": ["workbench.action.quickOpenPreviousRecentlyUsedEditor"] }, + { "before": ["\\", "e"], "commands": ["workbench.action.problems.focus"] }, + { "before": ["\\", "F"], "commands": ["editor.action.formatDocument"] }, + { "before": ["\\", "o"], "commands": [{"command": "vim.remap", "args": {"commands": [{ "command": ":jumps" }]}}] }, + { "before": ["\\", "p"], "commands": [{"command": "vim.remap", "args": {"after": ["\"", "+", "P"]}}] }, + { "before": ["\\", "i"], "commands": ["inlineChat.start"] }, + { "before": ["g", "r", "n"], "commands": ["editor.action.rename"] }, + { "before": ["g", "r", "a"], "commands": ["editor.action.quickFix"] }, + { "before": ["g", "r", "d"], "commands": ["editor.action.revealDefinition"] }, + { "before": ["g", "r", "t"], "commands": ["editor.action.goToTypeDefinition"] }, + { "before": ["g", "r", "i"], "commands": ["editor.action.goToImplementation"] }, + { "before": ["g", "r", "r"], "commands": ["editor.action.goToReferences"] } + ], + "vim.visualModeKeyBindingsNonRecursive": [ + { "before": ["g", "r", "a"], "commands": ["editor.action.quickFix"] }, + { "before": ["\\", "i"], "commands": ["inlineChat.start"] } + ], "vim.history": 1000, "vim.hlsearch": true, "vim.incsearch": true, @@ -277,7 +297,7 @@ "statusBar.debuggingForeground": "#ffffff", "statusBar.foreground": "#ffffff", "statusBar.noFolderBackground": "#303030", - "statusBar.noFolderForeground": "#ffffff", + "statusBar.noFolderForeground": "#ffffff" }, "workbench.editor.decorations.badges": false, "workbench.editor.decorations.colors": false, @@ -323,4 +343,4 @@ "files.associations": { "cgitrc": "shellcheckrc" } -}
\ No newline at end of file +} diff --git a/.config/nvim/colors/kijish.vim b/.config/nvim/colors/kijish.vim new file mode 100644 index 0000000..0feb318 --- /dev/null +++ b/.config/nvim/colors/kijish.vim @@ -0,0 +1,330 @@ +" kijish.vim - dark pastel colorscheme +" derived from the dark pastel palette (qterminal / xfce4-terminal) +" https://github.com/kj-sh604/kijish-vim-theme + +if exists('g:colors_name') + highlight clear +endif + +if exists('&termguicolors') && &termguicolors + set termguicolors +endif + +let g:colors_name = 'kijish' + +" palette +let s:bg = '#2c2c2c' +let s:fg = '#dcdcdc' +let s:black = '#3f3f3f' +let s:red = '#d67979' +let s:green = '#60b48a' +let s:yellow = '#dfaf8f' +let s:blue = '#9ab8d7' +let s:magenta = '#dc8cc3' +let s:cyan = '#8cd0d3' +let s:bblack = '#709080' +let s:bred = '#dca3a3' +let s:bgreen = '#72d5a3' +let s:byellow = '#f0dfaf' +let s:bblue = '#94bff3' +let s:bmagenta = '#ec93d3' +let s:bcyan = '#93e0e3' + +" ui +let s:cursor = '#69baa7' +let s:select = '#4a4a4a' +let s:linehl = '#333333' +let s:status = '#303030' +let s:sidebar = '#272727' +let s:deeper = '#252525' +let s:border = '#1e1e1e' +let s:lnr = '#a9a9a9' +let s:punct = '#b0b0b0' +let s:white = '#ffffff' + +" cterm 256 fallbacks +let s:cterm_bg = 235 +let s:cterm_fg = 253 +let s:cterm_black = 237 +let s:cterm_red = 174 +let s:cterm_green = 72 +let s:cterm_yellow= 180 +let s:cterm_blue = 146 +let s:cterm_mag = 175 +let s:cterm_cyan = 116 +let s:cterm_bblack = 66 +let s:cterm_bred = 181 +let s:cterm_bgreen = 114 +let s:cterm_byellow = 223 +let s:cterm_bblue = 153 +let s:cterm_bmagenta= 212 +let s:cterm_bcyan = 123 +let s:cterm_select = 239 +let s:cterm_linehl = 236 +let s:cterm_lnr = 248 +let s:cterm_punct = 247 +let s:cterm_white = 231 + +" helper +function! s:hi(group, fg, bg, attr, ...) + let l:cmd = 'highlight ' . a:group + let l:cmd .= ' guifg=' . (a:fg != '' ? a:fg : 'NONE') + let l:cmd .= ' guibg=' . (a:bg != '' ? a:bg : 'NONE') + let l:cmd .= ' gui=' . (a:attr != '' ? a:attr : 'NONE') + let l:cmd .= ' ctermfg=' . (a:1 != '' ? a:1 : 'NONE') + let l:cmd .= ' ctermbg=' . (a:2 != '' ? a:2 : 'NONE') + let l:cmd .= ' cterm=' . (a:attr != '' ? a:attr : 'NONE') + execute l:cmd +endfunction + +" core +call s:hi('Normal', s:fg, s:bg, '', s:cterm_fg, s:cterm_bg) + +" editor +call s:hi('Cursor', s:bg, s:cursor, '', s:cterm_bg, '') +call s:hi('iCursor', s:bg, s:cursor, '', s:cterm_bg, '') +call s:hi('CursorIM', s:bg, s:cursor, '', s:cterm_bg, '') +call s:hi('CursorLine', '', s:linehl, 'NONE', '', s:cterm_linehl, 'NONE') +call s:hi('CursorColumn','', s:linehl, 'NONE', '', s:cterm_linehl, 'NONE') +call s:hi('ColorColumn','', s:linehl, 'NONE', '', s:cterm_linehl, 'NONE') + +" line numbers +call s:hi('LineNr', s:lnr, s:bg, '', s:cterm_lnr, s:cterm_bg) +call s:hi('CursorLineNr', s:cyan, s:linehl, '', '', s:cterm_linehl) + +" selection +call s:hi('Visual', '', s:select, '', '', s:cterm_select) +call s:hi('VisualNOS', '', s:select, 'undercurl', '', s:cterm_select, 'undercurl') + +" search +call s:hi('Search', s:yellow, s:select, 'bold', s:cterm_fg, s:cterm_select, 'bold') +call s:hi('IncSearch', s:yellow, s:select, 'bold', s:cterm_fg, s:cterm_select, 'bold') + +" matching +call s:hi('MatchParen', s:cyan, s:linehl, 'bold', '', s:cterm_linehl, 'bold') + +" splits and status +call s:hi('VertSplit', s:border, s:border, '', s:cterm_bg, s:cterm_bg) +call s:hi('StatusLine', s:white, s:status, 'bold', s:cterm_white, s:cterm_fg, 'bold') +call s:hi('StatusLineNC', s:bblack, s:status, '', s:cterm_bblack, s:cterm_bg) + +" tabline +call s:hi('TabLine', s:bblack, s:deeper, '', s:cterm_bblack, s:cterm_bg) +call s:hi('TabLineFill', '', s:deeper, '', '', s:cterm_bg) +call s:hi('TabLineSel', s:fg, s:bg, 'bold', s:cterm_fg, s:cterm_bg, 'bold') + +" pmenu +call s:hi('Pmenu', s:fg, s:sidebar, '', s:cterm_fg, 236) +call s:hi('PmenuSel', s:fg, s:select, 'bold', s:cterm_fg, s:cterm_select, 'bold') +call s:hi('PmenuSbar', '', s:sidebar, '', '', 236) +call s:hi('PmenuThumb','', s:bblack, '', '', s:cterm_bblack) + +" wildmenu +call s:hi('WildMenu', s:fg, s:select, 'bold', s:cterm_fg, s:cterm_select, 'bold') + +" messages +call s:hi('ErrorMsg', s:red, s:bg, 'bold', s:cterm_red, s:cterm_bg, 'bold') +call s:hi('WarningMsg', s:yellow, s:bg, '', s:cterm_yellow, s:cterm_bg) +call s:hi('MoreMsg', s:green, s:bg, 'bold', s:cterm_green, s:cterm_bg, 'bold') +call s:hi('ModeMsg', s:fg, s:bg, 'bold', s:cterm_fg, s:cterm_bg, 'bold') +call s:hi('Question', s:cyan, s:bg, '', s:cterm_cyan, s:cterm_bg) + +" special +call s:hi('SpecialKey', s:bblack, s:bg, '', s:cterm_bblack, s:cterm_bg) +call s:hi('NonText', s:bblack, s:bg, '', s:cterm_bblack, s:cterm_bg) +call s:hi('EndOfBuffer', s:bblack, s:bg, '', s:cterm_bblack, s:cterm_bg) +call s:hi('Directory', s:blue, s:bg, '', s:cterm_blue, s:cterm_bg) +call s:hi('Title', s:magenta, s:bg, 'bold', s:cterm_mag, s:cterm_bg, 'bold') +call s:hi('Conceal', s:bblack, s:bg, '', s:cterm_bblack, s:cterm_bg) + +" signs and folds +call s:hi('SignColumn', s:bblack, s:bg, '', s:cterm_bblack, s:cterm_bg) +call s:hi('FoldColumn', s:bblack, s:bg, '', s:cterm_bblack, s:cterm_bg) +call s:hi('Folded', s:bblack, s:deeper, '', s:cterm_bblack, s:cterm_bg) + +" diff +call s:hi('DiffAdd', s:green, s:select, '', s:cterm_green, s:cterm_select) +call s:hi('DiffChange', s:yellow, s:select, '', s:cterm_yellow, s:cterm_select) +call s:hi('DiffDelete', s:red, s:bg, 'bold', s:cterm_red, s:cterm_bg, 'bold') +call s:hi('DiffText', s:fg, s:select, 'bold', s:cterm_fg, s:cterm_select, 'bold') + +" spell +call s:hi('SpellBad', s:red, '', 'undercurl', s:cterm_red, '', 'undercurl') +call s:hi('SpellCap', s:blue, '', 'undercurl', s:cterm_blue, '', 'undercurl') +call s:hi('SpellLocal', s:cyan, '', 'undercurl', s:cterm_cyan, '', 'undercurl') +call s:hi('SpellRare', s:magenta, '', 'undercurl', s:cterm_mag, '', 'undercurl') + +" ========================= +" syntax groups +" ========================= + +" comments +call s:hi('Comment', s:bblack, '', '', s:cterm_bblack, '') +call s:hi('SpecialComment', s:bblack, '', 'bold', s:cterm_bblack, '', 'bold') + +" constants +call s:hi('Constant', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('String', s:bgreen, '', '', s:cterm_bgreen, '') +call s:hi('Character', s:bgreen, '', '', s:cterm_bgreen, '') +call s:hi('Number', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('Boolean', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('Float', s:byellow, '', '', s:cterm_byellow, '') + +" identifiers +call s:hi('Identifier', s:fg, '', '', s:cterm_fg, '') +call s:hi('Function', s:cyan, '', '', s:cterm_cyan, '') + +" statements +call s:hi('Statement', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('Conditional', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('Repeat', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('Label', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('Operator', s:fg, '', '', s:cterm_fg, '') +call s:hi('Keyword', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('Exception', s:bblue, '', '', s:cterm_bblue, '') + +" preprocessor +call s:hi('PreProc', s:magenta, '', '', s:cterm_mag, '') +call s:hi('Include', s:magenta, '', '', s:cterm_mag, '') +call s:hi('Define', s:magenta, '', '', s:cterm_mag, '') +call s:hi('Macro', s:magenta, '', '', s:cterm_mag, '') +call s:hi('PreCondit', s:magenta, '', '', s:cterm_mag, '') + +" types +call s:hi('Type', s:blue, '', '', s:cterm_blue, '') +call s:hi('StorageClass', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('Structure', s:bcyan, '', '', s:cterm_bcyan, '') +call s:hi('Typedef', s:blue, '', '', s:cterm_blue, '') + +" special +call s:hi('Special', s:bcyan, '', '', s:cterm_bcyan, '') +call s:hi('SpecialChar', s:bcyan, '', '', s:cterm_bcyan, '') +call s:hi('Tag', s:red, '', '', s:cterm_red, '') +call s:hi('Delimiter', s:punct, '', '', s:cterm_punct, '') +call s:hi('Debug', s:red, '', '', s:cterm_red, '') + +" errors and todos +call s:hi('Error', s:red, s:bg, 'bold', s:cterm_red, s:cterm_bg, 'bold') +call s:hi('Todo', s:yellow, s:bg, 'bold', s:cterm_yellow, s:cterm_bg, 'bold') + +" misc +call s:hi('Underlined', s:fg, '', 'underline', s:cterm_fg, '', 'underline') +call s:hi('Ignore', s:bblack, '', '', s:cterm_bblack, '') + +" ========================= +" language specific +" ========================= + +" html/xml tags +call s:hi('htmlTag', s:punct, '', '', s:cterm_punct, '') +call s:hi('htmlEndTag', s:punct, '', '', s:cterm_punct, '') +call s:hi('htmlTagName', s:red, '', '', s:cterm_red, '') +call s:hi('htmlArg', s:magenta, '', '', s:cterm_mag, '') +call s:hi('xmlTag', s:punct, '', '', s:cterm_punct, '') +call s:hi('xmlEndTag', s:punct, '', '', s:cterm_punct, '') +call s:hi('xmlTagName', s:red, '', '', s:cterm_red, '') + +" css +call s:hi('cssClassName', s:red, '', '', s:cterm_red, '') +call s:hi('cssIdentifier', s:yellow, '', '', s:cterm_yellow, '') +call s:hi('cssBraces', s:punct, '', '', s:cterm_punct, '') +call s:hi('cssTagName', s:red, '', '', s:cterm_red, '') + +" javascript/typescript +call s:hi('jsFuncCall', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('jsFuncArgs', s:bred, '', '', s:cterm_bred, '') +call s:hi('jsThis', s:bblue, '', 'italic', s:cterm_bblue, '', 'italic') +call s:hi('typescriptBraces', s:punct, '', '', s:cterm_punct, '') + +" python +call s:hi('pythonBuiltin', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('pythonSelf', s:bblue, '', 'italic', s:cterm_bblue, '', 'italic') +call s:hi('pythonDecorator', s:magenta, '', '', s:cterm_mag, '') + +" go +call s:hi('goPackage', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('goImport', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('goFunc', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('goStruct', s:blue, '', '', s:cterm_blue, '') + +" rust +call s:hi('rustSelf', s:bblue, '', 'italic', s:cterm_bblue, '', 'italic') +call s:hi('rustFuncCall', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('rustModPath', s:blue, '', '', s:cterm_blue, '') +call s:hi('rustAttribute', s:magenta, '', '', s:cterm_mag, '') + +" shell +call s:hi('shVariable', s:fg, '', '', s:cterm_fg, '') +call s:hi('shFunction', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('shDeref', s:bcyan, '', '', s:cterm_bcyan, '') + +" vim +call s:hi('vimCommand', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('vimVar', s:fg, '', '', s:cterm_fg, '') +call s:hi('vimFuncName', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('vimIsCommand', s:fg, '', '', s:cterm_fg, '') +call s:hi('vimUserFunc', s:cyan, '', '', s:cterm_cyan, '') +call s:hi('vimAutoCmd', s:bblue, '', '', s:cterm_bblue, '') +call s:hi('vimAutoEvent', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('vimHiGroup', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('vimHighlight', s:magenta, '', '', s:cterm_mag, '') + +" markdown +call s:hi('markdownH1', s:bblue, '', 'bold', s:cterm_bblue, '', 'bold') +call s:hi('markdownH2', s:bblue, '', 'bold', s:cterm_bblue, '', 'bold') +call s:hi('markdownH3', s:bblue, '', 'bold', s:cterm_bblue, '', 'bold') +call s:hi('markdownH4', s:bblue, '', 'bold', s:cterm_bblue, '', 'bold') +call s:hi('markdownH5', s:bblue, '', 'bold', s:cterm_bblue, '', 'bold') +call s:hi('markdownH6', s:bblue, '', 'bold', s:cterm_bblue, '', 'bold') +call s:hi('markdownBold', s:byellow, '', 'bold', s:cterm_byellow, '', 'bold') +call s:hi('markdownItalic', s:bred, '', 'italic', s:cterm_bred, '', 'italic') +call s:hi('markdownCode', s:bcyan, '', '', s:cterm_bcyan, '') +call s:hi('markdownLink', s:blue, '', '', s:cterm_blue, '') +call s:hi('markdownUrl', s:blue, '', 'underline', s:cterm_blue, '', 'underline') +call s:hi('markdownBlockquote', s:bblack, '', '', s:cterm_bblack, '') +call s:hi('markdownListMarker', s:red, '', '', s:cterm_red, '') + +" git +call s:hi('gitcommitSummary', s:fg, '', 'bold', s:cterm_fg, '', 'bold') +call s:hi('gitcommitComment', s:bblack, '', '', s:cterm_bblack, '') +call s:hi('diffAdded', s:green, '', '', s:cterm_green, '') +call s:hi('diffRemoved', s:red, '', '', s:cterm_red, '') +call s:hi('diffChanged', s:yellow, '', '', s:cterm_yellow, '') + +" json +call s:hi('jsonKeyword', s:blue, '', '', s:cterm_blue, '') +call s:hi('jsonString', s:bgreen, '', '', s:cterm_bgreen, '') +call s:hi('jsonNumber', s:byellow, '', '', s:cterm_byellow, '') +call s:hi('jsonBoolean', s:byellow, '', '', s:cterm_byellow, '') + +" yaml +call s:hi('yamlKey', s:blue, '', '', s:cterm_blue, '') + +" toml +call s:hi('tomlTable', s:blue, '', '', s:cterm_blue, '') +call s:hi('tomlKey', s:blue, '', '', s:cterm_blue, '') + +" ========================= +" terminal (neovim) +" ========================= +if has('nvim') + let g:terminal_color_0 = s:black + let g:terminal_color_1 = s:red + let g:terminal_color_2 = s:green + let g:terminal_color_3 = s:yellow + let g:terminal_color_4 = s:blue + let g:terminal_color_5 = s:magenta + let g:terminal_color_6 = s:cyan + let g:terminal_color_7 = s:fg + let g:terminal_color_8 = s:bblack + let g:terminal_color_9 = s:bred + let g:terminal_color_10 = s:bgreen + let g:terminal_color_11 = s:byellow + let g:terminal_color_12 = s:bblue + let g:terminal_color_13 = s:bmagenta + let g:terminal_color_14 = s:bcyan + let g:terminal_color_15 = s:white +endif + +" clean up +delfunction s:hi diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index fccb903..5507125 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -1,25 +1,28 @@ -- plugins vim.cmd [[ call plug#begin() - Plug 'https://github.com/preservim/nerdtree', { 'on': 'NERDTreeToggle' } - Plug 'tmsvg/pear-tree' + " Plug 'github/copilot.vim' + Plug 'hrsh7th/cmp-buffer' + Plug 'hrsh7th/cmp-nvim-lsp' + Plug 'hrsh7th/cmp-path' + Plug 'hrsh7th/nvim-cmp' Plug 'https://github.com/adelarsq/vim-matchit' - Plug 'tpope/vim-surround' - Plug 'sbdchd/neoformat' - Plug 'ThePrimeagen/vim-be-good' + Plug 'https://github.com/preservim/nerdtree', { 'on': 'NERDTreeToggle' } + Plug 'j-hui/fidget.nvim' Plug 'junegunn/fzf' - Plug 'nvim-lua/plenary.nvim' - Plug 'nvim-telescope/telescope.nvim', { 'branch': '0.1.x' } + Plug 'milanglacier/minuet-ai.nvim' Plug 'neovim/nvim-lspconfig' - Plug 'williamboman/mason.nvim' + Plug 'nickjvandyke/opencode.nvim' + Plug 'nvim-lua/plenary.nvim' + Plug 'nvim-telescope/telescope.nvim' + Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' } + Plug 'sbdchd/neoformat' + Plug 'tmsvg/pear-tree' + Plug 'tpope/vim-surround' Plug 'williamboman/mason-lspconfig.nvim' + Plug 'williamboman/mason.nvim' + Plug 'ThePrimeagen/vim-be-good' Plug 'WhoIsSethDaniel/mason-tool-installer.nvim' - Plug 'j-hui/fidget.nvim' - Plug 'hrsh7th/nvim-cmp' - Plug 'hrsh7th/cmp-nvim-lsp' - Plug 'hrsh7th/cmp-buffer' - Plug 'hrsh7th/cmp-path' - Plug 'github/copilot.vim' call plug#end() ]] @@ -28,38 +31,38 @@ vim.g.pear_tree_ft_disabled = { "TelescopePrompt", "TelescopeResults" } -- options local opts = { - autochdir = true, - autoindent = true, - autoread = true, - backup = false, - cursorline = true, - expandtab = true, - hlsearch = true, - ignorecase = true, - linebreak = true, - listchars = { tab = ">-", trail = "~", extends = ">", precedes = "<", space = "." }, - mouse = "a", - number = true, - relativenumber = true, - shiftwidth = 4, - showmatch = true, - signcolumn = "yes", - smartcase = true, - softtabstop = 4, - splitbelow = true, - splitright = true, - tabstop = 4, - termguicolors = true, - ttimeout = true, - ttimeoutlen = 1, - ttyfast = true, - undofile = true, - updatetime = 300, - writebackup = false, + autochdir = true, + autoindent = true, + autoread = true, + backup = false, + cursorline = true, + expandtab = true, + hlsearch = true, + ignorecase = true, + linebreak = true, + listchars = { tab = ">-", trail = "~", extends = ">", precedes = "<", space = "." }, + mouse = "a", + number = true, + relativenumber = true, + shiftwidth = 4, + showmatch = true, + signcolumn = "yes", + smartcase = true, + softtabstop = 4, + splitbelow = true, + splitright = true, + tabstop = 4, + termguicolors = true, + ttimeout = true, + ttimeoutlen = 1, + ttyfast = true, + undofile = true, + updatetime = 300, + writebackup = false, } for k, v in pairs(opts) do - vim.opt[k] = v + vim.opt[k] = v end -- spell and cursor shape @@ -69,7 +72,7 @@ vim.g.t_EI = "\27[2 q" -- terminal tweaks if vim.env.TERM == "alacritty" then - vim.opt.ttymouse = "sgr" + vim.opt.ttymouse = "sgr" end -- custom functions for keymaps @@ -111,10 +114,10 @@ keymap("n", "<S-A-b>h", ":NERDTreeToggle<CR>", { noremap = true }) keymap("n", "<S-A-b><S-A-h>", ":NERDTreeToggle<CR>", { noremap = true }) keymap("n", "<A-n>", ":NERDTreeToggle<CR>", { noremap = true }) keymap("n", "<S-A-n>", ":NERDTree<CR>", { noremap = true }) -keymap("n", "<S-A-j>", "<C-W>w", { noremap = true }) -keymap("n", "<S-A-k>", "<C-W>W", { noremap = true }) -keymap({"n", "t"}, "<S-A-b>j", function() toggle_terminal() end, { noremap = true }) -keymap({"n", "t"}, "<S-A-b><S-A-j>", function() toggle_terminal() end, { noremap = true }) +keymap({ "n", "t" }, "<S-A-j>", "<C-\\><C-n><C-W>w", { noremap = true }) +keymap({ "n", "t" }, "<S-A-k>", "<C-\\><C-n><C-W>W", { noremap = true }) +keymap({ "n", "t" }, "<S-A-b>j", function() toggle_terminal() end, { noremap = true }) +keymap({ "n", "t" }, "<S-A-b><S-A-j>", function() toggle_terminal() end, { noremap = true }) keymap("n", "<leader>sc", ":set spell!<CR>", { noremap = true, silent = true }) keymap("n", "<A-j>", ":bnext<CR>", { noremap = true, silent = true }) @@ -138,32 +141,32 @@ keymap("n", "<A-;>", ":tabmove -<CR>", { noremap = true }) keymap("n", "<A-'>", ":tabmove +<CR>", { noremap = true }) keymap("n", "<leader>ft", ":set filetype=", { noremap = true }) --- copilot -keymap("i", "<C-l>", 'copilot#Accept("<CR>")', { expr = true, silent = true, replace_keycodes = false }) +-- copilot (disabled, using minuet-ai.nvim instead) +-- keymap("i", "<A-a>", 'copilot#Accept("<CR>")', { expr = true, silent = true, replace_keycodes = false }) -- ui and colors -vim.cmd("colorscheme tender") +pcall(vim.cmd, "colorscheme kijish") if vim.fn.has("gui_running") == 1 then - vim.opt.t_Co = 256 - vim.opt.guifont = "Roboto Mono 11" - vim.opt.guioptions:remove("m") - vim.opt.guioptions:remove("T") - vim.opt.guioptions:remove("r") - vim.opt.guioptions:remove("L") - vim.cmd("colorscheme tender") + vim.opt.t_Co = 256 + vim.opt.guifont = "Roboto Mono 11" + vim.opt.guioptions:remove("m") + vim.opt.guioptions:remove("T") + vim.opt.guioptions:remove("r") + vim.opt.guioptions:remove("L") + pcall(vim.cmd, "colorscheme kijish") end -- autocmds vim.api.nvim_create_autocmd("BufWritePre", { - pattern = { "*.py", "*.f90", "*.f95", "*.for" }, - command = [[%s/\s\+$//e]], + pattern = { "*.py", "*.f90", "*.f95", "*.for" }, + command = [[%s/\s\+$//e]], }) local autoread_group = vim.api.nvim_create_augroup("autoread", { clear = true }) vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter", "CursorHold", "CursorHoldI" }, { - group = autoread_group, - command = "if mode() !~ '\''[cCeEsS]'\'' | checktime | endif", + group = autoread_group, + command = "if mode() !~ '\''[cCeEsS]'\'' | checktime | endif", }) vim.cmd("filetype plugin on") @@ -174,72 +177,72 @@ vim.cmd("highlight LineNr guifg=darkgray ctermfg=darkgray") vim.cmd("highlight CursorLineNr guifg=cyan ctermfg=cyan") vim.opt.fillchars = vim.opt.fillchars + { - vert = "â–ˆ", - fold = "â–ˆ", - diff = "â–ˆ", - stl = "-", - stlnc = "-", + vert = "â–ˆ", + fold = "â–ˆ", + diff = "â–ˆ", + stl = "-", + stlnc = "-", } vim.cmd([[ - hi VertSplit guifg=#151515 - hi User1 guifg=#999999 guibg=#151515 - hi User2 guifg=#eea040 guibg=#151515 - hi User3 guifg=#0072ff guibg=#151515 - hi User4 guifg=#ffffff guibg=#151515 - hi User5 guifg=#777777 guibg=#151515 + hi VertSplit guifg=#1c1c1c + hi User1 guifg=#999999 guibg=#1c1c1c + hi User2 guifg=#72d5a3 guibg=#1c1c1c + hi User3 guifg=#ec93d3 guibg=#1c1c1c + hi User4 guifg=#ffffff guibg=#1c1c1c + hi User5 guifg=#777777 guibg=#1c1c1c ]]) -- statusline vim.o.statusline = table.concat({ - "%1* %n %*", - "%3* %y %*", - "%4* %<%f %*", - "%2* %m %*", - "%1* %= %5l %*", - "%2* /%L %*", - "%1* %4v %*", - "%2* 0x%04B %*", - "%5* %{&ff} %*", + "%1* %n %*", + "%3* %y %*", + "%4* %<%f %*", + "%2* %m %*", + "%1* %= %5l %*", + "%2* /%L %*", + "%1* %4v %*", + "%2* 0x%04B %*", + "%5* %{&ff} %*", }) -- telescope local tele_ok, builtin = pcall(require, "telescope.builtin") if tele_ok then - keymap("n", "<leader>fg", function() - builtin.live_grep({ - find_command = { "rg", "--ignore", "--hidden", "--files" }, - prompt_prefix = " search: ", - }) - end, {}) - - keymap("n", "<leader>ff", function() - builtin.find_files({ - find_command = { "rg", "--ignore", "--hidden", "--files" }, - prompt_prefix = " search: ", - }) - end, {}) - - keymap("n", "<leader>fb", function() - builtin.buffers({ - prompt_prefix = " search: ", - }) - end, {}) - - keymap("n", "<leader>fh", function() - builtin.help_tags({ - prompt_prefix = " search: ", - }) - end, {}) + keymap("n", "<leader>fg", function() + builtin.live_grep({ + find_command = { "rg", "--ignore", "--hidden", "--files" }, + prompt_prefix = " search: ", + }) + end, {}) + + keymap("n", "<leader>ff", function() + builtin.find_files({ + find_command = { "rg", "--ignore", "--hidden", "--files" }, + prompt_prefix = " search: ", + }) + end, {}) + + keymap("n", "<leader>fb", function() + builtin.buffers({ + prompt_prefix = " search: ", + }) + end, {}) + + keymap("n", "<leader>fh", function() + builtin.help_tags({ + prompt_prefix = " search: ", + }) + end, {}) end -- lsp vim.diagnostic.config({ - update_in_insert = false, - severity_sort = true, - float = { border = "rounded", source = "if_many" }, - underline = { severity = { min = vim.diagnostic.severity.WARN } }, - virtual_text = true, + update_in_insert = false, + severity_sort = true, + float = { border = "rounded", source = "if_many" }, + underline = { severity = { min = vim.diagnostic.severity.WARN } }, + virtual_text = true, }) keymap("n", "[d", function() vim.diagnostic.jump({ count = -1 }) end, { desc = "diagnostic prev" }) @@ -251,49 +254,49 @@ keymap("n", "<S-A-m>", vim.diagnostic.setloclist, { desc = "diagnostic list" }) vim.api.nvim_create_autocmd("LspAttach", { - group = vim.api.nvim_create_augroup("user-lsp-attach", { clear = true }), - callback = function(event) - local map = function(keys, func, desc, mode) - mode = mode or "n" - vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "lsp: " .. desc }) - end - - map("grn", vim.lsp.buf.rename, "rename") - map("gra", vim.lsp.buf.code_action, "code action", { "n", "x" }) - map("grD", vim.lsp.buf.declaration, "declaration") - map("gri", vim.lsp.buf.implementation, "implementation") - map("grr", vim.lsp.buf.references, "references") - map("grd", vim.lsp.buf.definition, "definition") - map("grt", vim.lsp.buf.type_definition, "type definition") - map("K", vim.lsp.buf.hover, "hover") - map("<leader>F", function() vim.lsp.buf.format({ async = true }) end, "format", { "n", "x" }) - - local client = vim.lsp.get_client_by_id(event.data.client_id) - if client and client:supports_method("textDocument/documentHighlight", event.buf) then - local highlight_group = vim.api.nvim_create_augroup("user-lsp-highlight", { clear = false }) - vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { - buffer = event.buf, - group = highlight_group, - callback = vim.lsp.buf.document_highlight, - }) - vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { - buffer = event.buf, - group = highlight_group, - callback = vim.lsp.buf.clear_references, - }) - end - - if client and client:supports_method("textDocument/inlayHint", event.buf) then - map("<leader>th", function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf })) - end, "toggle inlay hints") - end - end, + group = vim.api.nvim_create_augroup("user-lsp-attach", { clear = true }), + callback = function(event) + local map = function(keys, func, desc, mode) + mode = mode or "n" + vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "lsp: " .. desc }) + end + + map("grn", vim.lsp.buf.rename, "rename") + map("gra", vim.lsp.buf.code_action, "code action", { "n", "x" }) + map("grD", vim.lsp.buf.declaration, "declaration") + map("gri", vim.lsp.buf.implementation, "implementation") + map("grr", vim.lsp.buf.references, "references") + map("grd", vim.lsp.buf.definition, "definition") + map("grt", vim.lsp.buf.type_definition, "type definition") + map("K", vim.lsp.buf.hover, "hover") + map("<leader>F", function() vim.lsp.buf.format({ async = true }) end, "format", { "n", "x" }) + + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client:supports_method("textDocument/documentHighlight", event.buf) then + local highlight_group = vim.api.nvim_create_augroup("user-lsp-highlight", { clear = false }) + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + buffer = event.buf, + group = highlight_group, + callback = vim.lsp.buf.document_highlight, + }) + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + buffer = event.buf, + group = highlight_group, + callback = vim.lsp.buf.clear_references, + }) + end + + if client and client:supports_method("textDocument/inlayHint", event.buf) then + map("<leader>th", function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf })) + end, "toggle inlay hints") + end + end, }) local ok_fidget, fidget = pcall(require, "fidget") if ok_fidget then - fidget.setup({}) + fidget.setup({}) end local ok_mason, mason = pcall(require, "mason") @@ -302,48 +305,48 @@ local ok_tools, mason_tool_installer = pcall(require, "mason-tool-installer") -- put lsp servers here to ensure they are installed and configured local servers = { - bashls = {}, - clangd = {}, - dockerls = {}, - docker_compose_language_service = {}, - html = {}, - cssls = {}, - ts_ls = {}, - intelephense = {}, - pylsp = {}, - lua_ls = { - settings = { - Lua = { - completion = { callSnippet = "Replace" }, - diagnostics = { globals = { "vim" } }, - workspace = { - checkThirdParty = false, - library = vim.api.nvim_get_runtime_file("", true), - }, - telemetry = { enable = false }, - }, - }, - }, + bashls = {}, + clangd = {}, + dockerls = {}, + docker_compose_language_service = {}, + html = {}, + cssls = {}, + ts_ls = {}, + intelephense = {}, + pylsp = {}, + lua_ls = { + settings = { + Lua = { + completion = { callSnippet = "Replace" }, + diagnostics = { globals = { "vim" } }, + workspace = { + checkThirdParty = false, + library = vim.api.nvim_get_runtime_file("", true), + }, + telemetry = { enable = false }, + }, + }, + }, } if ok_mason then - mason.setup() + mason.setup() end if ok_tools then - mason_tool_installer.setup({ ensure_installed = vim.tbl_keys(servers) }) + mason_tool_installer.setup({ ensure_installed = vim.tbl_keys(servers) }) end if ok_mlsp then - mason_lspconfig.setup({ - ensure_installed = vim.tbl_keys(servers), - automatic_installation = true, - }) + mason_lspconfig.setup({ + ensure_installed = vim.tbl_keys(servers), + automatic_installation = true, + }) end for server_name, server_config in pairs(servers) do - vim.lsp.config(server_name, server_config) - vim.lsp.enable(server_name) + vim.lsp.config(server_name, server_config) + vim.lsp.enable(server_name) end -- completion @@ -351,31 +354,108 @@ vim.opt.completeopt = { "menu", "menuone", "noinsert" } local ok_cmp, cmp = pcall(require, "cmp") if ok_cmp then - cmp.setup({ - mapping = cmp.mapping.preset.insert({ - ["<Tab>"] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - else - fallback() - end - end, { "i", "s" }), - ["<S-Tab>"] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - else - fallback() - end - end, { "i", "s" }), - ["<C-Space>"] = cmp.mapping.complete(), - ["<C-e>"] = cmp.mapping.abort(), - ["<CR>"] = cmp.mapping.confirm({ select = true }), - }), - sources = cmp.config.sources({ - { name = "nvim_lsp" }, - }, { - { name = "buffer" }, - { name = "path" }, - }), - }) + cmp.setup({ + mapping = cmp.mapping.preset.insert({ + ["<Tab>"] = cmp.mapping(function(fallback) + local minuet_ok, minuet = pcall(require, "minuet.virtualtext") + if minuet_ok and minuet.action.is_visible() then + minuet.action.accept() + elseif cmp.visible() then + cmp.select_next_item() + else + fallback() + end + end, { "i", "s" }), + ["<S-Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + else + fallback() + end + end, { "i", "s" }), + ["<C-Space>"] = cmp.mapping.complete(), + ["<C-e>"] = cmp.mapping.abort(), + ["<CR>"] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + }, { + { name = "buffer" }, + { name = "path" }, + }), + }) +end + +-- minuet (ai completions via openrouter) +local _mkey = vim.fn.expand("~/.config/minuet/key") +local _ukey = vim.fn.expand("~/.config/minuet/mojicrypt.ukey") + +if vim.fn.filereadable(_mkey) == 1 and vim.fn.filereadable(_ukey) == 1 then + local ok_minuet, minuet = pcall(require, "minuet") + if ok_minuet then + minuet.setup({ + provider = "openai_compatible", + virtualtext = { + auto_trigger_ft = { "*" }, + keymap = { + accept = "<A-CR>", + accept_line = "<A-a>", + accept_n_lines = "<A-S-CR>", + next = "<A-]>", + prev = "<A-[>", + dismiss = "<A-BS>", + }, + }, + request_timeout = 3, + throttle = 1500, + debounce = 600, + provider_options = { + openai_compatible = { + api_key = (function() + local cached + return function() + if not cached then + local handle = io.open(_mkey, "r") + if not handle then return nil end + local content = handle:read("*a") + handle:close() + local result = vim.fn.system({ + "mojicrypt", "decrypt", + "-k", _ukey, + }, content) + if vim.v.shell_error == 0 then + for line in result:gmatch("[^\n]+") do + cached = line:gsub("%s+", "") + end + else + cached = "" + end + end + return cached ~= "" and cached or nil + end + end)(), + end_point = "https://openrouter.ai/api/v1/chat/completions", + model = "qwen/qwen3-235b-a22b-2507", + name = "Openrouter", + optional = { + max_tokens = 256, + top_p = 0.9, + provider = { + sort = "throughput", + }, + reasoning_effort = "minimal", + }, + }, + }, + }) + end +end + +-- opencode integration +local ok_oc, opencode = pcall(require, "opencode") +if ok_oc then + keymap({ "n", "x" }, "<leader>i", function() opencode.ask("@this: ") end, { desc = "opencode: ask" }) + keymap({ "n", "x" }, "<leader>is", function() opencode.select() end, { desc = "opencode: select" }) + keymap({ "n", "x" }, "<leader>io", function() return opencode.operator("@this ") end, + { desc = "opencode: operator", expr = true }) end |
