Compare commits
102 commits
Author | SHA1 | Date | |
---|---|---|---|
|
f173413eff | ||
|
324505f245 | ||
|
8227bf14b0 | ||
|
c64bdbbf7f | ||
|
b0d6dffe81 | ||
|
772a9b908f | ||
|
4c5afbe2b2 | ||
|
dfa4d93847 | ||
|
422ecf0308 | ||
|
eccbfcbea2 | ||
|
7d6b3e53c4 | ||
|
a1a4dc927e | ||
|
637fed3f6b | ||
|
044ed9117f | ||
|
c99606d4ee | ||
|
c0e15e1141 | ||
|
d7f591fd26 | ||
|
3e6923583f | ||
|
022660396e | ||
|
5c8e114e44 | ||
|
b3b051355a | ||
9a29f15556 | |||
2efe116082 | |||
e42d6245a5 | |||
fd32c079c9 | |||
0e55059a63 | |||
fa255704a1 | |||
7ca16fc0bf | |||
713c83768b | |||
f7e73a3eb3 | |||
d79cbd6989 | |||
eaaf6db7ad | |||
7a61c5ef16 | |||
64d04c8618 | |||
c2c40dbe03 | |||
73d0d7c14d | |||
727a6bcfbc | |||
a35b743b62 | |||
8a348282a4 | |||
0fabc551bd | |||
b521d84e7f | |||
ccbf466c55 | |||
dd18c0a9bc | |||
df3dc407a7 | |||
6d04ade3e5 | |||
351d1690aa | |||
07d13e67ae | |||
97128cf6e7 | |||
e70253835c | |||
1b268b2e77 | |||
65a01e8caa | |||
027c0c81f3 | |||
3e2dd9c332 | |||
d89d00af71 | |||
1ecaa1dcf8 | |||
062d618a21 | |||
8437ec67c1 | |||
4496f44c49 | |||
|
253d536ba4 | ||
|
15bc48a6c5 | ||
|
ca0b58aeb4 | ||
|
e6e2555274 | ||
|
994e42f688 | ||
3ad2648482 | |||
2bc591369a | |||
79b517a247 | |||
88e3cb4ead | |||
bb552b1482 | |||
d6c1fa669a | |||
3d6f14f2ff | |||
c41f6a096c | |||
8ab3473583 | |||
af32327977 | |||
f0b2401c51 | |||
70ee28574e | |||
e46e48405e | |||
9b8c24ca69 | |||
f90c49b9e2 | |||
721bc03588 | |||
9570523e75 | |||
c16858ffc7 | |||
f4fa48ed39 | |||
4f4e77d2e8 | |||
97dfc2aa6a | |||
b36cad9c7b | |||
bee54bc4c5 | |||
2c65a5f0d6 | |||
7b9ca1d26c | |||
319356d0a0 | |||
ceddfe4e8f | |||
896451558b | |||
2b9088acbf | |||
c8d6c028e8 | |||
178d46f664 | |||
e541136af7 | |||
39ad5f0381 | |||
d80dd17b48 | |||
dbc39e9daa | |||
ad462255b2 | |||
446b6ea0bd | |||
a6b46bb2c0 | |||
f551318edc |
17 changed files with 1470 additions and 143 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
plugin/packer_compiled.lua
|
||||
*.spl
|
7
init.lua
Normal file
7
init.lua
Normal file
|
@ -0,0 +1,7 @@
|
|||
-- remap leader to <space>
|
||||
vim.g.mapleader = ' '
|
||||
|
||||
require('settings')
|
||||
require('lsp')
|
||||
require('keymappings')
|
||||
require('plugins')
|
143
init.vim
143
init.vim
|
@ -1,143 +0,0 @@
|
|||
call plug#begin('~/.local/share/nvim/plugged')
|
||||
|
||||
Plug 'davidhalter/jedi-vim'
|
||||
Plug 'ncm2/float-preview.nvim'
|
||||
Plug 'dense-analysis/ale'
|
||||
Plug 'jacoborus/tender.vim'
|
||||
Plug 'vim-airline/vim-airline'
|
||||
Plug 'vim-airline/vim-airline-themes'
|
||||
Plug 'airblade/vim-gitgutter'
|
||||
Plug 'scrooloose/nerdtree'
|
||||
Plug 'gleam-lang/gleam.vim'
|
||||
Plug 'cespare/vim-toml'
|
||||
Plug 'rust-lang/rust.vim'
|
||||
Plug 'vim-scripts/DrawIt'
|
||||
|
||||
call plug#end()
|
||||
|
||||
let g:airline_theme='papercolor'
|
||||
let g:airline#extensions#ale#enabled=1
|
||||
|
||||
inoremap <expr><tab> pumvisible() ? "\<C-n>" : "\<tab>"
|
||||
inoremap <expr><S-Tab> pumvisible() ? "\<C-p>" : "\<S-TAB>"
|
||||
|
||||
let g:jedi#completions_enabled=0
|
||||
let g:jedi#use_splits_not_buffers="right"
|
||||
|
||||
" Preview window is floating
|
||||
let g:float_preview#docked=0
|
||||
let g:float_preview#max_width=100
|
||||
let g:float_preview#max_height=150
|
||||
let g:float_preview#auto_close=0
|
||||
|
||||
set tabstop=4
|
||||
set softtabstop=4
|
||||
set shiftwidth=4
|
||||
set textwidth=79
|
||||
set expandtab
|
||||
set autoindent
|
||||
set fileformat=unix
|
||||
set number
|
||||
" Hide top preview window, use float_preview instead
|
||||
set completeopt-=preview
|
||||
" Enable folding on indent
|
||||
set foldmethod=indent
|
||||
set foldlevel=79
|
||||
set omnifunc=ale#completion#OmniFunc
|
||||
|
||||
" Lint and check types
|
||||
let b:ale_linters={
|
||||
\ 'python': ['mypy', 'pyls', 'pylint'],
|
||||
\ 'ocaml': ['merlin'],
|
||||
\ 'rust': ['analyzer', 'cargo']
|
||||
\ }
|
||||
let b:ale_fixers = {
|
||||
\ 'rust': ['rustfmt'],
|
||||
\ 'python': ['autopep8'],
|
||||
\ 'ocaml': ['ocamlformat']
|
||||
\}
|
||||
|
||||
let g:ale_rust_rustfmt_options='--edition 2018'
|
||||
|
||||
let g:ale_fix_on_save=1
|
||||
let g:ale_lint_on_save=1
|
||||
let g:ale_lint_on_enter=0
|
||||
let g:ale_list_window_size=20
|
||||
" Use .venv as a global default
|
||||
let g:ale_virtualenv_dir_names=['.venv']
|
||||
let g:ale_completion_enabled=1
|
||||
let g:ale_sign_error="✗"
|
||||
let g:ale_sign_warning="⚠"
|
||||
let g:ale_echo_msg_error_str = 'E'
|
||||
let g:ale_echo_msg_warning_str = 'W'
|
||||
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
|
||||
|
||||
" Enable warnings about trailing whitespace for all files.
|
||||
let b:ale_warn_about_trailing_whitespace=1
|
||||
|
||||
nmap <leader>e :ALEDetail<CR>
|
||||
noremap <leader>d :ALEGoToDefinition<CR>
|
||||
noremap g] :ALEGoToDefinition<CR>
|
||||
noremap <leader>h :ALEHover<CR>
|
||||
|
||||
" ALE colors
|
||||
highlight ALEError ctermbg=DarkRed ctermfg=Black
|
||||
highlight ALEWarning ctermbg=Yellow ctermfg=White
|
||||
|
||||
" Use TAB to switch between buffers
|
||||
noremap <tab> :bn<CR>
|
||||
noremap <S-tab> :bp<CR>
|
||||
|
||||
" Highlight trailing whitespace (darker red) and remove all with Ctrl+k
|
||||
highlight WhitespaceEOL ctermbg=red guibg=#ab0d0d
|
||||
match WhitespaceEOL /\s\+\%#\@<!$/
|
||||
nnoremap <C-k> :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar><CR>
|
||||
|
||||
" Much better with Tomorrow Night Bright color theme set in alacritty
|
||||
" set background=dark
|
||||
highlight Search ctermfg=Black
|
||||
highlight Comment ctermfg=Grey
|
||||
highlight SignColumn ctermbg=0
|
||||
highlight LineNr ctermbg=0 ctermfg=248
|
||||
highlight Folded ctermbg=Green ctermfg=Black
|
||||
highlight Pmenu ctermbg=gray guibg=gray
|
||||
|
||||
highlight GitGutterAdd ctermfg=Green
|
||||
highlight GitGutterChange ctermfg=Red
|
||||
highlight GitGutterDelete ctermfg=DarkRed
|
||||
highlight GitGutterAddLine ctermbg=LightGreen
|
||||
highlight GitGutterChangeLine ctermbg=Yellow
|
||||
highlight GitGutterDeleteLine ctermbg=LightRed
|
||||
highlight GitGutterChangeDeleteLine ctermbg=LightRed
|
||||
|
||||
nmap ]h <Plug>(GitGutterNextHunk)
|
||||
nmap [h <Plug>(GitGutterPrevHunk)
|
||||
|
||||
let g:gitgutter_sign_added='+'
|
||||
let g:gitgutter_sign_modified='±'
|
||||
let g:gitgutter_sign_removed='-'
|
||||
let g:gitgutter_sign_removed_first_line='^'
|
||||
let g:gitgutter_sign_modified_removed='-'
|
||||
let g:gitgutter_map_keys=0
|
||||
let g:gitgutter_set_sign_backgrounds=1
|
||||
|
||||
" Toggles on different plugins/modes
|
||||
nmap <F1> :ToggleMouse<CR>
|
||||
set pastetoggle=<F2>
|
||||
nmap <F3> :set nonumber!<CR>
|
||||
nmap <F4> :GitGutterBufferToggle<CR>
|
||||
nmap <F5> :NERDTreeToggle<CR>
|
||||
nmap <F6> :GitGutterLineHighlightsToggle<CR>
|
||||
|
||||
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
|
||||
|
||||
" Maintain undo history between sessions
|
||||
if !isdirectory("/tmp/.vim-undo-dir-vladan")
|
||||
call mkdir("/tmp/.vim-undo-dir-vladan", "", 0700)
|
||||
endif
|
||||
set undodir=/tmp/.vim-undo-dir-vladan
|
||||
set undofile
|
||||
" Enable vimrc files per project
|
||||
set exrc
|
||||
" Disable unsafe commands in project vimrc
|
||||
set secure
|
24
lua/keymappings.lua
Normal file
24
lua/keymappings.lua
Normal file
|
@ -0,0 +1,24 @@
|
|||
-- Clear trailing whitespace
|
||||
vim.keymap.set("n", "<C-w>", "<cmd>let _s=@/<Bar>:%s/\\s\\+$//e<Bar>:let @/=_s<Bar><CR>")
|
||||
|
||||
-- Use tab and shift+tab to cycle buffers
|
||||
vim.keymap.set("n", "<tab>", "<cmd>bn<cr>")
|
||||
vim.keymap.set("n", "<S-tab>", "<cmd>bp<cr>")
|
||||
|
||||
-- Turn spellchecker on and off
|
||||
vim.keymap.set("n", "<leader>se", "<cmd>setlocal spell spelllang=en_us<cr>")
|
||||
vim.keymap.set("n", "<leader>sq", "<cmd>setlocal nospell<cr>")
|
||||
|
||||
vim.keymap.set("n", "<F3>", "<cmd>set nonumber!<CR>")
|
||||
vim.keymap.set("n", "<leader>fe", "<cmd>Oil<CR>")
|
||||
|
||||
vim.keymap.set("n", ']d', "<cmd>lua vim.diagnostic.goto_next()<CR>")
|
||||
vim.keymap.set("n", '[d', "<cmd>lua vim.diagnostic.goto_prev()<CR>")
|
||||
vim.keymap.set("n", "<leader>aa", require("actions-preview").code_actions)
|
||||
|
||||
-- Outline!!
|
||||
vim.keymap.set("n", "<leader>o", "<cmd>Outline<CR>")
|
||||
|
||||
|
||||
-- Close all buffers
|
||||
vim.keymap.set("n", '<C-S-x>', "<cmd>bufdo bd<CR>")
|
95
lua/lsp.lua
Normal file
95
lua/lsp.lua
Normal file
|
@ -0,0 +1,95 @@
|
|||
local common_on_attach = function(client, bufnr)
|
||||
-- Mappings.
|
||||
vim.keymap.set("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>")
|
||||
vim.keymap.set("n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>")
|
||||
vim.keymap.set("n", "<M-k>", "<cmd>lua vim.lsp.buf.type_definition()<CR>")
|
||||
vim.keymap.set("n", "<M-r>", "<cmd>lua vim.lsp.buf.rename()()<CR>")
|
||||
vim.keymap.set("n", "<leader>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>")
|
||||
vim.keymap.set("n", "<leader>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>")
|
||||
vim.keymap.set("n", "<leader>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>")
|
||||
vim.keymap.set("n", "<leader>r", "<cmd>lua vim.lsp.buf.rename()<CR>")
|
||||
|
||||
-- Autoformat on save.
|
||||
if client.supports_method("textDocument/formatting") then
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
vim.lsp.buf.format()
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
-- Use vim's default coloring.
|
||||
client.server_capabilities.semanticTokensProvider = nil
|
||||
for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do
|
||||
vim.api.nvim_set_hl(0, group, {})
|
||||
end
|
||||
end
|
||||
|
||||
local nvim_lsp = require('lspconfig')
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
|
||||
-- LSPs
|
||||
local servers = {
|
||||
"clangd",
|
||||
"dartls",
|
||||
"gleam",
|
||||
"lua_ls",
|
||||
"ocamllsp",
|
||||
"pyright",
|
||||
"rnix",
|
||||
"terraformls",
|
||||
"vimls",
|
||||
}
|
||||
for _, lsp in ipairs(servers) do
|
||||
nvim_lsp[lsp].setup { capabilities = capabilities, on_attach = common_on_attach }
|
||||
end
|
||||
|
||||
nvim_lsp.rust_analyzer.setup({
|
||||
on_attach = common_on_attach,
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
imports = {
|
||||
granularity = {
|
||||
group = "module",
|
||||
},
|
||||
prefix = "self",
|
||||
},
|
||||
cargo = {
|
||||
buildScripts = {
|
||||
enable = true,
|
||||
},
|
||||
},
|
||||
procMacro = {
|
||||
enable = true
|
||||
},
|
||||
checkOnSave = {
|
||||
command = "clippy",
|
||||
},
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
nvim_lsp.ruff.setup({
|
||||
on_attach = function (client)
|
||||
common_on_attach(client)
|
||||
client.server_capabilities.renameProvider = false
|
||||
client.server_capabilities.hoverProvider = false
|
||||
end,
|
||||
init_options = {
|
||||
settings = {
|
||||
-- Any extra CLI arguments for `ruff` go here.
|
||||
args = {}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
-- LSP diagnostics.
|
||||
vim.lsp.handlers["textDocument/publishDiagnostics"] =
|
||||
vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
|
||||
virtual_text = false,
|
||||
underline = true,
|
||||
signs = true,
|
||||
update_in_insert = false
|
||||
})
|
250
lua/plugins/catppuccin.lua
Normal file
250
lua/plugins/catppuccin.lua
Normal file
|
@ -0,0 +1,250 @@
|
|||
require("catppuccin").setup({
|
||||
-- transparent_background = vim
|
||||
flavour = "latte",
|
||||
highlight_overrides = {
|
||||
all = function(colors)
|
||||
return {
|
||||
FloatBorder = { link = "SagaBorder", fg="#4f4f4f" },
|
||||
LineNr = { fg = colors.subtext0 },
|
||||
Folded = { fg = colors.green },
|
||||
MatchWord = { bold = true },
|
||||
Visual = { sp = colors.text, underline = true },
|
||||
IndentBlankLineContextChar = { fg = colors.sapphire },
|
||||
WinSeparator = { fg = colors.text },
|
||||
TelescopeSelection = { fg = colors.subtext1, bg = colors.surface0 },
|
||||
TelescopeBorder = { fg = colors.surface1, bg = colors.surface1 },
|
||||
TelescopeNormal = { bg = "#fafafa" },
|
||||
TelescopePromptNormal = { bg = colors.surface1 },
|
||||
TelescopePromptBorder = { bg = colors.surface1, fg = colors.surface1 },
|
||||
CursorLine = { bg = colors.text },
|
||||
NvimTreeWinSeparator = { fg = colors.text },
|
||||
NvimTreeGitNew = { fg = colors.green },
|
||||
NvimTreeGitDirty = { fg = colors.yellow },
|
||||
NvimTreeGitDeleted = { fg = colors.red },
|
||||
-- ColorColumn = { bg = colors. },
|
||||
SpecialKey = { fg = colors.yellow },
|
||||
SagaBorder = { fg = colors.blue },
|
||||
HoverNormal = { fg = colors.text },
|
||||
|
||||
-- Gitsigns
|
||||
GitSignsAddInline = { link = "DiffAdd" },
|
||||
GitSignsDeleteInline = { link = "DiffDelete" },
|
||||
GitSignsChangedInline = { link = "DiffChange" } ,
|
||||
Diffview = { link = "DiffChange" } ,
|
||||
|
||||
StNormalMode = { fg = colors.surface0, bg = colors.blue, bold = true },
|
||||
StVisualMode = { fg = colors.surface0, bg = colors.sky, bold = true },
|
||||
StInsertMode = { fg = colors.surface0, bg = colors.lavender, bold = true },
|
||||
StTerminalMode = { fg = colors.surface0, bg = colors.green, bold = true },
|
||||
StNTerminalMode = { fg = colors.surface0, bg = colors.yellow, bold = true },
|
||||
StReplaceMode = { fg = colors.surface0, bg = colors.peach, bold = true },
|
||||
StConfirmMode = { fg = colors.surface0, bg = colors.sapphire, bold = true },
|
||||
StCommandMode = { fg = colors.surface0, bg = colors.green, bold = true },
|
||||
StSelectMode = { fg = colors.surface0, bg = colors.blue, bold = true },
|
||||
|
||||
StInviSep = { bg = colors.surface1, fg = colors.surface1 },
|
||||
StNormalModeSep = { bg = colors.surface1, fg = colors.blue },
|
||||
StVisualModeSep = { bg = colors.surface1, fg = colors.sky },
|
||||
StInsertModeSep = { bg = colors.surface1, fg = colors.lavender },
|
||||
StTerminalModeSep = { bg = colors.surface1, fg = colors.green },
|
||||
StNTerminalModeSep = { bg = colors.surface1, fg = colors.yellow },
|
||||
StReplaceModeSep = { bg = colors.surface1, fg = colors.peach },
|
||||
StConfirmModeSep = { bg = colors.surface1, fg = colors.sapphire },
|
||||
StCommandModeSep = { bg = colors.surface1, fg = colors.green },
|
||||
StSelectModeSep = { bg = colors.surface1, fg = colors.blue },
|
||||
|
||||
--CurFile
|
||||
StCwd = { bg = colors.yellow, fg = colors.text },
|
||||
StFile = { bg = colors.peach, fg = colors.text, bold = true },
|
||||
StCwdSep = { fg = colors.yellow, bg = colors.surface1 },
|
||||
StFileSep = { fg = colors.peach, bg = colors.surface1 },
|
||||
StDirFileSep = { fg = colors.yellow, bg = colors.peach },
|
||||
-- Git stuffs
|
||||
StGitBranch = { bg = colors.overlay0, fg = colors.mauve },
|
||||
StGitAdded = { bg = colors.overlay0, fg = colors.green },
|
||||
StGitChanged = { bg = colors.overlay0, fg = colors.yellow },
|
||||
StGitRemoved = { bg = colors.overlay0, fg = colors.red },
|
||||
StGitSep = { bg = colors.surface1, fg = colors.overlay0 },
|
||||
|
||||
-- LSP
|
||||
StLSPClient = { bg = colors.surface1, fg = colors.blue, bold = true },
|
||||
StLSPDiagSep = { bg = colors.surface1, fg = colors.overlay0 },
|
||||
StLSPErrors = { bg = colors.overlay0, fg = colors.red },
|
||||
StLSPWarnings = { bg = colors.overlay0, fg = colors.yellow },
|
||||
StLSPHints = { bg = colors.overlay0, fg = colors.mauve },
|
||||
StLspInfo = { bg = colors.overlay0, fg = colors.sky },
|
||||
--
|
||||
-- Lsp Diagnostics
|
||||
DiagnosticHint = { fg = colors.mauve },
|
||||
DiagnosticError = { fg = colors.red },
|
||||
DiagnosticWarn = { fg = colors.yellow },
|
||||
DiagnosticInformation = { fg = colors.green },
|
||||
|
||||
-- File Info
|
||||
StPosition = { bg = colors.sapphire, fg = colors.surface1 },
|
||||
StPositionSep = { bg = colors.surface1, fg = colors.sapphire },
|
||||
|
||||
TabLineFill = { fg = colors.text, bg = colors.crust, sp = colors.text },
|
||||
TabLineBufHidden = { fg = colors.mantle, bg = colors.subtext1, sp = colors.text },
|
||||
TabLineBufActive = { fg = colors.text, bg = colors.sapphire, bold = true, sp = colors.text },
|
||||
TabLineCurrentBuf = { fg = colors.mantle, bg = colors.red, bold = true, sp = colors.text },
|
||||
TabLineBufHiddenModified = { fg = colors.green, bg = colors.subtext1, sp = colors.text },
|
||||
TabLineBufActiveModified = { fg = colors.green, bg = colors.sapphire, bold = true, sp = colors.text },
|
||||
TabLineCurrentBufModified = { fg = colors.green, bg = colors.red, bold = true, sp = colors.text },
|
||||
TabLineModified = { fg = colors.green },
|
||||
TabLineCurrentTab = { fg = colors.mantle, bg = colors.red, bold = true, sp = colors.text },
|
||||
TabLineOtherTab = { fg = colors.mantle, bg = colors.subtext1, sp = colors.text },
|
||||
TabLineBufActiveSep = { fg = colors.sapphire, bg = colors.crust, sp = colors.text },
|
||||
TabLineCurrentBufSep = { fg = colors.red, bg = colors.crust, sp = colors.text },
|
||||
TabLineBufHiddenSep = { fg = colors.subtext1, bg = colors.crust, sp = colors.text },
|
||||
|
||||
DiagnosticUnnecessary = { link = "" },
|
||||
|
||||
--["@conceal.checked"] = { fg = colors.teal },
|
||||
--["@none"] = { link = "Normal" },
|
||||
--["@field"] = { fg = colors.blue },
|
||||
--["@comment.todo"] = { fg = colors.lavender },
|
||||
--["@property"] = { fg = colors.blue },
|
||||
--["@variable.member"] = { fg = colors.blue },
|
||||
--["@variable.parameter"] = { fg = colors.sky },
|
||||
--["@parameter"] = { fg = colors.sky },
|
||||
--["@comment.note"] = { link = "@comment.hint" },
|
||||
|
||||
--["@lsp.type.annotation"] = { fg = colors.darkyellow },
|
||||
--["@lsp.type.modifier.java"] = { link = "@type.qualifier" },
|
||||
--["@lsp.mod.builtin"] = { fg = colors.maroon },
|
||||
--["@lsp.mod.readonly.python"] = { link = "Constant" },
|
||||
--["@lsp.mod.documentation"] = { bold = true, fg = colors.mauve },
|
||||
--["@lsp.type.keyword"] = { fg = colors.mauve },
|
||||
}
|
||||
end,
|
||||
latte = function(colors)
|
||||
return {
|
||||
-- ["@lsp.type.keyword"] = { fg = colors.darkyellow },
|
||||
|
||||
Comment = { fg = colors.blue },
|
||||
Conditional = { fg = colors.darkyellow },
|
||||
Error = { fg = colors.base, bg = colors.red },
|
||||
Exception = { fg = colors.peach },
|
||||
Function = { fg = colors.cyan },
|
||||
Identifier = { fg = colors.green },
|
||||
Include = { fg = colors.pink },
|
||||
Keyword = { fg = colors.darkyellow },
|
||||
Operator = { fg = colors.darkyellow },
|
||||
Parameter = { fg = colors.sky },
|
||||
Special = { fg = colors.flamingo },
|
||||
Statement = { fg = colors.darkyellow },
|
||||
String = { fg = colors.red },
|
||||
Structure = { fg = colors.green },
|
||||
WhitespaceError = { fg = colors.base, bg = colors.red },
|
||||
Type = { fg = colors.cyan },
|
||||
StorageClass = { fg = colors.green },
|
||||
--Macro = { fg = colors.magenta },
|
||||
--Define = { fg = colors.magenta },
|
||||
}
|
||||
end,
|
||||
},
|
||||
color_overrides = {
|
||||
latte = {
|
||||
base = "#ffffff",
|
||||
flamingo = "#bb5d60",
|
||||
pink = "#d54597",
|
||||
mauve = "#a65fd5",
|
||||
red = "#D90E18",
|
||||
maroon = "#db3e68",
|
||||
peach = "#e46f2a",
|
||||
yellow = "#bc8705",
|
||||
darkyellow = "#B2640B",
|
||||
green = "#1a8e32",
|
||||
teal = "#00a390",
|
||||
sky = "#089ec0",
|
||||
sapphire = "#0ea0a0",
|
||||
blue = "#017bca",
|
||||
lavender = "#8584f7",
|
||||
text = "#222222",
|
||||
subtext1 = "#444444",
|
||||
subtext0 = "#666666",
|
||||
overlay2 = "#777777",
|
||||
overlay1 = "#888888",
|
||||
overlay0 = "#999999",
|
||||
surface2 = "#aaaaaa",
|
||||
surface1 = "#cccccc",
|
||||
surface0 = "#e5e5e5",
|
||||
mantle = "#eeeeee",
|
||||
crust = "#dddddd",
|
||||
cyan = "#0EB1A2",
|
||||
magenta = "#FF00FF",
|
||||
},
|
||||
},
|
||||
background = {
|
||||
light = "latte",
|
||||
dark = "mocha",
|
||||
},
|
||||
term_colors = true,
|
||||
-- dim_inactive = {
|
||||
-- enabled = true,
|
||||
-- shade = "light",
|
||||
-- percentage = 0.20,
|
||||
-- },
|
||||
styles = {
|
||||
comments = {},
|
||||
},
|
||||
integrations = {
|
||||
alpha = false,
|
||||
cmp = true,
|
||||
dap = true,
|
||||
dap_ui = true,
|
||||
dashboard = false,
|
||||
flash = false,
|
||||
gitsigns = true,
|
||||
leap = true,
|
||||
mini = {
|
||||
enabled = false,
|
||||
},
|
||||
mason = true,
|
||||
markdown = true,
|
||||
neogit = true,
|
||||
nvimtree = true,
|
||||
ufo = false,
|
||||
rainbow_delimiters = false,
|
||||
semantic_tokens = true,
|
||||
telescope = { enabled = true, style = "nvchad" },
|
||||
treesitter = false,
|
||||
barbecue = false,
|
||||
illuminate = false,
|
||||
indent_blankline = {
|
||||
enabled = true,
|
||||
colored_indent_levels = false,
|
||||
},
|
||||
native_lsp = {
|
||||
enabled = true,
|
||||
virtual_text = {
|
||||
errors = { "italic" },
|
||||
hints = { "italic" },
|
||||
warnings = { "italic" },
|
||||
information = { "italic" },
|
||||
},
|
||||
underlines = {
|
||||
errors = { "underline" },
|
||||
hints = { "underline" },
|
||||
warnings = { "underline" },
|
||||
information = { "underline" },
|
||||
},
|
||||
inlay_hints = {
|
||||
background = true,
|
||||
},
|
||||
},
|
||||
lsp_saga = true,
|
||||
lsp_trouble = true,
|
||||
navic = {
|
||||
enabled = false,
|
||||
custom_bg = "NONE",
|
||||
},
|
||||
dropbar = {
|
||||
enabled = false,
|
||||
color_mode = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.cmd.colorscheme("catppuccin")
|
115
lua/plugins/cmp.lua
Normal file
115
lua/plugins/cmp.lua
Normal file
|
@ -0,0 +1,115 @@
|
|||
-- Completion plugin config
|
||||
|
||||
vim.opt.completeopt = 'menuone,noselect'
|
||||
|
||||
local cmp = require('cmp')
|
||||
local cmp_kinds = {
|
||||
Text = ' ',
|
||||
Method = ' ',
|
||||
Function = ' ',
|
||||
Constructor = ' ',
|
||||
Field = ' ',
|
||||
Variable = ' ',
|
||||
Class = ' ',
|
||||
Interface = ' ',
|
||||
Module = ' ',
|
||||
Property = ' ',
|
||||
Unit = ' ',
|
||||
Value = ' ',
|
||||
Enum = ' ',
|
||||
Keyword = ' ',
|
||||
Snippet = ' ',
|
||||
Color = ' ',
|
||||
File = ' ',
|
||||
Reference = ' ',
|
||||
Folder = ' ',
|
||||
EnumMember = ' ',
|
||||
Constant = ' ',
|
||||
Struct = ' ',
|
||||
Event = ' ',
|
||||
Operator = ' ',
|
||||
TypeParameter = ' ',
|
||||
}
|
||||
|
||||
cmp.setup({
|
||||
formatting = {
|
||||
format = function(entry, vim_item)
|
||||
-- Kind icons
|
||||
vim_item.kind = string.format('%s %s', cmp_kinds[vim_item.kind], vim_item.kind)
|
||||
vim_item.menu = ({
|
||||
buffer = "[Buffer]",
|
||||
nvim_lsp = "[LSP]",
|
||||
luasnip = "[LuaSnip]",
|
||||
nvim_lua = "[Lua]",
|
||||
latex_symbols = "[LaTeX]",
|
||||
})[entry.source.name]
|
||||
return vim_item
|
||||
end
|
||||
},
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
local luasnip = require("luasnip")
|
||||
if not luasnip then
|
||||
return
|
||||
end
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
window = {
|
||||
completion = {
|
||||
border = nil,
|
||||
},
|
||||
documentation = {
|
||||
border = nil,
|
||||
max_height = 2000,
|
||||
}
|
||||
},
|
||||
completion = {
|
||||
autocomplete = false,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-x><C-o>'] = cmp.mapping.complete(),
|
||||
['<C-e>'] = cmp.mapping.abort(),
|
||||
-- Accept currently selected item.
|
||||
-- Set `select` to `false` to only confirm explicitly selected items.
|
||||
['<CR>'] = cmp.mapping.confirm({ select = false }),
|
||||
}),
|
||||
sources = cmp.config.sources(
|
||||
{
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
},
|
||||
{
|
||||
{ name = 'buffer' },
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
-- Set configuration for specific filetype.
|
||||
cmp.setup.filetype('gitcommit', {
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'git' },
|
||||
}, {
|
||||
{ name = 'buffer' },
|
||||
})
|
||||
})
|
||||
|
||||
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
|
||||
cmp.setup.cmdline({ '/', '?' }, {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = {
|
||||
{ name = 'buffer' }
|
||||
}
|
||||
})
|
||||
|
||||
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
|
||||
cmp.setup.cmdline(':', {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'path' }
|
||||
}, {
|
||||
{ name = 'cmdline' }
|
||||
})
|
||||
})
|
42
lua/plugins/gitsigns.lua
Normal file
42
lua/plugins/gitsigns.lua
Normal file
|
@ -0,0 +1,42 @@
|
|||
require('gitsigns').setup {
|
||||
on_attach = function(bufnr)
|
||||
local gs = package.loaded.gitsigns
|
||||
|
||||
local function map(mode, l, r, opts)
|
||||
opts = opts or {}
|
||||
opts.buffer = bufnr
|
||||
vim.keymap.set(mode, l, r, opts)
|
||||
end
|
||||
|
||||
-- Navigation
|
||||
map('n', ']c', function()
|
||||
if vim.wo.diff then return ']c' end
|
||||
vim.schedule(function() gs.next_hunk() end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
|
||||
map('n', '[c', function()
|
||||
if vim.wo.diff then return '[c' end
|
||||
vim.schedule(function() gs.prev_hunk() end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
|
||||
-- Actions
|
||||
map('n', '<leader>hs', gs.stage_hunk)
|
||||
map('n', '<leader>hr', gs.reset_hunk)
|
||||
map('v', '<leader>hs', function() gs.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end)
|
||||
map('v', '<leader>hr', function() gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end)
|
||||
map('n', '<leader>hS', gs.stage_buffer)
|
||||
map('n', '<leader>hu', gs.undo_stage_hunk)
|
||||
map('n', '<leader>hR', gs.reset_buffer)
|
||||
map('n', '<leader>hp', gs.preview_hunk)
|
||||
map('n', '<leader>hb', function() gs.blame_line { full = true } end)
|
||||
map('n', '<leader>tb', gs.toggle_current_line_blame)
|
||||
map('n', '<leader>hd', gs.diffthis)
|
||||
map('n', '<leader>hD', function() gs.diffthis('~') end)
|
||||
map('n', '<leader>td', gs.toggle_deleted)
|
||||
|
||||
-- Text object
|
||||
map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
|
||||
end
|
||||
}
|
94
lua/plugins/init.lua
Normal file
94
lua/plugins/init.lua
Normal file
|
@ -0,0 +1,94 @@
|
|||
require('plugins.packer_setup')
|
||||
|
||||
require('packer').startup(function()
|
||||
-- Packer can manage itself as an optional plugin
|
||||
use { 'wbthomason/packer.nvim', opt = true }
|
||||
|
||||
-- Fuzzy finder
|
||||
use {
|
||||
'nvim-telescope/telescope.nvim',
|
||||
requires = {
|
||||
{ 'nvim-lua/popup.nvim' },
|
||||
{ 'nvim-lua/plenary.nvim' },
|
||||
}
|
||||
}
|
||||
|
||||
-- Autocomplete and snippets
|
||||
use {
|
||||
'hrsh7th/nvim-cmp',
|
||||
requires = {
|
||||
{ 'hrsh7th/cmp-nvim-lsp' },
|
||||
{ 'hrsh7th/cmp-buffer' },
|
||||
{ 'hrsh7th/cmp-path' },
|
||||
{ 'hrsh7th/cmp-cmdline' },
|
||||
}
|
||||
}
|
||||
use { 'L3MON4D3/LuaSnip',
|
||||
config = function()
|
||||
local snippet_path = os.getenv("HOME") .. "/.config/nvim/snippets/"
|
||||
if not vim.tbl_contains(vim.opt.rtp:get(), snippet_path) then
|
||||
vim.opt.rtp:append(snippet_path)
|
||||
end
|
||||
|
||||
require("luasnip").config.set_config({
|
||||
history = true,
|
||||
updateevents = "TextChanged,TextChangedI",
|
||||
delete_check_events = "TextChanged,InsertLeave",
|
||||
})
|
||||
require("luasnip.loaders.from_lua").lazy_load()
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
require("luasnip.loaders.from_snipmate").lazy_load()
|
||||
end,
|
||||
requires = {
|
||||
{ "rafamadriz/friendly-snippets" },
|
||||
{ 'saadparwaiz1/cmp_luasnip' },
|
||||
{ "benfowler/telescope-luasnip.nvim" },
|
||||
},
|
||||
}
|
||||
|
||||
-- Statusbar, colors and syntax
|
||||
use { 'vim-airline/vim-airline' }
|
||||
use { 'vim-airline/vim-airline-themes' }
|
||||
|
||||
-- LSP and related
|
||||
use { 'neovim/nvim-lspconfig' }
|
||||
use { 'aznhe21/actions-preview.nvim' }
|
||||
use { 'folke/trouble.nvim' } -- lsp diagnostics
|
||||
|
||||
-- Plugins to extend builtin language support
|
||||
use { 'cespare/vim-toml' }
|
||||
use { 'gleam-lang/gleam.vim' }
|
||||
use { 'rust-lang/rust.vim' }
|
||||
use { 'folke/neodev.nvim' }
|
||||
use { 'hashivim/vim-terraform' }
|
||||
|
||||
-- Git
|
||||
use {
|
||||
'NeogitOrg/neogit',
|
||||
requires = {
|
||||
{ "nvim-lua/plenary.nvim" },
|
||||
{ "sindrets/diffview.nvim" },
|
||||
},
|
||||
}
|
||||
use { "lewis6991/gitsigns.nvim" }
|
||||
|
||||
-- Filesystem browser
|
||||
use { 'stevearc/oil.nvim' }
|
||||
|
||||
-- Misc
|
||||
use { 'jbyuki/venn.nvim' } -- ascii diagrams
|
||||
|
||||
use { 'hedyhli/outline.nvim' }
|
||||
|
||||
use { "catppuccin/nvim", as = "catppuccin" }
|
||||
|
||||
end)
|
||||
|
||||
require('plugins.catppuccin')
|
||||
require('plugins.cmp')
|
||||
require('plugins.gitsigns')
|
||||
require('plugins.neogit')
|
||||
require('plugins.oil')
|
||||
require('plugins.outline')
|
||||
require('plugins.telescope')
|
||||
require('plugins.venn')
|
301
lua/plugins/neogit.lua
Normal file
301
lua/plugins/neogit.lua
Normal file
|
@ -0,0 +1,301 @@
|
|||
local neogit = require('neogit')
|
||||
|
||||
vim.keymap.set('n', '<C-S-g>', neogit.open, {})
|
||||
|
||||
neogit.setup {
|
||||
-- Hides the hints at the top of the status buffer
|
||||
disable_hint = false,
|
||||
-- Disables changing the buffer highlights based on where the cursor is.
|
||||
disable_context_highlighting = false,
|
||||
-- Disables signs for sections/items/hunks
|
||||
disable_signs = false,
|
||||
-- Changes what mode the Commit Editor starts in. `true` will leave nvim in normal mode, `false` will change nvim to
|
||||
-- insert mode, and `"auto"` will change nvim to insert mode IF the commit message is empty, otherwise leaving it in
|
||||
-- normal mode.
|
||||
disable_insert_on_commit = "auto",
|
||||
-- When enabled, will watch the `.git/` directory for changes and refresh the status buffer in response to filesystem
|
||||
-- events.
|
||||
filewatcher = {
|
||||
interval = 1000,
|
||||
enabled = true,
|
||||
},
|
||||
-- "ascii" is the graph the git CLI generates
|
||||
-- "unicode" is the graph like https://github.com/rbong/vim-flog
|
||||
graph_style = "ascii",
|
||||
-- Used to generate URL's for branch popup action "pull request".
|
||||
git_services = {
|
||||
["github.com"] = "https://github.com/${owner}/${repository}/compare/${branch_name}?expand=1",
|
||||
["bitbucket.org"] = "https://bitbucket.org/${owner}/${repository}/pull-requests/new?source=${branch_name}&t=1",
|
||||
["gitlab.com"] = "https://gitlab.com/${owner}/${repository}/merge_requests/new?merge_request[source_branch]=${branch_name}",
|
||||
},
|
||||
-- Allows a different telescope sorter. Defaults to 'fuzzy_with_index_bias'. The example below will use the native fzf
|
||||
-- sorter instead. By default, this function returns `nil`.
|
||||
telescope_sorter = function()
|
||||
return require("telescope").extensions.fzf.native_fzf_sorter()
|
||||
end,
|
||||
-- Persist the values of switches/options within and across sessions
|
||||
remember_settings = true,
|
||||
-- Scope persisted settings on a per-project basis
|
||||
use_per_project_settings = true,
|
||||
-- Table of settings to never persist. Uses format "Filetype--cli-value"
|
||||
ignored_settings = {
|
||||
"NeogitPushPopup--force-with-lease",
|
||||
"NeogitPushPopup--force",
|
||||
"NeogitPullPopup--rebase",
|
||||
"NeogitCommitPopup--allow-empty",
|
||||
"NeogitRevertPopup--no-edit",
|
||||
},
|
||||
-- Configure highlight group features
|
||||
highlight = {
|
||||
italic = true,
|
||||
bold = true,
|
||||
underline = true
|
||||
},
|
||||
-- Set to false if you want to be responsible for creating _ALL_ keymappings
|
||||
use_default_keymaps = true,
|
||||
-- Neogit refreshes its internal state after specific events, which can be expensive depending on the repository size.
|
||||
-- Disabling `auto_refresh` will make it so you have to manually refresh the status after you open it.
|
||||
auto_refresh = true,
|
||||
-- Value used for `--sort` option for `git branch` command
|
||||
-- By default, branches will be sorted by commit date descending
|
||||
-- Flag description: https://git-scm.com/docs/git-branch#Documentation/git-branch.txt---sortltkeygt
|
||||
-- Sorting keys: https://git-scm.com/docs/git-for-each-ref#_options
|
||||
sort_branches = "-committerdate",
|
||||
-- Change the default way of opening neogit
|
||||
kind = "tab",
|
||||
-- Disable line numbers and relative line numbers
|
||||
disable_line_numbers = true,
|
||||
-- The time after which an output console is shown for slow running commands
|
||||
console_timeout = 2000,
|
||||
-- Automatically show console if a command takes more than console_timeout milliseconds
|
||||
auto_show_console = true,
|
||||
-- Automatically close the console if the process exits with a 0 (success) status
|
||||
auto_close_console = true,
|
||||
status = {
|
||||
show_head_commit_hash = true,
|
||||
recent_commit_count = 10,
|
||||
HEAD_padding = 10,
|
||||
HEAD_folded = false,
|
||||
mode_padding = 3,
|
||||
mode_text = {
|
||||
M = "modified",
|
||||
N = "new file",
|
||||
A = "added",
|
||||
D = "deleted",
|
||||
C = "copied",
|
||||
U = "updated",
|
||||
R = "renamed",
|
||||
DD = "unmerged",
|
||||
AU = "unmerged",
|
||||
UD = "unmerged",
|
||||
UA = "unmerged",
|
||||
DU = "unmerged",
|
||||
AA = "unmerged",
|
||||
UU = "unmerged",
|
||||
["?"] = "",
|
||||
},
|
||||
},
|
||||
commit_editor = {
|
||||
kind = "tab",
|
||||
show_staged_diff = true,
|
||||
-- Accepted values:
|
||||
-- "split" to show the staged diff below the commit editor
|
||||
-- "vsplit" to show it to the right
|
||||
-- "split_above" Like :top split
|
||||
-- "vsplit_left" like :vsplit, but open to the left
|
||||
-- "auto" "vsplit" if window would have 80 cols, otherwise "split"
|
||||
staged_diff_split_kind = "split"
|
||||
},
|
||||
commit_select_view = {
|
||||
kind = "tab",
|
||||
},
|
||||
commit_view = {
|
||||
kind = "vsplit",
|
||||
verify_commit = vim.fn.executable("gpg") == 1, -- Can be set to true or false, otherwise we try to find the binary
|
||||
},
|
||||
log_view = {
|
||||
kind = "tab",
|
||||
},
|
||||
rebase_editor = {
|
||||
kind = "auto",
|
||||
},
|
||||
reflog_view = {
|
||||
kind = "tab",
|
||||
},
|
||||
merge_editor = {
|
||||
kind = "auto",
|
||||
},
|
||||
tag_editor = {
|
||||
kind = "auto",
|
||||
},
|
||||
preview_buffer = {
|
||||
kind = "split",
|
||||
},
|
||||
popup = {
|
||||
kind = "split",
|
||||
},
|
||||
signs = {
|
||||
-- { CLOSED, OPENED }
|
||||
hunk = { "", "" },
|
||||
item = { ">", "v" },
|
||||
section = { ">", "v" },
|
||||
},
|
||||
-- Each Integration is auto-detected through plugin presence, however, it can be disabled by setting to `false`
|
||||
integrations = {
|
||||
-- If enabled, use telescope for menu selection rather than vim.ui.select.
|
||||
-- Allows multi-select and some things that vim.ui.select doesn't.
|
||||
telescope = true,
|
||||
-- Neogit only provides inline diffs. If you want a more traditional way to look at diffs, you can use `diffview`.
|
||||
-- The diffview integration enables the diff popup.
|
||||
--
|
||||
-- Requires you to have `sindrets/diffview.nvim` installed.
|
||||
diffview = true,
|
||||
|
||||
-- If enabled, uses fzf-lua for menu selection. If the telescope integration
|
||||
-- is also selected then telescope is used instead
|
||||
-- Requires you to have `ibhagwan/fzf-lua` installed.
|
||||
fzf_lua = true,
|
||||
},
|
||||
sections = {
|
||||
-- Reverting/Cherry Picking
|
||||
sequencer = {
|
||||
folded = false,
|
||||
hidden = false,
|
||||
},
|
||||
untracked = {
|
||||
folded = false,
|
||||
hidden = false,
|
||||
},
|
||||
unstaged = {
|
||||
folded = false,
|
||||
hidden = false,
|
||||
},
|
||||
staged = {
|
||||
folded = false,
|
||||
hidden = false,
|
||||
},
|
||||
stashes = {
|
||||
folded = true,
|
||||
hidden = false,
|
||||
},
|
||||
unpulled_upstream = {
|
||||
folded = true,
|
||||
hidden = false,
|
||||
},
|
||||
unmerged_upstream = {
|
||||
folded = false,
|
||||
hidden = false,
|
||||
},
|
||||
unpulled_pushRemote = {
|
||||
folded = true,
|
||||
hidden = false,
|
||||
},
|
||||
unmerged_pushRemote = {
|
||||
folded = false,
|
||||
hidden = false,
|
||||
},
|
||||
recent = {
|
||||
folded = true,
|
||||
hidden = false,
|
||||
},
|
||||
rebase = {
|
||||
folded = true,
|
||||
hidden = false,
|
||||
},
|
||||
},
|
||||
mappings = {
|
||||
commit_editor = {
|
||||
["q"] = "Close",
|
||||
["<c-c><c-c>"] = "Submit",
|
||||
["<c-c><c-k>"] = "Abort",
|
||||
},
|
||||
commit_editor_I = {
|
||||
["<c-c><c-c>"] = "Submit",
|
||||
["<c-c><c-k>"] = "Abort",
|
||||
},
|
||||
rebase_editor = {
|
||||
["p"] = "Pick",
|
||||
["r"] = "Reword",
|
||||
["e"] = "Edit",
|
||||
["s"] = "Squash",
|
||||
["f"] = "Fixup",
|
||||
["x"] = "Execute",
|
||||
["d"] = "Drop",
|
||||
["b"] = "Break",
|
||||
["q"] = "Close",
|
||||
["<cr>"] = "OpenCommit",
|
||||
["gk"] = "MoveUp",
|
||||
["gj"] = "MoveDown",
|
||||
["<c-c><c-c>"] = "Submit",
|
||||
["<c-c><c-k>"] = "Abort",
|
||||
["[c"] = "OpenOrScrollUp",
|
||||
["]c"] = "OpenOrScrollDown",
|
||||
},
|
||||
rebase_editor_I = {
|
||||
["<c-c><c-c>"] = "Submit",
|
||||
["<c-c><c-k>"] = "Abort",
|
||||
},
|
||||
finder = {
|
||||
["<cr>"] = "Select",
|
||||
["<c-c>"] = "Close",
|
||||
["<esc>"] = "Close",
|
||||
["<c-n>"] = "Next",
|
||||
["<c-p>"] = "Previous",
|
||||
["<down>"] = "Next",
|
||||
["<up>"] = "Previous",
|
||||
["<tab>"] = "MultiselectToggleNext",
|
||||
["<s-tab>"] = "MultiselectTogglePrevious",
|
||||
["<c-j>"] = "NOP",
|
||||
},
|
||||
-- Setting any of these to `false` will disable the mapping.
|
||||
popup = {
|
||||
["?"] = "HelpPopup",
|
||||
["A"] = "CherryPickPopup",
|
||||
["D"] = "DiffPopup",
|
||||
["M"] = "RemotePopup",
|
||||
["P"] = "PushPopup",
|
||||
["X"] = "ResetPopup",
|
||||
["Z"] = "StashPopup",
|
||||
["b"] = "BranchPopup",
|
||||
["B"] = "BisectPopup",
|
||||
["c"] = "CommitPopup",
|
||||
["f"] = "FetchPopup",
|
||||
["l"] = "LogPopup",
|
||||
["m"] = "MergePopup",
|
||||
["p"] = "PullPopup",
|
||||
["r"] = "RebasePopup",
|
||||
["v"] = "RevertPopup",
|
||||
["w"] = "WorktreePopup",
|
||||
},
|
||||
status = {
|
||||
["k"] = "MoveUp",
|
||||
["j"] = "MoveDown",
|
||||
["q"] = "Close",
|
||||
["o"] = "OpenTree",
|
||||
["I"] = "InitRepo",
|
||||
["1"] = "Depth1",
|
||||
["2"] = "Depth2",
|
||||
["3"] = "Depth3",
|
||||
["4"] = "Depth4",
|
||||
["<tab>"] = "Toggle",
|
||||
["x"] = "Discard",
|
||||
["s"] = "Stage",
|
||||
["S"] = "StageUnstaged",
|
||||
["<c-s>"] = "StageAll",
|
||||
["K"] = "Untrack",
|
||||
["u"] = "Unstage",
|
||||
["U"] = "UnstageStaged",
|
||||
["$"] = "CommandHistory",
|
||||
["Y"] = "YankSelected",
|
||||
["<c-r>"] = "RefreshBuffer",
|
||||
["<enter>"] = "GoToFile",
|
||||
["<c-v>"] = "VSplitOpen",
|
||||
["<c-x>"] = "SplitOpen",
|
||||
["<c-t>"] = "TabOpen",
|
||||
["{"] = "GoToPreviousHunkHeader",
|
||||
["}"] = "GoToNextHunkHeader",
|
||||
["[c"] = "OpenOrScrollUp",
|
||||
["]c"] = "OpenOrScrollDown",
|
||||
},
|
||||
},
|
||||
}
|
164
lua/plugins/oil.lua
Normal file
164
lua/plugins/oil.lua
Normal file
|
@ -0,0 +1,164 @@
|
|||
local git_ignored = setmetatable({}, {
|
||||
__index = function(self, key)
|
||||
local proc = vim.system(
|
||||
{ "git", "ls-files", "--ignored", "--exclude-standard", "--others", "--directory" },
|
||||
{
|
||||
cwd = key,
|
||||
text = true,
|
||||
}
|
||||
)
|
||||
local result = proc:wait()
|
||||
local ret = {}
|
||||
if result.code == 0 then
|
||||
for line in vim.gsplit(result.stdout, "\n", { plain = true, trimempty = true }) do
|
||||
-- Remove trailing slash
|
||||
line = line:gsub("/$", "")
|
||||
table.insert(ret, line)
|
||||
end
|
||||
end
|
||||
|
||||
rawset(self, key, ret)
|
||||
return ret
|
||||
end,
|
||||
})
|
||||
|
||||
require('oil').setup({
|
||||
default_file_explorer = true,
|
||||
-- Id is automatically added at the beginning, and name at the end
|
||||
-- See :help oil-columns
|
||||
columns = {
|
||||
"icon",
|
||||
-- "permissions",
|
||||
-- "size",
|
||||
-- "mtime",
|
||||
},
|
||||
-- Buffer-local options to use for oil buffers
|
||||
buf_options = {
|
||||
buflisted = false,
|
||||
bufhidden = "hide",
|
||||
},
|
||||
-- Window-local options to use for oil buffers
|
||||
win_options = {
|
||||
wrap = false,
|
||||
signcolumn = "no",
|
||||
cursorcolumn = false,
|
||||
foldcolumn = "0",
|
||||
spell = false,
|
||||
list = false,
|
||||
conceallevel = 3,
|
||||
concealcursor = "nvic",
|
||||
},
|
||||
-- Send deleted files to the trash instead of permanently deleting them (:help oil-trash)
|
||||
delete_to_trash = false,
|
||||
-- Skip the confirmation popup for simple operations
|
||||
skip_confirm_for_simple_edits = false,
|
||||
-- Change this to customize the command used when deleting to trash
|
||||
trash_command = "trash-put",
|
||||
-- Selecting a new/moved/renamed file or directory will prompt you to save changes first
|
||||
prompt_save_on_select_new_entry = true,
|
||||
-- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap
|
||||
-- options with a `callback` (e.g. { callback = function() ... end, desc = "", nowait = true })
|
||||
-- Additionally, if it is a string that matches "actions.<name>",
|
||||
-- it will use the mapping at require("oil.actions").<name>
|
||||
-- Set to `false` to remove a keymap
|
||||
-- See :help oil-actions for a list of all available actions
|
||||
keymaps = {
|
||||
["g?"] = "actions.show_help",
|
||||
["<CR>"] = "actions.select",
|
||||
["<C-s>"] = "actions.select_vsplit",
|
||||
["<C-h>"] = "actions.select_split",
|
||||
["<C-t>"] = "actions.select_tab",
|
||||
["<C-p>"] = "actions.preview",
|
||||
["<C-c>"] = "actions.close",
|
||||
["<C-l>"] = "actions.refresh",
|
||||
["-"] = "actions.parent",
|
||||
["_"] = "actions.open_cwd",
|
||||
["`"] = "actions.cd",
|
||||
["~"] = "actions.tcd",
|
||||
["gs"] = "actions.change_sort",
|
||||
["gx"] = "actions.open_external",
|
||||
["g."] = "actions.toggle_hidden",
|
||||
},
|
||||
-- Set to false to disable all of the above keymaps
|
||||
use_default_keymaps = true,
|
||||
view_options = {
|
||||
-- Show files and directories that start with "."
|
||||
show_hidden = true,
|
||||
-- This function defines what is considered a "hidden" file
|
||||
is_hidden_file = function(name, _)
|
||||
if vim.startswith(name, ".") then
|
||||
return true
|
||||
end
|
||||
local dir = require("oil").get_current_dir()
|
||||
-- if no local directory (e.g. for ssh connections), always show
|
||||
if not dir then
|
||||
return false
|
||||
end
|
||||
-- return vim.list_contains(git_ignored[dir], name)
|
||||
end,
|
||||
-- This function defines what will never be shown, even when `show_hidden` is set
|
||||
is_always_hidden = function(name, bufnr)
|
||||
return false
|
||||
end,
|
||||
sort = {
|
||||
-- sort order can be "asc" or "desc"
|
||||
-- see :help oil-columns to see which columns are sortable
|
||||
{ "type", "asc" },
|
||||
{ "name", "asc" },
|
||||
},
|
||||
},
|
||||
-- Configuration for the floating window in oil.open_float
|
||||
float = {
|
||||
-- Padding around the floating window
|
||||
padding = 2,
|
||||
max_width = 0,
|
||||
max_height = 0,
|
||||
border = "rounded",
|
||||
win_options = {
|
||||
winblend = 0,
|
||||
},
|
||||
-- This is the config that will be passed to nvim_open_win.
|
||||
-- Change values here to customize the layout
|
||||
override = function(conf)
|
||||
return conf
|
||||
end,
|
||||
},
|
||||
-- Configuration for the actions floating preview window
|
||||
preview = {
|
||||
-- Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
|
||||
-- min_width and max_width can be a single value or a list of mixed integer/float types.
|
||||
-- max_width = {100, 0.8} means "the lesser of 100 columns or 80% of total"
|
||||
max_width = 0.9,
|
||||
-- min_width = {40, 0.4} means "the greater of 40 columns or 40% of total"
|
||||
min_width = { 40, 0.4 },
|
||||
-- optionally define an integer/float for the exact width of the preview window
|
||||
width = nil,
|
||||
-- Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
|
||||
-- min_height and max_height can be a single value or a list of mixed integer/float types.
|
||||
-- max_height = {80, 0.9} means "the lesser of 80 columns or 90% of total"
|
||||
max_height = 0.9,
|
||||
-- min_height = {5, 0.1} means "the greater of 5 columns or 10% of total"
|
||||
min_height = { 5, 0.1 },
|
||||
-- optionally define an integer/float for the exact height of the preview window
|
||||
height = nil,
|
||||
border = "rounded",
|
||||
win_options = {
|
||||
winblend = 0,
|
||||
},
|
||||
},
|
||||
-- Configuration for the floating progress window
|
||||
progress = {
|
||||
max_width = 0.9,
|
||||
min_width = { 40, 0.4 },
|
||||
width = nil,
|
||||
max_height = { 10, 0.9 },
|
||||
min_height = { 5, 0.1 },
|
||||
height = nil,
|
||||
border = "rounded",
|
||||
minimized_border = "none",
|
||||
win_options = {
|
||||
winblend = 0,
|
||||
},
|
||||
},
|
||||
|
||||
})
|
137
lua/plugins/outline.lua
Normal file
137
lua/plugins/outline.lua
Normal file
|
@ -0,0 +1,137 @@
|
|||
require("outline").setup({
|
||||
guides = {
|
||||
enabled = true,
|
||||
markers = {
|
||||
bottom = '└',
|
||||
middle = '├',
|
||||
vertical = '│',
|
||||
horizontal = '─',
|
||||
},
|
||||
},
|
||||
outline_items = {
|
||||
show_symbol_details = true,
|
||||
show_symbol_lineno = false,
|
||||
-- The two below are both for auto_update_events.follow
|
||||
highlight_hovered_item = true,
|
||||
-- On open, always followed. This is for auto_update_events.follow, whether
|
||||
-- to auto update cursor position to reflect code location. If false, can
|
||||
-- manually trigger with follow_cursor (API, command, keymap action).
|
||||
auto_set_cursor = true,
|
||||
auto_update_events = {
|
||||
follow = { 'CursorMoved' },
|
||||
items = { 'InsertLeave', 'WinEnter', 'BufEnter', 'BufWinEnter', 'BufWritePost' },
|
||||
},
|
||||
},
|
||||
outline_window = {
|
||||
position = 'right',
|
||||
split_command = nil,
|
||||
width = 25,
|
||||
relative_width = true,
|
||||
wrap = false,
|
||||
focus_on_open = true,
|
||||
auto_close = false,
|
||||
auto_jump = false,
|
||||
show_numbers = false,
|
||||
show_relative_numbers = false,
|
||||
---@type boolean|string?
|
||||
show_cursorline = true,
|
||||
hide_cursor = false,
|
||||
winhl = '',
|
||||
jump_highlight_duration = 400,
|
||||
center_on_jump = true,
|
||||
},
|
||||
preview_window = {
|
||||
live = false,
|
||||
auto_preview = false,
|
||||
width = 50,
|
||||
min_width = 50,
|
||||
relative_width = true,
|
||||
height = 50,
|
||||
min_height = 10,
|
||||
relative_height = true,
|
||||
border = 'single',
|
||||
open_hover_on_preview = false,
|
||||
winhl = 'NormalFloat:',
|
||||
winblend = 0,
|
||||
},
|
||||
symbol_folding = {
|
||||
autofold_depth = 1,
|
||||
auto_unfold = {
|
||||
hovered = true,
|
||||
---@type boolean|integer
|
||||
only = true,
|
||||
},
|
||||
markers = { '', '' },
|
||||
},
|
||||
keymaps = {
|
||||
show_help = '?',
|
||||
close = { '<Esc>', 'q' },
|
||||
goto_location = '<Cr>',
|
||||
peek_location = 'o',
|
||||
goto_and_close = '<S-Cr>',
|
||||
restore_location = '<C-g>',
|
||||
hover_symbol = '<C-space>',
|
||||
toggle_preview = 'K',
|
||||
rename_symbol = 'r',
|
||||
code_actions = 'a',
|
||||
fold = 'h',
|
||||
fold_toggle = '<tab>',
|
||||
fold_toggle_all = '<S-tab>',
|
||||
unfold = 'l',
|
||||
fold_all = 'W',
|
||||
unfold_all = 'E',
|
||||
fold_reset = 'R',
|
||||
down_and_jump = '<C-j>',
|
||||
up_and_jump = '<C-k>',
|
||||
},
|
||||
providers = {
|
||||
priority = { 'lsp', 'coc', 'markdown', 'norg' },
|
||||
lsp = {
|
||||
blacklist_clients = {},
|
||||
},
|
||||
markdown = {
|
||||
filetypes = { 'markdown' },
|
||||
},
|
||||
},
|
||||
symbols = {
|
||||
---@type outline.FilterConfig?
|
||||
filter = nil,
|
||||
icon_source = nil,
|
||||
icon_fetcher = nil,
|
||||
icons = {
|
||||
File = { icon = '', hl = 'Identifier' },
|
||||
Module = { icon = '', hl = 'Include' },
|
||||
Namespace = { icon = '{}', hl = 'Include' },
|
||||
Package = { icon = '', hl = 'Include' },
|
||||
Class = { icon = '𝓒', hl = 'Type' },
|
||||
Method = { icon = '.ƒ', hl = 'Function' },
|
||||
Property = { icon = '', hl = 'Identifier' },
|
||||
Field = { icon = '-', hl = 'Identifier' },
|
||||
Constructor = { icon = '()', hl = 'Special' },
|
||||
Enum = { icon = 'ℰ', hl = 'Type' },
|
||||
Interface = { icon = 'i', hl = 'Type' },
|
||||
Function = { icon = 'ƒ', hl = 'Function' },
|
||||
Variable = { icon = '(x)', hl = 'Constant' },
|
||||
Constant = { icon = 'c', hl = 'Constant' },
|
||||
String = { icon = '𝓐', hl = 'String' },
|
||||
Number = { icon = '#', hl = 'Number' },
|
||||
Boolean = { icon = '⊨', hl = 'Boolean' },
|
||||
Array = { icon = '[]', hl = 'Constant' },
|
||||
Object = { icon = '⦿', hl = 'Type' },
|
||||
Key = { icon = '🔐', hl = 'Type' },
|
||||
Null = { icon = 'NULL', hl = 'Type' },
|
||||
EnumMember = { icon = '', hl = 'Identifier' },
|
||||
Struct = { icon = '𝓢', hl = 'Structure' },
|
||||
Event = { icon = '🗲', hl = 'Type' },
|
||||
Operator = { icon = '+', hl = 'Identifier' },
|
||||
TypeParameter = { icon = '𝙏', hl = 'Identifier' },
|
||||
Component = { icon = '', hl = 'Function' },
|
||||
Fragment = { icon = '-', hl = 'Constant' },
|
||||
-- ccls
|
||||
TypeAlias = { icon = 't ', hl = 'Type' },
|
||||
Parameter = { icon = 'p ', hl = 'Identifier' },
|
||||
StaticMethod = { icon = '. ', hl = 'Function' },
|
||||
Macro = { icon = ' ', hl = 'Function' },
|
||||
},
|
||||
},
|
||||
})
|
9
lua/plugins/packer_setup.lua
Normal file
9
lua/plugins/packer_setup.lua
Normal file
|
@ -0,0 +1,9 @@
|
|||
-- Auto install packer.nvim if not exists
|
||||
local install_path = vim.fn.stdpath('data') .. '/site/pack/packer/opt/packer.nvim'
|
||||
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
|
||||
vim.api.nvim_command('!git clone https://github.com/wbthomason/packer.nvim ' .. install_path)
|
||||
end
|
||||
|
||||
vim.cmd [[packadd packer.nvim]]
|
||||
-- Auto compile when there are changes in plugins.lua
|
||||
vim.cmd 'autocmd BufWritePost plugins.lua PackerCompile'
|
62
lua/plugins/telescope.lua
Normal file
62
lua/plugins/telescope.lua
Normal file
|
@ -0,0 +1,62 @@
|
|||
local telescope = require('telescope')
|
||||
local actions = require('telescope.actions')
|
||||
local builtin = require('telescope.builtin')
|
||||
|
||||
local telescope_last = 0
|
||||
function telescope_resume()
|
||||
if telescope_last == 0 then
|
||||
telescope_last = 1
|
||||
builtin.live_grep()
|
||||
else
|
||||
builtin.resume()
|
||||
end
|
||||
end
|
||||
|
||||
telescope.setup {
|
||||
defaults = {
|
||||
sorting_strategy = "ascending",
|
||||
live_grep_arguments = { 'rg',
|
||||
'--hidden', '--no-ignore', '--color=never',
|
||||
'--with-filename', '--line-number',
|
||||
'--column', '--smart-case', '--no-heading',
|
||||
},
|
||||
preview = {
|
||||
treesitter = false
|
||||
},
|
||||
},
|
||||
pickers = {
|
||||
live_grep = {
|
||||
mappings = {
|
||||
i = { ["<c-f>"] = actions.to_fuzzy_refine },
|
||||
n = { ["<c-f>"] = telescope_resume },
|
||||
},
|
||||
},
|
||||
find_files = {
|
||||
cache_picker = false,
|
||||
},
|
||||
git_files = {
|
||||
cache_picker = false,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- Snippets can be useful.
|
||||
vim.keymap.set('n', '<leader>ss', telescope.extensions.luasnip.luasnip, {})
|
||||
|
||||
-- Fuzzy * files, symbols, buffers, help, etc.
|
||||
vim.keymap.set('n', '<leader>fa', builtin.find_files) -- f[ind]a[ll]
|
||||
vim.keymap.set('n', '<leader>fb', builtin.buffers)
|
||||
vim.keymap.set('n', '<leader>fd', builtin.diagnostics)
|
||||
vim.keymap.set('n', '<leader>ff', builtin.git_files)
|
||||
vim.keymap.set('n', '<leader>fh', builtin.help_tags)
|
||||
vim.keymap.set('n', '<leader>fs', builtin.lsp_dynamic_workspace_symbols)
|
||||
|
||||
-- Grep (the only one).
|
||||
vim.keymap.set('n', '<leader>gg', builtin.live_grep)
|
||||
|
||||
-- LSP navigation.
|
||||
vim.keymap.set('n', '<leader>gd', builtin.lsp_definitions)
|
||||
vim.keymap.set('n', '<leader>gr', builtin.lsp_references)
|
||||
vim.keymap.set('n', '<leader>gi', builtin.lsp_implementations)
|
||||
vim.keymap.set('n', '<leader>ci', builtin.lsp_incoming_calls)
|
||||
vim.keymap.set('n', '<leader>co', builtin.lsp_outgoing_calls)
|
22
lua/plugins/venn.lua
Normal file
22
lua/plugins/venn.lua
Normal file
|
@ -0,0 +1,22 @@
|
|||
-- venn.nvim: enable or disable keymappings
|
||||
function _G.Toggle_venn()
|
||||
local venn_enabled = vim.inspect(vim.b.venn_enabled)
|
||||
if venn_enabled == "nil" then
|
||||
vim.b.venn_enabled = true
|
||||
vim.cmd [[setlocal ve=all]]
|
||||
-- draw a line on HJKL keystokes
|
||||
vim.api.nvim_buf_set_keymap(0, "n", "J", "<C-v>j:VBox<CR>", { noremap = true })
|
||||
vim.api.nvim_buf_set_keymap(0, "n", "K", "<C-v>k:VBox<CR>", { noremap = true })
|
||||
vim.api.nvim_buf_set_keymap(0, "n", "L", "<C-v>l:VBox<CR>", { noremap = true })
|
||||
vim.api.nvim_buf_set_keymap(0, "n", "H", "<C-v>h:VBox<CR>", { noremap = true })
|
||||
-- draw a box by pressing "f" with visual selection
|
||||
vim.api.nvim_buf_set_keymap(0, "v", "f", ":VBox<CR>", { noremap = true })
|
||||
else
|
||||
vim.cmd [[setlocal ve=]]
|
||||
vim.cmd [[mapclear <buffer>]]
|
||||
vim.b.venn_enabled = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- toggle keymappings for venn using <leader>v
|
||||
vim.api.nvim_set_keymap('n', '<leader>v', ":lua Toggle_venn()<CR>", { noremap = true })
|
52
lua/settings.lua
Normal file
52
lua/settings.lua
Normal file
|
@ -0,0 +1,52 @@
|
|||
local indent = 4
|
||||
|
||||
vim.opt.shiftwidth = indent
|
||||
vim.opt.tabstop = indent
|
||||
vim.opt.softtabstop = indent
|
||||
vim.opt.scrolloff = indent
|
||||
vim.opt.wildmode = 'list:longest,list:full'
|
||||
vim.opt.expandtab = true
|
||||
vim.opt.smartindent = true
|
||||
vim.opt.hidden = true
|
||||
vim.opt.ignorecase = true
|
||||
vim.opt.shiftround = true
|
||||
vim.opt.smartcase = true
|
||||
vim.opt.splitbelow = true
|
||||
vim.opt.splitright = true
|
||||
vim.opt.number = true
|
||||
vim.opt.clipboard = 'unnamed,unnamedplus'
|
||||
|
||||
vim.opt.autoindent = false
|
||||
vim.opt.smartindent = false
|
||||
vim.opt.errorformat:prepend('%f|%l col %c|%m')
|
||||
vim.opt.fileformat = 'unix'
|
||||
vim.opt.undofile = true
|
||||
|
||||
vim.opt.background = 'light'
|
||||
|
||||
-- Enable vimrc files per project and disable unsafe commands in project vimrc
|
||||
vim.opt.exrc = true
|
||||
vim.opt.secure = true
|
||||
|
||||
vim.api.nvim_create_autocmd('InsertEnter', {
|
||||
callback = function()
|
||||
vim.cmd.hi('clear RedundantSpaces')
|
||||
end,
|
||||
pattern = '*',
|
||||
})
|
||||
vim.api.nvim_create_autocmd({'InsertLeave', 'BufEnter'}, {
|
||||
callback = function()
|
||||
vim.cmd.hi('RedundantSpaces ctermbg=red guibg=red')
|
||||
end,
|
||||
pattern = '*',
|
||||
})
|
||||
|
||||
vim.cmd([[
|
||||
set noautoread
|
||||
autocmd CursorHold * checktime
|
||||
autocmd TextYankPost * lua vim.highlight.on_yank {on_visual = false}
|
||||
autocmd BufRead,BufNewFile *.bu,*.yml.example,*.yaml.example set filetype=yaml
|
||||
autocmd BufRead,BufNewFile *.ign set filetype=json
|
||||
match RedundantSpaces /\s\+$/
|
||||
let g:airline_theme='papercolor'
|
||||
]])
|
94
spell/en.utf-8.add
Normal file
94
spell/en.utf-8.add
Normal file
|
@ -0,0 +1,94 @@
|
|||
Ansible
|
||||
AWS
|
||||
GCP
|
||||
OpenStack
|
||||
CouchDB
|
||||
gRPC
|
||||
Proto
|
||||
Cap'n
|
||||
Protobuf
|
||||
RabbitMQ
|
||||
MQTT
|
||||
ZMQ
|
||||
NoSQL
|
||||
PostgreSQL
|
||||
hackerspace
|
||||
FOSS
|
||||
NGO
|
||||
OSTree
|
||||
CoreOS
|
||||
distro
|
||||
selfhosted
|
||||
Gitea
|
||||
toolset
|
||||
Django
|
||||
AsyncIO
|
||||
async
|
||||
FastAPI
|
||||
gevent
|
||||
uWSGI
|
||||
SqlAlchemy
|
||||
uWSGI's
|
||||
Podman
|
||||
Kubernetes
|
||||
WebAssembly
|
||||
esp32
|
||||
SRE
|
||||
Postgres
|
||||
Clickhouse
|
||||
Mysql
|
||||
Opensearch
|
||||
Ericssons
|
||||
Linköping
|
||||
LabOps
|
||||
Ericsson
|
||||
Gerrit
|
||||
Seavus
|
||||
Hortonworks
|
||||
Ambari
|
||||
Telecommution
|
||||
HDFS
|
||||
TradeCore
|
||||
frontend
|
||||
GitLab
|
||||
ElasticSearch
|
||||
Celerry
|
||||
Itekako
|
||||
scalable
|
||||
JSON
|
||||
RPC
|
||||
TinyRPC
|
||||
FFMpeg
|
||||
Live555
|
||||
dockerizing
|
||||
RedHat
|
||||
Asseko
|
||||
MSSQL
|
||||
Aiven
|
||||
C2
|
||||
Vladan
|
||||
Popovic
|
||||
pagenumbering
|
||||
Bulevar
|
||||
Oslobodjenja
|
||||
gmail
|
||||
vladanovic/!
|
||||
vladanovic
|
||||
microservice
|
||||
transcoding
|
||||
Tox
|
||||
Jinja2
|
||||
Artifactory
|
||||
ESP32
|
||||
Microcontroller
|
||||
SIM800L
|
||||
blox
|
||||
NEO
|
||||
A7670E
|
||||
TCP
|
||||
adminstrator
|
||||
devops
|
||||
COVID
|
||||
microcontrollers
|
||||
codebases
|
||||
OCaml
|
Reference in a new issue