aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.code-vimrc2
-rw-r--r--.config/Code/User/keybindings.json22
-rw-r--r--.config/Code/User/settings.json26
-rw-r--r--.config/nvim/colors/kijish.vim330
-rw-r--r--.config/nvim/init.lua496
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